UI/Browser.py

changeset 945
8cd4d08fa9f6
parent 882
34b86be88bf0
child 949
f888270da22e
equal deleted inserted replaced
944:1b59c4ba121e 945:8cd4d08fa9f6
23 23
24 import UI.PixmapCache 24 import UI.PixmapCache
25 import Preferences 25 import Preferences
26 import Utilities 26 import Utilities
27 27
28
28 class Browser(QTreeView): 29 class Browser(QTreeView):
29 """ 30 """
30 Class used to display a file system tree. 31 Class used to display a file system tree.
31 32
32 Via the context menu that 33 Via the context menu that
33 is displayed by a right click the user can select various actions on 34 is displayed by a right click the user can select various actions on
34 the selected file. 35 the selected file.
35 36
36 @signal sourceFile(str, int = 0, str = "") emitted to open a Python file at a line 37 @signal sourceFile(str, int = 0, str = "") emitted to open a Python file at a line
37 @signal designerFile(str) emitted to open a Qt-Designer file 38 @signal designerFile(str) emitted to open a Qt-Designer file
38 @signal linguistFile(str) emitted to open a Qt-Linguist (*.ts) file 39 @signal linguistFile(str) emitted to open a Qt-Linguist (*.ts) file
39 @signal trpreview(list of str) emitted to preview a Qt-Linguist (*.qm) file 40 @signal trpreview(list of str) emitted to preview a Qt-Linguist (*.qm) file
40 @signal projectFile(str) emitted to open an eric4/5 project file 41 @signal projectFile(str) emitted to open an eric4/5 project file
41 @signal multiProjectFile(str) emitted to open an eric4/5 multi project file 42 @signal multiProjectFile(str) emitted to open an eric4/5 multi project file
53 pixmapFile = pyqtSignal(str) 54 pixmapFile = pyqtSignal(str)
54 pixmapEditFile = pyqtSignal(str) 55 pixmapEditFile = pyqtSignal(str)
55 svgFile = pyqtSignal(str) 56 svgFile = pyqtSignal(str)
56 unittestOpen = pyqtSignal(str) 57 unittestOpen = pyqtSignal(str)
57 58
58 def __init__(self, parent = None): 59 def __init__(self, parent=None):
59 """ 60 """
60 Constructor 61 Constructor
61 62
62 @param parent parent widget (QWidget) 63 @param parent parent widget (QWidget)
63 """ 64 """
79 self.customContextMenuRequested.connect(self._contextMenuRequested) 80 self.customContextMenuRequested.connect(self._contextMenuRequested)
80 self.activated.connect(self._openItem) 81 self.activated.connect(self._openItem)
81 self.expanded.connect(self._resizeColumns) 82 self.expanded.connect(self._resizeColumns)
82 self.collapsed.connect(self._resizeColumns) 83 self.collapsed.connect(self._resizeColumns)
83 84
84 self.setWhatsThis(QApplication.translate('Browser', 85 self.setWhatsThis(QApplication.translate('Browser',
85 """<b>The Browser Window</b>""" 86 """<b>The Browser Window</b>"""
86 """<p>This allows you to easily navigate the hierachy of directories and""" 87 """<p>This allows you to easily navigate the hierachy of directories and"""
87 """ files on your system, identify the Python programs and open them up in""" 88 """ files on your system, identify the Python programs and open them up in"""
88 """ a Source Viewer window. The window displays several separate""" 89 """ a Source Viewer window. The window displays several separate"""
89 """ hierachies.</p>""" 90 """ hierachies.</p>"""
162 163
163 def _resort(self): 164 def _resort(self):
164 """ 165 """
165 Protected slot to resort the tree. 166 Protected slot to resort the tree.
166 """ 167 """
167 self.model().sort(self.header().sortIndicatorSection(), 168 self.model().sort(self.header().sortIndicatorSection(),
168 self.header().sortIndicatorOrder()) 169 self.header().sortIndicatorOrder())
169 170
170 def __createPopupMenus(self): 171 def __createPopupMenus(self):
171 """ 172 """
172 Private method to generate the various popup menus. 173 Private method to generate the various popup menus.
173 """ 174 """
174 # create the popup menu for source files 175 # create the popup menu for source files
175 self.sourceMenu = QMenu(self) 176 self.sourceMenu = QMenu(self)
176 self.sourceMenu.addAction(QApplication.translate('Browser', 'Open'), 177 self.sourceMenu.addAction(QApplication.translate('Browser', 'Open'),
177 self._openItem) 178 self._openItem)
178 self.unittestAct = self.sourceMenu.addAction( 179 self.unittestAct = self.sourceMenu.addAction(
179 QApplication.translate('Browser', 'Run unittest...'), self.handleUnittest) 180 QApplication.translate('Browser', 'Run unittest...'), self.handleUnittest)
180 self.sourceMenu.addAction( 181 self.sourceMenu.addAction(
181 QApplication.translate('Browser', 'Copy Path to Clipboard'), 182 QApplication.translate('Browser', 'Copy Path to Clipboard'),
182 self._copyToClipboard) 183 self._copyToClipboard)
183 184
184 # create the popup menu for general use 185 # create the popup menu for general use
185 self.menu = QMenu(self) 186 self.menu = QMenu(self)
186 self.menu.addAction(QApplication.translate('Browser', 'Open'), self._openItem) 187 self.menu.addAction(QApplication.translate('Browser', 'Open'), self._openItem)
187 self.editPixmapAct = \ 188 self.editPixmapAct = \
188 self.menu.addAction(QApplication.translate('Browser', 'Open in Icon Editor'), 189 self.menu.addAction(QApplication.translate('Browser', 'Open in Icon Editor'),
189 self._editPixmap) 190 self._editPixmap)
190 self.menu.addAction( 191 self.menu.addAction(
191 QApplication.translate('Browser', 'Copy Path to Clipboard'), 192 QApplication.translate('Browser', 'Copy Path to Clipboard'),
192 self._copyToClipboard) 193 self._copyToClipboard)
193 if self.__embeddedBrowser in [1, 2]: 194 if self.__embeddedBrowser in [1, 2]:
194 self.menu.addSeparator() 195 self.menu.addSeparator()
195 self.menu.addAction(QApplication.translate('Browser', 'Configure...'), 196 self.menu.addAction(QApplication.translate('Browser', 'Configure...'),
196 self.__configure) 197 self.__configure)
197 198
198 # create the menu for multiple selected files 199 # create the menu for multiple selected files
199 self.multiMenu = QMenu(self) 200 self.multiMenu = QMenu(self)
200 self.multiMenu.addAction(QApplication.translate('Browser', 'Open'), 201 self.multiMenu.addAction(QApplication.translate('Browser', 'Open'),
201 self._openItem) 202 self._openItem)
202 if self.__embeddedBrowser in [1, 2]: 203 if self.__embeddedBrowser in [1, 2]:
203 self.multiMenu.addSeparator() 204 self.multiMenu.addSeparator()
204 self.multiMenu.addAction(QApplication.translate('Browser', 'Configure...'), 205 self.multiMenu.addAction(QApplication.translate('Browser', 'Configure...'),
205 self.__configure) 206 self.__configure)
206 207
207 # create the directory menu 208 # create the directory menu
208 self.dirMenu = QMenu(self) 209 self.dirMenu = QMenu(self)
209 self.dirMenu.addAction(QApplication.translate('Browser', 210 self.dirMenu.addAction(QApplication.translate('Browser',
210 'New toplevel directory...'), 211 'New toplevel directory...'),
211 self.__newToplevelDir) 212 self.__newToplevelDir)
212 self.addAsTopLevelAct = self.dirMenu.addAction( 213 self.addAsTopLevelAct = self.dirMenu.addAction(
213 QApplication.translate('Browser', 'Add as toplevel directory'), 214 QApplication.translate('Browser', 'Add as toplevel directory'),
214 self.__addAsToplevelDir) 215 self.__addAsToplevelDir)
215 self.removeFromToplevelAct = self.dirMenu.addAction( 216 self.removeFromToplevelAct = self.dirMenu.addAction(
216 QApplication.translate('Browser', 'Remove from toplevel'), 217 QApplication.translate('Browser', 'Remove from toplevel'),
217 self.__removeToplevel) 218 self.__removeToplevel)
218 self.dirMenu.addSeparator() 219 self.dirMenu.addSeparator()
219 self.dirMenu.addAction(QApplication.translate('Browser', 220 self.dirMenu.addAction(QApplication.translate('Browser',
220 'Refresh directory'), 221 'Refresh directory'),
221 self.__refreshDirectory) 222 self.__refreshDirectory)
222 self.dirMenu.addSeparator() 223 self.dirMenu.addSeparator()
223 self.dirMenu.addAction(QApplication.translate('Browser', 224 self.dirMenu.addAction(QApplication.translate('Browser',
224 'Find in this directory'), 225 'Find in this directory'),
225 self.__findInDirectory) 226 self.__findInDirectory)
226 self.dirMenu.addAction(QApplication.translate('Browser', 227 self.dirMenu.addAction(QApplication.translate('Browser',
227 'Find&&Replace in this directory'), 228 'Find&&Replace in this directory'),
228 self.__replaceInDirectory) 229 self.__replaceInDirectory)
229 self.dirMenu.addAction( 230 self.dirMenu.addAction(
230 QApplication.translate('Browser', 'Copy Path to Clipboard'), 231 QApplication.translate('Browser', 'Copy Path to Clipboard'),
231 self._copyToClipboard) 232 self._copyToClipboard)
232 if self.__embeddedBrowser in [1, 2]: 233 if self.__embeddedBrowser in [1, 2]:
233 self.dirMenu.addSeparator() 234 self.dirMenu.addSeparator()
234 self.dirMenu.addAction(QApplication.translate('Browser', 'Configure...'), 235 self.dirMenu.addAction(QApplication.translate('Browser', 'Configure...'),
235 self.__configure) 236 self.__configure)
236 237
237 # create the background menu 238 # create the background menu
238 self.backMenu = QMenu(self) 239 self.backMenu = QMenu(self)
239 self.backMenu.addAction(QApplication.translate('Browser', 240 self.backMenu.addAction(QApplication.translate('Browser',
240 'New toplevel directory...'), 241 'New toplevel directory...'),
241 self.__newToplevelDir) 242 self.__newToplevelDir)
242 if self.__embeddedBrowser in [1, 2]: 243 if self.__embeddedBrowser in [1, 2]:
243 self.backMenu.addSeparator() 244 self.backMenu.addSeparator()
244 self.backMenu.addAction(QApplication.translate('Browser', 'Configure...'), 245 self.backMenu.addAction(QApplication.translate('Browser', 'Configure...'),
245 self.__configure) 246 self.__configure)
246 247
247 def mouseDoubleClickEvent(self, mouseEvent): 248 def mouseDoubleClickEvent(self, mouseEvent):
248 """ 249 """
249 Protected method of QAbstractItemView. 250 Protected method of QAbstractItemView.
250 251
251 Reimplemented to disable expanding/collapsing 252 Reimplemented to disable expanding/collapsing
252 of items when double-clicking. Instead the double-clicked entry is opened. 253 of items when double-clicking. Instead the double-clicked entry is opened.
253 254
254 @param mouseEvent the mouse event (QMouseEvent) 255 @param mouseEvent the mouse event (QMouseEvent)
262 Protected slot to show the context menu of the listview. 263 Protected slot to show the context menu of the listview.
263 264
264 @param coord the position of the mouse pointer (QPoint) 265 @param coord the position of the mouse pointer (QPoint)
265 """ 266 """
266 categories = self.getSelectedItemsCountCategorized( 267 categories = self.getSelectedItemsCountCategorized(
267 [BrowserDirectoryItem, BrowserFileItem, 268 [BrowserDirectoryItem, BrowserFileItem,
268 BrowserClassItem, BrowserMethodItem]) 269 BrowserClassItem, BrowserMethodItem])
269 cnt = categories["sum"] 270 cnt = categories["sum"]
270 bfcnt = categories[str(BrowserFileItem)] 271 bfcnt = categories[str(BrowserFileItem)]
271 if cnt > 1 and cnt == bfcnt: 272 if cnt > 1 and cnt == bfcnt:
272 self.multiMenu.popup(self.mapToGlobal(coord)) 273 self.multiMenu.popup(self.mapToGlobal(coord))
317 def _openItem(self): 318 def _openItem(self):
318 """ 319 """
319 Protected slot to handle the open popup menu entry. 320 Protected slot to handle the open popup menu entry.
320 """ 321 """
321 itmList = self.getSelectedItems( 322 itmList = self.getSelectedItems(
322 [BrowserFileItem, BrowserClassItem, 323 [BrowserFileItem, BrowserClassItem,
323 BrowserMethodItem, BrowserClassAttributeItem]) 324 BrowserMethodItem, BrowserClassAttributeItem])
324 325
325 for itm in itmList: 326 for itm in itmList:
326 if isinstance(itm, BrowserFileItem): 327 if isinstance(itm, BrowserFileItem):
327 if itm.isPython2File(): 328 if itm.isPython2File():
356 if type_ is None or type_.split("/")[0] == "text": 357 if type_ is None or type_.split("/")[0] == "text":
357 self.sourceFile[str].emit(itm.fileName()) 358 self.sourceFile[str].emit(itm.fileName())
358 else: 359 else:
359 QDesktopServices.openUrl(QUrl(itm.fileName())) 360 QDesktopServices.openUrl(QUrl(itm.fileName()))
360 elif isinstance(itm, BrowserClassItem): 361 elif isinstance(itm, BrowserClassItem):
361 self.sourceFile[str, int].emit(itm.fileName(), 362 self.sourceFile[str, int].emit(itm.fileName(),
362 itm.classObject().lineno) 363 itm.classObject().lineno)
363 elif isinstance(itm, BrowserMethodItem): 364 elif isinstance(itm, BrowserMethodItem):
364 self.sourceFile[str, int].emit(itm.fileName(), 365 self.sourceFile[str, int].emit(itm.fileName(),
365 itm.functionObject().lineno) 366 itm.functionObject().lineno)
366 elif isinstance(itm, BrowserClassAttributeItem): 367 elif isinstance(itm, BrowserClassAttributeItem):
367 self.sourceFile[str, int].emit(itm.fileName(), 368 self.sourceFile[str, int].emit(itm.fileName(),
368 itm.attributeObject().lineno) 369 itm.attributeObject().lineno)
369 370
370 def _editPixmap(self): 371 def _editPixmap(self):
371 """ 372 """
372 Protected slot to handle the open in icon editor popup menu entry. 373 Protected slot to handle the open in icon editor popup menu entry.
470 replaceFilesDialog.setSearchDirectory(searchDir) 471 replaceFilesDialog.setSearchDirectory(searchDir)
471 replaceFilesDialog.show() 472 replaceFilesDialog.show()
472 replaceFilesDialog.raise_() 473 replaceFilesDialog.raise_()
473 replaceFilesDialog.activateWindow() 474 replaceFilesDialog.activateWindow()
474 475
475 def handleProgramChange(self,fn): 476 def handleProgramChange(self, fn):
476 """ 477 """
477 Public slot to handle the programChange signal. 478 Public slot to handle the programChange signal.
478 """ 479 """
479 self.__model.programChange(os.path.dirname(fn)) 480 self.__model.programChange(os.path.dirname(fn))
480 481

eric ide

mercurial