Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/toolbar.py
diff options
context:
space:
mode:
Diffstat (limited to 'toolbar.py')
-rw-r--r--toolbar.py312
1 files changed, 202 insertions, 110 deletions
diff --git a/toolbar.py b/toolbar.py
index 3054dec..75243c7 100644
--- a/toolbar.py
+++ b/toolbar.py
@@ -22,33 +22,76 @@ import logging
import abiword
import gtk
-from sugar.graphics.radiopalette import RadioMenuButton
-from sugar.graphics.icon import Icon
from sugar.graphics.toolbutton import ToolButton
-from sugar.graphics.toggletoolbutton import ToggleToolButton
-from sugar.graphics.colorbutton import ColorToolButton
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.palette import Palette
-from sugar import mime
+from sugar.graphics import style
+from sugar.activity.widgets import CopyButton
+from sugar.activity.widgets import PasteButton
+from sugar.activity.widgets import UndoButton
+from sugar.activity.widgets import RedoButton
from port import chooser
-import sugar.profile
-import widgets
+from widgets import AbiButton
+from widgets import FontCombo
+from widgets import FontSizeCombo
logger = logging.getLogger('write-activity')
-class SearchToolbar(gtk.Toolbar):
+class EditToolbar(gtk.Toolbar):
+ def __init__(self, pc, toolbar_box):
+
+ gtk.Toolbar.__init__(self)
- def __init__(self, abiword_canvas, text_toolbar):
+ self._abiword_canvas = pc.abiword_canvas
- gtk.Toolbar.__init__(self)
+ copy = CopyButton()
+ copy.props.accelerator = '<Ctrl>C'
+ copy.connect('clicked', lambda button: pc.abiword_canvas.copy())
+ self.insert(copy, -1)
+ copy.show()
- self._abiword_canvas = abiword_canvas
- self._text_toolbar = text_toolbar
+ paste = PasteButton()
+ paste.props.accelerator = '<Ctrl>V'
+ paste.connect('clicked', lambda button: pc.abiword_canvas.paste())
+ self.insert(paste, -1)
+ paste.show()
+
+ separator = gtk.SeparatorToolItem()
+ self.insert(separator, -1)
+ separator.show()
+
+ undo = UndoButton(sensitive=False)
+ undo.connect('clicked', lambda button: pc.abiword_canvas.undo())
+ pc.abiword_canvas.connect("can-undo", lambda abi, can_undo:
+ undo.set_sensitive(can_undo))
+ self.insert(undo, -1)
+ undo.show()
+
+ redo = RedoButton(sensitive=False)
+ redo.connect('clicked', lambda button: pc.abiword_canvas.redo())
+ pc.abiword_canvas.connect("can-redo", lambda abi, can_redo:
+ redo.set_sensitive(can_redo))
+ self.insert(redo, -1)
+ redo.show()
+
+ pc.abiword_canvas.connect('text-selected', lambda abi, b:
+ copy.set_sensitive(True))
+ pc.abiword_canvas.connect('image-selected', lambda abi, b:
+ copy.set_sensitive(True))
+ pc.abiword_canvas.connect('selection-cleared', lambda abi, b:
+ copy.set_sensitive(False))
+
+ separator = gtk.SeparatorToolItem()
+ self.insert(separator, -1)
+ separator.show()
+
+ search_label = gtk.Label(_("Search") + ": ")
+ search_label.show()
+ search_item_page_label = gtk.ToolItem()
+ search_item_page_label.add(search_label)
+ self.insert(search_item_page_label, -1)
+ search_item_page_label.show()
# setup the search options
self._search_entry = iconentry.IconEntry()
@@ -56,20 +99,20 @@ class SearchToolbar(gtk.Toolbar):
'system-search')
self._search_entry.connect('activate', self._search_entry_activated_cb)
self._search_entry.connect('changed', self._search_entry_changed_cb)
- self._search_entry.add_clear_button();
+ self._search_entry.add_clear_button()
self._add_widget(self._search_entry, expand=True)
- self._findprev = ToolButton('go-previous')
+ self._findprev = ToolButton('go-previous-paired')
self._findprev.set_tooltip(_('Find previous'))
self.insert(self._findprev, -1)
self._findprev.show()
- self._findprev.connect('clicked', self._findprev_cb);
+ self._findprev.connect('clicked', self._findprev_cb)
- self._findnext = ToolButton('go-next')
+ self._findnext = ToolButton('go-next-paired')
self._findnext.set_tooltip(_('Find next'))
self.insert(self._findnext, -1)
self._findnext.show()
- self._findnext.connect('clicked', self._findnext_cb);
+ self._findnext.connect('clicked', self._findnext_cb)
# set the initial state of the search controls
# note: we won't simple call self._search_entry_changed_cb
@@ -141,6 +184,10 @@ class InsertToolbar(gtk.Toolbar):
self._table = abiword.TableCreator()
self._table.set_labels(_('Table'), _('Cancel'))
self._table_id = self._table.connect('selected', self._table_cb)
+ image = gtk.Image()
+ image.set_from_icon_name('insert-table', -1)
+ self._table.set_image(image)
+ self._table.set_relief(gtk.RELIEF_NONE)
tool_item = gtk.ToolItem()
tool_item.add(self._table)
self.insert(tool_item, -1)
@@ -148,28 +195,32 @@ class InsertToolbar(gtk.Toolbar):
self._table_rows_after = ToolButton('row-insert')
self._table_rows_after.set_tooltip(_('Insert Row'))
- self._table_rows_after_id = self._table_rows_after.connect('clicked', self._table_rows_after_cb)
+ self._table_rows_after_id = self._table_rows_after.connect( \
+ 'clicked', self._table_rows_after_cb)
self.insert(self._table_rows_after, -1)
self._table_delete_rows = ToolButton('row-remove')
self._table_delete_rows.set_tooltip(_('Delete Row'))
- self._table_delete_rows_id = self._table_delete_rows.connect('clicked', self._table_delete_rows_cb)
+ self._table_delete_rows_id = self._table_delete_rows.connect( \
+ 'clicked', self._table_delete_rows_cb)
self.insert(self._table_delete_rows, -1)
self._table_cols_after = ToolButton('column-insert')
self._table_cols_after.set_tooltip(_('Insert Column'))
- self._table_cols_after_id = self._table_cols_after.connect('clicked', self._table_cols_after_cb)
+ self._table_cols_after_id = self._table_cols_after.connect( \
+ 'clicked', self._table_cols_after_cb)
self.insert(self._table_cols_after, -1)
self._table_delete_cols = ToolButton('column-remove')
self._table_delete_cols.set_tooltip(_('Delete Column'))
- self._table_delete_cols_id = self._table_delete_cols.connect('clicked', self._table_delete_cols_cb)
+ self._table_delete_cols_id = self._table_delete_cols.connect( \
+ 'clicked', self._table_delete_cols_cb)
self.insert(self._table_delete_cols, -1)
separator = gtk.SeparatorToolItem()
self.insert(separator, -1)
- image = ToolButton('insert-image')
+ image = ToolButton('insert-picture')
image.set_tooltip(_('Insert Image'))
self._image_id = image.connect('clicked', self._image_cb)
self.insert(image, -1)
@@ -186,7 +237,7 @@ class InsertToolbar(gtk.Toolbar):
chooser.pick(what=chooser.IMAGE, cb=cb)
def _table_cb(self, abi, rows, cols):
- self._abiword_canvas.insert_table(rows,cols)
+ self._abiword_canvas.insert_table(rows, cols)
def _table_rows_after_cb(self, button):
self._abiword_canvas.invoke_cmd('insertRowsAfter', '', 0, 0)
@@ -211,7 +262,7 @@ class ViewToolbar(gtk.Toolbar):
gtk.Toolbar.__init__(self)
self._abiword_canvas = abiword_canvas
- self._zoom_percentage = 0;
+ self._zoom_percentage = 0
self._zoom_out = ToolButton('zoom-out')
self._zoom_out.set_tooltip(_('Zoom Out'))
@@ -228,7 +279,8 @@ class ViewToolbar(gtk.Toolbar):
# TODO: fix the initial value
self._zoom_spin_adj = gtk.Adjustment(0, 25, 400, 25, 50, 0)
self._zoom_spin = gtk.SpinButton(self._zoom_spin_adj, 0, 0)
- self._zoom_spin_id = self._zoom_spin.connect('value-changed', self._zoom_spin_cb)
+ self._zoom_spin_id = self._zoom_spin.connect('value-changed',
+ self._zoom_spin_cb)
self._zoom_spin.set_numeric(True)
self._zoom_spin.show()
tool_item_zoom = gtk.ToolItem()
@@ -255,9 +307,10 @@ class ViewToolbar(gtk.Toolbar):
self.insert(tool_item_page_label, -1)
tool_item_page_label.show()
- self._page_spin_adj = gtk.Adjustment(0, 1, 0, 1, 1, 0)
+ self._page_spin_adj = gtk.Adjustment(0, 1, 0, -1, -1, 0)
self._page_spin = gtk.SpinButton(self._page_spin_adj, 0, 0)
- self._page_spin_id = self._page_spin.connect('value-changed', self._page_spin_cb)
+ self._page_spin_id = self._page_spin.connect('value-changed',
+ self._page_spin_cb)
self._page_spin.set_numeric(True)
self._page_spin.show()
tool_item_page = gtk.ToolItem()
@@ -304,12 +357,12 @@ class ViewToolbar(gtk.Toolbar):
self._abiword_canvas.set_zoom_percentage(self._zoom_percentage)
def _page_spin_cb(self, button):
- self._page_num = self._page_spin.get_value_as_int()
- self._abiword_canvas.set_current_page(self._page_num)
+ page_num = self._page_spin.get_value_as_int()
+ self._abiword_canvas.set_current_page(page_num)
def _page_count_cb(self, canvas, count):
current_page = canvas.get_current_page_num()
- self._page_spin_adj.set_all(current_page, 1, count, 1, 1, 0)
+ self._page_spin_adj.set_all(current_page, 1, count, -1, -1, 0)
self._total_page_label.props.label = \
' / ' + str(count)
@@ -324,95 +377,134 @@ class TextToolbar(gtk.Toolbar):
def __init__(self, abiword_canvas):
gtk.Toolbar.__init__(self)
- font_name = ToolComboBox(widgets.FontCombo(abiword_canvas))
+ font_name = ToolComboBox(FontCombo(abiword_canvas))
self.insert(font_name, -1)
- font_size = ToolComboBox(widgets.FontSizeCombo(abiword_canvas))
+ font_size = ToolComboBox(FontSizeCombo(abiword_canvas))
self.insert(font_size, -1)
- separator = gtk.SeparatorToolItem()
- self.insert(separator, -1)
-
- bold = ToggleToolButton('format-text-bold')
- bold.set_tooltip(_('Bold'))
- bold_id = bold.connect('clicked', lambda sender:
- abiword_canvas.toggle_bold())
- 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())
- 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())
- abiword_canvas.connect('underline', lambda abi, b:
- self._setToggleButtonState(underline, b, underline_id))
- self.insert(underline, -1)
-
- separator = gtk.SeparatorToolItem()
- self.insert(separator, -1)
-
- color = ColorToolButton()
- color.connect('color-set', self._text_color_cb, abiword_canvas)
- tool_item = gtk.ToolItem()
- tool_item.add(color)
- self.insert(tool_item, -1)
- abiword_canvas.connect('color', lambda abi, r, g, b:
- color.set_color(gtk.gdk.Color(r * 256, g * 256, b * 256)))
+ # MAGIC NUMBER WARNING: Secondary toolbars are not a standard height?
+ self.set_size_request(-1, style.GRID_CELL_SIZE)
self.show_all()
- 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)
-
class ParagraphToolbar(gtk.Toolbar):
def __init__(self, abi):
gtk.Toolbar.__init__(self)
- self.insert(ToolComboBox(widgets.StyleCombo(abi)), -1)
+ def append_style(icon_name, tooltip, do_abi_cb, on_abi_cb):
+ button = AbiButton(abi, 'style-name', do_abi_cb, on_abi_cb)
+ button.props.icon_name = icon_name
+ button.props.group = group
+ button.props.tooltip = tooltip
+ self.insert(button, -1)
+ return button
+
+ group = None
+
+ group = append_style('list-none', _('Normal'),
+ lambda:
+ abi.set_style('Normal'),
+ lambda abi, style:
+ style not in ['Heading 1',
+ 'Heading 2',
+ 'Heading 3',
+ 'Heading 4',
+ 'Block Text',
+ 'Plain Text'])
+
+ append_style('paragraph-h1', _('Heading 1'),
+ lambda: abi.set_style('Heading 1'),
+ lambda abi, style: style == 'Heading 1')
+
+ append_style('paragraph-h2', _('Heading 2'),
+ lambda: abi.set_style('Heading 2'),
+ lambda abi, style: style == 'Heading 2')
+
+ append_style('paragraph-h3', _('Heading 3'),
+ lambda: abi.set_style('Heading 3'),
+ lambda abi, style: style == 'Heading 3')
+
+ append_style('paragraph-h4', _('Heading 4'),
+ lambda: abi.set_style('Heading 4'),
+ lambda abi, style: style == 'Heading 4')
+
+ append_style('paragraph-blocktext', _('Block Text'),
+ lambda: abi.set_style('Block Text'),
+ lambda abi, style: style == 'Block Text')
+
+ append_style('paragraph-plaintext', _('Plain Text'),
+ lambda: abi.set_style('Plain Text'),
+ lambda abi, style: style == 'Plain Text')
+
self.insert(gtk.SeparatorToolItem(), -1)
- group = widgets.AbiButton(abi, 'left-align', abi.align_left)
- group.props.named_icon = 'format-justify-left'
- group.props.tooltip = _('Left justify')
- self.insert(group, -1)
-
- button = widgets.AbiButton(abi, 'center-align', abi.align_center)
- button.props.group = group
- button.props.named_icon = 'format-justify-center'
- button.props.tooltip = _('Center justify')
- self.insert(button, -1)
-
- button = widgets.AbiButton(abi, 'right-align', abi.align_right)
- button.props.group = group
- button.props.named_icon = 'format-justify-right'
- button.props.tooltip = _('Right justify')
- self.insert(button, -1)
-
- button = widgets.AbiButton(abi, 'justify-align', abi.align_justify)
- button.props.group = group
- button.props.named_icon = 'format-justify-fill'
- button.props.tooltip = _('Fill justify')
- self.insert(button, -1)
+ def append_align(icon_name, tooltip, do_abi_cb, style_name):
+ button = AbiButton(abi, style_name, do_abi_cb)
+ button.props.icon_name = icon_name
+ button.props.group = group
+ button.props.tooltip = tooltip
+ self.insert(button, -1)
+ return button
- self.insert(gtk.SeparatorToolItem(), -1)
- lists = RadioMenuButton(palette=widgets.ListsPalette(abi))
- self.insert(lists, -1)
+ group = None
+
+ group = append_align('format-justify-left', _('Left justify'),
+ abi.align_left, 'left-align')
+
+ append_align('format-justify-center', _('Center justify'),
+ abi.align_center, 'center-align')
+
+ append_align('format-justify-right', _('Right justify'),
+ abi.align_right, 'right-align')
+
+ append_align('format-justify-fill', _('Fill justify'),
+ abi.align_justify, 'justify-align')
+
+ self.show_all()
+
+class ListToolbar(gtk.Toolbar):
+ def __init__(self, abi):
+ gtk.Toolbar.__init__(self)
+
+ def append(icon_name, tooltip, do_abi_cb, on_abi_cb):
+ button = AbiButton(abi, 'style-name', do_abi_cb, on_abi_cb)
+ button.props.icon_name = icon_name
+ button.props.group = group
+ button.props.tooltip = tooltip
+ self.insert(button, -1)
+ 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'])
+
+ append('list-bullet', _('Bullet List'),
+ lambda: abi.set_style('Bullet List'),
+ lambda abi, style: style == 'Bullet List')
+
+ append('list-dashed', _('Dashed List'),
+ lambda: abi.set_style('Dashed List'),
+ lambda abi, style: style == 'Dashed List')
+
+ append('list-numbered', _('Numbered List'),
+ lambda: abi.set_style('Numbered List'),
+ lambda abi, style: style == 'Numbered List')
+
+ append('list-lower-case', _('Lower Case List'),
+ lambda: abi.set_style('Lower Case List'),
+ lambda abi, style: style == 'Lower Case List')
+
+ append('list-upper-case', _('Upper Case List'),
+ lambda: abi.set_style('Upper Case List'),
+ lambda abi, style: style == 'Upper Case List')
self.show_all()