/** * Does this device have a keyboard device? * @return True if a keyboard is assumed for the hardware * that XCSoar is running on, False if the hardware has no keyboard */ constexpr static inline bool HasKeyboard() { return !IsEmbedded(); }
int WndForm::ShowModal() { AssertNoneLocked(); #ifndef USE_GDI ContainerWindow *root = GetRootOwner(); WindowReference old_focus_reference = root->GetFocusedWindowReference(); #else HWND oldFocusHwnd; #endif /* USE_GDI */ PeriodClock enter_clock; if (IsEmbedded() && !IsAltair()) enter_clock.Update(); ShowOnTop(); modal_result = 0; SingleWindow &main_window = GetMainWindow(); main_window.CancelMode(); #ifdef USE_GDI oldFocusHwnd = ::GetFocus(); #endif /* USE_GDI */ SetDefaultFocus(); bool hastimed = false; main_window.AddDialog(this); #ifndef USE_GDI main_window.Refresh(); #endif #if defined(ANDROID) || defined(USE_POLL_EVENT) || defined(ENABLE_SDL) EventLoop loop(*event_queue, main_window); #else DialogEventLoop loop(*event_queue, *this); #endif Event event; while ((modal_result == 0 || force) && loop.Get(event)) { if (!main_window.FilterEvent(event, this)) { if (modeless && event.IsMouseDown()) break; else continue; } // hack to stop exiting immediately if (IsEmbedded() && !IsAltair() && !hastimed && event.IsUserInput()) { if (!enter_clock.Check(200)) /* ignore user input in the first 200ms */ continue; else hastimed = true; } if (event.IsKeyDown()) { if (OnAnyKeyDown(event.GetKeyCode())) continue; #ifdef ENABLE_SDL if (event.GetKeyCode() == SDLK_TAB) { /* the Tab key moves the keyboard focus */ #if SDL_MAJOR_VERSION >= 2 const Uint8 *keystate = ::SDL_GetKeyboardState(nullptr); event.event.key.keysym.sym = keystate[SDL_SCANCODE_LSHIFT] || keystate[SDL_SCANCODE_RSHIFT] ? SDLK_UP : SDLK_DOWN; #else const Uint8 *keystate = ::SDL_GetKeyState(nullptr); event.event.key.keysym.sym = keystate[SDLK_LSHIFT] || keystate[SDLK_RSHIFT] ? SDLK_UP : SDLK_DOWN; #endif } #endif if ( #ifdef USE_GDI IdentifyDescendant(event.msg.hwnd) && #endif (event.GetKeyCode() == KEY_UP || event.GetKeyCode() == KEY_DOWN)) { /* KEY_UP and KEY_DOWN move the focus only within the current control group - but we want it to behave like Shift-Tab and Tab */ if (!CheckKey(this, event)) { /* this window doesn't handle KEY_UP/KEY_DOWN */ if (event.GetKeyCode() == KEY_DOWN) FocusNextControl(); else FocusPreviousControl(); continue; } } #if !defined USE_GDI || defined _WIN32_WCE /* The Windows CE dialog manager does not handle KEY_ESCAPE and so we have to do it by ourself */ // On Altair, the RemoteKey ("E" Button) shall also close the analyse-page if (IsAltair()) { #ifdef GNAV if (event.GetKeyCode() == KEY_ESCAPE || event.GetKeyCode() == KEY_F15) { modal_result = mrOK; continue; } #endif } else if (event.GetKeyCode() == KEY_ESCAPE) { modal_result = mrCancel; continue; } #endif #ifdef USE_LINUX_INPUT if (event.GetKeyCode() == KEY_POWER) { /* the Kobo power button closes the modal dialog */ modal_result = mrCancel; continue; } #endif } if (character_function && (event.GetCharacterCount() > 0)) { bool handled = false; for (size_t i = 0; i < event.GetCharacterCount(); ++i) handled = character_function(event.GetCharacter(i)) || handled; if (handled) continue; } loop.Dispatch(event); } // End Modal Loop main_window.RemoveDialog(this); #ifdef USE_GDI ::SetFocus(oldFocusHwnd); #else if (old_focus_reference.Defined()) { Window *old_focus = old_focus_reference.Get(*root); if (old_focus != nullptr) old_focus->SetFocus(); } #endif /* !USE_GDI */ return modal_result; }
/** * Creates a control from the given XMLNode as a child of the given * parent. * * @param form the SubForm object * @param LookUpTable The parent CallBackTable * @param node The XMLNode that represents the control */ static Window * LoadChild(SubForm &form, ContainerWindow &parent, const CallBackTableEntry *lookup_table, XMLNode node, int bottom_most, WindowStyle style) { Window *window = NULL; // Determine name, coordinates, width, height // and caption of the control const TCHAR* name = GetName(node); const TCHAR* caption = GetCaption(node); PixelRect rc = parent.get_client_rect(); ControlPosition pos = GetPosition(node, rc, bottom_most); if (!pos.no_scaling) pos.x = ScaleWidth(pos.x); ControlSize size = GetSize(node, rc, pos); if (!size.no_scaling) size.cx = ScaleWidth(size.cx); if (!StringToIntDflt(node.getAttribute(_T("Visible")), 1)) style.Hide(); if (StringToIntDflt(node.getAttribute(_T("Border")), 0)) style.Border(); rc.left = pos.x; rc.top = pos.y; rc.right = rc.left + size.cx; rc.bottom = rc.top + size.cy; bool expert = (StringToIntDflt(node.getAttribute(_T("Expert")), 0) == 1); // PropertyControl (WndProperty) if (StringIsEqual(node.getName(), _T("Edit"))) { // Determine the width of the caption field int caption_width = StringToIntDflt(node.getAttribute(_T("CaptionWidth")), 0); if (Layout::ScaleSupported()) caption_width = Layout::Scale(caption_width); caption_width = ScaleWidth(caption_width); // Determine whether the control is multiline or readonly bool multi_line = StringToIntDflt(node.getAttribute(_T("MultiLine")), 0); bool read_only = StringToIntDflt(node.getAttribute(_T("ReadOnly")), 0); // Load the event callback properties WndProperty::DataChangeCallback_t data_notify_callback = (WndProperty::DataChangeCallback_t) GetCallBack(lookup_table, node, _T("OnDataNotify")); WindowControl::HelpCallback help_callback = (WindowControl::HelpCallback) GetCallBack(lookup_table, node, _T("OnHelp")); // Create the Property Control style.ControlParent(); EditWindowStyle edit_style; edit_style.vertical_center(); if (read_only) edit_style.read_only(); else edit_style.TabStop(); if (IsEmbedded() || Layout::scale_1024 < 2048) /* sunken edge doesn't fit well on the tiny screen of an embedded device */ edit_style.Border(); else edit_style.SunkenEdge(); if (multi_line) { edit_style.multiline(); edit_style.VerticalScroll(); } WndProperty *property; window = property = new WndProperty(parent, *xml_dialog_look, caption, rc, caption_width, style, edit_style, data_notify_callback); // Set the help function event callback property->SetOnHelpCallback(help_callback); // Load the help text property->SetHelpText(StringToStringDflt(node.getAttribute(_T("Help")), NULL)); // If the control has (at least) one DataField child control const XMLNode *data_field_node = node.getChildNode(_T("DataField")); if (data_field_node != NULL) { // -> Load the first DataField control DataField *data_field = LoadDataField(*data_field_node, lookup_table); if (data_field != NULL) // Tell the Property control about the DataField control property->SetDataField(data_field); } } else if (StringIsEqual(node.getName(), _T("TextEdit"))) { // Determine whether the control is multiline or readonly bool multi_line = StringToIntDflt(node.getAttribute(_T("MultiLine")), 0); bool read_only = StringToIntDflt(node.getAttribute(_T("ReadOnly")), 0); EditWindowStyle edit_style(style); if (read_only) edit_style.read_only(); else edit_style.TabStop(); if (IsEmbedded() || Layout::scale_1024 < 2048) /* sunken edge doesn't fit well on the tiny screen of an embedded device */ edit_style.Border(); else edit_style.SunkenEdge(); if (multi_line) { edit_style.multiline(); edit_style.VerticalScroll(); } EditWindow *edit; window = edit = new EditWindow(); edit->set(parent, pos.x, pos.y, size.cx, size.cy, edit_style); edit->InstallWndProc(); edit->set_font(*xml_dialog_look->text_font); // ButtonControl (WndButton) } else if (StringIsEqual(node.getName(), _T("Button"))) { // Determine ClickCallback function WndButton::ClickNotifyCallback click_callback = (WndButton::ClickNotifyCallback) GetCallBack(lookup_table, node, _T("OnClick")); // Create the ButtonControl ButtonWindowStyle button_style(style); button_style.TabStop(); button_style.multiline(); window = new WndButton(parent, *xml_dialog_look, caption, rc, button_style, click_callback); } else if (StringIsEqual(node.getName(), _T("CheckBox"))) { // Determine click_callback function CheckBoxControl::ClickNotifyCallback click_callback = (CheckBoxControl::ClickNotifyCallback) GetCallBack(lookup_table, node, _T("OnClick")); // Create the CheckBoxControl style.TabStop(); window = new CheckBoxControl(parent, *xml_dialog_look, caption, rc, style, click_callback); // SymbolButtonControl (WndSymbolButton) not used yet } else if (StringIsEqual(node.getName(), _T("SymbolButton"))) { // Determine ClickCallback function WndButton::ClickNotifyCallback click_callback = (WndButton::ClickNotifyCallback) GetCallBack(lookup_table, node, _T("OnClick")); // Create the SymbolButtonControl style.TabStop(); window = new WndSymbolButton(parent, *xml_dialog_look, caption, rc, style, click_callback); // PanelControl (WndPanel) } else if (StringIsEqual(node.getName(), _T("Panel"))) { // Create the PanelControl style.ControlParent(); PanelControl *frame = new PanelControl(parent, *xml_dialog_look, rc, style); window = frame; // Load children controls from the XMLNode LoadChildrenFromXML(form, *frame, lookup_table, &node); // KeyboardControl } else if (StringIsEqual(node.getName(), _T("Keyboard"))) { KeyboardControl::OnCharacterCallback_t character_callback = (KeyboardControl::OnCharacterCallback_t) GetCallBack(lookup_table, node, _T("OnCharacter")); // Create the KeyboardControl KeyboardControl *kb = new KeyboardControl(parent, *xml_dialog_look, pos.x, pos.y, size.cx, size.cy, character_callback, style); window = kb; // DrawControl (WndOwnerDrawFrame) } else if (StringIsEqual(node.getName(), _T("Canvas"))) { // Determine DrawCallback function WndOwnerDrawFrame::OnPaintCallback_t paint_callback = (WndOwnerDrawFrame::OnPaintCallback_t) GetCallBack(lookup_table, node, _T("OnPaint")); // Create the DrawControl WndOwnerDrawFrame* canvas = new WndOwnerDrawFrame(parent, pos.x, pos.y, size.cx, size.cy, style, paint_callback); window = canvas; // FrameControl (WndFrame) } else if (StringIsEqual(node.getName(), _T("Label"))){ // Create the FrameControl WndFrame* frame = new WndFrame(parent, *xml_dialog_look, pos.x, pos.y, size.cx, size.cy, style); // Set the caption frame->SetCaption(caption); // Set caption color Color color; if (StringToColor(node.getAttribute(_T("CaptionColor")), color)) frame->SetCaptionColor(color); window = frame; // ListBoxControl (WndListFrame) } else if (StringIsEqual(node.getName(), _T("List"))){ // Determine ItemHeight of the list items UPixelScalar item_height = Layout::Scale(StringToIntDflt(node.getAttribute(_T("ItemHeight")), 18)); // Create the ListBoxControl style.TabStop(); if (IsEmbedded() || Layout::scale_1024 < 2048) /* sunken edge doesn't fit well on the tiny screen of an embedded device */ style.Border(); else style.SunkenEdge(); window = new WndListFrame(parent, *xml_dialog_look, pos.x, pos.y, size.cx, size.cy, style, item_height); // TabControl (Tabbed) } else if (StringIsEqual(node.getName(), _T("Tabbed"))) { // Create the TabControl style.ControlParent(); TabbedControl *tabbed = new TabbedControl(parent, pos.x, pos.y, size.cx, size.cy, style); window = tabbed; for (auto i = node.begin(), end = node.end(); i != end; ++i) { // Load each child control from the child nodes Window *child = LoadChild(form, *tabbed, lookup_table, *i); if (child != NULL) tabbed->AddClient(child); } // TabBarControl (TabBar) } else if (StringIsEqual(node.getName(), _T("TabBar"))) { // Create the TabBarControl bool flip_orientation = false; if ( (Layout::landscape && StringToIntDflt(node.getAttribute(_T("Horizontal")), 0)) || (!Layout::landscape && StringToIntDflt(node.getAttribute(_T("Vertical")), 0) ) ) flip_orientation = true; style.ControlParent(); TabBarControl *tabbar = new TabBarControl(parent, *xml_dialog_look, pos.x, pos.y, size.cx, size.cy, style, flip_orientation); window = tabbar; // TabMenuControl (TabMenu) } else if (StringIsEqual(node.getName(), _T("TabMenu"))) { // Create the TabMenuControl style.ControlParent(); TabMenuControl *tabmenu = new TabMenuControl(parent, /* XXX this cast is an ugly hack! Please rewrite: */ (WndForm &)form, *xml_dialog_look, caption, pos.x, pos.y, size.cx, size.cy, style); window = tabmenu; } else if (StringIsEqual(node.getName(), _T("Custom"))) { // Create a custom Window object with a callback CreateWindowCallback_t create_callback = (CreateWindowCallback_t)GetCallBack(lookup_table, node, _T("OnCreate")); if (create_callback == NULL) return NULL; window = create_callback(parent, pos.x, pos.y, size.cx, size.cy, style); } else if (StringIsEqual(node.getName(), _T("Widget"))) { style.ControlParent(); DockWindow *dock = new DockWindow(); dock->set(parent, rc, style); window = dock; } if (window != NULL) { if (!StringIsEmpty(name)) form.AddNamed(name, window); if (expert) form.AddExpert(window); form.AddDestruct(window); } return window; }
/** * Does this device have a keyboard device? * @return True if a keyboard is assumed for the hardware * that XCSoar is running on, False if the hardware has no keyboard */ gcc_constexpr_function static inline bool HasKeyboard() { return !IsEmbedded(); }
bool CPDF_CIDFont::Load() { if (m_pFontDict->GetStringFor("Subtype") == "TrueType") { LoadGB2312(); return true; } const CPDF_Array* pFonts = m_pFontDict->GetArrayFor("DescendantFonts"); if (!pFonts || pFonts->size() != 1) return false; const CPDF_Dictionary* pCIDFontDict = pFonts->GetDictAt(0); if (!pCIDFontDict) return false; m_BaseFont = pCIDFontDict->GetStringFor("BaseFont"); if ((m_BaseFont.Compare("CourierStd") == 0 || m_BaseFont.Compare("CourierStd-Bold") == 0 || m_BaseFont.Compare("CourierStd-BoldOblique") == 0 || m_BaseFont.Compare("CourierStd-Oblique") == 0) && !IsEmbedded()) { m_bAdobeCourierStd = true; } const CPDF_Dictionary* pFontDesc = pCIDFontDict->GetDictFor("FontDescriptor"); if (pFontDesc) LoadFontDescriptor(pFontDesc); CPDF_Object* pEncoding = m_pFontDict->GetDirectObjectFor("Encoding"); if (!pEncoding) return false; ByteString subtype = pCIDFontDict->GetStringFor("Subtype"); m_bType1 = (subtype == "CIDFontType0"); CPDF_CMapManager* manager = GetFontGlobals()->GetCMapManager(); if (pEncoding->IsName()) { ByteString cmap = pEncoding->GetString(); m_pCMap = manager->GetPredefinedCMap(cmap); if (!m_pCMap) return false; } else if (CPDF_Stream* pStream = pEncoding->AsStream()) { auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(pStream); pAcc->LoadAllDataFiltered(); m_pCMap = pdfium::MakeRetain<CPDF_CMap>(); m_pCMap->LoadEmbedded(pAcc->GetSpan()); } else { return false; } m_Charset = m_pCMap->GetCharset(); if (m_Charset == CIDSET_UNKNOWN) { const CPDF_Dictionary* pCIDInfo = pCIDFontDict->GetDictFor("CIDSystemInfo"); if (pCIDInfo) { m_Charset = CPDF_CMapParser::CharsetFromOrdering( pCIDInfo->GetStringFor("Ordering").AsStringView()); } } if (m_Charset != CIDSET_UNKNOWN) { m_pCID2UnicodeMap = manager->GetCID2UnicodeMap(m_Charset); } if (m_Font.GetFace()) { if (m_bType1) FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE); else FT_UseCIDCharmap(m_Font.GetFace(), m_pCMap->GetCoding()); } m_DefaultWidth = pCIDFontDict->GetIntegerFor("DW", 1000); const CPDF_Array* pWidthArray = pCIDFontDict->GetArrayFor("W"); if (pWidthArray) LoadMetricsArray(pWidthArray, &m_WidthList, 1); if (!IsEmbedded()) LoadSubstFont(); const CPDF_Object* pmap = pCIDFontDict->GetDirectObjectFor("CIDToGIDMap"); if (pmap) { if (const CPDF_Stream* pStream = pmap->AsStream()) { m_pStreamAcc = pdfium::MakeRetain<CPDF_StreamAcc>(pStream); m_pStreamAcc->LoadAllDataFiltered(); } else if (m_pFontFile && pmap->GetString() == "Identity") { m_bCIDIsGID = true; } } CheckFontMetrics(); if (IsVertWriting()) { pWidthArray = pCIDFontDict->GetArrayFor("W2"); if (pWidthArray) LoadMetricsArray(pWidthArray, &m_VertMetrics, 3); const CPDF_Array* pDefaultArray = pCIDFontDict->GetArrayFor("DW2"); if (pDefaultArray) { m_DefaultVY = pDefaultArray->GetIntegerAt(0); m_DefaultW1 = pDefaultArray->GetIntegerAt(1); } } return true; }
bool CPDF_CIDFont::Load() { if (m_pFontDict->GetStringFor("Subtype") == "TrueType") { LoadGB2312(); return true; } CPDF_Array* pFonts = m_pFontDict->GetArrayFor("DescendantFonts"); if (!pFonts || pFonts->GetCount() != 1) return false; CPDF_Dictionary* pCIDFontDict = pFonts->GetDictAt(0); if (!pCIDFontDict) return false; m_BaseFont = pCIDFontDict->GetStringFor("BaseFont"); if ((m_BaseFont.Compare("CourierStd") == 0 || m_BaseFont.Compare("CourierStd-Bold") == 0 || m_BaseFont.Compare("CourierStd-BoldOblique") == 0 || m_BaseFont.Compare("CourierStd-Oblique") == 0) && !IsEmbedded()) { m_bAdobeCourierStd = true; } CPDF_Dictionary* pFontDesc = pCIDFontDict->GetDictFor("FontDescriptor"); if (pFontDesc) LoadFontDescriptor(pFontDesc); CPDF_Object* pEncoding = m_pFontDict->GetDirectObjectFor("Encoding"); if (!pEncoding) return false; CFX_ByteString subtype = pCIDFontDict->GetStringFor("Subtype"); m_bType1 = (subtype == "CIDFontType0"); CPDF_CMapManager& manager = GetFontGlobals()->m_CMapManager; if (pEncoding->IsName()) { CFX_ByteString cmap = pEncoding->GetString(); bool bPromptCJK = m_pFontFile && m_bType1; m_pCMap = manager.GetPredefinedCMap(cmap, bPromptCJK); if (!m_pCMap) return false; } else if (CPDF_Stream* pStream = pEncoding->AsStream()) { m_pCMap = new CPDF_CMap; m_pAllocatedCMap.reset(m_pCMap); CPDF_StreamAcc acc; acc.LoadAllData(pStream, false); m_pCMap->LoadEmbedded(acc.GetData(), acc.GetSize()); } else { return false; } m_Charset = m_pCMap->m_Charset; if (m_Charset == CIDSET_UNKNOWN) { CPDF_Dictionary* pCIDInfo = pCIDFontDict->GetDictFor("CIDSystemInfo"); if (pCIDInfo) { m_Charset = CharsetFromOrdering(pCIDInfo->GetStringFor("Ordering").AsStringC()); } } if (m_Charset != CIDSET_UNKNOWN) { bool bPromptCJK = !m_pFontFile && (m_pCMap->m_Coding == CIDCODING_CID || pCIDFontDict->KeyExist("W")); m_pCID2UnicodeMap = manager.GetCID2UnicodeMap(m_Charset, bPromptCJK); } if (m_Font.GetFace()) { if (m_bType1) FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE); else FT_UseCIDCharmap(m_Font.GetFace(), m_pCMap->m_Coding); } m_DefaultWidth = pCIDFontDict->GetIntegerFor("DW", 1000); CPDF_Array* pWidthArray = pCIDFontDict->GetArrayFor("W"); if (pWidthArray) LoadMetricsArray(pWidthArray, m_WidthList, 1); if (!IsEmbedded()) LoadSubstFont(); if (m_pFontFile || (GetSubstFont()->m_SubstFlags & FXFONT_SUBST_EXACT)) { CPDF_Object* pmap = pCIDFontDict->GetDirectObjectFor("CIDToGIDMap"); if (pmap) { if (CPDF_Stream* pStream = pmap->AsStream()) { m_pStreamAcc.reset(new CPDF_StreamAcc); m_pStreamAcc->LoadAllData(pStream, false); } else if (pmap->GetString() == "Identity") { #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ if (m_pFontFile) m_bCIDIsGID = true; #else m_bCIDIsGID = true; #endif } } } CheckFontMetrics(); if (IsVertWriting()) { pWidthArray = pCIDFontDict->GetArrayFor("W2"); if (pWidthArray) LoadMetricsArray(pWidthArray, m_VertMetrics, 3); CPDF_Array* pDefaultArray = pCIDFontDict->GetArrayFor("DW2"); if (pDefaultArray) { m_DefaultVY = pDefaultArray->GetIntegerAt(0); m_DefaultW1 = pDefaultArray->GetIntegerAt(1); } else { m_DefaultVY = 880; m_DefaultW1 = -1000; } } return true; }
void LKProfileSave(const TCHAR *szFile) { #if TESTBENCH StartupStore(_T("... SaveProfile <%s>%s"),szFile,NEWLINE); #endif if (_tcslen(szFile)>0) pfp = _tfopen(szFile, TEXT("wb")); // 'w' will overwrite content, 'b' for no crlf translation if(pfp == NULL) { StartupStore(_T("...... SaveProfile <%s> open for write FAILED!%s"),szFile,NEWLINE); return; } // // Standard header // fprintf(pfp,"### LK8000 PROFILE - DO NOT EDIT%s",PNEWLINE); fprintf(pfp,"### THIS FILE IS ENCODED IN UTF8%s",PNEWLINE); fprintf(pfp,"LKVERSION=\"%s.%s\"%s",LKVERSION,LKRELEASE,PNEWLINE); fprintf(pfp,"PROFILEVERSION=2%s",PNEWLINE); // // RESPECT LKPROFILE.H ALPHA ORDER OR WE SHALL GET LOST SOON! // // -- USE _CONFIG VARIABLES WHEN A RUNTIME VALUE CAN BE CHANGED -- // WE DONT WANT TO SAVE RUNTIME TEMPORARY CONFIGURATIONS, ONLY SYSTEM CONFIG! // FOR EXAMPLE: ActiveMap can be set by default in system config, but also changed // at runtime with a button and with a customkey. We must save in profile ONLY // the _Config, not the temporary setup! // rprintf(szRegistryAcknowledgementTime, AcknowledgementTime); rprintf(szRegistryAdditionalAirspaceFile, szAdditionalAirspaceFile); rprintf(szRegistryAdditionalWayPointFile, szAdditionalWaypointFile); // >> Moved to AircraftFile << // rprintf(szRegistryAircraftCategory, AircraftCategory); // rprintf(szRegistryAircraftRego, AircraftRego_Config); // rprintf(szRegistryAircraftType, AircraftType_Config); rprintf(szRegistryAirfieldFile, szAirfieldFile); rprintf(szRegistryAirspaceFile, szAirspaceFile); rprintf(szRegistryAirspaceFillType, MapWindow::GetAirSpaceFillType()); rprintf(szRegistryAirspaceOpacity, MapWindow::GetAirSpaceOpacity()); rprintf(szRegistryAirspaceWarningDlgTimeout, AirspaceWarningDlgTimeout); rprintf(szRegistryAirspaceWarningMapLabels, AirspaceWarningMapLabels); rprintf(szRegistryAirspaceAckAllSame, AirspaceAckAllSame); rprintf(szRegistryAirspaceWarningRepeatTime, AirspaceWarningRepeatTime); rprintf(szRegistryAirspaceWarningVerticalMargin, AirspaceWarningVerticalMargin); rprintf(szRegistryAirspaceWarning, AIRSPACEWARNINGS); rprintf(szRegistryAlarmMaxAltitude1, AlarmMaxAltitude1); // saved *1000, /1000 when used rprintf(szRegistryAlarmMaxAltitude2, AlarmMaxAltitude2); rprintf(szRegistryAlarmMaxAltitude3, AlarmMaxAltitude3); rprintf(szRegistryAlarmTakeoffSafety, AlarmTakeoffSafety); rprintf(szRegistryAltMargin, AltWarningMargin); rprintf(szRegistryAltMode, AltitudeMode_Config); rprintf(szRegistryAlternate1, Alternate1); // these are not part of configuration, but saved all the same rprintf(szRegistryAlternate2, Alternate2); rprintf(szRegistryAltitudeUnitsValue, AltitudeUnit_Config); rprintf(szRegistryAppDefaultMapWidth, Appearance.DefaultMapWidth); rprintf(szRegistryAppIndLandable,Appearance.IndLandable); // rprintf(szRegistryAppInfoBoxModel,GlobalModelType); // We save GlobalModelType, not InfoBoxModel rprintf(szRegistryAppInverseInfoBox,InverseInfoBox_Config); rprintf(szRegistryArrivalValue,ArrivalValue); rprintf(szRegistryAutoAdvance,AutoAdvance_Config); rprintf(szRegistryAutoBacklight,EnableAutoBacklight); rprintf(szRegistryAutoForceFinalGlide,AutoForceFinalGlide); rprintf(szRegistryAutoMcMode,AutoMcMode_Config); /* rprintf(szRegistryAutoMcMode,AutoMcMode); int tmp = (int)(MACCREADY*100.0); rprintf(szRegistryMacCready,tmp);*/ rprintf(szRegistryAutoMcStatus,AutoMacCready_Config); // rprintf(szRegistryAutoMcStatus,AutoMacCready); rprintf(szRegistryAutoOrientScale,AutoOrientScale*10); rprintf(szRegistryAutoSoundVolume,EnableAutoSoundVolume); rprintf(szRegistryAutoWind,AutoWindMode_Config); rprintf(szRegistryAutoZoom,AutoZoom_Config); rprintf(szRegistryAverEffTime,AverEffTime); // >> Moved to AircraftFile << // rprintf(szRegistryBallastSecsToEmpty,BallastSecsToEmpty); rprintf(szRegistryBarOpacity,BarOpacity); rprintf(szRegistryBestWarning,BestWarning); rprintf(szRegistryBgMapColor,BgMapColor_Config); // rprintf(szRegistryBit1Index,dwBit1Index); // rprintf(szRegistryBit2Index,dwBit2Index); rprintf(szRegistryBugs,BUGS_Config*100); // rprintf(szRegistryCheckSum,CheckSum); rprintf(szRegistryCircleZoom,MapWindow::zoom.CircleZoom()); rprintf(szRegistryClipAlt,ClipAltitude); // >> Moved to AircraftFile << // rprintf(szRegistryCompetitionClass,CompetitionClass_Config); // rprintf(szRegistryCompetitionID,CompetitionID_Config); rprintf(szRegistryConfBB0,ConfBB0); rprintf(szRegistryConfBB1,ConfBB1); rprintf(szRegistryConfBB2,ConfBB2); rprintf(szRegistryConfBB3,ConfBB3); rprintf(szRegistryConfBB4,ConfBB4); rprintf(szRegistryConfBB5,ConfBB5); rprintf(szRegistryConfBB6,ConfBB6); rprintf(szRegistryConfBB7,ConfBB7); rprintf(szRegistryConfBB8,ConfBB8); rprintf(szRegistryConfBB9,ConfBB9); rprintf(szRegistryConfBB0Auto,ConfBB0Auto); rprintf(szRegistryConfIP11,ConfIP11); rprintf(szRegistryConfIP12,ConfIP12); rprintf(szRegistryConfIP13,ConfIP13); rprintf(szRegistryConfIP14,ConfIP14); rprintf(szRegistryConfIP15,ConfIP15); rprintf(szRegistryConfIP16,ConfIP16); rprintf(szRegistryConfIP17,ConfIP17); rprintf(szRegistryConfIP21,ConfIP21); rprintf(szRegistryConfIP22,ConfIP22); rprintf(szRegistryConfIP23,ConfIP23); rprintf(szRegistryConfIP24,ConfIP24); rprintf(szRegistryConfIP31,ConfIP31); rprintf(szRegistryConfIP32,ConfIP32); rprintf(szRegistryConfIP33,ConfIP33); rprintf(szRegistryCustomKeyModeAircraftIcon,CustomKeyModeAircraftIcon); rprintf(szRegistryCustomKeyModeCenterScreen,CustomKeyModeCenterScreen); rprintf(szRegistryCustomKeyModeCenter,CustomKeyModeCenter); rprintf(szRegistryCustomKeyModeLeftUpCorner,CustomKeyModeLeftUpCorner); rprintf(szRegistryCustomKeyModeLeft,CustomKeyModeLeft); rprintf(szRegistryCustomKeyModeRightUpCorner,CustomKeyModeRightUpCorner); rprintf(szRegistryCustomKeyModeRight,CustomKeyModeRight); rprintf(szRegistryCustomKeyTime,CustomKeyTime); rprintf(szRegistryCustomMenu1,CustomMenu1); rprintf(szRegistryCustomMenu2,CustomMenu2); rprintf(szRegistryCustomMenu3,CustomMenu3); rprintf(szRegistryCustomMenu4,CustomMenu4); rprintf(szRegistryCustomMenu5,CustomMenu5); rprintf(szRegistryCustomMenu6,CustomMenu6); rprintf(szRegistryCustomMenu7,CustomMenu7); rprintf(szRegistryCustomMenu8,CustomMenu8); rprintf(szRegistryCustomMenu9,CustomMenu9); rprintf(szRegistryCustomMenu10,CustomMenu10); rprintf(szRegistryDebounceTimeout,debounceTimeout); rprintf(szRegistryDeclutterMode,DeclutterMode); ///rprintf(szRegistryDeviceA,dwDeviceName1); ///rprintf(szRegistryDeviceB,dwDeviceName2); rprintf(szRegistryDisableAutoLogger,DisableAutoLogger); rprintf(szRegistryDisplayText,DisplayTextType); rprintf(szRegistryDisplayUpValue,DisplayOrientation_Config); rprintf(szRegistryDistanceUnitsValue,DistanceUnit_Config ); rprintf(szRegistryEnableFLARMMap,EnableFLARMMap); rprintf(szRegistryEnableNavBaroAltitude,EnableNavBaroAltitude_Config); rprintf(szRegistryFAIFinishHeight,EnableFAIFinishHeight); rprintf(szRegistryFAISector,SectorType); rprintf(szRegistryFinalGlideTerrain,FinalGlideTerrain); rprintf(szRegistryFinishLine,FinishLine); rprintf(szRegistryFinishMinHeight,FinishMinHeight); // saved *1000, /1000 when used rprintf(szRegistryFinishRadius,FinishRadius); rprintf(szRegistryFontRenderer,FontRenderer); rprintf(szRegistryFontMapWaypoint,FontMapWaypoint); rprintf(szRegistryFontMapTopology,FontMapTopology); rprintf(szRegistryFontInfopage1L,FontInfopage1L); rprintf(szRegistryFontInfopage2L,FontInfopage2L); rprintf(szRegistryFontBottomBar,FontBottomBar); rprintf(szRegistryFontOverlayBig,FontOverlayBig); rprintf(szRegistryFontOverlayMedium,FontOverlayMedium); rprintf(szRegistryFontCustom1,FontCustom1); rprintf(szRegistryFontVisualGlide,FontVisualGlide); rprintf(szRegistryGlideBarMode,GlideBarMode); rprintf(szRegistryGliderScreenPosition,MapWindow::GliderScreenPosition); rprintf(szRegistryGpsAltitudeOffset,GPSAltitudeOffset); // >> Moved to AircraftFile << // rprintf(szRegistryHandicap,Handicap); rprintf(szRegistryHideUnits,HideUnits); rprintf(szRegistryHomeWaypoint,HomeWaypoint); // InfoType for infoboxes configuration for (int i=0;i<MAXINFOWINDOWS;i++) rprintf(szRegistryDisplayType[i], InfoType[i]); rprintf(szRegistryInputFile,szInputFile); rprintf(szRegistryIphoneGestures,IphoneGestures); rprintf(szRegistryLKMaxLabels,LKMaxLabels); rprintf(szRegistryLKTopoZoomCat05,LKTopoZoomCat05*1000); rprintf(szRegistryLKTopoZoomCat100,LKTopoZoomCat100*1000); rprintf(szRegistryLKTopoZoomCat10,LKTopoZoomCat10*1000); rprintf(szRegistryLKTopoZoomCat110,LKTopoZoomCat110*1000); rprintf(szRegistryLKTopoZoomCat20,LKTopoZoomCat20*1000); rprintf(szRegistryLKTopoZoomCat30,LKTopoZoomCat30*1000); rprintf(szRegistryLKTopoZoomCat40,LKTopoZoomCat40*1000); rprintf(szRegistryLKTopoZoomCat50,LKTopoZoomCat50*1000); rprintf(szRegistryLKTopoZoomCat60,LKTopoZoomCat60*1000); rprintf(szRegistryLKTopoZoomCat70,LKTopoZoomCat70*1000); rprintf(szRegistryLKTopoZoomCat80,LKTopoZoomCat80*1000); rprintf(szRegistryLKTopoZoomCat90,LKTopoZoomCat90*1000); rprintf(szRegistryLKVarioBar,LKVarioBar); rprintf(szRegistryLKVarioVal,LKVarioVal); rprintf(szRegistryLanguageFile,szLanguageFile); rprintf(szRegistryLatLonUnits, Units::CoordinateFormat); rprintf(szRegistryLiftUnitsValue,LiftUnit_Config ); rprintf(szRegistryLockSettingsInFlight,LockSettingsInFlight); rprintf(szRegistryLoggerShort,LoggerShortName); rprintf(szRegistryLoggerTimeStepCircling,LoggerTimeStepCircling); rprintf(szRegistryLoggerTimeStepCruise,LoggerTimeStepCruise); rprintf(szRegistryMapBox,MapBox); rprintf(szRegistryMapFile,szMapFile); rprintf(szRegistryMenuTimeout,MenuTimeout_Config); rprintf(szRegistryNewMapDeclutter,NewMapDeclutter); rprintf(szRegistryOrbiter,Orbiter_Config); rprintf(szRegistryOutlinedTp,OutlinedTp_Config); rprintf(szRegistryOverColor,OverColor); rprintf(szRegistryOverlayClock,OverlayClock); rprintf(szRegistryUseTwoLines,UseTwoLines); rprintf(szRegistryOverlaySize,OverlaySize); rprintf(szRegistryPGAutoZoomThreshold,PGAutoZoomThreshold); rprintf(szRegistryPGClimbZoom,PGClimbZoom); rprintf(szRegistryPGCruiseZoom,PGCruiseZoom); rprintf(szRegistryPGOptimizeRoute,PGOptimizeRoute_Config); // >> Moved to PilotFile << // rprintf(szRegistryPilotName,PilotName_Config); // >> Moved to AircraftFile << // rprintf(szRegistryPolarFile,szPolarFile); // rprintf(szRegistryPollingMode,PollingMode); // rprintf(szRegistryPort1Index,dwPortIndex1); // rprintf(szRegistryPort2Index,dwPortIndex2); rprintf(szRegistryPressureHg,PressureHg); rprintf(szRegistrySafetyAltitudeArrival,SAFETYALTITUDEARRIVAL); rprintf(szRegistrySafetyAltitudeMode,SafetyAltitudeMode); rprintf(szRegistrySafetyAltitudeTerrain,SAFETYALTITUDETERRAIN); rprintf(szRegistrySafetyMacCready,GlidePolar::SafetyMacCready*10); // >> Moved to AircraftFile << // rprintf(szRegistrySafteySpeed,SAFTEYSPEED*1000); // m/s x1000 rprintf(szRegistrySectorRadius,SectorRadius); rprintf(szRegistrySetSystemTimeFromGPS,SetSystemTimeFromGPS); rprintf(szRegistrySaveRuntime,SaveRuntime); rprintf(szRegistryShading,Shading_Config); rprintf(szRegistrySnailTrail,TrailActive_Config); rprintf(szRegistrySnailWidthScale,MapWindow::SnailWidthScale); // rprintf(szRegistrySpeed1Index,dwSpeedIndex1); // rprintf(szRegistrySpeed2Index,dwSpeedIndex2); rprintf(szRegistrySpeedUnitsValue,SpeedUnit_Config); rprintf(szRegistryStartHeightRef,StartHeightRef); rprintf(szRegistryStartLine,StartLine); rprintf(szRegistryStartMaxHeightMargin,StartMaxHeightMargin); // saved *1000, /1000 when used rprintf(szRegistryStartMaxHeight,StartMaxHeight); // saved *1000, /1000 when used rprintf(szRegistryStartMaxSpeedMargin,StartMaxSpeedMargin); // saved *1000, /1000 when used rprintf(szRegistryStartMaxSpeed,StartMaxSpeed); // saved *1000, /1000 when used rprintf(szRegistryStartRadius,StartRadius); rprintf(szRegistryTaskSpeedUnitsValue,TaskSpeedUnit_Config); rprintf(szRegistryTeamcodeRefWaypoint,TeamCodeRefWaypoint); rprintf(szRegistryTerrainBrightness,TerrainBrightness); rprintf(szRegistryTerrainContrast,TerrainContrast); rprintf(szRegistryTerrainFile,szTerrainFile); rprintf(szRegistryTerrainRamp,TerrainRamp_Config); rprintf(szRegistryThermalBar,ThermalBar); rprintf(szRegistryThermalLocator,EnableThermalLocator); rprintf(szRegistryTpFilter,TpFilter); rprintf(szRegistryTrackBar,TrackBar); rprintf(szRegistryTrailDrift,EnableTrailDrift_Config); rprintf(szRegistryUTCOffset,UTCOffset); // rprintf(szRegistryUseGeoidSeparation,UseGeoidSeparation); rprintf(szRegistryUseUngestures,UseUngestures); rprintf(szRegistryUseTotalEnergy,UseTotalEnergy_Config); rprintf(szRegistryWarningTime,WarningTime); rprintf(szRegistryWayPointFile,szWaypointFile); rprintf(szRegistryWaypointsOutOfRange,WaypointsOutOfRange); rprintf(szRegistryWindCalcSpeed,WindCalcSpeed*1000); // m/s x1000 rprintf(szRegistryWindCalcTime,WindCalcTime); for(int i=0;i<AIRSPACECLASSCOUNT;i++) { rprintf(szRegistryAirspaceMode[i],MapWindow::iAirspaceMode[i]); rprintf(szRegistryColour[i],MapWindow::iAirspaceColour[i]); #ifdef HAVE_HATCHED_BRUSH rprintf(szRegistryBrush[i],MapWindow::iAirspaceBrush[i]); #endif } rprintf(szRegistryUseWindRose,UseWindRose); // // Multimaps added 121003 // if (SaveRuntime) { rprintf(szRegistryMultiTerr0,Multimap_Flags_Terrain[MP_MOVING]); rprintf(szRegistryMultiTerr1,Multimap_Flags_Terrain[MP_MAPTRK]); rprintf(szRegistryMultiTerr2,Multimap_Flags_Terrain[MP_MAPWPT]); rprintf(szRegistryMultiTerr3,Multimap_Flags_Terrain[MP_MAPASP]); rprintf(szRegistryMultiTerr4,Multimap_Flags_Terrain[MP_VISUALGLIDE]); rprintf(szRegistryMultiTopo0,Multimap_Flags_Topology[MP_MOVING]); rprintf(szRegistryMultiTopo1,Multimap_Flags_Topology[MP_MAPTRK]); rprintf(szRegistryMultiTopo2,Multimap_Flags_Topology[MP_MAPWPT]); rprintf(szRegistryMultiTopo3,Multimap_Flags_Topology[MP_MAPASP]); rprintf(szRegistryMultiTopo4,Multimap_Flags_Topology[MP_VISUALGLIDE]); rprintf(szRegistryMultiAsp0,Multimap_Flags_Airspace[MP_MOVING]); rprintf(szRegistryMultiAsp1,Multimap_Flags_Airspace[MP_MAPTRK]); rprintf(szRegistryMultiAsp2,Multimap_Flags_Airspace[MP_MAPWPT]); rprintf(szRegistryMultiAsp3,Multimap_Flags_Airspace[MP_MAPASP]); rprintf(szRegistryMultiAsp4,Multimap_Flags_Airspace[MP_VISUALGLIDE]); rprintf(szRegistryMultiLab0,Multimap_Labels[MP_MOVING]); rprintf(szRegistryMultiLab1,Multimap_Labels[MP_MAPTRK]); rprintf(szRegistryMultiLab2,Multimap_Labels[MP_MAPWPT]); rprintf(szRegistryMultiLab3,Multimap_Labels[MP_MAPASP]); rprintf(szRegistryMultiLab4,Multimap_Labels[MP_VISUALGLIDE]); rprintf(szRegistryMultiWpt0,Multimap_Flags_Waypoints[MP_MOVING]); rprintf(szRegistryMultiWpt1,Multimap_Flags_Waypoints[MP_MAPTRK]); rprintf(szRegistryMultiWpt2,Multimap_Flags_Waypoints[MP_MAPWPT]); rprintf(szRegistryMultiWpt3,Multimap_Flags_Waypoints[MP_MAPASP]); rprintf(szRegistryMultiWpt4,Multimap_Flags_Waypoints[MP_VISUALGLIDE]); rprintf(szRegistryMultiOvrT0,Multimap_Flags_Overlays_Text[MP_MOVING]); rprintf(szRegistryMultiOvrT1,Multimap_Flags_Overlays_Text[MP_MAPTRK]); rprintf(szRegistryMultiOvrT2,Multimap_Flags_Overlays_Text[MP_MAPWPT]); rprintf(szRegistryMultiOvrT3,Multimap_Flags_Overlays_Text[MP_MAPASP]); rprintf(szRegistryMultiOvrT4,Multimap_Flags_Overlays_Text[MP_VISUALGLIDE]); rprintf(szRegistryMultiOvrG0,Multimap_Flags_Overlays_Gauges[MP_MOVING]); rprintf(szRegistryMultiOvrG1,Multimap_Flags_Overlays_Gauges[MP_MAPTRK]); rprintf(szRegistryMultiOvrG2,Multimap_Flags_Overlays_Gauges[MP_MAPWPT]); rprintf(szRegistryMultiOvrG3,Multimap_Flags_Overlays_Gauges[MP_MAPASP]); rprintf(szRegistryMultiOvrG4,Multimap_Flags_Overlays_Gauges[MP_VISUALGLIDE]); rprintf(szRegistryMultiSizeY1,Multimap_SizeY[MP_MAPTRK]); rprintf(szRegistryMultiSizeY2,Multimap_SizeY[MP_MAPWPT]); rprintf(szRegistryMultiSizeY3,Multimap_SizeY[MP_MAPASP]); rprintf(szRegistryMultiSizeY4,Multimap_SizeY[MP_VISUALGLIDE]); } rprintf(szRegistryMultimap1,Multimap1); rprintf(szRegistryMultimap2,Multimap2); rprintf(szRegistryMultimap3,Multimap3); rprintf(szRegistryMultimap4,Multimap4); if (SaveRuntime) { rprintf(szRegistryMMNorthUp1,MMNorthUp_Runtime[0]); rprintf(szRegistryMMNorthUp2,MMNorthUp_Runtime[1]); rprintf(szRegistryMMNorthUp3,MMNorthUp_Runtime[2]); rprintf(szRegistryMMNorthUp4,MMNorthUp_Runtime[3]); } rprintf(szRegistryAspPermanent ,AspPermanentChanged); rprintf(szRegistryFlarmDirection,iFlarmDirection); if (SaveRuntime) { rprintf(szRegistryDrawTask ,Flags_DrawTask); rprintf(szRegistryDrawFAI ,Flags_DrawFAI); } rprintf(szRegistryGearMode ,GearWarningMode); rprintf(szRegistryGearAltitude ,GearWarningAltitude); rprintf(szRegistryBigFAIThreshold,FAI28_45Threshold); if (SaveRuntime) rprintf(szRegistryBottomMode ,BottomMode); rprintf(szRegistrySonarWarning ,SonarWarning_Config); rprintf(szRegistryOverlay_TopLeft, Overlay_TopLeft); rprintf(szRegistryOverlay_TopMid, Overlay_TopMid); rprintf(szRegistryOverlay_TopRight, Overlay_TopRight); rprintf(szRegistryOverlay_TopDown, Overlay_TopDown); rprintf(szRegistryOverlay_LeftTop, Overlay_LeftTop); rprintf(szRegistryOverlay_LeftMid, Overlay_LeftMid); rprintf(szRegistryOverlay_LeftBottom, Overlay_LeftBottom); rprintf(szRegistryOverlay_LeftDown, Overlay_LeftDown); rprintf(szRegistryOverlay_RightTop, Overlay_RightTop); rprintf(szRegistryOverlay_RightMid, Overlay_RightMid); rprintf(szRegistryOverlay_RightBottom, Overlay_RightBottom); #if SAVESCREEN extern bool CommandResolution; if(!IsEmbedded() && !CommandResolution) { rprintf(szRegistryScreenSize ,ScreenSize); rprintf(szRegistryScreenSizeX ,ScreenSizeX); rprintf(szRegistryScreenSizeY ,ScreenSizeY); } #endif fprintf(pfp,PNEWLINE); // end of file fflush(pfp); fclose(pfp); }