+ // Default coordinates based on the knowledgebase recipe "Buttons"
+ wxSize palmSize(size.x==wxDefaultCoord?36:size.x,
+ size.y==wxDefaultCoord?12:size.y);
+
+ // Default placement depends on dialog vs. frame type of parent
+ wxPoint palmPos(pos);
+ if((palmPos.x==wxDefaultCoord)||(palmPos.y==wxDefaultCoord))
+ {
+ wxSize parentSize(parent->GetClientSize());
+ wxWindow* parentTLW = parent;
+ while ( parentTLW && !parentTLW->IsTopLevel() )
+ {
+ parentTLW = parentTLW->GetParent();
+ }
+
+ if(wxDynamicCast(parentTLW, wxFrame)!=NULL)
+ {
+ if(palmPos.x==wxDefaultCoord)
+ palmPos.x = 0;
+ if(palmPos.y==wxDefaultCoord)
+ palmPos.y = parentSize.y-palmSize.y;
+ }
+ else if(wxDynamicCast(parentTLW, wxDialog)!=NULL)
+ {
+ if(palmPos.x==wxDefaultCoord)
+ palmPos.x = 4;
+ if(palmPos.y==wxDefaultCoord)
+ palmPos.y = parentSize.y-palmSize.y-5;
+ }
+ else
+ {
+ // something seriously broken
+ return false;
+ }
+ }
+
+ // take the stock label
+ wxString palmLabel = label;
+ if( palmLabel.empty() && wxIsStockID(id) )
+ palmLabel = wxGetStockLabel(id, false);
+
+ if(!wxControl::Create(parent, id, palmPos, palmSize, style, validator, name))
+ return false;
+
+ return wxControl::PalmCreateControl(buttonCtl, palmLabel, palmPos, palmSize);