class ShortcutConfig(QWidget): # {{{ changed_signal = pyqtSignal() def __init__(self, parent=None): QWidget.__init__(self, parent) self._layout = l = QGridLayout() self.setLayout(self._layout) self.header = QLabel(_('Double click on any entry to change the' ' keyboard shortcuts associated with it')) l.addWidget(self.header, 0, 0, 1, 3) self.view = QTreeView(self) self.view.setAlternatingRowColors(True) self.view.setHeaderHidden(True) self.view.setAnimated(True) l.addWidget(self.view, 1, 0, 1, 3) self.delegate = Delegate() self.view.setItemDelegate(self.delegate) self.delegate.sizeHintChanged.connect(self.editor_opened, type=Qt.QueuedConnection) self.delegate.changed_signal.connect(self.changed_signal) self.search = SearchBox2(self) self.search.initialize('shortcuts_search_history', help_text=_('Search for a shortcut by name')) self.search.search.connect(self.find) l.addWidget(self.search, 2, 0, 1, 1) self.nb = QPushButton(QIcon(I('arrow-down.png')), _('&Next'), self) self.pb = QPushButton(QIcon(I('arrow-up.png')), _('&Previous'), self) self.nb.clicked.connect(self.find_next) self.pb.clicked.connect(self.find_previous) l.addWidget(self.nb, 2, 1, 1, 1) l.addWidget(self.pb, 2, 2, 1, 1) l.setColumnStretch(0, 100) def restore_defaults(self): self._model.restore_defaults() self.changed_signal.emit() def commit(self): if self.view.state() == self.view.EditingState: self.delegate.accept_changes() self._model.commit() def initialize(self, keyboard): self._model = ConfigModel(keyboard, parent=self) self.view.setModel(self._model) def editor_opened(self, index): self.view.scrollTo(index, self.view.EnsureVisible) @property def is_editing(self): return self.view.state() == self.view.EditingState def find(self, query): if not query: return try: idx = self._model.find(query) except ParseException: self.search.search_done(False) return self.search.search_done(True) if not idx.isValid(): info_dialog(self, _('No matches'), _('Could not find any shortcuts matching %s')%query, show=True, show_copy_button=False) return self.highlight_index(idx) def highlight_index(self, idx): self.view.scrollTo(idx) self.view.selectionModel().select(idx, self.view.selectionModel().ClearAndSelect) self.view.setCurrentIndex(idx) self.view.setFocus(Qt.OtherFocusReason) def find_next(self, *args): idx = self.view.currentIndex() if not idx.isValid(): idx = self._model.index(0, 0) idx = self._model.find_next(idx, unicode(self.search.currentText())) self.highlight_index(idx) def find_previous(self, *args): idx = self.view.currentIndex() if not idx.isValid(): idx = self._model.index(0, 0) idx = self._model.find_next(idx, unicode(self.search.currentText()), backwards=True) self.highlight_index(idx) def highlight_group(self, group_name): idx = self.view.model().index_for_group(group_name) if idx is not None: self.view.expand(idx) self.view.scrollTo(idx, self.view.PositionAtTop) self.view.selectionModel().select(idx, self.view.selectionModel().ClearAndSelect) self.view.setCurrentIndex(idx) self.view.setFocus(Qt.OtherFocusReason)
class ShortcutConfig(QWidget): # {{{ changed_signal = pyqtSignal() def __init__(self, parent=None): QWidget.__init__(self, parent) self._layout = l = QVBoxLayout(self) self.header = QLabel( _('Double click on any entry to change the' ' keyboard shortcuts associated with it')) l.addWidget(self.header) self.view = QTreeView(self) self.view.setAlternatingRowColors(True) self.view.setHeaderHidden(True) self.view.setAnimated(True) l.addWidget(self.view) self.delegate = Delegate() self.view.setItemDelegate(self.delegate) self.delegate.sizeHintChanged.connect( self.editor_opened, type=Qt.ConnectionType.QueuedConnection) self.delegate.changed_signal.connect(self.changed_signal) self.search = SearchBox2(self) self.search.initialize('shortcuts_search_history', help_text=_('Search for a shortcut by name')) self.search.search.connect(self.find) self._h = h = QHBoxLayout() l.addLayout(h) h.addWidget(self.search) self.nb = QPushButton(QIcon(I('arrow-down.png')), _('&Next'), self) self.pb = QPushButton(QIcon(I('arrow-up.png')), _('&Previous'), self) self.nb.clicked.connect(self.find_next) self.pb.clicked.connect(self.find_previous) h.addWidget(self.nb), h.addWidget(self.pb) h.setStretch(0, 100) def restore_defaults(self): self._model.restore_defaults() self.changed_signal.emit() def commit(self): if self.view.state() == self.view.EditingState: self.delegate.accept_changes() self._model.commit() def initialize(self, keyboard): self._model = ConfigModel(keyboard, parent=self) self.view.setModel(self._model) def editor_opened(self, index): self.view.scrollTo(index, self.view.EnsureVisible) @property def is_editing(self): return self.view.state() == self.view.EditingState def find(self, query): if not query: return try: idx = self._model.find(query) except ParseException: self.search.search_done(False) return self.search.search_done(True) if not idx.isValid(): info_dialog(self, _('No matches'), _('Could not find any shortcuts matching %s') % query, show=True, show_copy_button=False) return self.highlight_index(idx) def highlight_index(self, idx): self.view.scrollTo(idx) self.view.selectionModel().select( idx, self.view.selectionModel().ClearAndSelect) self.view.setCurrentIndex(idx) self.view.setFocus(Qt.FocusReason.OtherFocusReason) def find_next(self, *args): idx = self.view.currentIndex() if not idx.isValid(): idx = self._model.index(0, 0) idx = self._model.find_next(idx, unicode_type(self.search.currentText())) self.highlight_index(idx) def find_previous(self, *args): idx = self.view.currentIndex() if not idx.isValid(): idx = self._model.index(0, 0) idx = self._model.find_next(idx, unicode_type(self.search.currentText()), backwards=True) self.highlight_index(idx) def highlight_group(self, group_name): idx = self.view.model().index_for_group(group_name) if idx is not None: self.view.expand(idx) self.view.scrollTo(idx, self.view.PositionAtTop) self.view.selectionModel().select( idx, self.view.selectionModel().ClearAndSelect) self.view.setCurrentIndex(idx) self.view.setFocus(Qt.FocusReason.OtherFocusReason)
class BookWarriorHomepage ( QWidget,Ui_BookWarriorHomepage): updateSelection = pyqtSignal() def __init__ (self,model,parent=None): super(BookWarriorHomepage,self).__init__(parent) self.setupUi(self) self.max_vignettes = 20 self.nb_col = 0 self.nb_row = 0 self.vignettes_liste = [] self.model = model self.settings = Config().instance.settings self.list_warrior = [] # utilise pour maj selection depuis warrrior layout def setLeftPage(self): self.treeView = QTreeView(self) self.treeView.setObjectName("treeView") self.left_page_Layout.addWidget(self.treeView) self.treeView.activated.connect(self.changeCurrentSet) self.tree_model = TreeModel(self.model) self.treeView.setModel(self.tree_model) self.treeView.setWindowTitle("Simple Tree Model") self.treeView.header().hide() self.treeView.setAlternatingRowColors(True) # i = 0 # self.treeKingdom.setColumnCount(3) # for faction in self.model.factions.values() : # item_f = QTreeWidgetItem(self.treeKingdom) # #self.treeKingdom.insertTopLevelItem(i,item_f) # item_f.setText(i,faction.name) # i = i +1 # for empire in faction.empires.values(): # item_e = QTreeWidgetItem() # item_e.setText(i,empire.name) # item_f.addChild(item_e) # for kingdom in empire.kingdoms.values(): # item_k = QTreeWidgetItem() # item_k.setText(i,kingdom.name) # item_e.addChild(item_k) # for groupe in kingdom.groupes.values(): # item_g = QTreeWidgetItem() # item_g.setText(i,groupe.name) # print ('groupe',groupe.name) # item_k.addChild(item_g) def setRightContent (self, list_warrior): self.list_warrior = list_warrior for v in self.vignettes_liste : v.setParent(None) self.gridLayout.removeWidget(v) # while self.gridLayout.takeAt(0) != None : # del self.gridLayout.takeAt(0).widget # item = self.gridLayout.takeAt(0) # print ('ll') # del item self.nb_col = 0 self.nb_row = 0 self.vignettes_liste = [] for i in range (min(len(list_warrior),self.max_vignettes)): self.addVignette(list_warrior[i],i) def updateContent(self): pass def addVignette (self,warrior,i): widget_vignette = QWidget(self.vignettes) layout_one_vignette = QVBoxLayout(widget_vignette) layout_one_vignette.setSpacing(0) layout_one_vignette.setContentsMargins(0, 0, 0, 0) warrior_button = QPushButton(widget_vignette) # on met plus car dans le cas du signal clicked on enverra True ou False (0 ou 1) warrior_button.setObjectName(str(i+2)) warrior_button.clicked.connect(self.parent().goWarriorPage) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) warrior_button.setFixedSize(QtCore.QSize(100,120)) warrior_button.setSizePolicy(sizePolicy) layout_one_vignette.addWidget(warrior_button) # label warrior_label = HerosLabel(warrior,widget_vignette) layout_one_vignette.addWidget(warrior_label) max_col = 3 groupe_name = warrior.groupe().name if warrior.masterGroupe() != None : groupe_name = warrior.masterGroupe().name+"/"+groupe_name #path = os.path.join(Config().instance.path_to_pic(),faction_name,empire_name,kingdom_name,"Picture",groupe_name,warrior_name icon = QIcon(warrior.thumb) #print (basepath+"/"+faction_name+"/"+empire_name+"/"+kingdom_name+"/Picture/"+groupe_name+"/"+warrior.name+"/portrait_thumbnail.jpg") warrior_button.setIcon(icon) warrior_button.setIconSize(QtCore.QSize(100,120)) if self.nb_col == 0: self.nb_row = self.nb_row + 1 self.gridLayout.addWidget(widget_vignette,self.nb_row,self.nb_col) self.vignettes_liste.append(widget_vignette) self.nb_col = (self.nb_col +1)%max_col def changeCurrentSet(self,index): print ('changecurrentset:') item = self.tree_model.metadata(index, QtCore.Qt.DecorationRole) list_warrior = item.getWarriorList() self.setRightContent(list_warrior) self.updateSelection.emit()