1
0
Fork 0
mirror of https://github.com/shlomif/PySolFC.git synced 2025-04-05 00:02:29 -04:00

Start extracting ui.tktile.menubar.

In the process made tkconst common to ui.tktile as well.

ui.tktile will be a common namespace for code common to the tk and tile
UIs.
This commit is contained in:
Shlomi Fish 2016-02-13 20:46:41 +02:00
parent 69e1dd75bc
commit 4d6dac1316
8 changed files with 156 additions and 302 deletions

View file

@ -54,111 +54,7 @@ from solverdialog import connect_game_solver_dialog
from tkconst import TOOLBAR_BUTTONS
# ************************************************************************
# *
# ************************************************************************
def createToolbarMenu(menubar, menu):
tearoff = menu.cget('tearoff')
## data_dir = os.path.join(menubar.app.dataloader.dir, 'images', 'toolbar')
## submenu = MfxMenu(menu, label=n_('Style'), tearoff=tearoff)
## for f in os.listdir(data_dir):
## d = os.path.join(data_dir, f)
## if os.path.isdir(d) and os.path.exists(os.path.join(d, 'small')):
## name = f.replace('_', ' ').capitalize()
## submenu.add_radiobutton(label=name,
## variable=menubar.tkopt.toolbar_style,
## value=f, command=menubar.mOptToolbarStyle)
submenu = MfxMenu(menu, label=n_('Compound'), tearoff=tearoff)
for comp, label in COMPOUNDS:
submenu.add_radiobutton(
label=label, variable=menubar.tkopt.toolbar_compound,
value=comp, command=menubar.mOptToolbarCompound)
menu.add_separator()
menu.add_radiobutton(label=n_("Hide"),
variable=menubar.tkopt.toolbar, value=0,
command=menubar.mOptToolbar)
menu.add_radiobutton(label=n_("Top"),
variable=menubar.tkopt.toolbar, value=1,
command=menubar.mOptToolbar)
menu.add_radiobutton(label=n_("Bottom"),
variable=menubar.tkopt.toolbar, value=2,
command=menubar.mOptToolbar)
menu.add_radiobutton(label=n_("Left"),
variable=menubar.tkopt.toolbar, value=3,
command=menubar.mOptToolbar)
menu.add_radiobutton(label=n_("Right"),
variable=menubar.tkopt.toolbar, value=4,
command=menubar.mOptToolbar)
## menu.add_separator()
## menu.add_radiobutton(label=n_("Small icons"),
## variable=menubar.tkopt.toolbar_size, value=0,
## command=menubar.mOptToolbarSize)
## menu.add_radiobutton(label=n_("Large icons"),
## variable=menubar.tkopt.toolbar_size, value=1,
## command=menubar.mOptToolbarSize)
menu.add_separator()
submenu = MfxMenu(menu, label=n_('Visible buttons'), tearoff=tearoff)
for w in TOOLBAR_BUTTONS:
submenu.add_checkbutton(label=_(w.capitalize()),
variable=menubar.tkopt.toolbar_vars[w],
command=lambda m=menubar, w=w: m.mOptToolbarConfig(w))
# ************************************************************************
# *
# ************************************************************************
class MfxMenubar(Tkinter.Menu):
addPath = None
def __init__(self, master, **kw):
self.name = kw["name"]
tearoff = 0
self.n = kw["tearoff"] = int(kw.get("tearoff", tearoff))
Tkinter.Menu.__init__(self, master, **kw)
def labeltoname(self, label):
#print label, type(label)
name = re.sub(r"[^0-9a-zA-Z]", "", label).lower()
label = _(label)
underline = label.find('&')
if underline >= 0:
label = label.replace('&', '')
return name, label, underline
def add(self, itemType, cnf={}):
label = cnf.get("label")
if label:
name = cnf.get('name')
if name:
del cnf['name'] # TclError: unknown option "-name"
else:
name, label, underline = self.labeltoname(label)
cnf["underline"] = cnf.get("underline", underline)
cnf["label"] = label
if name and self.addPath:
path = str(self._w) + "." + name
self.addPath(path, self, self.n, cnf.get("menu"))
Tkinter.Menu.add(self, itemType, cnf)
self.n = self.n + 1
class MfxMenu(MfxMenubar):
def __init__(self, master, label, underline=None, **kw):
if 'name' in kw:
name, label_underline = kw['name'], -1
else:
name, label, label_underline = self.labeltoname(label)
kwdefault(kw, name=name)
MfxMenubar.__init__(self, master, **kw)
if underline is None:
underline = label_underline
if master:
master.add_cascade(menu=self, name=name, label=label, underline=underline)
from pysollib.ui.tktile.menubar import createToolbarMenu, MfxMenubar, MfxMenu
# ************************************************************************
# * - create menubar
# * - update menubar

