Fixing various bugs
authorEd Page <eopage@byu.net>
Thu, 8 Jul 2010 02:52:27 +0000 (21:52 -0500)
committerEd Page <eopage@byu.net>
Thu, 8 Jul 2010 02:52:27 +0000 (21:52 -0500)
src/libraries/qtpieboard.py
src/qhistory.py

index 699ddfd..a331cfd 100755 (executable)
@@ -116,10 +116,11 @@ def _enumerate_pie_slices(pieData, iconPaths):
                                                action.setIcon(QtGui.QIcon(absIconPath))
                                                break
                        pieItem = qtpie.QActionPieItem(action)
+                       actionToken = sliceData["action"]
                else:
                        pieItem = qtpie.PieFiling.NULL_CENTER
-                       action = ""
-               yield direction, pieItem, action
+                       actionToken = ""
+               yield direction, pieItem, actionToken
 
 
 def load_keyboard(keyboardName, dataTree, keyboard, keyboardHandler, iconPaths):
@@ -130,8 +131,10 @@ def load_keyboard(keyboardName, dataTree, keyboard, keyboardHandler, iconPaths):
 
                pieButton = qtpie.QPieButton(center)
                pieButton.set_center(center)
+               keyboardHandler.map_slice_action(center, centerAction)
                for direction, pieItem, action in pieItems:
                        pieButton.insertItem(pieItem)
+                       keyboardHandler.map_slice_action(pieItem, action)
                keyboard.add_pie(row, column, pieButton)
 
 
@@ -166,14 +169,11 @@ class KeyboardHandler(object):
                del self.__modifiers["<%s>" % modifierName]
 
        def map_slice_action(self, slice, action):
-               self.__sliceActions[slice.name] = action
-
-       def __call__(self, pie, slice, direction):
-               try:
-                       action = self.__sliceActions[slice.name]
-               except KeyError:
-                       return
+               callback = lambda direction: self(direction, action)
+               slice.action().triggered.connect(callback)
+               self.__sliceActions[slice] = (action, callback)
 
+       def __call__(self, direction, action):
                activeModifiers = [
                        mod.name
                        for mod in self.__modifiers.itervalues()
index 585bf1b..8268cf4 100644 (file)
@@ -41,11 +41,11 @@ class RowData(object):
 
        @property
        def equation(self):
-               return operation.render_operation(self._prettyRenderer, self._node),
+               return operation.render_operation(self._prettyRenderer, self._node)
 
        @property
        def result(self):
-               return operation.render_operation(self._prettyRenderer, self._simpleNode),
+               return operation.render_operation(self._prettyRenderer, self._simpleNode)
 
        def data(self, column):
                if column == self.CLOSE_COLUMN:
@@ -76,22 +76,25 @@ class HistoryModel(QtCore.QAbstractItemModel):
        def data(self, index, role):
                if not index.isValid():
                        return None
+
+               if role == QtCore.Qt.DisplayRole:
+                       item = index.internalPointer()
+                       if isinstance(item, RowData):
+                               print "d-rw", item.data(index.column())
+                               return item.data(index.column())
+                       elif item is RowData.HEADERS:
+                               print "d-h", item[index.column()]
+                               return item[index.column()]
+               elif role == QtCore.Qt.TextAlignmentRole:
+                       return RowData.ALIGNMENT[index.column()]
                elif role == QtCore.Qt.DecorationRole:
                        if index.column() == RowData.CLOSE_COLUMN:
                                return None
                        else:
                                return None
-               elif role == QtCore.Qt.TextAlignmentRole:
-                       return RowData.ALIGNMENT[index.column()]
-               elif role != QtCore.Qt.DisplayRole:
+               else:
                        return None
 
-               item = index.internalPointer()
-               if isinstance(item, RowData):
-                       return item.data(index.column())
-               elif item is RowData.HEADERS:
-                       return item[index.column()]
-
        @misc_utils.log_exception(_moduleLogger)
        def flags(self, index):
                if not index.isValid():
@@ -111,12 +114,13 @@ class HistoryModel(QtCore.QAbstractItemModel):
                if not self.hasIndex(row, column, parent):
                        return QtCore.QModelIndex()
 
-               if parent.isValid():
+               elif parent.isValid():
                        return QtCore.QModelIndex()
 
                parentItem = RowData.HEADERS
                childItem = self._children[row]
                if childItem:
+                       print "i", row, column, childItem
                        return self.createIndex(row, column, childItem)
                else:
                        return QtCore.QModelIndex()
@@ -138,18 +142,23 @@ class HistoryModel(QtCore.QAbstractItemModel):
                        return 0
 
                if not parent.isValid():
+                       print "rc", len(self._children)
                        return len(self._children)
                else:
+                       print "rc", len(self._children)
                        return len(self._children)
 
        def push(self, row):
                self._children.append(row)
                self._signal_rows_added()
+               print "push", row
+               print "push", len(self._children)
 
        def pop(self):
                data = self._children[-1]
                del self._children[-1]
                self._signal_rows_removed()
+               print "pop", data
                return data
 
        def peek(self):
@@ -168,13 +177,15 @@ class HistoryModel(QtCore.QAbstractItemModel):
 
        def _signal_rows_added(self):
                # @todo Only signal new rows
-               self._all_changed
+               self._all_changed()
 
        def _signal_rows_removed(self):
                # @todo Only signal new rows
-               self._all_changed
+               self._all_changed()
 
        def _all_changed(self):
+               if not self._children:
+                       return
                topLeft = self.createIndex(0, 0, self._children[0])
                bottomRight = self.createIndex(len(self._children)-1, len(RowData.HEADERS)-1, self._children[-1])
                self.dataChanged.emit(topLeft, bottomRight)