📄 cityselectiondialog.cpp
字号:
//
// CitySelectionDialog.cpp
//
// Copyright (C) 2006 Sophia Cradle Incorporated
#include "CitySelectionDialog.hpp"
#include "SGRSoftkeyWindow.hpp"
#include "SGRSoftkeyToolbox.hpp"
#include "pclock.hpp"
#include "CityInformation.hpp"
#define CITYSELECTIONDIALOG_LABEL_SOFTKEY1 "捛壛"
#define CITYSELECTIONDIALOG_LABEL_SOFTKEY2 "嶍彍"
#define CITYSELECTIONDIALOG_LABEL_SOFTKEY3 "慖戰"
#define CITYSELECTIONDIALOG_ERRORDIALOG_HEIGHT 220
#define CITYSELECTIONDIALOG_REMOVEDIALOG_HEIGHT 220
CitySelectionDialog::CitySelectionDialog(Void) static_throws : SFRTitleWindow(SFRApplication::GetInstance(), SGRSoftkeyToolbox::GetWindowPosition(), "搒巗偺愝掕"), _listBox(null), _additionDialog(null), _gpsDialog(null), _invalidTextControl(null)
{
SInt16Const fontHeight(SFXGraphics::GetFontHeight(AEE_FONT_NORMAL));
SFXRectangleConst displayRect(GetContentWorld());
pclockPtr app(static_cast<pclockPtr>(SFRApplication::GetInstance()));
CityInformationPtr cityInfo(app->GetCityInformationPointer());
CityInformation::CITY city;
SInt32 i;
SGRSoftkeyWindowPtr softkey;
SGRSoftkeyWindow::Initialize(this);
_textRect.SetSize(displayRect.GetWidth(), fontHeight * 2);
_textRect.SetOrigin(displayRect.GetOrigin());
_listBoxRect = displayRect;
_listBoxRect.Deflate(20, _textRect.GetHeight(), 20, 10);
_textRect.Deflate(10, 0, 10, 0);
_listBox = ::new SGRListboxControl(this, _listBoxRect);
if (!_listBox) {
static_throw(SFERR_NO_MEMORY);
}
else {
static_throw(*_listBox);
}
if (!static_try()) {
::delete _listBox;
_listBox = null;
}
else {
for (i = 0; i < cityInfo->GetSize(); ++i) {
city = cityInfo->Get(i);
static_throw(_listBox->Append(city._name));
if (!static_try()) {
break;
}
}
}
if (static_try()) {
static_throw(RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT, HANDLER_BEFORE, HANDLER_FUNCTION(OnContent)));
}
if (static_try()) { // 儗僕儏乕儉
static_throw(RegisterHandler(SFEVT_APP_RESUME, HANDLER_BEFORE, HANDLER_FUNCTION(OnResume)));
}
if (static_try()) { // 僒僗儁儞僪
static_throw(RegisterHandler(SFEVT_APP_SUSPEND, HANDLER_AFTER, HANDLER_FUNCTION(OnSuspend)));
}
if (static_try()) {
static_throw(RegisterHandler(static_cast<SFCEventEnum>(SGRSoftkeyWindow::USEREVT_SOFTKEY), HANDLER_AFTER, HANDLER_FUNCTION(OnSoftkey)));
}
if (static_try()) {
if ((softkey = SGRSoftkeyWindow::GetInstance()) != null) {
static_throw(softkey->Register(this, SGRSoftkeyWindow::SOFTKEY_1, CITYSELECTIONDIALOG_LABEL_SOFTKEY1));
if (static_try()) {
static_throw(softkey->Register(this, SGRSoftkeyWindow::SOFTKEY_2, CITYSELECTIONDIALOG_LABEL_SOFTKEY2));
}
if (static_try()) {
static_throw(softkey->Register(this, SGRSoftkeyWindow::SOFTKEY_3, CITYSELECTIONDIALOG_LABEL_SOFTKEY3));
}
if (static_try()) {
SetReference(softkey->Bind(this));
}
}
}
if (_listBox) {
_listBox->SetSelect(static_cast<SInt16>(cityInfo->Find(app->GetCurrentCity())));
_listBox->SetStatusTarget(true);
}
SFXHelper::memset(&_gpsCallback, 0, sizeof(_gpsCallback));
SFXHelper::memset(&_gpsInfo, 0, sizeof(_gpsInfo));
CALLBACK_Init(&_gpsCallback, OnGPSNotifySPP, this);
}
CitySelectionDialog::~CitySelectionDialog(Void)
{
CALLBACK_Cancel(&_gpsCallback);
SGRSoftkeyWindow::Terminate(this);
}
HANDLER_IMPLEMENT_VOIDRENDER(CitySelectionDialog, OnContent, graphics)
{
graphics->ClearRectangle(GetContentWorld());
graphics->DrawText("搒巗傪慖戰偟偰偔偩偝偄 :", _textRect, SFXRGBColor(0, 0, 0, 0), IDF_ALIGN_LEFT | IDF_ALIGN_MIDDLE);
}
HANDLER_IMPLEMENT_VOIDEVENT(CitySelectionDialog, OnSoftkey, event)
{
SInt32 result(SUCCESS), index(0);
SFXRectangle display, rect;
SFRMultiDialogPtr dialog;
SFRMultiDialog::ParamRec param;
pclockPtr app(static_cast<pclockPtr>(SFRApplication::GetInstance()));
CityInformationPtr cityInfo(app->GetCityInformationPointer());
CityInformation::CITY city;
SGRSoftkeyWindowPtr softkey(null);
switch (event.GetP16()) {
case SGRSoftkeyWindow::SOFTKEY_1:
// 怴偟偄搒巗偺捛壛
// 埵抲忣曬傪庢摼拞偱偁傞巪傪昞帵
display.Set(SGRSoftkeyToolbox::GetWindowPosition());
rect.SetSize(display.GetWidth() - 20, SFXGraphics::GetFontHeight(AEE_FONT_NORMAL) * 2);
rect.SnapLeftTop(display.GetLeftTop());
rect.Offset((display.GetWidth() - rect.GetWidth()) / 2, (display.GetHeight() - rect.GetHeight()) / 2);
_gpsDialog = ::new SFRMessageDialog(rect, "埵抲忣曬庢摼拞...", "");
if (!_gpsDialog) {
static_throw(SFERR_NO_MEMORY);
}
else {
static_throw(*_gpsDialog);
}
if (!static_try()) {
::delete _gpsDialog;
_gpsDialog = null;
}
else {
static_throw(_gpsDialog->RegisterHandler(SFEVT_KEY, HANDLER_BEFORE, HANDLER_FUNCTION(OnNoButtonDialogKey)));
}
if (static_try()) {
SGRSoftkeyWindow::Initialize(_gpsDialog);
static_throw(_gpsDialog->RegisterHandler(static_cast<SFCEventEnum>(SGRSoftkeyWindow::USEREVT_SOFTKEY), HANDLER_BEFORE, HANDLER_FUNCTION(OnNoButtonDialogSoftkey)));
}
softkey = SGRSoftkeyWindow::GetInstance();
if (softkey && static_try()) {
_gpsDialog->SetReference(softkey->Bind(_gpsDialog));
}
if (_gpsDialog) {
SFRApplication::GetInstance()->Invoke(SFXEvent(SREVT_RESPONDER_RENDER, SRP16_RENDER_INVOKE, true));
}
// GPS 偺婲摦
_posDet = SFBPosDet::NewInstance();
if (_posDet == null) {
OnGPS(false);
}
else {
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);
}
}
break;
case SGRSoftkeyWindow::SOFTKEY_2:
// 搒巗忣曬偺嶍彍
if (cityInfo->GetSize() <= 1) {
// 嵟掅 1 偮偼昁梫
param.text = "搒巗忣曬偼彮側偔偲傕 1 偮偼昁梫偱偡丅";
param.ok = "Ok";
param.cancel = "";
param.another = "";
param.focus = SFRMultiDialog::FOCUS_OK;
param.image = SFBShell::GetInstance()->LoadResImage(PCLOCK_RESOURCE_FILENAME, CANCEL);
dialog = ::new SFRMultiDialog(SGRSoftkeyToolbox::GetDialogPosition(SFRMultiDialog::GetMargin(), CITYSELECTIONDIALOG_ERRORDIALOG_HEIGHT), "僄儔乕", param);
if (!dialog) {
static_throw(SFERR_NO_MEMORY);
}
else {
static_throw(*dialog);
}
if (!static_try()) {
::delete dialog;
dialog = null;
}
else {
SGRSoftkeyToolbox::OpenStandardDialog(dialog, HANDLER_FUNCTION(OnRemoveErrorDialog));
}
}
else {
// 嶍彍偺妋擣
if (_listBox) {
index = _listBox->GetSelect();
city = cityInfo->Get(index);
param.text = "\"" + city._name + "\" 傪嶍彍偟傑偡丅傛傠偟偄偱偡偐?";
param.ok = "偼偄";
param.cancel = "偄偄偊";
param.another = "";
param.focus = SFRMultiDialog::FOCUS_CANCEL;
param.image = SFBShell::GetInstance()->LoadResImage(PCLOCK_RESOURCE_FILENAME, ACCEPT);
dialog = ::new SFRMultiDialog(SGRSoftkeyToolbox::GetDialogPosition(SFRMultiDialog::GetMargin(), CITYSELECTIONDIALOG_REMOVEDIALOG_HEIGHT), "妋擣", param);
if (!dialog) {
static_throw(SFERR_NO_MEMORY);
}
else {
static_throw(*dialog);
}
if (!static_try()) {
::delete dialog;
dialog = null;
}
else {
SGRSoftkeyToolbox::OpenStandardDialog(dialog, HANDLER_FUNCTION(OnRemoveDialog));
}
}
}
break;
}
}
// GPS 廔椆屻偺張棟
// valid = true 偺応崌丄GPS偺忣曬傪巊偭偰僟僀傾儘僌傪弶婜壔
Void CitySelectionDialog::OnGPS(Bool valid)
{
Float64 longitude_f, latitude_f;
SInt32 val, height_i;
SFXWideString longitude_s, latitude_s, height_s;
pclockPtr app(static_cast<pclockPtr>(SFRApplication::GetInstance()));
if (_gpsDialog) {
if (_gpsDialog->GetIndexForward() == 0) {
SGRSoftkeyWindow::Terminate(_gpsDialog);
_gpsDialog->DialogHandler();
_gpsDialog = null;
}
else {
app->SetRemoveDialog(_gpsDialog);
_gpsDialog = null;
}
}
if (valid) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -