void ClangPlugin::OnAttach() { wxBitmap bmp; wxString prefix = ConfigManager::GetDataFolder() + wxT("/images/codecompletion/"); // bitmaps must be added by order of PARSER_IMG_* consts (which are also TokenCategory enums) const char* imgs[] = { "class_folder.png", // PARSER_IMG_CLASS_FOLDER "class.png", // PARSER_IMG_CLASS "class_private.png", // PARSER_IMG_CLASS_PRIVATE "class_protected.png", // PARSER_IMG_CLASS_PROTECTED "class_public.png", // PARSER_IMG_CLASS_PUBLIC "ctor_private.png", // PARSER_IMG_CTOR_PRIVATE "ctor_protected.png", // PARSER_IMG_CTOR_PROTECTED "ctor_public.png", // PARSER_IMG_CTOR_PUBLIC "dtor_private.png", // PARSER_IMG_DTOR_PRIVATE "dtor_protected.png", // PARSER_IMG_DTOR_PROTECTED "dtor_public.png", // PARSER_IMG_DTOR_PUBLIC "method_private.png", // PARSER_IMG_FUNC_PRIVATE "method_protected.png", // PARSER_IMG_FUNC_PRIVATE "method_public.png", // PARSER_IMG_FUNC_PUBLIC "var_private.png", // PARSER_IMG_VAR_PRIVATE "var_protected.png", // PARSER_IMG_VAR_PROTECTED "var_public.png", // PARSER_IMG_VAR_PUBLIC "macro_def.png", // PARSER_IMG_MACRO_DEF "enum.png", // PARSER_IMG_ENUM "enum_private.png", // PARSER_IMG_ENUM_PRIVATE "enum_protected.png", // PARSER_IMG_ENUM_PROTECTED "enum_public.png", // PARSER_IMG_ENUM_PUBLIC "enumerator.png", // PARSER_IMG_ENUMERATOR "namespace.png", // PARSER_IMG_NAMESPACE "typedef.png", // PARSER_IMG_TYPEDEF "typedef_private.png", // PARSER_IMG_TYPEDEF_PRIVATE "typedef_protected.png", // PARSER_IMG_TYPEDEF_PROTECTED "typedef_public.png", // PARSER_IMG_TYPEDEF_PUBLIC "symbols_folder.png", // PARSER_IMG_SYMBOLS_FOLDER "vars_folder.png", // PARSER_IMG_VARS_FOLDER "funcs_folder.png", // PARSER_IMG_FUNCS_FOLDER "enums_folder.png", // PARSER_IMG_ENUMS_FOLDER "macro_def_folder.png", // PARSER_IMG_MACRO_DEF_FOLDER "others_folder.png", // PARSER_IMG_OTHERS_FOLDER "typedefs_folder.png", // PARSER_IMG_TYPEDEF_FOLDER "macro_use.png", // PARSER_IMG_MACRO_USE "macro_use_private.png", // PARSER_IMG_MACRO_USE_PRIVATE "macro_use_protected.png", // PARSER_IMG_MACRO_USE_PROTECTED "macro_use_public.png", // PARSER_IMG_MACRO_USE_PUBLIC "macro_use_folder.png", // PARSER_IMG_MACRO_USE_FOLDER "cpp_lang.png", // tcLangKeyword nullptr }; for (const char** itr = imgs; *itr; ++itr) m_ImageList.Add(cbLoadBitmap(prefix + wxString::FromUTF8(*itr), wxBITMAP_TYPE_PNG)); EditorColourSet* theme = Manager::Get()->GetEditorManager()->GetColourSet(); wxStringTokenizer tokenizer(theme->GetKeywords(theme->GetHighlightLanguage(wxT("C/C++")), 0)); while (tokenizer.HasMoreTokens()) m_CppKeywords.push_back(tokenizer.GetNextToken()); std::sort(m_CppKeywords.begin(), m_CppKeywords.end()); wxStringVec(m_CppKeywords).swap(m_CppKeywords); typedef cbEventFunctor<ClangPlugin, CodeBlocksEvent> ClEvent; Manager::Get()->RegisterEventSink(cbEVT_EDITOR_OPEN, new ClEvent(this, &ClangPlugin::OnEditorOpen)); Manager::Get()->RegisterEventSink(cbEVT_EDITOR_ACTIVATED, new ClEvent(this, &ClangPlugin::OnEditorActivate)); Manager::Get()->RegisterEventSink(cbEVT_EDITOR_SAVE, new ClEvent(this, &ClangPlugin::OnEditorSave)); Manager::Get()->RegisterEventSink(cbEVT_EDITOR_CLOSE, new ClEvent(this, &ClangPlugin::OnEditorClose)); Manager::Get()->RegisterEventSink(cbEVT_PROJECT_ACTIVATE, new ClEvent(this, &ClangPlugin::OnProjectActivate)); Manager::Get()->RegisterEventSink(cbEVT_PROJECT_FILE_CHANGED, new ClEvent(this, &ClangPlugin::OnProjectFileChanged)); Manager::Get()->RegisterEventSink(cbEVT_PROJECT_OPTIONS_CHANGED, new ClEvent(this, &ClangPlugin::OnProjectOptionsChanged)); Manager::Get()->RegisterEventSink(cbEVT_PROJECT_CLOSE, new ClEvent(this, &ClangPlugin::OnProjectClose)); Connect(idReparseTimer, wxEVT_TIMER, wxTimerEventHandler(ClangPlugin::OnTimer)); Connect(idGotoDeclaration, wxEVT_COMMAND_MENU_SELECTED, /*wxMenuEventHandler*/wxCommandEventHandler(ClangPlugin::OnGotoDeclaration), nullptr, this); //Connect(idReparse, cbEVT_COMMAND_REPARSE, wxCommandEventHandler(ClangPlugin::OnReparse), nullptr, this); Connect(idClangCreateTU, cbEVT_COMMAND_CREATETU, wxCommandEventHandler(ClangPlugin::OnCreateTranslationUnit), nullptr, this); Connect(idClangCreateTU, cbEVT_CLANG_ASYNCTASK_FINISHED, wxEventHandler(ClangPlugin::OnClangCreateTUFinished), nullptr, this); Connect(idClangReparse, cbEVT_CLANG_ASYNCTASK_FINISHED, wxEventHandler(ClangPlugin::OnClangReparseFinished), nullptr, this); Connect(idClangGetDiagnostics, cbEVT_CLANG_ASYNCTASK_FINISHED, wxEventHandler(ClangPlugin::OnClangGetDiagnosticsFinished), nullptr, this); Connect(idClangSyncTask, cbEVT_CLANG_SYNCTASK_FINISHED, wxEventHandler(ClangPlugin::OnClangSyncTaskFinished), nullptr, this); Connect(idClangCodeCompleteTask, cbEVT_CLANG_SYNCTASK_FINISHED, wxEventHandler(ClangPlugin::OnClangSyncTaskFinished), nullptr, this); Connect(idClangGetOccurrencesTask, cbEVT_CLANG_SYNCTASK_FINISHED, wxEventHandler(ClangPlugin::OnClangSyncTaskFinished), nullptr, this); Connect(idClangGetCCDocumentationTask,cbEVT_CLANG_SYNCTASK_FINISHED, wxEventHandler(ClangPlugin::OnClangSyncTaskFinished), nullptr, this); m_EditorHookId = EditorHooks::RegisterHook(new EditorHooks::HookFunctor<ClangPlugin>(this, &ClangPlugin::OnEditorHook)); for ( std::vector<ClangPluginComponent*>::iterator it = m_ComponentList.begin(); it != m_ComponentList.end(); ++it) { (*it)->OnAttach(this); } }
InfoPane::InfoPane(wxWindow* parent) : cbAuiNotebook(parent, idNB, wxDefaultPosition, wxDefaultSize, infopane_flags), baseID(wxNewId()) { defaultBitmap = cbLoadBitmap(ConfigManager::GetDataFolder() + _T("/images/edit_16x16.png"), wxBITMAP_TYPE_PNG); if (Manager::Get()->GetConfigManager(_T("app"))->ReadBool(_T("/environment/infopane_tabs_bottom"), false)) SetWindowStyleFlag(GetWindowStyleFlag() | wxAUI_NB_BOTTOM); wxRegisterId(baseID + num_pages); for(int i = 0; i < num_pages; ++i) { page[i] = Page(); } }
wxImageList* cbProjectTreeImages::MakeImageList() { static const wxString imgs[] = { // NOTE: Keep in sync with FileVisualState in globals.h! // The following are related to (editable, source-) file states _T("file.png"), // fvsNormal _T("file-missing.png"), // fvsMissing, _T("file-modified.png"), // fvsModified, _T("file-readonly.png"), // fvsReadOnly, // The following are related to version control systems (vc) _T("rc-file-added.png"), // fvsVcAdded, _T("rc-file-conflict.png"), // fvsVcConflict, _T("rc-file-missing.png"), // fvsVcMissing, _T("rc-file-modified.png"), // fvsVcModified, _T("rc-file-outofdate.png"), // fvsVcOutOfDate, _T("rc-file-uptodate.png"), // fvsVcUpToDate, _T("rc-file-requireslock.png"), // fvsVcRequiresLock, _T("rc-file-external.png"), // fvsVcExternal, _T("rc-file-gotlock.png"), // fvsVcGotLock, _T("rc-file-lockstolen.png"), // fvsVcLockStolen, _T("rc-file-mismatch.png"), // fvsVcMismatch, _T("rc-file-noncontrolled.png"), // fvsVcNonControlled, // The following are related to C::B workspace/project/folder/virtual _T("workspace.png"), // fvsWorkspace, WorkspaceIconIndex() _T("workspace-readonly.png"), // fvsWorkspaceReadOnly, WorkspaceIconIndex(true) _T("project.png"), // fvsProject, ProjectIconIndex() _T("project-readonly.png"), // fvsProjectReadOnly, ProjectIconIndex(true) _T("folder_open.png"), // fvsFolder, FolderIconIndex() _T("vfolder_open.png"), // fvsVirtualFolder, VirtualFolderIconIndex() wxEmptyString }; wxBitmap bmp; wxImageList *images = new wxImageList(16, 16); wxString prefix = ConfigManager::ReadDataPath() + _T("/images/"); for (int i = 0; !imgs[i].IsEmpty(); ++i) { bmp = cbLoadBitmap(prefix + imgs[i], wxBITMAP_TYPE_PNG); // workspace images->Add(bmp); } return images; }
/*! \brief Constructor. Initialise log window(s), timer and config manager. */ OpenOCDDriver::OpenOCDDriver() : GDBRemoteTargetDriver(), m_Interface(_T("parport")), m_Option(_T("wiggler")), m_JTAGSpeed(_("0")), m_GDBPort(2000), m_ConfigFile(_T("openocd.cfg")), m_Auto(true), m_TelnetPort(4444), m_TCLPort(6666), m_ProgramPath(_T("")), m_bStarted(false), m_Pid(0), m_pLog(NULL), m_ocdint(NULL), m_FirstErr(false), m_rs(Stopped), m_Modified(true) { // Create log window wxBitmap *bmp; wxString prefix = ConfigManager::GetDataFolder() + _T("/images/"); //m_HasDebugLog = Manager::Get()->GetConfigManager(_T("debugger"))->ReadBool(_T("debug_log"), false); //if (m_HasDebugLog) //{ LogManager* msgMan = Manager::Get()->GetLogManager(); m_pLog = new TextCtrlLogger(true); m_PageIndex = msgMan->SetLog(m_pLog); msgMan->Slot(m_PageIndex).title = _("OpenOCD"); // set log image bmp = new wxBitmap(cbLoadBitmap(prefix + _T("contents_16x16.png"), wxBITMAP_TYPE_PNG)); msgMan->Slot(m_PageIndex).icon = bmp; CodeBlocksLogEvent evtAdd(cbEVT_ADD_LOG_WINDOW, m_pLog, msgMan->Slot(m_PageIndex).title, msgMan->Slot(m_PageIndex).icon); Manager::Get()->ProcessEvent(evtAdd); //} m_TimerPollDebugger.SetOwner(this, idTimer); // Get program path from ConfigManager ConfigManager* cfg = Manager::Get()->GetConfigManager(_T("mcumanager")); m_ProgramPath = cfg->Read(_T("/programpath"), _T("")); }
TextCtrlLogger* DebuggerManager::GetLogger(int &index) { LogManager* msgMan = Manager::Get()->GetLogManager(); if (!m_logger) { m_logger = new DebugTextCtrlLogger(true, false); m_loggerIndex = msgMan->SetLog(m_logger); LogSlot &slot = msgMan->Slot(m_loggerIndex); slot.title = _("Debugger"); // set log image wxString prefix = ConfigManager::GetDataFolder() + _T("/images/"); wxBitmap* bmp = new wxBitmap(cbLoadBitmap(prefix + _T("misc_16x16.png"), wxBITMAP_TYPE_PNG)); slot.icon = bmp; CodeBlocksLogEvent evtAdd(cbEVT_ADD_LOG_WINDOW, m_logger, slot.title, slot.icon); Manager::Get()->ProcessEvent(evtAdd); } index = m_loggerIndex; return m_logger; }
void ReopenEditor::ShowList() { CodeBlocksLogEvent evt1(cbEVT_REMOVE_LOG_WINDOW, m_pListLog); Manager::Get()->ProcessEvent(evt1); CodeBlocksDockEvent evt2(cbEVT_REMOVE_DOCK_WINDOW); evt2.pWindow = m_pListLog; Manager::Get()->ProcessEvent(evt2); if(m_IsManaged) { wxString prefix = ConfigManager::GetDataFolder() + _T("/images/16x16/"); wxBitmap * bmp = new wxBitmap(cbLoadBitmap(prefix + _T("undo.png"), wxBITMAP_TYPE_PNG)); CodeBlocksLogEvent evt3(cbEVT_ADD_LOG_WINDOW, m_pListLog, _("Closed files list"), bmp); Manager::Get()->ProcessEvent(evt3); CodeBlocksLogEvent evt4(cbEVT_SWITCH_TO_LOG_WINDOW, m_pListLog); Manager::Get()->ProcessEvent(evt4); } else { m_pListLog->Reparent(Manager::Get()->GetAppFrame()); m_pListLog->SetSize(wxSize(800,94)); m_pListLog->SetInitialSize(wxSize(800,94)); CodeBlocksDockEvent evt(cbEVT_ADD_DOCK_WINDOW); evt.name = _T("ReopenEditorListPane"); evt.title = _("Closed file list"); evt.pWindow = m_pListLog; evt.dockSide = CodeBlocksDockEvent::dsBottom; evt.shown = true; evt.hideable = true; evt.desiredSize.Set(800, 94); evt.floatingSize.Set(800, 94); evt.minimumSize.Set(350, 94); Manager::Get()->ProcessEvent(evt); } }
void ClangPlugin::OnAttach() { wxBitmap bmp; wxString prefix = ConfigManager::GetDataFolder() + wxT("/images/codecompletion/"); // bitmaps must be added by order of PARSER_IMG_* consts (which are also TokenCategory enums) bmp = cbLoadBitmap(prefix + wxT("class_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_CLASS_FOLDER bmp = cbLoadBitmap(prefix + wxT("class.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_CLASS bmp = cbLoadBitmap(prefix + wxT("class_private.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_CLASS_PRIVATE bmp = cbLoadBitmap(prefix + wxT("class_protected.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_CLASS_PROTECTED bmp = cbLoadBitmap(prefix + wxT("class_public.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_CLASS_PUBLIC bmp = cbLoadBitmap(prefix + wxT("ctor_private.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_CTOR_PRIVATE bmp = cbLoadBitmap(prefix + wxT("ctor_protected.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_CTOR_PROTECTED bmp = cbLoadBitmap(prefix + wxT("ctor_public.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_CTOR_PUBLIC bmp = cbLoadBitmap(prefix + wxT("dtor_private.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_DTOR_PRIVATE bmp = cbLoadBitmap(prefix + wxT("dtor_protected.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_DTOR_PROTECTED bmp = cbLoadBitmap(prefix + wxT("dtor_public.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_DTOR_PUBLIC bmp = cbLoadBitmap(prefix + wxT("method_private.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_FUNC_PRIVATE bmp = cbLoadBitmap(prefix + wxT("method_protected.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_FUNC_PRIVATE bmp = cbLoadBitmap(prefix + wxT("method_public.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_FUNC_PUBLIC bmp = cbLoadBitmap(prefix + wxT("var_private.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_VAR_PRIVATE bmp = cbLoadBitmap(prefix + wxT("var_protected.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_VAR_PROTECTED bmp = cbLoadBitmap(prefix + wxT("var_public.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_VAR_PUBLIC bmp = cbLoadBitmap(prefix + wxT("macro_def.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_MACRO_DEF bmp = cbLoadBitmap(prefix + wxT("enum.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_ENUM bmp = cbLoadBitmap(prefix + wxT("enum_private.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_ENUM_PRIVATE bmp = cbLoadBitmap(prefix + wxT("enum_protected.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_ENUM_PROTECTED bmp = cbLoadBitmap(prefix + wxT("enum_public.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_ENUM_PUBLIC bmp = cbLoadBitmap(prefix + wxT("enumerator.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_ENUMERATOR bmp = cbLoadBitmap(prefix + wxT("namespace.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_NAMESPACE bmp = cbLoadBitmap(prefix + wxT("typedef.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_TYPEDEF bmp = cbLoadBitmap(prefix + wxT("typedef_private.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_TYPEDEF_PRIVATE bmp = cbLoadBitmap(prefix + wxT("typedef_protected.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_TYPEDEF_PROTECTED bmp = cbLoadBitmap(prefix + wxT("typedef_public.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_TYPEDEF_PUBLIC bmp = cbLoadBitmap(prefix + wxT("symbols_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_SYMBOLS_FOLDER bmp = cbLoadBitmap(prefix + wxT("vars_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_VARS_FOLDER bmp = cbLoadBitmap(prefix + wxT("funcs_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_FUNCS_FOLDER bmp = cbLoadBitmap(prefix + wxT("enums_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_ENUMS_FOLDER bmp = cbLoadBitmap(prefix + wxT("macro_def_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_MACRO_DEF_FOLDER bmp = cbLoadBitmap(prefix + wxT("others_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_OTHERS_FOLDER bmp = cbLoadBitmap(prefix + wxT("typedefs_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_TYPEDEF_FOLDER bmp = cbLoadBitmap(prefix + wxT("macro_use.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_MACRO_USE bmp = cbLoadBitmap(prefix + wxT("macro_use_private.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_MACRO_USE_PRIVATE bmp = cbLoadBitmap(prefix + wxT("macro_use_protected.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_MACRO_USE_PROTECTED bmp = cbLoadBitmap(prefix + wxT("macro_use_public.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_MACRO_USE_PUBLIC bmp = cbLoadBitmap(prefix + wxT("macro_use_folder.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // PARSER_IMG_MACRO_USE_FOLDER bmp = cbLoadBitmap(prefix + wxT("cpp_lang.png"), wxBITMAP_TYPE_PNG); m_ImageList.Add(bmp); // tcLangKeyword EditorColourSet* theme = Manager::Get()->GetEditorManager()->GetColourSet(); wxStringTokenizer tokenizer(theme->GetKeywords(theme->GetHighlightLanguage(wxT("C/C++")), 0)); while (tokenizer.HasMoreTokens()) m_CppKeywords.push_back(tokenizer.GetNextToken()); std::sort(m_CppKeywords.begin(), m_CppKeywords.end()); wxStringVec(m_CppKeywords).swap(m_CppKeywords); typedef cbEventFunctor<ClangPlugin, CodeBlocksEvent> ClEvent; Manager::Get()->RegisterEventSink(cbEVT_EDITOR_OPEN, new ClEvent(this, &ClangPlugin::OnEditorOpen)); Manager::Get()->RegisterEventSink(cbEVT_EDITOR_ACTIVATED, new ClEvent(this, &ClangPlugin::OnEditorActivate)); Connect(idEdOpenTimer, wxEVT_TIMER, wxTimerEventHandler(ClangPlugin::OnTimer)); Connect(idReparseTimer, wxEVT_TIMER, wxTimerEventHandler(ClangPlugin::OnTimer)); Connect(idDiagnosticTimer, wxEVT_TIMER, wxTimerEventHandler(ClangPlugin::OnTimer)); Connect(idGotoDeclaration, wxEVT_COMMAND_MENU_SELECTED, /*wxMenuEventHandler*/wxCommandEventHandler(ClangPlugin::OnGotoDeclaration), nullptr, this); m_EditorHookId = EditorHooks::RegisterHook(new EditorHooks::HookFunctor<ClangPlugin>(this, &ClangPlugin::OnEditorHook)); }
void CompilerSettingsDlg::AddPluginPanels() { const wxString base = _T("images/settings/"); const wxString noimg = _T("images/settings/generic-plugin"); wxListbook* lb = XRCCTRL(*this, "nbMain", wxListbook); // we 'll remove the existing page and add it when appropriate wxWindow* existingPage = lb->GetPage(0); wxString existingTitle = lb->GetPageText(0); lb->RemovePage(0); // we 'll do this in two steps: // 1) get all compiler-related panels and put them before batch-builds // 2) get all debugger panels and put them after batch-builds ConfigurationPanelsArray local; // step 1 Manager::Get()->GetPluginManager()->GetConfigurationPanels(cgCompiler, lb, local); for (size_t i = 0; i < local.GetCount(); ++i) { cbConfigurationPanel* panel = local[i]; lb->AddPage(panel, panel->GetTitle()); wxString onFile = ConfigManager::LocateDataFile(base + panel->GetBitmapBaseName() + _T(".png"), sdDataGlobal | sdDataUser); if (onFile.IsEmpty()) onFile = ConfigManager::LocateDataFile(noimg + _T(".png"), sdDataGlobal | sdDataUser); wxString offFile = ConfigManager::LocateDataFile(base + panel->GetBitmapBaseName() + _T("-off.png"), sdDataGlobal | sdDataUser); if (offFile.IsEmpty()) offFile = ConfigManager::LocateDataFile(noimg + _T("-off.png"), sdDataGlobal | sdDataUser); lb->GetImageList()->Add(cbLoadBitmap(onFile)); lb->GetImageList()->Add(cbLoadBitmap(offFile)); lb->SetPageImage(lb->GetPageCount() - 1, lb->GetImageList()->GetImageCount() - 2); // add it in our central container too m_PluginPanels.Add(panel); } // now load the builtin pages' images lb->AddPage(existingPage, existingTitle); wxString onFile = ConfigManager::LocateDataFile(base + base_imgs[0] + _T(".png"), sdDataGlobal | sdDataUser); if (onFile.IsEmpty()) onFile = ConfigManager::LocateDataFile(noimg + _T(".png"), sdDataGlobal | sdDataUser); wxString offFile = ConfigManager::LocateDataFile(base + base_imgs[0] + _T("-off.png"), sdDataGlobal | sdDataUser); if (offFile.IsEmpty()) offFile = ConfigManager::LocateDataFile(noimg + _T("-off.png"), sdDataGlobal | sdDataUser); lb->GetImageList()->Add(cbLoadBitmap(onFile)); lb->GetImageList()->Add(cbLoadBitmap(offFile)); lb->SetPageImage(lb->GetPageCount() -1, lb->GetImageList()->GetImageCount() - 2); // step 2 Manager::Get()->GetPluginManager()->GetConfigurationPanels(cgDebugger, lb, local); for (size_t i = 0; i < local.GetCount(); ++i) { cbConfigurationPanel* panel = local[i]; lb->AddPage(panel, panel->GetTitle()); wxString onFile = ConfigManager::LocateDataFile(base + panel->GetBitmapBaseName() + _T(".png"), sdDataGlobal | sdDataUser); if (onFile.IsEmpty()) onFile = ConfigManager::LocateDataFile(noimg + _T(".png"), sdDataGlobal | sdDataUser); wxString offFile = ConfigManager::LocateDataFile(base + panel->GetBitmapBaseName() + _T("-off.png"), sdDataGlobal | sdDataUser); if (offFile.IsEmpty()) offFile = ConfigManager::LocateDataFile(noimg + _T("-off.png"), sdDataGlobal | sdDataUser); lb->GetImageList()->Add(cbLoadBitmap(onFile)); lb->GetImageList()->Add(cbLoadBitmap(offFile)); lb->SetPageImage(lb->GetPageCount() - 1, lb->GetImageList()->GetImageCount() - 2); // add it in our central container too m_PluginPanels.Add(panel); } UpdateListbookImages(); }