diff options
author | Aleksey 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) |
commit | bb66c911b990c1f02fedd5ae8c3da59858142300 (patch) | |
tree | a170ba1df32c281d2a518c5bd30b6fa95916d159 | |
parent | 62df10f4216ca10dd1ee52229f9350789170258b (diff) |
New Write primary toolbar icon design does not all fit in the toolbar #1122
-rw-r--r-- | AbiWordActivity.py | 38 | ||||
-rw-r--r-- | icons/list-none.svg | 30 | ||||
-rw-r--r-- | icons/paragraph-bar.svg | 72 | ||||
-rw-r--r-- | toolbar.py | 86 | ||||
-rw-r--r-- | widgets.py | 91 |
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 @@ -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() @@ -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() |