[Sugar-devel] [PATCH] Help Button with useful commands
Agustin Zubiaga
aguz at sugarlabs.org
Thu Jun 21 20:11:26 EDT 2012
Gonzalo's button ported to GTK3
Bugs:
Wrap mode doesn't work
Grey background
Signed-off-by: Agustin Zubiaga <aguz at sugarlabs.org>
---
helpbutton.py | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++
icons/help-icon.svg | 14 +++++++++
terminal.py | 33 ++++++++++++++++++++
3 files changed, 132 insertions(+)
create mode 100644 helpbutton.py
create mode 100644 icons/help-icon.svg
diff --git a/helpbutton.py b/helpbutton.py
new file mode 100644
index 0000000..1f01851
--- /dev/null
+++ b/helpbutton.py
@@ -0,0 +1,85 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2012, Gonzalo Odiard <godiard at gmail.com>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+# HelpButton widget
+
+from gettext import gettext as _
+
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GObject
+
+from sugar3.graphics.toolbutton import ToolButton
+from sugar3.graphics.icon import Icon
+from sugar3.graphics import style
+
+
+class HelpButton(Gtk.ToolItem):
+
+ def __init__(self, **kwargs):
+ GObject.GObject.__init__(self)
+
+ help_button = ToolButton('help-icon')
+ help_button.set_tooltip(_('Help'))
+ self.add(help_button)
+
+ self._palette = help_button.get_palette()
+
+ sw = Gtk.ScrolledWindow()
+ sw.set_size_request(int(Gdk.Screen.width() / 2.8),
+ Gdk.Screen.height() - style.GRID_CELL_SIZE * 3)
+ sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
+
+ self._max_text_width = int(Gdk.Screen.width() / 3) - 600
+ self._vbox = Gtk.VBox()
+ self._vbox.set_homogeneous(False)
+
+ hbox = Gtk.HBox()
+ hbox.pack_start(self._vbox, False, True, 0)
+
+ sw.add_with_viewport(hbox)
+
+ self._palette.set_content(sw)
+ sw.show_all()
+
+ help_button.connect('clicked', self.__help_button_clicked_cb)
+
+ def __help_button_clicked_cb(self, button):
+ self._palette.popup(immediate=True, state=1)
+
+ def add_section(self, section_text):
+ hbox = Gtk.HBox()
+ label = Gtk.Label()
+ label.set_use_markup(True)
+ label.set_markup('<b>%s</b>' % section_text)
+ label.set_line_wrap(True)
+ hbox.pack_start(label, False, False, 0)
+ hbox.show_all()
+ self._vbox.pack_start(hbox, False, False, padding=5)
+
+ def add_paragraph(self, text, icon=None):
+ hbox = Gtk.HBox()
+ label = Gtk.Label(label=text)
+ label.set_justify(Gtk.Justification.LEFT)
+ label.set_line_wrap(True)
+ hbox.pack_start(label, False, False, 0)
+ if icon is not None:
+ _icon = Icon(icon_name=icon)
+ hbox.add(_icon)
+ hbox.show_all()
+ self._vbox.pack_start(hbox, False, False, padding=5)
diff --git a/icons/help-icon.svg b/icons/help-icon.svg
new file mode 100644
index 0000000..f6c92bf
--- /dev/null
+++ b/icons/help-icon.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="55px" height="55px">
+ <path
+ style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linejoin:round"
+ d="M 48,28 A 20,20 0 1 1 8,28 A 20,20 0 1 1 48,28 z"/>
+ <path
+ style="fill:none;stroke:#ffffff;stroke-width:6;stroke-linecap:round;stroke-linejoin:round"
+ d="M 22,20 C 22,20 25,17 29,17 C 33,17 36,19 36,23 C 36,27 31,29 28,29 L 28,32" />
+ <path
+ style="fill:#ffffff"
+ d="M 25,40
+ a 3,3 0 1 1 6,0
+ a 3,3 0 1 1 -6,0 z" />
+</svg>
diff --git a/terminal.py b/terminal.py
index a37e2ac..803fed9 100644
--- a/terminal.py
+++ b/terminal.py
@@ -42,6 +42,9 @@ from sugar3 import env
from widgets import BrowserNotebook
from widgets import TabLabel
+from helpbutton import HelpButton
+
+
MASKED_ENVIRONMENT = [
'DBUS_SESSION_BUS_ADDRESS',
'PPID']
@@ -104,6 +107,10 @@ class TerminalActivity(activity.Activity):
toolbar_box.toolbar.insert(separator, -1)
separator.show()
+ helpbutton = self._create_help_button()
+ toolbar_box.toolbar.insert(helpbutton, -1)
+ helpbutton.show_all()
+
stop_button = StopButton(self)
stop_button.props.accelerator = '<Ctrl><Shift>Q'
toolbar_box.toolbar.insert(stop_button, -1)
@@ -183,6 +190,32 @@ class TerminalActivity(activity.Activity):
def __fullscreen_cb(self, button):
self.fullscreen()
+ def _create_help_button(self):
+ helpitem = HelpButton()
+
+ helpitem.add_section(_('Useful commands'))
+ helpitem.add_section(_('cd'))
+ helpitem.add_paragraph(_('Change directory'))
+ helpitem.add_paragraph(_('To use it, write: cd directory'))
+ helpitem.add_paragraph(_('If you call it without parameters, will change\nto the user directory'))
+ helpitem.add_section(_('ls'))
+ helpitem.add_paragraph(_('List the content of a directory.'))
+ helpitem.add_paragraph(_('To use it, write: ls directory'))
+ helpitem.add_paragraph(_('If you call it without parameters, will list\nthe working directory'))
+ helpitem.add_section(_('cp'))
+ helpitem.add_paragraph(_('Copy a file to a specific location'))
+ helpitem.add_paragraph(_('Call it with the file and the new location'))
+ helpitem.add_paragraph(_('Use: cp file directory/'))
+ helpitem.add_section(_('rm'))
+ helpitem.add_paragraph(_('Removes a file in any path'))
+ helpitem.add_paragraph(_('Use: rm file'))
+ helpitem.add_section(_('su'))
+ helpitem.add_paragraph(_('Login as superuser (root)'))
+ helpitem.add_paragraph(_('The root user is the administrator of the system'))
+ helpitem.add_paragraph(_('You must be careful, because you can modify system files'))
+
+ return helpitem
+
def _create_tab_toolbar(self):
tab_toolbar = Gtk.Toolbar()
new_tab_button = ToolButton('tab-add')
--
1.7.10.2
More information about the Sugar-devel
mailing list