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