📄 cityselectiondialog.cpp
字号:
// 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 + -