View file

@ -54,111 +54,7 @@ from solverdialog import connect_game_solver_dialog
from tkconst import TOOLBAR_BUTTONS
# ************************************************************************
# *
# ************************************************************************
def createToolbarMenu(menubar, menu):
tearoff = menu.cget('tearoff')
## data_dir = os.path.join(menubar.app.dataloader.dir, 'images', 'toolbar')
## submenu = MfxMenu(menu, label=n_('Style'), tearoff=tearoff)
## for f in os.listdir(data_dir):
## d = os.path.join(data_dir, f)
## if os.path.isdir(d) and os.path.exists(os.path.join(d, 'small')):
## name = f.replace('_', ' ').capitalize()
## submenu.add_radiobutton(label=name,
## variable=menubar.tkopt.toolbar_style,
## value=f, command=menubar.mOptToolbarStyle)
submenu = MfxMenu(menu, label=n_('Compound'), tearoff=tearoff)
for comp, label in COMPOUNDS:
submenu.add_radiobutton(
label=label, variable=menubar.tkopt.toolbar_compound,
value=comp, command=menubar.mOptToolbarCompound)
menu.add_separator()
menu.add_radiobutton(label=n_("Hide"),
variable=menubar.tkopt.toolbar, value=0,
command=menubar.mOptToolbar)
menu.add_radiobutton(label=n_("Top"),
variable=menubar.tkopt.toolbar, value=1,
command=menubar.mOptToolbar)
menu.add_radiobutton(label=n_("Bottom"),
variable=menubar.tkopt.toolbar, value=2,
command=menubar.mOptToolbar)
menu.add_radiobutton(label=n_("Left"),
variable=menubar.tkopt.toolbar, value=3,
command=menubar.mOptToolbar)
menu.add_radiobutton(label=n_("Right"),
variable=menubar.tkopt.toolbar, value=4,
command=menubar.mOptToolbar)
## menu.add_separator()
## menu.add_radiobutton(label=n_("Small icons"),
## variable=menubar.tkopt.toolbar_size, value=0,
## command=menubar.mOptToolbarSize)
## menu.add_radiobutton(label=n_("Large icons"),
## variable=menubar.tkopt.toolbar_size, value=1,
## command=menubar.mOptToolbarSize)
menu.add_separator()
submenu = MfxMenu(menu, label=n_('Visible buttons'), tearoff=tearoff)
for w in TOOLBAR_BUTTONS:
submenu.add_checkbutton(label=_(w.capitalize()),
variable=menubar.tkopt.toolbar_vars[w],
command=lambda m=menubar, w=w: m.mOptToolbarConfig(w))
# ************************************************************************
# *
# ************************************************************************
class MfxMenubar(Tkinter.Menu):
addPath = None
def __init__(self, master, **kw):
self.name = kw["name"]
tearoff = 0
self.n = kw["tearoff"] = int(kw.get("tearoff", tearoff))
Tkinter.Menu.__init__(self, master, **kw)
def labeltoname(self, label):
#print label, type(label)
name = re.sub(r"[^0-9a-zA-Z]", "", label).lower()
label = _(label)
underline = label.find('&')
if underline >= 0:
label = label.replace('&', '')
return name, label, underline
def add(self, itemType, cnf={}):
label = cnf.get("label")
if label:
name = cnf.get('name')
if name:
del cnf['name'] # TclError: unknown option "-name"
else:
name, label, underline = self.labeltoname(label)
cnf["underline"] = cnf.get("underline", underline)
cnf["label"] = label
if name and self.addPath:
path = str(self._w) + "." + name
self.addPath(path, self, self.n, cnf.get("menu"))
Tkinter.Menu.add(self, itemType, cnf)
self.n = self.n + 1
class MfxMenu(MfxMenubar):
def __init__(self, master, label, underline=None, **kw):
if 'name' in kw:
name, label_underline = kw['name'], -1
else:
name, label, label_underline = self.labeltoname(label)
kwdefault(kw, name=name)
MfxMenubar.__init__(self, master, **kw)
if underline is None:
underline = label_underline
if master:
master.add_cascade(menu=self, name=name, label=label, underline=underline)
from pysollib.ui.tktile.menubar import createToolbarMenu, MfxMenubar, MfxMenu
# ************************************************************************
# * - create menubar
# * - update menubar

