From: Robin Dunn Date: Fri, 12 Nov 1999 06:23:28 +0000 (+0000) Subject: more floatbar tweaks X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/8c588298049717224e165e6647e8fde60fdaf735 more floatbar tweaks git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4481 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/utils/wxPython/lib/floatbar.py b/utils/wxPython/lib/floatbar.py index 26bf194033..101af40308 100644 --- a/utils/wxPython/lib/floatbar.py +++ b/utils/wxPython/lib/floatbar.py @@ -8,6 +8,8 @@ #---------------------------------------------------------------------------- from wxPython.wx import * +_DOCKTHRESHOLD = 25 + class wxFloatBar(wxToolBar): """ wxToolBar subclass which can be dragged off its frame and later @@ -40,116 +42,139 @@ class wxFloatBar(wxToolBar): EVT_MOUSE_EVENTS(self, self.OnMouse) self.parentframe = wxPyTypeCast(args[1], 'wxFrame') + def IsFloatable(self): return self.floatable + def SetFloatable(self, float): self.floatable = float #Find the size of a title bar. if not hasattr(self, 'titleheight'): - test = wxFrame(NULL, -1, "TEST") + test = wxMiniFrame(NULL, -1, "TEST") test.SetClientSize(wxSize(0,0)) self.titleheight = test.GetSizeTuple()[1] test.Destroy() + def IsFloating(self): return self.floating + def Realize(self): wxToolBar.Realize(self) - self.barheight = -1 + def GetTitle(self): return self.title + def SetTitle(self, title): self.title = title if self.IsFloating(): self.floatframe.SetTitle(self.title) - def GetHome(self): - """ - Returns the frame which this toolbar will return to when - docked, or the parent if currently docked. - """ - if hasattr(self, 'parentframe'): - return self.parentframe - else: - return wxPyTypeCast(self.GetParent(), 'wxFrame') - def SetHome(self, frame): - """ - Called when docked, this will remove the toolbar from its - current frame and attach it to another. If called when - floating, it will dock to the frame specified when the toolbar - window is closed. - """ - if self.IsFloating(): - self.parentframe = frame - self.floatframe.Reparent(frame) - else: - parent = wxPyTypeCast(self.GetParent(), 'wxFrame') - self.Reparent(frame) - parent.SetToolBar(None) - size = parent.GetSize() - parent.SetSize(wxSize(0,0)) - parent.SetSize(size) - frame.SetToolBar(self) - size = frame.GetSize() - frame.SetSize(wxSize(0,0)) - frame.SetSize(size) +## def GetHome(self): +## """ +## Returns the frame which this toolbar will return to when +## docked, or the parent if currently docked. +## """ +## if hasattr(self, 'parentframe'): +## return self.parentframe +## else: +## return wxPyTypeCast(self.GetParent(), 'wxFrame') + + +## def SetHome(self, frame): +## """ +## Called when docked, this will remove the toolbar from its +## current frame and attach it to another. If called when +## floating, it will dock to the frame specified when the toolbar +## window is closed. +## """ +## if self.IsFloating(): +## self.parentframe = frame +## self.floatframe.Reparent(frame) +## else: +## parent = wxPyTypeCast(self.GetParent(), 'wxFrame') +## self.Reparent(frame) +## parent.SetToolBar(None) +## size = parent.GetSize() +## parent.SetSize(wxSize(0,0)) +## parent.SetSize(size) +## frame.SetToolBar(self) +## size = frame.GetSize() +## frame.SetSize(wxSize(0,0)) +## frame.SetSize(size) + def Float(self, bool): "Floats or docks the toolbar programmatically." if bool: self.parentframe = wxPyTypeCast(self.GetParent(), 'wxFrame') - clientsize = self.parentframe.GetClientSizeTuple() if self.title: useStyle = wxDEFAULT_FRAME_STYLE else: useStyle = 0 #wxTHICK_FRAME self.floatframe = wxMiniFrame(self.parentframe, -1, self.title, style = useStyle) + self.Reparent(self.floatframe) self.parentframe.SetToolBar(None) self.floating = 1 - size = self.parentframe.GetSize() + psize = self.parentframe.GetSize() self.parentframe.SetSize(wxSize(0,0)) - self.parentframe.SetSize(size) + self.parentframe.SetSize(psize) self.floatframe.SetToolBar(self) self.oldcolor = self.GetBackgroundColour() - barsize = self.GetSizeTuple() - self.floatframe.SetSize(wxSize(barsize[0], barsize[1] + self.titleheight)) - self.floatframe.SetClientSize(wxSize(barsize[0], barsize[1])) + + w = psize.width + h = self.GetSize().height + if self.title: + h = h + self.titleheight + self.floatframe.SetSize(wxSize(w,h)) + self.floatframe.SetClientSize(self.GetSize()) newpos = self.parentframe.GetPosition() - newpos.y = newpos.y + self.titleheight + newpos.y = newpos.y + _DOCKTHRESHOLD * 2 self.floatframe.SetPosition(newpos) self.floatframe.Show(true) + EVT_CLOSE(self.floatframe, self.OnDock) - EVT_MOVE(self.floatframe, self.OnMove) + #EVT_MOVE(self.floatframe, self.OnMove) + else: self.Reparent(self.parentframe) self.parentframe.SetToolBar(self) self.floating = 0 + self.floatframe.SetToolBar(None) self.floatframe.Destroy() size = self.parentframe.GetSize() self.parentframe.SetSize(wxSize(0,0)) self.parentframe.SetSize(size) self.SetBackgroundColour(self.oldcolor) + def OnDock(self, e): self.Float(0) if hasattr(self, 'oldpos'): del self.oldpos + def OnMove(self, e): - homepos = self.parentframe.GetPositionTuple() - homepos = homepos[0], homepos[1] + self.titleheight - floatpos = self.floatframe.GetPositionTuple() - if abs(homepos[0] - floatpos[0]) < 35 and abs(homepos[1] - floatpos[1]) < 35: - self._SetFauxBarVisible(true) - else: - self._SetFauxBarVisible(false) + homepos = self.parentframe.ClientToScreen(wxPoint(0,0)) + floatpos = self.floatframe.GetPosition() + if (abs(homepos.x - floatpos.x) < _DOCKTHRESHOLD and + abs(homepos.y - floatpos.y) < _DOCKTHRESHOLD): + self.Float(0) + #homepos = self.parentframe.GetPositionTuple() + #homepos = homepos[0], homepos[1] + self.titleheight + #floatpos = self.floatframe.GetPositionTuple() + #if abs(homepos[0] - floatpos[0]) < 35 and abs(homepos[1] - floatpos[1]) < 35: + # self._SetFauxBarVisible(true) + #else: + # self._SetFauxBarVisible(false) + def OnMouse(self, e): if not self.IsFloatable(): @@ -165,10 +190,10 @@ class wxFloatBar(wxToolBar): if e.ButtonUp(): self.ReleaseMouse() if self.IsFloating(): - homepos = self.parentframe.GetPositionTuple() - homepos = homepos[0], homepos[1] + self.titleheight - floatpos = self.floatframe.GetPositionTuple() - if abs(homepos[0]-floatpos[0]) < 25 and abs(homepos[1]-floatpos[1]) < 25: + homepos = self.parentframe.ClientToScreen(wxPoint(0,0)) + floatpos = self.floatframe.GetPosition() + if (abs(homepos.x - floatpos.x) < _DOCKTHRESHOLD and + abs(homepos.y - floatpos.y) < _DOCKTHRESHOLD): self.Float(0) return if self.IsFloatable(): @@ -182,6 +207,7 @@ class wxFloatBar(wxToolBar): pt = wxPoint(loc.x - (self.oldpos[0]-e.GetX()), loc.y - (self.oldpos[1]-e.GetY())) self.floatframe.SetPosition(pt) + def _SetFauxBarVisible(self, vis): return if vis: