Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@member.fsf.org>2009-08-06 10:53:35 (GMT)
committer Aleksey Lim <alsroot@member.fsf.org>2009-08-06 10:53:35 (GMT)
commitbb66c911b990c1f02fedd5ae8c3da59858142300 (patch)
treea170ba1df32c281d2a518c5bd30b6fa95916d159
parent62df10f4216ca10dd1ee52229f9350789170258b (diff)
New Write primary toolbar icon design does not all fit in the toolbar #1122
-rw-r--r--AbiWordActivity.py38
-rw-r--r--icons/list-none.svg30
-rw-r--r--icons/paragraph-bar.svg72
-rw-r--r--toolbar.py86
-rw-r--r--widgets.py91
5 files changed, 208 insertions, 109 deletions
diff --git a/AbiWordActivity.py b/AbiWordActivity.py
index 1a02647..86a9ad6 100644
--- a/AbiWordActivity.py
+++ b/AbiWordActivity.py
@@ -61,18 +61,31 @@ class AbiWordActivity (activity.Activity):
activity_button = ActivityToolbarButton(self)
toolbar_box.toolbar.insert(activity_button, 0)
- toolbar_box.toolbar.insert(
- ToolComboBox(widgets.FontCombo(self.abiword_canvas)), -1)
- toolbar_box.toolbar.insert(
- ToolComboBox(widgets.FontSizeCombo(self.abiword_canvas)), -1)
+ separator = gtk.SeparatorToolItem()
+ toolbar_box.toolbar.insert(separator, -1)
text_toolbar = ToolbarButton(
page=toolbar.TextToolbar(self.abiword_canvas),
- icon_name='toolbar-edit')
+ icon_name='format-text-size')
+ toolbar_box.toolbar.insert(text_toolbar, -1)
+
+ text_toolbar = ToolbarButton(
+ page=toolbar.ParagraphToolbar(self.abiword_canvas),
+ icon_name='paragraph-bar')
toolbar_box.toolbar.insert(text_toolbar, -1)
separator = gtk.SeparatorToolItem()
- separator.show()
+ toolbar_box.toolbar.insert(separator, -1)
+
+ copy = CopyButton()
+ copy.connect('clicked', lambda button: self.abiword_canvas.copy())
+ toolbar_box.toolbar.insert(copy, -1)
+
+ paste = PasteButton()
+ paste.connect('clicked', lambda button: self.abiword_canvas.paste())
+ toolbar_box.toolbar.insert(paste, -1)
+
+ separator = gtk.SeparatorToolItem()
toolbar_box.toolbar.insert(separator, -1)
undo = UndoButton(sensitive=False)
@@ -87,13 +100,8 @@ class AbiWordActivity (activity.Activity):
redo.set_sensitive(can_redo))
toolbar_box.toolbar.insert(redo, -1)
- copy = CopyButton()
- copy.connect('clicked', lambda button: self.abiword_canvas.copy())
- toolbar_box.toolbar.insert(copy, -1)
-
- paste = PasteButton()
- paste.connect('clicked', lambda button: self.abiword_canvas.paste())
- toolbar_box.toolbar.insert(paste, -1)
+ separator = gtk.SeparatorToolItem()
+ toolbar_box.toolbar.insert(separator, -1)
self.abiword_canvas.connect('text-selected', lambda abi, b:
copy.set_sensitive(True))
@@ -102,10 +110,6 @@ class AbiWordActivity (activity.Activity):
self.abiword_canvas.connect('selection-cleared', lambda abi, b:
copy.set_sensitive(False))
- separator = gtk.SeparatorToolItem()
- separator.show()
- toolbar_box.toolbar.insert(separator, -1)
-
insert_toolbar = ToolbarButton(
page=toolbar.InsertToolbar(self.abiword_canvas),
icon_name='transfer-from')
diff --git a/icons/list-none.svg b/icons/list-none.svg
index 91ffebe..fd4fe1c 100644
--- a/icons/list-none.svg
+++ b/icons/list-none.svg
@@ -48,37 +48,37 @@
id="base"
showgrid="false"
inkscape:zoom="8.4101215"
- inkscape:cx="24.745584"
+ inkscape:cx="6.6917394"
inkscape:cy="27.348"
inkscape:window-x="0"
- inkscape:window-y="16"
+ inkscape:window-y="32"
inkscape:current-layer="svg2" /><g
- id="g3162"><line
+ id="g3212"><line
display="inline"
- x1="5.3933511"
- x2="49.428024"
+ x1="19.163853"
+ x2="50.163853"
y1="14.47"
y2="14.47"
id="line5"
- style="fill:#4c4d4f;stroke:#ffffff;stroke-width:3.50000005;display:inline;stroke-miterlimit:4;stroke-dasharray:none" /><line
+ style="fill:#4c4d4f;stroke:#ffffff;stroke-width:3.5;display:inline" /><line
display="inline"
- x1="5.3933511"
- x2="49.428024"
+ x1="19.163853"
+ x2="50.163853"
y1="23.056"
y2="23.056"
id="line7"
- style="fill:#4c4d4f;stroke:#ffffff;stroke-width:3.50000005;display:inline;stroke-miterlimit:4;stroke-dasharray:none" /><line
+ style="fill:#4c4d4f;stroke:#ffffff;stroke-width:3.5;display:inline" /><line
display="inline"
- x1="5.3933511"
- x2="49.428024"
+ x1="19.163853"
+ x2="50.163853"
y1="31.641001"
y2="31.641001"
id="line9"
- style="fill:#4c4d4f;stroke:#ffffff;stroke-width:3.50000005;display:inline;stroke-miterlimit:4;stroke-dasharray:none" /><line
+ style="fill:#4c4d4f;stroke:#ffffff;stroke-width:3.5;display:inline" /><line
display="inline"
- x1="5.3933511"
- x2="49.428024"
+ x1="19.163853"
+ x2="50.163853"
y1="40.227001"
y2="40.227001"
id="line11"
- style="fill:#4c4d4f;stroke:#ffffff;stroke-width:3.50000005;display:inline;stroke-miterlimit:4;stroke-dasharray:none" /></g></svg> \ No newline at end of file
+ style="fill:#4c4d4f;stroke:#ffffff;stroke-width:3.5;display:inline" /></g></svg> \ No newline at end of file
diff --git a/icons/paragraph-bar.svg b/icons/paragraph-bar.svg
new file mode 100644
index 0000000..d9203a1
--- /dev/null
+++ b/icons/paragraph-bar.svg
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="22.16"
+ height="22.156"
+ viewBox="0 0 22.156 22.156"
+ enable-background="new 0 0 22.156 22.156"
+ xml:space="preserve"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="paragraph-bar.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
+ id="metadata12"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs10"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 11.078 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="22.156 : 11.078 : 1"
+ inkscape:persp3d-origin="11.078 : 7.3853334 : 1"
+ id="perspective14" /></defs><sodipodi:namedview
+ inkscape:window-height="719"
+ inkscape:window-width="1278"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.90196078"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#a1a1a1"
+ id="base"
+ showgrid="false"
+ inkscape:zoom="20.852139"
+ inkscape:cx="17.054208"
+ inkscape:cy="10.964367"
+ inkscape:window-x="0"
+ inkscape:window-y="16"
+ inkscape:current-layer="g3"
+ borderlayer="false"
+ showborder="true"
+ inkscape:showpageshadow="true" />
+<g
+ id="g3">
+
+
+<text
+ xml:space="preserve"
+ style="font-size:16px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="4.5538874"
+ y="15.777756"
+ id="text2385"><tspan
+ sodipodi:role="line"
+ id="tspan2387"
+ x="4.5538874"
+ y="15.777756">ΒΆ</tspan></text>
+
+
+</g>
+</svg> \ No newline at end of file
diff --git a/toolbar.py b/toolbar.py
index 10b526d..20e4722 100644
--- a/toolbar.py
+++ b/toolbar.py
@@ -34,6 +34,7 @@ from sugar.graphics.toolcombobox import ToolComboBox
from sugar.graphics.objectchooser import ObjectChooser
from sugar.graphics import iconentry
from sugar.activity import activity
+from sugar.activity.widgets import *
from sugar.graphics.menuitem import MenuItem
from sugar.graphics.palette import Palette
from sugar.datastore import datastore
@@ -386,70 +387,99 @@ class TextToolbar(gtk.Toolbar):
def __init__(self, abiword_canvas):
gtk.Toolbar.__init__(self)
- self._abiword_canvas = abiword_canvas
+ font_name = ToolComboBox(widgets.FontCombo(abiword_canvas))
+ self.insert(font_name, -1)
- self.insert(ToolComboBox(widgets.StyleCombo(abiword_canvas)), -1)
+ font_size = ToolComboBox(widgets.FontSizeCombo(abiword_canvas))
+ self.insert(font_size, -1)
separator = gtk.SeparatorToolItem()
- separator.show()
self.insert(separator, -1)
bold = ToggleToolButton('format-text-bold')
bold.set_tooltip(_('Bold'))
bold_id = bold.connect('clicked', lambda sender:
abiword_canvas.toggle_bold())
- self._abiword_canvas.connect('bold', lambda abi, b:
- self.setToggleButtonState(bold, b, bold_id))
+ abiword_canvas.connect('bold', lambda abi, b:
+ self._setToggleButtonState(bold, b, bold_id))
self.insert(bold, -1)
italic = ToggleToolButton('format-text-italic')
italic.set_tooltip(_('Italic'))
italic_id = italic.connect('clicked', lambda sender:
abiword_canvas.toggle_italic())
- self._abiword_canvas.connect('italic', lambda abi, b:
- self.setToggleButtonState(italic, b, italic_id))
+ abiword_canvas.connect('italic', lambda abi, b:
+ self._setToggleButtonState(italic, b, italic_id))
self.insert(italic, -1)
underline = ToggleToolButton('format-text-underline')
underline.set_tooltip(_('Underline'))
underline_id = underline.connect('clicked', lambda sender:
abiword_canvas.toggle_underline())
- self._abiword_canvas.connect('underline', lambda abi, b:
- self.setToggleButtonState(underline, b, underline_id))
+ abiword_canvas.connect('underline', lambda abi, b:
+ self._setToggleButtonState(underline, b, underline_id))
self.insert(underline, -1)
separator = gtk.SeparatorToolItem()
- separator.show()
- self.insert(separator, -1)
-
- alignment = RadioMenuButton(palette=widgets.Alignment(abiword_canvas))
- self.insert(alignment, -1)
-
- lists = RadioMenuButton(palette=widgets.Lists(abiword_canvas))
- self.insert(lists, -1)
-
- separator = gtk.SeparatorToolItem()
- separator.show()
self.insert(separator, -1)
color = ColorToolButton()
- color.connect('color-set', self._text_color_cb)
+ color.connect('color-set', self._text_color_cb, abiword_canvas)
tool_item = gtk.ToolItem()
tool_item.add(color)
self.insert(tool_item, -1)
- self._abiword_canvas.connect('color', lambda abi, r, g, b:
+ abiword_canvas.connect('color', lambda abi, r, g, b:
color.set_color(gtk.gdk.Color(r * 256, g * 256, b * 256)))
self.show_all()
- def setToggleButtonState(self,button,b,id):
+ def _text_color_cb(self, button, abiword_canvas):
+ newcolor = button.get_color()
+ abiword_canvas.set_text_color(int(newcolor.red / 256.0),
+ int(newcolor.green / 256.0),
+ int(newcolor.blue / 256.0))
+
+ def _setToggleButtonState(self,button,b,id):
button.handler_block(id)
button.set_active(b)
button.handler_unblock(id)
- def _text_color_cb(self, button):
- newcolor = button.get_color()
- self._abiword_canvas.set_text_color(int(newcolor.red / 256.0),
- int(newcolor.green / 256.0),
- int(newcolor.blue / 256.0))
+class ParagraphToolbar(gtk.Toolbar):
+ def __init__(self, abi):
+ gtk.Toolbar.__init__(self)
+
+ self.insert(ToolComboBox(widgets.StyleCombo(abi)), -1)
+ self.insert(gtk.SeparatorToolItem(), -1)
+
+ group = widgets.AbiButton(abi, 'left-align')
+ group.props.named_icon = 'format-justify-left'
+ group.props.tooltip = _('Left justify')
+ group.connect('clicked', lambda button: abi.align_left())
+ self.insert(group, -1)
+
+ button = widgets.AbiButton(abi, 'center-align')
+ button.props.group = group
+ button.props.named_icon = 'format-justify-center'
+ button.props.tooltip = _('Center justify')
+ button.connect('clicked', lambda button: abi.align_center())
+ self.insert(button, -1)
+
+ button = widgets.AbiButton(abi, 'right-align')
+ button.props.group = group
+ button.props.named_icon = 'format-justify-right'
+ button.props.tooltip = _('Right justify')
+ button.connect('clicked', lambda button: abi.align_right())
+ self.insert(button, -1)
+
+ button = widgets.AbiButton(abi, 'justify-align')
+ button.props.group = group
+ button.props.named_icon = 'format-justify-fill'
+ button.props.tooltip = _('Fill justify')
+ button.connect('clicked', lambda button: abi.align_justify())
+ self.insert(button, -1)
+
+ self.insert(gtk.SeparatorToolItem(), -1)
+ lists = RadioMenuButton(palette=widgets.ListsPalette(abi))
+ self.insert(lists, -1)
+ self.show_all()
diff --git a/widgets.py b/widgets.py
index 5d26adb..3017916 100644
--- a/widgets.py
+++ b/widgets.py
@@ -177,70 +177,63 @@ class StyleCombo(ComboBox):
self.set_active(style_index)
self.handler_unblock(self._style_changed_id)
-class AbiPalette(RadioPalette):
+class AbiButton(RadioToolButton):
+ def __init__(self, abi, abi_signal, user_cb=None, **kwargs):
+ RadioToolButton.__init__(self, **kwargs)
+ self._handler = abi.connect(abi_signal, self.__abi_cb, user_cb)
+
+ def __abi_cb(self, abi, prop, user_cb):
+ if (user_cb is None and prop) or \
+ (user_cb is not None and user_cb(abi, prop)):
+ abi.handler_block(self._handler)
+ try:
+ self.set_active(True)
+ finally:
+ abi.handler_unblock(self._handler)
+
+class ListsPalette(RadioPalette):
def __init__(self, abi):
RadioPalette.__init__(self)
- self.abi = abi
- def append(self, icon_name, tooltip, clicked_cb, abi_signal, abi_cb):
- siblings = self.button_box.get_children()
-
- button = RadioToolButton(
- icon_name=icon_name,
- group=siblings and siblings[0] or None)
- button.connect('clicked', lambda sender: clicked_cb())
- RadioPalette.append(self, button, tooltip)
-
- def cb(abi, prop):
- if abi_cb(abi, prop):
- button.set_active(True)
- self.abi.connect(abi_signal, cb)
-
-class Alignment(AbiPalette):
- def __init__(self, abi):
- AbiPalette.__init__(self, abi)
-
- self.append('format-justify-left', _('Left justify'),
- lambda: abi.align_left(), 'left-align', lambda abi, b: b)
-
- self.append('format-justify-center', _('Center justify'),
- lambda: abi.align_center(), 'center-align', lambda abi, b: b)
-
- self.append('format-justify-right', _('Right justify'),
- lambda: abi.align_right(), 'right-align', lambda abi, b: b)
-
- self.append('format-justify-fill', _('Fill justify'),
- lambda: abi.align_justify(), 'justify-align', lambda abi, b: b)
-
-class Lists(AbiPalette):
- def __init__(self, abi):
- AbiPalette.__init__(self, abi)
-
- self.append('list-none', _('Normal'),
- lambda: abi.set_style('Normal'),
- 'style-name', lambda abi, style:
+ def append(icon_name, tooltip, clicked_cb, abi_cb):
+ button = AbiButton(abi, 'style-name', abi_cb)
+ button.show()
+ button.props.icon_name = icon_name
+ button.props.group = group
+ button.connect('toggled', lambda sender: clicked_cb())
+ RadioPalette.append(self, button, tooltip)
+ return button
+
+ group = None
+
+ group = append('list-none', _('Normal'),
+ lambda:
+ abi.set_style('Normal'),
+ lambda abi, style:
style not in ['Bullet List',
'Dashed List',
'Numbered List',
'Lower Case List',
'Upper Case List'])
- self.append('list-bullet', _('Bullet List'),
+ append('list-bullet', _('Bullet List'),
lambda: abi.set_style('Bullet List'),
- 'style-name', lambda abi, style: style == 'Bullet List')
+ lambda abi, style: style == 'Bullet List')
- self.append('list-dashed', _('Dashed List'),
+ append('list-dashed', _('Dashed List'),
lambda: abi.set_style('Dashed List'),
- 'style-name', lambda abi, style: style == 'Dashed List')
+ lambda abi, style: style == 'Dashed List')
- self.append('list-numbered', _('Numbered List'),
+ append('list-numbered', _('Numbered List'),
lambda: abi.set_style('Numbered List'),
- 'style-name', lambda abi, style: style == 'Numbered List')
+ lambda abi, style: style == 'Numbered List')
- self.append('list-lower-case', _('Lower Case List'),
+ append('list-lower-case', _('Lower Case List'),
lambda: abi.set_style('Lower Case List'),
- 'style-name', lambda abi, style: style == 'Lower Case List')
+ lambda abi, style: style == 'Lower Case List')
- self.append('list-upper-case', _('Upper Case List'),
+ append('list-upper-case', _('Upper Case List'),
lambda: abi.set_style('Upper Case List'),
- 'style-name', lambda abi, style: style == 'Upper Case List')
+ lambda abi, style: style == 'Upper Case List')
+
+ self.show_all()