summaryrefslogtreecommitdiff
path: root/src/ui.py
diff options
context:
space:
mode:
authorColin Noga <Tempus@Spectrum-Song.local>2011-11-08 03:43:59 -0600
committerColin Noga <Tempus@Spectrum-Song.local>2011-11-08 03:43:59 -0600
commitd7984abd4fd0efda7684bc5a48750483ed9261a8 (patch)
tree3d8af1ddaeb9aff3887e9ce47bde3e2d3c03a352 /src/ui.py
parentf54d177364dbfacce45ec6768462bc81e837a274 (diff)
downloadkoopatlas-d7984abd4fd0efda7684bc5a48750483ed9261a8.tar.gz
koopatlas-d7984abd4fd0efda7684bc5a48750483ed9261a8.zip
Added a bunch more stuff for the eventual Gourped Object Selector Widget. Its a complicated bugger, especially when I am in no position to test
Diffstat (limited to '')
-rw-r--r--src/ui.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/ui.py b/src/ui.py
index 57c396b..3949bdc 100644
--- a/src/ui.py
+++ b/src/ui.py
@@ -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)