⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cityselectiondialog.cpp

📁 一个基于BREW上的电子时钟程序,通过太阳历计算当前时间,并有闹铃和日志功能.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		// GPS 僨乕僞偺夝愅
		if (_gpsInfo.fValid & AEEGPS_VALID_LON) {
			longitude_f = SFBPosDet::WGS84ToDegrees(_gpsInfo.dwLon);
		}
		else {
			longitude_f = 0.0;
		}
		if (_gpsInfo.fValid & AEEGPS_VALID_LAT) {
			latitude_f = SFBPosDet::WGS84ToDegrees(_gpsInfo.dwLat);
		}
		else {
			latitude_f = 0.0;
		}
		if (_gpsInfo.fValid & AEEGPS_VALID_ALT) {
			height_i = _gpsInfo.wAltitude;
		}
		else {
			height_i = 0;
		}
	}
	else {
		longitude_f = 0.0;
		latitude_f = 0.0;
		height_i = 0;
	}
	if (longitude_f < 0.0) {
		val = static_cast<SInt32>(floor((- longitude_f) * 1000.0 + 0.5));
		longitude_s = SFXWideString::Format("-%d.%d", val / 1000, val % 1000);
	}
	else {
		val = static_cast<SInt32>(floor(longitude_f * 1000.0 + 0.5));
		longitude_s = SFXWideString::Format("+%d.%d", val / 1000, val % 1000);
	}
	if (latitude_f < 0.0) {
		val = static_cast<SInt32>(floor((- latitude_f) * 1000.0 + 0.5));
		latitude_s = SFXWideString::Format("-%d.%d", val / 1000, val % 1000);
	}
	else {
		val = static_cast<SInt32>(floor(latitude_f * 1000.0 + 0.5));
		latitude_s = SFXWideString::Format("+%d.%d", val / 1000, val % 1000);
	}
	height_s = SFXWideString::Format("%d.0", height_i);

	// 搒巗忣曬搊榐僟僀傾儘僌傪昞帵
	_additionDialog = ::new CityAdditionDialog("尰嵼抧", "+0900", longitude_s, latitude_s, height_s);
	if (!_additionDialog) {
		static_throw(SFERR_NO_MEMORY);
	}
	else {
		static_throw(*_additionDialog);
	}
	if (!static_try()) {
		::delete _additionDialog;
		_additionDialog = null;
	}

	// 搒巗忣曬搊榐僟僀傾儘僌梡僜僼僩 僉乕 僀儀儞僩 僴儞僪儔傪搊榐
	if (static_try()) {
		static_throw(_additionDialog->RegisterHandler(static_cast<SFCEventEnum>(SGRSoftkeyWindow::USEREVT_SOFTKEY), HANDLER_AFTER, HANDLER_FUNCTION(OnAdditionDialogSoftKey)));
	}
}

HANDLER_IMPLEMENT_VOIDEVENT(CitySelectionDialog, OnAdditionDialogSoftKey, event)
{
	CityAdditionDialog::NewCityInformation cityInfo;
	SFRMultiDialogPtr errorDialog(null);
	SFRMultiDialog::ParamRec param;
	pclockPtr app(static_cast<pclockPtr>(SFRApplication::GetInstance()));
	CityInformationPtr appCityInfo(app->GetCityInformationPointer());
	Bool appended(false);
	SInt32 index(0);

	_invalidTextControl = null;
	switch (event.GetP16()) {
	case SGRSoftkeyWindow::SOFTKEY_1:
		// 搊榐
		if (_additionDialog) {
			cityInfo = _additionDialog->GetNewCityInformation();
			if (!cityInfo._errorMessage.IsEmptyCString()) {
				// 晄惓側抣偑擖椡偝傟偰偄偨
				_invalidTextControl = cityInfo._invalidControl;
				param.text = cityInfo._errorMessage;
				param.ok = "Ok";
				param.cancel = "";
				param.another = "";
				param.focus = SFRMultiDialog::FOCUS_OK;
				param.image = SFBShell::GetInstance()->LoadResImage(PCLOCK_RESOURCE_FILENAME, CANCEL);
				errorDialog = ::new SFRMultiDialog(SGRSoftkeyToolbox::GetDialogPosition(SFRMultiDialog::GetMargin(), CITYSELECTIONDIALOG_ERRORDIALOG_HEIGHT), "僄儔乕", param);
				if (!errorDialog) {
					static_throw(SFERR_NO_MEMORY);
				}
				else {
					static_throw(*errorDialog);
				}
				if (static_try()) {
					SGRSoftkeyToolbox::OpenStandardDialog(errorDialog, HANDLER_FUNCTION(OnErrorDialog));
				}
				else {
					::delete errorDialog;
					errorDialog = null;
				}
			}
			else {
				// 惓偟偄抣偑擖椡偝傟偰偄偨
				_additionDialog->Invoke(SFXEvent(SREVT_RESPONDER_TERMINATE, SRP16_TERMINATE_INVOKE, true));
				_additionDialog = null;
				if (_listBox) {
					_listBox->SetStatusTarget(true);
				}
				if (appCityInfo->Append(cityInfo._name, cityInfo._timeDifference, cityInfo._longitude, cityInfo._latitude, cityInfo._height, &appended, &index) != SFERR_NO_ERROR) {
					// 儊儌儕晄懌偱搊榐偱偒側偐偭偨
					param.text = "搊榐偵幐攕偟傑偟偨丅";
					param.ok = "Ok";
					param.cancel = "";
					param.another = "";
					param.focus = SFRMultiDialog::FOCUS_OK;
					param.image = SFBShell::GetInstance()->LoadResImage(PCLOCK_RESOURCE_FILENAME, CANCEL);
					errorDialog = ::new SFRMultiDialog(SGRSoftkeyToolbox::GetDialogPosition(SFRMultiDialog::GetMargin(), CITYSELECTIONDIALOG_ERRORDIALOG_HEIGHT), "僄儔乕", param);
					if (!errorDialog) {
						static_throw(SFERR_NO_MEMORY);
					}
					else {
						static_throw(*errorDialog);
					}
					if (static_try()) {
						SGRSoftkeyToolbox::OpenStandardDialog(errorDialog, HANDLER_FUNCTION(OnErrorDialog));
					}
					else {
						::delete errorDialog;
						errorDialog = null;
					}
				}
				else {
					if (appended) {
						// 怴婯搊榐
						static_throw(_listBox->Append(cityInfo._name));
					}
					_listBox->SetSelect(static_cast<SInt16>(index));
				}
			}
		}
		break;
	case SGRSoftkeyWindow::SOFTKEY_2:
		// 庢徚
		if (_additionDialog) {
			_additionDialog->Invoke(SFXEvent(SREVT_RESPONDER_TERMINATE, SRP16_TERMINATE_INVOKE, true));
		}
		break;
	}
}

