14 from PyQt4.QtGui import QSizePolicy, QSpacerItem, QWidget, QPixmap, QTreeWidget, \ |
14 from PyQt4.QtGui import QSizePolicy, QSpacerItem, QWidget, QPixmap, QTreeWidget, \ |
15 QStackedWidget, QDialog, QSplitter, QScrollArea, QApplication, QDialogButtonBox, \ |
15 QStackedWidget, QDialog, QSplitter, QScrollArea, QApplication, QDialogButtonBox, \ |
16 QFrame, QMainWindow, QVBoxLayout, QTreeWidgetItem, QLabel |
16 QFrame, QMainWindow, QVBoxLayout, QTreeWidgetItem, QLabel |
17 |
17 |
18 from E5Gui.E5Application import e5App |
18 from E5Gui.E5Application import e5App |
|
19 from E5Gui.E5LineEdit import E5LineEdit |
|
20 from E5Gui.E5LineEditButton import E5LineEditButton |
19 from E5Gui import E5MessageBox |
21 from E5Gui import E5MessageBox |
20 |
22 |
21 import QScintilla.Lexers |
23 import QScintilla.Lexers |
22 |
24 |
23 import Preferences |
25 import Preferences |
391 |
393 |
392 self.configSplitter = QSplitter(self) |
394 self.configSplitter = QSplitter(self) |
393 self.configSplitter.setOrientation(Qt.Horizontal) |
395 self.configSplitter.setOrientation(Qt.Horizontal) |
394 self.configSplitter.setObjectName("configSplitter") |
396 self.configSplitter.setObjectName("configSplitter") |
395 |
397 |
396 self.configList = QTreeWidget(self.configSplitter) |
398 self.configListWidget = QWidget(self.configSplitter) |
|
399 self.leftVBoxLayout = QVBoxLayout(self.configListWidget) |
|
400 self.leftVBoxLayout.setMargin(0) |
|
401 self.leftVBoxLayout.setSpacing(0) |
|
402 self.leftVBoxLayout.setObjectName("leftVBoxLayout") |
|
403 self.configListFilter = E5LineEdit(self, self.trUtf8("Enter filter text...")) |
|
404 self.configListFilter.setObjectName("configListFilter") |
|
405 self.leftVBoxLayout.addWidget(self.configListFilter) |
|
406 self.configList = QTreeWidget() |
397 self.configList.setObjectName("configList") |
407 self.configList.setObjectName("configList") |
|
408 self.leftVBoxLayout.addWidget(self.configList) |
|
409 |
|
410 self.__clearButton = E5LineEditButton(self) |
|
411 self.__clearButton.setIcon(UI.PixmapCache.getIcon("clearLeft.png")) |
|
412 self.configListFilter.addWidget(self.__clearButton, E5LineEdit.RightSide) |
|
413 self.__clearButton.setVisible(False) |
|
414 self.__clearButton.clicked[()].connect(self.configListFilter.clear) |
|
415 self.configListFilter.textChanged.connect(self.__filterTextChanged) |
398 |
416 |
399 self.scrollArea = QScrollArea(self.configSplitter) |
417 self.scrollArea = QScrollArea(self.configSplitter) |
400 self.scrollArea.setFrameShape(QFrame.NoFrame) |
418 self.scrollArea.setFrameShape(QFrame.NoFrame) |
401 self.scrollArea.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) |
419 self.scrollArea.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) |
402 self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn) |
420 self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn) |
456 |
474 |
457 QMetaObject.connectSlotsByName(self) |
475 QMetaObject.connectSlotsByName(self) |
458 self.setTabOrder(self.configList, self.configStack) |
476 self.setTabOrder(self.configList, self.configStack) |
459 |
477 |
460 self.configStack.setCurrentWidget(self.emptyPage) |
478 self.configStack.setCurrentWidget(self.emptyPage) |
|
479 |
|
480 self.configList.setFocus() |
|
481 |
|
482 def __filterTextChanged(self, filter): |
|
483 """ |
|
484 Private slot to handle a change of the filter. |
|
485 |
|
486 @param filter text of the filter line edit (string) |
|
487 """ |
|
488 self.__clearButton.setVisible(filter != "") |
|
489 |
|
490 self.__filterChildItems(self.configList.invisibleRootItem(), filter) |
|
491 |
|
492 def __filterChildItems(self, parent, filter): |
|
493 """ |
|
494 Private method to filter child items based on a filter string. |
|
495 |
|
496 @param parent reference to the parent item (QTreeWidgetItem) |
|
497 @param filter filter string (string) |
|
498 @return flag indicating a visible child item (boolean) |
|
499 """ |
|
500 childVisible = False |
|
501 filter = filter.lower() |
|
502 for index in range(parent.childCount()): |
|
503 itm = parent.child(index) |
|
504 if itm.childCount() > 0: |
|
505 visible = self.__filterChildItems(itm, filter) |
|
506 else: |
|
507 visible = filter == "" or filter in itm.text(0).lower() |
|
508 if visible: |
|
509 childVisible = True |
|
510 itm.setHidden(not visible) |
|
511 |
|
512 return childVisible |
461 |
513 |
462 def __initLexers(self): |
514 def __initLexers(self): |
463 """ |
515 """ |
464 Private method to initialize the dictionary of preferences lexers. |
516 Private method to initialize the dictionary of preferences lexers. |
465 """ |
517 """ |