From bc429ce01f519f3edae182b516cb15b8d2df54a7 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Mon, 16 Oct 2006 20:36:11 +0000 Subject: [PATCH] [ 1578466 ] Support for custom floating panes git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42062 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/aui/floatpane.h | 14 ++++++++++---- include/wx/aui/framemanager.h | 1 + src/aui/floatpane.cpp | 10 ++++++---- src/aui/framemanager.cpp | 10 +++++++--- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/include/wx/aui/floatpane.h b/include/wx/aui/floatpane.h index 98f79fe072..158c0a272b 100644 --- a/include/wx/aui/floatpane.h +++ b/include/wx/aui/floatpane.h @@ -35,18 +35,24 @@ public: wxFloatingPane(wxWindow* parent, wxFrameManager* owner_mgr, const wxPaneInfo& pane, - wxWindowID id = wxID_ANY + wxWindowID id = wxID_ANY, + long style = wxRESIZE_BORDER | wxSYSTEM_MENU | wxCAPTION | + wxFRAME_NO_TASKBAR | wxFRAME_FLOAT_ON_PARENT | + wxCLIP_CHILDREN ); virtual ~wxFloatingPane(); void SetPaneWindow(const wxPaneInfo& pane); + +protected: + virtual void OnMoveStart(); + virtual void OnMoving(const wxRect& window_rect, wxDirection dir); + virtual void OnMoveFinished(); + private: void OnSize(wxSizeEvent& event); void OnClose(wxCloseEvent& event); void OnMoveEvent(wxMoveEvent& event); void OnIdle(wxIdleEvent& event); - void OnMoveStart(); - void OnMoving(const wxRect& window_rect, wxDirection dir); - void OnMoveFinished(); void OnActivate(wxActivateEvent& event); static bool isMouseDown(); private: diff --git a/include/wx/aui/framemanager.h b/include/wx/aui/framemanager.h index a72a431aef..29e3abf18f 100644 --- a/include/wx/aui/framemanager.h +++ b/include/wx/aui/framemanager.h @@ -443,6 +443,7 @@ public: public: + virtual wxFloatingPane * CreateFloatingFrame(wxWindow* parent, const wxPaneInfo& p); void DrawHintRect(wxWindow* pane_window, const wxPoint& pt, diff --git a/src/aui/floatpane.cpp b/src/aui/floatpane.cpp index d8e436dc26..5d9c010da2 100644 --- a/src/aui/floatpane.cpp +++ b/src/aui/floatpane.cpp @@ -37,13 +37,15 @@ IMPLEMENT_CLASS( wxFloatingPane, wxFloatingPaneBaseClass ) wxFloatingPane::wxFloatingPane(wxWindow* parent, wxFrameManager* owner_mgr, const wxPaneInfo& pane, - wxWindowID id /*= wxID_ANY*/) + wxWindowID id /*= wxID_ANY*/, + long style /*=wxRESIZE_BORDER | wxSYSTEM_MENU | wxCAPTION | + wxFRAME_NO_TASKBAR | wxFRAME_FLOAT_ON_PARENT | + wxCLIP_CHILDREN + */) : wxFloatingPaneBaseClass(parent, id, wxEmptyString, pane.floating_pos, pane.floating_size, - wxRESIZE_BORDER | wxSYSTEM_MENU | wxCAPTION | + style | (pane.HasCloseButton()?wxCLOSE_BOX:0) | - wxFRAME_NO_TASKBAR | - wxFRAME_FLOAT_ON_PARENT | wxCLIP_CHILDREN | (pane.IsFixed()?0:wxRESIZE_BORDER) ) { diff --git a/src/aui/framemanager.cpp b/src/aui/framemanager.cpp index 69657cfaf6..6822196ead 100644 --- a/src/aui/framemanager.cpp +++ b/src/aui/framemanager.cpp @@ -494,6 +494,12 @@ wxFrameManager::~wxFrameManager() delete m_art; } +// Creates a floating frame for the windows +wxFloatingPane * wxFrameManager::CreateFloatingFrame(wxWindow* parent, const wxPaneInfo& p) +{ + return new wxFloatingPane(parent, this, p); +} + // GetPane() looks up a wxPaneInfo structure based // on the supplied window pointer. Upon failure, GetPane() // returns an empty wxPaneInfo, a condition which can be checked @@ -2038,9 +2044,7 @@ void wxFrameManager::Update() { // we need to create a frame for this // pane, which has recently been floated - wxFloatingPane* frame = new wxFloatingPane(m_frame, - this, - p); + wxFloatingPane* frame = CreateFloatingFrame(m_frame, p); #if wxCHECK_VERSION(2,7,0) // on MSW and Mac, if the owner desires transparent dragging, and -- 2.45.2