Improve printing. More API functions for printer DCs (to get
printer characteristics) and more reliable printing framework.
+Add GetIcon, GetBitmap to wxImageList. Perhaps store bitmaps
+in image list so we can get them later.
+
LOW PRIORITY
------------
* Styles for wxListBox
*/
-// In wxListBox style flag
-#define wxSB_MASK 0x0008
-#define wxNEEDED_SB 0x0000
-#define wxALWAYS_SB 0x0008
-
-// New naming convention
-#define wxLB_NEEDED_SB wxNEEDED_SB
-#define wxLB_ALWAYS_SB wxALWAYS_SB
#define wxLB_SORT 0x0010
-// These duplicate the styles in the Multiple argument
-#define wxLB_SINGLE 0x0000
+#define wxLB_SINGLE 0x0020
#define wxLB_MULTIPLE 0x0040
#define wxLB_EXTENDED 0x0080
// wxLB_OWNERDRAW is Windows-only
#define wxLB_OWNERDRAW 0x0100
+#define wxLB_NEEDED_SB 0x0200
+#define wxLB_ALWAYS_SB 0x0400
#define wxLB_HSCROLL wxHSCROLL
/*
#define wxTE_READONLY 0x0010
#define wxTE_MULTILINE 0x0020
-// TODO For backward compatibility, need wxOLD_READONLY
-#define wxREADONLY wxTE_READONLY
-#define wxEDITABLE 0
-
// MSW-only
#define wxTE_RICHTEXT 0x0020
* wxComboBox style flags
*/
#define wxCB_SIMPLE 0x0004
-#define wxCB_DROPDOWN 0x0000
#define wxCB_SORT 0x0008
-#define wxCB_READONLY wxREADONLY
+#define wxCB_READONLY 0x0010
+#define wxCB_DROPDOWN 0x0020
/*
* wxRadioBox/wxRadioButton style flags
inline WXHWND *GetRadioButtons(void) const { return m_radioButtons; }
bool ContainsHWND(WXHWND hWnd) const ;
+ long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
+
protected:
WXHWND * m_radioButtons;
int m_majorDim ;
{ "wxLB_SINGLE", wxLB_SINGLE },
{ "wxLB_MULTIPLE", wxLB_MULTIPLE },
{ "wxLB_EXTENDED", wxLB_EXTENDED },
- { "wxNEEDED_SB", wxNEEDED_SB },
- { "wxALWAYS_SB", wxALWAYS_SB },
{ "wxLB_NEEDED_SB", wxLB_NEEDED_SB },
{ "wxLB_ALWAYS_SB", wxLB_ALWAYS_SB },
{ "wxLB_SORT", wxLB_SORT },
{ "wxDEFAULT_DIALOG_STYLE", wxDEFAULT_DIALOG_STYLE},
{ "wxBORDER", wxBORDER},
{ "wxRETAINED", wxRETAINED},
- { "wxEDITABLE", wxEDITABLE},
- { "wxREADONLY", wxREADONLY},
{ "wxNATIVE_IMPL", 0},
{ "wxEXTENDED_IMPL", 0},
{ "wxBACKINGSTORE", wxBACKINGSTORE},
// Subclass again for purposes of dialog editing mode
SubclassWin((WXHWND)wx_button);
- // TODO? If in future we have a facility for having a label as well
- // as a bitmap, set the font.
-// SetFont(parent->GetFont()) ;
+ SetFont(* parent->GetFont()) ;
SetSize(x, y, width, height);
ShowWindow(wx_button, SW_SHOW);
}
// If non-default width...
- if (width >= 0)
- control_width = (float)width;
+ if (w1 >= 0)
+ control_width = (float)w1;
control_height = (float)h1;
wxString wxControl::GetLabel(void) const
{
- wxBuffer[0] = 0;
- if (GetHWND())
- GetWindowText((HWND)GetHWND(), wxBuffer, 1000);
+ wxBuffer[0] = 0;
+ if (GetHWND())
+ {
+ int len = GetWindowText((HWND)GetHWND(), wxBuffer, 256);
+ wxBuffer[len] = 0;
+ }
return wxString(wxBuffer);
}
if (parent) parent->AddChild(this);
m_rangeMax = range;
+ m_gaugePos = 0;
SetBackgroundColour(parent->GetDefaultBackgroundColour()) ;
SetForegroundColour(parent->GetDefaultForegroundColour()) ;
if (parent) parent->AddChild(this);
m_rangeMax = range;
+ m_gaugePos = 0;
SetBackgroundColour(parent->GetDefaultBackgroundColour()) ;
SetForegroundColour(parent->GetDefaultForegroundColour()) ;
SubclassWin(GetHWND());
+ SetWindowText((HWND) m_hWnd, "");
+
+ SetFont(* parent->GetFont());
+
if ( m_windowStyle & wxSL_LABELS )
{
// Finally, create max value static item
0, 0, 0, 0, (HWND) parent->GetHWND(), (HMENU)NewControlId(),
wxGetInstance(), NULL);
- SetFont(parent->GetFont());
if (GetFont())
{
else
{
// No labels
+ // If we're prepared to use the existing size, then...
+ if (width == -1 && height == -1 && ((sizeFlags & wxSIZE_AUTO) != wxSIZE_AUTO))
+ {
+ GetSize(&w1, &h1);
+ }
if ( w1 < 0 )
w1 = 200;
if ( h1 < 0 )
else
{
// No labels
+ // If we're prepared to use the existing size, then...
+ if (width == -1 && height == -1 && ((sizeFlags & wxSIZE_AUTO) != wxSIZE_AUTO))
+ {
+ GetSize(&w1, &h1);
+ }
if ( w1 < 0 )
w1 = 20;
if ( h1 < 0 )
// Subclass again for purposes of dialog editing mode
SubclassWin((WXHWND) static_item);
+
+ SetFont(* GetParent()->GetFont());
+
SetSize(x, y, width, height);
return TRUE;
}
long wxStaticBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
{
- // TODO: somehow, this has to accept mouse clicks in user interface edit mode,
- // but not otherwise. Only there is no longer a UI edit mode...
-
- // It worked before because the message could be processed if not in UI
- // edit mode. We have to find some way of distinguishing this.
- // Maybe this class can have an AcceptMouseEvents(bool) function; a sort of
- // kludge... or, we can search for an active event table entry that will
- // intercept mouse events, and if one exists (that isn't the default),
- // skip the code below. Too time consuming though.
- // Perhaps it's ok to do the default thing *anyway* because the title or edge
- // of the window may still be active!
-// if (nMsg == WM_NCHITTEST)
-// return Default();
-
if (nMsg == WM_NCHITTEST)
{
int xPos = LOWORD(lParam); // horizontal position of cursor
case RESED_CHOICE:
resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxChoice", x, y);
break;
+ case RESED_COMBOBOX:
+ resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxComboBox", x, y);
+ break;
case RESED_CHECKBOX:
resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxCheckBox", x, y);
break;
}
}
-#if 0
-void wxResourceEditorDialogHandler::OnLeftClick(int x, int y, int keys)
-{
- if (keys & wxKEY_CTRL)
- {
- wxResourceManager::GetCurrentResourceManager()->EditWindow(handlerDialog);
- return;
- }
-
- // Deselect all items if click on panel
- if (resourceManager->GetEditorPalette()->currentlySelected == PALETTE_ARROW)
- {
- int needsRefresh = 0;
- wxNode *node = handlerDialog->GetChildren()->First();
- while (node)
- {
- wxControl *item = (wxControl *)node->Data();
- wxResourceEditorControlHandler *childHandler = (wxResourceEditorControlHandler *)item->GetEventHandler();
- if (item->IsKindOf(CLASSINFO(wxControl)) && childHandler->IsSelected())
- {
- needsRefresh ++;
- OnItemSelect(item, FALSE);
- childHandler->SelectItem(FALSE);
- }
- node = node->Next();
- }
- if (needsRefresh > 0)
- {
- wxClientDC dc(handlerDialog);
- dc.Clear();
- handlerDialog->Refresh();
- }
- return;
- }
-
- wxResourceManager* manager = resourceManager;
-
- switch (resourceManager->GetEditorPalette()->currentlySelected)
- {
- case PALETTE_FRAME:
- break;
- case PALETTE_DIALOG_BOX:
- break;
- case PALETTE_PANEL:
- break;
- case PALETTE_CANVAS:
- break;
- case PALETTE_TEXT_WINDOW:
- break;
- case PALETTE_BUTTON:
- resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxButton", x, y);
- break;
- case PALETTE_BITMAP_BUTTON:
- resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxButton", x, y, TRUE);
- break;
- case PALETTE_MESSAGE:
- resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxStaticText", x, y);
- break;
- case PALETTE_BITMAP_MESSAGE:
- resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxStaticBitmap", x, y, TRUE);
- break;
- case PALETTE_TEXT:
- resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxTextCtrl (single-line)", x, y);
- break;
- case PALETTE_MULTITEXT:
- resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxTextCtrl (multi-line)", x, y);
- break;
- case PALETTE_CHOICE:
- resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxChoice", x, y);
- break;
- case PALETTE_CHECKBOX:
- resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxCheckBox", x, y);
- break;
- case PALETTE_RADIOBOX:
- resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxRadioBox", x, y);
- break;
- case PALETTE_LISTBOX:
- resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxListBox", x, y);
- break;
- case PALETTE_SLIDER:
- resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxSlider", x, y);
- break;
- case PALETTE_GAUGE:
- resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxGauge", x, y);
- break;
- case PALETTE_GROUPBOX:
- resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxStaticBox", x, y);
- break;
- case PALETTE_SCROLLBAR:
- resourceManager->CreatePanelItem(handlerResource, handlerDialog, "wxScrollBar", x, y);
- break;
- default:
- break;
- }
-
- // Now switch pointer on.
- if (manager->GetEditorPalette()->currentlySelected != PALETTE_ARROW)
- {
- manager->GetEditorPalette()->ToggleTool(manager->GetEditorPalette()->currentlySelected, FALSE);
- manager->GetEditorPalette()->ToggleTool(PALETTE_ARROW, TRUE);
- manager->GetEditorPalette()->currentlySelected = PALETTE_ARROW;
- }
-}
-#endif
-
void wxResourceEditorDialogHandler::OnRightClick(int x, int y, int keys)
{
wxMenu *menu = resourceManager->GetPopupMenu();
else if (itemType == "wxMessage" || itemType == "wxStaticText")
{
prefix = "ID_STATIC";
- MakeUniqueName("message", buf);
+ MakeUniqueName("statictext", buf);
res->SetName(buf);
if (isBitmap)
newItem = new wxStaticBitmap(panel, -1, m_bitmapImage, wxPoint(x, y), wxSize(0, 0), 0, buf);
else
- newItem = new wxStaticText(panel, -1, "Message", wxPoint(x, y), wxSize(-1, -1), 0, buf);
+ newItem = new wxStaticText(panel, -1, "Static", wxPoint(x, y), wxSize(-1, -1), 0, buf);
}
else if (itemType == "wxStaticBitmap")
{
prefix = "ID_STATICBITMAP";
- MakeUniqueName("message", buf);
+ MakeUniqueName("static", buf);
res->SetName(buf);
newItem = new wxStaticBitmap(panel, -1, m_bitmapImage, wxPoint(x, y), wxSize(-1, -1), 0, buf);
}
res->SetName(buf);
newItem = new wxChoice(panel, -1, wxPoint(x, y), wxSize(-1, -1), 0, NULL, 0, wxDefaultValidator, buf);
}
+ else if (itemType == "wxComboBox")
+ {
+ prefix = "ID_COMBOBOX";
+ MakeUniqueName("combobox", buf);
+ res->SetName(buf);
+ newItem = new wxComboBox(panel, -1, "", wxPoint(x, y), wxSize(-1, -1), 0, NULL, wxCB_DROPDOWN, wxDefaultValidator, buf);
+ }
else if (itemType == "wxGroupBox" || itemType == "wxStaticBox")
{
prefix = "ID_STATICBOX";
- MakeUniqueName("group", buf);
+ MakeUniqueName("staticbox", buf);
res->SetName(buf);
- newItem = new wxStaticBox(panel, -1, "Groupbox", wxPoint(x, y), wxSize(200, 200), 0, buf);
+ newItem = new wxStaticBox(panel, -1, "Static", wxPoint(x, y), wxSize(200, 200), 0, buf);
}
else if (itemType == "wxGauge")
{
else
{
DisassociateResource(resource);
+ if (win->GetEventHandler() != win)
+ win->PopEventHandler(TRUE);
+
DeleteWindow(win);
newWin = m_resourceTable.CreateItem((wxPanel *)parent, resource);
+ newWin->PushEventHandler(new wxResourceEditorControlHandler((wxControl*) newWin, (wxControl*) newWin));
AssociateResource(resource, newWin);
UpdateResourceList();
}
{
info = new wxChoicePropertyInfo(win);
}
+ else if (win->IsKindOf(CLASSINFO(wxComboBox)))
+ {
+ info = new wxComboBoxPropertyInfo(win);
+ }
else if (win->IsKindOf(CLASSINFO(wxButton)))
{
info = new wxButtonPropertyInfo(win);
else if (itemType == "wxStaticBox")
{
GenerateControlStyleString(itemType, item->GetStyle(), styleBuf);
- stream << item->GetId() << ", " << "wxGroupBox, " << SafeWord(item->GetTitle()) << ", '" << styleBuf << "', ";
+ stream << item->GetId() << ", " << "wxStaticBox, " << SafeWord(item->GetTitle()) << ", '" << styleBuf << "', ";
stream << SafeWord(item->GetName()) << ", " << item->GetX() << ", " << item->GetY() << ", ";
stream << item->GetWidth() << ", " << item->GetHeight();
if (item->GetFont())
stream << item->GetWidth() << ", " << item->GetHeight();
if (itemType == "wxComboBox")
- stream << SafeWord(item->GetValue4()) << ", ";
+ stream << ", " << SafeWord(item->GetValue4());
// Default list of values
}
stream << ").\";\n\n";
}
+ else
+ {
+ wxString str("Unimplemented resource type: ");
+ str += itemType;
+ wxMessageBox(str);
+ }
return TRUE;
}
// Fill in the wxItemResource members to mirror the current window settings
bool wxWindowPropertyInfo::InstantiateResource(wxItemResource *resource)
{
- resource->SetType(propertyWindow->GetClassInfo()->GetClassName());
+// resource->SetType(propertyWindow->GetClassInfo()->GetClassName());
// resource->SetStyle(propertyWindow->GetWindowStyleFlag());
wxString str(propertyWindow->GetName());
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
*/
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 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);
}
return TRUE;
}
- else if (name == "min_value")
+ else if (name == "minValue")
{
slider->SetRange((int)property->GetValue().IntegerValue(), slider->GetMax());
return TRUE;
}
- else if (name == "max_value")
+ else if (name == "maxValue")
{
slider->SetRange(slider->GetMin(), (int)property->GetValue().IntegerValue());
return TRUE;
wxItemPropertyInfo::GetPropertyNames(names);
names.Add("value");
names.Add("orientation");
- names.Add("min_value");
- names.Add("max_value");
+ names.Add("minValue");
+ names.Add("maxValue");
}
bool wxSliderPropertyInfo::InstantiateResource(wxItemResource *resource)
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 if (name == "maxValue")
+ return new wxProperty("maxValue", (long)gauge->GetRange(), "integer");
else
return wxItemPropertyInfo::GetProperty(name);
}
gauge->SetValue((int)property->GetValue().IntegerValue());
return TRUE;
}
- else if (name == "max_value")
+ else if (name == "maxValue")
{
gauge->SetRange((int)property->GetValue().IntegerValue());
return TRUE;
{
wxItemPropertyInfo::GetPropertyNames(names);
names.Add("value");
- names.Add("max_value");
+ names.Add("maxValue");
}
bool wxGaugePropertyInfo::InstantiateResource(wxItemResource *resource)
bool InstantiateResource(wxItemResource *resource);
};
+// For choice items
+class wxComboBoxPropertyInfo: public wxChoicePropertyInfo
+{
+ protected:
+ public:
+ wxComboBoxPropertyInfo(wxWindow *win, wxItemResource *res = NULL):
+ wxChoicePropertyInfo(win, res) {}
+ ~wxComboBoxPropertyInfo(void) {}
+ wxProperty *GetProperty(wxString& name);
+ bool SetProperty(wxString& name, wxProperty *property);
+ void GetPropertyNames(wxStringList& names);
+ bool InstantiateResource(wxItemResource *resource);
+};
+
// For radiobox items
class wxRadioBoxPropertyInfo: public wxItemPropertyInfo
{
{ "wxSTATIC_BORDER", wxSTATIC_BORDER},
{ "wxTRANSPARENT_WINDOW", wxTRANSPARENT_WINDOW},
{ "wxNO_BORDER", wxNO_BORDER},
- { "wxCLIP_CHILDREN", wxCLIP_CHILDREN},
- { "wxRETAINED", wxRETAINED},
+ { "wxCLIP_CHILDREN", wxCLIP_CHILDREN}
+
+/* Would be duplicated with e.g. wxLB_HSCROLL
{ "wxVSCROLL", wxVSCROLL },
{ "wxHSCROLL", wxHSCROLL }
+*/
};
int g_WindowStylesWindowCount = sizeof(g_WindowStylesWindow)/sizeof(wxWindowStylePair) ;