// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
#ifdef __GNUG__
-#pragma implementation "proplist.h"
+ #pragma implementation "proplist.h"
#endif
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
-#pragma hdrstop
+ #pragma hdrstop
#endif
+#if wxUSE_PROPSHEET
+
#ifndef WX_PRECOMP
-#include "wx/wx.h"
+ #include "wx/window.h"
+ #include "wx/font.h"
+ #include "wx/button.h"
+ #include "wx/bmpbuttn.h"
+ #include "wx/textctrl.h"
+ #include "wx/listbox.h"
+ #include "wx/settings.h"
+ #include "wx/msgdlg.h"
+ #include "wx/filedlg.h"
#endif
+#include "wx/sizer.h"
+#include "wx/module.h"
+#include "wx/intl.h"
+
+#include "wx/colordlg.h"
+#include "wx/proplist.h"
+
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
-#if wxUSE_IOSTREAMH
-#if defined(__WXMSW__) && !defined(__GNUWIN32__)
-#include <strstrea.h>
-#else
-#include <strstream.h>
-#endif
-#else
-#include <strstream>
+// ----------------------------------------------------------------------------
+// XPMs
+// ----------------------------------------------------------------------------
+
+#ifndef __WXMSW__
+ #include "wx/generic/cross.xpm"
+ #include "wx/generic/tick.xpm"
#endif
-#include "wx/window.h"
-#include "wx/utils.h"
-#include "wx/list.h"
-#include "wx/colordlg.h"
-#include "wx/proplist.h"
+// ----------------------------------------------------------------------------
+// accessor functions for the bitmaps (may return NULL, check for it!)
+// ----------------------------------------------------------------------------
-/*
- * Property text edit control
- */
-
-IMPLEMENT_CLASS(wxPropertyTextEdit, wxTextCtrl)
+static wxBitmap *GetTickBitmap();
+static wxBitmap *GetCrossBitmap();
+
+// ----------------------------------------------------------------------------
+// Property text edit control
+// ----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxPropertyTextEdit, wxTextCtrl)
wxPropertyTextEdit::wxPropertyTextEdit(wxPropertyListView *v, wxWindow *parent,
const wxWindowID id, const wxString& value,
- const wxPoint& pos, const wxSize& size,
+ const wxPoint& pos, const wxSize& size,
long style, const wxString& name):
wxTextCtrl(parent, id, value, pos, size, style, wxDefaultValidator, name)
{
m_view = v;
}
-void wxPropertyTextEdit::OnSetFocus(void)
+void wxPropertyTextEdit::OnSetFocus()
{
}
-void wxPropertyTextEdit::OnKillFocus(void)
+void wxPropertyTextEdit::OnKillFocus()
{
}
-/*
- * Property list view
- */
+// ----------------------------------------------------------------------------
+// Property list view
+// ----------------------------------------------------------------------------
+
+bool wxPropertyListView::sm_dialogCancelled = FALSE;
IMPLEMENT_DYNAMIC_CLASS(wxPropertyListView, wxPropertyView)
BEGIN_EVENT_TABLE(wxPropertyListView, wxPropertyView)
- EVT_BUTTON(wxID_OK, wxPropertyListView::OnOk)
- EVT_BUTTON(wxID_CANCEL, wxPropertyListView::OnCancel)
- EVT_BUTTON(wxID_HELP, wxPropertyListView::OnHelp)
- EVT_BUTTON(wxID_PROP_CROSS, wxPropertyListView::OnCross)
- EVT_BUTTON(wxID_PROP_CHECK, wxPropertyListView::OnCheck)
- EVT_BUTTON(wxID_PROP_EDIT, wxPropertyListView::OnEdit)
- EVT_TEXT_ENTER(wxID_PROP_TEXT, wxPropertyListView::OnText)
- EVT_LISTBOX(wxID_PROP_SELECT, wxPropertyListView::OnPropertySelect)
- EVT_COMMAND(wxID_PROP_SELECT, wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxPropertyListView::OnPropertyDoubleClick)
- EVT_LISTBOX(wxID_PROP_VALUE_SELECT, wxPropertyListView::OnValueListSelect)
+ EVT_BUTTON(wxID_OK, wxPropertyListView::OnOk)
+ EVT_BUTTON(wxID_CANCEL, wxPropertyListView::OnCancel)
+ EVT_BUTTON(wxID_HELP, wxPropertyListView::OnHelp)
+ EVT_BUTTON(wxID_PROP_CROSS, wxPropertyListView::OnCross)
+ EVT_BUTTON(wxID_PROP_CHECK, wxPropertyListView::OnCheck)
+ EVT_BUTTON(wxID_PROP_EDIT, wxPropertyListView::OnEdit)
+ EVT_TEXT_ENTER(wxID_PROP_TEXT, wxPropertyListView::OnText)
+ EVT_LISTBOX(wxID_PROP_SELECT, wxPropertyListView::OnPropertySelect)
+ EVT_COMMAND(wxID_PROP_SELECT, wxEVT_COMMAND_LISTBOX_DOUBLECLICKED,
+ wxPropertyListView::OnPropertyDoubleClick)
+ EVT_LISTBOX(wxID_PROP_VALUE_SELECT, wxPropertyListView::OnValueListSelect)
END_EVENT_TABLE()
-bool wxPropertyListView::sm_dialogCancelled = FALSE;
-wxBitmap *wxPropertyListView::sm_tickBitmap = NULL;
-wxBitmap *wxPropertyListView::sm_crossBitmap = NULL;
-
wxPropertyListView::wxPropertyListView(wxPanel *propPanel, long flags):wxPropertyView(flags)
{
m_propertyScrollingList = NULL;
m_detailedEditing = FALSE;
}
-wxPropertyListView::~wxPropertyListView(void)
+wxPropertyListView::~wxPropertyListView()
{
-/*
- if (m_tickBitmap)
- delete m_tickBitmap;
- if (m_crossBitmap)
- delete m_crossBitmap;
-*/
}
void wxPropertyListView::ShowView(wxPropertySheet *ps, wxPanel *panel)
// Update this view of the viewed object, called e.g. by
// the object itself.
-bool wxPropertyListView::OnUpdateView(void)
+bool wxPropertyListView::OnUpdateView()
{
return TRUE;
}
wxProperty *property = (wxProperty *)node->Data();
wxString stringValueRepr(property->GetValue().GetStringRepresentation());
wxString paddedString(MakeNameValueString(property->GetName(), stringValueRepr));
-
- m_propertyScrollingList->Append(paddedString.GetData(), (char *)property);
+ m_propertyScrollingList->Append(paddedString.GetData(), (void *)property);
node = node->Next();
}
return TRUE;
{
// Don't update the listbox unnecessarily because it can cause
// ugly flashing.
-
+
if (paddedString != m_propertyScrollingList->GetString(sel))
m_propertyScrollingList->SetString(sel, paddedString.GetData());
}
// Find the wxListBox index corresponding to this property
int wxPropertyListView::FindListIndexForProperty(wxProperty *property)
{
- int n = m_propertyScrollingList->Number();
+ int n = m_propertyScrollingList->GetCount();
for (int i = 0; i < n; i++)
{
if (property == (wxProperty *)m_propertyScrollingList->wxListBox::GetClientData(i))
return TRUE;
}
-void wxPropertyListView::BeginDetailedEditing(void)
+void wxPropertyListView::BeginDetailedEditing()
{
if (!m_currentValidator)
return;
m_detailedEditing = TRUE;
}
-void wxPropertyListView::EndDetailedEditing(void)
+void wxPropertyListView::EndDetailedEditing()
{
if (!m_currentValidator)
return;
}
}
-bool wxPropertyListView::CreateControls(void)
+bool wxPropertyListView::CreateControls()
{
- wxPanel *panel = (wxPanel *)m_propertyWindow;
+ wxPanel *panel = (wxPanel *)m_propertyWindow;
- int largeButtonWidth = 60;
- int largeButtonHeight = 25;
-
- int smallButtonWidth = 25;
- int smallButtonHeight = 20;
-
- // XView must be allowed to choose its own sized buttons
-#ifdef __XVIEW__
- largeButtonWidth = -1;
- largeButtonHeight = -1;
+ wxSize largeButtonSize( 70, 25 );
+ wxSize smallButtonSize( 23, 23 );
- smallButtonWidth = -1;
- smallButtonHeight = -1;
-#endif
-
- if (m_valueText)
- return TRUE;
-
- if (!panel)
- return FALSE;
+ if (m_valueText)
+ return TRUE;
- wxWindow *leftMostWindow = panel;
-/*
- wxWindow *topMostWindow = panel;
- wxWindow *rightMostWindow = panel;
-*/
+ if (!panel)
+ return FALSE;
- wxSystemSettings settings;
- wxFont guiFont = settings.GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
+ wxSystemSettings settings;
+ wxFont guiFont = settings.GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
#ifdef __WXMSW__
- wxFont *boringFont = wxTheFontList->FindOrCreateFont(guiFont.GetPointSize(), wxMODERN, wxNORMAL, wxNORMAL, FALSE, "Courier New");
+ wxFont *boringFont = wxTheFontList->FindOrCreateFont(guiFont.GetPointSize(), wxMODERN, wxNORMAL, wxNORMAL, FALSE, "Courier New");
#else
- wxFont *boringFont = wxTheFontList->FindOrCreateFont(guiFont.GetPointSize(), wxTELETYPE, wxNORMAL, wxNORMAL);
+ wxFont *boringFont = wxTheFontList->FindOrCreateFont(guiFont.GetPointSize(), wxTELETYPE, wxNORMAL, wxNORMAL);
#endif
- // May need to be changed in future to eliminate clashes with app.
- // WHAT WAS THIS FOR?
+ // May need to be changed in future to eliminate clashes with app.
+ // WHAT WAS THIS FOR?
// panel->SetClientData((char *)this);
- // These buttons are at the bottom of the window, but create them now
- // so the constraints are evaluated in the correct order
- if (m_buttonFlags & wxPROP_BUTTON_OK)
- {
- m_windowCloseButton = new wxButton(panel, wxID_OK, "OK",
- wxPoint(-1, -1), wxSize(largeButtonWidth, largeButtonHeight));
- m_windowCloseButton->SetDefault();
- m_windowCloseButton->SetFocus();
- }
- else if (m_buttonFlags & wxPROP_BUTTON_CLOSE)
- {
- m_windowCloseButton = new wxButton(panel, wxID_OK, "Close",
- wxPoint(-1, -1), wxSize(largeButtonWidth, largeButtonHeight));
- }
- if (m_buttonFlags & wxPROP_BUTTON_CANCEL)
- {
- m_windowCancelButton = new wxButton(panel, wxID_CANCEL, "Cancel",
- wxPoint(-1, -1), wxSize(largeButtonWidth, largeButtonHeight));
- }
- if (m_buttonFlags & wxPROP_BUTTON_HELP)
- {
- m_windowHelpButton = new wxButton(panel, wxID_HELP, "Help",
- wxPoint(-1, -1), wxSize(largeButtonWidth, largeButtonHeight));
- }
+ wxBoxSizer *mainsizer = new wxBoxSizer( wxVERTICAL );
- if (m_windowCloseButton)
- {
- wxLayoutConstraints *c1 = new wxLayoutConstraints;
-
- c1->left.SameAs (panel, wxLeft, 2);
- c1->bottom.SameAs (panel, wxBottom, 2);
- c1->width.AsIs();
- c1->height.AsIs();
- m_windowCloseButton->SetConstraints(c1);
- leftMostWindow = m_windowCloseButton;
- }
- if (m_windowCancelButton)
- {
- wxLayoutConstraints *c2 = new wxLayoutConstraints;
-
- c2->right.SameAs (panel, wxRight, 2);
- c2->bottom.SameAs (panel, wxBottom, 2);
- c2->width.AsIs();
- c2->height.AsIs();
- m_windowCancelButton->SetConstraints(c2);
- leftMostWindow = m_windowCancelButton;
- }
- if (m_windowHelpButton)
- {
- wxLayoutConstraints *c2 = new wxLayoutConstraints;
- if (leftMostWindow == panel)
- c2->left.SameAs (panel, wxLeft, 2);
- else
- c2->left.RightOf (leftMostWindow, 2);
-
- c2->bottom.SameAs (panel, wxBottom, 2);
- c2->width.AsIs();
- c2->height.AsIs();
- m_windowHelpButton->SetConstraints(c2);
- leftMostWindow = m_windowHelpButton;
- }
+ // top row with optional buttons and input line
- if (m_buttonFlags & wxPROP_BUTTON_CHECK_CROSS)
- {
-/*
- if (!tickBitmap)
- {
-#ifdef __WXMSW__
- tickBitmap = new wxBitmap("tick_bmp", wxBITMAP_TYPE_RESOURCE);
- crossBitmap = new wxBitmap("cross_bmp", wxBITMAP_TYPE_RESOURCE);
- if (!tickBitmap || !crossBitmap || !tickBitmap->Ok() || !crossBitmap->Ok())
- {
- if (tickBitmap)
- delete tickBitmap;
- if (crossBitmap)
- delete crossBitmap;
- tickBitmap = NULL;
- crossBitmap = NULL;
- }
-#endif
- }
-*/
-/*
- if (tickBitmap && crossBitmap)
- {
- m_confirmButton = new wxBitmapButton(panel, wxID_PROP_CHECK, tickBitmap,
- wxPoint(-1, -1), wxSize(smallButtonWidth-5, smallButtonHeight-5));
- m_cancelButton = new wxBitmapButton(panel, wxID_PROP_CROSS, crossBitmap,
- wxPoint(-1, -1), wxSize(smallButtonWidth-5, smallButtonHeight-5));
- }
- else
-*/
- {
- m_confirmButton = new wxButton(panel, wxID_PROP_CHECK, ":-)",
- wxPoint(-1, -1), wxSize(smallButtonWidth, smallButtonHeight));
- m_cancelButton = new wxButton(panel, wxID_PROP_CROSS, "X",
- wxPoint(-1, -1), wxSize(smallButtonWidth, smallButtonHeight));
- }
+ wxBoxSizer *topsizer = new wxBoxSizer( wxHORIZONTAL );
+ int buttonborder = 3;
- wxLayoutConstraints *c = new wxLayoutConstraints;
- c->left.SameAs (panel, wxLeft, 2);
-/*
- if (windowCloseButton)
- c->top.Below (m_windowCloseButton, 2);
- else
-*/
- c->top.SameAs (panel, wxTop, 2);
-
- c->width.AsIs();
- c->height.AsIs();
-
- m_cancelButton->SetConstraints(c);
-
- c = new wxLayoutConstraints;
- c->left.RightOf (m_cancelButton, 2);
- c->top.SameAs (m_cancelButton, wxTop, 0);
- c->width.AsIs();
- c->height.AsIs();
-
- m_confirmButton->SetConstraints(c);
-
- m_cancelButton->Enable(FALSE);
- m_confirmButton->Enable(FALSE);
- }
-
- if (m_buttonFlags & wxPROP_PULLDOWN)
- {
- m_editButton = new wxButton(panel, wxID_PROP_EDIT, "...",
- wxPoint(-1, -1), wxSize(smallButtonWidth, smallButtonHeight));
- m_editButton->Enable(FALSE);
- wxLayoutConstraints *c = new wxLayoutConstraints;
-
-/*
- if (m_windowCloseButton)
- c->top.Below (m_windowCloseButton, 2);
- else
-*/
- c->top.SameAs (panel, wxTop, 2);
-
- c->right.SameAs (panel, wxRight, 2);
- c->width.AsIs();
- c->height.AsIs();
- m_editButton->SetConstraints(c);
- }
-
- m_valueText = new wxPropertyTextEdit(this, panel, wxID_PROP_TEXT, "", wxPoint(-1, -1), wxSize(-1, -1), wxPROCESS_ENTER);
- m_valueText->Enable(FALSE);
-
- wxLayoutConstraints *c = new wxLayoutConstraints;
+ if (m_buttonFlags & wxPROP_BUTTON_CHECK_CROSS)
+ {
+ wxBitmap *tickBitmap = GetTickBitmap();
+ wxBitmap *crossBitmap = GetCrossBitmap();
- if (m_cancelButton)
- c->left.RightOf (m_confirmButton, 2);
- else
- c->left.SameAs (panel, wxLeft, 2);
-/*
- if (m_windowCloseButton)
- c->top.Below (m_windowCloseButton, 2);
- else
-*/
- c->top.SameAs (panel, wxTop, 2);
+ if ( tickBitmap && crossBitmap )
+ {
+ m_confirmButton = new wxBitmapButton(panel, wxID_PROP_CHECK, *tickBitmap, wxPoint(-1, -1), smallButtonSize );
+ m_cancelButton = new wxBitmapButton(panel, wxID_PROP_CROSS, *crossBitmap, wxPoint(-1, -1), smallButtonSize );
+ }
+ else
+ {
+ m_confirmButton = new wxButton(panel, wxID_PROP_CHECK, ":-)", wxPoint(-1, -1), smallButtonSize );
+ m_cancelButton = new wxButton(panel, wxID_PROP_CROSS, "X", wxPoint(-1, -1), smallButtonSize );
+ }
- if (m_editButton)
- c->right.LeftOf (m_editButton, 2);
- else
- c->right.SameAs (panel, wxRight, 2);
- c->height.AsIs();
+ topsizer->Add( m_confirmButton, 0, wxLEFT|wxTOP|wxBOTTOM | wxEXPAND, buttonborder );
+ topsizer->Add( m_cancelButton, 0, wxLEFT|wxTOP|wxBOTTOM | wxEXPAND, buttonborder );
+ }
- m_valueText->SetConstraints(c);
+ m_valueText = new wxPropertyTextEdit(this, panel, wxID_PROP_TEXT, "",
+ wxPoint(-1, -1), wxSize(-1, smallButtonSize.y), wxPROCESS_ENTER);
+ m_valueText->Enable(FALSE);
+ topsizer->Add( m_valueText, 1, wxALL | wxEXPAND, buttonborder );
- m_valueList = new wxListBox(panel, wxID_PROP_VALUE_SELECT, wxPoint(-1, -1), wxSize(-1, 60));
- m_valueList->Show(FALSE);
+ if (m_buttonFlags & wxPROP_PULLDOWN)
+ {
+ m_editButton = new wxButton(panel, wxID_PROP_EDIT, "...", wxPoint(-1, -1), smallButtonSize);
+ m_editButton->Enable(FALSE);
+ topsizer->Add( m_editButton, 0, wxRIGHT|wxTOP|wxBOTTOM | wxEXPAND, buttonborder );
+ }
- c = new wxLayoutConstraints;
+ mainsizer->Add( topsizer, 0, wxEXPAND );
- c->left.SameAs (panel, wxLeft, 2);
- c->top.Below (m_valueText, 2);
- c->right.SameAs (panel, wxRight, 2);
- c->height.Absolute(60);
+ // middle section with two list boxes
- m_valueList->SetConstraints(c);
+ m_middleSizer = new wxBoxSizer( wxVERTICAL );
- m_propertyScrollingList = new wxListBox(panel, wxID_PROP_SELECT,
- wxPoint(-1, -1), wxSize(300, 300));
- m_propertyScrollingList->SetFont(* boringFont);
+ m_valueList = new wxListBox(panel, wxID_PROP_VALUE_SELECT, wxPoint(-1, -1), wxSize(-1, 60));
+ m_valueList->Show(FALSE);
- c = new wxLayoutConstraints;
+ m_propertyScrollingList = new wxListBox(panel, wxID_PROP_SELECT, wxPoint(-1, -1), wxSize(100, 100));
+ m_propertyScrollingList->SetFont(* boringFont);
+ m_middleSizer->Add( m_propertyScrollingList, 1, wxALL|wxEXPAND, buttonborder );
- c->left.SameAs (panel, wxLeft, 2);
+ mainsizer->Add( m_middleSizer, 1, wxEXPAND );
- if (m_buttonFlags & wxPROP_DYNAMIC_VALUE_FIELD)
- c->top.Below (m_valueText, 2);
- else
- c->top.Below (m_valueList, 2);
+ // bottom row with buttons
- c->right.SameAs (panel, wxRight, 2);
+ if ((m_buttonFlags & wxPROP_BUTTON_OK) ||
+ (m_buttonFlags & wxPROP_BUTTON_CLOSE) ||
+ (m_buttonFlags & wxPROP_BUTTON_CANCEL) ||
+ (m_buttonFlags & wxPROP_BUTTON_HELP))
+ {
+ wxBoxSizer *bottomsizer = new wxBoxSizer( wxHORIZONTAL );
+ buttonborder = 5;
- if (m_windowCloseButton)
- c->bottom.Above (m_windowCloseButton, -2);
- else
- c->bottom.SameAs (panel, wxBottom, 2);
+ if (m_buttonFlags & wxPROP_BUTTON_OK)
+ {
+ m_windowCloseButton = new wxButton(panel, wxID_OK, _("OK"), wxPoint(-1, -1), largeButtonSize );
+ m_windowCloseButton->SetDefault();
+ m_windowCloseButton->SetFocus();
+ bottomsizer->Add( m_windowCloseButton, 0, wxALL, buttonborder );
+ }
+ else if (m_buttonFlags & wxPROP_BUTTON_CLOSE)
+ {
+ m_windowCloseButton = new wxButton(panel, wxID_OK, _("Close"), wxPoint(-1, -1), largeButtonSize );
+ bottomsizer->Add( m_windowCloseButton, 0, wxALL, buttonborder );
+ }
+ if (m_buttonFlags & wxPROP_BUTTON_CANCEL)
+ {
+ m_windowCancelButton = new wxButton(panel, wxID_CANCEL, _("Cancel"), wxPoint(-1, -1), largeButtonSize );
+ bottomsizer->Add( m_windowCancelButton, 0, wxALL, buttonborder );
+ }
+ if (m_buttonFlags & wxPROP_BUTTON_HELP)
+ {
+ m_windowHelpButton = new wxButton(panel, wxID_HELP, _("Help"), wxPoint(-1, -1), largeButtonSize );
+ bottomsizer->Add( m_windowHelpButton, 0, wxALL, buttonborder );
+ }
- m_propertyScrollingList->SetConstraints(c);
+ mainsizer->Add( bottomsizer, 0, wxALIGN_RIGHT | wxEXPAND );
+ }
- // Note: if this is called now, it causes a GPF.
- // Why?
-// panel->Layout();
+ panel->SetSizer( mainsizer );
- return TRUE;
+ return TRUE;
}
void wxPropertyListView::ShowTextControl(bool show)
void wxPropertyListView::ShowListBoxControl(bool show)
{
- if (m_valueList)
- {
+ if (!m_valueList) return;
+
m_valueList->Show(show);
+
if (m_buttonFlags & wxPROP_DYNAMIC_VALUE_FIELD)
{
- wxLayoutConstraints *constraints = m_propertyScrollingList->GetConstraints();
- if (constraints)
- {
if (show)
- {
- constraints->top.Below(m_valueList, 2);
- // Maintain back-pointer so when valueList is deleted,
- // any reference to it from this window is removed.
- m_valueList->AddConstraintReference(m_propertyScrollingList);
- }
+ m_middleSizer->Prepend( m_valueList, 0, wxTOP|wxLEFT|wxRIGHT | wxEXPAND, 3 );
else
- {
- constraints->top.Below(m_valueText, 2);
- m_valueText->AddConstraintReference(m_propertyScrollingList);
- }
+ m_middleSizer->Remove( 0 );
+
m_propertyWindow->Layout();
- }
}
- }
}
void wxPropertyListView::EnableCheck(bool show)
m_cancelButton->Enable(show);
}
-bool wxPropertyListView::OnClose(void)
+bool wxPropertyListView::OnClose()
{
// Retrieve the value if any
wxCommandEvent event;
OnCheck(event);
-
+
delete this;
return TRUE;
}
{
// Retrieve the value if any
OnCheck(event);
-
+
m_managedWindow->Close(TRUE);
}
}
}
-/*
- * Property dialog box
- */
-
-IMPLEMENT_CLASS(wxPropertyListDialog, wxDialog)
+// ----------------------------------------------------------------------------
+// Property dialog box
+// ----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxPropertyListDialog, wxDialog)
BEGIN_EVENT_TABLE(wxPropertyListDialog, wxDialog)
- EVT_BUTTON(wxID_CANCEL, wxPropertyListDialog::OnCancel)
+ EVT_BUTTON(wxID_CANCEL, wxPropertyListDialog::OnCancel)
+ EVT_CLOSE(wxPropertyListDialog::OnCloseWindow)
END_EVENT_TABLE()
wxPropertyListDialog::wxPropertyListDialog(wxPropertyListView *v, wxWindow *parent,
- const wxString& title, const wxPoint& pos,
+ const wxString& title, const wxPoint& pos,
const wxSize& size, long style, const wxString& name):
wxDialog(parent, -1, title, pos, size, style, name)
{
SetAutoLayout(TRUE);
}
-bool wxPropertyListDialog::OnClose(void)
+void wxPropertyListDialog::OnCloseWindow(wxCloseEvent& event)
{
if (m_view)
{
- SetReturnCode(wxID_CANCEL);
+ SetReturnCode(wxID_CANCEL);
m_view->OnClose();
- m_view = NULL;
- return TRUE;
+ m_view = NULL;
+ this->Destroy();
}
else
- return FALSE;
+ {
+ event.Veto();
+ }
}
void wxPropertyListDialog::OnCancel(wxCommandEvent& WXUNUSED(event))
{
- SetReturnCode(wxID_CANCEL);
+ SetReturnCode(wxID_CANCEL);
this->Close();
}
// Extend event processing to search the view's event table
bool wxPropertyListDialog::ProcessEvent(wxEvent& event)
{
- if ( !m_view || ! m_view->ProcessEvent(event) )
- return wxEvtHandler::ProcessEvent(event);
- else
- return TRUE;
+ if ( !m_view || ! m_view->ProcessEvent(event) )
+ return wxEvtHandler::ProcessEvent(event);
+ else
+ return TRUE;
}
-/*
- * Property panel
- */
-
-IMPLEMENT_CLASS(wxPropertyListPanel, wxPanel)
+// ----------------------------------------------------------------------------
+// Property panel
+// ----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxPropertyListPanel, wxPanel)
BEGIN_EVENT_TABLE(wxPropertyListPanel, wxPanel)
EVT_SIZE(wxPropertyListPanel::OnSize)
// Extend event processing to search the view's event table
bool wxPropertyListPanel::ProcessEvent(wxEvent& event)
{
- if ( !m_view || ! m_view->ProcessEvent(event) )
- return wxEvtHandler::ProcessEvent(event);
- else
- return TRUE;
+ if ( !m_view || ! m_view->ProcessEvent(event) )
+ return wxEvtHandler::ProcessEvent(event);
+ else
+ return TRUE;
}
void wxPropertyListPanel::OnSize(wxSizeEvent& WXUNUSED(event))
Layout();
}
-/*
- * Property frame
- */
-
-IMPLEMENT_CLASS(wxPropertyListFrame, wxFrame)
+// ----------------------------------------------------------------------------
+// Property frame
+// ----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxPropertyListFrame, wxFrame)
+
+BEGIN_EVENT_TABLE(wxPropertyListFrame, wxFrame)
+ EVT_CLOSE(wxPropertyListFrame::OnCloseWindow)
+END_EVENT_TABLE()
-bool wxPropertyListFrame::OnClose(void)
+void wxPropertyListFrame::OnCloseWindow(wxCloseEvent& event)
{
if (m_view)
{
m_propertyPanel->SetView(NULL);
m_view->OnClose();
m_view = NULL;
- return TRUE;
+ this->Destroy();
}
else
- return FALSE;
+ {
+ event.Veto();
+ }
}
wxPropertyListPanel *wxPropertyListFrame::OnCreatePanel(wxFrame *parent, wxPropertyListView *v)
return new wxPropertyListPanel(v, parent);
}
-bool wxPropertyListFrame::Initialize(void)
+bool wxPropertyListFrame::Initialize()
{
m_propertyPanel = OnCreatePanel(this, m_view);
if (m_propertyPanel)
return FALSE;
}
- /*
- * Property list specific validator
- */
-
+// ----------------------------------------------------------------------------
+// Property list specific validator
+// ----------------------------------------------------------------------------
+
IMPLEMENT_ABSTRACT_CLASS(wxPropertyListValidator, wxPropertyValidator)
bool wxPropertyListValidator::OnSelect(bool select, wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow)
bool wxPropertyListValidator::OnValueListSelect(wxProperty *property, wxPropertyListView *view, wxWindow *WXUNUSED(parentWindow))
{
wxString s(view->GetValueList()->GetStringSelection());
- if (s != "")
+ if (s != wxT(""))
{
view->GetValueText()->SetValue(s);
view->RetrieveProperty(property);
return TRUE;
}
-/*
- * Default validators
- */
+// ----------------------------------------------------------------------------
+// Default validators
+// ----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxRealListValidator, wxPropertyListValidator)
///
/// Real number validator
-///
+///
bool wxRealListValidator::OnCheckValue(wxProperty *WXUNUSED(property), wxPropertyListView *view, wxWindow *parentWindow)
{
if (m_realMin == 0.0 && m_realMax == 0.0)
return TRUE;
-
+
if (!view->GetValueText())
return FALSE;
wxString value(view->GetValueText()->GetValue());
float val = 0.0;
if (!StringToFloat(WXSTRINGCAST value, &val))
{
- char buf[200];
- sprintf(buf, "Value %s is not a valid real number!", value.GetData());
- wxMessageBox(buf, "Property value error", wxOK | wxICON_EXCLAMATION, parentWindow);
+ wxChar buf[200];
+ wxSprintf(buf, wxT("Value %s is not a valid real number!"), value.GetData());
+ wxMessageBox(buf, wxT("Property value error"), wxOK | wxICON_EXCLAMATION, parentWindow);
return FALSE;
}
-
+
if (val < m_realMin || val > m_realMax)
{
char buf[200];
if (!view->GetValueText())
return FALSE;
- if (strlen(view->GetValueText()->GetValue()) == 0)
+ if (wxStrlen(view->GetValueText()->GetValue()) == 0)
return FALSE;
-
+
wxString value(view->GetValueText()->GetValue());
- float f = (float)atof(value.GetData());
+ float f = (float)wxAtof(value.GetData());
property->GetValue() = f;
return TRUE;
}
///
/// Integer validator
-///
+///
IMPLEMENT_DYNAMIC_CLASS(wxIntegerListValidator, wxPropertyListValidator)
bool wxIntegerListValidator::OnCheckValue(wxProperty *WXUNUSED(property), wxPropertyListView *view, wxWindow *parentWindow)
{
if (m_integerMin == 0 && m_integerMax == 0)
return TRUE;
-
+
if (!view->GetValueText())
return FALSE;
wxString value(view->GetValueText()->GetValue());
long val = 0;
if (!StringToLong(WXSTRINGCAST value, &val))
{
- char buf[200];
- sprintf(buf, "Value %s is not a valid integer!", value.GetData());
- wxMessageBox(buf, "Property value error", wxOK | wxICON_EXCLAMATION, parentWindow);
+ wxChar buf[200];
+ wxSprintf(buf, wxT("Value %s is not a valid integer!"), value.GetData());
+ wxMessageBox(buf, wxT("Property value error"), wxOK | wxICON_EXCLAMATION, parentWindow);
return FALSE;
}
if (val < m_integerMin || val > m_integerMax)
{
- char buf[200];
- sprintf(buf, "Value must be an integer between %ld and %ld!", m_integerMin, m_integerMax);
- wxMessageBox(buf, "Property value error", wxOK | wxICON_EXCLAMATION, parentWindow);
+ wxChar buf[200];
+ wxSprintf(buf, wxT("Value must be an integer between %ld and %ld!"), m_integerMin, m_integerMax);
+ wxMessageBox(buf, wxT("Property value error"), wxOK | wxICON_EXCLAMATION, parentWindow);
return FALSE;
}
return TRUE;
if (!view->GetValueText())
return FALSE;
- if (strlen(view->GetValueText()->GetValue()) == 0)
+ if (wxStrlen(view->GetValueText()->GetValue()) == 0)
return FALSE;
-
+
wxString value(view->GetValueText()->GetValue());
- long val = (long)atoi(value.GetData());
+ long val = (long)wxAtoi(value.GetData());
property->GetValue() = (long)val;
return TRUE;
}
if (!view->GetValueText())
return FALSE;
wxString value(view->GetValueText()->GetValue());
- if (value != "True" && value != "False")
+ if (value != wxT("True") && value != wxT("False"))
{
- wxMessageBox("Value must be True or False!", "Property value error", wxOK | wxICON_EXCLAMATION, parentWindow);
+ wxMessageBox(wxT("Value must be True or False!"), wxT("Property value error"), wxOK | wxICON_EXCLAMATION, parentWindow);
return FALSE;
}
return TRUE;
if (!view->GetValueText())
return FALSE;
- if (strlen(view->GetValueText()->GetValue()) == 0)
+ if (wxStrlen(view->GetValueText()->GetValue()) == 0)
return FALSE;
-
+
wxString value(view->GetValueText()->GetValue());
bool boolValue = FALSE;
- if (value == "True")
+ if (value == wxT("True"))
boolValue = TRUE;
else
boolValue = FALSE;
{
view->ShowListBoxControl(TRUE);
view->GetValueList()->Enable(TRUE);
-
- view->GetValueList()->Append("True");
- view->GetValueList()->Append("False");
- char *currentString = copystring(view->GetValueText()->GetValue());
+
+ view->GetValueList()->Append(wxT("True"));
+ view->GetValueList()->Append(wxT("False"));
+ wxChar *currentString = copystring(view->GetValueText()->GetValue());
view->GetValueList()->SetStringSelection(currentString);
delete[] currentString;
}
///
/// String validator
-///
+///
IMPLEMENT_DYNAMIC_CLASS(wxStringListValidator, wxPropertyListValidator)
wxStringListValidator::wxStringListValidator(wxStringList *list, long flags):
return FALSE;
wxString str(property->GetValue().GetStringRepresentation());
view->GetValueText()->SetValue(str);
- if (m_strings && view->GetValueList() && view->GetValueList()->IsShown() && view->GetValueList()->Number() > 0)
+ if (m_strings && view->GetValueList() && view->GetValueList()->IsShown() && view->GetValueList()->GetCount() > 0)
{
view->GetValueList()->SetStringSelection(str);
}
view->GetValueText()->Enable(TRUE);
return TRUE;
}
-
+
// Constrained
if (view->GetValueText())
view->GetValueText()->Enable(FALSE);
wxNode *node = m_strings->First();
while (node)
{
- char *s = (char *)node->Data();
+ wxChar *s = (wxChar *)node->Data();
view->GetValueList()->Append(s);
node = node->Next();
}
- char *currentString = property->GetValue().StringValue();
+ wxChar *currentString = property->GetValue().StringValue();
view->GetValueList()->SetStringSelection(currentString);
}
return TRUE;
return FALSE;
wxNode *node = m_strings->First();
- char *currentString = property->GetValue().StringValue();
+ wxChar *currentString = property->GetValue().StringValue();
while (node)
{
- char *s = (char *)node->Data();
- if (strcmp(s, currentString) == 0)
+ wxChar *s = (wxChar *)node->Data();
+ if (wxStrcmp(s, currentString) == 0)
{
- char *nextString = NULL;
+ wxChar *nextString = NULL;
if (node->Next())
- nextString = (char *)node->Next()->Data();
+ nextString = (wxChar *)node->Next()->Data();
else
- nextString = (char *)m_strings->First()->Data();
+ nextString = (wxChar *)m_strings->First()->Data();
property->GetValue() = wxString(nextString);
view->DisplayProperty(property);
view->UpdatePropertyDisplayInList(property);
///
/// Filename validator
-///
+///
IMPLEMENT_DYNAMIC_CLASS(wxFilenameListValidator, wxPropertyListValidator)
wxFilenameListValidator::wxFilenameListValidator(wxString message , wxString wildcard, long flags):
{
}
-wxFilenameListValidator::~wxFilenameListValidator(void)
+wxFilenameListValidator::~wxFilenameListValidator()
{
}
m_filenameWildCard.GetData(),
0,
parentWindow);
- if (s != "")
+ if (s != wxT(""))
{
property->GetValue() = s;
view->DisplayProperty(property);
///
/// Colour validator
-///
+///
IMPLEMENT_DYNAMIC_CLASS(wxColourListValidator, wxPropertyListValidator)
wxColourListValidator::wxColourListValidator(long flags):
{
}
-wxColourListValidator::~wxColourListValidator(void)
+wxColourListValidator::~wxColourListValidator()
{
}
if (!view->GetValueText())
return FALSE;
wxString value(view->GetValueText()->GetValue());
-
+
property->GetValue() = value ;
return TRUE;
}
{
if (!view->GetValueText())
return;
-
- char *s = property->GetValue().StringValue();
+
+ wxChar *s = property->GetValue().StringValue();
int r = 0;
int g = 0;
int b = 0;
g = wxHexToDec(s+2);
b = wxHexToDec(s+4);
}
-
+
wxColour col(r,g,b);
-
+
wxColourData data;
data.SetChooseFull(TRUE);
data.SetColour(col);
-
+
for (int i = 0; i < 16; i++)
{
wxColour colour(i*16, i*16, i*16);
data.SetCustomColour(i, colour);
}
-
+
wxColourDialog dialog(parentWindow, &data);
if (dialog.ShowModal() != wxID_CANCEL)
{
wxColourData retData = dialog.GetColourData();
col = retData.GetColour();
-
- char buf[7];
+
+ wxChar buf[7];
wxDecToHex(col.Red(), buf);
wxDecToHex(col.Green(), buf+2);
wxDecToHex(col.Blue(), buf+4);
{
// Convert property value to a list of strings for editing
wxStringList *stringList = new wxStringList;
-
+
wxPropertyValue *expr = property->GetValue().GetFirst();
while (expr)
{
- char *s = expr->StringValue();
+ wxChar *s = expr->StringValue();
if (s)
stringList->Add(s);
expr = expr->GetNext();
}
-
- wxString title("Editing ");
+
+ wxString title(wxT("Editing "));
title += property->GetName();
-
+
if (EditStringList(parentWindow, stringList, title.GetData()))
{
wxPropertyValue& oldValue = property->GetValue();
wxNode *node = stringList->First();
while (node)
{
- char *s = (char *)node->Data();
+ wxChar *s = (wxChar *)node->Data();
oldValue.Append(new wxPropertyValue(s));
-
+
node = node->Next();
}
-
+
view->DisplayProperty(property);
view->UpdatePropertyDisplayInList(property);
view->OnPropertyChanged(property);
{
public:
wxPropertyStringListEditorDialog(wxWindow *parent, const wxString& title,
- const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
- long windowStyle = wxDEFAULT_DIALOG_STYLE, const wxString& name = "stringEditorDialogBox"):
- wxDialog(parent, -1, title, pos, size, windowStyle, name)
+ const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
+ long windowStyle = wxDEFAULT_DIALOG_STYLE, const wxString& name = "stringEditorDialogBox"):
+ wxDialog(parent, -1, title, pos, size, windowStyle, name)
{
m_stringList = NULL;
m_stringText = NULL;
m_currentSelection = -1;
}
~wxPropertyStringListEditorDialog(void) {}
- bool OnClose(void);
+ void OnCloseWindow(wxCloseEvent& event);
void SaveCurrentSelection(void);
void ShowCurrentSelection(void);
- void OnOK(wxCommandEvent& event);
- void OnCancel(wxCommandEvent& event);
- void OnAdd(wxCommandEvent& event);
- void OnDelete(wxCommandEvent& event);
- void OnStrings(wxCommandEvent& event);
- void OnText(wxCommandEvent& event);
+ void OnOK(wxCommandEvent& event);
+ void OnCancel(wxCommandEvent& event);
+ void OnAdd(wxCommandEvent& event);
+ void OnDelete(wxCommandEvent& event);
+ void OnStrings(wxCommandEvent& event);
+ void OnText(wxCommandEvent& event);
public:
wxStringList* m_stringList;
DECLARE_EVENT_TABLE()
};
-#define wxID_PROP_SL_ADD 3000
-#define wxID_PROP_SL_DELETE 3001
-#define wxID_PROP_SL_STRINGS 3002
-#define wxID_PROP_SL_TEXT 3003
+#define wxID_PROP_SL_ADD 3000
+#define wxID_PROP_SL_DELETE 3001
+#define wxID_PROP_SL_STRINGS 3002
+#define wxID_PROP_SL_TEXT 3003
BEGIN_EVENT_TABLE(wxPropertyStringListEditorDialog, wxDialog)
- EVT_BUTTON(wxID_OK, wxPropertyStringListEditorDialog::OnOK)
- EVT_BUTTON(wxID_CANCEL, wxPropertyStringListEditorDialog::OnCancel)
- EVT_BUTTON(wxID_PROP_SL_ADD, wxPropertyStringListEditorDialog::OnAdd)
- EVT_BUTTON(wxID_PROP_SL_DELETE, wxPropertyStringListEditorDialog::OnDelete)
- EVT_LISTBOX(wxID_PROP_SL_STRINGS, wxPropertyStringListEditorDialog::OnStrings)
- EVT_TEXT_ENTER(wxID_PROP_SL_TEXT, wxPropertyStringListEditorDialog::OnText)
+ EVT_BUTTON(wxID_OK, wxPropertyStringListEditorDialog::OnOK)
+ EVT_BUTTON(wxID_CANCEL, wxPropertyStringListEditorDialog::OnCancel)
+ EVT_BUTTON(wxID_PROP_SL_ADD, wxPropertyStringListEditorDialog::OnAdd)
+ EVT_BUTTON(wxID_PROP_SL_DELETE, wxPropertyStringListEditorDialog::OnDelete)
+ EVT_LISTBOX(wxID_PROP_SL_STRINGS, wxPropertyStringListEditorDialog::OnStrings)
+ EVT_TEXT_ENTER(wxID_PROP_SL_TEXT, wxPropertyStringListEditorDialog::OnText)
+ EVT_CLOSE(wxPropertyStringListEditorDialog::OnCloseWindow)
END_EVENT_TABLE()
class wxPropertyStringListEditorText: public wxTextCtrl
{
public:
wxPropertyStringListEditorText(wxWindow *parent, wxWindowID id, const wxString& val,
- const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
+ const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long windowStyle = 0, const wxString& name = "text"):
wxTextCtrl(parent, id, val, pos, size, windowStyle, wxDefaultValidator, name)
{
}
- void OnKillFocus(void)
+ void OnKillFocus()
{
wxPropertyStringListEditorDialog *dialog = (wxPropertyStringListEditorDialog *)GetParent();
dialog->SaveCurrentSelection();
bool wxPropertyStringListEditorDialog::sm_dialogCancelled = FALSE;
// Edit the string list.
-bool wxListOfStringsListValidator::EditStringList(wxWindow *parent, wxStringList *stringList, const char *title)
+bool wxListOfStringsListValidator::EditStringList(wxWindow *parent, wxStringList *stringList, const wxChar *title)
{
int largeButtonWidth = 60;
int largeButtonHeight = 25;
wxBeginBusyCursor();
wxPropertyStringListEditorDialog *dialog = new wxPropertyStringListEditorDialog(parent,
- title, wxPoint(10, 10), wxSize(400, 400), wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL);
-
+ title, wxPoint(10, 10), wxSize(400, 400), wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL);
+
dialog->m_stringList = stringList;
-
+
dialog->m_listBox = new wxListBox(dialog, wxID_PROP_SL_STRINGS,
wxPoint(-1, -1), wxSize(-1, -1), 0, NULL, wxLB_SINGLE);
wxButton *cancelButton = new wxButton(dialog, wxID_CANCEL, "Cancel", wxPoint(-1, -1), wxSize(largeButtonWidth, largeButtonHeight));
wxButton *okButton = new wxButton(dialog, wxID_OK, "OK", wxPoint(-1, -1), wxSize(largeButtonWidth, largeButtonHeight));
+#ifndef __WXGTK__
okButton->SetDefault();
+#endif
wxLayoutConstraints *c = new wxLayoutConstraints;
dialog->Centre(wxBOTH);
wxEndBusyCursor();
if (dialog->ShowModal() == wxID_CANCEL)
- return FALSE;
+ return FALSE;
else
- return TRUE;
+ return TRUE;
}
/*
int sel = m_listBox->GetSelection();
if (sel == -1)
return;
-
+
wxNode *node = (wxNode *)m_listBox->wxListBox::GetClientData(sel);
if (!node)
return;
-
+
m_listBox->Delete(sel);
- delete[] (char *)node->Data();
+ delete[] (wxChar *)node->Data();
delete node;
m_currentSelection = -1;
m_stringText->SetValue("");
void wxPropertyStringListEditorDialog::OnAdd(wxCommandEvent& WXUNUSED(event))
{
SaveCurrentSelection();
-
- char *initialText = "";
+
+ wxChar *initialText = wxT("");
wxNode *node = m_stringList->Add(initialText);
- m_listBox->Append(initialText, (char *)node);
+ m_listBox->Append(initialText, (void *)node);
m_currentSelection = m_stringList->Number() - 1;
m_listBox->SetSelection(m_currentSelection);
ShowCurrentSelection();
{
SaveCurrentSelection();
EndModal(wxID_OK);
- Close(TRUE);
+ // Close(TRUE);
+ this->Destroy();
}
void wxPropertyStringListEditorDialog::OnCancel(wxCommandEvent& WXUNUSED(event))
{
sm_dialogCancelled = TRUE;
EndModal(wxID_CANCEL);
- Close(TRUE);
+// Close(TRUE);
+ this->Destroy();
}
void wxPropertyStringListEditorDialog::OnText(wxCommandEvent& event)
}
}
-bool wxPropertyStringListEditorDialog::OnClose(void)
+void
+wxPropertyStringListEditorDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
{
SaveCurrentSelection();
- return TRUE;
+
+ Destroy();
}
-void wxPropertyStringListEditorDialog::SaveCurrentSelection(void)
+void wxPropertyStringListEditorDialog::SaveCurrentSelection()
{
if (m_currentSelection == -1)
return;
-
+
wxNode *node = (wxNode *)m_listBox->wxListBox::GetClientData(m_currentSelection);
if (!node)
return;
-
+
wxString txt(m_stringText->GetValue());
if (node->Data())
delete[] (char *)node->Data();
node->SetData((wxObject *)copystring(txt));
-
+
m_listBox->SetString(m_currentSelection, (char *)node->Data());
}
-void wxPropertyStringListEditorDialog::ShowCurrentSelection(void)
+void wxPropertyStringListEditorDialog::ShowCurrentSelection()
{
if (m_currentSelection == -1)
{
m_stringText->Enable(TRUE);
}
+// ----------------------------------------------------------------------------
+// global functions
+// ----------------------------------------------------------------------------
+
+// FIXME MT-UNSAFE
+static wxBitmap *GetTickBitmap()
+{
+ static wxBitmap* s_tickBitmap = (wxBitmap *) NULL;
+ static bool s_loaded = FALSE;
+
+ if ( !s_loaded )
+ {
+ s_loaded = TRUE; // set it to TRUE anyhow, we won't try again
+
+ #if defined(__WXMSW__) || defined(__WXPM__)
+ s_tickBitmap = new wxBitmap("tick_bmp", wxBITMAP_TYPE_RESOURCE);
+ #else
+ s_tickBitmap = new wxBitmap( tick_xpm );
+ #endif
+ }
+
+ return s_tickBitmap;
+}
+
+static wxBitmap *GetCrossBitmap()
+{
+ static wxBitmap* s_crossBitmap = (wxBitmap *) NULL;
+ static bool s_loaded = FALSE;
+
+ if ( !s_loaded )
+ {
+ s_loaded = TRUE; // set it to TRUE anyhow, we won't try again
+
+ #if defined(__WXMSW__) || defined(__WXPM__)
+ s_crossBitmap = new wxBitmap("cross_bmp", wxBITMAP_TYPE_RESOURCE);
+ #else // XPMs
+ s_crossBitmap = new wxBitmap( cross_xpm );
+ #endif // BMPs/XPMs
+ }
+
+ return s_crossBitmap;
+}
+
+#endif // wxUSE_PROPSHEET