<H3>How can I prepare for wxWindows 2?</H3>
To make porting to wxWindows 2 easier in the future, take a look at some
-<a href="http://web.ukonline.co.uk/julian.smart/wxwin/prepare.htm">tips</a> for writing existing code in a 2-compatible way.<P>
+<a href="http://www.wxwindows.org/prepare.htm">tips</a> for writing existing code in a 2-compatible way.<P>
<H3>How much has the API changed since 1.xx?</H3>
<H3>How can I help the project?</H3>
-Please check out the <a href="http://web.ukonline.co.uk/julian.smart/wxwin/develop.htm" target=main>Backroom</a> pages,
-in particular the <a href="http://web.ukonline.co.uk/julian.smart/wxwin/projects.htm">suggested projects</a>, and
+Please check out the <a href="http://www.wxwindows.org/develop.htm" target=main>Backroom</a> pages,
+in particular the <a href="http://www.wxwindows.org/projects.htm">suggested projects</a>, and
mail <a href="mailto:julian.smart@ukonline.co.uk">Julian Smart</a> or the developers' mailing list with your own suggestions.<P>
</font>
<h3>When is wxMac 2 due to be released?</h3>
-There is a <a href="http://web.ukonline.co.uk/julian.smart/wxwin/dl_mac2.htm">preview</a> available.
+There is a <a href="http://www.wxwindows.org/dl_mac2.htm">preview</a> available.
A beta release can be expected by early Q2 1999. The author of this port
is Stefan Csomor (csomor@advancedconcepts.ch).
<P>
else
{
if (control && childResource->GetFont().Ok())
+ {
control->SetFont(childResource->GetFont());
+
+#ifdef __WXMSW__
+ // Force the layout algorithm since the size changes the layout
+ if (control->IsKindOf(CLASSINFO(wxRadioBox)))
+ {
+ wxSize sz = control->GetSize();
+ control->SetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH|wxSIZE_AUTO_HEIGHT);
+ }
+#endif
+ }
}
return control;
}
if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
{
- // controlItem->SetLabelFont(wxResourceInterpretFontSpec(expr->Nth(count)));
- // Do nothing
- count ++;
-
- if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
- controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
+ // Skip past the obsolete label font spec if there are two consecutive specs
+ if (expr->Nth(count+1) && expr->Nth(count+1)->Type() == PrologList)
+ count ++;
+ controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
}
}
}
}
if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
{
- // controlItem->SetLabelFont(wxResourceInterpretFontSpec(expr->Nth(count)));
- count ++;
- if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
- controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
+ // Skip past the obsolete label font spec if there are two consecutive specs
+ if (expr->Nth(count+1) && expr->Nth(count+1)->Type() == PrologList)
+ count ++;
+ controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
}
}
}
if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
{
- // controlItem->SetLabelFont(wxResourceInterpretFontSpec(expr->Nth(count)));
- count ++;
-
- if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
- controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
+ // Skip past the obsolete label font spec if there are two consecutive specs
+ if (expr->Nth(count+1) && expr->Nth(count+1)->Type() == PrologList)
+ count ++;
+ controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
}
}
}
if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
{
- // controlItem->SetLabelFont(wxResourceInterpretFontSpec(expr->Nth(count)));
- count ++;
-
- if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
- controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
+ // Skip past the obsolete label font spec if there are two consecutive specs
+ if (expr->Nth(count+1) && expr->Nth(count+1)->Type() == PrologList)
+ count ++;
+ controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
}
}
}
if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
{
- // controlItem->SetLabelFont(wxResourceInterpretFontSpec(expr->Nth(count)));
- count ++;
-
- if (expr->Nth(count) && expr->Nth(count)->Type() == PrologList)
- controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
+ // Skip past the obsolete label font spec if there are two consecutive specs
+ if (expr->Nth(count+1) && expr->Nth(count+1)->Type() == PrologList)
+ count ++;
+ controlItem->SetFont(wxResourceInterpretFontSpec(expr->Nth(count)));
}
}
}
wxPropertyValue::wxPropertyValue(const wxPropertyValue& copyFrom)
{
+ m_value.string = (wxChar*) NULL;
m_modifiedFlag = FALSE;
Copy((wxPropertyValue& )copyFrom);
}
void wxPropertyValue::Copy(wxPropertyValue& copyFrom)
{
+ if (m_type == wxPropertyValueString)
+ {
+ delete[] m_value.string ;
+ m_value.string = NULL;
+ }
m_type = copyFrom.Type();
switch (m_type)
const wxChar *val = (const wxChar *)val1;
m_modifiedFlag = TRUE;
+
+ wxPropertyValueType oldType = m_type;
+ if (oldType == wxPropertyValueString)
+ {
+ delete[] m_value.string ;
+ m_value.string = NULL;
+ }
+
if (m_type == wxPropertyValueNull)
m_type = wxPropertyValueString;
}
else if (m_type == wxPropertyValueStringPtr)
{
- if (*m_value.stringPtr)
- delete[] *m_value.stringPtr;
+ wxFAIL_MSG( "Shouldn't try to assign a wxString reference to a char* pointer.");
if (val)
*m_value.stringPtr = copystring(val);
else
void wxPropertyValue::operator=(const long val)
{
+ wxPropertyValueType oldType = m_type;
+ if (oldType == wxPropertyValueString)
+ {
+ delete[] m_value.string ;
+ m_value.string = NULL;
+ }
+
m_modifiedFlag = TRUE;
if (m_type == wxPropertyValueNull)
m_type = wxPropertyValueInteger;
void wxPropertyValue::operator=(const bool val)
{
+ wxPropertyValueType oldType = m_type;
+ if (oldType == wxPropertyValueString)
+ {
+ delete[] m_value.string ;
+ m_value.string = NULL;
+ }
+
m_modifiedFlag = TRUE;
if (m_type == wxPropertyValueNull)
m_type = wxPropertyValuebool;
void wxPropertyValue::operator=(const float val)
{
+ wxPropertyValueType oldType = m_type;
+ if (oldType == wxPropertyValueString)
+ {
+ delete[] m_value.string ;
+ m_value.string = NULL;
+ }
+
m_modifiedFlag = TRUE;
if (m_type == wxPropertyValueNull)
m_type = wxPropertyValueReal;
void wxPropertyValue::operator=(const wxChar **val)
{
+ wxPropertyValueType oldType = m_type;
+ if (oldType == wxPropertyValueString)
+ {
+ delete[] m_value.string ;
+ m_value.string = NULL;
+ }
+
m_modifiedFlag = TRUE;
m_type = wxPropertyValueStringPtr;
bool wxResourceManager::Clear(bool WXUNUSED(deleteWindows), bool force)
{
+ wxPropertyInfo::CloseWindow();
+
if (!force && Modified())
{
int ans = wxMessageBox("Save modified resource file?", "Dialog Editor", wxYES_NO | wxCANCEL);
bool wxResourceManager::Edit(wxItemResource *res)
{
+ wxPropertyInfo::CloseWindow();
+
ClearCurrentDialog();
wxString resType(res->GetType());
bool wxResourceManager::CreateNewPanel()
{
+ wxPropertyInfo::CloseWindow();
+
ClearCurrentDialog();
char buf[256];
m_selections.DeleteObject(win);
}
+void wxResourceManager::DeselectItemIfNecessary(wxWindow *win)
+{
+ if (win->IsKindOf(CLASSINFO(wxControl)) && (win->GetEventHandler() != win))
+ {
+ // Deselect and refresh window in case we leave selection
+ // handles behind
+ wxControl *item = (wxControl *)win;
+ wxResourceEditorControlHandler *childHandler = (wxResourceEditorControlHandler *)item->GetEventHandler();
+ if (childHandler->IsSelected())
+ {
+ wxResourceManager::GetCurrentResourceManager()->RemoveSelection(item);
+ childHandler->SelectItem(FALSE);
+#ifndef __WXGTK__
+ item->GetParent()->Refresh();
+#endif
+ }
+ }
+}
+
// Need to search through resource table removing this from
// any resource which has this as a parent.
bool wxResourceManager::RemoveResourceFromParent(wxItemResource *res)
bool wxResourceManager::DeleteResource(wxWindow *win)
{
- if (win->IsKindOf(CLASSINFO(wxControl)) && (win->GetEventHandler() != win))
- {
- // Deselect and refresh window in case we leave selection
- // handles behind
- wxControl *item = (wxControl *)win;
- wxResourceEditorControlHandler *childHandler = (wxResourceEditorControlHandler *)item->GetEventHandler();
-
- wxASSERT_MSG( win->GetEventHandler()->IsKindOf(CLASSINFO(wxResourceEditorControlHandler)), "Wrong kind of handler in DeleteResource" );
-
- if (childHandler->IsSelected())
- {
- RemoveSelection(item);
- childHandler->SelectItem(FALSE);
-#ifndef __WXGTK__
- item->GetParent()->Refresh();
-#endif
- }
- }
+ DeselectItemIfNecessary(win);
wxItemResource *res = FindResourceForWindow(win);
// Deletes 'win' and creates a new window from the resource that
// was associated with it. E.g. if you can't change properties on the
// fly, you'll need to delete the window and create it again.
-wxWindow *wxResourceManager::RecreateWindowFromResource(wxWindow *win, wxWindowPropertyInfo *info)
+wxWindow *wxResourceManager::RecreateWindowFromResource(wxWindow *win, wxWindowPropertyInfo *info, bool instantiateFirst)
{
wxItemResource *resource = FindResourceForWindow(win);
info = newInfo;
}
- info->InstantiateResource(resource);
+ // May not always want to copy values back from the resource
+ if (instantiateFirst)
+ info->InstantiateResource(resource);
wxWindow *newWin = NULL;
wxWindow *parent = win->GetParent();
void wxResourceEditorFrame::OnCloseWindow(wxCloseEvent& event)
{
+ wxPropertyInfo::CloseWindow();
if (manager->Modified())
{
if (!manager->Clear(TRUE, FALSE))
}
case OBJECT_MENU_DELETE:
{
- if (data->IsKindOf(CLASSINFO(wxControl)) && (data->GetEventHandler() != data))
- {
- // Deselect and refresh window in case we leave selection
- // handles behind
- wxControl *item = (wxControl *)data;
- wxResourceEditorControlHandler *childHandler = (wxResourceEditorControlHandler *)item->GetEventHandler();
- if (childHandler->IsSelected())
- {
- wxResourceManager::GetCurrentResourceManager()->RemoveSelection(item);
- childHandler->SelectItem(FALSE);
-#ifndef __WXGTK__
- item->GetParent()->Refresh();
-#endif
- }
- }
+ wxResourceManager::GetCurrentResourceManager()->DeselectItemIfNecessary(data);
wxResourceManager::GetCurrentResourceManager()->SaveInfoAndDeleteHandler(data);
wxResourceManager::GetCurrentResourceManager()->DeleteResource(data);
// Deletes 'win' and creates a new window from the resource that
// was associated with it. E.g. if you can't change properties on the
// fly, you'll need to delete the window and create it again.
- virtual wxWindow *RecreateWindowFromResource(wxWindow *win, wxWindowPropertyInfo *info = NULL);
+ virtual wxWindow *RecreateWindowFromResource(wxWindow *win, wxWindowPropertyInfo *info = NULL, bool instantiateFirst = TRUE);
virtual bool RecreateSelection();
+ // Remove selection handles if this control is selected
+ void DeselectItemIfNecessary(wxWindow *win);
+
// Need to search through resource table removing this from
// any resource which has this as a parent.
virtual bool RemoveResourceFromParent(wxItemResource *res);
}
else
{
- 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;
-
- // Close the window, so we can create a new one for the different window
- sm_propertyWindow->Destroy();
- sm_propertyWindow = (wxDialogEditorPropertyListFrame *) NULL;
+ CloseWindow(); // Close the window so we can open a new one
}
}
propSheet->SetAllModified(FALSE);
wxResourcePropertyListView *view = new wxResourcePropertyListView(this, NULL,
- wxPROP_BUTTON_OK | wxPROP_BUTTON_CANCEL |
+ wxPROP_BUTTON_OK | // wxPROP_BUTTON_CANCEL |
wxPROP_BUTTON_CHECK_CROSS|wxPROP_DYNAMIC_VALUE_FIELD|wxPROP_PULLDOWN|wxPROP_SHOWVALUES);
wxDialogEditorPropertyListFrame *propWin = new wxDialogEditorPropertyListFrame(view,
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
*/
{
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 if (name == "name")
bool wxItemPropertyInfo::SetProperty(wxString& name, wxProperty *property)
{
wxControl *itemWindow = (wxControl *)m_propertyWindow;
+#if 0
wxFont *font = & itemWindow->GetFont();
if (font && (name == "fontPoints" || name == "fontFamily" || name == "fontStyle" || name == "fontWeight" || name == "fontUnderlined" ))
itemWindow->SetFont(* newFont);
return TRUE;
}
- else if (name == "label")
+ else
+#endif
+ if (name == "label")
{
itemWindow->SetLabel(property->GetValue().StringValue());
return TRUE;
wxRadioBox *radioBox = (wxRadioBox *)m_propertyWindow;
if (name == "numberRowsOrCols")
{
+ wxResourceManager::GetCurrentResourceManager()->DeselectItemIfNecessary(radioBox);
+
radioBox->SetNumberOfRowsOrCols((int)property->GetValue().IntegerValue());
m_propertyWindow = wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(radioBox, this);
return TRUE;
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);
+ m_propertyWindow = wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(radioBox, this, FALSE);
return TRUE;
}
else if (name == "values")
expr = expr->GetNext();
}
resource->SetStringValues(stringList);
- m_propertyWindow = wxResourceManager::GetCurrentResourceManager()->RecreateWindowFromResource(radioBox, this);
+ 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);
}
virtual bool SetProperty(wxString& propName, wxProperty *property) = 0;
virtual void GetPropertyNames(wxStringList& names) = 0;
virtual bool Edit(wxWindow *parent, const wxString& title);
+ static void CloseWindow(); // Close the current window if open.
};
// For all windows