Initial import of wxWindows dialog

This commit is contained in:
Andy Cedilnik 2002-09-19 09:47:18 -04:00
parent 0dafd886fc
commit f1d40eef93
9 changed files with 2558 additions and 0 deletions

View File

@ -0,0 +1,33 @@
INCLUDE (${CMAKE_ROOT}/Modules/FindwxWindows.cmake)
IF ( CMAKE_WX_CAN_COMPILE )
SET( WX_SRCS
cmWXCacheProperty.cxx
cmWXCommandLineInfo.cxx
cmWXMainFrame.cxx
wxCMakeSetup.cxx
)
IF(WXWINDOWS_INCLUDE_PATH)
INCLUDE_DIRECTORIES(${WXWINDOWS_INCLUDE_PATH})
ENDIF(WXWINDOWS_INCLUDE_PATH)
IF(CMAKE_WX_CXX_FLAGS)
SET(CMAKE_CXX_FLAGS "${CMAKE_WX_CXX_FLAGS} ${CMAKE_CXX_FLAGS}")
ENDIF(CMAKE_WX_CXX_FLAGS)
INCLUDE_DIRECTORIES(${CMake_SOURCE_DIR}/Source)
ADD_EXECUTABLE(wxCMakeSetup ${WX_SRCS})
TARGET_LINK_LIBRARIES(wxCMakeSetup ${WXWINDOWS_LIBRARY})
TARGET_LINK_LIBRARIES(wxCMakeSetup CMakeLib)
INSTALL_TARGETS(/bin wxCMakeSetup)
ELSE ( CMAKE_WX_CAN_COMPILE )
MESSAGE("Cannot find wxWindows libraries and/or header files")
MESSAGE("OLib: ${WXWINDOWS_LIBRARY} Inc: ${WXWINDOWS_INCLUDE_PATH} Flags: ${CMAKE_WX_CXX_FLAGS}")
ENDIF ( CMAKE_WX_CAN_COMPILE )

View File

@ -0,0 +1,358 @@
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2002 Insight Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm 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.
=========================================================================*/
// cmCacheProperty.cxx : implementation file
//
#include "cmWXCacheProperty.h"
#include "cmSystemTools.h"
#include "cmWXMainFrame.h"
static int GetClientHeight(wxWindow* w)
{
wxSize size = w->GetSize();
return size.GetHeight();
}
#define cmMAX(x, y) (((x)>(y))?(x):(y))
cmCacheProperty::cmCacheProperty(cmMainFrame* mf, const std::string& name) : m_Name(name)
{
this->m_HelpString = "";
this->m_Value = "";
this->m_NewValue = true;
this->m_Removed = false;
this->m_ItemType = cmCacheProperty::NOTHING;
this->m_MainFrame = mf;
this->m_Advanced = false;
this->m_KeyWindow = 0;
this->m_ValueWindow = 0;
this->m_TextControl = 0;
}
cmCacheProperty::~cmCacheProperty()
{
}
int cmCacheProperty::Display(wxSizer* s, wxPanel* win)
{
int maxheight = 0;
this->m_TextControl = 0;
wxPanel* panel = new wxPanel(win, -1);
wxPanel* panel1 = new wxPanel(panel, -1);
wxBoxSizer* sizer = 0;
wxColor bgcolor = panel->GetBackgroundColour();
sizer = new wxBoxSizer(wxHORIZONTAL);
wxBoxSizer* sizer1 = new wxBoxSizer(wxHORIZONTAL);
wxStaticText* name = new wxStaticText(panel1, -1, this->m_Name.c_str());
this->SetupMenu(name);
this->SetupMenu(panel1);
sizer1->Add(name, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
maxheight = cmMAX(maxheight, ::GetClientHeight(panel1));
sizer->Add(5, 5, 0);
sizer->Add(panel1, 1, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
panel1->SetAutoLayout( TRUE );
panel1->SetSizer(sizer1);
sizer1->Fit(panel1);
sizer1->SetSizeHints(panel1);
sizer1->Layout();
panel->SetAutoLayout( TRUE );
panel->SetSizer(sizer);
sizer->Fit(panel);
sizer->SetSizeHints(panel);
sizer->Layout();
wxControl* value = 0;
if ( this->m_NewValue )
{
wxColor brightred = wxColor(252, 102, 100);
panel->SetBackgroundColour(brightred);
panel1->SetBackgroundColour(brightred);
name->SetBackgroundColour(brightred);
}
else
{
panel->SetBackgroundColour(*wxWHITE);
panel1->SetBackgroundColour(*wxWHITE);
name->SetBackgroundColour(*wxWHITE);
}
this->m_KeyWindow = panel;
panel = new wxPanel(win, -1);
sizer = new wxBoxSizer(wxHORIZONTAL);
panel->SetBackgroundColour(*wxWHITE);
//panel->SetBackgroundColour(*wxGREEN)
#ifdef __APPLE__
wxColor buttoncolor = *wxWHITE;
#else // __APPLE__
wxColor buttoncolor = bgcolor;
#endif // __APPLE__
switch ( this->m_ItemType )
{
case cmCacheProperty::CHECKBOX:
sizer->Add(5, 5, 0);
value = new wxCheckBox(panel, -1, "");
this->ConnectEvent(value, wxEVT_COMMAND_CHECKBOX_CLICKED,
(wxObjectEventFunction) &cmMainFrame::OnPropertyChanged);
this->SetupMenu(value);
if ( strcmp(this->GetValue().c_str(), "ON") == 0 )
{
static_cast<wxCheckBox*>(value)->SetValue(true);
}
break;
case cmCacheProperty::EDIT:
value = new wxTextCtrl(panel, -1, this->m_Value.c_str());
maxheight = cmMAX(maxheight, ::GetClientHeight(value));
this->ConnectEvent(value, wxEVT_COMMAND_TEXT_UPDATED,
(wxObjectEventFunction) &cmMainFrame::OnPropertyChanged);
this->SetupMenu(value);
break;
case cmCacheProperty::FILE:
sizer->Add(5, 5, 0);
value = new wxStaticText(panel, -1, this->m_Value.c_str());
maxheight = cmMAX(maxheight, ::GetClientHeight(value));
sizer->Add(value, 1, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
this->m_TextControl = value;
this->SetupMenu(value);
value = new wxButton(panel, -1, "...", wxDefaultPosition,
wxSize(20, maxheight - 4));
maxheight = cmMAX(maxheight, ::GetClientHeight(value));
value->SetBackgroundColour(buttoncolor);
sizer->Add(value, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
this->ConnectEvent(value, wxEVT_COMMAND_BUTTON_CLICKED,
(wxObjectEventFunction) &cmMainFrame::OnPropertyChanged);
this->SetupMenu(value);
value = 0;
break;
case cmCacheProperty::PATH:
sizer->Add(5, 5, 0);
value = new wxStaticText(panel, -1, this->m_Value.c_str());
maxheight = cmMAX(maxheight, ::GetClientHeight(value));
sizer->Add(value, 1, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
this->m_TextControl = value;
this->SetupMenu(value);
value = new wxButton(panel, -1, "...", wxDefaultPosition,
wxSize(20, maxheight - 4));
maxheight = cmMAX(maxheight, ::GetClientHeight(value));
value->SetBackgroundColour(buttoncolor);
sizer->Add(value, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
this->ConnectEvent(value, wxEVT_COMMAND_BUTTON_CLICKED,
(wxObjectEventFunction) &cmMainFrame::OnPropertyChanged);
this->SetupMenu(value);
value = 0;
break;
default:
value = new wxStaticText(panel, -1, this->m_Value.c_str());
maxheight = cmMAX(maxheight, ::GetClientHeight(value));
this->m_TextControl = value;
break;
}
//panel->Fit();
this->m_ValueWindow = panel;
//panel->Fit();
//win->Fit();
if ( value )
{
sizer->Add(value, 1, wxALIGN_LEFT | wxGROW | wxALL | wxALIGN_CENTER_VERTICAL);
}
//s->Layout();
panel->SetAutoLayout( TRUE );
panel->SetSizer(sizer);
sizer->Fit(panel);
sizer->SetSizeHints(panel);
sizer->Layout();
if ( this->m_NewValue )
{
s->Prepend(this->m_ValueWindow, 1, wxGROW | wxLEFT | wxRIGHT );
s->Prepend(this->m_KeyWindow, 1, wxGROW | wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL );
}
else
{
s->Add(this->m_KeyWindow, 1, wxGROW | wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL );
s->Add(this->m_ValueWindow, 1, wxGROW | wxLEFT | wxRIGHT );
}
this->SetupMenu(this->m_KeyWindow);
this->SetupMenu(this->m_ValueWindow);
int x1, x2, xm, s1, s2, sm;
win->GetSize(&xm, &sm);
this->m_KeyWindow->GetSize(&x1, &s1);
this->m_ValueWindow->GetSize(&x2, &s2);
int m = s1;
if ( s2 > m )
{
m = s2;
}
this->m_KeyWindow->SetSize(x1, m);
this->m_ValueWindow->SetSize(x2, m);
//std::cout << "Size of panels: " << sm << "," << s1 << ", " << s2 << " max: " << maxheight<< std::endl;
return maxheight;
}
void cmCacheProperty::Remove(wxSizer* sizer, wxPanel*)
{
if ( this->m_KeyWindow )
{
sizer->Remove(this->m_KeyWindow);
this->m_KeyWindow->Destroy();
}
if ( this->m_ValueWindow )
{
sizer->Remove(this->m_ValueWindow);
this->m_ValueWindow->Destroy();
}
this->m_KeyWindow = 0;
this->m_ValueWindow = 0;
//sizer->Layout();
//win->Fit();
}
void cmCacheProperty::ConnectEvent(wxWindow* win, wxEventType et, wxObjectEventFunction func)
{
if ( !this->m_MainFrame )
{
return;
}
win->SetClientData(this);
this->m_MainFrame->Connect(win->GetId(), et, func);
}
void cmCacheProperty::ConnectEventTo(wxWindow* win, wxEventType et,
wxObjectEventFunction func)
{
if ( !this->m_MainFrame )
{
return;
}
win->SetClientData(this);
this->m_MainFrame->ConnectEventTo(win, et, func);
}
void cmCacheProperty::OnPropertyChanged(wxEvent& event)
{
if ( event.GetEventType() == wxEVT_RIGHT_DOWN )
{
}
else
{
switch ( this->m_ItemType )
{
case cmCacheProperty::EDIT: this->OnEntryChanged(event); break;
case cmCacheProperty::FILE: this->OnFileBrowseButton(event); break;
case cmCacheProperty::CHECKBOX: this->OnCheckboxButton(event); break;
case cmCacheProperty::PATH: this->OnPathBrowseButton(event); break;
}
}
}
void cmCacheProperty::OnFileBrowseButton(wxEvent&)
{
std::string path = cmSystemTools::GetFilenamePath(this->m_Value);
std::string file = cmSystemTools::GetFilenameName(this->m_Value);
if ( path == "NOTFOUND" )
{
path = this->m_MainFrame->GetBuildDir();
}
wxFileDialog dialog (
this->m_MainFrame,
_T("Select file"),
path.c_str(),
file.c_str(),
_T("All files|*.*")
);
if (dialog.ShowModal() == wxID_OK)
{
std::string str = "";
if ( this->m_TextControl )
{
str += dialog.GetPath().c_str();
static_cast<wxStaticText*>(this->m_TextControl)->SetLabel(str.c_str());
}
this->SetValue(str.c_str());
}
}
void cmCacheProperty::OnPathBrowseButton(wxEvent&)
{
std::string path = this->m_Value;
if ( path == "NOTFOUND" )
{
path = this->m_MainFrame->GetBuildDir();
}
wxDirDialog dialog ( this->m_MainFrame, _T("Select directory"), path.c_str() );
if (dialog.ShowModal() == wxID_OK)
{
if ( this->m_TextControl )
{
static_cast<wxStaticText*>(this->m_TextControl)->SetLabel(dialog.GetPath());
}
this->SetValue(dialog.GetPath().c_str());
}
}
void cmCacheProperty::OnCheckboxButton(wxEvent& event)
{
wxCheckBox* widget = static_cast<wxCheckBox*>( event.GetEventObject() );
if ( !widget )
{
return;
}
int val = widget->GetValue();
if ( val )
{
this->SetValue("ON");
}
else
{
this->SetValue("OFF");
}
}
void cmCacheProperty::OnEntryChanged(wxEvent& event)
{
wxTextCtrl* widget = static_cast<wxTextCtrl*>( event.GetEventObject() );
if ( !widget )
{
return;
}
this->SetValue(static_cast<const char*>(widget->GetValue()));
}
void cmCacheProperty::SetupMenu(wxWindow* win)
{
this->ConnectEventTo(win, wxEVT_RIGHT_DOWN,
(wxObjectEventFunction) &cmMainFrame::OnPopupMenu);
this->ConnectEventTo(win, wxEVT_MOTION,
(wxObjectEventFunction) &cmMainFrame::OnCacheStatusBar);
}

View File

@ -0,0 +1,130 @@
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2002 Insight Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm 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.
=========================================================================*/
#ifndef CMCACHEPROPERTY_H
#define CMCACHEPROPERTY_H
#include "cmStandardIncludes.h"
#include "wxincludes.h"
class cmMainFrame;
class wxControl;
class wxPanel;
class wxSizer;
class wxWindow;
/** \class cmCacheProperty
* \brief GUI Control class for cmake's cache property
*
* Stores cache property as displayed on GUI, caches its value, colors
* red when new.
*
*/
class cmCacheProperty
{
public:
cmCacheProperty(cmMainFrame*, const std::string& name);
~cmCacheProperty();
const std::string& GetName() { return this->m_Name; }
//! Get and set the value
const std::string& GetValue() { return this->m_Value; }
void SetValue(const std::string& s) { this->m_Value = s; }
//! Get and set the help value
void SetHelp(const std::string& s) { this->m_HelpString = s; }
const std::string& GetHelp() { return this->m_HelpString; }
//! Display the property in the window. Return the maximum height.
int Display(wxSizer*, wxPanel*);
//! Remove the property from the window
void Remove(wxSizer*, wxPanel*);
//! This method is called when property is changed
void OnPropertyChanged(wxEvent& event);
//! Mark cache entry as being removed.
void MarkRemoved() { this->m_Removed = true; }
//! Check if the entry was removed
bool IsRemoved() { return this->m_Removed; }
//! Get and set the new flag.
void SetNewFlag(bool f) { this->m_NewValue = f; }
bool GetNewFlag() { return this->m_NewValue; }
//! Mark cache entry as being removed.
void MarkAdvanced() { this->m_Advanced = true; }
//! Check if the entry was removed
bool IsAdvanced() { return this->m_Advanced; }
//! Set item type
void SetItemType(int t) { this->m_ItemType = t; }
//! Get the main frame asociated with the cache property
cmMainFrame* GetMainFrame() { return this->m_MainFrame; }
enum ItemType
{
NOTHING = 0,
EDIT,
FILE,
CHECKBOX,
PATH
};
enum
{
Menu_Popup_Ignore = 200,
Menu_Popup_Delete,
Menu_Popup_Help
};
protected:
bool m_NewValue;
bool m_Advanced;
int m_ItemType;
wxWindow* m_KeyWindow;
wxWindow* m_ValueWindow;
std::string m_Name;
std::string m_Value;
std::string m_HelpString;
bool m_Removed;
//! The following methods set the events handling of widgets for the
// cache property.
void ConnectEvent(wxWindow* win, wxEventType et, wxObjectEventFunction func);
void ConnectEventTo(wxWindow* win, wxEventType et, wxObjectEventFunction func);
void SetupMenu(wxWindow* win);
//! This are event callbacks for different events.
void OnFileBrowseButton(wxEvent& event);
void OnPathBrowseButton(wxEvent& event);
void OnCheckboxButton(wxEvent& event);
void OnEntryChanged(wxEvent& event);
private:
cmMainFrame* m_MainFrame;
wxControl* m_TextControl;
};
#endif

View File

@ -0,0 +1,133 @@
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2002 Insight Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm 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.
=========================================================================*/
// cmCommandLineInfo.cpp : command line arguments
//
#include "cmWXCommandLineInfo.h"
#include "cmSystemTools.h"
///////////////////////////////////////////////////////////////
// cmCommandLineInfo
cmCommandLineInfo::cmCommandLineInfo()
{
this->m_WhereSource = "";
this->m_WhereBuild = "";
this->m_AdvancedValues = false;
this->m_GeneratorChoiceString = "";
this->m_LastUnknownParameter = "";
this->m_ValidArguments = "";
}
///////////////////////////////////////////////////////////////
cmCommandLineInfo::~cmCommandLineInfo()
{
}
///////////////////////////////////////////////////////////////
void cmCommandLineInfo::ParseCommandLine(int argc, char* argv[])
{
int cc;
for ( cc = 1; cc < argc; cc ++ )
{
if ( strlen(argv[cc]) < 1 )
{
continue;
}
bool valid = true;
std::string argument = argv[cc];
if ( argument.size() > 1 &&
this->m_ValidArguments.find(argument[1]) == std::string::npos )
{
valid = false;
}
this->ParseParam(argument, valid, (cc + 1 == argc));
}
this->m_ExecutablePath = cmSystemTools::GetFilenamePath(argv[0]);
}
///////////////////////////////////////////////////////////////
int cmCommandLineInfo::GetBoolValue(const std::string& v) {
std::string value = cmSystemTools::LowerCase(v);
if (value == "1" ||
value == "on" ||
value == "true" ||
value == "yes")
{
return 1;
}
else if (value == "0" ||
value == "off" ||
value == "false" ||
value == "no")
{
return -1;
}
return 0;
}
///////////////////////////////////////////////////////////////
// Parse param
void cmCommandLineInfo::ParseParam(const std::string& parameter,
bool know_about, bool last)
{
if(!know_about)
{
this->m_LastUnknownParameter = parameter;
}
else
{
std::string sParam(parameter.c_str(), 1);
// Single letter valued flag like /B=value or /B:value
std::string value;
if (sParam[1] == '=' || sParam[1] == ':')
{
value = std::string(parameter.c_str()+2);
}
else
{
value = std::string(parameter.c_str()+1);
}
int res;
switch (sParam[0])
{
case 'A':
res = cmCommandLineInfo::GetBoolValue(value);
if (res == 1)
{
this->m_AdvancedValues = true;
}
else if (res == -1)
{
this->m_AdvancedValues = false;
}
break;
case 'B':
this->m_WhereBuild = value;
break;
case 'G':
this->m_GeneratorChoiceString = value;
break;
case 'H':
this->m_WhereSource = value;
break;
}
}
}

View File

@ -0,0 +1,65 @@
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2002 Insight Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm 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.
=========================================================================*/
// cmCommandLineInfo.h : main header file for the command line arguments
//
#if !defined(CMAKECOMMANDLINEINFO_H)
#define CMAKECOMMANDLINEINFO_H
#include "cmStandardIncludes.h"
///////////////////////////////////////////////////////////////
// cmCommandLineInfo:
// See cmCommandLineInfo.cxx for the implementation of this class
//
class cmCommandLineInfo
{
// Construction
public:
cmCommandLineInfo();
virtual ~cmCommandLineInfo();
// Parse the command line
void ParseCommandLine(int argc, char* argv[]);
// Set the valid arguments
void SetValidArguments(const std::string& va) { this->m_ValidArguments = va; }
// Retrieve the path of executable
std::string GetPathToExecutable() { return this->m_ExecutablePath; }
// Attributes
public:
std::string m_WhereSource;
std::string m_WhereBuild;
bool m_AdvancedValues;
std::string m_GeneratorChoiceString;
std::string m_LastUnknownParameter;
std::string m_ExecutablePath;
protected:
// Parse one argument
void ParseParam(const std::string& parameter, bool know_about, bool last);
// Return boolean value of the string
static int GetBoolValue(const std::string&);
std::string m_ValidArguments;
};
#endif // !defined(CMAKECOMMANDLINEINFO_H)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,229 @@
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2002 Insight Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm 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.
=========================================================================*/
#ifndef __cmMainFrame__h__
#define __cmMainFrame__h__
#include "cmStandardIncludes.h"
#include "wxincludes.h"
class cmCacheProperty;
class cmCommandLineInfo;
class cmake;
class wxButton;
class wxCheckBox;
class wxComboBox;
class wxMenu;
class wxPanel;
class wxScrolledWindow;
class wxSizer;
class wxStaticBox;
class wxStaticText;
/** \class cmMainFrame
* \brief GUI for CMake with wxWindows toolkit
*
* The main dialog for the CMake
*
*/
class cmMainFrame : public wxFrame
{
public:
cmMainFrame(const wxString& title, const wxSize& size);
~cmMainFrame();
//! Initialize the paths and read the cache.
void Initialize(cmCommandLineInfo*);
//! Different callbacks for events
void OnOk(wxCommandEvent& event);
void OnConfigure(wxCommandEvent& event);
void OnCancel(wxCommandEvent& event);
void OnHelp(wxCommandEvent& event);
void OnBrowseSource(wxCommandEvent& event);
void OnSourceSelected(wxCommandEvent& event);
void OnBrowseBinary(wxCommandEvent& event);
void OnBinarySelected(wxCommandEvent& event);
void OnShowAdvancedValues(wxCommandEvent& event);
void OnResize(wxSizeEvent& event);
void OnPropertyChanged(wxEvent& event);
void OnRandomEvent(wxEvent& event);
void OnGeneratorSelected(wxEvent& event);
void OnPopupMenu(wxMouseEvent& event);
void OnCacheStatusBar(wxEvent& event);
void OnStatusBar(wxEvent& event);
//! Callbacks for menu events
void OnPopupMenuIgnore(wxEvent& event);
void OnPopupMenuDelete(wxEvent& event);
void OnPopupMenuHelp(wxEvent& event);
void OnPopupMenuEntry(wxEvent& event, int idx);
// Connect widget and event with method.
void ConnectEvent(wxWindow*, wxEventType, wxObjectEventFunction);
void ConnectEventTo(wxWindow*, wxEventType, wxObjectEventFunction);
//! Callback for the error message.
static void MessageCallback(const char* m, const char* title, bool& nomore, void* cd);
void DisplayMessage(const char* m, const char* title, bool& nomore);
//! Retrieve the current build directory.
const std::string& GetBuildDir() { return this->m_WhereBuild; }
private:
//! Load cache file from m_WhereBuild and display in GUI editor
void LoadCacheFromDiskToGUI();
//! Save GUI values to cmCacheManager and then save to disk.
void SaveCacheFromGUI();
// copy from the cache manager to the cache edit list box
void FillCacheGUIFromCacheManager();
// copy from the list box to the cache manager
void FillCacheManagerFromCacheGUI();
// set the current generator
void SetGenerator(const char* generator);
// Set the status bar binding.
void SetupStatusBarBinding(wxWindow*);
// set the current source and binary dir
bool SetSourceDir(const char* dir);
std::string GetSourceDir();
bool SetBinaryDir(const char* dir);
std::string GetBinaryDir();
void ChangeDirectoriesFromFile(const char* buffer);
// update source and binary menus.
void UpdateSourceBuildMenus();
// Check wether cache is dirty.
bool IsDirty() { return !this->m_Clean; }
void ClearDirty() { this->m_Clean = true; }
// Run the CMake
void RunCMake(bool generateProjectFiles);
void RemoveAdvancedValues();
void UpdateCacheValuesDisplay();
// Change the build directory.
void ChangeWhereSource();
void ChangeWhereBuild();
bool SourceDirectoryChanged();
bool BuildDirectoryChanged();
// Clear the Cache
void ClearCache();
void RemoveCacheEntry(cmCacheProperty*);
void IgnoreCacheEntry(const char* key);
void HelpCacheEntry(const char* key, const char* help);
void LoadFromRegistry();
void SaveToRegistry();
virtual void SetStatusText(const wxString& text, int number = 0);
void ResizeInternal();
//! Change the type of mouse cursor. Set argument to true to store
// the type.
void CursorBusy(bool s=false);
void CursorNormal(bool s=false);
// Main panel
wxPanel* m_MainPanel;
wxSizer* m_TopMostSizer;
// Main sizer
wxSizer* m_MainSizer;
// Top row of main sizer
wxSizer* m_TopGrid;
// Top line:
wxStaticText* m_TextSource;
wxComboBox* m_PathSource;
wxButton* m_BrowseSource;
// Top line end frame:
wxSizer* m_GeneratorFrame;
wxStaticText* m_BuildFor;
wxComboBox* m_GeneratorMenu;
// Bottom line:
wxStaticText* m_TextBinary;
wxComboBox* m_PathBinary;
wxButton* m_BrowseBinary;
wxCheckBox* m_ShowAdvancedValues;
// Cache values:
wxStaticBox* m_CacheValuesBox;
wxSizer* m_CacheValuesFrame;
wxScrolledWindow* m_CacheValuesScroll;
wxPanel* m_CacheValuesPanel;
wxSizer* m_CacheValuesSizer;
// Help text:
wxStaticText* m_HelpText;
// Buttons:
wxSizer* m_BottomButtonsFrame;
wxStaticText* m_VersionText;
wxButton* m_ConfigureButton;
wxButton* m_OKButton;
wxButton* m_CancelButton;
wxButton* m_HelpButton;
// This is set when the cache has to be updated.
bool m_Update;
// This is to detect when cache is not valid such as when cache
// entry is removed or when some new entries are present. You have
// to rerun cmake to set valid to true.
bool m_Valid;
// This is needed for mac, because on mac dialog has to be redrawn
// after the menu is removed.
bool m_EntryRemoved;
std::string m_WhereSource;
std::string m_WhereBuild;
std::string m_PathToExecutable;
bool m_Clean;
bool m_BuildPathChanged;
bool m_CursorChanged;
typedef std::map<std::string, cmCacheProperty*> CacheMapType;
CacheMapType* m_CacheEntries;
cmake* m_CMakeInstance;
enum Events {
ID_MainFrame,
ID_Resize,
ID_OKButton,
ID_ConfigureButton,
ID_CancelButton,
ID_HelpButton,
ID_AdvancedValues
};
};
#endif // __cmMainFrame__h__

View File

@ -0,0 +1,174 @@
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2002 Insight Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm 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.
=========================================================================*/
// wxCMakeSetup.cxx : implementation file
//
#include "cmSystemTools.h"
#include "cmWXCommandLineInfo.h"
#include "cmWXMainFrame.h"
class wxCMakeSetup : public wxApp
{
public:
virtual bool OnInit();
virtual int OnExit();
};
class testFrame : public wxFrame
{
public:
testFrame(const wxString& title, const wxSize& size)
: wxFrame((wxFrame*)NULL, 0, title, wxDefaultPosition, size)
{
wxPanel *panel = new wxPanel(this, -1);
wxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);
wxWindow *value = new wxStaticText(panel, -1, "Some label");
sizer->Add(value, 1, wxALIGN_CENTER_VERTICAL );
value = new wxButton(panel, -1, "Button", wxDefaultPosition, wxSize(25, 0));
sizer->Add(value, 0, wxALIGN_RIGHT);
panel->SetAutoLayout( TRUE );
panel->SetSizer(sizer);
sizer->Fit(panel);
sizer->SetSizeHints(panel);
sizer->Layout();
}
};
class testFrame1 : public wxFrame
{
public:
testFrame1(const wxString& title, const wxSize& size)
: wxFrame((wxFrame*)NULL, 0, title, wxDefaultPosition, size)
{
wxPanel *panel = new wxPanel(this, -1);
panel->SetBackgroundColour(*wxRED);
wxSizer *sizer = new wxFlexGridSizer(2, 5, 5);
wxWindow *value = 0;
int cc;
for ( cc = 0; cc < 4; cc ++ )
{
char buffer[200];
sprintf(buffer, "Long, Long Label; this label should be "
"bigger than button %d",cc);
value = new wxStaticText(panel, -1, buffer);
sizer->Add(value, 1, wxGROW | wxALL );
sprintf(buffer, "Button %d", cc);
value = new wxButton(panel, -1, buffer);
sizer->Add(value, 1, wxGROW | wxALL );
}
panel->SetAutoLayout( TRUE );
panel->SetSizer(sizer);
sizer->Fit(panel);
sizer->SetSizeHints(panel);
sizer->Layout();
}
};
class testFrame2 : public wxFrame
{
public:
testFrame2(const wxString& title, const wxSize& size)
: wxFrame((wxFrame*)NULL, 0, title, wxDefaultPosition, size)
{
wxPanel *panel = new wxPanel(this, -1);
panel->SetBackgroundColour(*wxRED);
wxTextCtrl * text = new wxTextCtrl(panel, -1, "Test", wxPoint(40, 5));
wxButton * bt = new wxButton(panel, -1, "Test", wxPoint(-1, 5));
}
};
class testFrame3 : public wxFrame
{
public:
testFrame3(const wxString& title, const wxSize& size)
: wxFrame((wxFrame*)NULL, 0, title, wxDefaultPosition, size)
{
this->CreateStatusBar();
this->SetSizeHints(300, 300);
wxPanel *panel = new wxPanel(this, -1);
wxSizer *sizer = new wxFlexGridSizer(2, 5, 5);
wxWindow *value = 0;
int cc;
for ( cc = 0; cc < 10; cc ++ )
{
char buffer[200];
sprintf(buffer, "Label %d",cc);
value = new wxStaticText(panel, -1, buffer);
sizer->Add(value, 1, wxGROW | wxALL );
sprintf(buffer, "Button %d", cc);
value = new wxButton(panel, -1, buffer);
sizer->Add(value, 1, wxGROW | wxALL );
value->SetClientData(this);
value->Connect(-1, wxEVT_MOTION,
(wxObjectEventFunction) &testFrame3::OnStatusBar);
}
panel->SetAutoLayout( TRUE );
panel->SetSizer(sizer);
sizer->Fit(panel);
sizer->SetSizeHints(panel);
sizer->Layout();
}
void OnStatusBar(wxEvent& event)
{
wxControl* eobject = static_cast<wxControl*>(event.GetEventObject());
testFrame3* self = static_cast<testFrame3*>(eobject->GetClientData());
wxString str;
const char* chars = "|-\\/jg@_^";
char ch = chars[((int)eobject)/1024 % strlen(chars)];
int cc;
for ( cc = 0; cc < 10; cc ++ )
{
str += ch;
}
self->SetStatusText(str);
}
};
bool wxCMakeSetup::OnInit()
{
cmSystemTools::DisableRunCommandOutput();
cmCommandLineInfo cm;
cm.SetValidArguments("ABGH");
cm.ParseCommandLine(wxApp::argc, wxApp::argv);
this->SetVendorName("Andy");
this->SetAppName("CMakeSetup");
cmMainFrame *frame = new cmMainFrame("CMake", wxSize(200, 100));
frame->Initialize(&cm);
//wxFrame *frame = new testFrame("CMake", wxSize(200, 100));
//wxFrame *frame = new testFrame1("Frame", wxSize(200, 100));
//wxFrame *frame = new testFrame2("Frame", wxSize(200, 100));
//wxFrame *frame = new testFrame3("Frame", wxSize(200, 100));
frame->Show(TRUE);
this->SetTopWindow(frame);
return TRUE;
}
int wxCMakeSetup::OnExit()
{
// clean up: Set() returns the active config object as Get() does, but unlike
// Get() it doesn't try to create one if there is none (definitely not what
// we want here!)
//delete wxConfigBase::Set((wxConfigBase *) NULL);
return 0;
}
IMPLEMENT_APP(wxCMakeSetup)

View File

@ -0,0 +1,52 @@
#ifdef WIN32
#define __WIN32
#define _WINDOWS
#define __WINDOWS__
#define __WXMSW__
#define __WIN32__
#define WINVER 0x0400
#define STRICT
#include "wx/defs.h"
#include "wx/app.h"
#include "wx/button.h"
#include "wx/checkbox.h"
#include "wx/combobox.h"
#include "wx/config.h"
#include "wx/control.h"
#include "wx/dirdlg.h"
#include "wx/filedlg.h"
#include "wx/menu.h"
#include "wx/msgdlg.h"
#include "wx/scrolwin.h"
#include "wx/sizer.h"
#include "wx/statbox.h"
#include "wx/stattext.h"
#include "wx/textctrl.h"
#pragma hdrstop("wxincludes.pch")
#else
#include "wx/app.h"
#include "wx/button.h"
#include "wx/checkbox.h"
#include "wx/combobox.h"
#include "wx/config.h"
#include "wx/control.h"
#include "wx/dirdlg.h"
#include "wx/filedlg.h"
#include "wx/menu.h"
#include "wx/msgdlg.h"
#include "wx/scrolwin.h"
#include "wx/sizer.h"
#include "wx/statbox.h"
#include "wx/stattext.h"
#include "wx/textctrl.h"
#endif
#undef FileExists