diff options
Diffstat (limited to 'Source/MFCDialog/CMakeSetupDialog.cpp')
-rw-r--r-- | Source/MFCDialog/CMakeSetupDialog.cpp | 107 |
1 files changed, 80 insertions, 27 deletions
diff --git a/Source/MFCDialog/CMakeSetupDialog.cpp b/Source/MFCDialog/CMakeSetupDialog.cpp index d9ca2de..635be38 100644 --- a/Source/MFCDialog/CMakeSetupDialog.cpp +++ b/Source/MFCDialog/CMakeSetupDialog.cpp @@ -68,8 +68,8 @@ CMakeSetupDialog::CMakeSetupDialog(CWnd* pParent /*=NULL*/) m_RegistryKey = "Software\\Kitware\\CMakeSetup\\Settings\\StartPath"; //{{AFX_DATA_INIT(CMakeSetupDialog) - m_WhereBuild = _T(""); m_WhereSource = _T(""); + m_WhereBuild = _T(""); //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); @@ -90,16 +90,17 @@ void CMakeSetupDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMakeSetupDialog) - DDX_Control(pDX, IDOK, m_CancelButton); - DDX_Control(pDX, IDC_MouseHelpCaption, m_MouseHelp); - DDX_Control(pDX, IDC_CMAKE_VERSION, m_VersionDisplay); - DDX_Control(pDX, IDC_BuildProjects, m_BuildProjects); + DDX_Control(pDX, IDC_OK, m_OKButton); + DDX_Control(pDX, IDCANCEL, m_CancelButton); + DDX_CBStringExact(pDX, IDC_WhereSource, m_WhereSource); + DDX_CBStringExact(pDX, IDC_WhereBuild, m_WhereBuild); DDX_Control(pDX, IDC_FRAME, m_ListFrame); DDX_Control(pDX, IDC_WhereSource, m_WhereSourceControl); DDX_Control(pDX, IDC_WhereBuild, m_WhereBuildControl); DDX_Control(pDX, IDC_LIST2, m_CacheEntriesList); - DDX_CBStringExact(pDX, IDC_WhereBuild, m_WhereBuild); - DDX_CBStringExact(pDX, IDC_WhereSource, m_WhereSource); + DDX_Control(pDX, IDC_MouseHelpCaption, m_MouseHelp); + DDX_Control(pDX, IDC_CMAKE_VERSION, m_VersionDisplay); + DDX_Control(pDX, IDC_BuildProjects, m_Configure); //}}AFX_DATA_MAP } @@ -108,16 +109,17 @@ BEGIN_MESSAGE_MAP(CMakeSetupDialog, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() - ON_BN_CLICKED(IDOK, OnOK) - ON_BN_CLICKED(IDC_BuildProjects, OnBuildProjects) - ON_CBN_EDITCHANGE(IDC_WhereBuild, OnChangeWhereBuild) - ON_CBN_EDITCHANGE(IDC_WhereSource, OnChangeWhereSource) - ON_CBN_SELCHANGE(IDC_WhereBuild, OnSelendokWhereBuild) ON_BN_CLICKED(IDC_BUTTON2, OnBrowseWhereSource) + ON_BN_CLICKED(IDC_BuildProjects, OnConfigure) ON_BN_CLICKED(IDC_BUTTON3, OnBrowseWhereBuild) + ON_CBN_EDITCHANGE(IDC_WhereBuild, OnChangeWhereBuild) + ON_CBN_SELCHANGE(IDC_WhereBuild, OnSelendokWhereBuild) + ON_CBN_EDITCHANGE(IDC_WhereSource, OnChangeWhereSource) ON_CBN_SELENDOK(IDC_WhereSource, OnSelendokWhereSource) ON_WM_SIZE() ON_WM_GETMINMAXINFO() + ON_BN_CLICKED(IDCANCEL, OnCancel) + ON_BN_CLICKED(IDC_OK, OnOk) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -162,6 +164,7 @@ BOOL CMakeSetupDialog::OnInitDialog() cmMakefile::GetMinorVersion()); SetDlgItemText(IDC_CMAKE_VERSION, tmp); this->UpdateData(FALSE); + m_OKButton.EnableWindow(false); return TRUE; // return TRUE unless you set the focus to a control } @@ -386,10 +389,9 @@ void CMakeSetupDialog::OnBrowseWhereBuild() this->OnChangeWhereBuild(); } -// Callback for build projects button -void CMakeSetupDialog::OnBuildProjects() +void CMakeSetupDialog::RunCMake(bool generateProjectFiles) { - if(!cmSystemTools::FileExists(m_WhereBuild)) + if(!cmSystemTools::FileExists(m_WhereBuild)) { std::string message = "Build directory does not exist, should I create it?\n\n" @@ -431,7 +433,7 @@ void CMakeSetupDialog::OnBuildProjects() arg += m_WhereBuild; args.push_back(arg); // run the generate process - if(make.Generate(args) != 0) + if(make.Generate(args, generateProjectFiles) != 0) { cmSystemTools::Error( "Error in generation process, project files may be invalid"); @@ -446,7 +448,15 @@ void CMakeSetupDialog::OnBuildProjects() m_BuildPathChanged = false; // put the cursor back ::SetCursor(LoadCursor(NULL, IDC_ARROW)); - m_CacheEntriesList.ClearDirty(); +} + + +// Callback for build projects button +void CMakeSetupDialog::OnConfigure() +{ + this->RunCMake(false); + // if cache has values then enb + m_OKButton.EnableWindow(true); } @@ -489,7 +499,24 @@ void CMakeSetupDialog::OnChangeWhereBuild() // copy from the cache manager to the cache edit list box void CMakeSetupDialog::FillCacheGUIFromCacheManager() -{ +{ + int size = 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; + } + + // all the current values are not new any more + std::set<CPropertyItem*> items = m_CacheEntriesList.GetItems(); + for(std::set<CPropertyItem*>::iterator i = items.begin(); + i != items.end(); ++i) + { + CPropertyItem* item = *i; + item->m_NewValue = false; + } const cmCacheManager::CacheEntryMap &cache = cmCacheManager::GetInstance()->GetCacheMap(); for(cmCacheManager::CacheEntryMap::const_iterator i = cache.begin(); @@ -505,38 +532,51 @@ void CMakeSetupDialog::FillCacheGUIFromCacheManager() m_CacheEntriesList.AddProperty(key, "ON", value.m_HelpString.c_str(), - CPropertyList::CHECKBOX,""); + CPropertyList::CHECKBOX,"", + reverseOrder + ); } else { m_CacheEntriesList.AddProperty(key, "OFF", value.m_HelpString.c_str(), - CPropertyList::CHECKBOX,""); + CPropertyList::CHECKBOX,"", + reverseOrder + ); } break; case cmCacheManager::PATH: m_CacheEntriesList.AddProperty(key, value.m_Value.c_str(), value.m_HelpString.c_str(), - CPropertyList::PATH,""); + CPropertyList::PATH,"", + reverseOrder + ); break; case cmCacheManager::FILEPATH: m_CacheEntriesList.AddProperty(key, value.m_Value.c_str(), value.m_HelpString.c_str(), - CPropertyList::FILE,""); + CPropertyList::FILE,"", + reverseOrder + ); break; case cmCacheManager::STRING: m_CacheEntriesList.AddProperty(key, value.m_Value.c_str(), value.m_HelpString.c_str(), - CPropertyList::EDIT,""); + CPropertyList::EDIT,"", + reverseOrder + ); break; case cmCacheManager::INTERNAL: break; } } + // redraw the list + m_CacheEntriesList.SetTopIndex(0); + m_CacheEntriesList.Invalidate(); } // copy from the list box to the cache manager @@ -633,9 +673,9 @@ void CMakeSetupDialog::OnSize(UINT nType, int cx, int cy) 0, 0, SWP_NOSIZE | SWP_NOZORDER); - m_BuildProjects.GetWindowRect(&cRect); + m_Configure.GetWindowRect(&cRect); this->ScreenToClient(&cRect); - m_BuildProjects.SetWindowPos(&wndTop, cRect.left + deltax/2, + m_Configure.SetWindowPos(&wndTop, cRect.left + deltax/2, cRect.top + deltay, 0, 0, SWP_NOSIZE | SWP_NOZORDER); @@ -645,6 +685,12 @@ void CMakeSetupDialog::OnSize(UINT nType, int cx, int cy) cRect.top + deltay, 0, 0, SWP_NOSIZE | SWP_NOZORDER); + m_OKButton.GetWindowRect(&cRect); + this->ScreenToClient(&cRect); + m_OKButton.SetWindowPos(&wndTop, cRect.left + deltax/2, + cRect.top + deltay, + 0, 0, + SWP_NOSIZE | SWP_NOZORDER); } } @@ -656,9 +702,9 @@ void CMakeSetupDialog::OnGetMinMaxInfo( MINMAXINFO FAR* lpMMI ) lpMMI->ptMinTrackSize.y = 272; } -void CMakeSetupDialog::OnOK() +void CMakeSetupDialog::OnCancel() { - if(m_CacheEntriesList.IsDirty()) + if(m_OKButton.IsWindowEnabled()) { if(MessageBox("You have changed options but not rebuilt, " "are you sure you want to exit?", "Confirm Exit", @@ -672,3 +718,10 @@ void CMakeSetupDialog::OnOK() CDialog::OnOK(); } } + +void CMakeSetupDialog::OnOk() +{ + m_CacheEntriesList.ClearDirty(); + this->RunCMake(true); + CDialog::OnOK(); +} |