Add support for wxSTB_ELLIPSIZE_* and for wxSTB_SHOW_TIPS flags under wxMSW

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60388 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Francesco Montorsi
2009-04-26 13:37:16 +00:00
parent 6540d8d2ba
commit 6418ad5ec8
6 changed files with 245 additions and 45 deletions

View File

@@ -14,6 +14,9 @@
#if wxUSE_NATIVE_STATUSBAR
#include "wx/vector.h"
#include "wx/tooltip.h"
class WXDLLIMPEXP_FWD_CORE wxClientDC;
class WXDLLIMPEXP_CORE wxStatusBar : public wxStatusBarBase
@@ -41,7 +44,7 @@ public:
virtual void SetFieldsCount(int number = 1, const int *widths = NULL);
// each field of status line has it's own text
virtual void SetStatusText(const wxString& text, int number = 0);
virtual void SetStatusText(const wxString& text, int number = 0);
// set status line fields' widths
virtual void SetStatusWidths(int n, const int widths_field[]);
@@ -64,6 +67,7 @@ public:
virtual WXLRESULT MSWWindowProc(WXUINT nMsg,
WXWPARAM wParam,
WXLPARAM lParam);
protected:
void CopyFieldsWidth(const int widths[]);
void SetFieldsWidth();
@@ -72,10 +76,17 @@ protected:
// override some base class virtuals
virtual wxSize DoGetBestSize() const;
virtual void DoMoveWindow(int x, int y, int width, int height);
#if wxUSE_TOOLTIPS
virtual bool MSWProcessMessage(WXMSG* pMsg);
virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM* result);
#endif
// used by UpdateFieldText
wxClientDC *m_pDC;
// the tooltips used when wxSTB_SHOW_TIPS is given
wxVector<wxToolTip*> m_tooltips;
private:
DECLARE_DYNAMIC_CLASS_NO_COPY(wxStatusBar)
};

View File

@@ -22,6 +22,11 @@ public:
// ctor & dtor
wxToolTip(const wxString &tip);
virtual ~wxToolTip();
// ctor used by wxStatusBar to associate a tooltip to a portion of
// the status bar window:
wxToolTip(wxWindow* win, unsigned int id,
const wxString &tip, const wxRect& rc);
// accessors
// tip text
@@ -49,14 +54,18 @@ public:
// implementation only from now on
// -------------------------------
// should be called in responde to WM_MOUSEMOVE
// should be called in response to WM_MOUSEMOVE
static void RelayEvent(WXMSG *msg);
// add a window to the tooltip control
void Add(WXHWND hwnd);
// remove any tooltip from the window
static void Remove(WXHWND hwnd);
static void Remove(WXHWND hwnd, unsigned int id, const wxRect& rc);
// the rect we're associated with
void SetRect(const wxRect& rc);
const wxRect& GetRect() const { return m_rect; }
private:
// the one and only one tooltip control we use - never access it directly
@@ -73,7 +82,10 @@ private:
void Remove();
wxString m_text; // tooltip text
wxWindow *m_window; // window we're associated with
wxWindow* m_window; // window we're associated with
wxRect m_rect; // the rect of the window for which this tooltip is shown
// (or a rect with width/height == 0 to show it for the entire window)
unsigned int m_id; // the id of this tooltip (ignored when m_rect width/height is 0)
DECLARE_ABSTRACT_CLASS(wxToolTip)
wxDECLARE_NO_COPY_CLASS(wxToolTip);

View File

@@ -183,8 +183,21 @@ public:
virtual bool CanBeOutsideClientArea() const { return true; }
protected:
// wxWindow overrides:
virtual void DoSetToolTip( wxToolTip *tip )
{
wxASSERT_MSG(!HasFlag(wxSTB_SHOW_TIPS),
"Do not set tooltip(s) manually when using wxSTB_SHOW_TIPS!");
return wxWindow::DoSetToolTip(tip);
}
virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; }
// internal helpers & data:
// calculate the real field widths for the given total available size
wxArrayInt CalculateAbsWidths(wxCoord widthTotal) const;