diff options
author | Aleksey Lim <alsroot@member.fsf.org> | 2011-01-18 07:53:44 (GMT) |
---|---|---|
committer | Anish Mangal <anish@activitycentral.com> | 2012-04-27 10:02:35 (GMT) |
commit | a91f1af4cffeb35d2e2fe57e98849ce121dd863b (patch) | |
tree | c494cf041d6211d1b15b8136cf3194b78ee2a56e | |
parent | fbc3c89c41bc67ddc5605864a6962a8b553a9e55 (diff) |
Two kinds of feedback submits
-rw-r--r-- | extensions/deviceicon/feedback.py | 214 |
1 files changed, 132 insertions, 82 deletions
diff --git a/extensions/deviceicon/feedback.py b/extensions/deviceicon/feedback.py index dc40a6e..4f5198f 100644 --- a/extensions/deviceicon/feedback.py +++ b/extensions/deviceicon/feedback.py @@ -16,113 +16,163 @@ import logging from gettext import gettext as _ + import gconf import gtk + +from sugar import profile from sugar.graphics import style +from sugar.graphics.icon import Icon from sugar.graphics.tray import TrayIcon from sugar.graphics.palette import Palette -from sugar.graphics.xocolor import XoColor +from sugar.graphics.menuitem import MenuItem +from sugar.graphics.toolbutton import ToolButton + from jarabe.model import feedback_collector -from jarabe.view import launcher -from sugar.activity import activityfactory -from jarabe.model import bundleregistry -from sugar.activity.activityhandle import ActivityHandle + _ICON_NAME = 'feedback-icon' + class DeviceView(TrayIcon): + FRAME_POSITION_RELATIVE = 500 + def __init__(self): - client = gconf.client_get_default() - self._color = XoColor(client.get_string('/desktop/sugar/user/color')) - TrayIcon.__init__(self, icon_name=_ICON_NAME, xo_color=self._color) + TrayIcon.__init__(self, icon_name=_ICON_NAME, + xo_color=profile.get_color()) self.create_palette() - + def create_palette(self): logging.debug('palette created') - self.palette = BugsPalette(_('Bugs')) + self.palette = _Palette(_('Feedback')) self.palette.set_group_id('frame') return self.palette -class BugsPalette(Palette): - +class _Palette(Palette): + def __init__(self, primary_text): Palette.__init__(self, primary_text) - self._level = 0 - self._status_label = gtk.Label() - self._status_label.show() - self.vbox = gtk.VBox() - self.hbox = gtk.HBox() - self.set_content(self.vbox) - self._bugs_count_text = gtk.Label() - self.vbox.pack_start(self._bugs_count_text, - padding = style.DEFAULT_PADDING) - self.vbox.pack_start(self.hbox, padding = style.DEFAULT_PADDING) - self.vbox.show() - self.hbox.pack_start(self._status_label, - padding = style.DEFAULT_PADDING) - self.hbox.show() - self._open_log_button = gtk.Button("Open Log") - self._open_log_button.connect("clicked", - self.__open_log_activity) - self.hbox.pack_start(self._open_log_button, - padding = style.DEFAULT_PADDING) - self._send_report_button = gtk.Button("Send Report") - self._send_report_button.connect("clicked", self.__send_bug_report) - self.hbox.pack_start(self._send_report_button, - padding = style.DEFAULT_PADDING) - self.__get_bug_count() - self._bugs_count_text.show() - self._open_log_button.show() - self._send_report_button.show() - + + icon = Icon() + icon.set_from_icon_name('emblem-favorite', gtk.ICON_SIZE_MENU) + icon.props.xo_color = profile.get_color() + + personalized = MenuItem(_('Personalized submit...')) + personalized.set_image(icon) + personalized.connect('activate', self.__personalized_activate_cb) + personalized.show() + self.menu.append(personalized) + + self._anonymous = MenuItem(_('Anonymous submit'), 'emblem-favorite') + self._anonymous.connect('activate', self.__anonymous_activate_cb) + self._anonymous.show() + self.menu.append(self._anonymous) + def popup(self, immediate=False, state=None): + self._anonymous.set_sensitive(not feedback_collector.is_empty()) Palette.popup(self, immediate=immediate, state=state) - self.__update_bug_palette() - - - def __send_bug_report(self, button): - feedback_collector.submit() - - def __open_log_activity(self, path): - - registry = bundleregistry.get_registry() - bundle = registry.get_bundle('org.laptop.Log') - activity_id = activityfactory.create_activity_id() - client = gconf.client_get_default() - xo_color = XoColor(client.get_string('/desktop/sugar/user/color')) - launcher.add_launcher(activity_id, bundle.get_icon(), xo_color) - activityfactory.create(bundle, ActivityHandle(activity_id)) - - def __get_bug_count(self): - """This method returns the total error count""" - bugs_count = 0 - - - return bugs_count - - def __update_bug_palette(self): - bugs_count = self.__get_bug_count() - self._open_log_button.set_sensitive(False) - have_reports, have_errors = feedback_collector.stat() - #have_reports, have_errors=[True,False] - if have_errors: - self._open_log_button.set_sensitive(True) + + def __anonymous_activate_cb(self, button): + feedback_collector.anonymous_submit() + + def __personalized_activate_cb(self, button): + window = _Window() + window.show() + + +class _Window(gtk.Window): + + __gtype_name__ = 'FeedbackWindow' + + def __init__(self): + gtk.Window.__init__(self) + + self.set_border_width(style.LINE_WIDTH) + offset = style.GRID_CELL_SIZE + width = gtk.gdk.screen_width() - offset * 2 + height = gtk.gdk.screen_height() - offset * 2 + self.set_size_request(width, height) + self.set_position(gtk.WIN_POS_CENTER_ALWAYS) + self.set_decorated(False) + self.set_resizable(False) + self.set_modal(True) + + canvas = gtk.VBox() + self.add(canvas) + + self._toolbar = gtk.Toolbar() + canvas.pack_start(self._toolbar, False) + + icon = Icon() + icon.set_from_icon_name('emblem-favorite', gtk.ICON_SIZE_LARGE_TOOLBAR) + icon.props.xo_color = profile.get_color() + self._add_widget(icon) + + self._add_separator(False) + + title = gtk.Label(_('Submit feedback')) + self._add_widget(title) + + self._add_separator(True) + + submit = ToolButton('dialog-ok', tooltip=_('Submit')) + submit.connect('clicked', lambda button: self._submit()) + self._toolbar.insert(submit, -1) + + cancel = ToolButton('dialog-cancel', tooltip=_('Cancel')) + cancel.connect('clicked', lambda button: self.destroy()) + self._toolbar.insert(cancel, -1) + + bg = gtk.EventBox() + bg.modify_bg(gtk.STATE_NORMAL, style.COLOR_WHITE.get_gdk_color()) + canvas.pack_start(bg) + + self._message = gtk.TextView() + scrolled = gtk.ScrolledWindow() + scrolled.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + scrolled.set_border_width(style.DEFAULT_PADDING) + scrolled.add(self._message) + bg.add(scrolled) + + self.show_all() + self.set_focus(self._message) + + self.connect("realize", self.__realize_cb) + + def do_key_press_event(self, event): + if event.keyval == gtk.keysyms.Escape: + self.destroy() + elif event.keyval == gtk.keysyms.Return and \ + event.state & gtk.gdk.CONTROL_MASK: + self._submit() else: - self._open_log_button.set_sensitive(False) - - - if have_reports: - self._send_report_button.set_sensitive(True) + gtk.Window.do_key_press_event(self, event) + + def _add_widget(self, widget): + tool_item = gtk.ToolItem() + tool_item.add(widget) + self._toolbar.insert(tool_item, -1) + + def _add_separator(self, expand): + separator = gtk.SeparatorToolItem() + separator.props.draw = False + if expand: + separator.set_expand(True) else: - self._send_report_button.set_sensitive(False) - - if bugs_count == 0: - self._bugs_count_text.set_label('No Errors') - else : - self._bugs_count_text.set_label(_('Total Errors: %d' % bugs_count)) - + separator.set_size_request(style.DEFAULT_SPACING, -1) + self._toolbar.insert(separator, -1) + + def _submit(self): + feedback_collector.submit(self._message.props.buffer.props.text) + self.destroy() + + def __realize_cb(self, widget): + self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) + self.window.set_accept_focus(True) + + def setup(tray): client = gconf.client_get_default() if client.get_bool('/desktop/sugar/feedback/enabled'): |