46 |
46 |
47 self.progDir = None |
47 self.progDir = None |
48 self.watchedItems = {} |
48 self.watchedItems = {} |
49 self.watcher = QFileSystemWatcher(self) |
49 self.watcher = QFileSystemWatcher(self) |
50 self.watcher.directoryChanged.connect(self.directoryChanged) |
50 self.watcher.directoryChanged.connect(self.directoryChanged) |
|
51 |
|
52 self.__sysPathInterpreter = "" |
|
53 self.__sysPathItem = None |
51 |
54 |
52 if not nopopulate: |
55 if not nopopulate: |
53 rootData = QApplication.translate("BrowserModel", "Name") |
56 rootData = QApplication.translate("BrowserModel", "Name") |
54 self.rootItem = BrowserItem(None, rootData) |
57 self.rootItem = BrowserItem(None, rootData) |
55 |
58 |
348 |
351 |
349 def __populateModel(self): |
352 def __populateModel(self): |
350 """ |
353 """ |
351 Private method to populate the browser model. |
354 Private method to populate the browser model. |
352 """ |
355 """ |
353 self._addItem(BrowserSysPathItem(self.rootItem), self.rootItem) |
|
354 |
|
355 self.toplevelDirs = [] |
356 self.toplevelDirs = [] |
356 tdp = Preferences.Prefs.settings.value('BrowserModel/ToplevelDirs') |
357 tdp = Preferences.Prefs.settings.value('BrowserModel/ToplevelDirs') |
357 if tdp: |
358 if tdp: |
358 self.toplevelDirs = tdp |
359 self.toplevelDirs = tdp |
359 else: |
360 else: |
364 d.absoluteFilePath())) |
365 d.absoluteFilePath())) |
365 |
366 |
366 for d in self.toplevelDirs: |
367 for d in self.toplevelDirs: |
367 itm = BrowserDirectoryItem(self.rootItem, d) |
368 itm = BrowserDirectoryItem(self.rootItem, d) |
368 self._addItem(itm, self.rootItem) |
369 self._addItem(itm, self.rootItem) |
|
370 |
|
371 def interpreterChanged(self, interpreter): |
|
372 """ |
|
373 Public method to handle a change of the debug client's interpreter. |
|
374 |
|
375 @param interpreter interpreter of the debug client (string) |
|
376 """ |
|
377 if interpreter and "python" in interpreter.lower(): |
|
378 if interpreter.endswith("w.exe"): |
|
379 interpreter = interpreter.replace("w.exe", ".exe") |
|
380 if self.__sysPathInterpreter != interpreter: |
|
381 self.__sysPathInterpreter = interpreter |
|
382 # step 1: remove sys.path entry |
|
383 if self.__sysPathItem is not None: |
|
384 self.beginRemoveRows( |
|
385 QModelIndex(), self.__sysPathItem.row(), |
|
386 self.__sysPathItem.row()) |
|
387 self.rootItem.removeChild(self.__sysPathItem) |
|
388 self.endRemoveRows() |
|
389 self.__sysPathItem = None |
|
390 |
|
391 if self.__sysPathInterpreter: |
|
392 # step 2: add a new one |
|
393 self.__sysPathItem = BrowserSysPathItem(self.rootItem) |
|
394 self.addItem(self.__sysPathItem) |
|
395 else: |
|
396 # remove sys.path entry |
|
397 if self.__sysPathItem is not None: |
|
398 self.beginRemoveRows( |
|
399 QModelIndex(), self.__sysPathItem.row(), |
|
400 self.__sysPathItem.row()) |
|
401 self.rootItem.removeChild(self.__sysPathItem) |
|
402 self.endRemoveRows() |
|
403 self.__sysPathItem = None |
|
404 self.__sysPathInterpreter = "" |
369 |
405 |
370 def programChange(self, dirname): |
406 def programChange(self, dirname): |
371 """ |
407 """ |
372 Public method to change the entry for the directory of file being |
408 Public method to change the entry for the directory of file being |
373 debugged. |
409 debugged. |
520 Public method to populate a sys.path item's subtree. |
556 Public method to populate a sys.path item's subtree. |
521 |
557 |
522 @param parentItem reference to the sys.path item to be populated |
558 @param parentItem reference to the sys.path item to be populated |
523 @param repopulate flag indicating a repopulation (boolean) |
559 @param repopulate flag indicating a repopulation (boolean) |
524 """ |
560 """ |
|
561 # TODO: make this dynamic depending on interpreter |
525 if len(sys.path) > 0: |
562 if len(sys.path) > 0: |
526 if repopulate: |
563 if repopulate: |
527 self.beginInsertRows( |
564 self.beginInsertRows( |
528 self.createIndex(parentItem.row(), 0, parentItem), |
565 self.createIndex(parentItem.row(), 0, parentItem), |
529 0, len(sys.path) - 1) |
566 0, len(sys.path) - 1) |
530 for p in sys.path: |
567 for p in sys.path: |
531 if p == '': |
568 if p: |
532 p = os.getcwd() |
569 node = BrowserDirectoryItem(parentItem, p) |
533 |
570 self._addItem(node, parentItem) |
534 node = BrowserDirectoryItem(parentItem, p) |
|
535 self._addItem(node, parentItem) |
|
536 if repopulate: |
571 if repopulate: |
537 self.endInsertRows() |
572 self.endInsertRows() |
538 |
573 |
539 def populateFileItem(self, parentItem, repopulate=False): |
574 def populateFileItem(self, parentItem, repopulate=False): |
540 """ |
575 """ |