summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tileset.py142
-rw-r--r--src/ui.py153
2 files changed, 149 insertions, 146 deletions
diff --git a/src/tileset.py b/src/tileset.py
index 8d0c3d3..609fa1a 100644
--- a/src/tileset.py
+++ b/src/tileset.py
@@ -171,95 +171,95 @@ class KPTileObject(object):
class KPGroupModel(QtCore.QAbstractListModel):
- """Model containing all the grouped objects in a tileset"""
-
- def __init__(self, groupItem):
- self.container = groupItem
-
- QtCore.QAbstractListModel.__init__(self)
-
-
- def rowCount(self, parent=None):
- return self.container.objectCount()
-
-
- def data(self, index, role=QtCore.Qt.DisplayRole):
+ """Model containing all the grouped objects in a tileset"""
+
+ def __init__(self, groupItem):
+ self.container = groupItem
+
+ QtCore.QAbstractListModel.__init__(self)
+
+
+ def rowCount(self, parent=None):
+ return self.container.objectCount()
+
+
+ def data(self, index, role=QtCore.Qt.DisplayRole):
# Should return the contents of a row when asked for the index
- if not index.isValid(): return None
- n = index.row()
-
- if n < 0: return None
- if n >= self.container.objectCount(): return None
-
- item = self.container.getItem(n)
-
- if role == QtCore.Qt.DecorationRole:
- if isInstance(item, KPTileObject):
- return item.icon
-
- if role == QtCore.Qt.BackgroundRole:
- return QtGui.qApp.palette().base()
-
- if role == QtCore.Qt.UserRole:
- if isInstance(item, KPTileObject):
- return item.itemsize
-
- if role == QtCore.Qt.DisplayRole:
- if isInstance(item, KPGroupItem):
- return item.name
-
- if role == QtCore.Qt.TextAlignmentRole:
- if isInstance(item, KPGroupItem):
- return item.alignment
-
-
- return None
+ if not index.isValid(): return None
+ n = index.row()
+
+ if n < 0: return None
+ if n >= self.container.objectCount(): return None
+
+ item = self.container.getItem(n)
+
+ if role == QtCore.Qt.DecorationRole:
+ if isInstance(item, KPTileObject):
+ return item.icon
+
+ if role == QtCore.Qt.BackgroundRole:
+ return QtGui.qApp.palette().base()
+
+ if role == QtCore.Qt.UserRole:
+ if isInstance(item, KPTileObject):
+ return item.itemsize
+
+ if role == QtCore.Qt.DisplayRole:
+ if isInstance(item, KPGroupItem):
+ return item.name
+
+ if role == QtCore.Qt.TextAlignmentRole:
+ if isInstance(item, KPGroupItem):
+ return item.alignment
+
+
+ return None
class KPGroupItem(object):
- """Hierarchal object for making a 2D hierarchy recursively using classes"""
-
- def __init__(self, name):
+ """Hierarchal object for making a 2D hierarchy recursively using classes"""
+
+ def __init__(self, name):
- self.objects = []
- self.groups = []
- self.startIndex = 0
- self.endIndex = 0
+ self.objects = []
+ self.groups = []
+ self.startIndex = 0
+ self.endIndex = 0
- self.name = name
- self.alignment = QtCore.Qt.AlignCenter
-
+ self.name = name
+ self.alignment = QtCore.Qt.AlignCenter
+
- def objectCount(self):
- ''' Retrieves the total number of items in this group and all it's children '''
+ def objectCount(self):
+ ''' Retrieves the total number of items in this group and all it's children '''
- objCount = 0
+ objCount = 0
- objCount += len(self.objects)
- objCount += len(self.groups)
- for group in groups:
- objCount += group.objectCount()
+ objCount += len(self.objects)
+ objCount += len(self.groups)
+ for group in groups:
+ objCount += group.objectCount()
- return objCount
-
+ return objCount
+
- def getItem(index):
- ''' Retrieves an item of a specific index. The index is already checked for validity '''
+ def getItem(index):
+ ''' Retrieves an item of a specific index. The index is already checked for validity '''
- if index == self.startIndex:
- return self
+ if index == self.startIndex:
+ return self
- if (index < self.startIndex + len(self.objects)):
- return self.objects[index - self.startIndex - 1]
+ if (index < self.startIndex + len(self.objects)):
+ return self.objects[index - self.startIndex - 1]
- else:
+ else:
- for group in groups:
+ for group in groups:
- if (group.startIndex < index) and (index < group.endIndex):
- return group.getItem(index)
+ if (group.startIndex < index) and (index < group.endIndex):
+ return group.getItem(index)
diff --git a/src/ui.py b/src/ui.py
index 3949bdc..96e2ceb 100644
--- a/src/ui.py
+++ b/src/ui.py
@@ -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)