View file

@ -1,92 +0,0 @@
#!/usr/bin/env python
# -*- mode: python; coding: utf-8; -*-
##---------------------------------------------------------------------------##
##
## Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer
## Copyright (C) 2003 Mt. Hood Playing Card Co.
## Copyright (C) 2005-2009 Skomoroh
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
##
##---------------------------------------------------------------------------##
__all__ = ['EVENT_HANDLED',
'EVENT_PROPAGATE',
'CURSOR_DRAG',
'CURSOR_WATCH',
'CURSOR_DOWN_ARROW',
'ANCHOR_CENTER',
'ANCHOR_N',
'ANCHOR_NW',
'ANCHOR_NE',
'ANCHOR_S',
'ANCHOR_SW',
'ANCHOR_SE',
'ANCHOR_W',
'ANCHOR_E',
'TOOLBAR_BUTTONS',
]
# imports
import Tkinter
from pysollib.mygettext import _, n_
# ************************************************************************
# * constants
# ************************************************************************
EVENT_HANDLED = "break"
EVENT_PROPAGATE = None
CURSOR_DRAG = "hand1"
CURSOR_WATCH = "watch"
CURSOR_DOWN_ARROW = 'sb_down_arrow'
ANCHOR_CENTER = Tkinter.CENTER
ANCHOR_N = Tkinter.N
ANCHOR_NW = Tkinter.NW
ANCHOR_NE = Tkinter.NE
ANCHOR_S = Tkinter.S
ANCHOR_SW = Tkinter.SW
ANCHOR_SE = Tkinter.SE
ANCHOR_W = Tkinter.W
ANCHOR_E = Tkinter.E
COMPOUNDS = (
##(Tkinter.BOTTOM, 'bottom'),
##(Tkinter.CENTER, 'center'),
##(Tkinter.RIGHT, 'right'),
(Tkinter.NONE, n_('Icons only')),
(Tkinter.TOP, n_('Text below icons')),
(Tkinter.LEFT, n_('Text beside icons')),
('text', n_('Text only')),
)
TOOLBAR_BUTTONS = (
"new",
"restart",
"open",
"save",
"undo",
"redo",
"autodrop",
"shuffle",
"pause",
"statistics",
"rules",
"quit",
"player",
)

22
pysollib/ui/__init__.py Normal file
View file

@ -0,0 +1,22 @@
#!/usr/bin/env python
# -*- mode: python; coding: utf-8; -*-
##---------------------------------------------------------------------------##
##
## Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer
## Copyright (C) 2003 Mt. Hood Playing Card Co.
## Copyright (C) 2005-2009 Skomoroh
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
##
##---------------------------------------------------------------------------##

View file

@ -0,0 +1,22 @@
#!/usr/bin/env python
# -*- mode: python; coding: utf-8; -*-
##---------------------------------------------------------------------------##
##
## Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer
## Copyright (C) 2003 Mt. Hood Playing Card Co.
## Copyright (C) 2005-2009 Skomoroh
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
##
##---------------------------------------------------------------------------##

View file

