Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAneesh Dogra <lionaneesh@gmail.com>2012-12-18 16:56:00 (GMT)
committer Aneesh Dogra <lionaneesh@gmail.com>2012-12-18 17:01:32 (GMT)
commite613ca2924e44688f1629196773fe9d8753fe33d (patch)
treed9ea34ef1dcc6afd81b2f25d3e814fbf6c22938e
parenta829c986c4754902b959e40553b0f365acda4e3f (diff)
Initial Gtk3 port.
-rw-r--r--SliderPuzzleActivity.py6
-rwxr-xr-xSliderPuzzleUI.py163
-rw-r--r--SliderPuzzleWidget.py39
-rw-r--r--mamamedia_modules.py4
-rw-r--r--mmm_modules/borderframe.py20
-rw-r--r--mmm_modules/buddy_panel.py40
-rw-r--r--mmm_modules/i18n.py12
-rwxr-xr-xmmm_modules/image_category.py59
-rw-r--r--mmm_modules/notebook_reader.py12
-rw-r--r--mmm_modules/timer.py28
-rw-r--r--mmm_modules/tube_helper.py4
-rw-r--r--mmm_modules/utils.py12
-rwxr-xr-xsetup.py4
13 files changed, 192 insertions, 211 deletions
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()