root/branch/twedit/CycleTabsPopup.py

Revision 1591, 10.9 kB (checked in by mswat, 16 months ago)

converted print statements into dbgMsg with switchable debug output option

Line 
1import re
2from PyQt4.QtCore import *
3from PyQt4.QtGui import *
4import PyQt4.QtCore as QtCore
5
6
7import os
8from PyQt4.QtCore import *
9from PyQt4.QtGui import *
10
11from Messaging import stdMsg, dbgMsg, errMsg, setDebugging
12
13MAC = "qt_mac_set_native_menubar" in dir()
14       
15# class CycleTabsPopup(QDialog,ui_cycleTabsPopup.Ui_CycleTabsPopupForm):
16    # #signals
17   
18    # def __init__(self, text="", parent=None):
19        # super(CycleTabsPopup, self).__init__(parent)
20        # self.editorWindow=parent
21        # self.__text = unicode(text)
22        # self.setWindowFlags(Qt.SplashScreen)
23        # self.setupUi(self)
24       
25        # # self.updateUi()
26
27class CycleTabsPopup(QLabel):
28    #signals
29   
30    def __init__(self, parent=None):
31        super(CycleTabsPopup, self).__init__(parent)
32        self.editorWindow=parent
33        self.setText("THIS IS CYCLE WINDOWS TAB")
34        # self.__text = unicode(text)
35        self.setWindowFlags(Qt.Popup|Qt.FramelessWindowHint)
36        # palette = QPalette()
37        palette=self.palette()
38        palette.setColor(self.backgroundRole(),QColor('#F5F6CE'))
39        self.setPalette(palette)
40        font=self.font()
41        font.setPointSize(9)
42        self.setFont(font)
43        # self.setBackgroundRole(QtPalette.Light)
44        # self.setWindowFlags(Qt.FramelessWindowHint)
45        self.setTextFormat(Qt.RichText)
46        # self.setupUi(self)       
47        self.ctrlTabShortcut=QShortcut(QKeySequence("Ctrl+Tab") ,self)
48        self.connect( self.ctrlTabShortcut, SIGNAL("activated()"), self.cycleTabs )
49        self.highlightedItem=''
50        self.openFileNames=None
51        self.cycleTabFilesList=None
52       
53        dbgMsg("self.editorWindow.pos()=",str(self.editorWindow.pos())+"\n\n\n\n")
54       
55    def initializeContent(self,_cycleTabFilesList):
56        labelContent=''
57        i=0
58        self.cycleTabFilesList=_cycleTabFilesList
59        self.openFileNames=_cycleTabFilesList.tabList
60        #special case for just one document
61        if len(self.openFileNames)==1:
62            labelContent+="<b>"+self.openFileNames[0][0]+"</b><br>"
63            self.highlightedItem=self.openFileNames[0]           
64            self.setText(labelContent)
65            return
66           
67        for fileName in self.openFileNames:
68#             dbgMsg("fileName=",fileName)
69            if i == 1:
70               
71                labelContent+="<b>"+fileName[0]+"</b><br>"
72                self.highlightedItem=fileName
73                # dbgMsg("label content=",labelContent)
74               
75            else:
76                labelContent+=fileName[0]+"<br>"   
77            # if firstName=='':
78            i+=1     
79               
80        self.setText(labelContent)
81        # dbgMsg("dir(self)=",dir(self))
82        # # self.setSelection(0,len(firstName))
83       
84    def cycleTabs(self):
85        dbgMsg("QLabel cycleTabs")
86        #highlightedItem is a list - [fileName,editor]
87        highlightTextFlag=False
88        if self.highlightedItem==self.openFileNames[-1]:# we start highlighting cycle from the begining
89            highlightTextFlag=True
90        highlightingChanged=False
91       
92        if self.openFileNames:
93            labelContent=''
94            for fileName in self.openFileNames:
95
96               
97                if highlightTextFlag:   
98                    dbgMsg("GOT HIGHLIGHT TEXT FLAG")
99                    labelContent+="<b>"+fileName[0]+"</b><br>"
100                    highlightTextFlag=False
101                    self.highlightedItem=fileName
102                    highlightingChanged=True
103                    # dbgMsg("label content=",labelContent)
104                   
105                else:
106                    labelContent+=fileName[0]+"<br>"   
107                # if firstName=='':
108                if self.highlightedItem[0]==fileName[0] and not highlightingChanged:
109                    highlightTextFlag=True   
110                   
111            self.setText(labelContent)
112           
113       
114    def keyPressEvent(self, event):
115        if event.key()==Qt.Key_Control:
116            dbgMsg("CTRL key pressed")
117            self.ctrlPressed=True
118        # if event.modifiers()==Qt.CtrlModifier:
119            # dbgMsg("CTRL key pressed")
120            self.ctrlPressed=True
121            # if event.key():
122                # dbgMsg("TAB PRESSED ",event.key()        )
123    def keyReleaseEvent(self, event):
124        if event.key()==Qt.Key_Control:
125            dbgMsg("CTRL RELEASED in QTextEdit")
126            self.ctrlPressed=False
127            self.close()
128            # make lastly selected tab current
129            self.cycleTabFilesList.makeItemCurrent(self.highlightedItem)
130            self.openFileNames=None
131            self.cycleTabFilesList=None
132            # if self.cycleTabsFlag: # release cycleTabs flag and switch to new tab
133                # self.cycleTabsFlag=False
134                # self.tabFileNamesDict=None
135                # self.cycleTabsPopup.close()
136                # self.cycleTabsPopup=None   
137
138               
139class CycleTabFileList:
140
141    def __init__(self,_editorWindow):
142        self.editorWindow=_editorWindow
143        self.tabList=[]
144        self.tabDict={} # this is auxiliary container used for faster searches
145        # self.initializeTabFileList()
146       
147    def initializeTabFileList(self):
148       
149        if not len(self.tabList): # initialize from scratch if the list is empty - this is done on startup
150            dbgMsg("INITIALIZE FILE TAB LIST\n\n\n\n")
151            openFileDict={}
152            for i in range(self.editorWindow.editTab.count()):
153                editor=self.editorWindow.editTab.widget(i)
154                if editor==self.editorWindow.editTab.currentWidget():
155                    if self.editorWindow.getEditorFileName(editor)!="":
156                        self.tabList.insert(0,[self.editorWindow.getEditorFileName(editor),editor])
157                    else:
158                        documentName=self.editorWindow.editTab.tabText(self.editorWindow.editTab.indexOf(editor))
159                        self.tabList.insert(0,[documentName,editor])
160                    self.tabDict[editor]=self.tabList[0][0]
161                else:
162                    if self.editorWindow.getEditorFileName(editor)!="":
163                        self.tabList.append([self.editorWindow.getEditorFileName(editor),editor])
164                    else:
165                        documentName=self.editorWindow.editTab.tabText(self.editorWindow.editTab.indexOf(editor))
166                        self.tabList.append([documentName,editor])               
167                    # self.tabList.append([self.editorWindow.fileDict[editor][0],editor])
168                    self.tabDict[editor]=self.tabList[-1][0]
169                   
170                #storing items in the tabDict. tab dict will be used to compare if new items have been added to self.editorWindow.fileDict
171                # self.tabDict[editor]=self.editorWindow.fileDict[editor][0]
172                # self.tabDict[editor]=self.tabList[-1]
173        else:
174            self.refresh()
175           
176    def refresh(self):
177        dbgMsg("REFRESH FILE TAB LIST\n\n\n\n")
178        for i in range(self.editorWindow.editTab.count()):
179            editor=self.editorWindow.editTab.widget(i)
180#             dbgMsg("editor=",editor)
181            # dbgMsg("self.editorWindow.editTab.count()=",self.editorWindow.editTab.count())
182            try:
183                self.tabDict[editor]
184                #checking if file name has not changed
185                documentName=self.editorWindow.getEditorFileName(editor)
186                if documentName=="":
187                    documentName=self.editorWindow.editTab.tabText(self.editorWindow.editTab.indexOf(editor))
188                if documentName!=self.tabDict[editor]:
189                    dbgMsg("fileName has changed in the open tab")
190                    #linear search for item entry with matchin editor entry
191                    for i in range(len(self.tabList)):
192                        if self.tabList[i][1]==editor:
193                            self.tabList[i][0]=documentName
194                            self.tabDict[editor]=self.tabList[i][0]   
195                            break
196                           
197                    # sys.exit()
198            except KeyError,e:
199                # found new editor window
200                dbgMsg("# found new editor window")
201                if self.editorWindow.getEditorFileName(editor)!="": # if the name of the item is non empty
202                    self.insertNewItem([self.editorWindow.getEditorFileName(editor),editor])
203                    # self.tabDict[editor]=self.tabList.insert[1][0] # new item was inserted at position 1
204                    # self.tabDict[editor]=self.editorWindow.fileDict[editor][0]
205                else:#otherwise get tab text
206                    documentName=self.editorWindow.editTab.tabText(self.editorWindow.editTab.indexOf(editor))
207                    self.insertNewItem([documentName,editor])
208                    # self.tabDict[editor]=self.tabList.insert[1][0]# new item was inserted at position 1
209                    # self.tabDict[editor]=documentName
210                   
211        # check if a tab has been deleted       
212        editorItemsToBeDeleted=[]
213        for editor in self.tabDict.keys():
214            if not self.editorWindow.checkIfEditorExists(editor):
215                # this editor has been deleted from tab widget
216                editorItemsToBeDeleted.append(editor)
217               
218            # try:
219                # self.editorWindow.fileDict[editor]
220            # except KeyError,e:
221                # # this editor has been deleted from tab widget
222                # editorItemsToBeDeleted.append(editor)
223               
224        for editorItem in editorItemsToBeDeleted:
225            del self.tabDict[editor]
226           
227            #linear search for editor entry in the tabList
228            for i in range(len(self.tabList)):
229                if self.tabList[i][1]==editor:
230                    del self.tabList[i]
231                    break
232        #make sure current item is listed at the top
233        currentEditor=self.editorWindow.editTab.currentWidget()
234        currentItem=[self.tabDict[currentEditor],currentEditor]
235        self.makeItemCurrent(currentItem)   
236       
237    def insertNewItem(self,_item):
238        if(len(self.tabList)>=1):
239            self.tabList.insert(1,_item)
240            self.tabDict[_item[1]]=_item[0]
241           
242    def makeItemCurrent(self,_item):
243        self.editorWindow.editTab.setCurrentWidget(_item[1])
244        #liear search for item in the tabList
245        index=0
246        for i in range(len(self.tabList)):
247            if self.tabList[i]==_item:
248                index=i
249                break
250        # putting current item at the top of the cycle list       
251        del self.tabList[index]       
252        self.tabList.insert(0,_item)
Note: See TracBrowser for help on using the browser.