#include <math.h>
#include <string.h>
-#if defined(__WINDOWS__) && !defined(__GNUWIN32__)
-#include <strstrea.h>
-#else
-#include <strstream.h>
-#endif
-
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
#include <windows.h>
#endif
#include "reseditr.h"
-#include "editrpal.h"
#include "winprop.h"
// Causes immediate feedback.
void wxResourcePropertyListView::OnPropertyChanged(wxProperty *property)
{
- // Sets the value of the property back into the actual object,
- // IF the property value was modified.
- if (property->GetValue().GetModified())
- {
- propertyInfo->SetProperty(property->GetName(), property);
- property->GetValue().SetModified(FALSE);
- }
+ // Sets the value of the property back into the actual object,
+ // IF the property value was modified.
+ if (property->GetValue().GetModified())
+ {
+ m_propertyInfo->SetProperty(property->GetName(), property);
+ property->GetValue().SetModified(FALSE);
+ wxResourceManager::GetCurrentResourceManager()->Modify(TRUE);
+ }
}
bool wxResourcePropertyListView::OnClose(void)
{
- int w, h, x, y;
- GetManagedWindow()->GetSize(& w, & h);
- GetManagedWindow()->GetPosition(& x, & y);
-
- wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().width = w;
- wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().height = h;
- wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().x = x;
- wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().y = y;
-
- return wxPropertyListView::OnClose();
+ int w, h, x, y;
+ GetManagedWindow()->GetSize(& w, & h);
+ GetManagedWindow()->GetPosition(& x, & y);
+
+ wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().width = w;
+ wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().height = h;
+ wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().x = x;
+ wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().y = y;
+
+ return wxPropertyListView::OnClose();
}
wxWindow *wxPropertyInfo::sm_propertyWindow;
/*
- * wxDialogEditorPropertyListDialog
- */
+* wxDialogEditorPropertyListDialog
+*/
+/*
wxDialogEditorPropertyListDialog::wxDialogEditorPropertyListDialog(wxPropertyListView *v, wxWindow *parent, const wxString& title,
- const wxPoint& pos, const wxSize& size,
- long style, const wxString& name):
- wxPropertyListDialog(v, parent, title, pos, size, style, name)
+const wxPoint& pos, const wxSize& size,
+long style, const wxString& name):
+wxPropertyListDialog(v, parent, title, pos, size, style, name)
+{
+m_propSheet = NULL;
+m_propInfo = NULL;
+}
+
+ wxDialogEditorPropertyListDialog::~wxDialogEditorPropertyListDialog()
+ {
+ delete m_propSheet;
+ delete m_propInfo;
+ wxPropertyInfo::sm_propertyWindow = NULL;
+ }
+*/
+
+wxDialogEditorPropertyListFrame::wxDialogEditorPropertyListFrame(wxPropertyListView *v, wxFrame *parent, const wxString& title,
+ const wxPoint& pos, const wxSize& size,
+ long style, const wxString& name):
+wxPropertyListFrame(v, parent, title, pos, size, style, name)
{
- m_propSheet = NULL;
- m_propInfo = NULL;
+ m_propSheet = NULL;
+ m_propInfo = NULL;
}
-wxDialogEditorPropertyListDialog::~wxDialogEditorPropertyListDialog()
+wxDialogEditorPropertyListFrame::~wxDialogEditorPropertyListFrame()
{
delete m_propSheet;
delete m_propInfo;
- wxPropertyInfo::sm_propertyWindow = NULL;
+ if (wxPropertyInfo::sm_propertyWindow == this)
+ wxPropertyInfo::sm_propertyWindow = NULL;
}
/*
- * wxPropertyInfo
- */
+* wxPropertyInfo
+*/
// Edit the information represented by this object, whatever that
// might be.
-bool wxPropertyInfo::Edit(wxWindow *parent, const wxString& title)
+bool wxPropertyInfo::Edit(wxWindow *WXUNUSED(parent), const wxString& title)
{
if (sm_propertyWindow)
- return FALSE;
-
- int width = wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().width;
- int height = wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().height;
- int x = wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().x;
- int y = wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().y;
-
- wxPropertySheet *propSheet = new wxPropertySheet;
-
- wxStringList propNames;
- GetPropertyNames(propNames);
-
- wxNode *node = propNames.First();
- while (node)
- {
- wxString name((char *)node->Data());
- wxProperty *prop = GetProperty(name);
- if (prop)
{
- propSheet->AddProperty(prop);
+ wxWindowPropertyInfo* thisProp = (wxWindowPropertyInfo*) this;
+ wxWindowPropertyInfo* oldProp = (wxWindowPropertyInfo*) (((wxDialogEditorPropertyListFrame *) sm_propertyWindow)->GetInfo());
+ if (oldProp->GetWindow() == thisProp->GetWindow())
+ {
+ sm_propertyWindow->Raise();
+ return TRUE;
+ }
+ else
+ {
+ CloseWindow(); // Close the window so we can open a new one
+ }
}
- node = node->Next();
- }
-
- // Reset 'modified' flags for all property values
- propSheet->SetAllModified(FALSE);
-
- wxResourcePropertyListView *view = new wxResourcePropertyListView(this, NULL,
-#ifdef __XVIEW__
- wxPROP_BUTTON_OK | wxPROP_BUTTON_CANCEL |
+
+ int width = wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().width;
+ int height = wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().height;
+ int x = wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().x;
+ int y = wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().y;
+
+ wxPropertySheet *propSheet = new wxPropertySheet;
+
+ wxStringList propNames;
+ GetPropertyNames(propNames);
+
+ wxNode *node = propNames.First();
+ while (node)
+ {
+ wxString name((char *)node->Data());
+ wxProperty *prop = GetProperty(name);
+ if (prop)
+ {
+ propSheet->AddProperty(prop);
+ }
+ node = node->Next();
+ }
+
+ // Reset 'modified' flags for all property values
+ propSheet->SetAllModified(FALSE);
+
+ wxResourcePropertyListView *view = new wxResourcePropertyListView(this, NULL,
+ wxPROP_BUTTON_OK | // wxPROP_BUTTON_CANCEL |
+ wxPROP_BUTTON_CHECK_CROSS|wxPROP_DYNAMIC_VALUE_FIELD|wxPROP_PULLDOWN|wxPROP_SHOWVALUES);
+
+ wxDialogEditorPropertyListFrame *propWin = new wxDialogEditorPropertyListFrame(view,
+ wxResourceManager::GetCurrentResourceManager()->GetEditorFrame(), title, wxPoint(x, y),
+ wxSize(width, height), wxDEFAULT_FRAME_STYLE);
+ sm_propertyWindow = propWin;
+
+ propWin->m_registry.RegisterValidator(wxString("real"), new wxRealListValidator);
+ propWin->m_registry.RegisterValidator(wxString("string"), new wxStringListValidator);
+ propWin->m_registry.RegisterValidator(wxString("integer"), new wxIntegerListValidator);
+ propWin->m_registry.RegisterValidator(wxString("bool"), new wxBoolListValidator);
+ propWin->m_registry.RegisterValidator(wxString("filename"), new wxFilenameListValidator);
+ propWin->m_registry.RegisterValidator(wxString("stringlist"), new wxListOfStringsListValidator);
+ propWin->m_registry.RegisterValidator(wxString("window_id"), new wxResourceSymbolValidator);
+
+ propWin->m_propInfo = this;
+ propWin->m_propSheet = propSheet;
+
+ // view->m_propertyWindow = propWin;
+ view->AddRegistry(&(propWin->m_registry));
+
+ propWin->Initialize();
+ view->ShowView(propSheet, propWin->GetPropertyPanel());
+
+ propWin->Show(TRUE);
+
+ // Otherwise doesn't show itself
+#ifdef __WXMOTIF__
+ wxNoOptimize noOptimize;
+ propWin->SetSize(-1, -1, width, height);
#endif
- wxPROP_BUTTON_CHECK_CROSS|wxPROP_DYNAMIC_VALUE_FIELD|wxPROP_PULLDOWN|wxPROP_SHOWVALUES);
-
- wxDialogEditorPropertyListDialog *propDialog = new wxDialogEditorPropertyListDialog(view,
- wxResourceManager::GetCurrentResourceManager()->GetEditorFrame(), title, wxPoint(x, y),
- wxSize(width, height), wxDEFAULT_DIALOG_STYLE);
- sm_propertyWindow = propDialog;
-
- propDialog->m_registry.RegisterValidator((wxString)"real", new wxRealListValidator);
- propDialog->m_registry.RegisterValidator((wxString)"string", new wxStringListValidator);
- propDialog->m_registry.RegisterValidator((wxString)"integer", new wxIntegerListValidator);
- propDialog->m_registry.RegisterValidator((wxString)"bool", new wxBoolListValidator);
- propDialog->m_registry.RegisterValidator((wxString)"filename", new wxFilenameListValidator);
- propDialog->m_registry.RegisterValidator((wxString)"stringlist", new wxListOfStringsListValidator);
-
- propDialog->m_propInfo = this;
- propDialog->m_propSheet = propSheet;
-
-// view->propertyWindow = propDialog;
- view->AddRegistry(&(propDialog->m_registry));
- view->ShowView(propSheet, propDialog);
+
+ return TRUE;
+}
- propDialog->Show(TRUE);
- return TRUE;
+void wxPropertyInfo::CloseWindow()
+{
+ if (sm_propertyWindow)
+ {
+ int w, h, x, y;
+ sm_propertyWindow->GetSize(& w, & h);
+ sm_propertyWindow->GetPosition(& x, & y);
+
+ wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().width = w;
+ wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().height = h;
+ wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().x = x;
+ wxResourceManager::GetCurrentResourceManager()->GetPropertyWindowSize().y = y;
+
+ sm_propertyWindow->Destroy();
+ sm_propertyWindow = (wxDialogEditorPropertyListFrame *) NULL;
+ }
}
/*
- * wxWindowPropertyInfo
- */
+* wxWindowPropertyInfo
+*/
wxWindowPropertyInfo::wxWindowPropertyInfo(wxWindow *win, wxItemResource *res)
{
- propertyWindow = win;
- propertyResource = res;
+ m_propertyWindow = win;
+ m_propertyResource = res;
}
wxWindowPropertyInfo::~wxWindowPropertyInfo(void)
wxProperty *wxWindowPropertyInfo::GetFontProperty(wxString& name, wxFont *font)
{
- if (!font)
- return NULL;
-
- if (name.Contains("Points"))
- return new wxProperty(name, (long)font->GetPointSize(), "integer", new wxIntegerListValidator(1, 100));
- else if (name.Contains("Family"))
- return new wxProperty(name, font->GetFamilyString(), "string",
- new wxStringListValidator(new wxStringList("wxDECORATIVE", "wxROMAN", "wxSCRIPT", "wxSWISS", "wxMODERN",
- NULL)));
- else if (name.Contains("Style"))
- return new wxProperty(name, font->GetStyleString(), "string",
- new wxStringListValidator(new wxStringList("wxNORMAL", "wxITALIC", "wxSLANT", NULL)));
- else if (name.Contains("Weight"))
- return new wxProperty(name, font->GetWeightString(), "string",
- new wxStringListValidator(new wxStringList("wxNORMAL", "wxBOLD", "wxLIGHT", NULL)));
- else if (name.Contains("Underlined"))
- return new wxProperty(name, (bool)font->GetUnderlined(), "bool");
- else
- return NULL;
+ if (!font)
+ return NULL;
+
+ if (name.Contains("Points"))
+ return new wxProperty(name, (long)font->GetPointSize(), "integer", new wxIntegerListValidator(1, 100));
+ else if (name.Contains("Family"))
+ return new wxProperty(name, font->GetFamilyString(), "string",
+ new wxStringListValidator(new wxStringList("wxDECORATIVE", "wxROMAN", "wxSCRIPT", "wxSWISS", "wxMODERN",
+ NULL)));
+ else if (name.Contains("Style"))
+ return new wxProperty(name, font->GetStyleString(), "string",
+ new wxStringListValidator(new wxStringList("wxNORMAL", "wxITALIC", "wxSLANT", NULL)));
+ else if (name.Contains("Weight"))
+ return new wxProperty(name, font->GetWeightString(), "string",
+ new wxStringListValidator(new wxStringList("wxNORMAL", "wxBOLD", "wxLIGHT", NULL)));
+ else if (name.Contains("Underlined"))
+ return new wxProperty(name, (bool)font->GetUnderlined(), "bool");
+ else
+ return NULL;
}
wxFont *wxWindowPropertyInfo::SetFontProperty(wxString& name, wxProperty *property, wxFont *font)
{
- int pointSize = 12;
- int fontFamily = wxMODERN;
- int fontStyle = wxNORMAL;
- int fontWeight = wxNORMAL;
- bool fontUnderlined = FALSE;
-
- if (name.Contains("Points"))
- {
- pointSize = (int)property->GetValue().IntegerValue();
- if (font && (pointSize == font->GetPointSize()))
- return NULL; // No change
- }
- else if (font) pointSize = font->GetPointSize();
-
- if (name.Contains("Family"))
- {
- wxString val = property->GetValue().StringValue();
- fontFamily = wxStringToFontFamily(val);
+ int pointSize = 12;
+ int fontFamily = wxMODERN;
+ int fontStyle = wxNORMAL;
+ int fontWeight = wxNORMAL;
+ bool fontUnderlined = FALSE;
- if (font && (fontFamily == font->GetFamily()))
- return NULL; // No change
- }
- else if (font) fontFamily = font->GetFamily();
-
- if (name.Contains("Style"))
- {
- wxString val = property->GetValue().StringValue();
- fontStyle = wxStringToFontStyle(val);
+ if (name.Contains("Points"))
+ {
+ pointSize = (int)property->GetValue().IntegerValue();
+ if (font && (pointSize == font->GetPointSize()))
+ return NULL; // No change
+ }
+ else if (font) pointSize = font->GetPointSize();
- if (font && (fontStyle == font->GetStyle()))
- return NULL; // No change
- }
- else if (font) fontStyle = font->GetStyle();
- if (name.Contains("Weight"))
- {
- wxString val = property->GetValue().StringValue();
- fontWeight = wxStringToFontWeight(val);
-
- if (font && (fontWeight == font->GetWeight()))
- return NULL; // No change
- }
- else if (font) fontWeight = font->GetWeight();
-
- if (name.Contains("Underlined"))
- {
- fontUnderlined = property->GetValue().BoolValue();
-
- if (font && (fontUnderlined == font->GetUnderlined()))
- return NULL; // No change
- }
- else if (font) fontUnderlined = font->GetUnderlined();
-
- wxFont *newFont = wxTheFontList->FindOrCreateFont(pointSize, fontFamily, fontStyle, fontWeight, fontUnderlined);
- if (newFont)
- {
- return newFont;
- }
- else
- return NULL;
+ if (name.Contains("Family"))
+ {
+ wxString val = property->GetValue().StringValue();
+ fontFamily = wxStringToFontFamily(val);
+
+ if (font && (fontFamily == font->GetFamily()))
+ return NULL; // No change
+ }
+ else if (font) fontFamily = font->GetFamily();
+
+ if (name.Contains("Style"))
+ {
+ wxString val = property->GetValue().StringValue();
+ fontStyle = wxStringToFontStyle(val);
+
+ if (font && (fontStyle == font->GetStyle()))
+ return NULL; // No change
+ }
+ else if (font) fontStyle = font->GetStyle();
+ if (name.Contains("Weight"))
+ {
+ wxString val = property->GetValue().StringValue();
+ fontWeight = wxStringToFontWeight(val);
+
+ if (font && (fontWeight == font->GetWeight()))
+ return NULL; // No change
+ }
+ else if (font) fontWeight = font->GetWeight();
+
+ if (name.Contains("Underlined"))
+ {
+ fontUnderlined = property->GetValue().BoolValue();
+
+ if (font && (fontUnderlined == font->GetUnderlined()))
+ return NULL; // No change
+ }
+ else if (font) fontUnderlined = font->GetUnderlined();
+
+ wxFont *newFont = wxTheFontList->FindOrCreateFont(pointSize, fontFamily, fontStyle, fontWeight, fontUnderlined);
+ if (newFont)
+ {
+ return newFont;
+ }
+ else
+ return NULL;
}
wxProperty *wxWindowPropertyInfo::GetProperty(wxString& name)
{
- wxFont *font = propertyWindow->GetFont();
- if (name == "fontPoints" || name == "fontFamily" || name == "fontStyle" || name == "fontWeight" ||
- name == "fontUnderlined")
- return GetFontProperty(name, font);
- else if (name == "name")
- return new wxProperty("name", propertyWindow->GetName(), "string");
- else if (name == "title")
- return new wxProperty("title", propertyWindow->GetTitle(), "string");
- else if (name == "x")
- {
- int x, y;
- propertyWindow->GetPosition(&x, &y);
- return new wxProperty("x", (long)x, "integer");
- }
- else if (name == "y")
- {
- int x, y;
- propertyWindow->GetPosition(&x, &y);
- return new wxProperty("y", (long)y, "integer");
- }
- else if (name == "width")
- {
- int width, height;
- propertyWindow->GetSize(&width, &height);
- return new wxProperty("width", (long)width, "integer");
- }
- else if (name == "height")
- {
- int width, height;
- propertyWindow->GetSize(&width, &height);
- return new wxProperty("height", (long)height, "integer");
- }
- else
- return NULL;
+ wxItemResource* resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+
+ wxFont *font = & m_propertyWindow->GetFont();
+ if (name == "fontPoints" || name == "fontFamily" || name == "fontStyle" || name == "fontWeight" ||
+ name == "fontUnderlined")
+ return GetFontProperty(name, font);
+ else if (name == "name")
+ return new wxProperty("name", m_propertyWindow->GetName(), "string");
+ else if (name == "title")
+ return new wxProperty("title", m_propertyWindow->GetTitle(), "string");
+ else if (name == "x")
+ {
+ return new wxProperty("x", (long)resource->GetX(), "integer");
+ }
+ else if (name == "y")
+ {
+ return new wxProperty("y", (long)resource->GetY(), "integer");
+ }
+ else if (name == "width")
+ {
+ return new wxProperty("width", (long)resource->GetWidth(), "integer");
+ }
+ else if (name == "height")
+ {
+ return new wxProperty("height", (long)resource->GetHeight(), "integer");
+ }
+ else if (name == "id")
+ {
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+ if (resource)
+ {
+ int id = resource->GetId();
+ wxString idStr;
+ idStr.Printf("%d", id);
+ wxString symbolName = wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().GetSymbolForId(id);
+ symbolName += "=";
+ symbolName += idStr;
+ // symbolName is now e.g. "ID_PANEL21=105"
+ return new wxProperty("id", symbolName, "window_id");
+ }
+ else
+ return NULL;
+ }
+ else if (name == "border")
+ {
+ wxString border("");
+ if (m_propertyWindow->GetWindowStyleFlag() & wxSIMPLE_BORDER)
+ border = "wxSIMPLE_BORDER";
+ else if (m_propertyWindow->GetWindowStyleFlag() & wxRAISED_BORDER)
+ border = "wxRAISED_BORDER";
+ else if (m_propertyWindow->GetWindowStyleFlag() & wxSUNKEN_BORDER)
+ border = "wxSUNKEN_BORDER";
+ else if (m_propertyWindow->GetWindowStyleFlag() & wxDOUBLE_BORDER)
+ border = "wxDOUBLE_BORDER";
+ else if (m_propertyWindow->GetWindowStyleFlag() & wxSTATIC_BORDER)
+ border = "wxSTATIC_BORDER";
+ else if (m_propertyWindow->GetWindowStyleFlag() & wxNO_BORDER)
+ border = "wxNO_BORDER";
+ else
+ border = "default border";
+
+ return new wxProperty("border", border, "string",
+ new wxStringListValidator(new wxStringList("wxSIMPLE_BORDER", "wxRAISED_BORDER",
+ "wxSUNKEN_BORDER", "wxDOUBLE_BORDER", "wxSTATIC_BORDER", "wxNO_BORDER", "default border", NULL)));
+ }
+ else
+ return NULL;
}
bool wxWindowPropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- wxFont *font = propertyWindow->GetFont();
- if (font && (name == "fontPoints" || name == "fontFamily" || name == "fontStyle" || name == "fontWeight" || name == "fontUnderlined" ))
- {
- wxFont *newFont = SetFontProperty(name, property, font);
- if (newFont)
- propertyWindow->SetFont(newFont);
- return TRUE;
- }
- else if (name == "name")
- {
- // Remove old name from resource table, if it's there.
- wxItemResource *oldResource = (wxItemResource *)wxResourceManager::GetCurrentResourceManager()->GetResourceTable().Delete(propertyWindow->GetName());
- if (oldResource)
+ wxFont *font = & m_propertyWindow->GetFont();
+ if (font && (name == "fontPoints" || name == "fontFamily" || name == "fontStyle" || name == "fontWeight" || name == "fontUnderlined" ))
{
- // It's a top-level resource
- propertyWindow->SetName(property->GetValue().StringValue());
- oldResource->SetName(property->GetValue().StringValue());
- wxResourceManager::GetCurrentResourceManager()->GetResourceTable().Put(propertyWindow->GetName(), oldResource);
+ wxFont *newFont = SetFontProperty(name, property, font);
+ if (newFont)
+ {
+ m_propertyWindow->SetFont(* newFont);
+ wxItemResource* resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+ if (resource)
+ {
+ resource->SetFont(* newFont);
+ }
+ }
+
+ return TRUE;
}
- else
+ else if (name == "name")
{
- // It's a child of something; just set the name of the resource and the window.
- propertyWindow->SetName(property->GetValue().StringValue());
- propertyResource->SetName(property->GetValue().StringValue());
+ // Remove old name from resource table, if it's there.
+ wxItemResource *oldResource = (wxItemResource *)wxResourceManager::GetCurrentResourceManager()->GetResourceTable().Delete(m_propertyWindow->GetName());
+ if (oldResource)
+ {
+ // It's a top-level resource
+ m_propertyWindow->SetName(property->GetValue().StringValue());
+ oldResource->SetName(property->GetValue().StringValue());
+ wxResourceManager::GetCurrentResourceManager()->GetResourceTable().Put(m_propertyWindow->GetName(), oldResource);
+ }
+ else
+ {
+ // It's a child of something; just set the name of the resource and the window.
+ m_propertyWindow->SetName(property->GetValue().StringValue());
+ m_propertyResource->SetName(property->GetValue().StringValue());
+ }
+ // Refresh the resource manager list, because the name changed.
+ wxResourceManager::GetCurrentResourceManager()->UpdateResourceList();
+ return TRUE;
}
- // Refresh the resource manager list, because the name changed.
- wxResourceManager::GetCurrentResourceManager()->UpdateResourceList();
- return TRUE;
- }
- else if (name == "title")
- {
- propertyWindow->SetTitle(property->GetValue().StringValue());
- return TRUE;
- }
- else if (name == "x")
- {
- int x, y;
- propertyWindow->GetPosition(&x, &y);
- int newX = (int)property->GetValue().IntegerValue();
- if (x != newX)
- propertyWindow->Move(newX, y);
- return TRUE;
- }
- else if (name == "y")
- {
- int x, y;
- propertyWindow->GetPosition(&x, &y);
- int newY = (int)property->GetValue().IntegerValue();
- if (y != newY)
- propertyWindow->Move(x, newY);
- return TRUE;
- }
- else if (name == "width")
- {
- int width, height;
- propertyWindow->GetSize(&width, &height);
- int newWidth = (int)property->GetValue().IntegerValue();
- if (width != newWidth)
+ else if (name == "title")
{
- propertyWindow->SetSize(newWidth, height);
-/*
- if (propertyWindow->IsKindOf(CLASSINFO(wxPanel)) && !propertyWindow->IsKindOf(CLASSINFO(wxDialog)))
- {
- propertyWindow->GetParent()->SetClientSize(newWidth, height);
- }
-*/
+ m_propertyWindow->SetTitle(property->GetValue().StringValue());
+ return TRUE;
}
- return TRUE;
- }
- else if (name == "height")
- {
- int width, height;
- propertyWindow->GetSize(&width, &height);
- int newHeight = (int)property->GetValue().IntegerValue();
- if (height != newHeight)
+ else if (name == "x")
{
- propertyWindow->SetSize(width, newHeight);
-/*
- if (propertyWindow->IsKindOf(CLASSINFO(wxPanel)) && !propertyWindow->IsKindOf(CLASSINFO(wxDialog)))
- {
- propertyWindow->GetParent()->SetClientSize(width, newHeight);
- }
-*/
+ wxItemResource* resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+ int x, y;
+ m_propertyWindow->GetPosition(&x, &y);
+ int newX = (int)property->GetValue().IntegerValue();
+ int pixelX = newX;
+
+ // We need to convert to pixels if this is not a dialog or panel, but
+ // the parent resource specifies dialog units.
+ if (m_propertyWindow->GetParent() && m_propertyWindow->IsKindOf(CLASSINFO(wxControl)))
+ {
+ wxItemResource* parentResource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow->GetParent());
+ if (parentResource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
+ {
+ wxPoint pt = m_propertyWindow->GetParent()->ConvertDialogToPixels(wxPoint(newX, y));
+ pixelX = pt.x;
+ }
+ }
+ else if (m_propertyWindow->IsKindOf(CLASSINFO(wxPanel)))
+ {
+ wxItemResource* resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+ if (resource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
+ {
+ wxPoint pt = m_propertyWindow->ConvertDialogToPixels(wxPoint(newX, y));
+ pixelX = pt.x;
+ }
+ }
+
+ if (x != pixelX)
+ {
+ m_propertyWindow->Move(pixelX, y);
+ resource->SetSize(newX, resource->GetY(), resource->GetWidth(), resource->GetHeight());
+ }
+ return TRUE;
}
- return TRUE;
- }
- else
- return FALSE;
+ else if (name == "y")
+ {
+ wxItemResource* resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+ int x, y;
+ m_propertyWindow->GetPosition(&x, &y);
+ int newY = (int)property->GetValue().IntegerValue();
+ int pixelY = newY;
+
+ // We need to convert to pixels if this is not a dialog or panel, but
+ // the parent resource specifies dialog units.
+ if (m_propertyWindow->GetParent() && m_propertyWindow->IsKindOf(CLASSINFO(wxControl)))
+ {
+ wxItemResource* parentResource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow->GetParent());
+ if (parentResource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
+ {
+ wxPoint pt = m_propertyWindow->GetParent()->ConvertDialogToPixels(wxPoint(x, newY));
+ pixelY = pt.y;
+ }
+ }
+ else if (m_propertyWindow->IsKindOf(CLASSINFO(wxPanel)))
+ {
+ wxItemResource* resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+ if (resource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
+ {
+ wxPoint pt = m_propertyWindow->ConvertDialogToPixels(wxPoint(x, newY));
+ pixelY = pt.y;
+ }
+ }
+
+ if (y != pixelY)
+ {
+ m_propertyWindow->Move(x, pixelY);
+ resource->SetSize(resource->GetX(), newY, resource->GetWidth(), resource->GetHeight());
+ }
+ return TRUE;
+ }
+ else if (name == "width")
+ {
+ wxItemResource* resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+ int width, height;
+ m_propertyWindow->GetSize(&width, &height);
+ int newWidth = (int)property->GetValue().IntegerValue();
+ int pixelWidth = newWidth;
+
+ // We need to convert to pixels if this is not a dialog or panel, but
+ // the parent resource specifies dialog units.
+ if (m_propertyWindow->GetParent() && m_propertyWindow->IsKindOf(CLASSINFO(wxControl)))
+ {
+ wxItemResource* parentResource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow->GetParent());
+ if (parentResource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
+ {
+ wxSize sz = m_propertyWindow->GetParent()->ConvertDialogToPixels(wxSize(newWidth, height));
+ pixelWidth = sz.x;
+ }
+ }
+ else if (m_propertyWindow->IsKindOf(CLASSINFO(wxPanel)))
+ {
+ wxItemResource* resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+ if (resource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
+ {
+ wxSize sz = m_propertyWindow->ConvertDialogToPixels(wxSize(newWidth, height));
+ pixelWidth = sz.x;
+ }
+ }
+
+ if (width != pixelWidth)
+ {
+ m_propertyWindow->SetSize(pixelWidth, height);
+ resource->SetSize(resource->GetX(), resource->GetY(), newWidth, resource->GetHeight());
+ }
+ return TRUE;
+ }
+ else if (name == "height")
+ {
+ wxItemResource* resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+ int width, height;
+ m_propertyWindow->GetSize(&width, &height);
+ int newHeight = (int)property->GetValue().IntegerValue();
+ int pixelHeight = newHeight;
+
+ // We need to convert to pixels if this is not a dialog or panel, but
+ // the parent resource specifies dialog units.
+ if (m_propertyWindow->GetParent() && m_propertyWindow->IsKindOf(CLASSINFO(wxControl)))
+ {
+ wxItemResource* parentResource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow->GetParent());
+ if (parentResource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
+ {
+ wxSize sz = m_propertyWindow->GetParent()->ConvertDialogToPixels(wxSize(width, newHeight));
+ pixelHeight = sz.y;
+ }
+ }
+ else if (m_propertyWindow->IsKindOf(CLASSINFO(wxPanel)))
+ {
+ wxItemResource* resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+ if (resource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
+ {
+ wxSize sz = m_propertyWindow->ConvertDialogToPixels(wxSize(width, newHeight));
+ pixelHeight = sz.y;
+ }
+ }
+
+ if (height != pixelHeight)
+ {
+ m_propertyWindow->SetSize(width, pixelHeight);
+ resource->SetSize(resource->GetX(), resource->GetY(), resource->GetWidth(), newHeight);
+ }
+ return TRUE;
+ }
+ else if (name == "id")
+ {
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+ if (resource)
+ {
+ wxString value = property->GetValue().StringValue();
+
+ wxString strName = value.Before('=');
+ wxString strId = value.After('=');
+ int id = atoi(strId);
+
+ wxString oldSymbolName = wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().GetSymbolForId(resource->GetId());
+ int oldSymbolId = resource->GetId();
+
+ if (strName != "")
+ {
+ // If we change the id for an existing symbol, we need to:
+ // 1) Check if there are any other resources currently using the original id.
+ // If so, will need to change their id to the new id.
+ // 2) Remove the old symbol, add the new symbol.
+ // In this check, we don't have to do this, but we need to do it in SetProperty.
+
+ if (strName == oldSymbolName && id != oldSymbolId)
+ {
+ wxASSERT( (!wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().IsStandardSymbol(oldSymbolName)) );
+
+ // It's OK to change just the id. But we'll need to change all matching ids in all resources,
+ // because ids are unique and changing one resource's id must change all identical ones.
+ wxResourceManager::GetCurrentResourceManager()->ChangeIds(oldSymbolId, id);
+
+ wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().RemoveSymbol(oldSymbolName);
+ wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().AddSymbol(strName, id);
+ }
+
+ // If we change the name but not the id, we'll just need to remove and
+ // re-add the symbol/id pair.
+ if (strName != oldSymbolName && id == oldSymbolId)
+ {
+ wxASSERT( (!wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().IsStandardSymbol(oldSymbolName)) );
+
+ wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().RemoveSymbol(oldSymbolName);
+
+ if (!wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().SymbolExists(strName))
+ {
+ wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().AddSymbol(strName, id);
+ }
+ }
+
+ // What if we're changing both the name and the id?
+ // - if there's no symbol of that name, just remove the old, add the new (in SetProperty)
+ // - if there is a symbol of that name, if id matches, do nothing. If not, veto.
+
+ if (strName != oldSymbolName && id != oldSymbolId)
+ {
+ // Remove old symbol if it's not being used
+ if (!wxResourceManager::GetCurrentResourceManager()->IsSymbolUsed(resource, oldSymbolId) &&
+ !wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().IsStandardSymbol(oldSymbolName))
+ {
+ wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().RemoveSymbol(oldSymbolName);
+ }
+
+ if (!wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().SymbolExists(strName))
+ {
+ wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().AddSymbol(strName, id);
+ }
+ }
+ resource->SetId(id);
+ }
+
+ return TRUE;
+ }
+ else
+ return FALSE;
+ }
+ else if (name == "border")
+ {
+ long borderStyle = 0;
+ wxString val = property->GetValue().StringValue();
+
+ if (val == "wxSIMPLE_BORDER")
+ borderStyle = wxSIMPLE_BORDER;
+ else if (val == "wxRAISED_BORDER")
+ borderStyle = wxRAISED_BORDER;
+ else if (val == "wxSUNKEN_BORDER")
+ borderStyle = wxSUNKEN_BORDER;
+ else if (val == "wxDOUBLE_BORDER")
+ borderStyle = wxDOUBLE_BORDER;
+ else if (val == "wxSTATIC_BORDER")
+ borderStyle = wxSTATIC_BORDER;
+ else if (val == "wxNO_BORDER")
+ borderStyle = wxNO_BORDER;
+
+ SetWindowStyle(m_propertyWindow, wxSIMPLE_BORDER, FALSE);
+ SetWindowStyle(m_propertyWindow, wxRAISED_BORDER, FALSE);
+ SetWindowStyle(m_propertyWindow, wxSUNKEN_BORDER, FALSE);
+ SetWindowStyle(m_propertyWindow, wxDOUBLE_BORDER, FALSE);
+ SetWindowStyle(m_propertyWindow, wxSTATIC_BORDER, FALSE);
+ SetWindowStyle(m_propertyWindow, wxNO_BORDER, FALSE);
+
+ SetWindowStyle(m_propertyWindow, borderStyle, TRUE);
+
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+ resource->SetStyle(m_propertyWindow->GetWindowStyleFlag());
+ return TRUE;
+ }
+ else
+ return FALSE;
}
void wxWindowPropertyInfo::GetPropertyNames(wxStringList& names)
{
- names.Add("name");
- names.Add("x");
- names.Add("y");
- names.Add("width");
- names.Add("height");
- if (!propertyWindow->IsKindOf(CLASSINFO(wxControl)))
- {
- names.Add("fontPoints");
- names.Add("fontFamily");
- names.Add("fontStyle");
- names.Add("fontWeight");
- names.Add("fontUnderlined");
- }
+ names.Add("id");
+ names.Add("name");
+ names.Add("x");
+ names.Add("y");
+ names.Add("width");
+ names.Add("height");
+ names.Add("border");
+ if (!m_propertyWindow->IsKindOf(CLASSINFO(wxControl)))
+ {
+ names.Add("fontPoints");
+ names.Add("fontFamily");
+ names.Add("fontStyle");
+ names.Add("fontWeight");
+ names.Add("fontUnderlined");
+ }
}
// Fill in the wxItemResource members to mirror the current window settings
bool wxWindowPropertyInfo::InstantiateResource(wxItemResource *resource)
{
- resource->SetType(propertyWindow->GetClassInfo()->GetClassName());
-
-// resource->SetStyle(propertyWindow->GetWindowStyleFlag());
- wxString str(propertyWindow->GetName());
- resource->SetName(WXSTRINGCAST str);
- int x, y, w, h;
- propertyWindow->GetSize(&w, &h);
-
- propertyWindow->GetPosition(&x, &y);
- resource->SetSize(x, y, w, h);
- return TRUE;
+ // resource->SetType(m_propertyWindow->GetClassInfo()->GetClassName());
+
+ // resource->SetStyle(m_propertyWindow->GetWindowStyleFlag());
+ wxString str(m_propertyWindow->GetName());
+ resource->SetName(str);
+
+#if 0 // Why did we comment this out? Possibly because of rounding errors
+ // that will build up as the conversion is repeatedly done.
+ // so only do the conversion when a resize happens.
+ int x, y, w, h;
+
+ if (m_propertyWindow->IsKindOf(CLASSINFO(wxPanel)))
+ m_propertyWindow->GetClientSize(&w, &h);
+ else
+ m_propertyWindow->GetSize(&w, &h);
+
+ m_propertyWindow->GetPosition(&x, &y);
+
+ // We need to convert to dialog units if this is not a dialog or panel, but
+ // the parent resource specifies dialog units.
+ if (m_propertyWindow->GetParent() && m_propertyWindow->IsKindOf(CLASSINFO(wxControl)))
+ {
+ wxItemResource* parentResource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow->GetParent());
+ if (parentResource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
+ {
+ wxPoint pt = m_propertyWindow->GetParent()->ConvertPixelsToDialog(wxPoint(x, y));
+ x = pt.x; y = pt.y;
+ wxSize sz = m_propertyWindow->GetParent()->ConvertPixelsToDialog(wxSize(w, h));
+ w = sz.x; h = sz.y;
+ }
+ }
+ else if (m_propertyWindow->IsKindOf(CLASSINFO(wxPanel)))
+ {
+ if (resource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
+ {
+ wxPoint pt = m_propertyWindow->ConvertPixelsToDialog(wxPoint(x, y));
+ x = pt.x; y = pt.y;
+ wxSize sz = m_propertyWindow->ConvertPixelsToDialog(wxSize(w, h));
+ w = sz.x; h = sz.y;
+ }
+ }
+
+ resource->SetSize(x, y, w, h);
+#endif
+
+ return TRUE;
}
+// Set the window style
+void wxWindowPropertyInfo::SetWindowStyle(wxWindow* win, long style, bool set)
+{
+ if (style == 0)
+ return;
+
+ if ((win->GetWindowStyleFlag() & style) == style)
+ {
+ if (!set)
+ {
+ win->SetWindowStyleFlag(win->GetWindowStyleFlag() - style);
+ }
+ }
+ else
+ {
+ if (set)
+ {
+ win->SetWindowStyleFlag(win->GetWindowStyleFlag() | style);
+ }
+ }
+}
/*
- * Controls
- */
+* Controls
+*/
wxProperty *wxItemPropertyInfo::GetProperty(wxString& name)
{
- wxControl *itemWindow = (wxControl *)propertyWindow;
- wxFont *font = itemWindow->GetFont();
-
- if (name == "fontPoints" || name == "fontFamily" || name == "fontStyle" || name == "fontWeight" ||
- name == "fontUnderlined")
- return GetFontProperty(name, font);
- else if (name == "label" && itemWindow->GetLabel())
- return new wxProperty("label", propertyWindow->GetLabel(), "string");
- else
- return wxWindowPropertyInfo::GetProperty(name);
+ wxControl *itemWindow = (wxControl *)m_propertyWindow;
+ wxFont *font = & itemWindow->GetFont();
+
+ if (name == "fontPoints" || name == "fontFamily" || name == "fontStyle" || name == "fontWeight" ||
+ name == "fontUnderlined")
+ return GetFontProperty(name, font);
+ else if (name == "label" && itemWindow->GetLabel())
+ return new wxProperty("label", m_propertyWindow->GetLabel(), "string");
+ else
+ return wxWindowPropertyInfo::GetProperty(name);
}
bool wxItemPropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- wxControl *itemWindow = (wxControl *)propertyWindow;
- wxFont *font = itemWindow->GetFont();
-
- if (font && (name == "fontPoints" || name == "fontFamily" || name == "fontStyle" || name == "fontWeight" || name == "fontUnderlined" ))
- {
- wxFont *newFont = SetFontProperty(name, property, font);
- if (newFont)
- itemWindow->SetLabelFont(newFont);
- return TRUE;
- }
- else if (name == "label")
- {
- itemWindow->SetLabel(property->GetValue().StringValue());
- return TRUE;
- }
- else
- return wxWindowPropertyInfo::SetProperty(name, property);
+ wxControl *itemWindow = (wxControl *)m_propertyWindow;
+#if 0
+ wxFont *font = & itemWindow->GetFont();
+
+ if (font && (name == "fontPoints" || name == "fontFamily" || name == "fontStyle" || name == "fontWeight" || name == "fontUnderlined" ))
+ {
+ wxFont *newFont = SetFontProperty(name, property, font);
+ if (newFont)
+ itemWindow->SetFont(* newFont);
+ return TRUE;
+ }
+ else
+#endif
+ if (name == "label")
+ {
+ itemWindow->SetLabel(property->GetValue().StringValue());
+ return TRUE;
+ }
+ else
+ return wxWindowPropertyInfo::SetProperty(name, property);
}
void wxItemPropertyInfo::GetPropertyNames(wxStringList& names)
{
- wxWindowPropertyInfo::GetPropertyNames(names);
-
- names.Add("fontPoints");
- names.Add("fontFamily");
- names.Add("fontStyle");
- names.Add("fontWeight");
- names.Add("fontUnderlined");
+ wxWindowPropertyInfo::GetPropertyNames(names);
+
+ names.Add("fontPoints");
+ names.Add("fontFamily");
+ names.Add("fontStyle");
+ names.Add("fontWeight");
+ names.Add("fontUnderlined");
}
bool wxItemPropertyInfo::InstantiateResource(wxItemResource *resource)
{
- wxWindowPropertyInfo::InstantiateResource(resource);
-
- wxControl *item = (wxControl *)propertyWindow;
- wxString str(item->GetLabel());
- resource->SetTitle(WXSTRINGCAST str);
- if (item->GetFont() && item->GetFont()->Ok())
- resource->SetFont(wxTheFontList->FindOrCreateFont(item->GetFont()->GetPointSize(),
- item->GetFont()->GetFamily(), item->GetFont()->GetStyle(), item->GetFont()->GetWeight(),
- item->GetFont()->GetUnderlined(), item->GetFont()->GetFaceName()));
- return TRUE;
+ wxWindowPropertyInfo::InstantiateResource(resource);
+
+ wxControl *item = (wxControl *)m_propertyWindow;
+ wxString str(item->GetLabel());
+ resource->SetTitle(str);
+
+ if (item->GetFont().Ok())
+ resource->SetFont(* wxTheFontList->FindOrCreateFont(item->GetFont().GetPointSize(),
+ item->GetFont().GetFamily(), item->GetFont().GetStyle(), item->GetFont().GetWeight(),
+ item->GetFont().GetUnderlined(), item->GetFont().GetFaceName()));
+ return TRUE;
}
/*
- * Button
- */
+* Button
+*/
wxProperty *wxButtonPropertyInfo::GetProperty(wxString& name)
{
- wxButton *button = (wxButton *)propertyWindow;
- return wxItemPropertyInfo::GetProperty(name);
+ return wxItemPropertyInfo::GetProperty(name);
}
bool wxButtonPropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- wxButton *button = (wxButton *)propertyWindow;
- return wxItemPropertyInfo::SetProperty(name, property);
+ return wxItemPropertyInfo::SetProperty(name, property);
}
void wxButtonPropertyInfo::GetPropertyNames(wxStringList& names)
{
- names.Add("label");
- wxItemPropertyInfo::GetPropertyNames(names);
+ wxItemPropertyInfo::GetPropertyNames(names);
+ names.Add("label");
}
bool wxButtonPropertyInfo::InstantiateResource(wxItemResource *resource)
{
- return wxItemPropertyInfo::InstantiateResource(resource);
+ return wxItemPropertyInfo::InstantiateResource(resource);
}
/*
- * wxBitmapButton
- */
+* wxBitmapButton
+*/
wxProperty *wxBitmapButtonPropertyInfo::GetProperty(wxString& name)
{
- wxBitmapButton *button = (wxBitmapButton *)propertyWindow;
- if (name == "label")
- {
- wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(button);
- wxString str("none.bmp");
-
- if (resource)
+ wxBitmapButton *button = (wxBitmapButton *)m_propertyWindow;
+ if (name == "bitmapFilename")
{
- char *filename = wxResourceManager::GetCurrentResourceManager()->FindBitmapFilenameForResource(resource);
- if (filename)
- str = filename;
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(button);
+ wxString str("none.bmp");
+
+ if (resource)
+ {
+ str = wxResourceManager::GetCurrentResourceManager()->FindBitmapFilenameForResource(resource);
+ }
+ return new wxProperty("bitmapFilename", str.GetData(), "string", new wxFilenameListValidator("Select a bitmap file", "*.bmp"));
}
- return new wxProperty("label", str.GetData(), "string", new wxFilenameListValidator("Select a bitmap file", "*.bmp"));
- }
- else
- return wxButtonPropertyInfo::GetProperty(name);
+ else
+ return wxButtonPropertyInfo::GetProperty(name);
}
bool wxBitmapButtonPropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- wxBitmapButton *button = (wxBitmapButton *)propertyWindow;
- if (name == "label")
- {
- char *s = property->GetValue().StringValue();
- if (s && wxFileExists(s))
+ wxBitmapButton *button = (wxBitmapButton *)m_propertyWindow;
+ if (name == "bitmapFilename")
{
- s = copystring(s);
- wxBitmap *bitmap = new wxBitmap(s, wxBITMAP_TYPE_BMP);
- if (!bitmap->Ok())
- {
- delete bitmap;
- delete[] s;
- return FALSE;
- }
- else
- {
- wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(button);
- if (resource)
+ char *s = property->GetValue().StringValue();
+ if (s && wxFileExists(s))
{
- wxString oldResource(resource->GetValue4());
- char *resName = wxResourceManager::GetCurrentResourceManager()->AddBitmapResource(s);
- resource->SetValue4(resName);
-
- if (!oldResource.IsNull())
- wxResourceManager::GetCurrentResourceManager()->PossiblyDeleteBitmapResource(WXSTRINGCAST oldResource);
+ wxString str(s);
+ wxBitmap *bitmap = new wxBitmap(str, wxBITMAP_TYPE_BMP);
+ if (!bitmap->Ok())
+ {
+ delete bitmap;
+ return FALSE;
+ }
+ else
+ {
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(button);
+ if (resource)
+ {
+ wxString oldResource(resource->GetValue4());
+ wxString resName = wxResourceManager::GetCurrentResourceManager()->AddBitmapResource(str);
+ resource->SetValue4(resName);
+
+ if (!oldResource.IsNull())
+ wxResourceManager::GetCurrentResourceManager()->PossiblyDeleteBitmapResource(oldResource);
+ }
+
+ button->SetLabel(* bitmap);
+ return TRUE;
+ }
}
-
- button->SetLabel(bitmap);
- delete[] s;
- return TRUE;
- }
+ return FALSE;
}
- return FALSE;
- }
- else
- return wxButtonPropertyInfo::SetProperty(name, property);
+ else
+ return wxButtonPropertyInfo::SetProperty(name, property);
}
void wxBitmapButtonPropertyInfo::GetPropertyNames(wxStringList& names)
{
-// names.Add("label");
- wxButtonPropertyInfo::GetPropertyNames(names);
+ wxButtonPropertyInfo::GetPropertyNames(names);
+ names.Delete("label");
+ names.Add("bitmapFilename");
}
bool wxBitmapButtonPropertyInfo::InstantiateResource(wxItemResource *resource)
{
- return wxItemPropertyInfo::InstantiateResource(resource);
+ return wxItemPropertyInfo::InstantiateResource(resource);
}
/*
- * wxStaticText
- */
+* wxStaticText
+*/
wxProperty *wxStaticTextPropertyInfo::GetProperty(wxString& name)
{
- wxStaticText *message = (wxStaticText *)propertyWindow;
- return wxItemPropertyInfo::GetProperty(name);
+ return wxItemPropertyInfo::GetProperty(name);
}
bool wxStaticTextPropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- wxStaticText *message = (wxStaticText *)propertyWindow;
- return wxItemPropertyInfo::SetProperty(name, property);
+ wxStaticText* itemWindow = (wxStaticText*) m_propertyWindow;
+ if (name == "label")
+ {
+ // Because setting a wxStaticText control's label may change the
+ // size, we must get the size and instantiate the resource immediately.
+ itemWindow->SetLabel(property->GetValue().StringValue());
+ int w, h;
+
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(itemWindow);
+
+ m_propertyWindow->GetSize(&w, &h);
+ // m_propertyWindow->GetPosition(&x, &y);
+
+ // We need to convert to dialog units if
+ // the parent resource specifies dialog units.
+ if (m_propertyWindow->GetParent())
+ {
+ wxItemResource* parentResource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow->GetParent());
+ if (parentResource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
+ {
+ // wxPoint pt = m_propertyWindow->GetParent()->ConvertPixelsToDialog(wxPoint(x, y));
+ // x = pt.x; y = pt.y;
+ wxSize sz = m_propertyWindow->GetParent()->ConvertPixelsToDialog(wxSize(w, h));
+ w = sz.x; h = sz.y;
+ }
+ }
+ resource->SetSize(resource->GetX(), resource->GetY(), w, h);
+ return TRUE;
+ }
+ else
+ return wxItemPropertyInfo::SetProperty(name, property);
}
void wxStaticTextPropertyInfo::GetPropertyNames(wxStringList& names)
{
- names.Add("label");
- wxItemPropertyInfo::GetPropertyNames(names);
+ wxItemPropertyInfo::GetPropertyNames(names);
+ names.Add("label");
}
bool wxStaticTextPropertyInfo::InstantiateResource(wxItemResource *resource)
{
- return wxItemPropertyInfo::InstantiateResource(resource);
+ return wxItemPropertyInfo::InstantiateResource(resource);
}
/*
- * wxStaticBitmap
- */
+* wxStaticBitmap
+*/
wxProperty *wxStaticBitmapPropertyInfo::GetProperty(wxString& name)
{
- wxStaticBitmap *message = (wxStaticBitmap *)propertyWindow;
- if (name == "label")
- {
- wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(message);
- wxString str("none.bmp");
-
- if (resource)
+ wxStaticBitmap *message = (wxStaticBitmap *)m_propertyWindow;
+ if (name == "bitmapFilename")
{
- char *filename = wxResourceManager::GetCurrentResourceManager()->FindBitmapFilenameForResource(resource);
- if (filename)
- str = filename;
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(message);
+ wxString str("none.bmp");
+
+ if (resource)
+ {
+ str = wxResourceManager::GetCurrentResourceManager()->FindBitmapFilenameForResource(resource);
+ }
+ return new wxProperty("bitmapFilename", str.GetData(), "string", new wxFilenameListValidator("Select a bitmap file", "*.bmp"));
}
- return new wxProperty("label", str.GetData(), "string", new wxFilenameListValidator("Select a bitmap file", "*.bmp"));
- }
- else
- return wxItemPropertyInfo::GetProperty(name);
+ else
+ return wxItemPropertyInfo::GetProperty(name);
}
bool wxStaticBitmapPropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- wxStaticBitmap *message = (wxStaticBitmap *)propertyWindow;
- if (name == "label")
- {
- char *s = property->GetValue().StringValue();
- if (s && wxFileExists(s))
+ wxStaticBitmap *message = (wxStaticBitmap *)m_propertyWindow;
+ if (name == "bitmapFilename")
{
- s = copystring(s);
-
- wxBitmap *bitmap = new wxBitmap(s, wxBITMAP_TYPE_BMP);
- if (!bitmap->Ok())
- {
- delete bitmap;
- delete[] s;
- return FALSE;
- }
- else
- {
- wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(message);
- if (resource)
+ char *s = property->GetValue().StringValue();
+ if (s && wxFileExists(s))
{
- wxString oldResource(resource->GetValue4());
- char *resName = wxResourceManager::GetCurrentResourceManager()->AddBitmapResource(s);
- resource->SetValue4(resName);
-
- if (!oldResource.IsNull())
- wxResourceManager::GetCurrentResourceManager()->PossiblyDeleteBitmapResource(WXSTRINGCAST oldResource);
+ wxString str(s);
+
+ wxBitmap *bitmap = new wxBitmap(str, wxBITMAP_TYPE_BMP);
+ if (!bitmap->Ok())
+ {
+ delete bitmap;
+ return FALSE;
+ }
+ else
+ {
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(message);
+ if (resource)
+ {
+ wxString oldResource(resource->GetValue4());
+ wxString resName = wxResourceManager::GetCurrentResourceManager()->AddBitmapResource(str);
+ resource->SetValue4(resName);
+
+ if (!oldResource.IsNull())
+ wxResourceManager::GetCurrentResourceManager()->PossiblyDeleteBitmapResource(oldResource);
+ }
+
+ message->SetBitmap(* bitmap);
+ return TRUE;
+ }
}
-
- message->SetBitmap(bitmap);
- delete[] s;
- return TRUE;
- }
+ return FALSE;
}
- return FALSE;
- }
- else
- return wxItemPropertyInfo::SetProperty(name, property);
+ else
+ return wxItemPropertyInfo::SetProperty(name, property);
}
void wxStaticBitmapPropertyInfo::GetPropertyNames(wxStringList& names)
{
- names.Add("label");
- wxItemPropertyInfo::GetPropertyNames(names);
+ wxItemPropertyInfo::GetPropertyNames(names);
+ names.Add("bitmapFilename");
}
bool wxStaticBitmapPropertyInfo::InstantiateResource(wxItemResource *resource)
{
- return wxItemPropertyInfo::InstantiateResource(resource);
+ return wxItemPropertyInfo::InstantiateResource(resource);
}
/*
- * Text item
- */
+* Text item
+*/
wxProperty *wxTextPropertyInfo::GetProperty(wxString& name)
{
- wxTextCtrl *text = (wxTextCtrl *)propertyWindow;
- if (name == "value")
- return new wxProperty("value", text->GetValue(), "string");
- else if (name == "password")
- {
- bool isPassword = ((text->GetWindowStyleFlag() & wxTE_PASSWORD) == wxTE_PASSWORD);
- return new wxProperty("password", isPassword, "bool");
- }
- else if (name == "readonly")
- {
- bool isReadOnly = ((text->GetWindowStyleFlag() & wxTE_READONLY) == wxTE_READONLY);
- return new wxProperty("readonly", isReadOnly, "bool");
- }
- else
- return wxItemPropertyInfo::GetProperty(name);
+ wxTextCtrl *text = (wxTextCtrl *)m_propertyWindow;
+ if (name == "value")
+ return new wxProperty("value", text->GetValue(), "string");
+ else if (name == "password")
+ {
+ bool isPassword = ((text->GetWindowStyleFlag() & wxTE_PASSWORD) == wxTE_PASSWORD);
+ return new wxProperty("password", isPassword, "bool");
+ }
+ else if (name == "readonly")
+ {
+ bool isReadOnly = ((text->GetWindowStyleFlag() & wxTE_READONLY) == wxTE_READONLY);
+ return new wxProperty("readonly", isReadOnly, "bool");
+ }
+ else
+ return wxItemPropertyInfo::GetProperty(name);
}
bool wxTextPropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- wxTextCtrl *text = (wxTextCtrl *)propertyWindow;
- if (name == "value")
- {
- text->SetValue(property->GetValue().StringValue());
- return TRUE;
- }
- else if (name == "password")
- {
- long flag = text->GetWindowStyleFlag();
- if (property->GetValue().BoolValue())
+ wxTextCtrl *text = (wxTextCtrl *)m_propertyWindow;
+ if (name == "value")
{
- if ((flag & wxTE_PASSWORD) != wxTE_PASSWORD)
- flag |= wxTE_PASSWORD;
+ text->SetValue(property->GetValue().StringValue());
+ return TRUE;
}
- else
+ else if (name == "password")
{
- if ((flag & wxTE_PASSWORD) == wxTE_PASSWORD)
- flag -= wxTE_PASSWORD;
+ long flag = text->GetWindowStyleFlag();
+ if (property->GetValue().BoolValue())
+ {
+ if ((flag & wxTE_PASSWORD) != wxTE_PASSWORD)
+ flag |= wxTE_PASSWORD;
+ }
+ else
+ {
+ if ((flag & wxTE_PASSWORD) == wxTE_PASSWORD)
+ flag -= wxTE_PASSWORD;
+ }
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(text);
+ resource->SetStyle(flag);
+
+ m_propertyWindow = wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(text, this);
+ return TRUE;
}
- wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(text);
- resource->SetStyle(flag);
-
- wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(text, this);
- return TRUE;
- }
- else if (name == "readonly")
- {
- long flag = text->GetWindowStyleFlag();
- if (property->GetValue().BoolValue())
+ else if (name == "readonly")
{
- if ((flag & wxTE_READONLY) != wxTE_READONLY)
- flag |= wxTE_READONLY;
+ long flag = text->GetWindowStyleFlag();
+ if (property->GetValue().BoolValue())
+ {
+ if ((flag & wxTE_READONLY) != wxTE_READONLY)
+ flag |= wxTE_READONLY;
+ }
+ else
+ {
+ if ((flag & wxTE_READONLY) == wxTE_READONLY)
+ flag -= wxTE_READONLY;
+ }
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(text);
+ resource->SetStyle(flag);
+
+ m_propertyWindow = wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(text, this);
+ return TRUE;
}
else
- {
- if ((flag & wxTE_READONLY) == wxTE_READONLY)
- flag -= wxTE_READONLY;
- }
- wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(text);
- resource->SetStyle(flag);
-
- wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(text, this);
- return TRUE;
- }
- else
- return wxItemPropertyInfo::SetProperty(name, property);
+ return wxItemPropertyInfo::SetProperty(name, property);
}
void wxTextPropertyInfo::GetPropertyNames(wxStringList& names)
{
- names.Add("value");
- names.Add("readonly");
- names.Add("password");
- wxItemPropertyInfo::GetPropertyNames(names);
+ wxItemPropertyInfo::GetPropertyNames(names);
+ names.Add("value");
+ names.Add("readonly");
+ names.Add("password");
}
bool wxTextPropertyInfo::InstantiateResource(wxItemResource *resource)
{
- wxTextCtrl *text = (wxTextCtrl *)propertyWindow;
- wxString str(text->GetValue());
- resource->SetValue4(WXSTRINGCAST str);
+ wxTextCtrl *text = (wxTextCtrl *)m_propertyWindow;
+ wxString str(text->GetValue());
+ resource->SetValue4(str);
- return wxItemPropertyInfo::InstantiateResource(resource);
+ return wxItemPropertyInfo::InstantiateResource(resource);
}
/*
- * Listbox item
- */
+* Listbox item
+*/
wxProperty *wxListBoxPropertyInfo::GetProperty(wxString& name)
{
- wxListBox *listBox = (wxListBox *)propertyWindow;
- if (name == "values")
- {
- wxStringList *stringList = new wxStringList;
- int i;
- for (i = 0; i < listBox->Number(); i++)
- stringList->Add(listBox->GetString(i));
-
- return new wxProperty(name, stringList, "stringlist");
- }
- else if (name == "multiple")
- {
- char *pos = NULL;
- wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(listBox);
- if (!resource)
- return NULL;
-
- char *mult = "wxSINGLE";
-
- switch (resource->GetValue1())
- {
- case wxLB_MULTIPLE:
- mult = "wxLB_MULTIPLE";
- break;
- case wxLB_EXTENDED:
- mult = "wxLB_EXTENDED";
- break;
- default:
- case wxLB_SINGLE:
- mult = "wxLB_SINGLE";
- break;
- }
- return new wxProperty("multiple", mult, "string",
- new wxStringListValidator(new wxStringList("wxLB_SINGLE", "wxLB_MULTIPLE", "wxLB_EXTENDED",
- NULL)));
- }
- else
- return wxItemPropertyInfo::GetProperty(name);
+ wxListBox *listBox = (wxListBox *)m_propertyWindow;
+ if (name == "values")
+ {
+ wxStringList *stringList = new wxStringList;
+ int i;
+ for (i = 0; i < listBox->GetCount(); i++)
+ stringList->Add(listBox->GetString(i));
+
+ return new wxProperty(name, stringList, "stringlist");
+ }
+ else if (name == "multiple")
+ {
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(listBox);
+ if (!resource)
+ return NULL;
+
+ char *mult = "wxLB_SINGLE";
+
+ if ((listBox->GetWindowStyleFlag() & wxLB_MULTIPLE) != 0)
+ mult = "wxLB_MULTIPLE";
+ else if ((listBox->GetWindowStyleFlag() & wxLB_EXTENDED) != 0)
+ mult = "wxLB_EXTENDED";
+ else
+ mult = "wxLB_SINGLE";
+
+ return new wxProperty("multiple", mult, "string",
+ new wxStringListValidator(new wxStringList("wxLB_SINGLE", "wxLB_MULTIPLE", "wxLB_EXTENDED",
+ NULL)));
+ }
+ else
+ return wxItemPropertyInfo::GetProperty(name);
}
bool wxListBoxPropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- wxListBox *listBox = (wxListBox *)propertyWindow;
- if (name == "values")
- {
- listBox->Clear();
- wxPropertyValue *expr = property->GetValue().GetFirst();
- while (expr)
+ wxListBox *listBox = (wxListBox *)m_propertyWindow;
+ if (name == "values")
{
- char *s = expr->StringValue();
- if (s)
- listBox->Append(s);
- expr = expr->GetNext();
+ listBox->Clear();
+ wxPropertyValue *expr = property->GetValue().GetFirst();
+ while (expr)
+ {
+ char *s = expr->StringValue();
+ if (s)
+ listBox->Append(s);
+ expr = expr->GetNext();
+ }
+ return TRUE;
+ }
+ else if (name == "multiple")
+ {
+ SetWindowStyle(m_propertyWindow, wxLB_SINGLE, FALSE);
+ SetWindowStyle(m_propertyWindow, wxLB_MULTIPLE, FALSE);
+ SetWindowStyle(m_propertyWindow, wxLB_EXTENDED, FALSE);
+
+ wxString str(property->GetValue().StringValue());
+ if (str == "wxLB_MULTIPLE")
+ SetWindowStyle(m_propertyWindow, wxLB_MULTIPLE, TRUE);
+ else if (str == "wxLB_EXTENDED")
+ SetWindowStyle(m_propertyWindow, wxLB_EXTENDED, TRUE);
+ else
+ SetWindowStyle(m_propertyWindow, wxLB_SINGLE, TRUE);
+
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(listBox);
+ if (resource)
+ resource->SetStyle(m_propertyWindow->GetWindowStyleFlag());
+ m_propertyWindow = wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(listBox, this);
+ return TRUE;
}
- return TRUE;
- }
- else if (name == "multiple")
- {
- int mult = wxLB_SINGLE;
- wxString str(property->GetValue().StringValue());
- if (str == "wxLB_MULTIPLE")
- mult = wxLB_MULTIPLE;
- else if (str == "wxLB_EXTENDED")
- mult = wxLB_EXTENDED;
else
- mult = wxLB_SINGLE;
- wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(listBox);
- if (resource)
- resource->SetValue1(mult);
- wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(listBox, this);
- return TRUE;
- }
- else
- return wxItemPropertyInfo::SetProperty(name, property);
+ return wxItemPropertyInfo::SetProperty(name, property);
}
void wxListBoxPropertyInfo::GetPropertyNames(wxStringList& names)
{
- names.Add("values");
- names.Add("multiple");
- wxItemPropertyInfo::GetPropertyNames(names);
+ wxItemPropertyInfo::GetPropertyNames(names);
+ names.Add("values");
+ names.Add("multiple");
}
bool wxListBoxPropertyInfo::InstantiateResource(wxItemResource *resource)
{
- wxListBox *lbox = (wxListBox *)propertyWindow;
- // This will be set for the wxItemResource on reading or in SetProperty
-// resource->SetValue1(lbox->GetSelectionMode());
- int i;
- if (lbox->Number() == 0)
- resource->SetStringValues(NULL);
- else
- {
- wxStringList *slist = new wxStringList;
-
- for (i = 0; i < lbox->Number(); i++)
- slist->Add(lbox->GetString(i));
-
- resource->SetStringValues(slist);
- }
- return wxItemPropertyInfo::InstantiateResource(resource);
+ wxListBox *lbox = (wxListBox *)m_propertyWindow;
+ // This will be set for the wxItemResource on reading or in SetProperty
+ // resource->SetValue1(lbox->GetSelectionMode());
+ int i;
+ if (lbox->GetCount() == 0)
+ resource->SetStringValues(NULL);
+ else
+ {
+ wxStringList slist;
+
+ for (i = 0; i < lbox->GetCount(); i++)
+ slist.Add(lbox->GetString(i));
+
+ resource->SetStringValues(slist);
+ }
+ return wxItemPropertyInfo::InstantiateResource(resource);
}
/*
- * Choice item
- */
+* Choice item
+*/
wxProperty *wxChoicePropertyInfo::GetProperty(wxString& name)
{
- wxChoice *choice = (wxChoice *)propertyWindow;
- if (name == "values")
- {
- wxStringList *stringList = new wxStringList;
- int i;
- for (i = 0; i < choice->Number(); i++)
- stringList->Add(choice->GetString(i));
-
- return new wxProperty(name, stringList, "stringlist");
- }
- else
- return wxItemPropertyInfo::GetProperty(name);
+ wxChoice *choice = (wxChoice *)m_propertyWindow;
+ if (name == "values")
+ {
+ wxStringList* stringList = new wxStringList;
+ int i;
+ for (i = 0; i < choice->GetCount(); i++)
+ stringList->Add(choice->GetString(i));
+
+ return new wxProperty(name, stringList, "stringlist");
+ }
+ else
+ return wxItemPropertyInfo::GetProperty(name);
}
bool wxChoicePropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- wxChoice *choice = (wxChoice *)propertyWindow;
- if (name == "values")
- {
- choice->Clear();
- wxPropertyValue *expr = property->GetValue().GetFirst();
- while (expr)
+ wxChoice *choice = (wxChoice *)m_propertyWindow;
+ if (name == "values")
{
- char *s = expr->StringValue();
- if (s)
- choice->Append(s);
- expr = expr->GetNext();
+ choice->Clear();
+ wxPropertyValue *expr = property->GetValue().GetFirst();
+ while (expr)
+ {
+ char *s = expr->StringValue();
+ if (s)
+ choice->Append(s);
+ expr = expr->GetNext();
+ }
+ if (choice->GetCount() > 0)
+ choice->SetSelection(0);
+ return TRUE;
}
- if (choice->Number() > 0)
- choice->SetSelection(0);
- return TRUE;
- }
- else
- return wxItemPropertyInfo::SetProperty(name, property);
+ else
+ return wxItemPropertyInfo::SetProperty(name, property);
}
void wxChoicePropertyInfo::GetPropertyNames(wxStringList& names)
{
- names.Add("values");
- wxItemPropertyInfo::GetPropertyNames(names);
+ wxItemPropertyInfo::GetPropertyNames(names);
+ names.Add("values");
}
bool wxChoicePropertyInfo::InstantiateResource(wxItemResource *resource)
{
- wxChoice *choice = (wxChoice *)propertyWindow;
- int i;
- if (choice->Number() == 0)
- resource->SetStringValues(NULL);
- else
- {
- wxStringList *slist = new wxStringList;
-
- for (i = 0; i < choice->Number(); i++)
- slist->Add(choice->GetString(i));
-
- resource->SetStringValues(slist);
- }
- return wxItemPropertyInfo::InstantiateResource(resource);
+ wxChoice *choice = (wxChoice *)m_propertyWindow;
+ int i;
+ if (choice->GetCount() == 0)
+ resource->SetStringValues(NULL);
+ else
+ {
+ wxStringList slist;
+
+ for (i = 0; i < choice->GetCount(); i++)
+ slist.Add(choice->GetString(i));
+
+ resource->SetStringValues(slist);
+ }
+ return wxItemPropertyInfo::InstantiateResource(resource);
}
/*
- * Radiobox item
- */
+* Choice item
+*/
-wxProperty *wxRadioBoxPropertyInfo::GetProperty(wxString& name)
+wxProperty *wxComboBoxPropertyInfo::GetProperty(wxString& name)
{
- wxRadioBox *radioBox = (wxRadioBox *)propertyWindow;
- if (name == "numberRowsOrCols")
- {
- return new wxProperty("numberRowsOrCols", (long)radioBox->GetNumberOfRowsOrCols(), "integer");
- }
- if (name == "orientation")
- {
- char *pos = NULL;
- if (propertyWindow->GetWindowStyleFlag() & wxHORIZONTAL)
- pos = "wxHORIZONTAL";
+ wxComboBox *choice = (wxComboBox *)m_propertyWindow;
+ if (name == "values")
+ {
+ wxStringList *stringList = new wxStringList;
+ int i;
+ for (i = 0; i < choice->GetCount(); i++)
+ stringList->Add(choice->GetString(i));
+
+ return new wxProperty(name, stringList, "stringlist");
+ }
+ else if (name == "sort")
+ {
+ bool sort = ((m_propertyWindow->GetWindowStyleFlag() & wxCB_SORT) == wxCB_SORT);
+ return new wxProperty(name, sort, "bool");
+ }
+ else if (name == "style")
+ {
+ wxString styleStr("dropdown");
+ if (m_propertyWindow->GetWindowStyleFlag() & wxCB_SIMPLE)
+ styleStr = "simple";
+ else if (m_propertyWindow->GetWindowStyleFlag() & wxCB_READONLY)
+ styleStr = "readonly";
+ else
+ styleStr = "dropdown";
+
+ return new wxProperty(name, styleStr, "string",
+ new wxStringListValidator(new wxStringList("simple", "dropdown", "readonly",
+ NULL)));
+ }
else
- pos = "wxVERTICAL";
-
- return new wxProperty("orientation", pos, "string",
- new wxStringListValidator(new wxStringList("wxHORIZONTAL", "wxVERTICAL",
- NULL)));
- }
- else if (name == "values")
- {
- wxStringList *stringList = new wxStringList;
- int i;
- for (i = 0; i < radioBox->Number(); i++)
- stringList->Add(radioBox->GetString(i));
-
- return new wxProperty(name, stringList, "stringlist");
- }
- return wxItemPropertyInfo::GetProperty(name);
+ return wxItemPropertyInfo::GetProperty(name);
}
-bool wxRadioBoxPropertyInfo::SetProperty(wxString& name, wxProperty *property)
+bool wxComboBoxPropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- wxRadioBox *radioBox = (wxRadioBox *)propertyWindow;
- if (name == "numberRowsOrCols")
- {
- radioBox->SetNumberOfRowsOrCols((int)property->GetValue().IntegerValue());
- wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(radioBox, this);
- return TRUE;
- }
- else if (name == "orientation")
- {
- long windowStyle = radioBox->GetWindowStyleFlag();
- wxString val(property->GetValue().StringValue());
- if (val == "wxHORIZONTAL")
+ wxComboBox *choice = (wxComboBox *)m_propertyWindow;
+ if (name == "values")
{
- if (windowStyle & wxVERTICAL)
- windowStyle -= wxVERTICAL;
- windowStyle |= wxHORIZONTAL;
- }
- else
- {
- if (windowStyle & wxHORIZONTAL)
- windowStyle -= wxHORIZONTAL;
- windowStyle |= wxVERTICAL;
+ choice->Clear();
+ wxPropertyValue *expr = property->GetValue().GetFirst();
+ while (expr)
+ {
+ char *s = expr->StringValue();
+ if (s)
+ choice->Append(s);
+ expr = expr->GetNext();
+ }
+ if (choice->GetCount() > 0)
+ choice->SetSelection(0);
+ return TRUE;
}
- radioBox->SetWindowStyleFlag(windowStyle);
-
- wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(radioBox, this);
- return TRUE;
- }
- else if (name == "values")
- {
- // Set property into *resource*, not wxRadioBox, and then recreate
- // the wxRadioBox. This is because we can't dynamically set the strings
- // of a wxRadioBox.
- wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(propertyWindow);
- if (!resource)
- return FALSE;
-
- wxStringList *stringList = resource->GetStringValues();
- if (!stringList)
+ else if (name == "sort")
{
- stringList = new wxStringList;
- resource->SetStringValues(stringList);
+ SetWindowStyle(m_propertyWindow, wxCB_SORT, property->GetValue().BoolValue());
+
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+ resource->SetStyle(m_propertyWindow->GetWindowStyleFlag());
+
+ m_propertyWindow = wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(m_propertyWindow, this);
+ return TRUE;
}
- stringList->Clear();
-
- wxPropertyValue *expr = property->GetValue().GetFirst();
- while (expr)
+ else if (name == "style")
{
- char *s = expr->StringValue();
- if (s)
- stringList->Add(s);
- expr = expr->GetNext();
+ SetWindowStyle(m_propertyWindow, wxCB_SIMPLE, FALSE);
+ SetWindowStyle(m_propertyWindow, wxCB_DROPDOWN, FALSE);
+ SetWindowStyle(m_propertyWindow, wxCB_READONLY, FALSE);
+
+ wxString styleStr(property->GetValue().StringValue());
+ if (styleStr == "simple")
+ SetWindowStyle(m_propertyWindow, wxCB_SIMPLE, TRUE);
+ else if (styleStr == "dropdown")
+ SetWindowStyle(m_propertyWindow, wxCB_DROPDOWN, TRUE);
+ else if (styleStr == "readonly")
+ SetWindowStyle(m_propertyWindow, wxCB_READONLY, TRUE);
+
+ // Necesary?
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+ resource->SetStyle(m_propertyWindow->GetWindowStyleFlag());
+
+ m_propertyWindow = wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(m_propertyWindow, this);
+
+ return TRUE;
}
- wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(radioBox, this);
- return TRUE;
- }
- return wxItemPropertyInfo::SetProperty(name, property);
+ else
+ return wxItemPropertyInfo::SetProperty(name, property);
}
-void wxRadioBoxPropertyInfo::GetPropertyNames(wxStringList& names)
+void wxComboBoxPropertyInfo::GetPropertyNames(wxStringList& names)
{
- names.Add("label");
- names.Add("values");
- names.Add("orientation");
- names.Add("numberRowsOrCols");
- wxItemPropertyInfo::GetPropertyNames(names);
+ wxItemPropertyInfo::GetPropertyNames(names);
+ names.Add("values");
+ names.Add("style");
+ names.Add("sort");
}
-bool wxRadioBoxPropertyInfo::InstantiateResource(wxItemResource *resource)
+bool wxComboBoxPropertyInfo::InstantiateResource(wxItemResource *resource)
{
- wxRadioBox *rbox = (wxRadioBox *)propertyWindow;
- // Take strings from resource instead
-/*
- int i;
- if (rbox->Number() == 0)
- resource->SetStringValues(NULL);
- else
- {
- wxStringList *slist = new wxStringList;
-
- for (i = 0; i < rbox->Number(); i++)
- slist->Add(rbox->GetString(i));
-
- resource->SetStringValues(slist);
- }
-*/
- resource->SetValue1(rbox->GetNumberOfRowsOrCols());
- return wxItemPropertyInfo::InstantiateResource(resource);
+ wxComboBox *choice = (wxComboBox *)m_propertyWindow;
+ int i;
+ if (choice->GetCount() == 0)
+ resource->SetStringValues(NULL);
+ else
+ {
+ wxStringList slist;
+
+ for (i = 0; i < choice->GetCount(); i++)
+ slist.Add(choice->GetString(i));
+
+ resource->SetStringValues(slist);
+ }
+ return wxItemPropertyInfo::InstantiateResource(resource);
}
/*
- * Groupbox item
- */
+* Radiobox item
+*/
-wxProperty *wxGroupBoxPropertyInfo::GetProperty(wxString& name)
+wxProperty *wxRadioBoxPropertyInfo::GetProperty(wxString& name)
{
- wxStaticBox *groupBox = (wxStaticBox *)propertyWindow;
- return wxItemPropertyInfo::GetProperty(name);
+ wxRadioBox *radioBox = (wxRadioBox *)m_propertyWindow;
+ if (name == "numberRowsOrCols")
+ {
+ // FIXME: Set/GetNumberOfRowsOrCols only implemented on Motif, MSW and Mac
+#if defined(__WXMSW__) || defined(__WXMOTIF__) || defined(__WXMAC__)
+ return new wxProperty("numberRowsOrCols", (long)radioBox->GetNumberOfRowsOrCols(), "integer");
+#else
+ return new wxProperty("numberRowsOrCols", (long)1, "integer");
+#endif
+ }
+ if (name == "orientation")
+ {
+ wxString orient;
+ if (m_propertyWindow->GetWindowStyleFlag() & wxRA_SPECIFY_COLS)
+ orient = "wxRA_SPECIFY_COLS";
+ else
+ orient = "wxRA_SPECIFY_ROWS";
+
+ return new wxProperty("orientation", orient, "string",
+ new wxStringListValidator(new wxStringList("wxRA_SPECIFY_COLS", "wxRA_SPECIFY_ROWS",
+ NULL)));
+ }
+ else if (name == "values")
+ {
+ wxStringList *stringList = new wxStringList;
+ int i;
+ for (i = 0; i < radioBox->GetCount(); i++)
+ stringList->Add(radioBox->GetString(i));
+
+ return new wxProperty(name, stringList, "stringlist");
+ }
+ return wxItemPropertyInfo::GetProperty(name);
}
-bool wxGroupBoxPropertyInfo::SetProperty(wxString& name, wxProperty *property)
+bool wxRadioBoxPropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- return wxItemPropertyInfo::SetProperty(name, property);
-}
-
-void wxGroupBoxPropertyInfo::GetPropertyNames(wxStringList& names)
-{
- names.Add("label");
- wxItemPropertyInfo::GetPropertyNames(names);
-}
-
+ wxRadioBox *radioBox = (wxRadioBox *)m_propertyWindow;
+ if (name == "numberRowsOrCols")
+ {
+ // FIXME: Set/GetNumberOfRowsOrCols only implemented on Motif, MSW and Mac
+#if defined(__WXMSW__) || defined(__WXMOTIF__) || defined(__WXMAC__)
+ wxResourceManager::GetCurrentResourceManager()->DeselectItemIfNecessary(radioBox);
+
+ radioBox->SetNumberOfRowsOrCols((int)property->GetValue().IntegerValue());
+ m_propertyWindow = wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(radioBox, this);
+#endif
+ return TRUE;
+ }
+ else if (name == "orientation")
+ {
+ long windowStyle = radioBox->GetWindowStyleFlag();
+ wxString val(property->GetValue().StringValue());
+ if (val == "wxRA_SPECIFY_COLS")
+ {
+ if (windowStyle & wxRA_SPECIFY_ROWS)
+ windowStyle -= wxRA_SPECIFY_ROWS;
+ windowStyle |= wxRA_SPECIFY_COLS;
+ }
+ else
+ {
+ if (windowStyle & wxRA_SPECIFY_COLS)
+ windowStyle -= wxRA_SPECIFY_COLS;
+ windowStyle |= wxRA_SPECIFY_ROWS;
+ }
+ wxResourceManager::GetCurrentResourceManager()->DeselectItemIfNecessary(radioBox);
+
+ radioBox->SetWindowStyleFlag(windowStyle);
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(radioBox);
+ resource->SetStyle(windowStyle);
+ resource->SetSize(resource->GetX(), resource->GetY(), -1, -1); // Let it calculate it's own size
+
+ m_propertyWindow = wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(radioBox, this, FALSE);
+ return TRUE;
+ }
+ else if (name == "values")
+ {
+ // Set property into *resource*, not wxRadioBox, and then recreate
+ // the wxRadioBox. This is because we can't dynamically set the strings
+ // of a wxRadioBox.
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+ if (!resource)
+ return FALSE;
+
+ wxStringList stringList;
+ wxPropertyValue *expr = property->GetValue().GetFirst();
+ while (expr)
+ {
+ char *s = expr->StringValue();
+ if (s)
+ stringList.Add(s);
+ expr = expr->GetNext();
+ }
+ resource->SetStringValues(stringList);
+ resource->SetSize(resource->GetX(), resource->GetY(), -1, -1); // Let it calculate it's own size
+ m_propertyWindow = wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(radioBox, this, FALSE);
+ return TRUE;
+ }
+ else if (name == "fontPoints" || name == "fontFamily" || name == "fontStyle" || name == "fontWeight" || name == "fontUnderlined" )
+ {
+ wxFont *font = & m_propertyWindow->GetFont();
+ if (!font)
+ return FALSE;
+ wxFont *newFont = SetFontProperty(name, property, font);
+ if (newFont)
+ {
+ wxItemResource* resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+ if (resource)
+ {
+ resource->SetFont(* newFont);
+ }
+
+ wxResourceManager::GetCurrentResourceManager()->DeselectItemIfNecessary(radioBox);
+
+ radioBox->SetFont(* newFont);
+ radioBox->SetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT);
+ return TRUE;
+ }
+ }
+
+ return wxItemPropertyInfo::SetProperty(name, property);
+}
+
+void wxRadioBoxPropertyInfo::GetPropertyNames(wxStringList& names)
+{
+ wxItemPropertyInfo::GetPropertyNames(names);
+ names.Add("label");
+ names.Add("values");
+ names.Add("orientation");
+ names.Add("numberRowsOrCols");
+}
+
+bool wxRadioBoxPropertyInfo::InstantiateResource(wxItemResource *resource)
+{
+ wxRadioBox *rbox = (wxRadioBox *)m_propertyWindow;
+ // Take strings from resource instead
+ /*
+ int i;
+ if (rbox->GetCount() == 0)
+ resource->SetStringValues(NULL);
+ else
+ {
+ wxStringList *slist = new wxStringList;
+
+ for (i = 0; i < rbox->GetCount(); i++)
+ slist->Add(rbox->GetString(i));
+
+ resource->SetStringValues(slist);
+ }
+ */
+ // FIXME: Set/GetNumberOfRowsOrCols only implemented on Motif, MSW and Mac
+#if defined(__WXMSW__) || defined(__WXMOTIF__) || defined(__WXMAC__)
+ resource->SetValue1(rbox->GetNumberOfRowsOrCols());
+#else
+ resource->SetValue1(1);
+#endif
+ return wxItemPropertyInfo::InstantiateResource(resource);
+}
+
+/*
+* Groupbox item
+*/
+
+wxProperty *wxGroupBoxPropertyInfo::GetProperty(wxString& name)
+{
+ return wxItemPropertyInfo::GetProperty(name);
+}
+
+bool wxGroupBoxPropertyInfo::SetProperty(wxString& name, wxProperty *property)
+{
+ return wxItemPropertyInfo::SetProperty(name, property);
+}
+
+void wxGroupBoxPropertyInfo::GetPropertyNames(wxStringList& names)
+{
+ wxItemPropertyInfo::GetPropertyNames(names);
+ names.Add("label");
+}
+
bool wxGroupBoxPropertyInfo::InstantiateResource(wxItemResource *resource)
{
- wxStaticBox *gbox = (wxStaticBox *)propertyWindow;
- return wxItemPropertyInfo::InstantiateResource(resource);
+ return wxItemPropertyInfo::InstantiateResource(resource);
}
/*
- * Checkbox item
- */
+* Checkbox item
+*/
wxProperty *wxCheckBoxPropertyInfo::GetProperty(wxString& name)
{
- wxCheckBox *checkBox = (wxCheckBox *)propertyWindow;
- if (name == "value")
- return new wxProperty("value", checkBox->GetValue(), "bool");
- else
- return wxItemPropertyInfo::GetProperty(name);
+ wxCheckBox *checkBox = (wxCheckBox *)m_propertyWindow;
+ if (name == "value")
+ return new wxProperty("value", checkBox->GetValue(), "bool");
+ else
+ return wxItemPropertyInfo::GetProperty(name);
}
bool wxCheckBoxPropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- wxCheckBox *checkBox = (wxCheckBox *)propertyWindow;
- if (name == "value")
- {
- checkBox->SetValue((bool)property->GetValue().BoolValue());
- return TRUE;
- }
- else
- return wxItemPropertyInfo::SetProperty(name, property);
+ wxCheckBox *checkBox = (wxCheckBox *)m_propertyWindow;
+ if (name == "value")
+ {
+ checkBox->SetValue((bool)property->GetValue().BoolValue());
+ return TRUE;
+ }
+ else
+ return wxItemPropertyInfo::SetProperty(name, property);
}
void wxCheckBoxPropertyInfo::GetPropertyNames(wxStringList& names)
{
- names.Add("label");
- names.Add("value");
- wxItemPropertyInfo::GetPropertyNames(names);
+ wxItemPropertyInfo::GetPropertyNames(names);
+ names.Add("label");
+ names.Add("value");
}
bool wxCheckBoxPropertyInfo::InstantiateResource(wxItemResource *resource)
{
- wxCheckBox *cbox = (wxCheckBox *)propertyWindow;
- resource->SetValue1(cbox->GetValue());
- return wxItemPropertyInfo::InstantiateResource(resource);
+ wxCheckBox *cbox = (wxCheckBox *)m_propertyWindow;
+ resource->SetValue1(cbox->GetValue());
+ return wxItemPropertyInfo::InstantiateResource(resource);
}
/*
- * Slider item
- */
+* Radiobutton item
+*/
-wxProperty *wxSliderPropertyInfo::GetProperty(wxString& name)
+wxProperty *wxRadioButtonPropertyInfo::GetProperty(wxString& name)
{
- wxSlider *slider = (wxSlider *)propertyWindow;
- if (name == "value")
- return new wxProperty("value", (long)slider->GetValue(), "integer");
- else if (name == "orientation")
- {
- char *pos = NULL;
- if (propertyWindow->GetWindowStyleFlag() & wxHORIZONTAL)
- pos = "wxHORIZONTAL";
+ wxRadioButton *checkBox = (wxRadioButton *)m_propertyWindow;
+ if (name == "value")
+ return new wxProperty("value", checkBox->GetValue(), "bool");
else
- pos = "wxVERTICAL";
+ return wxItemPropertyInfo::GetProperty(name);
+}
- return new wxProperty("orientation", pos, "string",
- new wxStringListValidator(new wxStringList("wxHORIZONTAL", "wxVERTICAL",
- NULL)));
- }
- else if (name == "min_value")
- return new wxProperty("min_value", (long)slider->GetMin(), "integer");
- else if (name == "max_value")
- return new wxProperty("max_value", (long)slider->GetMax(), "integer");
- else
- return wxItemPropertyInfo::GetProperty(name);
+bool wxRadioButtonPropertyInfo::SetProperty(wxString& name, wxProperty *property)
+{
+ wxRadioButton *checkBox = (wxRadioButton *)m_propertyWindow;
+ if (name == "value")
+ {
+ checkBox->SetValue((bool)property->GetValue().BoolValue());
+ return TRUE;
+ }
+ else
+ return wxItemPropertyInfo::SetProperty(name, property);
}
-bool wxSliderPropertyInfo::SetProperty(wxString& name, wxProperty *property)
+void wxRadioButtonPropertyInfo::GetPropertyNames(wxStringList& names)
{
- wxSlider *slider = (wxSlider *)propertyWindow;
- if (name == "value")
- {
- slider->SetValue((int)property->GetValue().IntegerValue());
- return TRUE;
- }
- else if (name == "orientation")
- {
- long windowStyle = slider->GetWindowStyleFlag();
- long oldWindowStyle = windowStyle;
- wxString val(property->GetValue().StringValue());
- if (val == "wxHORIZONTAL")
+ wxItemPropertyInfo::GetPropertyNames(names);
+ names.Add("label");
+ names.Add("value");
+}
+
+bool wxRadioButtonPropertyInfo::InstantiateResource(wxItemResource *resource)
+{
+ wxRadioButton *cbox = (wxRadioButton *)m_propertyWindow;
+ resource->SetValue1(cbox->GetValue());
+ return wxItemPropertyInfo::InstantiateResource(resource);
+}
+
+/*
+* Slider item
+*/
+
+wxProperty *wxSliderPropertyInfo::GetProperty(wxString& name)
+{
+ wxSlider *slider = (wxSlider *)m_propertyWindow;
+ if (name == "value")
+ return new wxProperty("value", (long)slider->GetValue(), "integer");
+ else if (name == "orientation")
{
- if (windowStyle & wxVERTICAL)
- windowStyle -= wxVERTICAL;
- windowStyle |= wxHORIZONTAL;
+ char *pos = NULL;
+ if (m_propertyWindow->GetWindowStyleFlag() & wxHORIZONTAL)
+ pos = "wxHORIZONTAL";
+ else
+ pos = "wxVERTICAL";
+
+ return new wxProperty("orientation", pos, "string",
+ new wxStringListValidator(new wxStringList("wxHORIZONTAL", "wxVERTICAL",
+ NULL)));
}
+ else if (name == "minValue")
+ return new wxProperty("minValue", (long)slider->GetMin(), "integer");
+ else if (name == "maxValue")
+ return new wxProperty("maxValue", (long)slider->GetMax(), "integer");
else
+ return wxItemPropertyInfo::GetProperty(name);
+}
+
+bool wxSliderPropertyInfo::SetProperty(wxString& name, wxProperty *property)
+{
+ wxSlider *slider = (wxSlider *)m_propertyWindow;
+ if (name == "value")
{
- if (windowStyle & wxHORIZONTAL)
- windowStyle -= wxHORIZONTAL;
- windowStyle |= wxVERTICAL;
+ slider->SetValue((int)property->GetValue().IntegerValue());
+ return TRUE;
}
-
- if (oldWindowStyle == windowStyle)
- return TRUE;
-
- slider->SetWindowStyleFlag(windowStyle);
-
- // If the window style has changed, we swap the width and height parameters.
- int w, h;
- slider->GetSize(&w, &h);
-
- slider = (wxSlider *)wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(slider, this);
- slider->SetSize(-1, -1, h, w);
-
- return TRUE;
- }
- else if (name == "min_value")
- {
- slider->SetRange((int)property->GetValue().IntegerValue(), slider->GetMax());
- return TRUE;
- }
- else if (name == "max_value")
- {
- slider->SetRange(slider->GetMin(), (int)property->GetValue().IntegerValue());
- return TRUE;
- }
- else
- return wxItemPropertyInfo::SetProperty(name, property);
+ else if (name == "orientation")
+ {
+ long windowStyle = slider->GetWindowStyleFlag();
+ long oldWindowStyle = windowStyle;
+ wxString val(property->GetValue().StringValue());
+ if (val == "wxHORIZONTAL")
+ {
+ if (windowStyle & wxVERTICAL)
+ windowStyle -= wxVERTICAL;
+ windowStyle |= wxHORIZONTAL;
+ }
+ else
+ {
+ if (windowStyle & wxHORIZONTAL)
+ windowStyle -= wxHORIZONTAL;
+ windowStyle |= wxVERTICAL;
+ }
+
+ if (oldWindowStyle == windowStyle)
+ return TRUE;
+
+ slider->SetWindowStyleFlag(windowStyle);
+
+ // If the window style has changed, we swap the width and height parameters.
+ int w, h;
+ slider->GetSize(&w, &h);
+
+ slider = (wxSlider *)wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(slider, this);
+ slider->SetSize(-1, -1, h, w);
+ m_propertyWindow = slider;
+
+ return TRUE;
+ }
+ else if (name == "minValue")
+ {
+ slider->SetRange((int)property->GetValue().IntegerValue(), slider->GetMax());
+ return TRUE;
+ }
+ else if (name == "maxValue")
+ {
+ slider->SetRange(slider->GetMin(), (int)property->GetValue().IntegerValue());
+ return TRUE;
+ }
+ else
+ return wxItemPropertyInfo::SetProperty(name, property);
}
void wxSliderPropertyInfo::GetPropertyNames(wxStringList& names)
{
- names.Add("value");
- names.Add("orientation");
- names.Add("min_value");
- names.Add("max_value");
- wxItemPropertyInfo::GetPropertyNames(names);
+ wxItemPropertyInfo::GetPropertyNames(names);
+ names.Add("value");
+ names.Add("orientation");
+ names.Add("minValue");
+ names.Add("maxValue");
}
bool wxSliderPropertyInfo::InstantiateResource(wxItemResource *resource)
{
- wxSlider *slider = (wxSlider *)propertyWindow;
- resource->SetValue1(slider->GetValue());
- resource->SetValue2(slider->GetMin());
- resource->SetValue3(slider->GetMax());
- return wxItemPropertyInfo::InstantiateResource(resource);
+ wxSlider *slider = (wxSlider *)m_propertyWindow;
+ resource->SetValue1(slider->GetValue());
+ resource->SetValue2(slider->GetMin());
+ resource->SetValue3(slider->GetMax());
+ return wxItemPropertyInfo::InstantiateResource(resource);
}
/*
- * Gauge item
- */
+* Gauge item
+*/
wxProperty *wxGaugePropertyInfo::GetProperty(wxString& name)
{
- wxGauge *gauge = (wxGauge *)propertyWindow;
- if (name == "value")
- return new wxProperty("value", (long)gauge->GetValue(), "integer");
- else if (name == "max_value")
- return new wxProperty("max_value", (long)gauge->GetRange(), "integer");
- else
- return wxItemPropertyInfo::GetProperty(name);
+ wxGauge *gauge = (wxGauge *)m_propertyWindow;
+ if (name == "value")
+ return new wxProperty("value", (long)gauge->GetValue(), "integer");
+ else if (name == "maxValue")
+ return new wxProperty("maxValue", (long)gauge->GetRange(), "integer");
+ else
+ return wxItemPropertyInfo::GetProperty(name);
}
bool wxGaugePropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- wxGauge *gauge = (wxGauge *)propertyWindow;
- if (name == "value")
- {
- gauge->SetValue((int)property->GetValue().IntegerValue());
- return TRUE;
- }
- else if (name == "max_value")
- {
- gauge->SetRange((int)property->GetValue().IntegerValue());
- return TRUE;
- }
- else
- return wxItemPropertyInfo::SetProperty(name, property);
+ wxGauge *gauge = (wxGauge *)m_propertyWindow;
+ if (name == "value")
+ {
+ gauge->SetValue((int)property->GetValue().IntegerValue());
+ return TRUE;
+ }
+ else if (name == "maxValue")
+ {
+ gauge->SetRange((int)property->GetValue().IntegerValue());
+ return TRUE;
+ }
+ else
+ return wxItemPropertyInfo::SetProperty(name, property);
}
void wxGaugePropertyInfo::GetPropertyNames(wxStringList& names)
{
- names.Add("value");
- names.Add("max_value");
- wxItemPropertyInfo::GetPropertyNames(names);
+ wxItemPropertyInfo::GetPropertyNames(names);
+ names.Add("value");
+ names.Add("maxValue");
}
bool wxGaugePropertyInfo::InstantiateResource(wxItemResource *resource)
{
- wxGauge *gauge = (wxGauge *)propertyWindow;
- resource->SetValue1(gauge->GetValue());
- resource->SetValue2(gauge->GetRange());
- return wxItemPropertyInfo::InstantiateResource(resource);
+ wxGauge *gauge = (wxGauge *)m_propertyWindow;
+ resource->SetValue1(gauge->GetValue());
+ resource->SetValue2(gauge->GetRange());
+ return wxItemPropertyInfo::InstantiateResource(resource);
}
/*
- * Scrollbar item
- */
+* Scrollbar item
+*/
wxProperty *wxScrollBarPropertyInfo::GetProperty(wxString& name)
{
- wxScrollBar *scrollBar = (wxScrollBar *)propertyWindow;
- if (name == "value")
- return new wxProperty("value", (long)scrollBar->GetValue(), "integer");
- else if (name == "orientation")
- {
- char *pos = NULL;
- if (propertyWindow->GetWindowStyleFlag() & wxHORIZONTAL)
- pos = "wxHORIZONTAL";
+ wxScrollBar *scrollBar = (wxScrollBar *)m_propertyWindow;
+ if (name == "thumbPosition")
+ return new wxProperty("value", (long)scrollBar->GetThumbPosition(), "integer");
+ else if (name == "orientation")
+ {
+ char *pos = NULL;
+ if (m_propertyWindow->GetWindowStyleFlag() & wxHORIZONTAL)
+ pos = "wxHORIZONTAL";
+ else
+ pos = "wxVERTICAL";
+
+ return new wxProperty("orientation", pos, "string",
+ new wxStringListValidator(new wxStringList("wxHORIZONTAL", "wxVERTICAL",
+ NULL)));
+ }
+ else if (name == "pageSize")
+ {
+ int pageLength = scrollBar->GetPageSize();
+
+ return new wxProperty("pageSize", (long)pageLength, "integer");
+ }
+ else if (name == "thumbSize")
+ {
+ int thumbSize = scrollBar->GetThumbSize();
+
+ return new wxProperty("thumbSize", (long)thumbSize, "integer");
+ }
+ else if (name == "range")
+ {
+ int range = scrollBar->GetRange();
+ return new wxProperty("range", (long)range, "integer");
+ }
else
- pos = "wxVERTICAL";
-
- return new wxProperty("orientation", pos, "string",
- new wxStringListValidator(new wxStringList("wxHORIZONTAL", "wxVERTICAL",
- NULL)));
- }
- else if (name == "pageSize")
- {
- int viewStart, pageLength, objectLength, viewLength;
- scrollBar->GetValues(&viewStart, &viewLength, &objectLength, &pageLength);
-
- return new wxProperty("pageSize", (long)pageLength, "integer");
- }
- else if (name == "viewLength")
- {
- int viewStart, pageLength, objectLength, viewLength;
- scrollBar->GetValues(&viewStart, &viewLength, &objectLength, &pageLength);
-
- return new wxProperty("viewLength", (long)viewLength, "integer");
- }
- else if (name == "objectLength")
- {
- int viewStart, pageLength, objectLength, viewLength;
- scrollBar->GetValues(&viewStart, &viewLength, &objectLength, &pageLength);
-
- return new wxProperty("objectLength", (long)objectLength, "integer");
- }
- else
- return wxItemPropertyInfo::GetProperty(name);
+ return wxItemPropertyInfo::GetProperty(name);
}
bool wxScrollBarPropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- wxScrollBar *scrollBar = (wxScrollBar *)propertyWindow;
- if (name == "value")
- {
- scrollBar->SetValue((int)property->GetValue().IntegerValue());
- return TRUE;
- }
- else if (name == "orientation")
- {
- long windowStyle = scrollBar->GetWindowStyleFlag();
- long oldWindowStyle = windowStyle;
- wxString val(property->GetValue().StringValue());
- if (val == "wxHORIZONTAL")
+ wxScrollBar *scrollBar = (wxScrollBar *)m_propertyWindow;
+ if (name == "thumbPosition")
{
- if (windowStyle & wxVERTICAL)
- windowStyle -= wxVERTICAL;
- windowStyle |= wxHORIZONTAL;
+ scrollBar->SetThumbPosition((int)property->GetValue().IntegerValue());
+ return TRUE;
}
- else
+ else if (name == "orientation")
{
- if (windowStyle & wxHORIZONTAL)
- windowStyle -= wxHORIZONTAL;
- windowStyle |= wxVERTICAL;
+ long windowStyle = scrollBar->GetWindowStyleFlag();
+ long oldWindowStyle = windowStyle;
+ wxString val(property->GetValue().StringValue());
+ if (val == "wxHORIZONTAL")
+ {
+ if (windowStyle & wxVERTICAL)
+ windowStyle -= wxVERTICAL;
+ windowStyle |= wxHORIZONTAL;
+ }
+ else
+ {
+ if (windowStyle & wxHORIZONTAL)
+ windowStyle -= wxHORIZONTAL;
+ windowStyle |= wxVERTICAL;
+ }
+
+ if (oldWindowStyle == windowStyle)
+ return TRUE;
+
+ scrollBar->SetWindowStyleFlag(windowStyle);
+
+ // If the window style has changed, we swap the width and height parameters.
+ // int w, h;
+ // scrollBar->GetSize(&w, &h);
+ wxItemResource *item = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(scrollBar);
+ if ( item ) {
+ item->SetSize(item->GetX(), item->GetY(), item->GetHeight(), item->GetWidth());
+ item->SetStyle(windowStyle);
+ } /* IF */
+
+ scrollBar = (wxScrollBar *)wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(scrollBar, this);
+ m_propertyWindow = scrollBar;
+
+ return TRUE;
}
-
- if (oldWindowStyle == windowStyle)
- return TRUE;
-
- scrollBar->SetWindowStyleFlag(windowStyle);
-
- // If the window style has changed, we swap the width and height parameters.
- int w, h;
- scrollBar->GetSize(&w, &h);
-
- scrollBar = (wxScrollBar *)wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(scrollBar, this);
- scrollBar->SetSize(-1, -1, h, w);
-
- return TRUE;
- }
- else if (name == "pageSize")
- {
- scrollBar->SetPageSize((int)property->GetValue().IntegerValue());
- return TRUE;
- }
- else if (name == "viewLength")
- {
- scrollBar->SetViewLength((int)property->GetValue().IntegerValue());
- return TRUE;
- }
- else if (name == "objectLength")
- {
- scrollBar->SetObjectLength((int)property->GetValue().IntegerValue());
- return TRUE;
- }
- else
- return wxItemPropertyInfo::SetProperty(name, property);
+ else if (name == "pageSize")
+ {
+ int pos = scrollBar->GetThumbPosition();
+ int range = scrollBar->GetRange();
+ int thumbSize = scrollBar->GetThumbSize();
+ scrollBar->SetScrollbar(pos, thumbSize, range, (int)property->GetValue().IntegerValue());
+ return TRUE;
+ }
+ else if (name == "thumbSize")
+ {
+ int pos = scrollBar->GetThumbPosition();
+ int range = scrollBar->GetRange();
+ int pageSize = scrollBar->GetPageSize();
+ scrollBar->SetScrollbar(pos, (int)property->GetValue().IntegerValue(), range, pageSize);
+ return TRUE;
+ }
+ else if (name == "range")
+ {
+ int pos = scrollBar->GetThumbPosition();
+ int thumbSize = scrollBar->GetThumbSize();
+ int pageSize = scrollBar->GetPageSize();
+ scrollBar->SetScrollbar(pos, thumbSize, (int)property->GetValue().IntegerValue(), pageSize);
+ return TRUE;
+ }
+ else
+ return wxItemPropertyInfo::SetProperty(name, property);
}
void wxScrollBarPropertyInfo::GetPropertyNames(wxStringList& names)
{
- names.Add("orientation");
- names.Add("value");
- names.Add("pageSize");
- names.Add("viewLength");
- names.Add("objectLength");
- wxItemPropertyInfo::GetPropertyNames(names);
-
- // Remove some properties we don't inherit
- names.Delete("fontPoints");
- names.Delete("fontFamily");
- names.Delete("fontStyle");
- names.Delete("fontWeight");
- names.Delete("fontUnderlined");
+ wxItemPropertyInfo::GetPropertyNames(names);
+ names.Add("orientation");
+ names.Add("thumbPosition");
+ names.Add("thumbSize");
+ names.Add("pageSize");
+ names.Add("range");
+
+ // Remove some properties we don't inherit
+ names.Delete("fontPoints");
+ names.Delete("fontFamily");
+ names.Delete("fontStyle");
+ names.Delete("fontWeight");
+ names.Delete("fontUnderlined");
}
bool wxScrollBarPropertyInfo::InstantiateResource(wxItemResource *resource)
{
- wxScrollBar *sbar = (wxScrollBar *)propertyWindow;
-
- resource->SetValue1(sbar->GetValue());
-
- int viewStart, pageLength, objectLength, viewLength;
- sbar->GetValues(&viewStart, &viewLength, &objectLength, &pageLength);
-
- resource->SetValue2(pageLength);
- resource->SetValue3(objectLength);
- resource->SetValue5(viewLength);
-
- return wxItemPropertyInfo::InstantiateResource(resource);
+ wxScrollBar *sbar = (wxScrollBar *)m_propertyWindow;
+
+ int thumbPosition = sbar->GetThumbPosition();
+ int thumbSize = sbar->GetThumbSize();
+ int pageSize = sbar->GetPageSize();
+ int range = sbar->GetRange();
+
+ resource->SetValue1(thumbPosition);
+ resource->SetValue2(thumbSize);
+ resource->SetValue3(range);
+ resource->SetValue5(pageSize);
+
+ return wxItemPropertyInfo::InstantiateResource(resource);
}
/*
- * Panels
- */
+* Panels
+*/
+#ifdef __VMS
+// next functions may contain unreacheable code
+# pragma message disable codcauunr
+#endif
wxProperty *wxPanelPropertyInfo::GetProperty(wxString& name)
{
- wxPanel *panelWindow = (wxPanel *)propertyWindow;
- wxFont *labelFont = panelWindow->GetLabelFont();
- wxFont *buttonFont = panelWindow->GetButtonFont();
-
- if (name == "labelFontPoints" || name == "labelFontFamily" || name == "labelFontStyle" || name == "labelFontWeight" ||
+ wxPanel *panelWindow = (wxPanel *)m_propertyWindow;
+
+ /*
+ wxFont *labelFont = panelWindow->GetLabelFont();
+ wxFont *buttonFont = panelWindow->GetButtonFont();
+
+ if (name == "labelFontPoints" || name == "labelFontFamily" || name == "labelFontStyle" || name == "labelFontWeight" ||
name == "labelFontUnderlined")
- return GetFontProperty(name, labelFont);
- else if (name == "buttonFontPoints" || name == "buttonFontFamily" || name == "buttonFontStyle" || name == "buttonFontWeight" ||
+ return GetFontProperty(name, labelFont);
+ else if (name == "buttonFontPoints" || name == "buttonFontFamily" || name == "buttonFontStyle" || name == "buttonFontWeight" ||
name == "buttonFontUnderlined")
- return GetFontProperty(name, buttonFont);
- else if (name == "no3D")
- {
- bool userColours;
- if (panelWindow->GetWindowStyleFlag() & wxNO_3D)
- userColours = TRUE;
- else
- userColours = FALSE;
-
- return new wxProperty(name, (bool)userColours, "bool");
- }
- else if (name == "backgroundColour")
- {
- wxColour col(panelWindow->GetBackgroundColour());
- char buf[7];
- wxDecToHex(col.Red(), buf);
- wxDecToHex(col.Green(), buf+2);
- wxDecToHex(col.Blue(), buf+4);
-
- return new wxProperty(name, buf, "string", new wxColourListValidator);
- }
- else if (name == "title")
- {
- wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(panelWindow);
- if (resource)
- return new wxProperty(name, resource->GetTitle(), "string");
+ return GetFontProperty(name, buttonFont);
+ */
+
+ if (name == "no3D")
+ {
+ bool userColours;
+ if (panelWindow->GetWindowStyleFlag() & wxNO_3D)
+ userColours = TRUE;
+ else
+ userColours = FALSE;
+
+ return new wxProperty(name, (bool)userColours, "bool");
+ }
+ else if (name == "backgroundColour")
+ {
+ wxColour col(panelWindow->GetBackgroundColour());
+ char buf[7];
+ wxDecToHex(col.Red(), buf);
+ wxDecToHex(col.Green(), buf+2);
+ wxDecToHex(col.Blue(), buf+4);
+
+ return new wxProperty(name, buf, "string", new wxColourListValidator);
+ }
+ else if (name == "title")
+ {
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(panelWindow);
+ if (resource)
+ return new wxProperty(name, resource->GetTitle(), "string");
+ else
+ return new wxProperty(name, "Could not get title", "string");
+ }
+ else if (name == "caption")
+ {
+ return new wxProperty(name, ((panelWindow->GetWindowStyleFlag() & wxCAPTION) == wxCAPTION),
+ "bool");
+ }
+ else if (name == "systemMenu")
+ {
+ return new wxProperty(name, ((panelWindow->GetWindowStyleFlag() & wxSYSTEM_MENU) == wxSYSTEM_MENU),
+ "bool");
+ }
+ else if (name == "thickFrame")
+ {
+ return new wxProperty(name, ((panelWindow->GetWindowStyleFlag() & wxTHICK_FRAME) == wxTHICK_FRAME),
+ "bool");
+ }
+ else if (name == "modal")
+ {
+ return new wxProperty(name, ((panelWindow->GetWindowStyleFlag() & wxDIALOG_MODAL) == wxDIALOG_MODAL),
+ "bool");
+ }
+ else if (name == "useSystemDefaults")
+ {
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(panelWindow);
+ return new wxProperty(name, ((resource->GetResourceStyle() & wxRESOURCE_USE_DEFAULTS) == wxRESOURCE_USE_DEFAULTS),
+ "bool");
+ }
+ else if (name == "useDialogUnits")
+ {
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(panelWindow);
+ return new wxProperty(name, ((resource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS) == wxRESOURCE_DIALOG_UNITS),
+ "bool");
+ }
else
- return new wxProperty(name, "Could not get title", "string");
- }
- else
- return wxWindowPropertyInfo::GetProperty(name);
+ return wxWindowPropertyInfo::GetProperty(name);
}
bool wxPanelPropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- wxPanel *panelWindow = (wxPanel *)propertyWindow;
- wxFont *labelFont = panelWindow->GetLabelFont();
- wxFont *buttonFont = panelWindow->GetButtonFont();
-
- if (labelFont && (name == "labelFontPoints" || name == "labelFontFamily" || name == "labelFontStyle" || name == "labelFontWeight" || name == "labelFontUnderlined" ))
- {
- wxFont *newFont = SetFontProperty(name, property, labelFont);
- if (newFont)
- panelWindow->SetLabelFont(newFont);
- return TRUE;
- }
- else if (buttonFont && (name == "buttonFontPoints" || name == "buttonFontFamily" || name == "buttonFontStyle" || name == "buttonFontWeight" || name == "buttonFontUnderlined" ))
- {
- wxFont *newFont = SetFontProperty(name, property, buttonFont);
- if (newFont)
- panelWindow->SetButtonFont(newFont);
- return TRUE;
- }
- else if (name == "no3D")
- {
- bool userColours = property->GetValue().BoolValue();
- long flag = panelWindow->GetWindowStyleFlag();
+ wxPanel *panelWindow = (wxPanel *)m_propertyWindow;
+ /*
+ wxFont *labelFont = panelWindow->GetLabelFont();
+ wxFont *buttonFont = panelWindow->GetButtonFont();
+
+ if (labelFont && (name == "labelFontPoints" || name == "labelFontFamily" || name == "labelFontStyle" || name == "labelFontWeight" || name == "labelFontUnderlined" ))
+ {
+ wxFont *newFont = SetFontProperty(name, property, labelFont);
+ if (newFont)
+ panelWindow->SetLabelFont(* newFont);
+ return TRUE;
+ }
+ else if (buttonFont && (name == "buttonFontPoints" || name == "buttonFontFamily" || name == "buttonFontStyle" || name == "buttonFontWeight" || name == "buttonFontUnderlined" ))
+ {
+ wxFont *newFont = SetFontProperty(name, property, buttonFont);
+ if (newFont)
+ panelWindow->SetButtonFont(* newFont);
+ return TRUE;
+ }
+ */
- if (userColours)
+ if (name == "no3D")
{
- if ((panelWindow->GetWindowStyleFlag() & wxNO_3D) != wxNO_3D)
- panelWindow->SetWindowStyleFlag(panelWindow->GetWindowStyleFlag() | wxNO_3D);
+ bool userColours = property->GetValue().BoolValue();
+
+ if (userColours)
+ {
+ if ((panelWindow->GetWindowStyleFlag() & wxNO_3D) != wxNO_3D)
+ panelWindow->SetWindowStyleFlag(panelWindow->GetWindowStyleFlag() | wxNO_3D);
+ }
+ else
+ {
+ if ((panelWindow->GetWindowStyleFlag() & wxNO_3D) == wxNO_3D)
+ panelWindow->SetWindowStyleFlag(panelWindow->GetWindowStyleFlag() - wxNO_3D);
+ }
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(panelWindow);
+ resource->SetStyle(panelWindow->GetWindowStyleFlag());
+
+ panelWindow = (wxPanel *)wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(panelWindow, this);
+ return TRUE;
}
- else
+ else if (name == "backgroundColour")
{
- if ((panelWindow->GetWindowStyleFlag() & wxNO_3D) == wxNO_3D)
- panelWindow->SetWindowStyleFlag(panelWindow->GetWindowStyleFlag() - wxNO_3D);
+ char *hex = property->GetValue().StringValue();
+ int r = wxHexToDec(hex);
+ int g = wxHexToDec(hex+2);
+ int b = wxHexToDec(hex+4);
+
+ wxColour col(r,g,b);
+ panelWindow->SetBackgroundColour(col);
+ panelWindow = (wxPanel *)wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(panelWindow, this);
+ m_propertyWindow = panelWindow;
+ return TRUE;
}
- wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(panelWindow);
- resource->SetStyle(panelWindow->GetWindowStyleFlag());
+ else if (name == "title")
+ {
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(panelWindow);
+ if (resource)
+ {
+ resource->SetTitle(property->GetValue().StringValue());
+ return TRUE;
+ }
+ else
+ return FALSE;
+ }
+ else if (name == "caption")
+ {
+ SetWindowStyle(panelWindow, wxCAPTION, property->GetValue().BoolValue());
+
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(panelWindow);
+ resource->SetStyle(panelWindow->GetWindowStyleFlag());
+ return TRUE;
+ }
+ else if (name == "thickFrame")
+ {
+ SetWindowStyle(panelWindow, wxTHICK_FRAME, property->GetValue().BoolValue());
+
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(panelWindow);
+ resource->SetStyle(panelWindow->GetWindowStyleFlag());
+ return TRUE;
+ }
+ else if (name == "systemMenu")
+ {
+ SetWindowStyle(panelWindow, wxSYSTEM_MENU, property->GetValue().BoolValue());
+
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(panelWindow);
+ resource->SetStyle(panelWindow->GetWindowStyleFlag());
+ return TRUE;
+ }
+ else if (name == "modal")
+ {
+ SetWindowStyle(panelWindow, wxDIALOG_MODAL, property->GetValue().BoolValue());
- panelWindow = (wxPanel *)wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(panelWindow, this);
- return TRUE;
- }
- else if (name == "backgroundColour")
- {
- char *hex = property->GetValue().StringValue();
- int r = wxHexToDec(hex);
- int g = wxHexToDec(hex+2);
- int b = wxHexToDec(hex+4);
-
- wxColour col(r,g,b);
- panelWindow->SetBackgroundColour(col);
- panelWindow = (wxPanel *)wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(panelWindow, this);
- return TRUE;
- }
- else if (name == "title")
- {
- wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(panelWindow);
- if (resource)
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(panelWindow);
+ resource->SetStyle(panelWindow->GetWindowStyleFlag());
+ return TRUE;
+ }
+ else if (name == "useSystemDefaults")
{
- resource->SetTitle(property->GetValue().StringValue());
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(panelWindow);
+ bool useDefaults = property->GetValue().BoolValue();
+ long style = resource->GetResourceStyle();
+ if (useDefaults)
+ {
+ if ((style & wxRESOURCE_USE_DEFAULTS) == 0)
+ style |= wxRESOURCE_USE_DEFAULTS;
+ }
+ else
+ {
+ if ((style & wxRESOURCE_USE_DEFAULTS) != 0)
+ style -= wxRESOURCE_USE_DEFAULTS;
+ }
+ resource->SetResourceStyle(style);
+ panelWindow = (wxPanel *)wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(panelWindow, this);
+ return TRUE;
+ }
+ else if (name == "useDialogUnits")
+ {
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(panelWindow);
+ bool useDialogUnits = property->GetValue().BoolValue();
+ long style = resource->GetResourceStyle();
+ if (useDialogUnits)
+ {
+ if ((style & wxRESOURCE_DIALOG_UNITS) == 0)
+ {
+ style |= wxRESOURCE_DIALOG_UNITS;
+ ConvertDialogUnits(TRUE); // Convert all resources
+ }
+ }
+ else
+ {
+ if ((style & wxRESOURCE_DIALOG_UNITS) != 0)
+ {
+ style -= wxRESOURCE_DIALOG_UNITS;
+ ConvertDialogUnits(FALSE); // Convert all resources
+ }
+ }
+ resource->SetResourceStyle(style);
+ panelWindow = (wxPanel *)wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(panelWindow, this);
+ m_propertyWindow = panelWindow;
+ // TODO: need to regenerate the width and height properties else they'll be inconsistent.
return TRUE;
}
else
- return FALSE;
- }
- else
- return wxWindowPropertyInfo::SetProperty(name, property);
+ return wxWindowPropertyInfo::SetProperty(name, property);
}
+#ifdef __VMS
+# pragma message enable codcauunr
+#endif
void wxPanelPropertyInfo::GetPropertyNames(wxStringList& names)
{
- wxWindowPropertyInfo::GetPropertyNames(names);
-
- names.Add("title");
- names.Add("no3D");
- names.Add("backgroundColour");
+ wxWindowPropertyInfo::GetPropertyNames(names);
+
+ names.Add("title");
+ names.Add("no3D");
+ names.Add("backgroundColour");
+ names.Add("caption");
+ names.Add("systemMenu");
+ names.Add("thickFrame");
+ names.Add("useSystemDefaults");
+ names.Add("useDialogUnits");
+ names.Add("modal");
}
bool wxPanelPropertyInfo::InstantiateResource(wxItemResource *resource)
{
- wxPanel *panel = (wxPanel *)propertyWindow;
- if (panel->GetFont())
- resource->SetFont(wxTheFontList->FindOrCreateFont(panel->GetFont()->GetPointSize(),
- panel->GetFont()->GetFamily(), panel->GetFont()->GetStyle(), panel->GetFont()->GetWeight(),
- panel->GetFont()->GetUnderlined(), panel->GetFont()->GetFaceName()));
-
- resource->SetBackgroundColour(new wxColour(panel->GetBackgroundColour()));
+ wxPanel *panel = (wxPanel *)m_propertyWindow;
+ if (panel->GetFont().Ok())
+ resource->SetFont(* wxTheFontList->FindOrCreateFont(panel->GetFont().GetPointSize(),
+ panel->GetFont().GetFamily(), panel->GetFont().GetStyle(), panel->GetFont().GetWeight(),
+ panel->GetFont().GetUnderlined(), panel->GetFont().GetFaceName()));
+
+ resource->SetBackgroundColour(wxColour(panel->GetBackgroundColour()));
+
+ return wxWindowPropertyInfo::InstantiateResource(resource);
+}
- return wxWindowPropertyInfo::InstantiateResource(resource);
+// Convert this dialog, and its children, to or from dialog units
+void wxPanelPropertyInfo::ConvertDialogUnits(bool toDialogUnits)
+{
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(m_propertyWindow);
+
+ wxPoint pt;
+ wxSize sz;
+ if (toDialogUnits)
+ {
+ sz = m_propertyWindow->ConvertPixelsToDialog(wxSize(resource->GetWidth(), resource->GetHeight()));
+ pt = m_propertyWindow->ConvertPixelsToDialog(wxPoint(resource->GetX(), resource->GetY()));
+ }
+ else
+ {
+ sz = m_propertyWindow->ConvertDialogToPixels(wxSize(resource->GetWidth(), resource->GetHeight()));
+ pt = m_propertyWindow->ConvertDialogToPixels(wxPoint(resource->GetX(), resource->GetY()));
+ }
+ resource->SetSize(pt.x, pt.y, sz.x, sz.y);
+
+ wxNode* node = m_propertyWindow->GetChildren().First();
+ while (node)
+ {
+ wxWindow* child = (wxWindow*) node->Data();
+ if (child->IsKindOf(CLASSINFO(wxControl)))
+ {
+ resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(child);
+ if (toDialogUnits)
+ {
+ sz = m_propertyWindow->ConvertPixelsToDialog(wxSize(resource->GetWidth(), resource->GetHeight()));
+ pt = m_propertyWindow->ConvertPixelsToDialog(wxPoint(resource->GetX(), resource->GetY()));
+ }
+ else
+ {
+ sz = m_propertyWindow->ConvertDialogToPixels(wxSize(resource->GetWidth(), resource->GetHeight()));
+ pt = m_propertyWindow->ConvertDialogToPixels(wxPoint(resource->GetX(), resource->GetY()));
+ }
+ resource->SetSize(pt.x, pt.y, sz.x, sz.y);
+ }
+ node = node->Next();
+ }
}
#if 0
/*
- * Dialog boxes
- */
+* Dialog boxes
+*/
wxProperty *wxDialogPropertyInfo::GetProperty(wxString& name)
{
- wxDialog *dialogWindow = (wxDialog *)propertyWindow;
- if (name == "modal")
- {
- wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(dialogWindow);
- if (!resource)
- return NULL;
-
- bool modal = (resource->GetValue1() != 0);
- return new wxProperty(name, modal, "bool");
- }
- else
- return wxPanelPropertyInfo::GetProperty(name);
+ wxDialog *dialogWindow = (wxDialog *)m_propertyWindow;
+ if (name == "modal")
+ {
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(dialogWindow);
+ if (!resource)
+ return NULL;
+
+ bool modal = (resource->GetValue1() != 0);
+ return new wxProperty(name, modal, "bool");
+ }
+ else
+ return wxPanelPropertyInfo::GetProperty(name);
}
bool wxDialogPropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
- wxDialog *dialogWindow = (wxDialog *)propertyWindow;
-
- if (name == "modal")
- {
- wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(dialogWindow);
- if (!resource)
- return FALSE;
-
- resource->SetValue1(property->GetValue().BoolValue());
- return TRUE;
- }
- else
- return wxPanelPropertyInfo::SetProperty(name, property);
+ wxDialog *dialogWindow = (wxDialog *)m_propertyWindow;
+
+ if (name == "modal")
+ {
+ wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(dialogWindow);
+ if (!resource)
+ return FALSE;
+
+ resource->SetValue1(property->GetValue().BoolValue());
+ return TRUE;
+ }
+ else
+ return wxPanelPropertyInfo::SetProperty(name, property);
}
void wxDialogPropertyInfo::GetPropertyNames(wxStringList& names)
{
- names.Add("title");
- names.Add("modal");
-
- wxPanelPropertyInfo::GetPropertyNames(names);
+ wxPanelPropertyInfo::GetPropertyNames(names);
+ names.Add("title");
+ names.Add("modal");
}
bool wxDialogPropertyInfo::InstantiateResource(wxItemResource *resource)
{
- wxDialog *dialog = (wxDialog *)propertyWindow;
- wxString str(dialog->GetTitle());
- resource->SetTitle(WXSTRINGCAST str);
+ wxDialog *dialog = (wxDialog *)m_propertyWindow;
+ wxString str(dialog->GetTitle());
+ resource->SetTitle(str);
- return wxPanelPropertyInfo::InstantiateResource(resource);
+ return wxPanelPropertyInfo::InstantiateResource(resource);
}
#endif
/*
- * Utilities
- */
-
+* Utilities
+*/
+
int wxStringToFontWeight(wxString& val)
{
- if (val == "wxBOLD") return wxBOLD;
- else if (val == "wxLIGHT") return wxLIGHT;
- else return wxNORMAL;
+ if (val == "wxBOLD") return wxBOLD;
+ else if (val == "wxLIGHT") return wxLIGHT;
+ else return wxNORMAL;
}
int wxStringToFontStyle(wxString& val)
{
- if (val == "wxITALIC") return wxITALIC;
- else if (val == "wxSLANT") return wxSLANT;
- else return wxNORMAL;
+ if (val == "wxITALIC") return wxITALIC;
+ else if (val == "wxSLANT") return wxSLANT;
+ else return wxNORMAL;
}
int wxStringToFontFamily(wxString& val)
{
- if (val == "wxDECORATIVE") return wxDECORATIVE;
- else if (val == "wxROMAN") return wxROMAN;
- else if (val == "wxSCRIPT") return wxSCRIPT;
- else if (val == "wxMODERN") return wxMODERN;
- else if (val == "wxTELETYPE") return wxTELETYPE;
- else return wxSWISS;
+ if (val == "wxDECORATIVE") return wxDECORATIVE;
+ else if (val == "wxROMAN") return wxROMAN;
+ else if (val == "wxSCRIPT") return wxSCRIPT;
+ else if (val == "wxMODERN") return wxMODERN;
+ else if (val == "wxTELETYPE") return wxTELETYPE;
+ else return wxSWISS;
+}
+
+///
+/// Resource symbol validator
+///
+IMPLEMENT_DYNAMIC_CLASS(wxResourceSymbolValidator, wxPropertyListValidator)
+
+wxResourceSymbolValidator::wxResourceSymbolValidator(long flags):
+wxPropertyListValidator(flags)
+{
+}
+
+wxResourceSymbolValidator::~wxResourceSymbolValidator(void)
+{
+}
+
+bool wxResourceSymbolValidator::OnCheckValue(wxProperty *WXUNUSED(property), wxPropertyListView *WXUNUSED(view), wxWindow *WXUNUSED(parentWindow))
+{
+ return TRUE;
+}
+
+// Called when TICK is pressed or focus is lost or view wants to update
+// the property list.
+// Does the transferance from the property editing area to the property itself
+bool wxResourceSymbolValidator::OnRetrieveValue(wxProperty *property, wxPropertyListView *view, wxWindow *WXUNUSED(parentWindow))
+{
+ if (!view->GetValueText())
+ return FALSE;
+ wxString value(view->GetValueText()->GetValue());
+ property->GetValue() = value ;
+ return TRUE;
+}
+
+// Called when TICK is pressed or focus is lost or view wants to update
+// the property list.
+// Does the transferance from the property editing area to the property itself
+bool wxResourceSymbolValidator::OnDisplayValue(wxProperty *property, wxPropertyListView *view, wxWindow *WXUNUSED(parentWindow))
+{
+ if (!view->GetValueText())
+ return FALSE;
+ wxString str(property->GetValue().GetStringRepresentation());
+ view->GetValueText()->SetValue(str);
+ return TRUE;
+}
+
+// Called when the property is double clicked. Extra functionality can be provided,
+// cycling through possible values.
+bool wxResourceSymbolValidator::OnDoubleClick(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow)
+{
+ if (!view->GetValueText())
+ return FALSE;
+ OnEdit(property, view, parentWindow);
+ return TRUE;
+}
+
+bool wxResourceSymbolValidator::OnPrepareControls(wxProperty *WXUNUSED(property), wxPropertyListView *view, wxWindow *WXUNUSED(parentWindow))
+{
+ if (view->GetConfirmButton())
+ view->GetConfirmButton()->Enable(TRUE);
+ if (view->GetCancelButton())
+ view->GetCancelButton()->Enable(TRUE);
+ if (view->GetEditButton())
+ view->GetEditButton()->Enable(TRUE);
+ if (view->GetValueText())
+ view->GetValueText()->Enable((GetFlags() & wxPROP_ALLOW_TEXT_EDITING) == wxPROP_ALLOW_TEXT_EDITING);
+ return TRUE;
+}
+
+void wxResourceSymbolValidator::OnEdit(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow)
+{
+ if (!view->GetValueText())
+ return;
+
+ wxResourceSymbolDialog* dialog = new wxResourceSymbolDialog(parentWindow, -1, "Edit Symbol");
+
+ // Split name/id pair e.g. "IDC_TEXT=123"
+ wxString value(property->GetValue().StringValue());
+
+ wxString strName = value.Before('=');
+ wxString strId = value.After('=');
+
+ dialog->SetSymbol(strName);
+ dialog->SetId(atoi(strId));
+
+ dialog->Init();
+
+ if (dialog->ShowModal() == wxID_OK)
+ {
+ wxString symbolName(dialog->GetSymbol());
+ long id = dialog->GetId();
+
+ wxString str;
+ str.Printf("%d", id);
+ property->GetValue() = symbolName + wxString("=") + str;
+
+ view->DisplayProperty(property);
+ view->UpdatePropertyDisplayInList(property);
+ view->OnPropertyChanged(property);
+ }
+ // Moved from the 'if' branch on suggestion of Roman Pavlov
+ dialog->Destroy();
+}
+
+BEGIN_EVENT_TABLE(wxResourceSymbolDialog, wxDialog)
+EVT_BUTTON(wxID_OK, wxResourceSymbolDialog::OnOK)
+EVT_COMBOBOX(ID_SYMBOLNAME_COMBOBOX, wxResourceSymbolDialog::OnComboBoxSelect)
+EVT_TEXT(ID_SYMBOLNAME_COMBOBOX, wxResourceSymbolDialog::OnSymbolNameUpdate)
+END_EVENT_TABLE()
+
+wxResourceSymbolDialog::wxResourceSymbolDialog(wxWindow* parent, const wxWindowID id, const wxString& title, const wxPoint& pos,
+ const wxSize& size, long style):
+wxDialog(parent, id, title, pos, size, style)
+{
+ int x = 5;
+ int y = 5;
+
+ (void) new wxStaticText(this, -1, "Name: ", wxPoint(x, y));
+
+ x += 80;
+
+ m_nameCtrl = new wxComboBox(this, ID_SYMBOLNAME_COMBOBOX, "",
+ wxPoint(x, y), wxSize(200, -1), 0, NULL, wxCB_DROPDOWN|wxCB_SORT);
+
+ y += 30;
+ x = 5;
+
+ (void) new wxStaticText(this, -1, "Id: ", wxPoint(x, y));
+
+ x += 80;
+
+ m_idCtrl = new wxTextCtrl(this, ID_SYMBOLID_TEXTCTRL, "",
+ wxPoint(x, y), wxSize(200, -1));
+
+ y += 30;
+ x = 5;
+ (void) new wxButton(this, wxID_OK, "OK", wxPoint(x, y), wxSize(80, -1));
+
+ x += 100;
+ (void) new wxButton(this, wxID_CANCEL, "Cancel", wxPoint(x, y), wxSize(80, -1));
+
+ Fit();
+ Centre();
+}
+
+void wxResourceSymbolDialog::Init()
+{
+ wxString defaultId;
+ defaultId.Printf("%ld", m_symbolId);
+
+ m_nameCtrl->SetValue(m_symbolName);
+ m_idCtrl->SetValue(defaultId);
+
+ wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().FillComboBox(m_nameCtrl);
}
+
+void wxResourceSymbolDialog::OnOK(wxCommandEvent& event)
+{
+ if (CheckValues())
+ {
+ wxDialog::OnOK(event);
+ }
+}
+
+bool wxResourceSymbolDialog::CheckValues()
+{
+ wxString nameStr(m_nameCtrl->GetValue());
+ wxString idStr(m_idCtrl->GetValue());
+ int id = atoi(idStr);
+
+ if (id <= 0 )
+ {
+ wxMessageBox("Identifier cannot be missing or zero", "Dialog Editor", wxOK|wxICON_EXCLAMATION, this);
+ return FALSE;
+ }
+ if (nameStr == "")
+ {
+ wxMessageBox("Please enter a symbol name", "Dialog Editor", wxOK|wxICON_EXCLAMATION, this);
+ return FALSE;
+ }
+ if (nameStr.Contains(" "))
+ {
+ wxMessageBox("Symbol name cannot contain spaces.", "Dialog Editor", wxOK|wxICON_EXCLAMATION, this);
+ return FALSE;
+ }
+ if (nameStr.Contains("="))
+ {
+ wxMessageBox("Symbol name cannot contain =.", "Dialog Editor", wxOK|wxICON_EXCLAMATION, this);
+ return FALSE;
+ }
+ if (nameStr.IsNumber())
+ {
+ wxMessageBox("Symbol name cannot be a number.", "Dialog Editor", wxOK|wxICON_EXCLAMATION, this);
+ return FALSE;
+ }
+ // TODO: other checks on the name syntax.
+
+ if (!wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().IsStandardSymbol(nameStr))
+ {
+ // If we change the id for an existing symbol, we need to:
+ // 1) Check if there are any other resources currently using the original id.
+ // If so, will need to change their id to the new id, in SetProperty.
+ // 2) Remove the old symbol, add the new symbol.
+ // In this check, we don't have to do this, but we need to do it in SetProperty.
+
+ if (nameStr == GetSymbol() && id != GetId())
+ {
+ // It's OK to change the id. But we'll need to change all matching ids in all resources,
+ // in SetProperty.
+ }
+
+ // If we change the name but not the id... we'll just need to remove and
+ // re-add the symbol/id pair, in SetProperty.
+ if (nameStr != GetSymbol() && id == GetId())
+ {
+ }
+
+ // What if we're changing both the name and the id?
+ // - if there's no symbol of that name, just remove the old, add the new (in SetProperty)
+ // - if there is a symbol of that name, if id matches, do nothing. If not, veto.
+
+ if (nameStr != GetSymbol() && id != GetId())
+ {
+ if (!wxResourceManager::GetCurrentResourceManager()->IsIdentifierOK(nameStr, id))
+ {
+ wxMessageBox("This integer id is already being used under a different name.\nPlease choose another.",
+ "Dialog Editor", wxOK|wxICON_EXCLAMATION, this);
+ return FALSE;
+ }
+ }
+
+ }
+
+ SetSymbol(nameStr);
+ SetId(id);
+
+ return TRUE;
+}
+
+void wxResourceSymbolDialog::OnComboBoxSelect(wxCommandEvent& WXUNUSED(event))
+{
+ wxString str(m_nameCtrl->GetStringSelection());
+ if (wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().IsStandardSymbol(str))
+ {
+ int id = wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().GetIdForSymbol(str);
+ wxString str2;
+ str2.Printf("%d", id);
+ m_idCtrl->SetValue(str2);
+ m_idCtrl->Enable(FALSE);
+ }
+ else
+ {
+ if (wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().SymbolExists(str))
+ {
+ int id = wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().GetIdForSymbol(str);
+ wxString str2;
+ str2.Printf("%d", id);
+ m_idCtrl->SetValue(str2);
+ }
+ m_idCtrl->Enable(TRUE);
+ }
+}
+
+void wxResourceSymbolDialog::OnSymbolNameUpdate(wxCommandEvent& WXUNUSED(event))
+{
+ wxString str(m_nameCtrl->GetValue());
+ if (wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().IsStandardSymbol(str))
+ {
+ int id = wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().GetIdForSymbol(str);
+ wxString str2;
+ str2.Printf("%d", id);
+ m_idCtrl->SetValue(str2);
+ m_idCtrl->Enable(FALSE);
+ }
+ else
+ {
+ if (wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().SymbolExists(str))
+ {
+ int id = wxResourceManager::GetCurrentResourceManager()->GetSymbolTable().GetIdForSymbol(str);
+ wxString str2;
+ str2.Printf("%d", id);
+ m_idCtrl->SetValue(str2);
+ }
+ m_idCtrl->Enable(TRUE);
+ }
+}
+