diff --git a/configure.ac b/configure.ac
index 097cc0a5..434bd514 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT([Sugar],[0.6],[],[sugar])
+AC_INIT([Sugar],[0.4],[],[sugar])
AC_PREREQ([2.59])
@@ -21,7 +21,6 @@ sugar/Makefile
sugar/__installed__.py
sugar/browser/Makefile
sugar/chat/Makefile
-sugar/chat/sketchpad/Makefile
sugar/p2p/Makefile
sugar/p2p/model/Makefile
sugar/shell/Makefile
diff --git a/sugar/browser/Makefile.am b/sugar/browser/Makefile.am
index 7aacdd8a..4bf03d2a 100644
--- a/sugar/browser/Makefile.am
+++ b/sugar/browser/Makefile.am
@@ -16,6 +16,4 @@ activitydir = $(pkgdatadir)/activities
activity_DATA = browser.activity
EXTRA_DIST = \
- $(rc_DATA) \
- $(activity_DATA) \
$(icon_DATA)
diff --git a/sugar/browser/browser.py b/sugar/browser/browser.py
index 1bc61608..cec6e096 100755
--- a/sugar/browser/browser.py
+++ b/sugar/browser/browser.py
@@ -322,8 +322,6 @@ class BrowserShell(dbus.service.Object):
get_instance = staticmethod(get_instance)
def __init__(self):
- geckoembed.set_profile_path(sugar.env.get_user_dir())
-
session_bus = dbus.SessionBus()
bus_name = dbus.service.BusName('com.redhat.Sugar.Browser', bus=session_bus)
object_path = '/com/redhat/Sugar/Browser'
diff --git a/sugar/chat/Makefile.am b/sugar/chat/Makefile.am
index c43ba873..4197815e 100644
--- a/sugar/chat/Makefile.am
+++ b/sugar/chat/Makefile.am
@@ -1,5 +1,3 @@
-SUBDIRS = sketchpad
-
sugardir = $(pythondir)/sugar/chat
sugar_PYTHON = \
__init__.py \
@@ -14,6 +12,4 @@ icon_DATA = \
activitydir = $(pkgdatadir)/activities
activity_DATA = chat.activity
-EXTRA_DIST = \
- $(icon_DATA) \
- $(activity_DATA)
+EXTRA_DIST = $(icon_DATA)
diff --git a/sugar/chat/chat.py b/sugar/chat/chat.py
index cb472fba..a04b8b4b 100755
--- a/sugar/chat/chat.py
+++ b/sugar/chat/chat.py
@@ -19,7 +19,6 @@ from sugar.p2p.Stream import Stream
from sugar.session.LogWriter import LogWriter
from sugar.chat.sketchpad.Toolbox import Toolbox
from sugar.chat.sketchpad.SketchPad import SketchPad
-from sugar.chat.Emoticons import Emoticons
import sugar.env
import richtext
@@ -48,6 +47,7 @@ class Chat(activity.Activity):
toolbox = Toolbox()
toolbox.connect('tool-selected', self._tool_selected)
+ toolbox.connect('color-selected', self._color_selected)
vbox.pack_start(toolbox, False)
toolbox.show()
@@ -64,6 +64,9 @@ class Chat(activity.Activity):
def __send_button_clicked_cb(self, button):
self.send_sketch(self._sketchpad.to_svg())
+
+ def _color_selected(self, toolbox, color):
+ self._sketchpad.set_color(color)
def _tool_selected(self, toolbox, tool_id):
if tool_id == 'text':
@@ -193,8 +196,6 @@ class Chat(activity.Activity):
# FIXME self._controller.notify_activate(self)
def _insert_rich_message(self, nick, msg):
- msg = Emoticons.get_instance().replace(msg)
-
buf = self._chat_view.get_buffer()
aniter = buf.get_end_iter()
buf.insert(aniter, nick + ": ")
diff --git a/sugar/chat/richtext.py b/sugar/chat/richtext.py
index 5aa44f7c..543e431e 100644
--- a/sugar/chat/richtext.py
+++ b/sugar/chat/richtext.py
@@ -59,7 +59,7 @@ class RichTextView(gtk.TextView):
it = self.__get_event_iter(event)
if it and self.__iter_is_link(it):
buf = self.get_buffer()
- address_tag = buf.get_tag_table().lookup("object-id")
+ address_tag = buf.get_tag_table().lookup("link-address")
address_end = it.copy()
address_end.backward_to_tag_toggle(address_tag)
@@ -81,18 +81,9 @@ class RichTextBuffer(gtk.TextBuffer):
def append_link(self, title, address):
it = self.get_iter_at_mark(self.get_insert())
- self.insert_with_tags_by_name(it, address, "link", "object-id")
+ self.insert_with_tags_by_name(it, address, "link", "link-address")
self.insert_with_tags_by_name(it, title, "link")
-
- def append_icon(self, name, it = None):
- if not it:
- it = self.get_iter_at_mark(self.get_insert())
-
- self.insert_with_tags_by_name(it, name, "icon", "object-id")
- icon_theme = gtk.icon_theme_get_default()
- pixbuf = icon_theme.load_icon(name, 16, 0)
- self.insert_pixbuf(it, pixbuf)
-
+
def apply_tag(self, tag_name):
self.active_tags.append(tag_name)
@@ -110,13 +101,11 @@ class RichTextBuffer(gtk.TextBuffer):
self.remove_tag_by_name(tag_name, start, end)
def __create_tags(self):
- tag = self.create_tag("icon")
-
tag = self.create_tag("link")
tag.set_property("underline", pango.UNDERLINE_SINGLE)
tag.set_property("foreground", "#0000FF")
- tag = self.create_tag("object-id")
+ tag = self.create_tag("link-address")
tag.set_property("invisible", True)
tag = self.create_tag("bold")
@@ -235,8 +224,6 @@ class RichTextHandler(xml.sax.handler.ContentHandler):
self.tags.append(tag)
if name == "link":
self.href = attrs['href']
- elif name == "icon":
- self.buf.append_icon(attrs['name'], self.buf.get_end_iter())
def characters(self, data):
start_it = it = self.buf.get_end_iter()
@@ -248,8 +235,8 @@ class RichTextHandler(xml.sax.handler.ContentHandler):
self.buf.apply_tag_by_name(tag, start_it, it)
if tag == "link":
self.buf.insert_with_tags_by_name(start_it, self.href,
- "link", "object-id")
-
+ "link", "link-address")
+
def endElement(self, name):
if not self._done and self._in_richtext:
if name != "richtext":
@@ -271,17 +258,9 @@ class RichTextSerializer:
return "font-size-" + attributes["size"]
elif el_name == "link":
return "link"
- elif el_name == "icon":
- return "icon"
else:
return None
- def _parse_object_id(self, it):
- object_id_tag = self.buf.get_tag_table().lookup("object-id")
- end = it.copy()
- end.forward_to_tag_toggle(object_id_tag)
- return self.buf.get_text(it, end)
-
def serialize_tag_start(self, tag, it):
name = tag.get_property("name")
if name == "bold":
@@ -289,12 +268,12 @@ class RichTextSerializer:
elif name == "italic":
return ""
elif name == "link":
- address = self._parse_object_id(it)
+ address_tag = self.buf.get_tag_table().lookup("link-address")
+ end = it.copy()
+ end.forward_to_tag_toggle(address_tag)
+ address = self.buf.get_text(it, end)
return ""
- elif name == "icon":
- name = self._parse_object_id(it)
- return ""
- elif name == "object-id":
+ elif name == "link-address":
return ""
elif name.startswith("font-size-"):
tag_name = name.replace("font-size-", "", 1)
@@ -310,9 +289,7 @@ class RichTextSerializer:
return ""
elif name == "link":
return ""
- elif name == "icon":
- return ""
- elif name == "object-id":
+ elif name == "link-address":
return ""
elif name.startswith("font-size-"):
return ""
@@ -392,7 +369,6 @@ if __name__ == "__main__":
test_xml += "Test two"
test_xml += "Test three"
test_xml += "Test link"
- test_xml += ""
test_xml += ""
RichTextSerializer().deserialize(test_xml, rich_buf)
diff --git a/sugar/chat/sketchpad/Sketch.py b/sugar/chat/sketchpad/Sketch.py
index 8c70f8d4..3504b83b 100644
--- a/sugar/chat/sketchpad/Sketch.py
+++ b/sugar/chat/sketchpad/Sketch.py
@@ -1,25 +1,27 @@
from SVGdraw import path
class Sketch:
- def __init__(self):
+ def __init__(self, rgb):
self._points = []
+ self._rgb = (float(rgb[0]), float(rgb[1]), float(rgb[2]))
def add_point(self, x, y):
- self._points.append([x, y])
+ self._points.append((x, y))
def draw(self, ctx):
start = True
- for [x, y] in self._points:
+ for (x, y) in self._points:
if start:
ctx.move_to(x, y)
start = False
else:
ctx.line_to(x, y)
+ ctx.set_source_rgb(self._rgb[0], self._rgb[1], self._rgb[2])
ctx.stroke()
def draw_to_svg(self):
i = 0
- for [x, y] in self._points:
+ for (x, y) in self._points:
coords = str(x) + ' ' + str(y) + ' '
if i == 0:
path_data = 'M ' + coords
@@ -28,4 +30,5 @@ class Sketch:
else:
path_data += coords
i += 1
- return path(path_data, fill = 'none', stroke = '#000000')
+ color = "#%02X%02X%02X" % (255 * self._rgb[0], 255 * self._rgb[1], 255 * self._rgb[2])
+ return path(path_data, fill = 'none', stroke = color)
diff --git a/sugar/chat/sketchpad/SketchPad.py b/sugar/chat/sketchpad/SketchPad.py
index 93193784..150b6fbb 100644
--- a/sugar/chat/sketchpad/SketchPad.py
+++ b/sugar/chat/sketchpad/SketchPad.py
@@ -13,6 +13,7 @@ class SketchPad(gtk.DrawingArea):
gtk.DrawingArea.__init__(self)
self._active_sketch = None
+ self._rgb = (0.0, 0.0, 0.0)
self._sketches = []
self.add_events(gtk.gdk.BUTTON_PRESS_MASK |
@@ -23,6 +24,7 @@ class SketchPad(gtk.DrawingArea):
self.connect('expose_event', self.expose)
def expose(self, widget, event):
+ """Draw the background of the sketchpad."""
rect = self.get_allocation()
ctx = widget.window.cairo_create()
@@ -38,27 +40,28 @@ class SketchPad(gtk.DrawingArea):
return False
+ def set_color(self, color):
+ """Sets the current drawing color of the sketchpad.
+ color agument should be 3-item tuple of rgb values between 0 and 1."""
+ self._rgb = color
+
def add_sketch(self, sketch):
self._sketches.append(sketch)
- def add_point(self, event):
- if self._active_sketch:
- self._active_sketch.add_point(event.x, event.y)
- self.window.invalidate_rect(None, False)
-
def __button_press_cb(self, widget, event):
- self._active_sketch = Sketch()
+ self._active_sketch = Sketch(self._rgb)
self.add_sketch(self._active_sketch)
- self.add_point(event)
def __button_release_cb(self, widget, event):
- self.add_point(event)
self._active_sketch = None
def __motion_notify_cb(self, widget, event):
- self.add_point(event)
+ if self._active_sketch:
+ self._active_sketch.add_point(event.x, event.y)
+ self.window.invalidate_rect(None, False)
def to_svg(self):
+ """Return a string containing an SVG representation of this sketch."""
d = drawing()
s = svg()
for sketch in self._sketches:
diff --git a/sugar/chat/sketchpad/Toolbox.py b/sugar/chat/sketchpad/Toolbox.py
index bf56ccc4..7ed814ad 100644
--- a/sugar/chat/sketchpad/Toolbox.py
+++ b/sugar/chat/sketchpad/Toolbox.py
@@ -18,6 +18,9 @@ class ColorButton(gtk.RadioButton):
self.add(drawing_area)
drawing_area.show()
+ def color(self):
+ return self._rgb
+
def expose(self, widget, event):
rect = widget.get_allocation()
ctx = widget.window.cairo_create()
@@ -31,7 +34,9 @@ class ColorButton(gtk.RadioButton):
class Toolbox(gtk.VBox):
__gsignals__ = {
'tool-selected': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
- ([gobject.TYPE_STRING]))
+ ([gobject.TYPE_STRING])),
+ 'color-selected': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ ([gobject.TYPE_PYOBJECT]))
}
def __init__(self):
@@ -96,4 +101,5 @@ class Toolbox(gtk.VBox):
self.emit("tool-selected", tool_id)
def __color_clicked_cb(self, button, rgb):
- pass
+ self.emit("color-selected", button.color())
+
diff --git a/sugar/env.py b/sugar/env.py
index ffea539a..9359409b 100644
--- a/sugar/env.py
+++ b/sugar/env.py
@@ -4,9 +4,6 @@ try:
from sugar.__uninstalled__ import *
except ImportError:
from sugar.__installed__ import *
-
-def get_user_dir():
- return os.path.expanduser('~/.sugar/')
def get_data_file(filename):
for data_dir in get_data_dirs():
diff --git a/sugar/session/session.py b/sugar/session/session.py
index 4d57a208..df0a0db4 100644
--- a/sugar/session/session.py
+++ b/sugar/session/session.py
@@ -20,7 +20,7 @@ def start(console):
act_dir = os.path.join(data_dir, env.get_activities_dir())
activities_dirs.append(act_dir)
- activities_dirs.append(os.path.join(env.get_user_dir(), 'activities'))
+ activities_dirs.append(os.path.expanduser('~/.sugar/activities'))
for activities_dir in activities_dirs:
if os.path.isdir(activities_dir):