Git commit 7f78baf44ed7e281a0329017e5b20a96f7da49fe by Wolfgang Rohdewald. Committed on 02/09/2013 at 14:06. Pushed by wrohdewald into branch 'master'.
Remove ruleset editor from config dialog because changes in this editor are applied immediately, no cancel option. Instead give it its own menu entry. M +- -- doc/config_background.png M +- -- doc/config_play.png M +- -- doc/config_tiles.png M +8 -0 doc/index.docbook M +- -- doc/ruleseteditor.png M +1 -0 src/kajonggui.rc M +19 -14 src/playfield.py M +34 -9 src/rulesetselector.py http://commits.kde.org/kajongg/7f78baf44ed7e281a0329017e5b20a96f7da49fe diff --git a/doc/config_background.png b/doc/config_background.png index ff85c80..561b884 100644 Binary files a/doc/config_background.png and b/doc/config_background.png differ diff --git a/doc/config_play.png b/doc/config_play.png index ada5ae4..3071fa8 100644 Binary files a/doc/config_play.png and b/doc/config_play.png differ diff --git a/doc/config_tiles.png b/doc/config_tiles.png index bbbbe68..b7a5f12 100644 Binary files a/doc/config_tiles.png and b/doc/config_tiles.png differ diff --git a/doc/index.docbook b/doc/index.docbook index 1b5adf8..0398048 100644 --- a/doc/index.docbook +++ b/doc/index.docbook @@ -521,6 +521,14 @@ </varlistentry> <varlistentry> <term><menuchoice> + <guimenu>Settings</guimenu> + <guimenuitem>Rulesets</guimenuitem> + </menuchoice></term> + <listitem><para><action>Customize rulesets.</action></para> + <para>Use the Ruleset Editor to customize rulesets. For details see <link linkend="ruleset-options">here</link>.</para></listitem> + </varlistentry> + <varlistentry> + <term><menuchoice> <shortcut><keycombo action="simul">&Ctrl;<keycap>G</keycap></keycombo></shortcut> <guimenu>Settings</guimenu> <guimenuitem>Change Visual Angle</guimenuitem> diff --git a/doc/ruleseteditor.png b/doc/ruleseteditor.png index c361a27..b7c3520 100644 Binary files a/doc/ruleseteditor.png and b/doc/ruleseteditor.png differ diff --git a/src/kajonggui.rc b/src/kajonggui.rc index e0af27f..5760036 100644 --- a/src/kajonggui.rc +++ b/src/kajonggui.rc @@ -18,6 +18,7 @@ </Menu> <Menu name="settings" > <Action name="players" /> + <Action name="rulesets" /> <Action name="angle" /> <Action name="fullscreen" /> <Action name="demoMode" /> diff --git a/src/playfield.py b/src/playfield.py index 07189a2..9ee919d 100644 --- a/src/playfield.py +++ b/src/playfield.py @@ -150,16 +150,13 @@ class ConfigDialog(KConfigDialog): """configuration dialog with several pages""" def __init__(self, parent, name): super(ConfigDialog, self).__init__(parent, QString(name), Preferences) - self.rulesetSelector = RulesetSelector(self) - self.pages = [] - self.pages.append(self.addPage(PlayConfigTab(self), - m18nc('kajongg','Play'), "arrow-right")) - self.pages.append(self.addPage(TilesetSelector(self), - m18n("Tiles"), "games-config-tiles")) - self.pages.append(self.addPage(BackgroundSelector(self), - m18n("Backgrounds"), "games-config-background")) - self.pages.append(self.addPage(self.rulesetSelector, - m18n("Rulesets"), "games-kajongg-law")) + self.pages = [ + self.addPage(PlayConfigTab(self), + m18nc('kajongg','Play'), "arrow-right"), + self.addPage(TilesetSelector(self), + m18n("Tiles"), "games-config-tiles"), + self.addPage(BackgroundSelector(self), + m18n("Backgrounds"), "games-config-background")] StateSaver(self) def keyPressEvent(self, event): @@ -171,10 +168,6 @@ class ConfigDialog(KConfigDialog): return KConfigDialog.keyPressEvent(self, event) - def showEvent(self, dummyEvent): - """start transaction""" - self.rulesetSelector.refresh() - class SwapDialog(QMessageBox): """ask the user if two players should change seats""" def __init__(self, swappers): @@ -417,6 +410,7 @@ class PlayField(KXmlGuiWindow): self.clientDialog = None self.playerWindow = None + self.rulesetWindow = None self.scoreTable = None self.explainView = None self.scoringDialog = None @@ -504,6 +498,7 @@ class PlayField(KXmlGuiWindow): QGraphicsView.drawBackground always wants a pixmap for a huge rect like 4000x3000 where my screen only has 1920x1200""" + # pylint: disable=R0915 self.setObjectName("MainWindow") centralWidget = QWidget() scene = MJScene() @@ -535,6 +530,7 @@ class PlayField(KXmlGuiWindow): self.actionAbortGame.setEnabled(False) self.actionQuit = self.__kajonggAction("quit", "application-exit", self.quit, Qt.Key_Q) self.actionPlayers = self.__kajonggAction("players", "im-user", self.slotPlayers) + self.actionRulesets = self.__kajonggAction("rulesets", "games-kajongg-law", self.slotRulesets) self.actionChat = self.__kajonggToggleAction("chat", "call-start", shortcut=Qt.Key_H, actionData=ChatWindow) game = self.game @@ -718,6 +714,9 @@ class PlayField(KXmlGuiWindow): self.actionPlayers.setText(m18nc('@action:intoolbar', "&Players")) self.actionPlayers.setHelpText(m18nc('kajongg @info:tooltip', 'define your players.')) + self.actionRulesets.setText(m18nc('@action:intoolbar', "&Rulesets")) + self.actionRulesets.setHelpText(m18nc('kajongg @info:tooltip', 'customize rulesets.')) + self.actionAngle.setText(m18nc('@action:inmenu', "&Change Visual Angle")) self.actionAngle.setIconText(m18nc('@action:intoolbar', "Angle")) self.actionAngle.setHelpText(m18nc('kajongg @info:tooltip', "Change the visual appearance of the tiles.")) @@ -757,6 +756,12 @@ class PlayField(KXmlGuiWindow): self.playerWindow = PlayerList(self) self.playerWindow.show() + def slotRulesets(self): + """show the player list""" + if not self.rulesetWindow: + self.rulesetWindow = RulesetSelector() + self.rulesetWindow.show() + def selectScoringGame(self): """show all games, select an existing game or create a new game""" Players.load() diff --git a/src/rulesetselector.py b/src/rulesetselector.py index dedaadf..7f2cc35 100644 --- a/src/rulesetselector.py +++ b/src/rulesetselector.py @@ -20,7 +20,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. """ -from PyQt4.QtCore import Qt, QVariant +from PyQt4.QtCore import Qt, QVariant, QSize from PyQt4.QtGui import QWidget, QHBoxLayout, QVBoxLayout, \ QPushButton, QSpacerItem, QSizePolicy, \ QTreeView, QFont, QAbstractItemView, QHeaderView @@ -30,9 +30,10 @@ from util import m18n, m18nc, english, uniqueList from differ import RulesetDiffer from common import Debug from tree import TreeItem, RootItem, TreeModel -from kde import Sorry +from kde import Sorry, KApplication from modeltest import ModelTest from genericdelegates import RightAlignedCheckboxDelegate +from statesaver import StateSaver class RuleRootItem(RootItem): """the root item for the ruleset tree""" @@ -454,13 +455,15 @@ class RuleTreeView(QTreeView): class RulesetSelector( QWidget): """presents all available rulesets with previews""" - def __init__(self, parent): + def __init__(self, parent=None): super(RulesetSelector, self).__init__(parent) self.setContentsMargins(0, 0, 0, 0) self.setupUi() def setupUi(self): """layout the window""" + self.setWindowTitle(m18n('Customize rulesets') + ' - Kajongg') + self.setObjectName('Rulesets') hlayout = QHBoxLayout(self) v1layout = QVBoxLayout() self.v1widget = QWidget() @@ -470,12 +473,11 @@ class RulesetSelector( QWidget): hlayout.addLayout(v2layout) for widget in [self.v1widget, hlayout, v1layout, v2layout]: widget.setContentsMargins(0, 0, 0, 0) - v1layout.setContentsMargins(0, 0, 0, 0) - v2layout.setContentsMargins(0, 0, 0, 0) hlayout.setStretchFactor(self.v1widget, 10) self.btnCopy = QPushButton() self.btnRemove = QPushButton() self.btnCompare = QPushButton() + self.btnClose = QPushButton() self.rulesetView = RuleTreeView(m18nc('kajongg','Rule'), self.btnCopy, self.btnRemove, self.btnCompare) v1layout.addWidget(self.rulesetView) self.rulesetView.setWordWrap(True) @@ -487,12 +489,34 @@ class RulesetSelector( QWidget): self.btnCopy.clicked.connect(self.rulesetView.copyRow) self.btnRemove.clicked.connect(self.rulesetView.removeRow) self.btnCompare.clicked.connect(self.rulesetView.compareRow) + self.btnClose.clicked.connect(self.hide) v2layout.addItem(spacerItem) + v2layout.addWidget(self.btnClose) self.retranslateUi() + StateSaver(self) + self.show() + + def sizeHint(self): + """we never want a horizontal scrollbar for player names, + we always want to see them in full""" + result = QWidget.sizeHint(self) + available = KApplication.kApplication().desktop().availableGeometry() + height = max(result.height(), available.height() * 2 // 3) + width = max(result.width(), available.width() // 2) + return QSize(width, height) + + def minimumSizeHint(self): + """we never want a horizontal scrollbar for player names, + we always want to see them in full""" + return self.sizeHint() + + def showEvent(self, dummyEvent): + """reload the rulesets""" self.refresh() def refresh(self): - """reload the rulesets""" + """retranslate and reload rulesets""" + self.retranslateUi() self.rulesetView.rulesets = Ruleset.availableRulesets() def hideEvent(self, event): @@ -504,6 +528,7 @@ class RulesetSelector( QWidget): def retranslateUi(self): """translate to current language""" - self.btnCopy.setText(m18n("&Copy")) - self.btnRemove.setText(m18n("R&emove")) - self.btnCompare.setText(m18nc('Kajongg ruleset comparer', 'C&ompare')) + self.btnCopy.setText(m18n("Copy")) + self.btnCompare.setText(m18nc('Kajongg ruleset comparer', 'Compare')) + self.btnRemove.setText(m18n("Remove")) + self.btnClose.setText(m18n('Close'))