// 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
#ifndef WX_PRECOMP
-#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"
+ #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 <math.h>
#include <string.h>
+// ----------------------------------------------------------------------------
+// XPMs
+// ----------------------------------------------------------------------------
+
#ifndef __WXMSW__
-#include "wx/generic/cross.xpm"
-#include "wx/generic/tick.xpm"
+ #include "wx/generic/cross.xpm"
+ #include "wx/generic/tick.xpm"
#endif
+// ----------------------------------------------------------------------------
+// accessor functions for the bitmaps (may return NULL, check for it!)
+// ----------------------------------------------------------------------------
-/*
- * global data, urgh.
- */
-
-static wxBitmap* gs_tickBitmap = (wxBitmap*) NULL;
-static wxBitmap* gs_crossBitmap = (wxBitmap*) NULL;
-
+static wxBitmap *GetTickBitmap();
+static wxBitmap *GetCrossBitmap();
-/*
- * Property text edit control
- */
+// ----------------------------------------------------------------------------
+// Property text edit control
+// ----------------------------------------------------------------------------
-IMPLEMENT_CLASS(wxPropertyTextEdit, wxTextCtrl)
+IMPLEMENT_DYNAMIC_CLASS(wxPropertyTextEdit, wxTextCtrl)
wxPropertyTextEdit::wxPropertyTextEdit(wxPropertyListView *v, wxWindow *parent,
const wxWindowID id, const wxString& value,
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;
m_detailedEditing = FALSE;
}
-wxPropertyListView::~wxPropertyListView(void)
+wxPropertyListView::~wxPropertyListView()
{
}
// Update this view of the viewed object, called e.g. by
// the object itself.
-bool wxPropertyListView::OnUpdateView(void)
+bool wxPropertyListView::OnUpdateView()
{
return TRUE;
}
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;
{
wxPanel *panel = (wxPanel *)m_propertyWindow;
- wxSize largeButtonSize( 60, 25 );
+ wxSize largeButtonSize( 70, 25 );
wxSize smallButtonSize( 23, 23 );
if (m_valueText)
// panel->SetClientData((char *)this);
wxBoxSizer *mainsizer = new wxBoxSizer( wxVERTICAL );
-
+
// top row with optional buttons and input line
wxBoxSizer *topsizer = new wxBoxSizer( wxHORIZONTAL );
if (m_buttonFlags & wxPROP_BUTTON_CHECK_CROSS)
{
- if (gs_tickBitmap && gs_crossBitmap)
+ wxBitmap *tickBitmap = GetTickBitmap();
+ wxBitmap *crossBitmap = GetCrossBitmap();
+
+ if ( tickBitmap && crossBitmap )
{
- m_confirmButton = new wxBitmapButton(panel, wxID_PROP_CHECK, *gs_tickBitmap, wxPoint(-1, -1), smallButtonSize );
- m_cancelButton = new wxBitmapButton(panel, wxID_PROP_CROSS, *gs_crossBitmap, wxPoint(-1, -1), smallButtonSize );
+ 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 );
+ m_cancelButton = new wxButton(panel, wxID_PROP_CROSS, "X", wxPoint(-1, -1), smallButtonSize );
}
-
- topsizer->Add( m_confirmButton, 0, wxLEFT|wxTOP|wxBOTTOM | wxEXPAND, buttonborder );
- topsizer->Add( m_cancelButton, 0, wxLEFT|wxTOP|wxBOTTOM | wxEXPAND, buttonborder );
+
+ topsizer->Add( m_confirmButton, 0, wxLEFT|wxTOP|wxBOTTOM | wxEXPAND, buttonborder );
+ topsizer->Add( m_cancelButton, 0, wxLEFT|wxTOP|wxBOTTOM | wxEXPAND, buttonborder );
}
- m_valueText = new wxPropertyTextEdit(this, panel, wxID_PROP_TEXT, "",
+ 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 );
-
+
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 );
+ topsizer->Add( m_editButton, 0, wxRIGHT|wxTOP|wxBOTTOM | wxEXPAND, buttonborder );
}
mainsizer->Add( topsizer, 0, wxEXPAND );
m_propertyScrollingList->SetFont(* boringFont);
m_middleSizer->Add( m_propertyScrollingList, 1, wxALL|wxEXPAND, buttonborder );
- mainsizer->Add( m_middleSizer, 1, wxEXPAND );
+ mainsizer->Add( m_middleSizer, 1, wxEXPAND );
// bottom row with buttons
if ((m_buttonFlags & wxPROP_BUTTON_OK) ||
(m_buttonFlags & wxPROP_BUTTON_CLOSE) ||
- (m_buttonFlags & wxPROP_BUTTON_CANCEL) ||
- (m_buttonFlags & wxPROP_BUTTON_HELP))
+ (m_buttonFlags & wxPROP_BUTTON_CANCEL) ||
+ (m_buttonFlags & wxPROP_BUTTON_HELP))
{
wxBoxSizer *bottomsizer = new wxBoxSizer( wxHORIZONTAL );
buttonborder = 5;
-
+
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, wxLEFT|wxTOP|wxBOTTOM, buttonborder );
+ bottomsizer->Add( m_windowCloseButton, 0, wxALL, buttonborder );
}
else if (m_buttonFlags & wxPROP_BUTTON_CLOSE)
{
m_windowHelpButton = new wxButton(panel, wxID_HELP, _("Help"), wxPoint(-1, -1), largeButtonSize );
bottomsizer->Add( m_windowHelpButton, 0, wxALL, buttonborder );
}
-
- mainsizer->Add( bottomsizer, 1, wxALIGN_RIGHT | wxEXPAND );
+
+ mainsizer->Add( bottomsizer, 0, wxALIGN_RIGHT | wxEXPAND );
}
panel->SetSizer( mainsizer );
void wxPropertyListView::ShowListBoxControl(bool show)
{
if (!m_valueList) return;
-
+
m_valueList->Show(show);
-
+
if (m_buttonFlags & wxPROP_DYNAMIC_VALUE_FIELD)
{
if (show)
- m_middleSizer->Prepend( m_valueList, 0, wxTOP|wxLEFT|wxRIGHT | wxEXPAND, 3 );
- else
- m_middleSizer->Remove( 0 );
-
+ m_middleSizer->Prepend( m_valueList, 0, wxTOP|wxLEFT|wxRIGHT | wxEXPAND, 3 );
+ else
+ m_middleSizer->Remove( 0 );
+
m_propertyWindow->Layout();
}
}
m_cancelButton->Enable(show);
}
-bool wxPropertyListView::OnClose(void)
+bool wxPropertyListView::OnClose()
{
// Retrieve the value if any
wxCommandEvent event;
}
}
-/*
- * Property dialog box
- */
+// ----------------------------------------------------------------------------
+// Property dialog box
+// ----------------------------------------------------------------------------
-IMPLEMENT_CLASS(wxPropertyListDialog, wxDialog)
+IMPLEMENT_DYNAMIC_CLASS(wxPropertyListDialog, wxDialog)
BEGIN_EVENT_TABLE(wxPropertyListDialog, wxDialog)
EVT_BUTTON(wxID_CANCEL, wxPropertyListDialog::OnCancel)
return TRUE;
}
-/*
- * Property panel
- */
+// ----------------------------------------------------------------------------
+// Property panel
+// ----------------------------------------------------------------------------
-IMPLEMENT_CLASS(wxPropertyListPanel, wxPanel)
+IMPLEMENT_DYNAMIC_CLASS(wxPropertyListPanel, wxPanel)
BEGIN_EVENT_TABLE(wxPropertyListPanel, wxPanel)
EVT_SIZE(wxPropertyListPanel::OnSize)
Layout();
}
-/*
- * Property frame
- */
+// ----------------------------------------------------------------------------
+// Property frame
+// ----------------------------------------------------------------------------
-IMPLEMENT_CLASS(wxPropertyListFrame, wxFrame)
+IMPLEMENT_DYNAMIC_CLASS(wxPropertyListFrame, wxFrame)
BEGIN_EVENT_TABLE(wxPropertyListFrame, wxFrame)
EVT_CLOSE(wxPropertyListFrame::OnCloseWindow)
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::OnValueListSelect(wxProperty *property, wxPropertyListView *view, wxWindow *WXUNUSED(parentWindow))
{
wxString s(view->GetValueList()->GetStringSelection());
- if (s != _T(""))
+ if (s != wxT(""))
{
view->GetValueText()->SetValue(s);
view->RetrieveProperty(property);
return TRUE;
}
-/*
- * Default validators
- */
+// ----------------------------------------------------------------------------
+// Default validators
+// ----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxRealListValidator, wxPropertyListValidator)
if (!StringToFloat(WXSTRINGCAST value, &val))
{
wxChar buf[200];
- wxSprintf(buf, _T("Value %s is not a valid real number!"), value.GetData());
- wxMessageBox(buf, _T("Property value error"), wxOK | wxICON_EXCLAMATION, parentWindow);
+ 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 (!StringToLong(WXSTRINGCAST value, &val))
{
wxChar buf[200];
- wxSprintf(buf, _T("Value %s is not a valid integer!"), value.GetData());
- wxMessageBox(buf, _T("Property value error"), wxOK | wxICON_EXCLAMATION, parentWindow);
+ 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)
{
wxChar buf[200];
- wxSprintf(buf, _T("Value must be an integer between %ld and %ld!"), m_integerMin, m_integerMax);
- wxMessageBox(buf, _T("Property value error"), wxOK | wxICON_EXCLAMATION, parentWindow);
+ 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;
wxString value(view->GetValueText()->GetValue());
- if (value != _T("True") && value != _T("False"))
+ if (value != wxT("True") && value != wxT("False"))
{
- wxMessageBox(_T("Value must be True or False!"), _T("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;
wxString value(view->GetValueText()->GetValue());
bool boolValue = FALSE;
- if (value == _T("True"))
+ if (value == wxT("True"))
boolValue = TRUE;
else
boolValue = FALSE;
view->ShowListBoxControl(TRUE);
view->GetValueList()->Enable(TRUE);
- view->GetValueList()->Append(_T("True"));
- view->GetValueList()->Append(_T("False"));
+ view->GetValueList()->Append(wxT("True"));
+ view->GetValueList()->Append(wxT("False"));
wxChar *currentString = copystring(view->GetValueText()->GetValue());
view->GetValueList()->SetStringSelection(currentString);
delete[] currentString;
{
}
-wxFilenameListValidator::~wxFilenameListValidator(void)
+wxFilenameListValidator::~wxFilenameListValidator()
{
}
m_filenameWildCard.GetData(),
0,
parentWindow);
- if (s != _T(""))
+ if (s != wxT(""))
{
property->GetValue() = s;
view->DisplayProperty(property);
{
}
-wxColourListValidator::~wxColourListValidator(void)
+wxColourListValidator::~wxColourListValidator()
{
}
expr = expr->GetNext();
}
- wxString title(_T("Editing "));
+ wxString title(wxT("Editing "));
title += property->GetName();
if (EditStringList(parentWindow, stringList, title.GetData()))
wxTextCtrl(parent, id, val, pos, size, windowStyle, wxDefaultValidator, name)
{
}
- void OnKillFocus(void)
+ void OnKillFocus()
{
wxPropertyStringListEditorDialog *dialog = (wxPropertyStringListEditorDialog *)GetParent();
dialog->SaveCurrentSelection();
{
SaveCurrentSelection();
- wxChar *initialText = _T("");
+ wxChar *initialText = wxT("");
wxNode *node = m_stringList->Add(initialText);
m_listBox->Append(initialText, (void *)node);
m_currentSelection = m_stringList->Number() - 1;
}
}
-void wxPropertyStringListEditorDialog::OnCloseWindow(wxCloseEvent& event)
+void
+wxPropertyStringListEditorDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
{
SaveCurrentSelection();
- this->Destroy();
+
+ Destroy();
}
-void wxPropertyStringListEditorDialog::SaveCurrentSelection(void)
+void wxPropertyStringListEditorDialog::SaveCurrentSelection()
{
if (m_currentSelection == -1)
return;
m_listBox->SetString(m_currentSelection, (char *)node->Data());
}
-void wxPropertyStringListEditorDialog::ShowCurrentSelection(void)
+void wxPropertyStringListEditorDialog::ShowCurrentSelection()
{
if (m_currentSelection == -1)
{
m_stringText->Enable(TRUE);
}
-//-----------------------------------------------------------------------------
-// wxPropertyModule
-//-----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+// global functions
+// ----------------------------------------------------------------------------
-class wxPropertyModule: public wxModule
+// FIXME MT-UNSAFE
+static wxBitmap *GetTickBitmap()
{
- DECLARE_DYNAMIC_CLASS(wxPropertyModule)
-
-public:
- wxPropertyModule() {}
- bool OnInit();
- void OnExit();
-};
-
-IMPLEMENT_DYNAMIC_CLASS(wxPropertyModule,wxModule)
+ static wxBitmap* s_tickBitmap = (wxBitmap *) NULL;
+ static bool s_loaded = FALSE;
-bool wxPropertyModule::OnInit()
-{
-#ifdef __WXMSW__
- gs_tickBitmap = new wxBitmap("tick_bmp", wxBITMAP_TYPE_RESOURCE);
- gs_crossBitmap = new wxBitmap("cross_bmp", wxBITMAP_TYPE_RESOURCE);
-#else
- gs_tickBitmap = new wxBitmap( tick_xpm );
- gs_crossBitmap = new wxBitmap( cross_xpm );
-#endif
- if (!gs_tickBitmap || !gs_crossBitmap || !gs_tickBitmap->Ok() || !gs_crossBitmap->Ok())
+ if ( !s_loaded )
{
- if (gs_tickBitmap) delete gs_tickBitmap;
- if (gs_crossBitmap) delete gs_crossBitmap;
- gs_tickBitmap = (wxBitmap*) NULL;
- gs_crossBitmap = (wxBitmap*) NULL;
+ 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 TRUE;
+ return s_tickBitmap;
}
-void wxPropertyModule::OnExit()
+static wxBitmap *GetCrossBitmap()
{
- if (gs_tickBitmap)
- delete gs_tickBitmap;
- if (gs_crossBitmap)
- delete gs_crossBitmap;
+ 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;
}