HANDLER_IMPLEMENT_VOIDDIALOG(CitySelectionDialog, OnErrorDialog, result, dialog)
{
	unused(result);

	SGRSoftkeyToolbox::CloseStandardDialog(dialog);
	if (_invalidTextControl) {
		_invalidTextControl->SetStatusFocus(true);
	}
	else if (_listBox) {
		_listBox->SetStatusTarget(true);
	}
}

HANDLER_IMPLEMENT_VOIDDIALOG(CitySelectionDialog, OnRemoveErrorDialog, result, dialog)
{
	unused(result);

	SGRSoftkeyToolbox::CloseStandardDialog(dialog);
	if (_listBox) {
		_listBox->SetStatusTarget(true);
	}
}

HANDLER_IMPLEMENT_VOIDDIALOG(CitySelectionDialog, OnRemoveDialog, result, dialog)
{
	pclockPtr app(static_cast<pclockPtr>(SFRApplication::GetInstance()));
	CityInformationPtr cityInfo(app->GetCityInformationPointer());
	SInt32 index(0);

	switch (result) {
	case SRP16_OK:
		SGRSoftkeyToolbox::CloseStandardDialog(dialog);
		if (_listBox) {
			index = _listBox->GetSelect();
			cityInfo->Remove(index);
			_listBox->Remove(static_cast<SInt16>(index));
			_listBox->SetStatusTarget(true);
		}
		break;
	case SRP16_ESCAPE:
	case SRP16_CANCEL:
		SGRSoftkeyToolbox::CloseStandardDialog(dialog);
		if (_listBox) {
			_listBox->SetStatusTarget(true);
		}
		break;
	}
}

// 儃僞儞側偟僟僀傾儘僌偺僀儀儞僩僴儞僪儔
// 僉乕 僀儀儞僩偼栤摎柍梡偱幪偰傞
HANDLER_IMPLEMENT_BOOLEVENT(CitySelectionDialog, OnNoButtonDialogKey, event)
{
	unused(event);
	return true;
}

// 僜僼僩 僉乕 僀儀儞僩偼栤摎柍梡偱幪偰傞
HANDLER_IMPLEMENT_VOIDEVENT(CitySelectionDialog, OnNoButtonDialogSoftkey, event)
{
	unused(event);
}
HANDLER_IMPLEMENT_VOIDRESUME(CitySelectionDialog, OnResume, environment)
{
	unused(environment);

	SInt32 result(SUCCESS);

	if (_gpsDialog) {
		SFXHelper::memset(&_gpsCallback, 0, sizeof(_gpsCallback));
		SFXHelper::memset(&_gpsInfo, 0, sizeof(_gpsInfo));
		CALLBACK_Init(&_gpsCallback, OnGPSNotifySPP, this);
		result = _posDet->GetGPSInfo(AEEGPS_GETINFO_LOCATION | AEEGPS_GETINFO_ALTITUDE, AEEGPS_ACCURACY_LEVEL6, &_gpsInfo, &_gpsCallback);
		if (result != SUCCESS) {
			// GPS 偺婲摦偵幐攕
			CALLBACK_Cancel(&_gpsCallback);
			_posDet.Release();
			OnGPS(false);
		}
	}
}

HANDLER_IMPLEMENT_VOIDSUSPEND(CitySelectionDialog, OnSuspend, reason, info)
{
	unused(reason);
	unused(info);

	// 僒僗儁儞僪帪偵偼丄GPS 傪廔椆偡傞
	CALLBACK_Cancel(&_gpsCallback);
	_posDet.Release();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -