diff --git a/pysollib/pysolgtk/tkutil.py b/pysollib/pysolgtk/tkutil.py index 9374f12a..18607e83 100644 --- a/pysollib/pysolgtk/tkutil.py +++ b/pysollib/pysolgtk/tkutil.py @@ -1,6 +1,6 @@ #!/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. @@ -19,14 +19,15 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -# ---------------------------------------------------------------------------## +# --------------------------------------------------------------------------- # imports -import sys, os, string, time +import string import gobject -import pango, gtk +import gtk +import pango from gtk import gdk @@ -37,12 +38,15 @@ from gtk import gdk def wm_withdraw(window): window.hide() + def wm_deiconify(window): window.present() + def wm_map(window, maximized=None): window.show() + def makeToplevel(parent, title=None, class_=None, gtkclass=gtk.Window): window = gtkclass() if not hasattr(window, 'table'): @@ -52,20 +56,20 @@ def makeToplevel(parent, title=None, class_=None, gtkclass=gtk.Window): window.realize() # needed for set_icon_name() if title: window.set_title(title) - ##~ window.set_icon_name(title) + # ~ window.set_icon_name(title) if class_: - ## window.set_wmclass(???) ## FIXME + # window.set_wmclass(???) # FIXME pass return window def setTransient(window, parent, relx=0.5, rely=0.3, expose=1): window.realize() - ##~ grab_add(window) + # ~ grab_add(window) if parent: window.set_transient_for(parent) if expose: - #window.unmap() # Become visible at the desired location + # window.unmap() # Become visible at the desired location pass @@ -122,7 +126,6 @@ class _PysolPixmap: # FIXME pass - def clone(self): pixbuf = self.pixbuf.copy() im = _PysolPixmap(pixbuf=pixbuf) @@ -145,18 +148,22 @@ class _PysolPixmap: def loadImage(file): return _PysolPixmap(file=file) + def copyImage(image, x, y, width, height): # FIXME return image.clone() + def createImage(width, height, fill, outline=None): # FIXME return _PysolPixmap(width=width, height=height, fill=fill, outline=outline) + def shadowImage(image): # FIXME return None + def markImage(image): # FIXME return image @@ -172,41 +179,56 @@ def _wrap_b1_press(e): not (e.state & gdk.CONTROL_MASK) and not (e.state & gdk.SHIFT_MASK)) + def _wrap_b1_double(e): return e.type == gdk._2BUTTON_PRESS and e.button == 1 + def _wrap_b1_control(e): - return e.type == gdk.BUTTON_PRESS and e.button == 1 and (e.state & gdk.CONTROL_MASK) + return e.type == gdk.BUTTON_PRESS and e.button == 1 \ + and (e.state & gdk.CONTROL_MASK) + def _wrap_b1_shift(e): - return e.type == gdk.BUTTON_PRESS and e.button == 1 and (e.state & gdk.SHIFT_MASK) + return e.type == gdk.BUTTON_PRESS and e.button == 1 \ + and (e.state & gdk.SHIFT_MASK) + def _wrap_b2_press(e): return e.type == gdk.BUTTON_PRESS and e.button == 2 + def _wrap_b3_press(e): return (e.type == gdk.BUTTON_PRESS and e.button == 3 and not (e.state & gdk.CONTROL_MASK) and not (e.state & gdk.SHIFT_MASK)) + def _wrap_b3_control(e): - return e.type == gdk.BUTTON_PRESS and e.button == 3 and (e.state & gdk.CONTROL_MASK) + return e.type == gdk.BUTTON_PRESS and e.button == 3 \ + and (e.state & gdk.CONTROL_MASK) + def _wrap_b1_motion(e): return e.type == gdk.MOTION_NOTIFY and (e.state & gdk.BUTTON_PRESS_MASK) + def _wrap_b1_release(e): return e.type == gdk.BUTTON_RELEASE and e.button == 1 + def _wrap_key_press(e, key): return e.type == gdk.KEY_PRESS and e.key == key + def _wrap_enter(e): return e.type == gdk.ENTER_NOTIFY + def _wrap_leave(e): return e.type == gdk.LEAVE_NOTIFY + _wrap_handlers = { '<1>': (_wrap_b1_press, 'button-press-event'), '': (_wrap_b1_press, 'button-press-event'), @@ -223,21 +245,22 @@ _wrap_handlers = { '': (_wrap_enter, 'enter-notify-event'), '': (_wrap_leave, 'leave-notify-event'), } -## for c in " " + string.letters: -## seq = "<" + c + ">" -## if not _wrap_handlers.has_key(seq): -## _wrap_handlers[seq] = lambda e, key=c: _wrap_key_press(e, key) -## import pprint; pprint.pprint(_wrap_handlers) +# for c in " " + string.letters: +# seq = "<" + c + ">" +# if not _wrap_handlers.has_key(seq): +# _wrap_handlers[seq] = lambda e, key=c: _wrap_key_press(e, key) +# import pprint; pprint.pprint(_wrap_handlers) -## NOT BOUND: +# NOT BOUND: __bindings = {} + def _wrap_event(widget, event, l): for wrap, func in l: if wrap(event): - #print "event:", wrap, func, event + # print "event:", wrap, func, event return func(event) return 0 @@ -245,7 +268,7 @@ def _wrap_event(widget, event, l): def bind(widget, sequence, func, add=None): wrap = _wrap_handlers.get(sequence) if not wrap: - ##print "NOT BOUND:", sequence + # print "NOT BOUND:", sequence return wrap, signal = wrap # @@ -261,7 +284,7 @@ def bind(widget, sequence, func, add=None): def unbind_destroy(widget): k = id(widget) if k in __bindings: - ## FIXME + # FIXME del __bindings[k] @@ -273,10 +296,12 @@ def after(widget, ms, func, *args): timer = gobject.timeout_add(ms, func, *args) return timer + def after_idle(widget, func, *args): gobject.idle_add(func, *args) return None + def after_cancel(t): if t is not None: gobject.source_remove(t) @@ -297,9 +322,8 @@ def create_pango_font_desc(font): def get_text_width(text, font=None, root=None): if root: - pango_font_desc = create_pango_font_desc(font) + # pango_font_desc = create_pango_font_desc(font) pangolayout = root.create_pango_layout(text) width = pangolayout.get_pixel_extents()[1][2] return width return 0 - diff --git a/pysollib/pysolgtk/tkwidget.py b/pysollib/pysolgtk/tkwidget.py index 0ad29f57..a6e2db28 100644 --- a/pysollib/pysolgtk/tkwidget.py +++ b/pysollib/pysolgtk/tkwidget.py @@ -1,6 +1,6 @@ #!/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. @@ -19,28 +19,28 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -# ---------------------------------------------------------------------------## +# --------------------------------------------------------------------------- # imports -import os, sys import gtk -gdk = gtk.gdk # PySol imports -from pysollib.mygettext import _, n_ +from pysollib.mygettext import _ # Toolkit imports -from tkutil import makeToplevel, setTransient, wm_withdraw +from tkutil import setTransient from pysollib.mfxutil import kwdefault, KwStruct, openURL +gdk = gtk.gdk # ************************************************************************ # * # ************************************************************************ + class _MyDialog(gtk.Dialog): def __init__(self): gtk.Dialog.__init__(self) @@ -60,6 +60,7 @@ class _MyDialog(gtk.Dialog): class MfxDialog(_MyDialog): img = {} button_img = {} + def __init__(self, parent, title='', timeout=0, resizable=0, @@ -78,19 +79,18 @@ class MfxDialog(_MyDialog): self.button = -1 self.buttons = [] - modal=True + modal = True if modal: setTransient(self, parent) # settings if width > 0 or height > 0: self.set_size_request(width, height) - #self.window.resize(width, height) + # self.window.resize(width, height) self.set_title(title) # self.connect('key-press-event', self._keyPressEvent) - def createBox(self, widget_class=gtk.HBox): box = widget_class(spacing=5) box.set_border_width(5) @@ -112,7 +112,7 @@ class MfxDialog(_MyDialog): stock = {"info": gtk.STOCK_DIALOG_INFO, "error": gtk.STOCK_DIALOG_ERROR, "warning": gtk.STOCK_DIALOG_WARNING, - "question": gtk.STOCK_DIALOG_QUESTION} [kw['bitmap']] + "question": gtk.STOCK_DIALOG_QUESTION}[kw['bitmap']] im = gtk.image_new_from_stock(stock, gtk.ICON_SIZE_DIALOG) box.pack_start(im) im.set_property('xpad', kw['bitmap_padx']) @@ -137,14 +137,14 @@ class MfxDialog(_MyDialog): continue if isinstance(text, (list, tuple)): text, index = text - else: # str + else: # str index = i text = text.replace('&', '_') b = gtk.Button(text) b.set_property('can-default', True) if index == default: b.grab_focus() - #b.grab_default() + # b.grab_default() b.set_data("user_data", index) b.connect("clicked", self.done) box.pack_start(b) @@ -164,9 +164,9 @@ class MfxDialog(_MyDialog): image=None, image_side="left", image_padx=10, image_pady=20, ) -## # default to separator if more than one button -## sw = len(kw.strings) > 1 -## kwdefault(kw.__dict__, separator=sw) + # # default to separator if more than one button + # sw = len(kw.strings) > 1 + # kwdefault(kw.__dict__, separator=sw) return kw def done(self, button): @@ -181,7 +181,7 @@ class MfxDialog(_MyDialog): class MfxMessageDialog(MfxDialog): def __init__(self, parent, title, **kw): - ##print 'MfxMessageDialog', kw + # print 'MfxMessageDialog', kw kw = self.initKw(kw) MfxDialog.__init__(self, parent, title, **kw) @@ -198,13 +198,13 @@ class MfxMessageDialog(MfxDialog): label.show() self.set_position(gtk.WIN_POS_CENTER_ON_PARENT) - ##self.set_position(gtk.WIN_POS_CENTER) + # self.set_position(gtk.WIN_POS_CENTER) self.show_all() gtk.main() def initKw(self, kw): - #if kw.has_key('bitmap'): + # if kw.has_key('bitmap'): # kwdefault(kw, width=250, height=150) return MfxDialog.initKw(self, kw) @@ -243,14 +243,14 @@ class PysolAboutDialog(MfxDialog): self.createButtons(bottom_box, kw) self.set_position(gtk.WIN_POS_CENTER_ON_PARENT) - ##self.set_position(gtk.WIN_POS_CENTER) + # self.set_position(gtk.WIN_POS_CENTER) self.show_all() event_box.window.set_cursor(gdk.Cursor(gdk.HAND2)) gtk.main() def initKw(self, kw): - #if kw.has_key('bitmap'): + # if kw.has_key('bitmap'): # kwdefault(kw, width=250, height=150) return MfxDialog.initKw(self, kw) @@ -270,7 +270,8 @@ class MfxExceptionDialog(MfxDialog): text = text + "\n" text = text + "\n" if isinstance(ex, EnvironmentError) and ex.filename is not None: - t = '[Errno %s] %s:\n%s' % (ex.errno, ex.strerror, repr(ex.filename)) + t = '[Errno %s] %s:\n%s' % \ + (ex.errno, ex.strerror, repr(ex.filename)) else: t = str(ex) kw.text = text + t @@ -326,10 +327,5 @@ class MfxSimpleEntry(_MyDialog): self.quit() - - - - class SelectDialogTreeData: pass - diff --git a/pysollib/pysolgtk/tkwrap.py b/pysollib/pysolgtk/tkwrap.py index d9e65a57..fb9825cf 100644 --- a/pysollib/pysolgtk/tkwrap.py +++ b/pysollib/pysolgtk/tkwrap.py @@ -1,6 +1,6 @@ #!/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. @@ -19,21 +19,21 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -# ---------------------------------------------------------------------------## +# --------------------------------------------------------------------------- # imports -import os, sys, time, types +import time import gtk from gtk import gdk # PySol imports -## from pysollib.images import Images +# from pysollib.images import Images from pysollib.settings import TITLE, VERSION # Toolkit imports -from tkutil import makeToplevel, loadImage +from tkutil import makeToplevel # ************************************************************************ @@ -43,8 +43,10 @@ from tkutil import makeToplevel, loadImage class TclError: pass + def make_help_toplevel(parent, title=None, class_=None): - return makeToplevel(parent, title=title, class_=class_, gtkclass=_MfxToplevel) + return makeToplevel( + parent, title=title, class_=class_, gtkclass=_MfxToplevel) # ************************************************************************ @@ -54,9 +56,9 @@ def make_help_toplevel(parent, title=None, class_=None): class _MfxToplevel(gtk.Window): def __init__(self, *args, **kw): gtk.Window.__init__(self, type=gtk.WINDOW_TOPLEVEL) - #self.vbox = gtk.VBox() - #self.vbox.show() - #self.add(self.vbox) + # self.vbox = gtk.VBox() + # self.vbox.show() + # self.add(self.vbox) self.table = gtk.Table(3, 6, False) self.add(self.table) self.connect('destroy', self.mainquit) @@ -67,20 +69,20 @@ class _MfxToplevel(gtk.Window): if attr == 'cursor': # FIXME return gdk.LEFT_PTR - return self.get_window().get_cursor(v) + # return self.get_window().get_cursor(v) elif attr in ("background", "bg"): c = self.style.bg[gtk.STATE_NORMAL] c = '#%02x%02x%02x' % (c.red/256, c.green/256, c.blue/256) return c - print "Toplevel cget:", attr - ##~ raise AttributeError, attr + print("Toplevel cget:", attr) + # ~ raise AttributeError, attr return None def configure(self, **kw): height, width = -1, -1 for k, v in kw.items(): if k in ("background", "bg"): - ##print "Toplevel configure: bg" + # print "Toplevel configure: bg" pass elif k == "cursor": self.setCursor(v) @@ -89,17 +91,16 @@ class _MfxToplevel(gtk.Window): elif k == "width": width = v else: - print "Toplevel configure:", k, v - raise AttributeError, k + print("Toplevel configure:", k, v) + raise AttributeError(k) if height > 0 and width > 0: - ##print 'configure: size:', width, height - ## FIXME - #self.set_default_size(width, height) - #self.set_size_request(width, height) - #self.set_geometry_hints(base_width=width, base_height=height) + # print 'configure: size:', width, height + # FIXME + # self.set_default_size(width, height) + # self.set_size_request(width, height) + # self.set_geometry_hints(base_width=width, base_height=height) pass - config = configure def mainloop(self): @@ -112,7 +113,8 @@ class _MfxToplevel(gtk.Window): pass def setCursor(self, cursor): - self.get_window().set_cursor(cursor_new(v)) + # self.get_window().set_cursor(cursor_new(v)) + pass def tk_setPalette(self, *args): # FIXME ? @@ -122,7 +124,7 @@ class _MfxToplevel(gtk.Window): self.update_idletasks() def update_idletasks(self): - ##print '_MfxToplevel.update_idletasks' + # print '_MfxToplevel.update_idletasks' while gtk.events_pending(): gtk.main_iteration(True) @@ -137,7 +139,7 @@ class _MfxToplevel(gtk.Window): return gdk.screen_height() def winfo_screendepth(self): - ##print 'winfo_screendepth', self.window.get_geometry() + # print 'winfo_screendepth', self.window.get_geometry() return self.window.get_geometry()[-1] def wm_command(self, *args): @@ -148,35 +150,35 @@ class _MfxToplevel(gtk.Window): self.present() def wm_geometry(self, newGeometry=None): - ##print 'wm_geometry', newGeometry + # print 'wm_geometry', newGeometry if not newGeometry: pass - ##self.reshow_with_initial_size() - ##self.resize(1, 1) + # self.reshow_with_initial_size() + # self.resize(1, 1) else: pass - ##w, h = newGeometry - ##self.resize(w, h) + # w, h = newGeometry + # self.resize(w, h) def wm_group(self, pathName=None): # FIXME pass def wm_iconbitmap(self, name): - print 'wm_iconbitmap:', name + print('wm_iconbitmap:', name) if name and name[0] == '@' and name[-4:] == '.xbm': name = name[1:-4] + '.xpm' - bg = self.get_style().bg[gtk.STATE_NORMAL] - pixmap, mask = create_pixmap_from_xpm(self, bg, name) - self.set_icon(pixmap, mask) + # bg = self.get_style().bg[gtk.STATE_NORMAL] + # pixmap, mask = create_pixmap_from_xpm(self, bg, name) + # self.set_icon(pixmap, mask) def wm_iconname(self, name): pass - ##~ self.set_icon_name(name) + # ~ self.set_icon_name(name) def wm_minsize(self, width, height): pass - ##~ self.set_geometry_hints(min_width=width, min_height=height) + # ~ self.set_geometry_hints(min_width=width, min_height=height) def wm_title(self, title): self.set_title(title) @@ -185,33 +187,32 @@ class _MfxToplevel(gtk.Window): self.present() def option_add(self, *args): - ##print self, 'option_add' + # print self, 'option_add' pass def option_get(self, *args): if args and args[0] == 'font': return self.get_style().font_desc.to_string() - print '_MfxToplevel: option_get', args + print('_MfxToplevel: option_get', args) return None def grid_columnconfigure(self, *args, **kw): - ##print self, 'grid_columnconfigure' + # print self, 'grid_columnconfigure' pass def grid_rowconfigure(self, *args, **kw): - ##print self, 'grid_rowconfigure' + # print self, 'grid_rowconfigure' pass def interruptSleep(self, *args, **kw): - ##print self, 'interruptSleep' + # print self, 'interruptSleep' pass def wm_state(self): - ##print self, 'wm_state' + # print self, 'wm_state' pass - # ************************************************************************ # * The root toplevel window of an application. # ************************************************************************ @@ -226,21 +227,22 @@ class MfxRoot(_MfxToplevel): self.app = app def initToolkit(self, app, fg=None, bg=None, font=None, theme=None): - sw, sh, sd = self.winfo_screenwidth(), self.winfo_screenheight(), self.winfo_screendepth() - ##self.wm_group(self) + sw, sh = self.winfo_screenwidth(), self.winfo_screenheight() + # self.wm_group(self) self.wm_title(TITLE + ' ' + VERSION) - ##self.wm_iconname(TITLE + ' ' + VERSION) + # self.wm_iconname(TITLE + ' ' + VERSION) if sw < 640 or sh < 480: self.wm_minsize(400, 300) else: self.wm_minsize(520, 360) - ##self.self.wm_maxsize(9999, 9999) # unlimited + # self.self.wm_maxsize(9999, 9999) # unlimited # sometimes an update() is needed under Windows, whereas # under Unix an update_idletask() would be enough... def busyUpdate(self): game = None - if self.app: game = self.app.game + if self.app: + game = self.app.game if not game: self.update() elif not game.busy: @@ -257,6 +259,6 @@ class MfxRoot(_MfxToplevel): if self.app and self.app.menubar: self.app.menubar.mQuit() else: - ##self.after_idle(self.quit) + # self.after_idle(self.quit) pass return True diff --git a/tests/style/py-flake8.t b/tests/style/py-flake8.t index 6da2309c..1d2269f0 100644 --- a/tests/style/py-flake8.t +++ b/tests/style/py-flake8.t @@ -10,7 +10,7 @@ use String::ShellQuote qw/ shell_quote /; # my $cmd = shell_quote( 'flake8', '.' ); my $cmd = shell_quote( 'flake8', - grep { not($_ eq './pysollib/pysoltk.py') } glob('./pysollib/*.py ./pysollib/[cm]*/*.py ./pysollib/pysolgtk/{[a-s]*,t[a-i]*,tk[a-s]*}.py') ); + grep { not($_ eq './pysollib/pysoltk.py') } glob('./pysollib/*.py ./pysollib/[cm]*/*.py ./pysollib/pysolgtk/{[a-s]*,t[a-i]*,tk*}.py') ); # TEST eq_or_diff( scalar(`$cmd`), '', "flake8 is happy with the code." );