diff options
Diffstat (limited to '')
-rw-r--r-- | src/ui.py | 153 |
1 files changed, 78 insertions, 75 deletions
@@ -55,79 +55,82 @@ class KPLayerList(QtGui.QWidget): + + 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 - - - + 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()) + # Borrowed the signals and junk from Reggie, figure we'll need em' + + 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 + + + @@ -158,10 +161,10 @@ 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.objectSelector = KPObjectSelector() + # # self.objectSelector.setModel(SomeTileset.getModel()) + # self.objectSelectorDock = QtGui.QDockWidget('Layers') + # self.objectSelectorDock.setWidget(self.layerList) self.addDockWidget(Qt.RightDockWidgetArea, self.layerListDock) |