From e613ca2924e44688f1629196773fe9d8753fe33d Mon Sep 17 00:00:00 2001 From: Aneesh Dogra Date: Tue, 18 Dec 2012 16:56:00 +0000 Subject: Initial Gtk3 port. --- diff --git a/SliderPuzzleActivity.py b/SliderPuzzleActivity.py index 31c1c87..2126404 100644 --- a/SliderPuzzleActivity.py +++ b/SliderPuzzleActivity.py @@ -19,10 +19,10 @@ # # init gthreads before using abiword -import gobject -gobject.threads_init() +from gi.repository import GObject +GObject.threads_init() -from sugar.activity.activity import Activity, ActivityToolbox, get_bundle_path +from sugar3.activity.activity import Activity, ActivityToolbox, get_bundle_path from gettext import gettext as _ from SliderPuzzleUI import SliderPuzzleUI from mamamedia_modules import TubeHelper diff --git a/SliderPuzzleUI.py b/SliderPuzzleUI.py index 802ea82..506bdc0 100755 --- a/SliderPuzzleUI.py +++ b/SliderPuzzleUI.py @@ -17,10 +17,7 @@ # If you find this activity useful or end up using parts of it in one of your # own creations we would love to hear from you at info@WorldWideWorkshop.org ! # - -import pygtk -pygtk.require('2.0') -import gtk, gobject, pango +from gi.repository import Gtk, GObject, Pango from mamamedia_modules import utils from mamamedia_modules import NotebookReaderWidget @@ -50,8 +47,8 @@ import os import md5 try: - from sugar.activity import activity - from sugar.graphics import units + from sugar3.activity import activity + from sugar3.graphics import units _inside_sugar = True except: _inside_sugar = False @@ -73,36 +70,36 @@ COLOR_FRAME_THUMB = COLOR_FRAME_GAME COLOR_FRAME_CONTROLS = "#FFFF00" COLOR_BG_CONTROLS = "#66CC00" COLOR_FG_BUTTONS = ( - (gtk.STATE_NORMAL,"#CCFF99"), - (gtk.STATE_ACTIVE,"#CCFF99"), - (gtk.STATE_PRELIGHT,"#CCFF99"), - (gtk.STATE_SELECTED,"#CCFF99"), - (gtk.STATE_INSENSITIVE,"#CCFF99"), + (Gtk.StateType.NORMAL,"#CCFF99"), + (Gtk.StateType.ACTIVE,"#CCFF99"), + (Gtk.StateType.PRELIGHT,"#CCFF99"), + (Gtk.StateType.SELECTED,"#CCFF99"), + (Gtk.StateType.INSENSITIVE,"#CCFF99"), ) COLOR_BG_BUTTONS = ( - (gtk.STATE_NORMAL,"#027F01"), - (gtk.STATE_ACTIVE,"#014D01"), - (gtk.STATE_PRELIGHT,"#016D01"), - (gtk.STATE_SELECTED,"#027F01"), - (gtk.STATE_INSENSITIVE,"#CCCCCC"), + (Gtk.StateTypeNORMAL,"#027F01"), + (Gtk.StateTypeACTIVE,"#014D01"), + (Gtk.StateTypePRELIGHT,"#016D01"), + (Gtk.StateTypeSELECTED,"#027F01"), + (Gtk.StateTypeINSENSITIVE,"#CCCCCC"), ) def prepare_btn(btn, w=-1, h=-1): for state, color in COLOR_BG_BUTTONS: - btn.modify_bg(state, gtk.gdk.color_parse(color)) + btn.modify_bg(state, Gdk.color_parse(color)) c = btn.get_child() if c is not None: for state, color in COLOR_FG_BUTTONS: - c.modify_fg(state, gtk.gdk.color_parse(color)) + c.modify_fg(state, Gdk.color_parse(color)) else: for state, color in COLOR_FG_BUTTONS: - btn.modify_fg(state, gtk.gdk.color_parse(color)) + btn.modify_fg(state, Gdk.color_parse(color)) if w>0 or h>0: btn.set_size_request(w, h) return btn -class SliderPuzzleUI (gtk.Table): +class SliderPuzzleUI (Gtk.Table): __gsignals__ = {'game-state-changed' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (int,))} def __init__(self, parent): @@ -116,7 +113,7 @@ class SliderPuzzleUI (gtk.Table): self._state = GAME_IDLE - inner_table = gtk.Table(2,2,False) + inner_table = Gtk.Table(2,2,False) self.add(inner_table) self.game = SliderPuzzleWidget(9, GAME_SIZE, GAME_SIZE) @@ -128,69 +125,69 @@ class SliderPuzzleUI (gtk.Table): desktop = BorderFrame(border_color=COLOR_FRAME_CONTROLS) desktop.show() desktop.add(self.game) - self.game_wrapper = gtk.VBox() + self.game_wrapper = Gtk.VBox() self.game_wrapper.show() - inner = gtk.HBox() + inner = Gtk.HBox() inner.show() #BorderFrame(border=BORDER_ALL_BUT_BOTTOM, # border_color=COLOR_FRAME_CONTROLS, # bg_color=COLOR_BG_CONTROLS) - inner.pack_start(desktop, expand=True, fill=False) - self.game_wrapper.pack_start(inner, expand=True, fill=False) + inner.pack_start(desktop, True, False, 0) + self.game_wrapper.pack_start(inner, True, False, 0) # panel is a holder for everything on the left side down to (not inclusive) the language dropdown - panel = gtk.VBox() + panel = Gtk.VBox() # Logo image - img_logo = gtk.Image() + img_logo = Gtk.Image() img_logo.set_from_file("icons/logo.png") img_logo.show() - panel.pack_start(img_logo, expand=False, fill=False) + panel.pack_start(img_logo, False, False, 0) # Control panel has the image controls control_panel = BorderFrame(border=BORDER_ALL_BUT_BOTTOM, border_color=COLOR_FRAME_CONTROLS, bg_color=COLOR_BG_CONTROLS) - control_panel_box = gtk.VBox() + control_panel_box = Gtk.VBox() control_panel.add(control_panel_box) - spacer = gtk.Label() + spacer = Gtk.Label() spacer.set_size_request(-1, 5) - control_panel_box.pack_start(spacer, expand=False, fill=False) + control_panel_box.pack_start(spacer, False, False, 0) # ... # Slice buttons - btn_box = gtk.Table(1,5,False) + btn_box = Gtk.Table(1,5,False) btn_box.set_col_spacings(5) btn_box.set_row_spacings(5) - btn_box.attach(gtk.Label(), 0,1,0,2) + btn_box.attach(Gtk.Label(), 0,1,0,2) - #spacer = gtk.Label() + #spacer = Gtk.Label() #spacer.set_size_request(-1, 15) - #control_panel_box.pack_start(spacer, expand=False, fill=False) - #cutter = gtk.HBox(False, 8) - #cutter.pack_start(gtk.Label(), True) - self.btn_9 = prepare_btn(gtk.ToggleButton("9"),SLICE_BTN_WIDTH) + #control_panel_box.pack_start(spacer, False, False, 0) + #cutter = Gtk.HBox(False, 8) + #cutter.pack_start(Gtk.Label(), True) + self.btn_9 = prepare_btn(Gtk.ToggleButton("9"),SLICE_BTN_WIDTH) self.btn_9.set_active(True) self.btn_9.connect("clicked", self.set_nr_pieces, 9) btn_box.attach(self.btn_9, 1,2,0,1,0,0) #cutter.pack_start(self.btn_9, False, False) - self.btn_12 = prepare_btn(gtk.ToggleButton("12"), SLICE_BTN_WIDTH) + self.btn_12 = prepare_btn(Gtk.ToggleButton("12"), SLICE_BTN_WIDTH) self.btn_12.connect("clicked", self.set_nr_pieces, 12) btn_box.attach(self.btn_12, 2,3,0,1,0,0) #cutter.pack_start(self.btn_12, False, False) - self.btn_16 = prepare_btn(gtk.ToggleButton("16"), SLICE_BTN_WIDTH) + self.btn_16 = prepare_btn(Gtk.ToggleButton("16"), SLICE_BTN_WIDTH) self.btn_16.connect("clicked", self.set_nr_pieces, 16) btn_box.attach(self.btn_16, 3,4,0,1,0,0) #cutter.pack_start(self.btn_16, False, False) - #cutter.pack_start(gtk.Label(), True) + #cutter.pack_start(Gtk.Label(), True) #control_panel_box.pack_start(cutter, True) - #spacer = gtk.Label() + #spacer = Gtk.Label() #spacer.set_size_request(-1, 10) #control_panel_box.pack_start(spacer, False) - btn_box.attach(gtk.Label(), 4,5,0,1) - control_panel_box.pack_start(btn_box, expand=False) + btn_box.attach(Gtk.Label(), 4,5,0,1) + control_panel_box.pack_start(btn_box, False, True, 0) @@ -199,33 +196,33 @@ class SliderPuzzleUI (gtk.Table): self.thumb = ImageSelectorWidget(self._parent,frame_color=COLOR_FRAME_THUMB, prepare_btn_cb=prepare_btn, image_dir='images') self.thumb.connect("category_press", self.do_select_category) self.thumb.connect("image_press", self.set_nr_pieces) - control_panel_box.pack_start(self.thumb, False) + control_panel_box.pack_start(self.thumb, False, True, 0) - spacer = gtk.Label() + spacer = Gtk.Label() spacer.set_size_request(-1, 5) - control_panel_box.pack_start(spacer, expand=False, fill=False) + control_panel_box.pack_start(spacer, False, False, 0) # The game control buttons - btn_box = gtk.Table(3,3,False) + btn_box = Gtk.Table(3,3,False) btn_box.set_row_spacings(2) - btn_box.attach(gtk.Label(), 0,1,0,3) - btn_box.attach(gtk.Label(), 2,3,0,3) - self.btn_solve = prepare_btn(gtk.Button(" "), 200) + btn_box.attach(Gtk.Label(), 0,1,0,3) + btn_box.attach(Gtk.Label(), 2,3,0,3) + self.btn_solve = prepare_btn(Gtk.Button(" "), 200) self.labels_to_translate.append([self.btn_solve, _("Solve")]) self.btn_solve.connect("clicked", self.do_solve) btn_box.attach(self.btn_solve, 1,2,0,1,0,0) - self.btn_shuffle = prepare_btn(gtk.Button(" "), 200) + self.btn_shuffle = prepare_btn(Gtk.Button(" "), 200) self.labels_to_translate.append([self.btn_shuffle, _("Shuffle")]) self.btn_shuffle.connect("clicked", self.do_shuffle) btn_box.attach(self.btn_shuffle, 1,2,1,2,0,0) - self.btn_add = prepare_btn(gtk.Button(" "), 200) + self.btn_add = prepare_btn(Gtk.Button(" "), 200) self.labels_to_translate.append([self.btn_add, _("My Picture")]) self.btn_add.connect("clicked", self.do_add_image) btn_box.attach(self.btn_add, 1,2,2,3,0,0) - control_panel_box.pack_start(btn_box, False) + control_panel_box.pack_start(btn_box, False, True, 0) # Control panel end - panel.pack_start(control_panel, expand=True, fill=True) + panel.pack_start(control_panel, True, True, 0) inner_table.attach(panel, 0,1,0,1,0) @@ -239,46 +236,46 @@ class SliderPuzzleUI (gtk.Table): lang_combo.install() lang_box = BorderFrame(bg_color=COLOR_BG_CONTROLS, border_color=COLOR_FRAME_CONTROLS) - hbox = gtk.HBox(False) - vbox = gtk.VBox(False) - vbox.pack_start(lang_combo, padding=8) - hbox.pack_start(vbox, padding=8) + hbox = Gtk.HBox(False) + vbox = Gtk.VBox(False) + vbox.pack_start(lang_combo, True, True, 8) + hbox.pack_start(vbox, True, True, 8) lang_box.add(hbox) - inner_table.attach(lang_box, 0,1,1,2,gtk.FILL, gtk.FILL) + inner_table.attach(lang_box, 0,1,1,2,Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL) timer_box = BorderFrame(border=BORDER_ALL_BUT_LEFT, bg_color=COLOR_BG_CONTROLS, border_color=COLOR_FRAME_CONTROLS) - timer_hbox = gtk.HBox(False) + timer_hbox = Gtk.HBox(False) self.timer = TimerWidget(bg_color=COLOR_BG_BUTTONS[0][1], fg_color=COLOR_FG_BUTTONS[0][1], lbl_color=COLOR_BG_BUTTONS[1][1]) self.timer.set_sensitive(False) self.timer.set_border_width(3) self.labels_to_translate.append((self.timer, _("Time: "))) - timer_hbox.pack_start(self.timer, False, padding=8) + timer_hbox.pack_start(self.timer, False, True, 8) self.timer.connect('timer_toggle', self.timer_toggle_cb) - self.msg_label = gtk.Label() + self.msg_label = Gtk.Label() self.msg_label.show() - timer_hbox.pack_start(self.msg_label, True) + timer_hbox.pack_start(self.msg_label, True, True, 0) - self.notebook = gtk.Notebook() + self.notebook = Gtk.Notebook() self.notebook.show() self.notebook.props.show_border = False self.notebook.props.show_tabs = False self.notebook.append_page(self.game_box) - inner_table.attach(self.notebook, 1,2,0,1, gtk.FILL, gtk.FILL) + inner_table.attach(self.notebook, 1,2,0,1, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL) - self.btn_lesson = prepare_btn(gtk.Button(" ")) + self.btn_lesson = prepare_btn(Gtk.Button(" ")) self.labels_to_translate.append([self.btn_lesson, _("Lesson Plans")]) self.btn_lesson.connect("clicked", self.do_lesson_plan) - timer_hbox.pack_start(self.btn_lesson, False, padding=8) - vbox = gtk.VBox(False) - vbox.pack_start(timer_hbox, padding=8) + timer_hbox.pack_start(self.btn_lesson, False, True, 8) + vbox = Gtk.VBox(False) + vbox.pack_start(timer_hbox, True, True, 8) timer_box.add(vbox) - inner_table.attach(timer_box, 1,2,1,2,gtk.FILL|gtk.EXPAND, gtk.FILL) - #panel.pack_start(lang_box, expand=False, fill=False) + inner_table.attach(timer_box, 1,2,1,2,Gtk.AttachOptions.FILL|Gtk.AttachOptions.EXPAND, Gtk.AttachOptions.FILL) + #panel.pack_start(lang_box, False, False, 0) self.do_select_language(lang_combo) @@ -379,7 +376,7 @@ class SliderPuzzleUI (gtk.Table): def refresh_labels (self, first_time=False): self._parent.set_title(_("Slider Puzzle Activity")) for lbl in self.labels_to_translate: - if isinstance(lbl[0], gtk.Button): + if isinstance(lbl[0], Gtk.Button): lbl[0].get_child().set_label(_(lbl[1])) else: lbl[0].set_label(_(lbl[1])) @@ -393,11 +390,11 @@ class SliderPuzzleUI (gtk.Table): @utils.trace def set_nr_pieces (self, btn, nr_pieces=None): - #if isinstance(btn, gtk.ToggleButton) and not btn.get_active(): + #if isinstance(btn, Gtk.ToggleButton) and not btn.get_active(): # return - if self.is_contest_mode() and isinstance(btn, gtk.ToggleButton) and nr_pieces == self.game.get_nr_pieces(): + if self.is_contest_mode() and isinstance(btn, Gtk.ToggleButton) and nr_pieces == self.game.get_nr_pieces(): return - if isinstance(btn, gtk.ToggleButton): + if isinstance(btn, Gtk.ToggleButton): if not btn.get_active(): if nr_pieces == self.game.get_nr_pieces(): logging.debug("A") @@ -405,7 +402,7 @@ class SliderPuzzleUI (gtk.Table): return if nr_pieces is None: nr_pieces = self.game.get_nr_pieces() - if btn is None: #not isinstance(btn, gtk.ToggleButton): + if btn is None: #not isinstance(btn, Gtk.ToggleButton): if self._contest_mode: self.set_game_state(GAME_STARTED) for n, b in ((9, self.btn_9),(12, self.btn_12),(16, self.btn_16)): @@ -421,7 +418,7 @@ class SliderPuzzleUI (gtk.Table): #self.thumb.set_game_widget(self.game) self.game.set_nr_pieces(nr_pieces) self.timer.reset(False) - if isinstance(btn, gtk.ToggleButton): + if isinstance(btn, Gtk.ToggleButton): for n, b in ((9, self.btn_9),(12, self.btn_12),(16, self.btn_16)): if b is not btn: logging.debug("C") @@ -580,8 +577,8 @@ class SliderPuzzleUI (gtk.Table): def process_key (self, w, e): """ The callback for key processing. The button shortcuts are all defined here. """ - k = gtk.gdk.keyval_name(e.keyval) - if not isinstance(self._parent.get_focus(), gtk.Editable): + k = Gdk.keyval_name(e.keyval) + if not isinstance(self._parent.get_focus(), Gtk.Editable): if k == '1': self.btn_9.clicked() return True @@ -610,7 +607,7 @@ class SliderPuzzleUI (gtk.Table): self.btn_solve.clicked() return True if k in ('Escape', 'q'): - gtk.main_quit() + Gtk.main_quit() return True return False @@ -650,9 +647,9 @@ class SliderPuzzleUI (gtk.Table): self._parent.game_tube.StatusUpdate(self._state[1], self.timer.is_running(), self.timer.ellapsed()) def main(): - win = gtk.Window(gtk.WINDOW_TOPLEVEL) + win = Gtk.Window(Gtk.WindowType.TOPLEVEL) t = SliderPuzzleUI(win) - gtk.main() + Gtk.main() return 0 if __name__ == "__main__": diff --git a/SliderPuzzleWidget.py b/SliderPuzzleWidget.py index 09b1dec..60e0b21 100644 --- a/SliderPuzzleWidget.py +++ b/SliderPuzzleWidget.py @@ -18,10 +18,7 @@ # own creations we would love to hear from you at info@WorldWideWorkshop.org ! # -import pygtk -pygtk.require('2.0') -import gtk, gobject -import pango +from gi.respository import Gtk, GObject, Pango, GdkPixbuf import md5 import logging @@ -57,13 +54,13 @@ def calculate_matrix (pieces): return rows*cols, rows, cols -class SliderCreator (gtk.gdk.Pixbuf): +class SliderCreator (GdkPixbuf): def __init__ (self, width, height, fname=None, tlist=None): #tlist): if width == -1: width = 564 if height == -1: height = 564 - super(SliderCreator, self).__init__(gtk.gdk.COLORSPACE_RGB, False, 8, width, height) + super(SliderCreator, self).__init__(Gdk.COLORSPACE_RGB, False, 8, width, height) if tlist is None: items = [] cmds = file(fname).readlines() @@ -91,15 +88,15 @@ class SliderCreator (gtk.gdk.Pixbuf): def prepare_stringed (self, rows, cols): # We use a Pixmap as offscreen drawing canvas - cm = gtk.gdk.colormap_get_system() - pm = gtk.gdk.Pixmap(None, self.width, self.height, cm.get_visual().depth) + cm = Gdk.colormap_get_system() + pm = Gdk.Pixmap(None, self.width, self.height, cm.get_visual().depth) #pangolayout = pm.create_pango_layout("") font_size = int(self.width / cols / 4) - l = gtk.Label() - pangolayout = pango.Layout(l.create_pango_context()) - pangolayout.set_font_description(pango.FontDescription("sans bold %i" % font_size)) + l = Gtk.Label() + pangolayout = Pango.Layout(l.create_pango_context()) + pangolayout.set_font_description(Pango.FontDescription("sans bold %i" % font_size)) gc = pm.new_gc() - gc.set_colormap(gtk.gdk.colormap_get_system()) + gc.set_colormap(Gdk.colormap_get_system()) color = cm.alloc_color('white') gc.set_foreground(color) pm.draw_rectangle(gc, True, 0, 0, self.width, self.height) @@ -406,7 +403,7 @@ class SliderPuzzleMap (object): # Widget Definition ### -class SliderPuzzleWidget (gtk.Table): +class SliderPuzzleWidget (Gtk.Table): __gsignals__ = {'solved' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()), 'shuffled' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()), 'moved' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),} @@ -414,8 +411,8 @@ class SliderPuzzleWidget (gtk.Table): def __init__ (self, pieces=9, width=480, height=480): self.jumbler = SliderPuzzleMap(pieces, self.jumblermap_piece_move_cb) # We take this from the jumbler object because it may have altered our requested value - gtk.Table.__init__(self, self.jumbler.rowsize, self.jumbler.colsize) - self.image = None #gtk.Image() + Gtk.Table.__init__(self, self.jumbler.rowsize, self.jumbler.colsize) + self.image = None #Gtk.Image() self.width = width self.height = height self.set_size_request(width, height) @@ -428,7 +425,7 @@ class SliderPuzzleWidget (gtk.Table): # pb = self.image.get_pixbuf() #if self.image is None or pb is None: for i in range(self.jumbler.pieces): - self.pieces.append(gtk.Button(str(i+1))) + self.pieces.append(Gtk.Button(str(i+1))) self.pieces[-1].connect("button-release-event", self.process_mouse_click, i+1) self.pieces[-1].show() else: @@ -440,10 +437,10 @@ class SliderPuzzleWidget (gtk.Table): h = self.image.get_height() / self.jumbler.rowsize for y in range(self.jumbler.rowsize): for x in range(self.jumbler.colsize): - img = gtk.Image() + img = Gtk.Image() img.set_from_pixbuf(self.image.subpixbuf(x*w, y*h, w-1, h-1)) img.show() - self.pieces.append(gtk.EventBox()) + self.pieces.append(Gtk.EventBox()) self.pieces[-1].add(img) self.pieces[-1].connect("button-press-event", self.process_mouse_click, (y*self.jumbler.colsize)+x+1) self.pieces[-1].show() @@ -469,7 +466,7 @@ class SliderPuzzleWidget (gtk.Table): def process_key (self, w, e): if self.get_parent() == None: return False - k = gtk.gdk.keyval_name(e.keyval) + k = Gdk.keyval_name(e.keyval) if k in up_key: self.jumbler.do_move(SLIDE_UP) return True @@ -542,7 +539,7 @@ class SliderPuzzleWidget (gtk.Table): f = file(fn, 'w+b') f.write(image) f.close() - i = gtk.Image() + i = Gtk.Image() i.set_from_file(fn) os.remove(fn) self.image = i.get_pixbuf() @@ -556,7 +553,7 @@ class SliderPuzzleWidget (gtk.Table): del self.pieces # Resize to a single cell and use that for the image self.resize(1,1) - img = gtk.Image() + img = Gtk.Image() img.set_from_pixbuf(self.image) self.attach(img, 0,1,0,1) img.show() diff --git a/mamamedia_modules.py b/mamamedia_modules.py index 3b9fdc3..4c31c4a 100644 --- a/mamamedia_modules.py +++ b/mamamedia_modules.py @@ -23,8 +23,8 @@ import sys cwd = os.path.split(__file__)[0] -import gtk -theme = gtk.icon_theme_get_default() +from gi.repository import Gtk +theme = Gtk.IconTheme.get_default() if os.path.exists(os.path.join(cwd, 'mmm_modules')): # We are self contained diff --git a/mmm_modules/borderframe.py b/mmm_modules/borderframe.py index 14d55d1..b97920f 100644 --- a/mmm_modules/borderframe.py +++ b/mmm_modules/borderframe.py @@ -18,9 +18,7 @@ # own creations we would love to hear from you at info@WorldWideWorkshop.org ! # -import pygtk -pygtk.require('2.0') -import gtk, gobject, pango +from gi.repository import Gtk, GObject BORDER_LEFT = 1 BORDER_RIGHT = 2 @@ -33,15 +31,15 @@ BORDER_ALL_BUT_BOTTOM = BORDER_HORIZONTAL | BORDER_TOP BORDER_ALL_BUT_TOP = BORDER_HORIZONTAL | BORDER_BOTTOM BORDER_ALL_BUT_LEFT = BORDER_VERTICAL | BORDER_RIGHT -class BorderFrame (gtk.EventBox): +class BorderFrame (Gtk.EventBox): def __init__ (self, border=BORDER_ALL, size=5, bg_color=None, border_color=None): - gtk.EventBox.__init__(self) + Gtk.EventBox.__init__(self) if border_color is not None: - self.set_border_color(gtk.gdk.color_parse(border_color)) - self.inner = gtk.EventBox() + self.set_border_color(Gdk.color_parse(border_color)) + self.inner = Gtk.EventBox() if bg_color is not None: - self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(bg_color)) - align = gtk.Alignment(1.0,1.0,1.0,1.0) + self.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse(bg_color)) + align = Gtk.Alignment(1.0,1.0,1.0,1.0) self.padding = [0,0,0,0] if (border & BORDER_TOP) != 0: self.padding[0] = size @@ -55,11 +53,11 @@ class BorderFrame (gtk.EventBox): align.add(self.inner) align.show() self.inner.show() - gtk.EventBox.add(self, align) + Gtk.EventBox.add(self, align) self.stack = [] def set_border_color (self, color): - gtk.EventBox.modify_bg(self, gtk.STATE_NORMAL, color) + Gtk.EventBox.modify_bg(self, Gtk.StateType.NORMAL, color) def modify_bg (self, state, color): self.inner.modify_bg(state, color) diff --git a/mmm_modules/buddy_panel.py b/mmm_modules/buddy_panel.py index 6f5e32e..3255382 100644 --- a/mmm_modules/buddy_panel.py +++ b/mmm_modules/buddy_panel.py @@ -18,27 +18,25 @@ # own creations we would love to hear from you at info@WorldWideWorkshop.org ! # -import pygtk -pygtk.require('2.0') -import gtk +from gi.repository import Gtk import logging from tube_helper import GAME_IDLE, GAME_STARTED, GAME_FINISHED, GAME_QUIT -#from sugar.graphics.icon import CanvasIcon +#from sugar3.graphics.icon import CanvasIcon BUDDYMODE_CONTEST = 0 BUDDYMODE_COLLABORATION = 1 -class BuddyPanel (gtk.ScrolledWindow): +class BuddyPanel (Gtk.ScrolledWindow): def __init__ (self, mode=BUDDYMODE_CONTEST): super(BuddyPanel, self).__init__() - self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) - self.model = gtk.ListStore(str, str, str, str) - self.model.set_sort_column_id(0, gtk.SORT_ASCENDING) - self.treeview = gtk.TreeView() + self.model = Gtk.ListStore(str, str, str, str) + self.model.set_sort_column_id(0, Gtk.SortType.ASCENDING) + self.treeview = Gtk.TreeView() #col = gtk.TreeViewColumn(_("Icon")) #r = gtk.CellRendererText() @@ -46,29 +44,29 @@ class BuddyPanel (gtk.ScrolledWindow): #col.set_attributes(r, stock_id=0) #self.treeview.append_column(col) - col = gtk.TreeViewColumn(_("Buddy")) - r = gtk.CellRendererText() - col.pack_start(r, True) + col = Gtk.TreeViewColumn(_("Buddy")) + r = Gtk.CellRendererText() + col.pack_start(r, True, True, 0) col.set_attributes(r, text=0) self.treeview.append_column(col) - col = gtk.TreeViewColumn(_("Status")) - r = gtk.CellRendererText() - col.pack_start(r, True) + col = Gtk.TreeViewColumn(_("Status")) + r = Gtk.CellRendererText() + col.pack_start(r, True, True, 0) col.set_attributes(r, text=1) self.treeview.append_column(col) col.set_visible(mode == BUDDYMODE_CONTEST) - col = gtk.TreeViewColumn(_("Play Time")) - r = gtk.CellRendererText() - col.pack_start(r, True) + col = Gtk.TreeViewColumn(_("Play Time")) + r = Gtk.CellRendererText() + col.pack_start(r, True, True, 0) col.set_attributes(r, text=2) self.treeview.append_column(col) col.set_visible(mode == BUDDYMODE_CONTEST) - col = gtk.TreeViewColumn(_("Joined at")) - r = gtk.CellRendererText() - col.pack_start(r, True) + col = Gtk.TreeViewColumn(_("Joined at")) + r = Gtk.CellRendererText() + col.pack_start(r, True, True, 0) col.set_attributes(r, text=3) self.treeview.append_column(col) col.set_visible(mode == BUDDYMODE_COLLABORATION) diff --git a/mmm_modules/i18n.py b/mmm_modules/i18n.py index 34b61e4..dc0e557 100644 --- a/mmm_modules/i18n.py +++ b/mmm_modules/i18n.py @@ -25,7 +25,7 @@ import os import gettext import locale -import gtk, gobject +from gi.repository import Gtk, GObject _ = lambda x: x @@ -111,13 +111,13 @@ def list_available_translations (domain): pass return rv -class LanguageComboBox (gtk.ComboBox): +class LanguageComboBox (Gtk.ComboBox): def __init__ (self, domain): - liststore = gtk.ListStore(gobject.TYPE_STRING) - gtk.ComboBox.__init__(self, liststore) + liststore = Gtk.ListStore(GObject.TYPE_STRING) + Gtk.ComboBox.__init__(self, liststore) - self.cell = gtk.CellRendererText() - self.pack_start(self.cell, True) + self.cell = Gtk.CellRendererText() + self.pack_start(self.cell, True, True, 0) self.add_attribute(self.cell, 'text', 0) self.translations = list_available_translations(domain) diff --git a/mmm_modules/image_category.py b/mmm_modules/image_category.py index 4ea4782..92af2ee 100755 --- a/mmm_modules/image_category.py +++ b/mmm_modules/image_category.py @@ -17,18 +17,15 @@ # If you find this activity useful or end up using parts of it in one of your # own creations we would love to hear from you at info@WorldWideWorkshop.org ! # - -import pygtk -pygtk.require('2.0') -import gtk, gobject +from gi.repository import Gtk, GObject import os from glob import glob import logging import md5 -from sugar import mime -from sugar.graphics.objectchooser import ObjectChooser +from sugar3 import mime +from sugar3.graphics.objectchooser import ObjectChooser from borderframe import BorderFrame from utils import load_image, resize_image, RESIZE_CUT @@ -156,7 +153,7 @@ class CategoryDirectory (object): return load_image(thumbs[0], self.twidth, self.theight) -class ImageSelectorWidget (gtk.Table): +class ImageSelectorWidget (Gtk.Table): __gsignals__ = {'category_press' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()), 'image_press' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),} @@ -167,12 +164,12 @@ class ImageSelectorWidget (gtk.Table): prepare_btn_cb=prepare_btn, method=RESIZE_CUT, image_dir=None): - gtk.Table.__init__(self, 2,5,False) + Gtk.Table.__init__(self, 2,5,False) self._signals = [] self.parentp = parentp self.width = width self.height = height - self.image = gtk.Image() + self.image = Gtk.Image() self.method = method #self.set_myownpath(MYOWNPIC_FOLDER) img_box = BorderFrame(border_color=frame_color) @@ -180,30 +177,30 @@ class ImageSelectorWidget (gtk.Table): img_box.set_border_width(5) self._signals.append((img_box, img_box.connect('button_press_event', self.emit_image_pressed))) self.attach(img_box, 0,5,0,1,0,0) - self.attach(gtk.Label(), 0,1,1,2) - self.bl = gtk.Button() + self.attach(Gtk.Label(), 0,1,1,2) + self.bl = Gtk.Button() - il = gtk.Image() + il = Gtk.Image() il.set_from_pixbuf(load_image(os.path.join(iconpath, 'arrow_left.png'))) self.bl.set_image(il) self.bl.connect('clicked', self.previous) self.attach(prepare_btn_cb(self.bl), 1,2,1,2,0,0) - cteb = gtk.EventBox() - self.cat_thumb = gtk.Image() + cteb = Gtk.EventBox() + self.cat_thumb = Gtk.Image() self.cat_thumb.set_size_request(THUMB_SIZE, THUMB_SIZE) cteb.add(self.cat_thumb) self._signals.append((cteb, cteb.connect('button_press_event', self.emit_cat_pressed))) self.attach(cteb, 2,3,1,2,0,0,xpadding=10) - self.br = gtk.Button() - ir = gtk.Image() + self.br = Gtk.Button() + ir = Gtk.Image() ir.set_from_pixbuf(load_image(os.path.join(iconpath,'arrow_right.png'))) self.br.set_image(ir) self.br.connect('clicked', self.next) self.attach(prepare_btn_cb(self.br), 3,4,1,2,0,0) - self.attach(gtk.Label(),4,5,1,2) + self.attach(Gtk.Label(),4,5,1,2) self.filename = None self.show_all() self.image.set_size_request(width, height) @@ -220,17 +217,17 @@ class ImageSelectorWidget (gtk.Table): filter = { } chooser = ObjectChooser(_('Choose image'), self.parentp, #self._parent, - gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, + Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, **filter) try: result = chooser.run() - if result == gtk.RESPONSE_ACCEPT: + if result == Gtk.ResponseType.ACCEPT: jobject = chooser.get_selected_object() if jobject and jobject.file_path: if self.load_image(str(jobject.file_path), True): pass else: - err = gtk.MessageDialog(self._parent, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, + err = Gtk.MessageDialog(self._parent, Gtk.DialogFlags.MODAL, Gtk.MESSAGE_ERROR, Gtk.BUTTONS_OK, _("Not a valid image file")) err.run() err.destroy() @@ -395,12 +392,12 @@ class ImageSelectorWidget (gtk.Table): self.set_image_dir(obj.get('image_dir', None)) self.image.set_from_pixbuf(self.category.get_image(obj.get('filename', None))) -class CategorySelector (gtk.ScrolledWindow): +class CategorySelector (Gtk.ScrolledWindow): __gsignals__ = {'selected' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (str,))} def __init__ (self, title=None, selected_category_path=None, path=None, extra=()): - gtk.ScrolledWindow.__init__ (self) - self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + Gtk.ScrolledWindow.__init__ (self) + self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) if path is None: path = os.path.join(mmmpath, 'mmm_images') self.path = path @@ -408,12 +405,12 @@ class CategorySelector (gtk.ScrolledWindow): model, selected = self.get_model(path, selected_category_path, extra) self.ignore_first = selected is not None - self.treeview = gtk.TreeView() - col = gtk.TreeViewColumn(title) - r1 = gtk.CellRendererPixbuf() - r2 = gtk.CellRendererText() - col.pack_start(r1, False) - col.pack_start(r2, True) + self.treeview = Gtk.TreeView() + col = Gtk.TreeViewColumn(title) + r1 = Gtk.CellRendererPixbuf() + r2 = Gtk.CellRendererText() + col.pack_start(r1, False, True, 0) + col.pack_start(r2, True, True, 0) col.set_cell_data_func(r1, self.cell_pb) col.set_attributes(r2, text=1) self.treeview.append_column(col) @@ -442,8 +439,8 @@ class CategorySelector (gtk.ScrolledWindow): def get_model (self, path, selected_path, extra): # Each row is (path/dirname, pretty name, 0 based index) selected = None - store = gtk.ListStore(str, str, int) - store.set_sort_column_id(1, gtk.SORT_ASCENDING) + store = Gtk.ListStore(str, str, int) + store.set_sort_column_id(1, Gtk.SortType.ASCENDING) files = [os.path.join(path, x) for x in os.listdir(path) if not x.startswith('.')] files.extend(extra) for fullpath, prettyname in [(x, _(os.path.basename(x))) for x in files if os.path.isdir(x)]: diff --git a/mmm_modules/notebook_reader.py b/mmm_modules/notebook_reader.py index 9d70fd3..b4ecb16 100644 --- a/mmm_modules/notebook_reader.py +++ b/mmm_modules/notebook_reader.py @@ -18,9 +18,7 @@ # own creations we would love to hear from you at info@WorldWideWorkshop.org ! # -import pygtk -pygtk.require('2.0') -import gtk, gobject, pango +from gi.repository import Gtk, GObject, Pango import os from abiword import Canvas @@ -66,13 +64,13 @@ class ReaderProvider (object): for name, path in self.lesson_array: yield (name, path) -class BasicReaderWidget (gtk.HBox): +class BasicReaderWidget (Gtk.HBox): def __init__ (self, path, lang_details=None): super(BasicReaderWidget, self).__init__() self.provider = ReaderProvider(path, lang_details) self._canvas = Canvas() self._canvas.show() - self.pack_start(self._canvas) + self.pack_start(self._canvas, True, True, 0) self._canvas.connect_after('map-event', self._map_event_cb) def get_lessons(self): @@ -95,7 +93,7 @@ class BasicReaderWidget (gtk.HBox): -class NotebookReaderWidget (gtk.Notebook): +class NotebookReaderWidget (Gtk.Notebook): def __init__ (self, path, lang_details=None): super(NotebookReaderWidget, self).__init__() self.provider = ReaderProvider(path, lang_details) @@ -109,7 +107,7 @@ class NotebookReaderWidget (gtk.Notebook): canvas.load_file('file://' + path, '') except: canvas.load_file(path) - self.append_page(canvas, gtk.Label(name)) + self.append_page(canvas, Gtk.Label(name)) def _map_event_cb(self, o, e, path): logger.debug("map-event: %s" % path) diff --git a/mmm_modules/timer.py b/mmm_modules/timer.py index 92390e0..80eaaf4 100644 --- a/mmm_modules/timer.py +++ b/mmm_modules/timer.py @@ -18,9 +18,7 @@ # own creations we would love to hear from you at info@WorldWideWorkshop.org ! # -import pygtk -pygtk.require('2.0') -import gtk, gobject, pango +from gi.repository import Gtk, GObject, Pango import os from time import time @@ -42,26 +40,26 @@ else: from utils import load_image -class TimerWidget (gtk.HBox): +class TimerWidget (Gtk.HBox): __gsignals__ = {'timer_toggle' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (bool,)),} def __init__ (self, bg_color="#DD4040", fg_color="#4444FF", lbl_color="#DD4040", can_stop=True): - gtk.HBox.__init__(self) - self.counter = gtk.EventBox() - self.counter.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(bg_color)) + Gtk.HBox.__init__(self) + self.counter = Gtk.EventBox() + self.counter.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse(bg_color)) self.counter.set_size_request(120, -1) - hb = gtk.HBox() + hb = Gtk.HBox() self.counter.add(hb) - self.lbl_time = gtk.Label() - self.lbl_time.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse(lbl_color)) - self.pack_start(self.lbl_time, False) - self.time_label = gtk.Label("--:--") - self.time_label.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse(fg_color)) + self.lbl_time = Gtk.Label() + self.lbl_time.modify_fg(Gtk.StateType.NORMAL, Gdk.color_parse(lbl_color)) + self.pack_start(self.lbl_time, False, True, 0) + self.time_label = Gtk.Label("--:--") + self.time_label.modify_fg(Gtk.StateType.NORMAL, Gdk.color_parse(fg_color)) hb.pack_start(self.time_label, False, False, 5) self.prepare_icons() - self.icon = gtk.Image() + self.icon = Gtk.Image() self.icon.set_from_pixbuf(self.icons[1]) hb.pack_end(self.icon, False, False, 5) - self.pack_start(self.counter, False) + self.pack_start(self.counter, False, True, 0) self.connect("button-press-event", self.process_click) self.start_time = 0 self.timer_id = None diff --git a/mmm_modules/tube_helper.py b/mmm_modules/tube_helper.py index 8436cfc..ea45f5c 100644 --- a/mmm_modules/tube_helper.py +++ b/mmm_modules/tube_helper.py @@ -20,8 +20,8 @@ import telepathy #import telepathy.client -from sugar.presence.tubeconn import TubeConnection -from sugar.presence import presenceservice +from sugar3.presence.tubeconn import TubeConnection +from sugar3.presence import presenceservice #import dbus import logging logger = logging.getLogger('tube_helper') diff --git a/mmm_modules/utils.py b/mmm_modules/utils.py index 1db4fca..3eeade0 100644 --- a/mmm_modules/utils.py +++ b/mmm_modules/utils.py @@ -18,9 +18,7 @@ # own creations we would love to hear from you at info@WorldWideWorkshop.org ! # -import pygtk -pygtk.require('2.0') -import gtk +from gi.repository import Gtk, GdkPixbuf import logging RESIZE_STRETCH = 1 @@ -92,7 +90,7 @@ def load_image (filename, width=-1, height=-1, method=RESIZE_CUT): # slider.prepare_stringed(2,2) # return slider # - img = gtk.Image() + img = Gtk.Image() try: img.set_from_file(filename) pb = img.get_pixbuf() @@ -106,7 +104,7 @@ def resize_image (pb, width=-1, height=-1, method=RESIZE_CUT): logging.debug("utils: method=%i" % method) if method == RESIZE_STRETCH or width == -1 or height == -1: w,h = calculate_relative_size(pb.get_width(), pb.get_height(), width, height) - scaled_pb = pb.scale_simple(w,h, gtk.gdk.INTERP_BILINEAR) + scaled_pb = pb.scale_simple(w,h, GdkPixbuf.InterpType.BILINEAR) elif method == RESIZE_PAD: w,h = pb.get_width(), pb.get_height() hr = float(height)/h @@ -115,7 +113,7 @@ def resize_image (pb, width=-1, height=-1, method=RESIZE_CUT): w = w * factor h = h * factor logging.debug("RESIZE_PAD: %i,%i,%f" % (w,h,factor)) - scaled_pb = pb.scale_simple(int(w), int(h), gtk.gdk.INTERP_BILINEAR) + scaled_pb = pb.scale_simple(int(w), int(h), GdkPixbuf.InterpType.BILINEAR) else: # RESIZE_CUT / default w,h = pb.get_width(), pb.get_height() if width > w: @@ -151,7 +149,7 @@ def resize_image (pb, width=-1, height=-1, method=RESIZE_CUT): # w, h now have -1 for the side that should be relatively scaled, to keep the aspect ratio and # assuring that the image is at least as big as the request. w,h = calculate_relative_size(pb.get_width(), pb.get_height(), w,h) - scaled_pb = pb.scale_simple(w,h, gtk.gdk.INTERP_BILINEAR) + scaled_pb = pb.scale_simple(w,h, GdkPixbuf.InterpType.BILINEAR) # now we cut whatever is left to make the requested size scaled_pb = scaled_pb.subpixbuf(abs((width-w)/2),abs((height-h)/2), width, height) return scaled_pb diff --git a/setup.py b/setup.py index 0d39fab..c2ed0b7 100755 --- a/setup.py +++ b/setup.py @@ -16,5 +16,5 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -from sugar.activity import bundlebuilder -bundlebuilder.start("SliderPuzzle") +from sugar3.activity import bundlebuilder +bundlebuilder.start() -- cgit v0.9.1