diff options
Diffstat (limited to 'src/ui.py')
-rw-r--r-- | src/ui.py | 87 |
1 files changed, 87 insertions, 0 deletions
@@ -53,6 +53,87 @@ class KPLayerList(QtGui.QWidget): KP.map.moveLayer(index, index + 2) + + +class KPObjectSelector(QtGui.QListView): + + def __init__(self): + """Initialises the widget. Remember to call setModel() on it with a KPGroupModel + whenever the layer changes.""" + + 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.setItemDelegate(KPObjectSelector.ObjectItemDelegate()) + + self.clicked.connect(self.HandleObjReplace) + + + def toggleTopLevel(self, id): + """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. + + + 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()) + + def HandleObjReplace(self, index): + """Throws a signal when the selected object is used as a replacement""" + if QtGui.QApplication.keyboardModifiers() == QtCore.Qt.AltModifier: + self.ObjReplace.emit(index.row()) + + ObjChanged = QtCore.pyqtSignal(int) + ObjReplace = QtCore.pyqtSignal(int) + + + class KPGroupItemDelegate(QtGui.QAbstractItemDelegate): + """Handles tileset groups, objects and their rendering""" + + def __init__(self): + """Initialises the delegate""" + QtGui.QAbstractItemDelegate.__init__(self) + + def paint(self, painter, option, index): + """Paints an object""" + if option.state & QtGui.QStyle.State_Selected: + painter.fillRect(option.rect, option.palette.highlight()) + + p = index.model().data(index, QtCore.Qt.DecorationRole) + painter.drawPixmap(option.rect.x()+2, option.rect.y()+2, p) + #painter.drawText(option.rect, str(index.row())) + + def sizeHint(self, option, index): + """Returns the size for the object""" + p = index.model().data(index, QtCore.Qt.UserRole) + return p + + + + + + + + + class KPMainWindow(QtGui.QMainWindow): def __init__(self): QtGui.QMainWindow.__init__(self) @@ -77,6 +158,12 @@ class KPMainWindow(QtGui.QMainWindow): self.layerListDock = QtGui.QDockWidget('Layers') self.layerListDock.setWidget(self.layerList) + self.objectSelector = KPObjectSelector() + # self.objectSelector.setModel(SomeTileset.getModel()) + self.objectSelectorDock = QtGui.QDockWidget('Layers') + self.objectSelectorDock.setWidget(self.layerList) + + self.addDockWidget(Qt.RightDockWidgetArea, self.layerListDock) |