From 21570f8ff7e747f70acca55dca4e30868d854d03 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 25 Apr 2011 21:15:26 -0400 Subject: [PATCH] abstract "disabled" style a bit, and only allow selecting Tonal number system if a suitable font is installed also, if a language file is missing, disable it rather than remove it altogether if a Tonal font is missing, also never choose it for amount display under any circumstances --- cashier.py | 21 ++++++--------------- settings.py | 43 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 45 insertions(+), 19 deletions(-) diff --git a/cashier.py b/cashier.py index f7fe41d..2b3bfbf 100644 --- a/cashier.py +++ b/cashier.py @@ -19,7 +19,7 @@ from time import time from PySide.QtCore import * from PySide.QtGui import * import send -from settings import SpesmiloSettings, humanAmount, format_number, icon +from settings import SpesmiloSettings, humanAmount, format_number, icon, style_item, disable_item class FocusLineEdit(QLineEdit): def __init__(self, text): @@ -212,22 +212,13 @@ class TransactionsTable(QTableWidget): if not hasattr(self, '_eti'): # Must already be enabled :p return - brush = item.foreground() - brush.setColor(self._eti[0]) - item.setForeground(brush) - font = item.font() - font.setStyle(self._eti[1]) - item.setFont(font) + style_item(item, self._eti) def disable_table_item(self, item): - brush = item.foreground() - font = item.font() - if not hasattr(self, '_eti'): - self._eti = (brush.color(), font.style()) - brush.setColor(Qt.gray) - font.setStyle(font.StyleItalic) - item.setForeground(brush) - item.setFont(font) + want_old = not hasattr(self, '_eti') + rv = disable_item(item, want_old=want_old) + if want_old: + self._eti = rv class Cashier(QDialog): def __init__(self, core, clipboard, parent=None): diff --git a/settings.py b/settings.py index ac8da04..ccacaca 100644 --- a/settings.py +++ b/settings.py @@ -55,6 +55,28 @@ def quietPopen(*args, **kwargs): return -1 return dummy() +def style_item(item, style, want_old = False): + old = None + brush = item.foreground() + font = item.font() + if want_old: + old = (brush.color(), font.style()) + brush.setColor(style[0]) + font.setStyle(style[1]) + item.setForeground(brush) + item.setFont(font) + return old + +disabled_style = (Qt.gray, QFont.StyleItalic) +def disable_item(item, *args, **kwargs): + return style_item(item, disabled_style, *args, **kwargs) + +def TonalSupported(): + from PySide.QtGui import qApp + if not qApp: + return True + return QFontMetrics(qApp.font()).inFont(0xe9d9) + class SettingsTabBASE(QWidget): def __init__(self, parent = None, dlg = None): super(SettingsTabBASE, self).__init__(parent) @@ -184,6 +206,8 @@ class SettingsTabLanguage(SettingsTabBASE): mainlay = QFormLayout(self) self.lang = SettingsQComboBox(key='language/language', default='') + langM = QStandardItemModel() + self.lang.setModel(langM) langlist = [ (self.tr('(Default)'), ''), (self.tr('American'), 'en_US'), @@ -193,10 +217,13 @@ class SettingsTabLanguage(SettingsTabBASE): (self.tr('French'), 'fr'), ] langlist.sort() - for lang in langlist: - if not (lang[1] in ('', 'en_US') or os.path.exists("i18n/%s.qm" % (lang[1],))): - continue + for i in xrange(len(langlist)): + lang = langlist[i] self.lang.addItem(*lang) + if not (lang[1] in ('', 'en_US') or os.path.exists("i18n/%s.qm" % (lang[1],))): + item = langM.item(i, 0) + item.setSelectable(False) + disable_item(item) self.options.append(self.lang) mainlay.addRow(self.tr('Language:'), self.lang) @@ -210,8 +237,14 @@ class SettingsTabLanguage(SettingsTabBASE): nslay.addWidget(self.strength) self.numsys = SettingsQComboBox(self, key='units/numsys', default='Decimal') self.numsys._apply = lambda nv: self._defer_update('counters', 'amounts') + numsysM = QStandardItemModel() + self.numsys.setModel(numsysM) self.numsys.addItem(self.tr('Decimal'), 'Decimal') self.numsys.addItem(self.tr('Tonal'), 'Tonal') + if not TonalSupported(): + item = numsysM.item(1, 0) + item.setSelectable(False) + disable_item(item) self.options.append(self.numsys) nslay.addWidget(self.numsys) mainlay.addRow(self.tr('Number system:'), nslay) @@ -331,6 +364,8 @@ class SpesmiloSettings: return _settings.value('core/uri', 'http://user:pass@localhost:8332') def getNumberSystem(self): + if not TonalSupported(): + return 'Decimal' return _settings.value('units/numsys', 'Decimal') def getNumberSystemStrength(self): @@ -384,7 +419,7 @@ class SpesmiloSettings: ns = self.getNumberSystem() nss = self.getNumberSystemStrength() ens = None - if nss != 'Force' and n: + if nss != 'Force' and n and TonalSupported(): # If it's only valid as one, and not the other, choose it ivD = 0 == n % 1000000 ivT = 0 == n % 0x100 -- 2.1.4