| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489 |
- /*=========================================================================
- Program: CMake - Cross-Platform Makefile Generator
- Module: $RCSfile$
- Language: C++
- Date: $Date$
- Version: $Revision$
- Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
- See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notices for more information.
- =========================================================================*/
- #include "cmWXMainFrame.h"
- #include "cmCacheManager.h"
- #include "cmWXCacheProperty.h"
- #include "cmWXCommandLineInfo.h"
- #include "cmake.h"
- #ifdef __linux__
- #include "CMakeIcon.xpm"
- #endif
- cmMainFrame::cmMainFrame(const wxString& title, const wxSize& size)
- : wxFrame((wxFrame*)NULL, cmMainFrame::ID_MainFrame, title, wxDefaultPosition, size)
- {
- #ifdef __linux__
- this->SetIcon( wxICON(CMakeIcon) );
- #endif
- cmSystemTools::SetErrorCallback(cmMainFrame::MessageCallback, this);
- this->m_Clean = true;
- this->m_BuildPathChanged = false;
- this->m_WhereSource = "";
- this->m_WhereBuild = "";
-
- this->m_CMakeInstance = new cmake; // force a register of generators
- this->m_Update = false;
- this->m_Valid = false;
- this->m_EntryRemoved = false;
- this->m_CursorChanged = false;
- this->m_CacheEntries = new cmMainFrame::CacheMapType;
- this->CreateStatusBar(1);
- this->SetStatusText("Welcome to CMakeSetup");
-
- this->m_MainPanel = new wxPanel(this, -1);
- this->SetBackgroundColour(this->m_MainPanel->GetBackgroundColour());
-
- this->m_TopMostSizer = new wxBoxSizer(wxVERTICAL);
-
- this->m_TopMostSizer->Add( this->m_MainPanel, 1, wxGROW | wxALL, 5 );
- wxFlexGridSizer* msizer = new wxFlexGridSizer(1, 5, 5);
- msizer->AddGrowableRow(2);
- msizer->AddGrowableCol(0);
- this->m_MainSizer = msizer;
- wxFlexGridSizer* tgrid = new wxFlexGridSizer(7, 2, 2);
- tgrid->AddGrowableCol(2);
- tgrid->AddGrowableCol(6);
- this->m_TopGrid = tgrid;
-
- this->m_TextSource = new wxStaticText(this->m_MainPanel, -1, "Where is the source code:");
- this->m_PathSource = new wxComboBox(this->m_MainPanel, -1, "PathSource");
- this->m_BrowseSource = new wxButton(this->m_MainPanel, -1, "Browse...");
- tgrid = new wxFlexGridSizer(3, 2, 2);
- tgrid->AddGrowableCol(2);
- this->m_GeneratorFrame = tgrid;
- this->m_BuildFor = new wxStaticText(this->m_MainPanel, -1, "Build For:");
- this->m_GeneratorMenu = new wxComboBox(this->m_MainPanel, -1, "",
- wxDefaultPosition, wxDefaultSize,
- 0, 0, wxCB_READONLY);
- this->m_GeneratorFrame->Add(this->m_BuildFor, 0, wxALIGN_LEFT);
- this->m_GeneratorFrame->Add(5,5,0);
- this->m_GeneratorFrame->Add(this->m_GeneratorMenu, 1, wxGROW | wxLEFT | wxRIGHT );
- this->m_TextBinary = new wxStaticText(this->m_MainPanel, -1,
- "Where to build the binaries:");
- this->m_PathBinary = new wxComboBox(this->m_MainPanel, -1, "PathBinary");
- this->m_BrowseBinary = new wxButton(this->m_MainPanel, -1, "Browse...");
- this->m_ShowAdvancedValues = new wxCheckBox(this->m_MainPanel, -1,
- "Show Advanced Values");
- this->m_TopGrid->Add(this->m_TextSource, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
- this->m_TopGrid->Add(5, 5, 0);
- this->m_TopGrid->Add(this->m_PathSource, 1, wxGROW | wxLEFT | wxRIGHT );
- this->m_TopGrid->Add(5, 5, 0);
- this->m_TopGrid->Add(this->m_BrowseSource, 1, 0);
- this->m_TopGrid->Add(5, 5, 0);
- this->m_TopGrid->Add(this->m_GeneratorFrame, 1, wxGROW | wxLEFT | wxRIGHT);
- this->m_TopGrid->Add(this->m_TextBinary, 1, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
- this->m_TopGrid->Add(5, 5, 0);
- this->m_TopGrid->Add(this->m_PathBinary, 1, wxGROW | wxLEFT | wxRIGHT );
- this->m_TopGrid->Add(5, 5, 0);
- this->m_TopGrid->Add(this->m_BrowseBinary, 1, 0);
- this->m_TopGrid->Add(5, 5, 0);
- this->m_TopGrid->Add(this->m_ShowAdvancedValues, 1, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
- this->m_MainSizer->Add(5, 5, 0);
- this->m_MainSizer->Add(this->m_TopGrid, 1, wxGROW | wxLEFT | wxRIGHT, 10 );
- this->m_CacheValuesBox = new wxStaticBox(this->m_MainPanel, -1, "Cache Values");
- //this->m_CacheValuesBox->SetBackgroundColour(*wxWHITE);
- this->m_CacheValuesFrame = new wxStaticBoxSizer(this->m_CacheValuesBox,
- wxVERTICAL);
- this->m_CacheValuesScroll = new wxScrolledWindow(this->m_MainPanel, -1,
- wxDefaultPosition, wxDefaultSize,
- wxVSCROLL);
- this->m_CacheValuesScroll->SetBackgroundColour(*wxWHITE);
- this->m_CacheValuesFrame->Add(this->m_CacheValuesScroll, 1, wxEXPAND | wxALL, 0 );
- this->m_CacheValuesPanel = new wxPanel(this->m_CacheValuesScroll, -1);
- this->m_CacheValuesPanel->SetBackgroundColour(wxColor(150, 150, 150));
- wxFlexGridSizer* csizer = new wxFlexGridSizer(2, 1, 1);
- csizer->AddGrowableCol(0);
- csizer->AddGrowableCol(1);
- this->m_CacheValuesSizer = csizer;
- this->m_CacheValuesPanel->SetAutoLayout( TRUE );
- this->m_CacheValuesPanel->SetSizer(this->m_CacheValuesSizer);
- //this->m_CacheValuesPanel->SetBackgroundColour(wxColour(10,10,10));
- this->m_CacheValuesSizer->Fit(this->m_CacheValuesPanel);
- this->m_CacheValuesSizer->SetSizeHints(this->m_CacheValuesPanel);
-
- //this->m_CacheValuesScroll->SetScrollbars(0, 20, 0, 50);
- //wxSize framesize = this->m_CacheValuesBox->GetSize();
- //this->m_CacheValuesBox->SetSize(framesize.GetWidth(), 100);
- this->SetSizeHints(580, 340);
- this->m_MainSizer->Add(this->m_CacheValuesFrame, 1, wxGROW | wxALL );
- wxString helpTextData = "";
- helpTextData.append
- ("Right click on a cache value for additional options "
- "(delete, ignore, and help).\n"
- "Press Configure to update and display new values in red.\n"
- "Press OK to generate selected build files and exit.");
- this->m_HelpText = new wxStaticText(this->m_MainPanel, -1, helpTextData,
- wxDefaultPosition,
- wxDefaultSize,
- wxTE_MULTILINE);
- this->m_MainSizer->Add(5, 5, 0);
- this->m_MainSizer->Add(this->m_HelpText, 0, wxALIGN_CENTER_HORIZONTAL, 10);
- this->m_BottomButtonsFrame = new wxBoxSizer(wxHORIZONTAL);
-
- //this->m_VersionText = new wxStaticText(this->m_MainPanel, -1,
- //"Version 1.5 - development");
- this->m_ConfigureButton = new wxButton(this->m_MainPanel, -1, "Configure");
- this->m_OKButton = new wxButton(this->m_MainPanel, -1, "OK");
- this->m_CancelButton = new wxButton(this->m_MainPanel, -1, "Cancel");
- this->m_HelpButton = new wxButton(this->m_MainPanel, -1, "Help");
- this->m_BottomButtonsFrame->Add(m_ConfigureButton, 0, wxALIGN_LEFT, 10);
- this->m_BottomButtonsFrame->Add(5, 5, 0);
- this->m_BottomButtonsFrame->Add(m_OKButton, 0, wxALIGN_LEFT, 10);
- this->m_BottomButtonsFrame->Add(5, 5, 0);
- this->m_BottomButtonsFrame->Add(m_CancelButton, 0, wxALIGN_LEFT, 10);
- this->m_BottomButtonsFrame->Add(5, 5, 0);
- this->m_BottomButtonsFrame->Add(m_HelpButton, 0, wxALIGN_LEFT, 10);
- this->m_MainSizer->Add(5, 5, 0);
- this->m_MainSizer->Add(m_BottomButtonsFrame, 0, wxALIGN_CENTER_HORIZONTAL, 10);
- this->m_MainSizer->Add(5, 5, 0);
- this->m_MainPanel->SetAutoLayout( TRUE );
- this->m_MainPanel->SetSizer(this->m_MainSizer);
- this->m_MainSizer->Fit(this->m_MainPanel);
- this->m_MainSizer->SetSizeHints(this->m_MainPanel);
- this->SetAutoLayout( TRUE );
- this->SetSizer(this->m_TopMostSizer);
- this->m_TopMostSizer->Fit(this);
- this->m_TopMostSizer->SetSizeHints(this);
- // Setup statusbar callbacks
-
- this->SetupStatusBarBinding(this->m_ConfigureButton);
- this->SetupStatusBarBinding(this->m_OKButton);
- this->SetupStatusBarBinding(this->m_CancelButton);
- this->SetupStatusBarBinding(this->m_HelpButton);
- this->SetupStatusBarBinding(this->m_PathSource);
- this->SetupStatusBarBinding(this->m_BrowseSource);
- this->SetupStatusBarBinding(this->m_PathBinary);
- this->SetupStatusBarBinding(this->m_BrowseBinary);
- this->SetupStatusBarBinding(this->m_GeneratorMenu);
- this->SetupStatusBarBinding(this->m_ShowAdvancedValues);
- // Setup other callbacks
- this->ConnectEvent( this->m_CancelButton, wxEVT_COMMAND_BUTTON_CLICKED,
- (wxObjectEventFunction) &cmMainFrame::OnCancel );
- this->ConnectEvent( this->m_OKButton, wxEVT_COMMAND_BUTTON_CLICKED,
- (wxObjectEventFunction) &cmMainFrame::OnOk );
- this->ConnectEvent( this->m_HelpButton, wxEVT_COMMAND_BUTTON_CLICKED,
- (wxObjectEventFunction) &cmMainFrame::OnHelp );
- this->ConnectEvent( this->m_ConfigureButton, wxEVT_COMMAND_BUTTON_CLICKED,
- (wxObjectEventFunction) &cmMainFrame::OnConfigure );
- this->ConnectEvent( this, wxEVT_SIZE,
- (wxObjectEventFunction) &cmMainFrame::OnResize );
- this->ConnectEvent( this->m_ShowAdvancedValues, wxEVT_COMMAND_CHECKBOX_CLICKED,
- (wxObjectEventFunction) &cmMainFrame::OnShowAdvancedValues );
- this->ConnectEvent( this->m_BrowseSource, wxEVT_COMMAND_BUTTON_CLICKED,
- (wxObjectEventFunction) &cmMainFrame::OnBrowseSource );
- this->ConnectEvent( this->m_BrowseBinary, wxEVT_COMMAND_BUTTON_CLICKED,
- (wxObjectEventFunction) &cmMainFrame::OnBrowseBinary );
- this->ConnectEvent( this->m_PathSource, wxEVT_COMMAND_COMBOBOX_SELECTED,
- (wxObjectEventFunction) &cmMainFrame::OnSourceSelected );
- this->ConnectEvent( this->m_PathSource, wxEVT_COMMAND_TEXT_UPDATED,
- (wxObjectEventFunction) &cmMainFrame::OnSourceUpdated );
- this->ConnectEvent( this->m_PathBinary, wxEVT_COMMAND_COMBOBOX_SELECTED,
- (wxObjectEventFunction) &cmMainFrame::OnBinarySelected );
- this->ConnectEvent( this->m_PathBinary, wxEVT_COMMAND_TEXT_UPDATED,
- (wxObjectEventFunction) &cmMainFrame::OnBinaryUpdated );
- this->ConnectEvent( this->m_PathBinary, wxEVT_COMMAND_TEXT_ENTER,
- (wxObjectEventFunction) &cmMainFrame::OnBinaryAccepted );
- this->ConnectEvent( this->m_GeneratorMenu, wxEVT_COMMAND_COMBOBOX_SELECTED,
- (wxObjectEventFunction) &cmMainFrame::OnGeneratorSelected );
- this->ConnectEvent( this->m_GeneratorMenu, wxEVT_COMMAND_TEXT_UPDATED,
- (wxObjectEventFunction) &cmMainFrame::OnGeneratorSelected );
- this->ConnectEvent( this, wxEVT_TIMER,
- (wxObjectEventFunction) &cmMainFrame::OnExitTimer );
- this->Connect(cmCacheProperty::Menu_Popup_Ignore, wxEVT_COMMAND_MENU_SELECTED,
- (wxObjectEventFunction) &cmMainFrame::OnPopupMenuIgnore);
- this->Connect(cmCacheProperty::Menu_Popup_Delete, wxEVT_COMMAND_MENU_SELECTED,
- (wxObjectEventFunction) &cmMainFrame::OnPopupMenuDelete);
- this->Connect(cmCacheProperty::Menu_Popup_Help, wxEVT_COMMAND_MENU_SELECTED,
- (wxObjectEventFunction) &cmMainFrame::OnPopupMenuHelp);
- this->m_CMakeInstance->SetProgressCallback(&cmMainFrame::ProgressCallback, this);
- }
- cmMainFrame::~cmMainFrame()
- {
- cmMainFrame::CacheMapType* items = this->m_CacheEntries;
- for(cmMainFrame::CacheMapType::iterator i = items->begin();
- i != items->end(); ++i)
- {
- cmCacheProperty* item = i->second;
- delete item;
- }
- delete this->m_CacheEntries;
- delete this->m_CMakeInstance;
- }
- void cmMainFrame::MessageCallback(const char* m, const char* title, bool& nomore,
- void* clientData)
- {
- if ( clientData )
- {
- cmMainFrame* self = static_cast<cmMainFrame*>( clientData );
- self->DisplayMessage(m, title, nomore);
- }
- else
- {
- std::string message = "The following error happen without frame being set:\n\n";
- message += m;
- message += "\n\n(Press Cancel to suppress any further messages.)";
- if(::wxMessageBox(message.c_str(), title,
- wxICON_WARNING | wxOK | wxCANCEL ) == wxCANCEL)
- {
- nomore = true;
- }
- }
- }
- void cmMainFrame::ProgressCallback(const char* m, float prog,
- void* clientData)
- {
- if ( clientData )
- {
- cmMainFrame* self = static_cast<cmMainFrame*>( clientData );
- char tmp[1024];
- if (prog >= 0)
- {
- sprintf(tmp,"%s %i%%",m,(int)(100*prog));
- }
- else
- {
- sprintf(tmp,"%s",m);
- }
- self->SetStatusText(tmp);
- wxYield();
- }
- }
- void cmMainFrame::DisplayMessage(const char* m, const char* title, bool& nomore)
- {
- this->CursorNormal(false);
- std::string message = m;
- message += "\n\n(Press Cancel to suppress any further messages.)";
- if(::wxMessageBox(message.c_str(), title,
- wxICON_WARNING | wxOK | wxCANCEL ) == wxCANCEL)
- {
- nomore = true;
- }
- if ( this->m_CursorChanged )
- {
- this->CursorBusy(false);
- }
- }
- void cmMainFrame::ConnectEvent(wxWindow* win, wxEventType et, wxObjectEventFunction func)
- {
- //
- this->Connect((win?win->GetId():-1), et, func);
- //
- }
- void cmMainFrame::ConnectEventTo(wxWindow* win, wxEventType et, wxObjectEventFunction func)
- {
- //
- win->Connect(-1, et, func);
- //
- }
- void cmMainFrame::OnStatusBar(wxEvent& event)
- {
- wxControl* eobject = static_cast<wxControl*>(event.GetEventObject());
- if ( eobject && eobject->GetClientData() )
- {
- cmMainFrame* self = static_cast<cmMainFrame*>(eobject->GetClientData());
- if ( eobject == self->m_OKButton )
- {
- self->SetStatusText("Press OK to generate selected build files and exit.");
- }
- else if ( eobject == self->m_CancelButton )
- {
- self->SetStatusText("Press Cancel to lose the changes and exit.");
- }
- else if ( eobject == self->m_ConfigureButton )
- {
- self->SetStatusText("Press Configure to update and display new values in red.");
- }
- else if ( eobject == self->m_HelpButton )
- {
- self->SetStatusText("Press Help to display help.");
- }
- else if ( eobject == self->m_ShowAdvancedValues )
- {
- self->SetStatusText("Toggle between regular and advanced cache values.");
- }
- else if ( eobject == self->m_GeneratorMenu )
- {
- self->SetStatusText("Set the generator to generate the build files.");
- }
- else if ( eobject == self->m_PathSource )
- {
- self->SetStatusText("Enter the path to the source files.");
- }
- else if ( eobject == self->m_BrowseSource )
- {
- self->SetStatusText("Browse the path to the source files.");
- }
- else if ( eobject == self->m_PathBinary )
- {
- self->SetStatusText("Enter the path to the build files.");
- }
- else if ( eobject == self->m_BrowseBinary )
- {
- self->SetStatusText("Browse the path to the build files.");
- }
- else
- {
- self->SetStatusText("CMakeSetup");
- }
- }
- }
- void cmMainFrame::OnCacheStatusBar(wxEvent& event)
- {
- wxControl* eobject = static_cast<wxControl*>(event.GetEventObject());
- if ( eobject && eobject->GetClientData() )
- {
- cmCacheProperty* cprop = static_cast<cmCacheProperty*>(eobject->GetClientData());
- cprop->GetMainFrame()->SetStatusText(cprop->GetHelp().c_str(), 0);
- }
- }
- void cmMainFrame::OnPopupMenu(wxMouseEvent& event)
- {
- //
- wxControl* eobject = static_cast<wxControl*>(event.GetEventObject());
- if ( eobject && eobject->GetClientData() )
- {
- wxMenu menu;
- menu.Append(cmCacheProperty::Menu_Popup_Ignore, "Ignore Cache Entry");
- menu.Append(cmCacheProperty::Menu_Popup_Delete, "Delete Cache Entry");
- menu.Append(cmCacheProperty::Menu_Popup_Help, "Help for Cache Entry");
- cmCacheProperty* cprop = static_cast<cmCacheProperty*>(eobject->GetClientData());
- cmMainFrame* self = cprop->GetMainFrame();
- menu.SetClientData(eobject->GetClientData());
- this->PopupMenu(&menu, event.GetPosition());
- if ( self->m_EntryRemoved )
- {
- self->UpdateCacheValuesDisplay();
- self->m_EntryRemoved = false;
- }
- }
- }
- void cmMainFrame::OnPopupMenuIgnore(wxEvent& event)
- {
- //
- this->OnPopupMenuEntry(event, 0);
- //
- }
- void cmMainFrame::OnPopupMenuDelete(wxEvent& event)
- {
- //
- this->OnPopupMenuEntry(event, 1);
- //
- }
- void cmMainFrame::OnPopupMenuHelp(wxEvent& event)
- {
- //
- this->OnPopupMenuEntry(event, 2);
- //
- }
- void cmMainFrame::OnPopupMenuEntry(wxEvent& event, int idx)
- {
- wxMenu* eobject = static_cast<wxMenu*>(event.GetEventObject());
- if ( eobject && eobject->GetClientData() )
- {
- cmCacheProperty* cprop = static_cast<cmCacheProperty*>(eobject->GetClientData());
- switch ( idx )
- {
- case 0: this->IgnoreCacheEntry(cprop->GetName().c_str());
- break;
- case 1: this->RemoveCacheEntry(cprop);
- break;
- case 2: this->HelpCacheEntry(cprop->GetName().c_str(), cprop->GetHelp().c_str());
- break;
- }
- }
- }
- void cmMainFrame::OnOk(wxCommandEvent&)
- {
- // enable error messages each time configure is pressed
- cmSystemTools::EnableMessages();
- this->ClearDirty();
- this->RunCMake(true);
- cmMainFrame::Close(TRUE);
- }
- void cmMainFrame::OnCancel(wxCommandEvent&)
- {
- if ( this->IsDirty() )
- {
- // Display dialog
- if ( wxMessageBox( "You have changed options but not rebuild, "
- "are you sure you want to exit?",
- "Confirm Exit", wxICON_WARNING | wxYES_NO ) != wxYES )
- {
- return;
- }
- }
- cmMainFrame::Close(TRUE);
- }
- void cmMainFrame::OnConfigure(wxCommandEvent&)
- {
- // enable error messages each time configure is pressed
- cmSystemTools::EnableMessages();
- this->m_Update = true;
- this->RunCMake(false);
- }
- void cmMainFrame::OnHelp(wxCommandEvent&)
- {
- std::string message =
- "CMake is used to configure and generate build files for software projects. The basic steps for configuring a\n"
- "project are as follows:\n\n"
- "1. Select the source directory for the project. This should contain the CMakeLists.txt files for the project.\n\n"
- "2. Select the build directory for the project. This is the directory where the project will be built. It can\n"
- "be the same or a different directory than the source directory. For easy clean up, a separate build directory\n"
- "is recommended. CMake will create the directory if it does not exist.\n\n"
- "3. Once the source and binary directories are selected, it is time to press the Configure button. This will cause\n"
- "CMake to read all of the input files and discover all the variables used by the project. The first time a\n"
- "variable is displayed it will be in Red. Users should inspect red variables making sure the values are correct.\n"
- "For some projects the Configure process can be iterative, so continue to press the Configure button until there\n"
- " are no longer red entries.\n\n"
- "4. Once there are no longer red entries, you should click the OK button. This will write the build files to the\n"
- "build directory and exit CMake.";
- ::wxMessageBox(message.c_str(), "CMake Help",
- wxICON_INFORMATION | wxOK );
- }
- void cmMainFrame::OnPropertyChanged(wxEvent& event)
- {
- this->SetDirty();
- wxControl* eobject = static_cast<wxControl*>(event.GetEventObject());
- if ( eobject && eobject->GetClientData() )
- {
- cmCacheProperty* property = static_cast<cmCacheProperty*>(
- eobject->GetClientData() );
- property->OnPropertyChanged(event);
- }
- }
- void cmMainFrame::OnResize(wxSizeEvent& event)
- {
- this->wxFrame::OnSize(event);
- // Expand inner pannel when window resizes
- this->ResizeInternal();
- }
- void cmMainFrame::OnExitTimer(wxEvent&)
- {
- this->Close();
- this->Refresh();
- }
- void cmMainFrame::ResizeInternal()
- {
- // Expand inner pannel when window resizes
- int x, y;
- this->m_CacheValuesScroll->GetClientSize(&x, &y);
- wxSize size1 = this->m_CacheValuesPanel->GetSize();
- this->m_CacheValuesPanel->SetSize(wxSize(x, size1.GetHeight()));
- //this->m_CacheValuesSizer->SetDimension(0,0,x,size1.GetHeight());
- }
- void cmMainFrame::OnBrowseSource(wxCommandEvent&)
- {
- std::string path = this->m_PathSource->GetValue().c_str();
- if ( path == "PathSource" )
- {
- path = cmSystemTools::CollapseFullPath(this->m_PathToExecutable.c_str());
- }
- wxDirDialog dialog ( this, _T("Select path"), path.c_str() );
- if (dialog.ShowModal() == wxID_OK)
- {
- this->SetSourceDir(dialog.GetPath());
- }
- }
- void cmMainFrame::OnBrowseBinary(wxCommandEvent&)
- {
- std::string path = this->m_PathBinary->GetValue().c_str();
- if ( path == "PathBinary" )
- {
- path = this->m_PathSource->GetValue().c_str();
- if ( path == "PathSource" )
- {
- path = cmSystemTools::CollapseFullPath(this->m_PathToExecutable.c_str());
- }
- }
- wxDirDialog dialog ( this, _T("Select path"), path.c_str() );
- if (dialog.ShowModal() == wxID_OK)
- {
- if ( this->SetBinaryDir(dialog.GetPath()) )
- {
- this->m_Update = true;
- this->ChangeWhereBuild();
- }
- }
- }
- void cmMainFrame::Initialize(cmCommandLineInfo* cmdInfo)
- {
- this->m_PathToExecutable = cmdInfo->GetPathToExecutable();
- this->LoadFromRegistry();
- std::vector<std::string> names;
- this->m_CMakeInstance->GetRegisteredGenerators(names);
- int cc = 0;
- for(std::vector<std::string>::iterator i = names.begin();
- i != names.end(); ++i)
- {
- this->m_GeneratorMenu->Append(i->c_str());
- if ( *i == "Unix Makefiles" )
- {
- this->m_GeneratorMenu->SetSelection(cc);
- }
- cc ++;
- }
- //{{AFX_DATA_INIT(CMakeSetupDialog)
- // Get the parameters from the command line info
- // If an unknown parameter is found, try to interpret it too, since it
- // is likely to be a file dropped on the shortcut :)
- if (cmdInfo->m_LastUnknownParameter.empty())
- {
- if ( cmdInfo->m_WhereSource.size() > 0 )
- {
- this->SetSourceDir( cmdInfo->m_WhereSource.c_str() );
- }
- if ( cmdInfo->m_WhereBuild.size() > 0 )
- {
- this->SetBinaryDir( cmdInfo->m_WhereBuild.c_str() );
- }
- if ( this->m_GeneratorMenu->GetSelection() >= 0 &&
- this->m_GeneratorMenu->GetValue().size() > 0 )
- {
- this->SetGenerator(this->m_GeneratorMenu->GetValue().c_str());
- }
- this->m_ShowAdvancedValues->SetValue(cmdInfo->m_AdvancedValues);
- }
- else
- {
- this->m_ShowAdvancedValues->SetValue(FALSE);
- this->ChangeDirectoriesFromFile(cmdInfo->m_LastUnknownParameter.c_str());
- }
- /*
- this->UpdateSourceBuildMenus();
- */
- this->LoadCacheFromDiskToGUI();
- if ( cmdInfo->m_ExitAfterLoad )
- {
- this->m_ExitTimer = new wxTimer(this, this->GetId());
- this->m_ExitTimer->Start(3000);
- }
- }
- //! Set the current generator
- void cmMainFrame::SetGenerator(const char* generator)
- {
- if ( strlen(generator) > 0 )
- {
- int pos = this->m_GeneratorMenu->FindString(generator);
- if ( pos >= 0 )
- {
- this->m_GeneratorMenu->SetSelection(pos);
- }
- }
- }
- //! Load cache file from m_WhereBuild and display in GUI editor
- void cmMainFrame::LoadCacheFromDiskToGUI()
- {
- cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager();
- if(this->GetBinaryDir().size() > 0 )
- {
- cachem->LoadCache(this->m_WhereBuild.c_str());
- this->UpdateCacheValuesDisplay();
- cmCacheManager::CacheIterator it = cachem->NewIterator();
- if(it.Find("CMAKE_GENERATOR"))
- {
- std::string curGen = it.GetValue();
- if(this->m_GeneratorMenu->GetSelection() < 0 ||
- std::string(this->m_GeneratorMenu->GetValue().c_str()) != curGen)
- {
- this->SetGenerator(curGen.c_str());
- }
- }
- }
- }
- // copy from the cache manager to the cache edit list box
- void cmMainFrame::FillCacheGUIFromCacheManager()
- {
-
- //size_t size = 0;
- //size_t size = this->m_CacheEntriesList.GetItems().size();
- //bool reverseOrder = false;
- // if there are already entries in the cache, then
- // put the new ones in the top, so they show up first
- /*
- if(size)
- {
- reverseOrder = true;
- }
- */
- this->UpdateCacheValuesDisplay();
- }
- void cmMainFrame::OnGeneratorSelected(wxEvent&)
- {
- }
- void cmMainFrame::OnShowAdvancedValues(wxCommandEvent&)
- {
- this->m_Update = false;
- this->UpdateCacheValuesDisplay();
- }
- // Handle param or single dropped file.
- // If the dropped file is a build directory or any file in a
- // build directory, set the source dir from the cache file,
- // otherwise set the source and build dirs to this file (or dir).
- void cmMainFrame::ChangeDirectoriesFromFile(const char* buffer)
- {
- // Get the path to this file
- std::string path = buffer;
- if (!cmSystemTools::FileIsDirectory(path.c_str()))
- {
- path = cmSystemTools::GetFilenamePath(path);
- }
- else
- {
- cmSystemTools::ConvertToUnixSlashes(path);
- }
- // Check if it's a build dir and grab the cache
- std::string cache_file = path;
- cache_file += "/CMakeCache.txt";
- cmCacheManager *cache = this->m_CMakeInstance->GetCacheManager();
- cmCacheManager::CacheIterator it = cache->GetCacheIterator("CMAKE_HOME_DIRECTORY");
- if (cmSystemTools::FileExists(cache_file.c_str()) &&
- cache->LoadCache(path.c_str()) &&
- !it.IsAtEnd())
- {
- path = cmSystemTools::ConvertToOutputPath(path.c_str());
- this->SetBinaryDir(path.c_str());
- path = cmSystemTools::ConvertToOutputPath(it.GetValue());
- this->SetSourceDir(path.c_str());
- }
- else
- {
- path = cmSystemTools::ConvertToOutputPath(path.c_str());
- this->SetSourceDir(path.c_str());
- this->SetBinaryDir(path.c_str());
- }
- }
- void cmMainFrame::UpdateSourceBuildMenus()
- {
- }
- void cmMainFrame::RunCMake(bool generateProjectFiles)
- {
- if(this->m_GeneratorMenu->GetSelection() < 0 ||
- std::string(this->m_GeneratorMenu->GetValue().c_str()) == "")
- {
- std::string bindir = this->GetBinaryDir();
- if ( bindir.find("-") != bindir.npos )
- {
- std::string message =
- "Generator not specified. Please specify the generator for\n"
- "building the project.";
- wxMessageBox(message.c_str(), "CMake Error", wxICON_ERROR | wxOK );
- return;
- }
- }
- if(std::string(this->m_GeneratorMenu->GetValue().c_str()) == "Borland Makefiles")
- {
- std::string bindir = this->GetBinaryDir();
- if ( bindir.find("-") != bindir.npos )
- {
- std::string message =
- "The Borland command line tools do not support path names\n"
- "that have - in them. Please re-name your output directory\n"
- "and use _ instead of -.";
- wxMessageBox(message.c_str(), "CMake Error", wxICON_ERROR | wxOK );
- return;
- }
- }
- if(!cmSystemTools::FileExists(this->GetBinaryDir().c_str()))
- {
- std::string message =
- "Build directory does not exist, should I create it?\n\n"
- "Directory: ";
- message += this->GetBinaryDir();
- if(wxMessageBox(message.c_str(), "Create Directory", wxICON_WARNING | wxOK | wxCANCEL) == wxOK)
- {
- cmSystemTools::MakeDirectory(this->GetBinaryDir().c_str());
- }
- else
- {
- (void)wxMessageBox("Build Project aborted, nothing done.", "CMake Aborted",
- wxICON_INFORMATION | wxOK);
- return;
- }
- }
- // set the wait cursor
- this->CursorBusy(true);
-
- // get all the info from the dialog
- //this->UpdateData();
- // always save the current gui values to disk
- this->SaveCacheFromGUI();
- // Make sure we are working from the cache on disk
- this->LoadCacheFromDiskToGUI();
- //
- this->m_Valid = true;
- this->m_OKButton->Enable(false);
- // setup the cmake instance
- if (generateProjectFiles)
- {
- if(this->m_CMakeInstance->Generate() != 0)
- {
- cmSystemTools::Error(
- "Error in generation process, project files may be invalid");
- }
- }
- else
- {
- this->m_CMakeInstance->SetHomeDirectory(this->GetSourceDir().c_str());
- this->m_CMakeInstance->SetStartDirectory(this->GetSourceDir().c_str());
- this->m_CMakeInstance->SetHomeOutputDirectory(this->GetBinaryDir().c_str());
- this->m_CMakeInstance->SetStartOutputDirectory(this->GetBinaryDir().c_str());
- this->m_CMakeInstance->SetGlobalGenerator(
- this-> m_CMakeInstance->CreateGlobalGenerator(
- this->m_GeneratorMenu->GetValue().c_str()));
- this->m_CMakeInstance->SetCMakeCommand(this->m_PathToExecutable.c_str());
- this->m_CMakeInstance->LoadCache();
- if(this->m_CMakeInstance->Configure() != 0)
- {
- cmSystemTools::Error(
- "Error in configuration process, project files may be invalid");
- }
- // update the GUI with any new values in the caused by the
- // generation process
- this->LoadCacheFromDiskToGUI();
- }
- // save source and build paths to registry
- this->SaveToRegistry();
- // path is up-to-date now
- this->m_BuildPathChanged = false;
- // put the cursor back
- this->CursorNormal(true);
- cmSystemTools::ResetErrorOccuredFlag();
- }
- //! Save GUI values to cmCacheManager and then save to disk.
- void cmMainFrame::SaveCacheFromGUI()
- {
- cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager();
- this->FillCacheManagerFromCacheGUI();
- if(this->GetBinaryDir() != "")
- {
- cachem->SaveCache(this->GetBinaryDir().c_str());
- }
- }
- // copy from the list box to the cache manager
- void cmMainFrame::FillCacheManagerFromCacheGUI()
- {
-
- cmMainFrame::CacheMapType *items = this->m_CacheEntries;
- for(cmMainFrame::CacheMapType::iterator i = items->begin();
- i != items->end(); ++i)
- {
- cmCacheProperty* item = i->second;
- cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager();
- cmCacheManager::CacheIterator it = cachem->GetCacheIterator(item->GetName().c_str());
- if (!it.IsAtEnd())
- {
- // if value is enclosed in single quotes ('foo') then remove them
- // they were used to enforce the fact that it had 'invisible'
- // trailing stuff
- std::string str = item->GetValue();
- if (str.size() >= 2 &&
- str[0] == '\'' &&
- str[str.size() - 1] == '\'')
- {
- it.SetValue(str.substr(1,str.size() - 2).c_str());
- }
- else
- {
- it.SetValue(str.c_str());
- }
- }
- }
- }
- void cmMainFrame::UpdateCacheValuesDisplay()
- {
-
- cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager();
- this->m_CacheValuesScroll->Scroll(0,0);
-
- if ( this->m_Update )
- {
- // all the current values are not new any more
- cmMainFrame::CacheMapType* uitems = this->m_CacheEntries;
- for(cmMainFrame::CacheMapType::iterator i = uitems->begin();
- i != uitems->end(); ++i)
- {
- cmCacheProperty* item = i->second;
- item->SetNewFlag( false );
- }
- }
- // redraw the list
- this->m_CacheValuesPanel->SetBackgroundColour(*wxWHITE);
- cmMainFrame::CacheMapType* nitems = this->m_CacheEntries;
- for(cmMainFrame::CacheMapType::iterator i = nitems->begin();
- i != nitems->end(); ++i)
- {
- cmCacheProperty* item = i->second;
- item->Remove(this->m_CacheValuesSizer, this->m_CacheValuesPanel);
- }
- //this->m_CacheValuesPanel->SetSize(5,5);
- //this->m_CacheValuesPanel->Fit();
- bool showadvancedvalues = this->m_ShowAdvancedValues->GetValue();
-
- int x, y;
- this->m_CacheValuesPanel->GetSize(&x, &y);
- for(cmCacheManager::CacheIterator i = cachem->NewIterator();
- !i.IsAtEnd(); i.Next())
- {
- const char* key = i.GetName();
- cmMainFrame::CacheMapType::iterator cprop = this->m_CacheEntries->find(key);
- cmCacheProperty *property = 0;
- if ( cprop != this->m_CacheEntries->end() )
- {
- property = cprop->second;
- }
-
- std::string value = i.GetValue();
-
- // if value has trailing space or tab, enclose it in single quotes
- // to enforce the fact that it has 'invisible' trailing stuff
- if (value.size() &&
- (value[value.size() - 1] == ' ' ||
- value[value.size() - 1] == '\t'))
- {
- value = '\'' + value + '\'';
- }
- if ( i.GetType() != cmCacheManager::BOOL &&
- i.GetType() != cmCacheManager::FILEPATH &&
- i.GetType() != cmCacheManager::PATH &&
- i.GetType() != cmCacheManager::STRING ||
- !showadvancedvalues && i.GetPropertyAsBool("ADVANCED") )
- {
- continue;
- }
- if ( !property )
- {
- property = new cmCacheProperty(this, key);
- property->SetHelp( i.GetProperty("HELPSTRING") );
- (*this->m_CacheEntries)[key] = property;
- }
- if(i.GetPropertyAsBool("ADVANCED"))
- {
- property->MarkAdvanced();
- }
- if ( !property->IsRemoved() )
- {
- property->SetValue(value);
- switch(i.GetType() )
- {
- case cmCacheManager::BOOL:
- if(cmSystemTools::IsOn(value.c_str()))
- {
- property->SetValue("ON");
- }
- else
- {
- property->SetValue("OFF");
- }
- property->SetItemType( cmCacheProperty::CHECKBOX );
- break;
- case cmCacheManager::PATH:
- property->SetItemType( cmCacheProperty::PATH );
- break;
- case cmCacheManager::FILEPATH:
- property->SetItemType( cmCacheProperty::FILE );
- break;
- case cmCacheManager::STRING:
- property->SetItemType( cmCacheProperty::EDIT );
- break;
- default:
- property->MarkRemoved();
- }
- }
- }
- if(this->m_CacheEntries->size() > 0 && !cmSystemTools::GetErrorOccuredFlag())
- {
- bool enable = true;
- cmMainFrame::CacheMapType* eitems = this->m_CacheEntries;
- for(cmMainFrame::CacheMapType::iterator i = eitems->begin();
- i != eitems->end(); i++)
- {
- cmCacheProperty* item = i->second;
- if(item && item->GetNewFlag() && !item->IsRemoved())
- {
- // if one new value then disable to OK button
- enable = false;
- this->m_Valid = false;
- break;
- }
- }
- this->m_OKButton->Enable(this->m_Valid);
- this->m_CacheValuesPanel->SetBackgroundColour(wxColor(150, 150, 150));
- }
- else
- {
- this->m_CacheValuesPanel->SetBackgroundColour(*wxWHITE);
- }
- if ( this->m_Valid )
- {
- this->ClearDirty();
- }
- else
- {
- this->SetDirty();
- }
- int max = 0;
- int count = 0;
- wxSize size1 = this->m_CacheValuesPanel->GetSize();
- size1.SetHeight(1);
- this->m_CacheValuesPanel->SetSize(size1);
- int height = 0;
- // redraw the list
- cmMainFrame::CacheMapType::iterator nexti;
- for(cmMainFrame::CacheMapType::iterator i = nitems->begin();
- i != nitems->end(); i = nexti)
- {
- cmCacheProperty* item = i->second;
- nexti = i;
- nexti++;
- if ( item->IsRemoved() )
- {
- delete item;
- nitems->erase(i);
- }
- }
-
- for(cmMainFrame::CacheMapType::iterator i = nitems->begin();
- i != nitems->end(); i++)
- {
- cmCacheProperty* item = i->second;
- if((showadvancedvalues || !item->IsAdvanced()) && !item->GetNewFlag() )
- {
- int nm = item->Display(this->m_CacheValuesSizer, this->m_CacheValuesPanel);
- height += nm + 1;
- count ++;
- if ( nm > max )
- {
- max = nm;
- }
- }
- }
- for(cmMainFrame::CacheMapType::reverse_iterator i = nitems->rbegin();
- i != nitems->rend(); i++)
- {
- cmCacheProperty* item = i->second;
- if((showadvancedvalues || !item->IsAdvanced()) && item->GetNewFlag())
- {
- int nm = item->Display(this->m_CacheValuesSizer, this->m_CacheValuesPanel);
- height += nm + 1;
- count ++;
- if ( nm > max )
- {
- max = nm;
- }
- }
- }
- if ( count > 0 )
- {
- this->m_CacheValuesPanel->SetBackgroundColour(wxColor(150, 150, 150));
- }
- else
- {
- this->m_CacheValuesPanel->SetBackgroundColour(*wxWHITE);
- this->ClearDirty();
- }
- this->m_CacheValuesSizer->Layout();
- //max += 1;
- // Fix size
- int sx, sy;
- this->m_CacheValuesScroll->GetClientSize(&sx, &sy);
- wxSize size2 = this->m_CacheValuesPanel->GetSize();
- sy = size2.GetHeight();
- this->m_CacheValuesPanel->SetSize(wxSize(sx, height));
- this->m_CacheValuesSizer->Layout();
- this->m_CacheValuesScroll->SetScrollbars(0, 2, 0, height/2);
-
- this->ResizeInternal();
- }
- void cmMainFrame::RemoveAdvancedValues()
- {
- cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager();
- cmMainFrame::CacheMapType* items = this->m_CacheEntries;
-
- for(cmCacheManager::CacheIterator i = cachem->NewIterator();
- !i.IsAtEnd(); i.Next())
- {
- const char* key = i.GetName();
- //const cmCacheManager::CacheEntry& value = i.GetEntry();
- if(i.GetPropertyAsBool("ADVANCED"))
- {
- cmCacheProperty* property = (*items)[key];
- property->Remove(this->m_CacheValuesSizer, this->m_CacheValuesPanel);
- }
- }
- }
- void cmMainFrame::ChangeWhereBuild()
- {
- std::string path(this->m_PathBinary->GetValue().c_str());
- cmSystemTools::ConvertToUnixSlashes(path);
- std::string cache_file = path;
- cache_file += "/CMakeCache.txt";
- if ( !this->m_CMakeInstance )
- {
- return;
- }
- cmCacheManager *cache = this->m_CMakeInstance->GetCacheManager();
- cmCacheManager::CacheIterator it = cache->NewIterator();
- if (cmSystemTools::FileExists(cache_file.c_str()) &&
- cache->LoadCache(path.c_str()) &&
- it.Find("CMAKE_HOME_DIRECTORY"))
- {
- path = cmSystemTools::ConvertToOutputPath(it.GetValue());
-
- if ( this->SetSourceDir(path.c_str()) )
- {
- this->ChangeWhereSource();
- }
- }
- this->ClearCache();
- this->LoadCacheFromDiskToGUI();
- this->m_BuildPathChanged = true;
- }
- void cmMainFrame::ChangeWhereSource()
- {
-
- }
- bool cmMainFrame::SetSourceDir(const char* dir)
- {
- if ( this->m_WhereSource == dir || strlen(dir) == 0 )
- {
- return false;
- }
- if ( this->m_PathSource->FindString(dir) < 0 )
- {
- this->m_PathSource->Append(dir);
- }
- this->m_PathSource->SetValue(dir);
- this->m_WhereSource = dir;
- this->m_Valid = false;
- return true;
- }
- bool cmMainFrame::SetBinaryDir(const char* dir)
- {
- if ( this->m_WhereBuild == dir || strlen(dir) == 0 )
- {
- return false;
- }
- if ( this->m_PathBinary->FindString(dir) < 0 )
- {
- this->m_PathBinary->Append(dir);
- }
- this->m_PathBinary->SetValue(dir);
- this->m_WhereBuild = dir;
- this->m_Valid = false;
- return true;
- }
- void cmMainFrame::ClearCache()
- {
- cmMainFrame::CacheMapType* items = this->m_CacheEntries;
- for(cmMainFrame::CacheMapType::iterator i = items->begin();
- i != items->end(); ++i)
- {
- cmCacheProperty* item = i->second;
- item->Remove(this->m_CacheValuesSizer, this->m_CacheValuesPanel);
- }
- items->erase(items->begin(), items->end());
- }
- void cmMainFrame::OnBinaryAccepted(wxCommandEvent&)
- {
- std::cout << "Pressed enter in binary field" << std::endl;
- }
- void cmMainFrame::OnBinarySelected(wxCommandEvent&)
- {
- if ( this->BuildDirectoryChanged() )
- {
- this->m_WhereBuild = this->GetBinaryDir();
- this->ChangeWhereBuild();
- }
- //this->OnConfigure(e);
- }
- void cmMainFrame::OnSourceSelected(wxCommandEvent&)
- {
- if ( this->SourceDirectoryChanged() )
- {
- this->m_WhereSource = this->GetSourceDir();
- }
- }
- std::string cmMainFrame::GetBinaryDir()
- {
- return std::string(this->m_PathBinary->GetValue().c_str());
- }
- std::string cmMainFrame::GetSourceDir()
- {
- return std::string(this->m_PathSource->GetValue().c_str());
- }
- bool cmMainFrame::SourceDirectoryChanged()
- {
- return (this->m_WhereSource != this->GetSourceDir());
- }
- bool cmMainFrame::BuildDirectoryChanged()
- {
- return (this->m_WhereBuild != this->GetBinaryDir());
- }
- void cmMainFrame::OnRandomEvent(wxEvent& event)
- {
- if ( event.GetEventType() == wxEVT_UPDATE_UI )
- {
- }
- else
- {
- std::cout << "Random event: " << event.GetEventType() << std::endl;
- }
- }
- void cmMainFrame::IgnoreCacheEntry(const char* key)
- {
- std::cout << "IgnoreCacheEntry " << key << std::endl;
- }
- void cmMainFrame::RemoveCacheEntry(cmCacheProperty* cprop)
- {
- this->m_Valid = false;
- this->m_CMakeInstance->GetCacheManager()->RemoveCacheEntry(cprop->GetName().c_str());
- cprop->MarkRemoved();
- this->m_EntryRemoved = true;
- }
- void cmMainFrame::HelpCacheEntry(const char* key, const char* help)
- {
- wxMessageBox( help, key, wxICON_INFORMATION | wxOK );
- }
- void cmMainFrame::LoadFromRegistry()
- {
- //wxConfigBase *conf = (wxConfigBase*) wxConfigBase::Get();//new wxConfig("CMakeSetup");
- wxConfig *conf = new wxConfig("CMakeSetup");
- conf->SetPath("Settings/StartPath");
- int cc;
- char keyName[1024];
- wxString regvalue;
- for ( cc = 1; cc <= 10; cc ++ )
- {
- sprintf(keyName, "WhereSource%i", cc);
- regvalue = "";
- conf->Read(keyName, ®value);
- if ( regvalue.size() > 0 )
- {
- if ( cc == 1 )
- {
- this->SetSourceDir(regvalue.c_str());
- }
- else
- {
- this->m_PathSource->Append(regvalue);
- }
- }
- sprintf(keyName, "WhereBuild%i", cc);
- regvalue = "";
- conf->Read(keyName, ®value);
- if ( regvalue.size() > 0 )
- {
- if ( cc == 1 )
- {
- this->SetBinaryDir(regvalue.c_str());
- }
- else
- {
- this->m_PathBinary->Append(regvalue);
- }
- }
- }
- delete conf;
- }
- void cmMainFrame::SaveToRegistry()
- {
- //wxConfigBase *conf = (wxConfigBase*) wxConfigBase::Get();//new wxConfig("CMakeSetup");
- wxConfig *conf = new wxConfig("CMakeSetup");
- conf->SetPath("Settings/StartPath");
- wxString regvalue;
- if ( !conf->Read("WhereSource1", ®value) )
- {
- regvalue = "";
- }
- int shiftEnd = 9;
- if(this->m_WhereSource != regvalue.c_str())
- {
- char keyName[1024];
- char keyName2[1024];
- int i;
- for (i = 2; i < 10; ++i)
- {
- regvalue = "";
- sprintf(keyName,"WhereSource%i",i);
- conf->Read(keyName, ®value);
- // check for short circuit, if the new value is already in
- // the list then we stop
- if (this->m_WhereSource == regvalue.c_str())
- {
- shiftEnd = i - 1;
- }
- }
-
- for (i = shiftEnd; i; --i)
- {
- regvalue = "";
- sprintf(keyName,"WhereSource%i",i);
- sprintf(keyName2,"WhereSource%i",i+1);
-
- conf->Read(keyName, ®value);
- if (strlen(regvalue.c_str()))
- {
- conf->Write(keyName2, wxString(regvalue.c_str()));
- }
- }
- conf->Write("WhereSource1", wxString(this->m_WhereSource.c_str()));
- }
-
- conf->Read("WhereBuild1", ®value);
- if(m_WhereBuild != regvalue.c_str())
- {
- int i;
- char keyName[1024];
- char keyName2[1024];
- for (i = 2; i < 10; ++i)
- {
- regvalue = "";
- sprintf(keyName,"WhereBuild%i",i);
- conf->Read(keyName, ®value);
- // check for short circuit, if the new value is already in
- // the list then we stop
- if (m_WhereBuild == regvalue.c_str())
- {
- shiftEnd = i - 1;
- }
- }
- for (i = shiftEnd; i; --i)
- {
- regvalue = "";
- sprintf(keyName,"WhereBuild%i",i);
- sprintf(keyName2,"WhereBuild%i",i+1);
-
- conf->Read(keyName, ®value);
- if (strlen(regvalue.c_str()))
- {
- conf->Write(keyName2, wxString(regvalue.c_str()));
- }
- }
- conf->Write("WhereBuild1", wxString(this->m_WhereBuild.c_str()));
- }
- delete conf;
- }
- void cmMainFrame::SetupStatusBarBinding(wxWindow* win)
- {
- win->SetClientData(this);
- this->ConnectEventTo(win, wxEVT_MOTION,
- (wxObjectEventFunction) &cmMainFrame::OnStatusBar);
- }
- void cmMainFrame::SetStatusText(const wxString& text, int number)
- {
- this->wxFrame::SetStatusText("________________________________________________");
- this->wxFrame::SetStatusText(text, number);
- }
- void cmMainFrame::CursorBusy(bool s)
- {
- wxSetCursor(*wxHOURGLASS_CURSOR);
- if ( s )
- {
- this->m_CursorChanged = true;
- }
- wxYield();
- }
- void cmMainFrame::CursorNormal(bool s)
- {
- wxSetCursor(*wxSTANDARD_CURSOR);
- if ( s )
- {
- this->m_CursorChanged = false;
- }
- wxYield();
- }
- void cmMainFrame::OnSourceUpdated(wxCommandEvent& event)
- {
- this->OnSourceSelected(event);
- }
- void cmMainFrame::OnBinaryUpdated(wxCommandEvent&)
- {
- if ( this->BuildDirectoryChanged() )
- {
- this->m_WhereBuild = this->GetBinaryDir();
- this->ChangeWhereBuild();
- }
- }
|