From 3f962b71346732b9f3cf6b09975974c5bdccf098 Mon Sep 17 00:00:00 2001
From: Shlomi Fish <shlomif@shlomifish.org>
Date: Tue, 16 Feb 2016 18:19:13 +0200
Subject: [PATCH] Extract some common code into a base class.

---
 pysollib/tile/menubar.py      | 80 +----------------------------------
 pysollib/tk/menubar.py        | 79 +---------------------------------
 pysollib/ui/tktile/menubar.py | 76 +++++++++++++++++++++++++++++++++
 3 files changed, 80 insertions(+), 155 deletions(-)

diff --git a/pysollib/tile/menubar.py b/pysollib/tile/menubar.py
index 9f83b023..57439ddb 100644
--- a/pysollib/tile/menubar.py
+++ b/pysollib/tile/menubar.py
@@ -54,90 +54,14 @@ from solverdialog import connect_game_solver_dialog
 
 from pysollib.ui.tktile.tkconst import TOOLBAR_BUTTONS
 
-from pysollib.ui.tktile.menubar import createToolbarMenu, MfxMenubar, MfxMenu
+from pysollib.ui.tktile.menubar import createToolbarMenu, MfxMenubar, MfxMenu, PysolMenubarTkCommon
 # ************************************************************************
 # * - create menubar
 # * - update menubar
 # * - menu actions
 # ************************************************************************
 
-class PysolMenubarTk:
-    def __init__(self, app, top, progress=None):
-        self._createTkOpt()
-        self._setOptions()
-        # init columnbreak
-        self.__cb_max = int(self.top.winfo_screenheight()/23)
-##         sh = self.top.winfo_screenheight()
-##         self.__cb_max = 22
-##         if sh >= 600: self.__cb_max = 27
-##         if sh >= 768: self.__cb_max = 32
-##         if sh >= 1024: self.__cb_max = 40
-        self.progress = progress
-        # create menus
-        self.__menubar = None
-        self.__menupath = {}
-        self.__keybindings = {}
-        self._createMenubar()
-        self.top = top
-
-        if self.progress: self.progress.update(step=1)
-
-        # set the menubar
-        self.updateBackgroundImagesMenu()
-        self.top.config(menu=self.__menubar)
-
-    def _createTkOpt(self):
-        # structure to convert menu-options to Toolkit variables
-        self.tkopt = Struct(
-            gameid = Tkinter.IntVar(),
-            gameid_popular = Tkinter.IntVar(),
-            comment = Tkinter.BooleanVar(),
-            autofaceup = Tkinter.BooleanVar(),
-            autodrop = Tkinter.BooleanVar(),
-            autodeal = Tkinter.BooleanVar(),
-            quickplay = Tkinter.BooleanVar(),
-            undo = Tkinter.BooleanVar(),
-            bookmarks = Tkinter.BooleanVar(),
-            hint = Tkinter.BooleanVar(),
-            shuffle = Tkinter.BooleanVar(),
-            highlight_piles = Tkinter.BooleanVar(),
-            highlight_cards = Tkinter.BooleanVar(),
-            highlight_samerank = Tkinter.BooleanVar(),
-            highlight_not_matching = Tkinter.BooleanVar(),
-            mahjongg_show_removed = Tkinter.BooleanVar(),
-            shisen_show_hint = Tkinter.BooleanVar(),
-            sound = Tkinter.BooleanVar(),
-            auto_scale = Tkinter.BooleanVar(),
-            cardback = Tkinter.IntVar(),
-            tabletile = Tkinter.IntVar(),
-            animations = Tkinter.IntVar(),
-            redeal_animation = Tkinter.BooleanVar(),
-            win_animation = Tkinter.BooleanVar(),
-            shadow = Tkinter.BooleanVar(),
-            shade = Tkinter.BooleanVar(),
-            shade_filled_stacks = Tkinter.BooleanVar(),
-            shrink_face_down = Tkinter.BooleanVar(),
-            toolbar = Tkinter.IntVar(),
-            toolbar_style = Tkinter.StringVar(),
-            toolbar_relief = Tkinter.StringVar(),
-            toolbar_compound = Tkinter.StringVar(),
-            toolbar_size = Tkinter.IntVar(),
-            statusbar = Tkinter.BooleanVar(),
-            num_cards = Tkinter.BooleanVar(),
-            helpbar = Tkinter.BooleanVar(),
-            save_games_geometry = Tkinter.BooleanVar(),
-            splashscreen = Tkinter.BooleanVar(),
-            demo_logo = Tkinter.BooleanVar(),
-            mouse_type = Tkinter.StringVar(),
-            mouse_undo = Tkinter.BooleanVar(),
-            negative_bottom = Tkinter.BooleanVar(),
-            pause = Tkinter.BooleanVar(),
-            theme = Tkinter.StringVar(),
-            toolbar_vars = {},
-        )
-        for w in TOOLBAR_BUTTONS:
-            self.tkopt.toolbar_vars[w] = Tkinter.BooleanVar()
-
+class PysolMenubarTk(PysolMenubarTkCommon):
     def _setOptions(self):
         tkopt, opt = self.tkopt, self.app.opt
         # set state of the menu items
