summaryrefslogtreecommitdiff
path: root/shared/customTooltip.cpp
diff options
context:
space:
mode:
authorDaniel Wilhelm <daniel@wili.li>2014-04-18 17:00:17 +0200
committerDaniel Wilhelm <daniel@wili.li>2014-04-18 17:00:17 +0200
commitfd0853d2623dd278b08288331ed42e3be59252fb (patch)
treea7645daeaef8bdbed064faf4eb88e72cee58726c /shared/customTooltip.cpp
parent2.1 (diff)
downloadFreeFileSync-fd0853d2623dd278b08288331ed42e3be59252fb.tar.gz
FreeFileSync-fd0853d2623dd278b08288331ed42e3be59252fb.tar.bz2
FreeFileSync-fd0853d2623dd278b08288331ed42e3be59252fb.zip
2.2
Diffstat (limited to 'shared/customTooltip.cpp')
-rw-r--r--shared/customTooltip.cpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/shared/customTooltip.cpp b/shared/customTooltip.cpp
new file mode 100644
index 00000000..bffaa45d
--- /dev/null
+++ b/shared/customTooltip.cpp
@@ -0,0 +1,89 @@
+#include "customTooltip.h"
+#include <wx/stattext.h>
+#include <wx/sizer.h>
+#include <wx/statbmp.h>
+
+
+class PopupFrameGenerated : public wxFrame
+{
+public:
+ PopupFrameGenerated(wxWindow* parent,
+ wxWindowID id = wxID_ANY,
+ const wxString& title = wxEmptyString,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxSize( -1,-1 ),
+ long style = wxFRAME_NO_TASKBAR | wxSTAY_ON_TOP | wxSTATIC_BORDER);
+
+ wxStaticText* m_staticTextMain;
+ wxStaticBitmap* m_bitmapLeft;
+};
+
+
+PopupFrameGenerated::PopupFrameGenerated(
+ wxWindow* parent,
+ wxWindowID id,
+ const wxString& title,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style ) : wxFrame(parent, id, title, pos, size, style)
+{
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+ this->SetBackgroundColour( wxColour( 255, 255, 255 ) );
+
+ wxBoxSizer* bSizer158;
+ bSizer158 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapLeft = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer158->Add( m_bitmapLeft, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticTextMain = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextMain->Wrap( -1 );
+ bSizer158->Add( m_staticTextMain, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ this->SetSizer( bSizer158 );
+ this->Layout();
+ bSizer158->Fit( this );
+}
+
+
+CustomTooltip::CustomTooltip() : tipWindow(new PopupFrameGenerated(NULL)), lastBmp(NULL)
+{
+ hide();
+}
+
+
+CustomTooltip::~CustomTooltip()
+{
+ tipWindow->Destroy();
+}
+
+
+void CustomTooltip::show(const wxString& text, wxPoint pos, const wxBitmap* bmp)
+{
+ if (bmp != lastBmp)
+ {
+ lastBmp = bmp;
+ tipWindow->m_bitmapLeft->SetBitmap(bmp == NULL ? wxNullBitmap : *bmp);
+ }
+
+ if (text != tipWindow->m_staticTextMain->GetLabel())
+ tipWindow->m_staticTextMain->SetLabel(text);
+
+#ifdef FFS_LINUX
+ tipWindow->Fit(); //Alas Fit() seems to be somewhat broken => this needs to be called EVERY time inside show, not only if text or bmp change.
+#endif
+
+ if (pos != tipWindow->GetScreenPosition())
+ tipWindow->SetSize(pos.x + 30, pos.y, wxDefaultCoord, wxDefaultCoord);
+ //attention!!! possible endless loop: mouse pointer must NOT be within tipWindow!
+ //Else it will trigger a wxEVT_LEAVE_WINDOW which will hide the window, causing the window to be shown again in via this method, etc.
+
+ if (!tipWindow->IsShown())
+ tipWindow->Show();
+}
+
+
+void CustomTooltip::hide()
+{
+ tipWindow->Hide();
+}
bgstack15