@ -0,0 +1,109 @@
import re
import Tkinter
from pysollib.mfxutil import kwdefault
from pysollib.mygettext import _, n_
from tkconst import EVENT_HANDLED, EVENT_PROPAGATE, CURSOR_WATCH, COMPOUNDS
from tkconst import TOOLBAR_BUTTONS
def createToolbarMenu(menubar, menu):
tearoff = menu.cget('tearoff')
## data_dir = os.path.join(menubar.app.dataloader.dir, 'images', 'toolbar')
## submenu = MfxMenu(menu, label=n_('Style'), tearoff=tearoff)
## for f in os.listdir(data_dir):
## d = os.path.join(data_dir, f)
## if os.path.isdir(d) and os.path.exists(os.path.join(d, 'small')):
## name = f.replace('_', ' ').capitalize()
## submenu.add_radiobutton(label=name,
## variable=menubar.tkopt.toolbar_style,
## value=f, command=menubar.mOptToolbarStyle)
submenu = MfxMenu(menu, label=n_('Compound'), tearoff=tearoff)
for comp, label in COMPOUNDS:
submenu.add_radiobutton(
label=label, variable=menubar.tkopt.toolbar_compound,
value=comp, command=menubar.mOptToolbarCompound)
menu.add_separator()
menu.add_radiobutton(label=n_("Hide"),
variable=menubar.tkopt.toolbar, value=0,
command=menubar.mOptToolbar)
menu.add_radiobutton(label=n_("Top"),
variable=menubar.tkopt.toolbar, value=1,
command=menubar.mOptToolbar)
menu.add_radiobutton(label=n_("Bottom"),
variable=menubar.tkopt.toolbar, value=2,
command=menubar.mOptToolbar)
menu.add_radiobutton(label=n_("Left"),
variable=menubar.tkopt.toolbar, value=3,
command=menubar.mOptToolbar)
menu.add_radiobutton(label=n_("Right"),
variable=menubar.tkopt.toolbar, value=4,
command=menubar.mOptToolbar)
## menu.add_separator()
## menu.add_radiobutton(label=n_("Small icons"),
## variable=menubar.tkopt.toolbar_size, value=0,
## command=menubar.mOptToolbarSize)
## menu.add_radiobutton(label=n_("Large icons"),
## variable=menubar.tkopt.toolbar_size, value=1,
## command=menubar.mOptToolbarSize)
menu.add_separator()
submenu = MfxMenu(menu, label=n_('Visible buttons'), tearoff=tearoff)
for w in TOOLBAR_BUTTONS:
submenu.add_checkbutton(label=_(w.capitalize()),
variable=menubar.tkopt.toolbar_vars[w],
command=lambda m=menubar, w=w: m.mOptToolbarConfig(w))
# ************************************************************************
# *
# ************************************************************************
class MfxMenubar(Tkinter.Menu):
addPath = None
def __init__(self, master, **kw):
self.name = kw["name"]
tearoff = 0
self.n = kw["tearoff"] = int(kw.get("tearoff", tearoff))
Tkinter.Menu.__init__(self, master, **kw)
def labeltoname(self, label):
#print label, type(label)
name = re.sub(r"[^0-9a-zA-Z]", "", label).lower()
label = _(label)
underline = label.find('&')
if underline >= 0:
label = label.replace('&', '')
return name, label, underline
def add(self, itemType, cnf={}):
label = cnf.get("label")
if label:
name = cnf.get('name')
if name:
del cnf['name'] # TclError: unknown option "-name"
else:
name, label, underline = self.labeltoname(label)
cnf["underline"] = cnf.get("underline", underline)
cnf["label"] = label
if name and self.addPath:
path = str(self._w) + "." + name
self.addPath(path, self, self.n, cnf.get("menu"))
Tkinter.Menu.add(self, itemType, cnf)
self.n = self.n + 1
class MfxMenu(MfxMenubar):
def __init__(self, master, label, underline=None, **kw):
if 'name' in kw:
name, label_underline = kw['name'], -1
else:
name, label, label_underline = self.labeltoname(label)
kwdefault(kw, name=name)
MfxMenubar.__init__(self, master, **kw)
if underline is None:
underline = label_underline
if master:
master.add_cascade(menu=self, name=name, label=label, underline=underline)

View file

@ -78,6 +78,7 @@ kw = {
'pysollib.tk',
'pysollib.tile',
'pysollib.pysolgtk',
'pysollib.ui',
'pysollib.games',
'pysollib.games.special',
'pysollib.games.ultra',