diff --git a/pysollib/tk/menubar.py b/pysollib/tk/menubar.py
index 4662dc5d..4f4084b7 100644
--- a/pysollib/tk/menubar.py
+++ b/pysollib/tk/menubar.py
@@ -54,89 +54,14 @@ from solverdialog import connect_game_solver_dialog
 
 from pysollib.ui.tktile.tkconst import TOOLBAR_BUTTONS
 
-from pysollib.ui.tktile.menubar import createToolbarMenu, MfxMenubar, MfxMenu
+from pysollib.ui.tktile.menubar import createToolbarMenu, MfxMenubar, MfxMenu, PysolMenubarTkCommon
 # ************************************************************************
 # * - create menubar
 # * - update menubar
 # * - menu actions
 # ************************************************************************
 
-class PysolMenubarTk:
-    def __init__(self, app, top, progress=None):
-        self._createTkOpt()
-        self._setOptions()
-        # init columnbreak
-        self.__cb_max = int(self.top.winfo_screenheight()/23)
-##         sh = self.top.winfo_screenheight()
-##         self.__cb_max = 22
-##         if sh >= 600: self.__cb_max = 27
-##         if sh >= 768: self.__cb_max = 32
-##         if sh >= 1024: self.__cb_max = 40
-        self.progress = progress
-        # create menus
-        self.__menubar = None
-        self.__menupath = {}
-        self.__keybindings = {}
-        self._createMenubar()
-        self.top = top
-
-        if self.progress: self.progress.update(step=1)
-
-        # set the menubar
-        self.updateBackgroundImagesMenu()
-        self.top.config(menu=self.__menubar)
-
-    def _createTkOpt(self):
-        # structure to convert menu-options to Toolkit variables
-        self.tkopt = Struct(
-            gameid = Tkinter.IntVar(),
-            gameid_popular = Tkinter.IntVar(),
-            comment = Tkinter.BooleanVar(),
-            autofaceup = Tkinter.BooleanVar(),
-            autodrop = Tkinter.BooleanVar(),
-            autodeal = Tkinter.BooleanVar(),
-            quickplay = Tkinter.BooleanVar(),
-            undo = Tkinter.BooleanVar(),
-            bookmarks = Tkinter.BooleanVar(),
-            hint = Tkinter.BooleanVar(),
-            shuffle = Tkinter.BooleanVar(),
-            highlight_piles = Tkinter.BooleanVar(),
-            highlight_cards = Tkinter.BooleanVar(),
-            highlight_samerank = Tkinter.BooleanVar(),
-            highlight_not_matching = Tkinter.BooleanVar(),
-            mahjongg_show_removed = Tkinter.BooleanVar(),
-            shisen_show_hint = Tkinter.BooleanVar(),
-            sound = Tkinter.BooleanVar(),
-            auto_scale = Tkinter.BooleanVar(),
-            cardback = Tkinter.IntVar(),
-            tabletile = Tkinter.IntVar(),
-            animations = Tkinter.IntVar(),
-            redeal_animation = Tkinter.BooleanVar(),
-            win_animation = Tkinter.BooleanVar(),
-            shadow = Tkinter.BooleanVar(),
-            shade = Tkinter.BooleanVar(),
-            shade_filled_stacks = Tkinter.BooleanVar(),
-            shrink_face_down = Tkinter.BooleanVar(),
-            toolbar = Tkinter.IntVar(),
-            toolbar_style = Tkinter.StringVar(),
-            toolbar_relief = Tkinter.StringVar(),
-            toolbar_compound = Tkinter.StringVar(),
-            toolbar_size = Tkinter.IntVar(),
-            statusbar = Tkinter.BooleanVar(),
-            num_cards = Tkinter.BooleanVar(),
-            helpbar = Tkinter.BooleanVar(),
-            save_games_geometry = Tkinter.BooleanVar(),
-            splashscreen = Tkinter.BooleanVar(),
-            demo_logo = Tkinter.BooleanVar(),
-            mouse_type = Tkinter.StringVar(),
-            mouse_undo = Tkinter.BooleanVar(),
-            negative_bottom = Tkinter.BooleanVar(),
-            pause = Tkinter.BooleanVar(),
-            toolbar_vars = {},
-        )
-        for w in TOOLBAR_BUTTONS:
-            self.tkopt.toolbar_vars[w] = Tkinter.BooleanVar()
-
+class PysolMenubarTk(PysolMenubarTkCommon):
     def _setOptions(self):
         tkopt, opt = self.tkopt, self.app.opt
         # set state of the menu items
diff --git a/pysollib/ui/tktile/menubar.py b/pysollib/ui/tktile/menubar.py
index f7227a49..e75a8ab3 100644
--- a/pysollib/ui/tktile/menubar.py
+++ b/pysollib/ui/tktile/menubar.py
@@ -107,3 +107,79 @@ class MfxMenu(MfxMenubar):
             master.add_cascade(menu=self, name=name, label=label, underline=underline)
 
 
+class PysolMenubarTkCommon:
+    def __init__(self, app, top, progress=None):
+        self._createTkOpt()
+        self._setOptions()
+        # init columnbreak
+        self.__cb_max = int(self.top.winfo_screenheight()/23)
+##         sh = self.top.winfo_screenheight()
+##         self.__cb_max = 22
+##         if sh >= 600: self.__cb_max = 27
+##         if sh >= 768: self.__cb_max = 32
+##         if sh >= 1024: self.__cb_max = 40
+        self.progress = progress
+        # create menus
+        self.__menubar = None
+        self.__menupath = {}
+        self.__keybindings = {}
+        self._createMenubar()
+        self.top = top
+
+        if self.progress: self.progress.update(step=1)
+
+        # set the menubar
+        self.updateBackgroundImagesMenu()
+        self.top.config(menu=self.__menubar)
+
+    def _createTkOpt(self):
+        # structure to convert menu-options to Toolkit variables
+        self.tkopt = Struct(
+            gameid = Tkinter.IntVar(),
+            gameid_popular = Tkinter.IntVar(),
+            comment = Tkinter.BooleanVar(),
+            autofaceup = Tkinter.BooleanVar(),
+            autodrop = Tkinter.BooleanVar(),
+            autodeal = Tkinter.BooleanVar(),
+            quickplay = Tkinter.BooleanVar(),
+            undo = Tkinter.BooleanVar(),
+            bookmarks = Tkinter.BooleanVar(),
+            hint = Tkinter.BooleanVar(),
+            shuffle = Tkinter.BooleanVar(),
+            highlight_piles = Tkinter.BooleanVar(),
+            highlight_cards = Tkinter.BooleanVar(),
+            highlight_samerank = Tkinter.BooleanVar(),
+            highlight_not_matching = Tkinter.BooleanVar(),
+            mahjongg_show_removed = Tkinter.BooleanVar(),
+            shisen_show_hint = Tkinter.BooleanVar(),
+            sound = Tkinter.BooleanVar(),
+            auto_scale = Tkinter.BooleanVar(),
+            cardback = Tkinter.IntVar(),
+            tabletile = Tkinter.IntVar(),
+            animations = Tkinter.IntVar(),
+            redeal_animation = Tkinter.BooleanVar(),
+            win_animation = Tkinter.BooleanVar(),
+            shadow = Tkinter.BooleanVar(),
+            shade = Tkinter.BooleanVar(),
+            shade_filled_stacks = Tkinter.BooleanVar(),
+            shrink_face_down = Tkinter.BooleanVar(),
+            toolbar = Tkinter.IntVar(),
+            toolbar_style = Tkinter.StringVar(),
+            toolbar_relief = Tkinter.StringVar(),
+            toolbar_compound = Tkinter.StringVar(),
+            toolbar_size = Tkinter.IntVar(),
+            statusbar = Tkinter.BooleanVar(),
+            num_cards = Tkinter.BooleanVar(),
+            helpbar = Tkinter.BooleanVar(),
+            save_games_geometry = Tkinter.BooleanVar(),
+            splashscreen = Tkinter.BooleanVar(),
+            demo_logo = Tkinter.BooleanVar(),
+            mouse_type = Tkinter.StringVar(),
+            mouse_undo = Tkinter.BooleanVar(),
+            negative_bottom = Tkinter.BooleanVar(),
+            pause = Tkinter.BooleanVar(),
+            theme = Tkinter.StringVar(),
+            toolbar_vars = {},
+        )
+        for w in TOOLBAR_BUTTONS:
+            self.tkopt.toolbar_vars[w] = Tkinter.BooleanVar()