From 58397adbf19eb20d1359fa591a147ec7117821e6 Mon Sep 17 00:00:00 2001 From: Colin Noga Date: Wed, 9 Nov 2011 19:00:49 -0600 Subject: KPObjectSelector and everything it needs is all setup. Emits objects as required, and can return an object with currentSelectedObject(). --- src/ui.py | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 105 insertions(+), 18 deletions(-) (limited to 'src/ui.py') diff --git a/src/ui.py b/src/ui.py index bbbd569..0ea63b3 100644 --- a/src/ui.py +++ b/src/ui.py @@ -1,3 +1,5 @@ +# -*- coding: UTF-8 -*- + from common import * from editorui import * @@ -70,48 +72,133 @@ class KPObjectSelector(QtGui.QListView): """Initialises the widget. Remember to call setModel() on it with a KPGroupModel whenever the layer changes.""" - QtGui.QListView.__init__(self) + font = QtGui.QFont() + font.setPixelSize(22) + font.setBold(True) + + icon = QtGui.QIcon('icons/downArrow.png') + + self.sorterButton = QtGui.QToolButton() + + string = QtCore.QString(QtCore.QChar(0x25BE)) + string.append(' All Groups') + + self.sorterButton.setText(string) + self.sorterButton.setFont(font) + self.sorterButton.setPopupMode(2) + self.sorterButton.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) + + self.sorterMenu = QtGui.QMenu() + self.sorterMenu.setFixedWidth(self.sorterButton.width()) + action = self.sorterMenu.addAction("test 1") + self.sorterButton.setMenu(self.sorterMenu) + + + layout = QtGui.QBoxLayout(2) + layout.setAlignment(Qt.AlignTop) + layout.setContentsMargins(0,0,0,0) + layout.setMargin(0) + layout.setSpacing(0) + + + + thing = QtGui.QListView.__init__(self) self.setFlow(QtGui.QListView.LeftToRight) self.setLayoutMode(QtGui.QListView.SinglePass) self.setMovement(QtGui.QListView.Static) self.setResizeMode(QtGui.QListView.Adjust) self.setWrapping(True) + + self.toolbar = QtGui.QToolBar() + self.toolbar.setFixedHeight(28) + self.toolbar.addWidget(self.sorterButton) + layout.addWidget(self.toolbar) + + + self.setLayout(layout) + + + # Borrowed the signals and junk from Reggie, figure we'll need em' self.clicked.connect(self.handleObjReplace) + self.sorterMenu.triggered.connect(self.toggleTopLevel) + + + def resizeEvent(self, event): + QtGui.QListView.resizeEvent(self, event) + self.sorterMenu.setFixedWidth(self.width()-self.verticalScrollBar().width()) - def toggleTopLevel(self, id): + + def currentSelectedObject(self): + """Returns the currently selected object reference, for painting purposes.""" + + index = self.currentIndex().row() + object = self.model().groupItem().getItem(index) + + return object + + + def setModel(self, model): + """Sets the model and the menu sorting list""" + + QtGui.QListView.setModel(self, model) + + menuList = model.groupItem().getGroupList() + + string = QtCore.QString(QtCore.QChar(0x25BE)) + string.append(' All Groups') + + self.sorterButton.setText(string) + self.sorterMenu.clear() + + for item in menuList: + actionMan = self.sorterMenu.addAction(item[0]) + + actionMan.setData((item[1], item[2])) + + + def toggleTopLevel(self, action): """Changes the top level group in the list view.""" - # Not quite sure how to implement this yet. Basically, the model is hierarchal, - # and it'll return items from whatever the top level KPGroupItem is. But removing - # and adding stuff isn't possible, since I need to retain my recursive object. - # - # So here's the structure. Above this QListView, there will be a QComboBox. - # - # The QComboBox will list all groups in my hierarchy. - # Selecting a group will cause the QListView to only show items for those rows, - # even though all rows are retained. - # - # It's kind of like a custom QSortFilterProxyModel. Maybe I should subclass that. + name = str(action.text()).strip() + startRow = action.data().toPyObject()[0] + endRow = action.data().toPyObject()[1] + + for row in xrange(self.model().rowCount()): + + if (row < startRow) or (row > endRow): + self.setRowHidden(row, True) + else: + self.setRowHidden(row, False) + string = QtCore.QString(QtCore.QChar(0x25BE)) + string.append(' ' + name) + + self.sorterButton.setText(string) - self.setCurrentIndex(self.model().index(sel, 0, QtCore.QModelIndex())) @QtCore.pyqtSlot(QtCore.QModelIndex, QtCore.QModelIndex) def currentChanged(self, current, previous): - """Throws a signal when the selected object changed""" - self.objChanged.emit(current.row()) + """Throws a signal emitting the current object when changed""" + i = current.row() + object = self.model().groupItem().getItem(i) + + self.objChanged.emit(object) + def handleObjReplace(self, index): """Throws a signal when the selected object is used as a replacement""" if QtGui.QApplication.keyboardModifiers() == QtCore.Qt.AltModifier: - self.objReplaced.emit(index.row()) + i = current.row() + object = self.model().groupItem().getItem(i) + + self.objReplaced.emit(object) objChanged = QtCore.pyqtSignal(int) - objReplaced = QtCore.pyqtSignal(int) + objReplaced = QtCore.pyqtSignal(KPTileObject) -- cgit v1.2.3