diff --git a/miniframe.py b/miniframe.py index 61579a6ff..919219c97 100644 --- a/miniframe.py +++ b/miniframe.py @@ -486,9 +486,7 @@ class PFTabsContainer(wx.Window): if not self.startDrag: tab = self.FindTabAtPos(mposx, mposy) if tab: - for tabs in self.tabs: - tabs.SetSelected(False) - tab.SetSelected(True) + self.CheckTabSelected(tab, mposx, mposy) self.startDrag = True tx,ty = tab.GetPosition() self.dragx = mposx - tx @@ -514,35 +512,54 @@ class PFTabsContainer(wx.Window): self.startDrag = False self.dragTrigger = 5 - seltab = None - oldSelTab = None - for tab in self.tabs: - if tab.GetSelected(): - oldSelTab = tab - break - count = 0 - for tab in self.tabs: - tabRegion = tab.GetTabRegion() - closeBtnReg = tab.GetCloseButtonRegion() - tabPos = tab.GetPosition() - tabPosX, tabPosY = tabPos - tabRegion.Offset(tabPosX, tabPosY) - closeBtnReg.Offset(tabPosX,tabPosY) + selTab = self.GetSelectedTab() - if closeBtnReg.Contains(mposx, mposy): - print "Close tab: %s" % tab.text - self.DeleteTab(count) + if self.CheckTabClose(selTab, mposx, mposy): + return + +# if self.CheckTabSelected(selTab, mposx, mposy): +# return + + for tab in self.tabs: + + if self.CheckTabClose(tab, mposx, mposy): return - if tabRegion.Contains(mposx, mposy): - tab.SetSelected(True) - if tab != oldSelTab: - oldSelTab.SetSelected(False) - self.Refresh() - print "Selected: %s" %tab.text - break - count += 1 - event.Skip() +# if self.CheckTabSelected(tab, mposx, mposy): +# return + + def GetSelectedTab(self): + for tab in self.tabs: + if tab.GetSelected(): + return tab + + def CheckTabSelected(self,tab, mposx, mposy): + + oldSelTab = self.GetSelectedTab() + if oldSelTab == tab: + return True + + if self.TabHitTest(tab, mposx, mposy): + tab.SetSelected(True) + if tab != oldSelTab: + oldSelTab.SetSelected(False) + self.Refresh() + print "Selected: %s" %tab.text + return True + return False + + def CheckTabClose(self, tab, mposx, mposy): + closeBtnReg = tab.GetCloseButtonRegion() + tabPosX, tabPosY = tab.GetPosition() + + closeBtnReg.Offset(tabPosX,tabPosY) + + if closeBtnReg.Contains(mposx, mposy): + print "Close tab: %s" % tab.text + index = self.GetTabIndex(tab) + self.DeleteTab(index) + return True + return False def CheckCloseButtons(self, mposx, mposy): dirty = False @@ -564,15 +581,24 @@ class PFTabsContainer(wx.Window): self.Refresh() def FindTabAtPos(self, x, y): + selTab = self.GetSelectedTab() + if self.TabHitTest(selTab, x, y): + return selTab + for tab in self.tabs: - tabRegion = tab.GetTabRegion() - tabPos = tab.GetPosition() - tabPosX, tabPosY = tabPos - tabRegion.Offset(tabPosX, tabPosY) - if tabRegion.Contains(x, y): + if self.TabHitTest(tab, x, y): return tab return None + def TabHitTest(self, tab, x, y): + tabRegion = tab.GetTabRegion() + tabPos = tab.GetPosition() + tabPosX, tabPosY = tabPos + tabRegion.Offset(tabPosX, tabPosY) + if tabRegion.Contains(x, y): + return True + return False + def GetTabAtLeft(self, tabIndex): if tabIndex>0: return self.tabs[tabIndex - 1] @@ -590,6 +616,9 @@ class PFTabsContainer(wx.Window): self.UpdateTabsPosition(draggedTab) self.Refresh() + def GetTabIndex(self, tab): + return self.tabs.index(tab) + def OnMotion(self, event): mposx,mposy = event.GetPosition() if self.startDrag: @@ -610,7 +639,7 @@ class PFTabsContainer(wx.Window): dtx = self.tabContainerWidth - w + 9 self.draggedTab.SetPosition( (dtx, self.dragy)) - index = self.tabs.index(self.draggedTab) + index = self.GetTabIndex(self.draggedTab) leftTab = self.GetTabAtLeft(index) rightTab = self.GetTabAtRight(index)