📄 editthemedialog.cpp
字号:
////////////////////////////////////////////////////////////////////////// // Line Visible checkbox ////////////////////////////////////////////////////////////////////////// m_pctlLineVisible[iDetailLevel] = new wxCheckBox(this, iDetailLevel + EDITTHEMEDIALOG_MAX_DETAILLEVELS, wxT("")); psizerDetailSpecificGrid->Add(m_pctlLineVisible[iDetailLevel], 1, wxALIGN_RIGHT | wxLEFT, 10 ); ////////////////////////////////////////////////////////////////////////// // Line color control ////////////////////////////////////////////////////////////////////////// m_pctlLineColor[iDetailLevel] = new ColorPickerControl(this, idColor, wxDefaultPosition, wxSize(30, 20)); psizerDetailSpecificGrid->Add(m_pctlLineColor[iDetailLevel], 1, wxFIXED_MINSIZE | wxALIGN_RIGHT, 0 ); ////////////////////////////////////////////////////////////////////////// // Line Width text control ////////////////////////////////////////////////////////////////////////// m_pctlLineWidth[iDetailLevel] = new wxTextCtrl(this, -1, wxT("")); psizerDetailSpecificGrid->Add(m_pctlLineWidth[iDetailLevel], 1, wxGROW, 0 ); } } } ////////////////////////////////////////////////////////////////////////// // ok and cancel button ////////////////////////////////////////////////////////////////////////// wxStdDialogButtonSizer* psizerButton = CreateStdDialogButtonSizer(wxOK | wxCANCEL); psizerWnd->Add(psizerButton, 0, wxALL | wxALIGN_CENTER, 5); ////////////////////////////////////////////////////////////////////////// // Set up the sizer ////////////////////////////////////////////////////////////////////////// m_pctlRecordType->SetFocus(); psizerWnd->Fit(this); SetSizer(psizerWnd); Layout(); psizerWnd->SetSizeHints(this); m_iLastRecordType = -1; wxCommandEvent ev; OnRecordTypeChange(ev);}//////////////////////////////////////////////////////////////////////////////////// \brief Ok button pressed - save settings/////////////////////////////////////////////////////////////////////////////////void EditThemeDialog::OnOk(wxCommandEvent& event){ RecordSettings(); EndModal(wxID_OK);}//////////////////////////////////////////////////////////////////////////////////// \brief Save the active settings to m_Theme/////////////////////////////////////////////////////////////////////////////////void EditThemeDialog::RecordSettings(){ m_strTheme = m_pctlThemeName->GetValue(); if (m_iLastRecordType < 0) return; if (m_iLastRecordType <= LAST_MISCCOLOR ) m_Theme.SetMiscColor((EMiscColor) m_iLastRecordType, m_pctlLabelColor[0]->GetColor()); else { int iDetailLevel; ERecordType eRecordType = (ERecordType) (m_iLastRecordType - LAST_MISCCOLOR - 1); for (iDetailLevel = 0; iDetailLevel < m_Theme.GetDetailLevelCount(); iDetailLevel++) { long lTmp; m_Theme.SetLineColor(eRecordType, m_pctlLineColor[iDetailLevel]->GetColor(), iDetailLevel); m_Theme.SetTextColor(eRecordType, m_pctlLabelColor[iDetailLevel]->GetColor(), iDetailLevel); m_Theme.GetDetailSettings(iDetailLevel, eRecordType).m_bTextVisible = m_pctlLabelVisible[iDetailLevel]->GetValue(); m_pctlLabelFontSize[iDetailLevel]->GetValue().ToLong(&lTmp); m_Theme.GetDetailSettings(iDetailLevel, eRecordType).m_iFontSize = lTmp; m_Theme.GetDetailSettings(iDetailLevel, eRecordType).m_bLineVisible = m_pctlLineVisible[iDetailLevel]->GetValue(); m_pctlLineWidth[iDetailLevel]->GetValue().ToLong(&lTmp); m_Theme.GetDetailSettings(iDetailLevel, eRecordType).m_iWidth = lTmp; } } }//////////////////////////////////////////////////////////////////////////////////// \brief User changed feature types/////////////////////////////////////////////////////////////////////////////////void EditThemeDialog::OnRecordTypeChange(wxCommandEvent & event){ bool bIsMiscColor; int iDetailLevel; RecordSettings(); m_iLastRecordType = m_pctlRecordType->GetSelection(); if (m_iLastRecordType < 0) return; bIsMiscColor = m_iLastRecordType <= LAST_MISCCOLOR; for (iDetailLevel = 0; iDetailLevel < m_Theme.GetDetailLevelCount(); iDetailLevel++) { if (iDetailLevel > 0) { m_pctlLineColor[iDetailLevel]->Enable(!bIsMiscColor); m_pctlLabelColor[iDetailLevel]->Enable(!bIsMiscColor); } else { m_pctlLineColor[iDetailLevel]->Enable(!bIsMiscColor); m_pctlLabelColor[iDetailLevel]->Enable(true); } m_pctlLabelVisible[iDetailLevel]->Enable(!bIsMiscColor); m_pctlLabelFontSize[iDetailLevel]->Enable(!bIsMiscColor); m_pctlLineVisible[iDetailLevel]->Enable(!bIsMiscColor); m_pctlLineWidth[iDetailLevel]->Enable(!bIsMiscColor); } if (bIsMiscColor) { m_pctlLabelColor[0]->SetColor(m_Theme.GetMiscColor((EMiscColor) m_iLastRecordType)); m_pctlLineColor[0]->SetColor(*wxBLACK); for (iDetailLevel = 1; iDetailLevel < m_Theme.GetDetailLevelCount(); iDetailLevel++) { m_pctlLabelColor[iDetailLevel]->SetColor(*wxBLACK); m_pctlLineColor[iDetailLevel]->SetColor(*wxBLACK); } } else { ERecordType eRecordType = (ERecordType) (m_iLastRecordType - LAST_MISCCOLOR - 1); for (iDetailLevel = 0; iDetailLevel < m_Theme.GetDetailLevelCount(); iDetailLevel++) { bool bLabelVisible = m_Theme.GetDetailSettings(iDetailLevel, eRecordType).m_bTextVisible; bool bLineVisible = m_Theme.GetDetailSettings(iDetailLevel, eRecordType).m_bLineVisible; m_pctlLineColor[iDetailLevel]->SetColor(m_Theme.GetDetailSettings(iDetailLevel, eRecordType).m_clrLine); m_pctlLabelColor[iDetailLevel]->SetColor(m_Theme.GetDetailSettings(iDetailLevel, eRecordType).m_clrText); m_pctlLabelVisible[iDetailLevel]->SetValue(bLabelVisible); m_pctlLabelFontSize[iDetailLevel]->SetValue(wxString::Format(wxT("%d"), m_Theme.GetDetailSettings(iDetailLevel, eRecordType).m_iFontSize)); m_pctlLabelFontSize[iDetailLevel]->Enable(bLabelVisible); m_pctlLineVisible[iDetailLevel]->SetValue(bLineVisible); m_pctlLineWidth[iDetailLevel]->SetValue(wxString::Format(wxT("%d"), m_Theme.GetDetailSettings(iDetailLevel, eRecordType).m_iWidth)); m_pctlLineWidth[iDetailLevel]->Enable(bLineVisible); } }}//////////////////////////////////////////////////////////////////////////////////// \brief User changed detail level/////////////////////////////////////////////////////////////////////////////////void EditThemeDialog::OnDetailLevelChange(wxCommandEvent & event){ OnRecordTypeChange(event);}//////////////////////////////////////////////////////////////////////////////////// \brief Creates a wxArrayString of record type names/////////////////////////////////////////////////////////////////////////////////wxArrayString EditThemeDialog::GetRecordTypeNames(){ wxArrayString strNames; wxInt16 nRecordTypes = m_pMapControlData->GetNumRecordTypes(); wxInt16 iRecordType; strNames.Add(wxT("Background")); strNames.Add(wxT("Foreground")); strNames.Add(wxT("Marker Background")); strNames.Add(wxT("Marker Foreground")); for (iRecordType = 0; iRecordType < nRecordTypes; iRecordType++) strNames.Add( m_pMapControlData->GetRecordTypeDisplayName(iRecordType) ); return strNames;}//////////////////////////////////////////////////////////////////////////////////// \brief Returns the theme object/////////////////////////////////////////////////////////////////////////////////MapAppearanceSettings EditThemeDialog::GetTheme(){ return m_Theme;}//////////////////////////////////////////////////////////////////////////////////// \brief Returns the theme name/////////////////////////////////////////////////////////////////////////////////wxString EditThemeDialog::GetThemeName(){ return m_strTheme;}//////////////////////////////////////////////////////////////////////////////////// \brief Triggered when a checkbox is selected or deselected////// Enable/disable the appropriate text box/////////////////////////////////////////////////////////////////////////////////void EditThemeDialog::OnCheckBox(wxEvent & event){ if (event.GetId() < EDITTHEMEDIALOG_MAX_DETAILLEVELS) m_pctlLabelFontSize[ event.GetId() ]->Enable( m_pctlLabelVisible[event.GetId()]->GetValue() ); else if (event.GetId() < 2 * EDITTHEMEDIALOG_MAX_DETAILLEVELS) m_pctlLineWidth[ event.GetId() - EDITTHEMEDIALOG_MAX_DETAILLEVELS ]->Enable( m_pctlLineVisible[event.GetId() - EDITTHEMEDIALOG_MAX_DETAILLEVELS]->GetValue() ); else wxASSERT(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -