Initial import of wxWindows dialog
This commit is contained in:
parent
0dafd886fc
commit
f1d40eef93
|
@ -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 )
|
|
@ -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);
|
||||
}
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
@ -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__
|
|
@ -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)
|
|
@ -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
|
Loading…
Reference in New Issue