#include "wx/checkbox.h"
#include "wx/tglbtn.h"
#include "wx/radiobut.h"
+#include "wx/slider.h"
// ----------------------------------------------------------------------------
// wxWin macros
// wxControl ctor/dtor
// ----------------------------------------------------------------------------
+void wxControl::Init()
+{
+ m_palmControl = false;
+ m_palmField = false;
+}
+
wxControl::~wxControl()
{
+ SetLabel(wxEmptyString);
m_isBeingDeleted = true;
+
+ DestroyChildren();
+
+ uint16_t index;
+ FormType* form = GetObjectFormIndex(index);
+ if(form!=NULL && index!=frmInvalidObjectId)
+ {
+ FrmRemoveObject((FormType **)&form,index);
+ }
}
// ----------------------------------------------------------------------------
}
bool wxControl::PalmCreateControl(ControlStyleType style,
- wxWindow *parent,
- wxWindowID id,
const wxString& label,
const wxPoint& pos,
- const wxSize& size)
+ const wxSize& size,
+ int groupID)
+{
+ FormType* form = GetParentForm();
+ if(form==NULL)
+ return false;
+
+ ControlType *control = CtlNewControl(
+ (void **)&form,
+ GetId(),
+ style,
+ wxEmptyString,
+ ( pos.x == wxDefaultCoord ) ? winUndefConstraint : pos.x,
+ ( pos.y == wxDefaultCoord ) ? winUndefConstraint : pos.y,
+ ( size.x == wxDefaultCoord ) ? winUndefConstraint : size.x,
+ ( size.y == wxDefaultCoord ) ? winUndefConstraint : size.y,
+ stdFont,
+ groupID,
+ true
+ );
+
+ if(control==NULL)
+ return false;
+
+ m_palmControl = true;
+
+ SetLabel(label);
+ Show();
+ return true;
+}
+
+bool wxControl::PalmCreateField(const wxString& label,
+ const wxPoint& pos,
+ const wxSize& size,
+ bool editable,
+ bool underlined,
+ JustificationType justification)
{
- SetParent(parent);
- SetId( id == wxID_ANY ? NewControlId() : id );
FormType* form = GetParentForm();
if(form==NULL)
return false;
m_label = label;
- m_control = CtlNewControl(
- (void **)&form,
- GetId(),
- style,
- m_label.c_str(),
- ( pos.x == wxDefaultCoord ) ? winUndefConstraint : pos.x,
- ( pos.y == wxDefaultCoord ) ? winUndefConstraint : pos.y,
- ( size.x == wxDefaultCoord ) ? winUndefConstraint : size.x,
- ( size.y == wxDefaultCoord ) ? winUndefConstraint : size.y,
- stdFont,
- 0,
- false
- );
-
- if(m_control==NULL)
+ FieldType *field = FldNewField(
+ (void **)&form,
+ GetId(),
+ ( pos.x == wxDefaultCoord ) ? winUndefConstraint : pos.x,
+ ( pos.y == wxDefaultCoord ) ? winUndefConstraint : pos.y,
+ ( size.x == wxDefaultCoord ) ? winUndefConstraint : size.x,
+ ( size.y == wxDefaultCoord ) ? winUndefConstraint : size.y,
+ stdFont,
+ 10,
+ editable,
+ underlined,
+ false,
+ false,
+ justification,
+ false,
+ false,
+ false
+ );
+
+ if(field==NULL)
return false;
+ m_palmField = true;
+
Show();
+ SetLabel(label);
return true;
}
return tlw->GetForm();
}
+FormType* wxControl::GetObjectFormIndex(uint16_t& index) const
+{
+ FormType* form = GetParentForm();
+ if(form!=NULL)
+ index = FrmGetObjectIndex(form, GetId());
+ else
+ index = frmInvalidObjectId;
+ return form;
+}
+
+void* wxControl::GetObjectPtr() const
+{
+ uint16_t index;
+ FormType* form = GetObjectFormIndex(index);
+ if(form==NULL || index==frmInvalidObjectId)return NULL;
+ return FrmGetObjectPtr(form,index);
+}
+
wxBorder wxControl::GetDefaultBorder() const
{
// we want to automatically give controls a sunken style (confusingly,
bool wxControl::Enable(bool enable)
{
- if( m_control == NULL )
+ ControlType *control = (ControlType *)GetObjectPtr();
+ if( (IsPalmControl()) || (control == NULL))
return false;
- if( IsEnabled() == enable)
+ if( CtlEnabled(control) == enable)
return false;
- CtlSetEnabled( m_control, enable);
+ CtlSetEnabled( control, enable);
return true;
}
bool wxControl::IsEnabled() const
{
- if( m_control == NULL )
+ ControlType *control = (ControlType *)GetObjectPtr();
+ if( (IsPalmControl()) || (control == NULL))
return false;
- return CtlEnabled(m_control);
+ return CtlEnabled(control);
}
bool wxControl::IsShown() const
return true;
}
-void wxControl::SetLabel(const wxString& label)
+void wxControl::SetFieldLabel(const wxString& label)
{
- // setting in wrong control causes crash
- if ( ( wxDynamicCast(this,wxButton) != NULL ) ||
- ( wxDynamicCast(this,wxCheckBox) != NULL ) ||
- ( wxDynamicCast(this,wxRadioButton) != NULL ) ||
- ( wxDynamicCast(this,wxToggleButton) != NULL ) )
+ FieldType* field = (FieldType*)GetObjectPtr();
+ if(field==NULL)
+ return;
+
+ uint16_t newSize = label.Length() + 1;
+ MemHandle strHandle = FldGetTextHandle(field);
+ FldSetTextHandle(field, NULL );
+ if (strHandle)
{
- m_label = label;
- // TODO: as manual states, it crashes here
- // needs own manipulation on used string pointers
- // CtlSetLabel(m_control,m_label);
+ if(MemHandleResize(strHandle, newSize)!=errNone)
+ strHandle = 0;
}
+ else
+ {
+ strHandle = MemHandleNew( newSize );
+ }
+ if(!strHandle)
+ return;
+
+ char* str = (char*) MemHandleLock( strHandle );
+ if(str==NULL)
+ return;
+
+ strcpy(str, label.c_str());
+ MemHandleUnlock(strHandle);
+ FldSetTextHandle(field, strHandle);
+ FldRecalculateField(field, true);
+}
+
+void wxControl::SetControlLabel(const wxString& label)
+{
+ ControlType* control = (ControlType*)GetObjectPtr();
+ if(control==NULL)
+ return;
+ CtlSetLabel(control,wxEmptyString);
+ m_label = label;
+ if(!m_label.empty())
+ CtlSetLabel(control,m_label.c_str());
+}
+
+void wxControl::SetLabel(const wxString& label)
+{
+ if(IsPalmField())
+ SetFieldLabel(label);
+
+ // unlike other native controls, slider has no label
+ if(IsPalmControl() && !wxDynamicCast(this,wxSlider))
+ SetControlLabel(label);
+}
+
+wxString wxControl::GetFieldLabel()
+{
+ FieldType* field = (FieldType*)GetObjectPtr();
+ if(field==NULL)
+ return wxEmptyString;
+ return FldGetTextPtr(field);
+}
+
+wxString wxControl::GetControlLabel()
+{
+ ControlType* control = (ControlType*)GetObjectPtr();
+ if(control==NULL)
+ return wxEmptyString;
+ return CtlGetLabel(control);
}
wxString wxControl::GetLabel()
{
- // setting in wrong control causes crash
- if ( wxDynamicCast(this,wxButton) ||
- wxDynamicCast(this,wxCheckBox) ||
- wxDynamicCast(this,wxRadioButton) ||
- wxDynamicCast(this,wxToggleButton) )
- {
- return m_label;
- }
+ if(IsPalmField())
+ return GetFieldLabel();
+
+ // unlike other native controls, slider has no label
+ if(IsPalmControl() && !wxDynamicCast(this,wxSlider))
+ return GetControlLabel();
return wxEmptyString;
}