1
0
Fork 0
mirror of https://github.com/shlomif/PySolFC.git synced 2025-04-05 00:02:29 -04:00
PySolFC/pysollib/tile/statusbar.py
skomoroh 890fa91e54 * migration to new ttk (tile) module: http://gpolo.ath.cx:81/projects/ttk_to_tkinter/
* minore improvements of pysolaudio.py

git-svn-id: file:///home/shlomif/Backup/svn-dumps/PySolFC/svnsync-repos/pysolfc/PySolFC/trunk@227 efabe8c0-fbe8-4139-b769-b5e6d273206e
2008-06-10 07:23:08 +00:00

213 lines
6.8 KiB
Python

## vim:ts=4:et:nowrap
##
##---------------------------------------------------------------------------##
##
## PySol -- a Python Solitaire game
##
## Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer
## Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer
## Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer
## Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer
## Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer
## Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer
## All Rights Reserved.
##
## 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 2 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; see the file COPYING.
## If not, write to the Free Software Foundation, Inc.,
## 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
##
## Markus F.X.J. Oberhumer
## <markus@oberhumer.com>
## http://www.oberhumer.com/pysol
##
##---------------------------------------------------------------------------##
__all__ = ['PysolStatusbar',
'HelpStatusbar']
# imports
import os, sys
import Tkinter
import ttk
if __name__ == '__main__':
d = os.path.abspath(os.path.join(sys.path[0], os.pardir, os.pardir))
sys.path.append(d)
import gettext
gettext.install('pysol', d, unicode=True)
# PySol imports
# Toolkit imports
from tkwidget import MfxTooltip
# /***********************************************************************
# //
# ************************************************************************/
class MfxStatusbar:
def __init__(self, top, row, column, columnspan):
self.top = top
self._show = True
self._widgets = []
self._tooltips = []
#
self._row = row
self._column = column
self._columnspan = columnspan
self._label_column = 0
#
self.padx = 1
self.label_relief = 'sunken'
self.top_frame = ttk.Frame(self.top)
self.top_frame.grid(row=self._row, column=self._column,
columnspan=self._columnspan, sticky='ew')
self.frame = ttk.Frame(self.top_frame)
self.frame.pack(side='left', expand=True, fill='both', padx=0, pady=1)
# util
def _createLabel(self, name, expand=False, width=0, tooltip=None):
frame = ttk.Frame(self.frame, borderwidth=1, relief=self.label_relief)
frame.grid(row=0, column=self._label_column,
sticky='nsew', padx=self.padx)
if expand:
self.frame.grid_columnconfigure(self._label_column,
weight=1)
self._label_column += 1
setattr(self, name + '_frame', frame)
self._widgets.append(frame)
label = ttk.Label(frame, width=width, anchor='center')
label.pack(expand=True, fill='both')
setattr(self, name + '_label', label)
self._widgets.append(label)
if tooltip:
b = MfxTooltip(label)
self._tooltips.append(b)
b.setText(tooltip)
return label
def _createSizegrip(self):
sg = ttk.Sizegrip(self.top_frame)
sg.pack(side='right', anchor='se')
#
# public methods
#
def updateText(self, **kw):
for k, v in kw.items():
label = getattr(self, k + '_label')
text = unicode(v)
width = label['width']
if width and len(text) > width:
label['width'] = len(text)
label['text'] = text
def config(self, name, show):
frame = getattr(self, name + '_frame')
if show:
frame.grid()
else:
frame.grid_remove()
def configLabel(self, name, **kw):
if 'fg' in kw:
kw['foreground'] = kw['fg']
del kw['fg']
label = getattr(self, name + '_label')
label.config(**kw)
def show(self, show=True, resize=False):
if self._show == show:
return False
if resize:
self.top.wm_geometry('') # cancel user-specified geometry
if not show:
# hide
self.top_frame.grid_forget()
else:
# show
self.top_frame.grid(row=self._row, column=self._column,
columnspan=self._columnspan, sticky='ew')
self._show = show
return True
def hide(self, resize=False):
self.show(False, resize)
def destroy(self):
for w in self._tooltips:
if w: w.destroy()
self._tooltips = []
for w in self._widgets:
if w: w.destroy()
self._widgets = []
class PysolStatusbar(MfxStatusbar):
def __init__(self, top):
MfxStatusbar.__init__(self, top, row=4, column=0, columnspan=3)
#
for n, t, w in (
('time', _('Playing time'), 10),
('moves', _('Moves/Total moves'), 10),
('gamenumber', _('Game number'), 26),
('stats', _('Games played: won/lost'), 12),
):
self._createLabel(n, tooltip=t, width=w)
#
l = self._createLabel('info', expand=True)
l.config(padding=(8, 0))
self._createSizegrip()
class HelpStatusbar(MfxStatusbar):
def __init__(self, top):
MfxStatusbar.__init__(self, top, row=3, column=0, columnspan=3)
l = self._createLabel('info', expand=True)
l.config(justify='left', anchor='w', padding=(8, 0))
class HtmlStatusbar(MfxStatusbar):
def __init__(self, top, row, column, columnspan):
MfxStatusbar.__init__(self, top, row=row, column=column,
columnspan=columnspan)
l = self._createLabel('url', expand=True)
l.config(justify='left', anchor='w', padding=(8, 0))
self._createSizegrip()
# /***********************************************************************
# //
# ************************************************************************/
class TestStatusbar(PysolStatusbar):
def __init__(self, top, args):
PysolStatusbar.__init__(self, top)
# test some settings
self.updateText(moves=999, gamenumber='#0123456789ABCDEF0123')
self.updateText(info='Some info text.')
def statusbar_main(args):
tk = Tkinter.Tk()
statusbar = TestStatusbar(tk, args)
tk.mainloop()
return 0
if __name__ == '__main__':
sys.exit(statusbar_main(sys.argv))