📄 configtree.cpp
字号:
wxIconStateInfoDB::wxIconStateInfoDB(wxImageList* imageList){ m_imageList = imageList; DeleteContents(TRUE);}void wxIconStateInfoDB::AppendInfo(wxIconStateInfo* info){ Append(info);}// Easy way of initialising both the image list and the// info db. It will generate image ids itself while appending the icon.bool wxIconStateInfoDB::AddInfo(const wxString& name, const wxIcon& icon, int state, bool enabled){ wxASSERT (m_imageList != NULL); wxIconStateInfo* info = FindInfo(name); if (!info) { info = new wxIconStateInfo(name); Append(info); } info->SetIconId(state, enabled, m_imageList->Add(icon)); return TRUE;}wxIconStateInfo* wxIconStateInfoDB::FindInfo(const wxString& name) const{ wxNode* node = First(); while (node) { wxIconStateInfo* info = (wxIconStateInfo*) node->Data(); if (info->GetName() == name) return info; node = node->Next(); } return NULL;}int wxIconStateInfoDB::GetIconId(const wxString& name, int state, bool enabled) const{ wxIconStateInfo* info = FindInfo(name); if (!info) return -1; return info->GetIconId(state, enabled);}bool wxIconStateInfoDB::SetIconId(const wxString& name, int state, bool enabled, int iconId){ wxIconStateInfo* info = FindInfo(name); if (!info) return FALSE; info->SetIconId(state, enabled, iconId); return TRUE;}#if 0wxIcon wxIconStateInfoDB::GetIcon(const wxString& name, int state, bool enabled) const{ wxASSERT( m_imageList != NULL ); wxIconStateInfo* info = FindInfo(name); if (!info) return wxNullIcon; int id = info->GetIconId(state, enabled); if (id < 0) return wxNullIcon; else return m_imageList->GetImage(id); // Doesn't exist}#endif/** ecSplitterScrolledWindow* This window holds the tree and value windows.* We derive a new class mainly to intercept popup menu commands from both child windows* without resorting to placing their handlers in the main frame.*/BEGIN_EVENT_TABLE(ecSplitterScrolledWindow, wxSplitterScrolledWindow) EVT_MENU(ecID_WHATS_THIS, ecSplitterScrolledWindow::OnWhatsThis) EVT_MENU(ecID_TREE_PROPERTIES, ecSplitterScrolledWindow::OnProperties) EVT_MENU(ecID_TREE_RESTORE_DEFAULTS, ecSplitterScrolledWindow::OnRestoreDefaults) EVT_MENU(ecID_TREE_VISIT_DOC, ecSplitterScrolledWindow::OnVisitDoc) EVT_MENU(ecID_TREE_VIEW_HEADER, ecSplitterScrolledWindow::OnViewHeader) EVT_MENU(ecID_TREE_UNLOAD_PACKAGE, ecSplitterScrolledWindow::OnUnloadPackage) EVT_UPDATE_UI(ecID_TREE_RESTORE_DEFAULTS, ecSplitterScrolledWindow::OnUpdateRestoreDefaults) EVT_UPDATE_UI(ecID_TREE_VISIT_DOC, ecSplitterScrolledWindow::OnUpdateVisitDoc) EVT_UPDATE_UI(ecID_TREE_VIEW_HEADER, ecSplitterScrolledWindow::OnUpdateViewHeader) EVT_UPDATE_UI(ecID_TREE_UNLOAD_PACKAGE, ecSplitterScrolledWindow::OnUpdateUnloadPackage)END_EVENT_TABLE()static bool ecIsMenuForItem(wxCommandEvent& event){ wxObject* obj = event.GetEventObject(); wxMenu* menu = NULL; if (obj->IsKindOf(CLASSINFO(wxMenu))) { // Menu has some client data which tells us if the menu was clicked over an item // or not menu = (wxMenu*) obj; return (bool) (menu->GetClientData() != 0) ; } else return FALSE;}void ecSplitterScrolledWindow::OnWhatsThis(wxCommandEvent& event){ ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL); wxASSERT (treeCtrl != NULL) ; wxTreeItemId id = treeCtrl->GetSelection(); if (id != 0 && ecIsMenuForItem(event)) { ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem(); wxPoint pt = wxGetMousePosition(); wxString msg; msg.Printf("Popping at %d x %d", pt.x, pt.y); wxLogDebug(msg); wxGetApp().GetHelpController().DisplayTextPopup(item->GetDescription(), wxGetMousePosition()); } else event.Skip();}void ecSplitterScrolledWindow::OnProperties(wxCommandEvent& event){ wxObject* obj = event.GetEventObject(); wxMenu* menu = NULL; if (obj->IsKindOf(CLASSINFO(wxMenu))) { // Menu has some client data which tells us if the menu was clicked over an item // or not menu = (wxMenu*) obj; } ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL); wxASSERT (treeCtrl != NULL) ; wxTreeItemId id = treeCtrl->GetSelection(); if (id != 0 && ecIsMenuForItem(event)) { ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem(); ecConfigPropertiesDialog dialog(wxGetApp().GetTopWindow(), item); dialog.SetTitle(item->GetName()); dialog.ShowModal(); }}void ecSplitterScrolledWindow::OnRestoreDefaults(wxCommandEvent& event){ ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL); wxASSERT (treeCtrl != NULL) ; wxTreeItemId id = treeCtrl->GetSelection(); if (id != 0 && ecIsMenuForItem(event)) { ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem(); if (item->HasModifiedChildren()) { int ans = wxMessageBox(_("Restore defaults for nested items?"), wxGetApp().GetSettings().GetAppName(), wxYES_NO|wxCANCEL|wxICON_QUESTION); switch (ans) { case wxYES: RestoreDefault(id, TRUE); break; case wxNO: RestoreDefault(id, FALSE); break; case wxCANCEL: break; default: wxASSERT(FALSE); break; } } else { RestoreDefault(id, FALSE); } // current values may have changed so refresh the other views wxGetApp().GetConfigToolDoc ()->UpdateFailingRuleCount (); if (item->GetOptionType () != ecOptionTypeNone) { ecConfigToolHint hint(item, ecValueChanged); wxGetApp().GetConfigToolDoc ()->UpdateAllViews (NULL, & hint); } }}void ecSplitterScrolledWindow::RestoreDefault(wxTreeItemId h, bool bRecurse /* = FALSE */, bool bTopLevel /* = TRUE */){ ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL); wxASSERT (treeCtrl != NULL) ; ecConfigItem* ti = ((ecTreeItemData*) treeCtrl->GetItemData(h))->GetConfigItem(); const CdlValuable valuable = ti->GetCdlValuable(); if (valuable && (CdlValueFlavor_None != valuable->get_flavor ())) // skip the root node and nodes without a value valuable->set_source (CdlValueSource_Default); treeCtrl->SetItemText (h, ti->GetItemNameOrMacro ()); // remove asterisk in control view if (bTopLevel && ti->HasRadio ()) // if user-specified item is a radio button { for (ecConfigItem * pItem = ti->FirstRadio (); pItem; pItem = pItem->NextRadio ()) { if (ti != pItem) { const CdlValuable valuable = pItem->GetCdlValuable(); wxASSERT (valuable); valuable->set_source (CdlValueSource_Default); // restore default for each sibling radio button treeCtrl->SetItemText (pItem->GetTreeItem(), pItem->GetItemNameOrMacro ()); // remove asterisk in control view } } } if (bRecurse) { long cookie; for (h = treeCtrl->GetFirstChild(h, cookie); h; h = treeCtrl->GetNextSibling(h)) { RestoreDefault (h, TRUE, FALSE); } }}void ecSplitterScrolledWindow::OnVisitDoc(wxCommandEvent& event){ ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL); wxASSERT (treeCtrl != NULL) ; wxTreeItemId id = treeCtrl->GetSelection(); if (id != 0 && ecIsMenuForItem(event)) { ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem(); item->ViewURL(); } else event.Skip();}void ecSplitterScrolledWindow::OnViewHeader(wxCommandEvent& event){ ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL); wxASSERT (treeCtrl != NULL) ; wxTreeItemId id = treeCtrl->GetSelection(); if (id != 0 && ecIsMenuForItem(event)) { ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem(); item->ViewHeader(); } else event.Skip();}void ecSplitterScrolledWindow::OnUnloadPackage(wxCommandEvent& event){ ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL); wxASSERT (treeCtrl != NULL) ; wxTreeItemId id = treeCtrl->GetSelection(); if (id != 0) { ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem(); if (wxYES == wxMessageBox(_("Are you sure you wish to unload this package?"), wxGetApp().GetSettings().GetAppName(), wxYES_NO|wxICON_QUESTION)) { item->Unload(); wxGetApp().GetConfigToolDoc()->RegenerateData(); } }}void ecSplitterScrolledWindow::OnUpdateRestoreDefaults(wxUpdateUIEvent& event){ ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL); wxASSERT (treeCtrl != NULL) ; wxTreeItemId id = treeCtrl->GetSelection(); if (id != 0) { ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem(); event.Enable( IsChanged(id, TRUE ) ); }}void ecSplitterScrolledWindow::OnUpdateVisitDoc(wxUpdateUIEvent& event){ event.Enable( TRUE );}void ecSplitterScrolledWindow::OnUpdateViewHeader(wxUpdateUIEvent& event){ ecConfigToolDoc *pDoc=wxGetApp().GetConfigToolDoc(); event.Enable( pDoc && !pDoc->GetBuildTree().IsEmpty() ) ;}void ecSplitterScrolledWindow::OnUpdateUnloadPackage(wxUpdateUIEvent& event){ ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL); wxASSERT (treeCtrl != NULL) ; wxTreeItemId id = treeCtrl->GetSelection(); if (id != 0) { ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem(); event.Enable( item->IsPackage() ); }}bool ecSplitterScrolledWindow::IsChanged(wxTreeItemId id, bool bRecurse){ ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL); wxASSERT (treeCtrl != NULL) ; ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem(); bool rc = item->Modified (); if(!rc && bRecurse) { long cookie; for (id=treeCtrl->GetFirstChild(id, cookie);id;id=treeCtrl->GetNextSibling(id)) { if (IsChanged(id,TRUE)) { rc=TRUE; break; } } } return rc;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -