git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@494 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2271 lines
66 KiB
C++
2271 lines
66 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: winprop.cpp
|
|
// Purpose: Window properties
|
|
// Author: Julian Smart
|
|
// Modified by:
|
|
// Created: 04/01/98
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) Julian Smart
|
|
// Licence: wxWindows license
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifdef __GNUG__
|
|
#pragma implementation "winprop.h"
|
|
#endif
|
|
|
|
// For compilers that support precompilation, includes "wx/wx.h".
|
|
#include "wx/wxprec.h"
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/wx.h"
|
|
#endif
|
|
|
|
#include <ctype.h>
|
|
#include <stdlib.h>
|
|
#include <math.h>
|
|
#include <string.h>
|
|
|
|
#if defined(__WXMSW__) && !defined(__GNUWIN32__)
|
|
#include <strstrea.h>
|
|
#else
|
|
#include <strstream.h>
|
|
#endif
|
|
|
|
#ifdef __WXMSW__
|
|
#include <windows.h>
|
|
#endif
|
|
|
|
#include "reseditr.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);
|
|
}
|
|
}
|
|
|
|
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();
|
|
}
|
|
|
|
wxWindow *wxPropertyInfo::sm_propertyWindow;
|
|
|
|
/*
|
|
* 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)
|
|
{
|
|
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;
|
|
}
|
|
|
|
wxDialogEditorPropertyListFrame::~wxDialogEditorPropertyListFrame()
|
|
{
|
|
delete m_propSheet;
|
|
delete m_propInfo;
|
|
wxPropertyInfo::sm_propertyWindow = NULL;
|
|
}
|
|
|
|
/*
|
|
* wxPropertyInfo
|
|
*/
|
|
|
|
// Edit the information represented by this object, whatever that
|
|
// might be.
|
|
bool wxPropertyInfo::Edit(wxWindow *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);
|
|
}
|
|
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->propertyWindow = propWin;
|
|
view->AddRegistry(&(propWin->m_registry));
|
|
|
|
propWin->Initialize();
|
|
view->ShowView(propSheet, propWin->GetPropertyPanel());
|
|
|
|
propWin->Show(TRUE);
|
|
return TRUE;
|
|
}
|
|
|
|
/*
|
|
* wxWindowPropertyInfo
|
|
*/
|
|
|
|
wxWindowPropertyInfo::wxWindowPropertyInfo(wxWindow *win, wxItemResource *res)
|
|
{
|
|
propertyWindow = win;
|
|
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;
|
|
}
|
|
|
|
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);
|
|
|
|
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 if (name == "id")
|
|
{
|
|
wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(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
|
|
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)
|
|
{
|
|
// It's a top-level resource
|
|
propertyWindow->SetName(property->GetValue().StringValue());
|
|
oldResource->SetName(property->GetValue().StringValue());
|
|
wxResourceManager::GetCurrentResourceManager()->GetResourceTable().Put(propertyWindow->GetName(), oldResource);
|
|
}
|
|
else
|
|
{
|
|
// 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());
|
|
}
|
|
// 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)
|
|
{
|
|
propertyWindow->SetSize(newWidth, height);
|
|
/*
|
|
if (propertyWindow->IsKindOf(CLASSINFO(wxPanel)) && !propertyWindow->IsKindOf(CLASSINFO(wxDialog)))
|
|
{
|
|
propertyWindow->GetParent()->SetClientSize(newWidth, height);
|
|
}
|
|
*/
|
|
}
|
|
return TRUE;
|
|
}
|
|
else if (name == "height")
|
|
{
|
|
int width, height;
|
|
propertyWindow->GetSize(&width, &height);
|
|
int newHeight = (int)property->GetValue().IntegerValue();
|
|
if (height != newHeight)
|
|
{
|
|
propertyWindow->SetSize(width, newHeight);
|
|
/*
|
|
if (propertyWindow->IsKindOf(CLASSINFO(wxPanel)) && !propertyWindow->IsKindOf(CLASSINFO(wxDialog)))
|
|
{
|
|
propertyWindow->GetParent()->SetClientSize(width, newHeight);
|
|
}
|
|
*/
|
|
}
|
|
return TRUE;
|
|
}
|
|
else if (name == "id")
|
|
{
|
|
wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(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
|
|
return FALSE;
|
|
}
|
|
|
|
void wxWindowPropertyInfo::GetPropertyNames(wxStringList& names)
|
|
{
|
|
names.Add("id");
|
|
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");
|
|
}
|
|
}
|
|
|
|
// 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;
|
|
}
|
|
|
|
// 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
|
|
*/
|
|
|
|
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);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
void wxItemPropertyInfo::GetPropertyNames(wxStringList& names)
|
|
{
|
|
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;
|
|
}
|
|
|
|
/*
|
|
* Button
|
|
*/
|
|
|
|
wxProperty *wxButtonPropertyInfo::GetProperty(wxString& name)
|
|
{
|
|
wxButton *button = (wxButton *)propertyWindow;
|
|
return wxItemPropertyInfo::GetProperty(name);
|
|
}
|
|
|
|
bool wxButtonPropertyInfo::SetProperty(wxString& name, wxProperty *property)
|
|
{
|
|
wxButton *button = (wxButton *)propertyWindow;
|
|
return wxItemPropertyInfo::SetProperty(name, property);
|
|
}
|
|
|
|
void wxButtonPropertyInfo::GetPropertyNames(wxStringList& names)
|
|
{
|
|
wxItemPropertyInfo::GetPropertyNames(names);
|
|
names.Add("label");
|
|
}
|
|
|
|
bool wxButtonPropertyInfo::InstantiateResource(wxItemResource *resource)
|
|
{
|
|
return wxItemPropertyInfo::InstantiateResource(resource);
|
|
}
|
|
|
|
/*
|
|
* 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)
|
|
{
|
|
char *filename = wxResourceManager::GetCurrentResourceManager()->FindBitmapFilenameForResource(resource);
|
|
if (filename)
|
|
str = filename;
|
|
}
|
|
return new wxProperty("label", str.GetData(), "string", new wxFilenameListValidator("Select a bitmap file", "*.bmp"));
|
|
}
|
|
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))
|
|
{
|
|
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)
|
|
{
|
|
wxString oldResource(resource->GetValue4());
|
|
char *resName = wxResourceManager::GetCurrentResourceManager()->AddBitmapResource(s);
|
|
resource->SetValue4(resName);
|
|
|
|
if (!oldResource.IsNull())
|
|
wxResourceManager::GetCurrentResourceManager()->PossiblyDeleteBitmapResource(WXSTRINGCAST oldResource);
|
|
}
|
|
|
|
button->SetLabel(bitmap);
|
|
delete[] s;
|
|
return TRUE;
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
else
|
|
return wxButtonPropertyInfo::SetProperty(name, property);
|
|
}
|
|
|
|
void wxBitmapButtonPropertyInfo::GetPropertyNames(wxStringList& names)
|
|
{
|
|
// names.Add("label");
|
|
wxButtonPropertyInfo::GetPropertyNames(names);
|
|
}
|
|
|
|
bool wxBitmapButtonPropertyInfo::InstantiateResource(wxItemResource *resource)
|
|
{
|
|
return wxItemPropertyInfo::InstantiateResource(resource);
|
|
}
|
|
|
|
/*
|
|
* wxStaticText
|
|
*/
|
|
|
|
wxProperty *wxStaticTextPropertyInfo::GetProperty(wxString& name)
|
|
{
|
|
wxStaticText *message = (wxStaticText *)propertyWindow;
|
|
return wxItemPropertyInfo::GetProperty(name);
|
|
}
|
|
|
|
bool wxStaticTextPropertyInfo::SetProperty(wxString& name, wxProperty *property)
|
|
{
|
|
wxStaticText *message = (wxStaticText *)propertyWindow;
|
|
return wxItemPropertyInfo::SetProperty(name, property);
|
|
}
|
|
|
|
void wxStaticTextPropertyInfo::GetPropertyNames(wxStringList& names)
|
|
{
|
|
wxItemPropertyInfo::GetPropertyNames(names);
|
|
names.Add("label");
|
|
}
|
|
|
|
bool wxStaticTextPropertyInfo::InstantiateResource(wxItemResource *resource)
|
|
{
|
|
return wxItemPropertyInfo::InstantiateResource(resource);
|
|
}
|
|
|
|
/*
|
|
* 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)
|
|
{
|
|
char *filename = wxResourceManager::GetCurrentResourceManager()->FindBitmapFilenameForResource(resource);
|
|
if (filename)
|
|
str = filename;
|
|
}
|
|
return new wxProperty("label", str.GetData(), "string", new wxFilenameListValidator("Select a bitmap file", "*.bmp"));
|
|
}
|
|
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))
|
|
{
|
|
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)
|
|
{
|
|
wxString oldResource(resource->GetValue4());
|
|
char *resName = wxResourceManager::GetCurrentResourceManager()->AddBitmapResource(s);
|
|
resource->SetValue4(resName);
|
|
|
|
if (!oldResource.IsNull())
|
|
wxResourceManager::GetCurrentResourceManager()->PossiblyDeleteBitmapResource(WXSTRINGCAST oldResource);
|
|
}
|
|
|
|
message->SetBitmap(bitmap);
|
|
delete[] s;
|
|
return TRUE;
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
else
|
|
return wxItemPropertyInfo::SetProperty(name, property);
|
|
}
|
|
|
|
void wxStaticBitmapPropertyInfo::GetPropertyNames(wxStringList& names)
|
|
{
|
|
wxItemPropertyInfo::GetPropertyNames(names);
|
|
names.Add("label");
|
|
}
|
|
|
|
bool wxStaticBitmapPropertyInfo::InstantiateResource(wxItemResource *resource)
|
|
{
|
|
return wxItemPropertyInfo::InstantiateResource(resource);
|
|
}
|
|
|
|
/*
|
|
* 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);
|
|
}
|
|
|
|
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())
|
|
{
|
|
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);
|
|
|
|
wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(text, this);
|
|
return TRUE;
|
|
}
|
|
else if (name == "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);
|
|
|
|
wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(text, this);
|
|
return TRUE;
|
|
}
|
|
else
|
|
return wxItemPropertyInfo::SetProperty(name, property);
|
|
}
|
|
|
|
void wxTextPropertyInfo::GetPropertyNames(wxStringList& 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);
|
|
|
|
return wxItemPropertyInfo::InstantiateResource(resource);
|
|
}
|
|
|
|
/*
|
|
* 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);
|
|
}
|
|
|
|
bool wxListBoxPropertyInfo::SetProperty(wxString& name, wxProperty *property)
|
|
{
|
|
wxListBox *listBox = (wxListBox *)propertyWindow;
|
|
if (name == "values")
|
|
{
|
|
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")
|
|
{
|
|
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);
|
|
}
|
|
|
|
void wxListBoxPropertyInfo::GetPropertyNames(wxStringList& 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);
|
|
}
|
|
|
|
/*
|
|
* 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);
|
|
}
|
|
|
|
bool wxChoicePropertyInfo::SetProperty(wxString& name, wxProperty *property)
|
|
{
|
|
wxChoice *choice = (wxChoice *)propertyWindow;
|
|
if (name == "values")
|
|
{
|
|
choice->Clear();
|
|
wxPropertyValue *expr = property->GetValue().GetFirst();
|
|
while (expr)
|
|
{
|
|
char *s = expr->StringValue();
|
|
if (s)
|
|
choice->Append(s);
|
|
expr = expr->GetNext();
|
|
}
|
|
if (choice->Number() > 0)
|
|
choice->SetSelection(0);
|
|
return TRUE;
|
|
}
|
|
else
|
|
return wxItemPropertyInfo::SetProperty(name, property);
|
|
}
|
|
|
|
void wxChoicePropertyInfo::GetPropertyNames(wxStringList& 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);
|
|
}
|
|
|
|
/*
|
|
* Choice item
|
|
*/
|
|
|
|
wxProperty *wxComboBoxPropertyInfo::GetProperty(wxString& name)
|
|
{
|
|
wxComboBox *choice = (wxComboBox *)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 if (name == "sort")
|
|
{
|
|
bool sort = ((propertyWindow->GetWindowStyleFlag() & wxCB_SORT) == wxCB_SORT);
|
|
return new wxProperty(name, sort, "bool");
|
|
}
|
|
else if (name == "style")
|
|
{
|
|
wxString styleStr("dropdown");
|
|
if (propertyWindow->GetWindowStyleFlag() & wxCB_SIMPLE)
|
|
styleStr = "simple";
|
|
else if (propertyWindow->GetWindowStyleFlag() & wxCB_READONLY)
|
|
styleStr = "readonly";
|
|
else
|
|
styleStr = "dropdown";
|
|
|
|
return new wxProperty(name, styleStr, "string",
|
|
new wxStringListValidator(new wxStringList("simple", "dropdown", "readonly",
|
|
NULL)));
|
|
}
|
|
else
|
|
return wxItemPropertyInfo::GetProperty(name);
|
|
}
|
|
|
|
bool wxComboBoxPropertyInfo::SetProperty(wxString& name, wxProperty *property)
|
|
{
|
|
wxComboBox *choice = (wxComboBox *)propertyWindow;
|
|
if (name == "values")
|
|
{
|
|
choice->Clear();
|
|
wxPropertyValue *expr = property->GetValue().GetFirst();
|
|
while (expr)
|
|
{
|
|
char *s = expr->StringValue();
|
|
if (s)
|
|
choice->Append(s);
|
|
expr = expr->GetNext();
|
|
}
|
|
if (choice->Number() > 0)
|
|
choice->SetSelection(0);
|
|
return TRUE;
|
|
}
|
|
else if (name == "sort")
|
|
{
|
|
SetWindowStyle(propertyWindow, wxCB_SORT, property->GetValue().BoolValue());
|
|
|
|
wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(propertyWindow);
|
|
resource->SetStyle(propertyWindow->GetWindowStyleFlag());
|
|
|
|
wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(propertyWindow, this);
|
|
return TRUE;
|
|
}
|
|
else if (name == "style")
|
|
{
|
|
SetWindowStyle(propertyWindow, wxCB_SIMPLE, FALSE);
|
|
SetWindowStyle(propertyWindow, wxCB_DROPDOWN, FALSE);
|
|
SetWindowStyle(propertyWindow, wxCB_READONLY, FALSE);
|
|
|
|
wxString styleStr(property->GetValue().StringValue());
|
|
if (styleStr == "simple")
|
|
SetWindowStyle(propertyWindow, wxCB_SIMPLE, TRUE);
|
|
else if (styleStr == "dropdown")
|
|
SetWindowStyle(propertyWindow, wxCB_DROPDOWN, TRUE);
|
|
else if (styleStr == "readonly")
|
|
SetWindowStyle(propertyWindow, wxCB_READONLY, TRUE);
|
|
|
|
// Necesary?
|
|
wxItemResource *resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(propertyWindow);
|
|
resource->SetStyle(propertyWindow->GetWindowStyleFlag());
|
|
|
|
wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(propertyWindow, this);
|
|
|
|
return TRUE;
|
|
}
|
|
else
|
|
return wxItemPropertyInfo::SetProperty(name, property);
|
|
}
|
|
|
|
void wxComboBoxPropertyInfo::GetPropertyNames(wxStringList& names)
|
|
{
|
|
wxItemPropertyInfo::GetPropertyNames(names);
|
|
names.Add("values");
|
|
names.Add("style");
|
|
names.Add("sort");
|
|
}
|
|
|
|
bool wxComboBoxPropertyInfo::InstantiateResource(wxItemResource *resource)
|
|
{
|
|
wxComboBox *choice = (wxComboBox *)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);
|
|
}
|
|
|
|
/*
|
|
* Radiobox item
|
|
*/
|
|
|
|
wxProperty *wxRadioBoxPropertyInfo::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";
|
|
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);
|
|
}
|
|
|
|
bool wxRadioBoxPropertyInfo::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")
|
|
{
|
|
if (windowStyle & wxVERTICAL)
|
|
windowStyle -= wxVERTICAL;
|
|
windowStyle |= wxHORIZONTAL;
|
|
}
|
|
else
|
|
{
|
|
if (windowStyle & wxHORIZONTAL)
|
|
windowStyle -= wxHORIZONTAL;
|
|
windowStyle |= wxVERTICAL;
|
|
}
|
|
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)
|
|
{
|
|
stringList = new wxStringList;
|
|
resource->SetStringValues(stringList);
|
|
}
|
|
stringList->Clear();
|
|
|
|
wxPropertyValue *expr = property->GetValue().GetFirst();
|
|
while (expr)
|
|
{
|
|
char *s = expr->StringValue();
|
|
if (s)
|
|
stringList->Add(s);
|
|
expr = expr->GetNext();
|
|
}
|
|
wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(radioBox, this);
|
|
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 *)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);
|
|
}
|
|
|
|
/*
|
|
* Groupbox item
|
|
*/
|
|
|
|
wxProperty *wxGroupBoxPropertyInfo::GetProperty(wxString& name)
|
|
{
|
|
wxStaticBox *groupBox = (wxStaticBox *)propertyWindow;
|
|
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);
|
|
}
|
|
|
|
/*
|
|
* 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);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
void wxCheckBoxPropertyInfo::GetPropertyNames(wxStringList& 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);
|
|
}
|
|
|
|
/*
|
|
* Radiobutton item
|
|
*/
|
|
|
|
wxProperty *wxRadioButtonPropertyInfo::GetProperty(wxString& name)
|
|
{
|
|
wxRadioButton *checkBox = (wxRadioButton *)propertyWindow;
|
|
if (name == "value")
|
|
return new wxProperty("value", checkBox->GetValue(), "bool");
|
|
else
|
|
return wxItemPropertyInfo::GetProperty(name);
|
|
}
|
|
|
|
bool wxRadioButtonPropertyInfo::SetProperty(wxString& name, wxProperty *property)
|
|
{
|
|
wxRadioButton *checkBox = (wxRadioButton *)propertyWindow;
|
|
if (name == "value")
|
|
{
|
|
checkBox->SetValue((bool)property->GetValue().BoolValue());
|
|
return TRUE;
|
|
}
|
|
else
|
|
return wxItemPropertyInfo::SetProperty(name, property);
|
|
}
|
|
|
|
void wxRadioButtonPropertyInfo::GetPropertyNames(wxStringList& names)
|
|
{
|
|
wxItemPropertyInfo::GetPropertyNames(names);
|
|
names.Add("label");
|
|
names.Add("value");
|
|
}
|
|
|
|
bool wxRadioButtonPropertyInfo::InstantiateResource(wxItemResource *resource)
|
|
{
|
|
wxRadioButton *cbox = (wxRadioButton *)propertyWindow;
|
|
resource->SetValue1(cbox->GetValue());
|
|
return wxItemPropertyInfo::InstantiateResource(resource);
|
|
}
|
|
|
|
/*
|
|
* Slider item
|
|
*/
|
|
|
|
wxProperty *wxSliderPropertyInfo::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";
|
|
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 *)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")
|
|
{
|
|
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);
|
|
|
|
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)
|
|
{
|
|
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);
|
|
}
|
|
|
|
/*
|
|
* 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 == "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 == "maxValue")
|
|
{
|
|
gauge->SetRange((int)property->GetValue().IntegerValue());
|
|
return TRUE;
|
|
}
|
|
else
|
|
return wxItemPropertyInfo::SetProperty(name, property);
|
|
}
|
|
|
|
void wxGaugePropertyInfo::GetPropertyNames(wxStringList& 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);
|
|
}
|
|
|
|
/*
|
|
* 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";
|
|
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);
|
|
}
|
|
|
|
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")
|
|
{
|
|
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);
|
|
|
|
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);
|
|
}
|
|
|
|
void wxScrollBarPropertyInfo::GetPropertyNames(wxStringList& names)
|
|
{
|
|
wxItemPropertyInfo::GetPropertyNames(names);
|
|
names.Add("orientation");
|
|
names.Add("value");
|
|
names.Add("pageSize");
|
|
names.Add("viewLength");
|
|
names.Add("objectLength");
|
|
|
|
// 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);
|
|
}
|
|
|
|
/*
|
|
* Panels
|
|
*/
|
|
|
|
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" ||
|
|
name == "labelFontUnderlined")
|
|
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");
|
|
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
|
|
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();
|
|
|
|
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 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)
|
|
{
|
|
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
|
|
return wxWindowPropertyInfo::SetProperty(name, property);
|
|
}
|
|
|
|
void wxPanelPropertyInfo::GetPropertyNames(wxStringList& names)
|
|
{
|
|
wxWindowPropertyInfo::GetPropertyNames(names);
|
|
|
|
names.Add("title");
|
|
names.Add("no3D");
|
|
names.Add("backgroundColour");
|
|
names.Add("caption");
|
|
names.Add("systemMenu");
|
|
names.Add("thickFrame");
|
|
}
|
|
|
|
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()));
|
|
|
|
return wxWindowPropertyInfo::InstantiateResource(resource);
|
|
}
|
|
|
|
#if 0
|
|
/*
|
|
* 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);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
void wxDialogPropertyInfo::GetPropertyNames(wxStringList& 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);
|
|
|
|
return wxPanelPropertyInfo::InstantiateResource(resource);
|
|
}
|
|
#endif
|
|
|
|
/*
|
|
* Utilities
|
|
*/
|
|
|
|
int wxStringToFontWeight(wxString& val)
|
|
{
|
|
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;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
///
|
|
/// Resource symbol validator
|
|
///
|
|
IMPLEMENT_DYNAMIC_CLASS(wxResourceSymbolValidator, wxPropertyListValidator)
|
|
|
|
wxResourceSymbolValidator::wxResourceSymbolValidator(long flags):
|
|
wxPropertyListValidator(flags)
|
|
{
|
|
}
|
|
|
|
wxResourceSymbolValidator::~wxResourceSymbolValidator(void)
|
|
{
|
|
}
|
|
|
|
bool wxResourceSymbolValidator::OnCheckValue(wxProperty *property, wxPropertyListView *view, wxWindow *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 *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 *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 *property, wxPropertyListView *view, wxWindow *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();
|
|
dialog->Destroy();
|
|
|
|
wxString str;
|
|
str.Printf("%d", id);
|
|
property->GetValue() = symbolName + wxString("=") + str;
|
|
|
|
view->DisplayProperty(property);
|
|
view->UpdatePropertyDisplayInList(property);
|
|
view->OnPropertyChanged(property);
|
|
}
|
|
}
|
|
|
|
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& 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& 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);
|
|
}
|
|
}
|
|
|