// Name: wx/combo.h
// Purpose: wxComboCtrl declaration
// Author: Jaakko Salli
-// Modified by:
+// Modified by:
// Created: Apr-30-2006
// RCS-ID: $Id$
// Copyright: (c) Jaakko Salli
#if wxUSE_COMBOCTRL
-
-#include "wx/textctrl.h"
-#include "wx/button.h"
-#include "wx/combobox.h"
+#include "wx/control.h"
#include "wx/renderer.h" // this is needed for wxCONTROL_XXX flags
#include "wx/bitmap.h" // wxBitmap used by-value
-
+class WXDLLIMPEXP_CORE wxTextCtrl;
class WXDLLEXPORT wxComboPopup;
//
// In wxOwnerDrawnComboBox, for instance, it cycles item.
wxCC_SPECIAL_DCLICK = 0x0100,
- // Use keyboard behaviour alternate to platform default:
- // Up an down keys will show popup instead of cycling value.
- wxCC_ALT_KEYS = 0x0200,
-
// Dropbutton acts like standard push button.
- wxCC_STD_BUTTON = 0x0400
+ wxCC_STD_BUTTON = 0x0200
};
// Flags used by PreprocessMouseEvent and HandleButtonMouseEvent
enum
{
- wxCC_MF_ON_BUTTON = 0x0001 // cursor is on dropbutton area
+ wxCC_MF_ON_BUTTON = 0x0001, // cursor is on dropbutton area
+ wxCC_MF_ON_CLICK_AREA = 0x0002 // cursor is on dropbutton or other area
+ // that can be clicked to show the popup.
};
// set interface class instance derived from wxComboPopup
// NULL popup can be used to indicate default in a derived class
- virtual void SetPopupControl( wxComboPopup* popup );
+ void SetPopupControl( wxComboPopup* popup )
+ {
+ DoSetPopupControl(popup);
+ }
// get interface class instance derived from wxComboPopup
- wxComboPopup* GetPopupControl() const { return m_popupInterface; }
+ wxComboPopup* GetPopupControl()
+ {
+ EnsurePopupControl();
+ return m_popupInterface;
+ }
// get the popup window containing the popup control
wxWindow *GetPopupWindow() const { return m_winPopup; }
// (ie. wxComboPopup::SetStringValue doesn't get called).
void SetText(const wxString& value);
+ // This method sets value and also optionally sends EVT_TEXT
+ // (needed by combo popups)
+ void SetValueWithEvent(const wxString& value, bool withEvent = true);
+
//
// Popup customization methods
//
}
// Set position of dropdown button.
- // width: 0 > for specific custom width, negative to adjust to smaller than default
- // height: 0 > for specific custom height, negative to adjust to smaller than default
+ // width: button width. <= 0 for default.
+ // height: button height. <= 0 for default.
// side: wxLEFT or wxRIGHT, indicates on which side the button will be placed.
// spacingX: empty space on sides of the button. Default is 0.
// Remarks:
// There is no spacingY - the button will be centered vertically.
- void SetButtonPosition( int width = 0,
- int height = 0,
+ void SetButtonPosition( int width = -1,
+ int height = -1,
int side = wxRIGHT,
int spacingX = 0 );
+ // Returns current size of the dropdown button.
+ wxSize GetButtonSize();
//
// Sets dropbutton to be drawn with custom bitmaps.
return m_absIndent;
}
+ // Returns area covered by the text field.
+ const wxRect& GetTextRect() const
+ {
+ return m_tcArea;
+ }
+
//
// Utilies needed by the popups or native implementations
//
- // Draws focus background (on combo control) in a way typical on platform.
+ // Returns true if given key combination should toggle the popup.
+ // NB: This is a separate from other keyboard handling because:
+ // 1) Replaceability.
+ // 2) Centralized code (otherwise it'd be split up between
+ // wxComboCtrl key handler and wxVListBoxComboPopup's
+ // key handler).
+ virtual bool IsKeyPopupToggle(const wxKeyEvent& event) const = 0;
+
+ // Prepare background of combo control or an item in a dropdown list
+ // in a way typical on platform. This includes painting the focus/disabled
+ // background and setting the clipping region.
// Unless you plan to paint your own focus indicator, you should always call this
// in your wxComboPopup::PaintComboControl implementation.
// In addition, it sets pen and text colour to what looks good and proper
// flags: wxRendererNative flags: wxCONTROL_ISSUBMENU: is drawing a list item instead of combo control
// wxCONTROL_SELECTED: list item is selected
// wxCONTROL_DISABLED: control/item is disabled
- virtual void DrawFocusBackground( wxDC& dc, const wxRect& rect, int flags );
+ virtual void PrepareBackground( wxDC& dc, const wxRect& rect, int flags ) const;
// Returns true if focus indicator should be drawn in the control.
bool ShouldDrawFocus() const
void CreateTextCtrl( int extraStyle, const wxValidator& validator );
// Installs standard input handler to combo (and optionally to the textctrl)
- void InstallInputHandlers( bool alsoTextCtrl = true );
+ void InstallInputHandlers();
// Draws dropbutton. Using wxRenderer or bitmaps, as appropriate.
void DrawButton( wxDC& dc, const wxRect& rect, bool paintBg = true );
//bool HandleButtonMouseEvent( wxMouseEvent& event, bool isInside );
bool HandleButtonMouseEvent( wxMouseEvent& event, int flags );
- // Conversion to double-clicks and some basic filtering
// returns true if event was consumed or filtered (event type is also set to 0 in this case)
- //bool PreprocessMouseEvent( wxMouseEvent& event, bool isOnButtonArea );
bool PreprocessMouseEvent( wxMouseEvent& event, int flags );
//
// Creates popup window, calls interface->Create(), etc
void CreatePopup();
+ // Destroy popup window and all related constructs
+ void DestroyPopup();
+
// override the base class virtuals involved in geometry calculations
- virtual void DoMoveWindow(int x, int y, int width, int height);
virtual wxSize DoGetBestSize() const;
+ // NULL popup can be used to indicate default in a derived class
+ virtual void DoSetPopupControl(wxComboPopup* popup);
+
// ensures there is atleast the default popup
void EnsurePopupControl();
void OnFocusEvent(wxFocusEvent& event);
void OnTextCtrlEvent(wxCommandEvent& event);
void OnSysColourChanged(wxSysColourChangedEvent& event);
+ void OnKeyEvent(wxKeyEvent& event);
// Set customization flags (directs how wxComboCtrlBase helpers behave)
void Customize( wxUint32 flags ) { m_iFlags |= flags; }
virtual void DoSetToolTip( wxToolTip *tip );
#endif
- // Used by OnPaints of derived classes
- wxBitmap& GetBufferBitmap(const wxSize& sz) const;
-
// This is used when m_text is hidden (readonly).
wxString m_valueString;
// popup interface
wxComboPopup* m_popupInterface;
- // this is for this control itself
- wxEvtHandler* m_extraEvtHandler;
-
- // this is for text
+ // this is input etc. handler for the text control
wxEvtHandler* m_textEvtHandler;
// this is for the top level window
// this is for the control in popup
wxEvtHandler* m_popupExtraHandler;
- // needed for "instant" double-click handling
- wxLongLong m_timeLastMouseUp;
-
// used to prevent immediate re-popupping incase closed popup
// by clicking on the combo control (needed because of inconsistent
// transient implementation across platforms).
// is the popup window currenty shown?
bool m_isPopupShown;
- // Set to 1 on mouse down, 0 on mouse up. Used to eliminate down-less mouse ups.
- bool m_downReceived;
-
private:
void Init();
+ wxByte m_ignoreEvtText; // Number of next EVT_TEXTs to ignore
+
DECLARE_EVENT_TABLE()
DECLARE_ABSTRACT_CLASS(wxComboCtrlBase)