Skip to content

Commit

Permalink
close tag editor by default, but allow persistence when shift is used
Browse files Browse the repository at this point in the history
  • Loading branch information
innerhippy committed Apr 8, 2013
1 parent 53a840e commit d054678
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 88 deletions.
3 changes: 3 additions & 0 deletions CHANGES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,6 @@ v1.3, Mar 12 2013
- refresh tag model on any change
- total count working
- added tag breakdown view

v1.4, Apr 8 2013
- major changes to tag model
35 changes: 30 additions & 5 deletions pydosh/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ def __init__(self, parent=None):
self.tableView.selectionModel().selectionChanged.connect(self.recordSelectionChanged)

self.tableView.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.tableView.customContextMenuRequested.connect(self.popup)
self.tableView.customContextMenuRequested.connect(self.tagEditPopup)

model = TagModel(self)
model.tagsChanged.connect(self.tagModelChanged)
Expand All @@ -137,7 +137,7 @@ def __init__(self, parent=None):
# Set sql data model for account types
self.accountCombo.clear()

accountModel = CheckComboModel()
accountModel = CheckComboModel(self)
accountModel.setTable('accounttypes')
accountModel.setFilter("""
accounttypeid IN (
Expand Down Expand Up @@ -187,11 +187,15 @@ def selectDateRange(self):
self.endDateEdit.setEnabled(False)

def settingsDialog(self):
""" Launch the settings dialog widget to configure account information
"""
dialog = SettingsDialog(self)
dialog.exec_()
self.setFilter()

def importDialog(self):
""" Launch the import dialog
"""
combo = QtGui.QComboBox(self)
model = QtSql.QSqlTableModel(self)
model.setTable('accounttypes')
Expand Down Expand Up @@ -268,6 +272,8 @@ def importDialog(self):
self.reset()

def recordSelectionChanged(self):
""" Only enable buttons if a selection has been made
"""
enable = len(self.tableView.selectionModel().selectedRows()) > 0
self.toggleCheckButton.setEnabled(enable)
self.deleteButton.setEnabled(enable)
Expand Down Expand Up @@ -345,7 +351,6 @@ def keepSelection(self):
"""
try:
# Save selection

selectedRecords = self.selectedRecordIds()
selectionMode = self.tableView.selectionMode()
yield
Expand Down Expand Up @@ -624,10 +629,11 @@ def removeTag(self):
proxyModel.sourceModel().removeTag(tagId)


def popup(self, pos):
def tagEditPopup(self, pos):
self.tableView.viewport().mapToGlobal(pos)

tagList = QtGui.QListWidget(self)
tagList = TagListWidget(self)
tagList.setPersistEditor(QtGui.QApplication.keyboardModifiers() == QtCore.Qt.ShiftModifier)
tagList.itemChanged.connect(self.saveTagChanges)

selectedRecordIds = set(self.selectedRecordIds())
Expand Down Expand Up @@ -658,6 +664,7 @@ def popup(self, pos):

action = QtGui.QWidgetAction(self)
action.setDefaultWidget(tagList)

menu = QtGui.QMenu(self)
menu.addAction(action)
menu.exec_(self.tableView.viewport().mapToGlobal(pos))
Expand All @@ -673,9 +680,27 @@ def saveTagChanges(self, item):
else:
self.tagView.model().sourceModel().addRecordTags(tagId, self.selectedRecordIds())

if item.listWidget().persistEditor() == False or len(self.selectedRecordIds()) == 0:
# If there's no selection available then close the tag menu
item.listWidget().parent().close()

def setTagFilter(self, tagIds):
""" Filter model by tags in response to tagView selection changed
"""
self.filterTagIds = tagIds
self.setFilter()


class TagListWidget(QtGui.QListWidget):
""" Simple extension to QListWidget to allow persistence of editor
when used in QMenu popup
"""
def __init__(self, parent=None):
super(TagListWidget, self).__init__(parent=parent)
self.__persistEditor = False

def setPersistEditor(self, persist):
self.__persistEditor = persist

def persistEditor(self):
return self.__persistEditor
81 changes: 0 additions & 81 deletions pydosh/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,83 +8,6 @@ class ImportException(Exception):
""" General exception for record import
"""

#class TagBreakdownModel(QtCore.QAbstractTableModel):
# """ Model to display tag breakdown
# """
# def __init__(self, parent=None):
# super(TagBreakdownModel, self).__init__(parent=parent)
# self.__stats = []
#
# def rowCount(self, parent=QtCore.QModelIndex()):
# return len(self.__stats)
#
# def columnCount(self, parent=QtCore.QModelIndex()):
# return 3
#
# def updateStats(self, stats):
# """ Stats come in as a dictionary: {tag : [money in, money out]}
# This is stored on __stats as a list of lists [tag, in, out]
# """
# for tag, (amountIn, amountOut) in stats.iteritems():
# currentIndex = self.index(0, 0)
# match = self.match(currentIndex, QtCore.Qt.DisplayRole, tag, 1, QtCore.Qt.MatchExactly)
# if len(match) == 0:
# # New item
# row = self.rowCount()
# self.insertRows(row, 1)
# index = self.index(row, 0)
# self.setData(index, tag, QtCore.Qt.EditRole)
# index = self.index(row, 1)
# self.setData(index, amountIn, QtCore.Qt.EditRole)
# index = self.index(row, 2)
# self.setData(index, -1 * amountOut, QtCore.Qt.EditRole)
# else:
# # Update item
# index = self.index(match[0].row(), 1)
# if amountIn != index.data().toPyObject():
# self.setData(index, amountIn, QtCore.Qt.EditRole)
#
# index = self.index(match[0].row(), 2)
# if amountOut != index.data().toPyObject():
# self.setData(index, -1 * amountOut, QtCore.Qt.EditRole)
#
# # Remove old rows
# for row in reversed(xrange(self.rowCount())):
# index = self.index(row, 0)
# if index.data().toString() not in stats:
# self.removeRows(index.row(), 1)
#
# def removeRows(self, position, rows, parent=QtCore.QModelIndex()):
# self.beginRemoveRows(QtCore.QModelIndex(), position, position+rows-1)
# del self.__stats[position]
# self.endRemoveRows()
# return True
#
# def insertRows(self, position, rows, parent=QtCore.QModelIndex()):
# self.beginInsertRows(QtCore.QModelIndex(), position, position + rows -1)
# self.__stats.insert(position, [None, None, None])
# self.endInsertRows()
# return True
#
# def setData(self, index, value, role=QtCore.Qt.EditRole):
# if role == QtCore.Qt.EditRole:
# self.__stats[index.row()][index.column()] = value
# self.dataChanged.emit(index, index)
# return True
#
# return False
#
# def data(self, index, role=QtCore.Qt.DisplayRole):
#
# if role == QtCore.Qt.FontRole and index.column() == 0:
# return QtGui.QFont(QtGui.QApplication.font().family(), italic=True)
#
# elif role == QtCore.Qt.DisplayRole:
# return self.__stats[index.row()][index.column()]
#
# return QtCore.QVariant()
#

class ImportRecord(object):
def __init__(self, *args):
super(ImportRecord, self).__init__()
Expand Down Expand Up @@ -733,9 +656,6 @@ def headerData(self, section, orientation, role=QtCore.Qt.DisplayRole):

class CheckComboModel(QtSql.QSqlTableModel):

checkStateChanged = QtCore.pyqtSignal()
dataChanged = QtCore.pyqtSignal('QModelIndex, QModelIndex)')

def __init__(self, parent=None):
super(CheckComboModel, self).__init__(parent=parent)
self._checkedItems = set()
Expand Down Expand Up @@ -773,7 +693,6 @@ def setData(self, index, value, role):
self._checkedItems.remove(index.row())

self.dataChanged.emit(index, index)
self.checkStateChanged.emit()
return True

return False
2 changes: 1 addition & 1 deletion pydosh/multicombobox.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def setModel(self, model):
self.setModelColumn(self.modelColumn())
model.rowsInserted.connect(self.__updateCheckedItems)
model.rowsRemoved.connect(self.__updateCheckedItems)
model.checkStateChanged.connect(self.__updateCheckedItems)
model.dataChanged.connect(self.__updateCheckedItems)
self.__updateCheckedItems()

def dataChanged(self):
Expand Down
2 changes: 1 addition & 1 deletion pydosh/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__VERSION__ = "1.3"
__VERSION__ = "1.4"

0 comments on commit d054678

Please sign in to comment.