X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e7445ff8ee26e39fab1e35455e1bef954bdf636f..0f5378d414cb68caaa535199c1af12dec1720c3d:/src/common/choiccmn.cpp diff --git a/src/common/choiccmn.cpp b/src/common/choiccmn.cpp index cf053fb611..004efb24f0 100644 --- a/src/common/choiccmn.cpp +++ b/src/common/choiccmn.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: common/choiccmn.cpp +// Name: src/common/choiccmn.cpp // Purpose: common (to all ports) wxChoice functions // Author: Vadim Zeitlin // Modified by: @@ -26,11 +26,75 @@ #if wxUSE_CHOICE +#include "wx/choice.h" + +#include "wx/private/textmeasure.h" + #ifndef WX_PRECOMP - #include "wx/choice.h" #endif -WXDLLIMPEXP_DATA_CORE(const wxChar) wxChoiceNameStr[] = wxT("choice"); +const char wxChoiceNameStr[] = "choice"; + + +wxDEFINE_FLAGS( wxChoiceStyle ) +wxBEGIN_FLAGS( wxChoiceStyle ) +// new style border flags, we put them first to +// use them for streaming out +wxFLAGS_MEMBER(wxBORDER_SIMPLE) +wxFLAGS_MEMBER(wxBORDER_SUNKEN) +wxFLAGS_MEMBER(wxBORDER_DOUBLE) +wxFLAGS_MEMBER(wxBORDER_RAISED) +wxFLAGS_MEMBER(wxBORDER_STATIC) +wxFLAGS_MEMBER(wxBORDER_NONE) + +// old style border flags +wxFLAGS_MEMBER(wxSIMPLE_BORDER) +wxFLAGS_MEMBER(wxSUNKEN_BORDER) +wxFLAGS_MEMBER(wxDOUBLE_BORDER) +wxFLAGS_MEMBER(wxRAISED_BORDER) +wxFLAGS_MEMBER(wxSTATIC_BORDER) +wxFLAGS_MEMBER(wxBORDER) + +// standard window styles +wxFLAGS_MEMBER(wxTAB_TRAVERSAL) +wxFLAGS_MEMBER(wxCLIP_CHILDREN) +wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW) +wxFLAGS_MEMBER(wxWANTS_CHARS) +wxFLAGS_MEMBER(wxFULL_REPAINT_ON_RESIZE) +wxFLAGS_MEMBER(wxALWAYS_SHOW_SB ) +wxFLAGS_MEMBER(wxVSCROLL) +wxFLAGS_MEMBER(wxHSCROLL) + +wxEND_FLAGS( wxChoiceStyle ) + +wxIMPLEMENT_DYNAMIC_CLASS_XTI(wxChoice, wxControl, "wx/choice.h") + +wxBEGIN_PROPERTIES_TABLE(wxChoice) +wxEVENT_PROPERTY( Select, wxEVT_CHOICE, wxCommandEvent ) + +wxPROPERTY( Font, wxFont, SetFont, GetFont , wxEMPTY_PARAMETER_VALUE, \ + 0 /*flags*/, wxT("Helpstring"), wxT("group")) +wxPROPERTY_COLLECTION( Choices, wxArrayString, wxString, AppendString, \ + GetStrings, 0 /*flags*/, wxT("Helpstring"), wxT("group")) +wxPROPERTY( Selection,int, SetSelection, GetSelection, wxEMPTY_PARAMETER_VALUE, \ + 0 /*flags*/, wxT("Helpstring"), wxT("group")) + +/* + TODO PROPERTIES + selection (long) + content (list) + item + */ + +wxPROPERTY_FLAGS( WindowStyle, wxChoiceStyle, long, SetWindowStyleFlag, \ + GetWindowStyleFlag, wxEMPTY_PARAMETER_VALUE, 0 /*flags*/, \ + wxT("Helpstring"), wxT("group")) // style +wxEND_PROPERTIES_TABLE() + +wxEMPTY_HANDLERS_TABLE(wxChoice) + +wxCONSTRUCTOR_4( wxChoice, wxWindow*, Parent, wxWindowID, Id, \ + wxPoint, Position, wxSize, Size ) // ============================================================================ // implementation @@ -41,6 +105,21 @@ wxChoiceBase::~wxChoiceBase() // this destructor is required for Darwin } +wxSize wxChoiceBase::DoGetBestSize() const +{ + // a reasonable width for an empty choice list + wxSize best(80, -1); + + const unsigned int nItems = GetCount(); + if ( nItems > 0 ) + { + wxTextMeasure txm(this); + best.x = txm.GetLargestStringExtent(GetStrings()).x; + } + + return best; +} + // ---------------------------------------------------------------------------- // misc // ---------------------------------------------------------------------------- @@ -48,8 +127,7 @@ wxChoiceBase::~wxChoiceBase() void wxChoiceBase::Command(wxCommandEvent& event) { SetSelection(event.GetInt()); - (void)ProcessEvent(event); + (void)GetEventHandler()->ProcessEvent(event); } #endif // wxUSE_CHOICE -