#include "wx/tipwin.h"
+#if wxUSE_TIPWINDOW
+
+#include "wx/timer.h"
+#include "wx/settings.h"
+
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
// event tables
// ----------------------------------------------------------------------------
-BEGIN_EVENT_TABLE(wxTipWindow, wxFrame)
- EVT_PAINT(wxTipWindow::OnPaint)
-
+BEGIN_EVENT_TABLE(wxTipWindow, wxPopupTransientWindow)
EVT_LEFT_DOWN(wxTipWindow::OnMouseClick)
EVT_RIGHT_DOWN(wxTipWindow::OnMouseClick)
EVT_MIDDLE_DOWN(wxTipWindow::OnMouseClick)
- EVT_KILL_FOCUS(wxTipWindow::OnKillFocus)
- EVT_ACTIVATE(wxTipWindow::OnActivate)
+ EVT_PAINT(wxTipWindow::OnPaint)
END_EVENT_TABLE()
+
// ----------------------------------------------------------------------------
// wxTipWindow
// ----------------------------------------------------------------------------
wxTipWindow::wxTipWindow(wxWindow *parent,
const wxString& text,
- wxCoord maxLength)
- : wxFrame(parent, -1, _T(""),
- wxDefaultPosition, wxDefaultSize,
- wxNO_BORDER | wxFRAME_FLOAT_ON_PARENT)
+ wxCoord maxLength, wxTipWindow** windowPtr)
+ : wxPopupTransientWindow(parent)
{
+ m_windowPtr = windowPtr;
+
// set colours
SetForegroundColour(*wxBLACK);
- SetBackgroundColour(wxColour(0xc3ffff));
- // set position and size
- int x, y;
- wxGetMousePosition(&x, &y);
- Move(x, y + 20);
+#ifdef __WXMSW__
+ wxColour bkCol(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_INFOBK));
+#else
+ wxColour bkCol(wxColour(255, 255, 225));
+#endif
+ SetBackgroundColour(bkCol);
+ // set size and position
Adjust(text, maxLength);
+ int x, y;
+ wxGetMousePosition(&x, &y);
+ Position(wxPoint(x, y+10), wxSize(0,0));
+ //Show(TRUE);
+ Popup();
SetFocus();
+}
+
+wxTipWindow::~wxTipWindow()
+{
+ if (m_windowPtr)
+ {
+ *m_windowPtr = NULL;
+ }
+}
+
+void wxTipWindow::OnMouseClick(wxMouseEvent& WXUNUSED(event))
+{
+ Close();
+}
+
+
+void wxTipWindow::OnPaint(wxPaintEvent& WXUNUSED(event))
+{
+ wxPaintDC dc(this);
+
+ wxRect rect;
+ wxSize size = GetClientSize();
+ rect.width = size.x;
+ rect.height = size.y;
+
+ // first filll the background
+ dc.SetBrush(wxBrush(GetBackgroundColour(), wxSOLID));
+
+ dc.SetPen( * wxBLACK_PEN );
+ dc.DrawRectangle(rect);
+
+ // and then draw the text line by line
+ dc.SetFont(GetFont());
+
+ wxPoint pt;
+ pt.x = TEXT_MARGIN_X;
+ pt.y = TEXT_MARGIN_Y;
+ size_t count = m_textLines.GetCount();
+ for ( size_t n = 0; n < count; n++ )
+ {
+ dc.DrawText(m_textLines[n], pt);
- Show(TRUE);
+ pt.y += m_heightLine;
+ }
}
+
void wxTipWindow::Adjust(const wxString& text, wxCoord maxLength)
{
wxClientDC dc(this);
// take into account the border size and the margins
SetClientSize(2*(TEXT_MARGIN_X + 1) + widthMax,
- 2*(TEXT_MARGIN_Y + 1) + m_textLines.GetCount()*m_heightLine);
+ 2*(TEXT_MARGIN_Y + 1) + m_textLines.GetCount() * m_heightLine);
}
-void wxTipWindow::OnPaint(wxPaintEvent& event)
-{
- wxPaintDC dc(this);
-
- wxRect rect;
- wxSize size = GetClientSize();
- rect.width = size.x;
- rect.height = size.y;
-
- // first filll the background
- dc.SetBrush(wxBrush(GetBackgroundColour(), wxSOLID));
-
- // Under Windows, you apparently get a thin black border whether you like it or not :-(
-#ifdef __WXMSW__
- dc.SetPen( * wxTRANSPARENT_PEN );
-#else
- dc.SetPen( * wxBLACK_PEND );
-#endif
- dc.DrawRectangle(rect);
-
- // and then draw the text line by line
- dc.SetFont(GetFont());
-
- wxPoint pt;
- pt.x = TEXT_MARGIN_X;
- pt.y = TEXT_MARGIN_Y;
- size_t count = m_textLines.GetCount();
- for ( size_t n = 0; n < count; n++ )
- {
- dc.DrawText(m_textLines[n], pt);
-
- pt.y += m_heightLine;
- }
-}
-void wxTipWindow::OnMouseClick(wxMouseEvent& event)
+void wxTipWindow::Close()
{
- Close();
+ Show(FALSE);
+ Destroy();
}
-void wxTipWindow::OnActivate(wxActivateEvent& event)
-{
- if (!event.GetActive())
- Close();
-}
+#endif // wxUSE_TIPWINDOW
-void wxTipWindow::OnKillFocus(wxFocusEvent& event)
-{
- Close();
-}