def __init__(self, parser): # for some reason, this is not being obeyed self.item_width = 55 self.item_height = 50 self._signal_name = 'category_item_selected' self._parser = parser # Initialise self._items self._items = {} # Save the order of the categories so we can use it outside self.categories = self._parser.list_available_categories() SelectMenu.__init__(self, self.categories, self._signal_name) # Add the scrollbar for the category menu sw = ScrolledWindow() sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) # Set the scrollbar to the left sw.set_placement(Gtk.CornerType.TOP_RIGHT) sw.apply_styling_to_widget() sw.set_size_request(-1, 364) self.add(sw) self._vertbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) sw.add(self._vertbox) # The menu is one item by 7 items self.set_size_request(self.item_width, 7 * self.item_height) self._pack_buttons()
def __init__(self, parser): # for some reason, this is not being obeyed self.item_width = 55 self.item_height = 50 self._signal_name = 'category_item_selected' self._parser = parser # Initialise self._items self._items = {} # Save the order of the categories so we can use it outside self.categories = self._parser.list_available_categories() SelectMenu.__init__(self, self.categories, self._signal_name) # Add the scrollbar for the category menu sw = ScrolledWindow() sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) # Set the scrollbar to the left sw.set_placement(Gtk.CornerType.TOP_RIGHT) sw.apply_styling_to_widget() sw.set_size_request(-1, 364) self.add(sw) self._vertbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) sw.add(self._vertbox) # The menu is one item by 7 items self.set_size_request(self.item_width, 7 * self.item_height) self._pack_buttons()
def setup_application_widgets(self): screen = Gdk.Screen.get_default() width = screen.get_width() height = screen.get_height() self.terminal = TerminalUi() fg_color = Gdk.Color.parse("#ffffff")[1] bg_color = Gdk.Color.parse("#262626")[1] self.terminal.set_colors(fg_color, bg_color, []) self.terminal.set_margin_top(10) self.terminal.set_margin_left(10) self.terminal.set_margin_right(10) self.spellbook = Spellbook() self.story = Storybook( width / 2 - 40, height - self.spellbook.HEIGHT - 2 * 44 - 10 ) self.story.set_margin_top(10) self.story.set_margin_left(10) self.story.set_margin_right(10) story_sw = ScrolledWindow() story_sw.apply_styling_to_screen() story_sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) story_sw.add(self.story) left_background = Gtk.EventBox() left_background.get_style_context().add_class("story_background") right_background = Gtk.EventBox() right_background.get_style_context().add_class("terminal_background") vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.add(vbox) hbox = Gtk.Box() vbox.pack_start(hbox, False, False, 0) vbox.pack_start(self.spellbook, False, False, 0) hbox.pack_start(left_background, False, False, 0) hbox.pack_start(right_background, False, False, 0) left_background.add(story_sw) right_background.add(self.terminal) # Allow for margin on bottom and top bar. self.terminal.set_size_request( width / 2 - 20, height - self.spellbook.HEIGHT - 2 * 44 - 20 ) story_sw.set_size_request( width / 2 - 20, height - self.spellbook.HEIGHT - 2 * 44 - 10 ) self.run_server()
def setup_application_widgets(self): screen = Gdk.Screen.get_default() width = screen.get_width() height = screen.get_height() self.terminal = TerminalUi() fg_color = Gdk.Color.parse("#ffffff")[1] bg_color = Gdk.Color.parse("#262626")[1] self.terminal.set_colors(fg_color, bg_color, []) self.terminal.set_margin_top(10) self.terminal.set_margin_left(10) self.terminal.set_margin_right(10) self.spellbook = Spellbook() self.story = Storybook(width / 2 - 40, height - self.spellbook.HEIGHT - 2 * 44 - 10) self.story.set_margin_top(10) self.story.set_margin_left(10) self.story.set_margin_right(10) story_sw = ScrolledWindow() story_sw.apply_styling_to_screen() story_sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) story_sw.add(self.story) left_background = Gtk.EventBox() left_background.get_style_context().add_class("story_background") right_background = Gtk.EventBox() right_background.get_style_context().add_class("terminal_background") vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.add(vbox) hbox = Gtk.Box() vbox.pack_start(hbox, False, False, 0) vbox.pack_start(self.spellbook, False, False, 0) hbox.pack_start(left_background, False, False, 0) hbox.pack_start(right_background, False, False, 0) left_background.add(story_sw) right_background.add(self.terminal) # Allow for margin on bottom and top bar. self.terminal.set_size_request( width / 2 - 20, height - self.spellbook.HEIGHT - 2 * 44 - 20) story_sw.set_size_request(width / 2 - 20, height - self.spellbook.HEIGHT - 2 * 44 - 10) self.run_server()
def __init__(self, border_width=2): Gtk.EventBox.__init__(self) # Very hacky way to get a border (gg GTK): create a grey event box # which is a little bigger than the white event box containing the # widget apply_styling_to_screen( os.path.join(common_css_dir, 'multiline_entry.css') ) self.get_style_context().add_class('gray-box') widget_box = Gtk.EventBox() widget_box.get_style_context().add_class('white-box') widget_box.set_margin_left(border_width) # gray border width (px) widget_box.set_margin_right(border_width) widget_box.set_margin_top(border_width) widget_box.set_margin_bottom(border_width) self.add(widget_box) # putting the TextView into a ScrolledWindow so it doesn't resize # horiz & vert scrolled_window = ScrolledWindow() scrolled_window.set_vexpand(True) scrolled_window.set_hexpand(True) scrolled_window.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC ) scrolled_window.apply_styling_to_widget() widget_box.add(scrolled_window) # creating the actual TextView self.text_view = Gtk.TextView() # break on words, then chars self.text_view.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) # the white border inside the thin gray border self.text_view.set_margin_left(10) self.text_view.set_margin_right(10) self.text_view.set_margin_top(10) self.text_view.set_margin_bottom(10) scrolled_window.add(self.text_view) # placeholder text logic self.placeholder_text = None self.placeholder_text_set = False self.restore_buffer_handler_id = None self.clear_buffer_handler_id = None self.text_view.set_buffer(KanoTextBuffer()) text_buffer = self.text_view.get_buffer() text_buffer.connect('changed', self._on_changed)
def __init__(self, border_width=2): Gtk.EventBox.__init__(self) # Very hacky way to get a border (gg GTK): create a grey event box # which is a little bigger than the white event box containing the # widget apply_styling_to_screen( os.path.join(common_css_dir, 'multiline_entry.css') ) self.get_style_context().add_class('gray-box') widget_box = Gtk.EventBox() widget_box.get_style_context().add_class('white-box') widget_box.set_margin_left(border_width) # gray border width (px) widget_box.set_margin_right(border_width) widget_box.set_margin_top(border_width) widget_box.set_margin_bottom(border_width) self.add(widget_box) # putting the TextView into a ScrolledWindow so it doesn't resize # horiz & vert scrolled_window = ScrolledWindow() scrolled_window.set_vexpand(True) scrolled_window.set_hexpand(True) scrolled_window.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC ) scrolled_window.apply_styling_to_widget() widget_box.add(scrolled_window) # creating the actual TextView self.text_view = Gtk.TextView() # break on words, then chars self.text_view.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) # the white border inside the thin gray border self.text_view.set_margin_left(10) self.text_view.set_margin_right(10) self.text_view.set_margin_top(10) self.text_view.set_margin_bottom(10) scrolled_window.add(self.text_view) # placeholder text logic self.placeholder_text = None self.placeholder_text_set = False self.restore_buffer_handler_id = None self.clear_buffer_handler_id = None self.text_view.set_buffer(KanoTextBuffer()) text_buffer = self.text_view.get_buffer() text_buffer.connect('changed', self._on_changed)
def __init__(self, category, avatar_parser): logger.debug( "Initialising pop up menu with category {}".format(category)) self.top_bar_height = 50 # Size of the selected icon self.button_width = 42 self.button_height = 42 self._category = category self._parser = avatar_parser if self._category == self._parser.char_label: self._signal_name = 'character_selected' else: self._signal_name = 'pop_up_item_selected' self._border_path = self._parser.get_selected_border(self._category) self._hover_path = self._parser.get_hover_border(self._category) obj_names = self._parser.list_avail_objs(self._category) SelectMenu.__init__(self, obj_names, self._signal_name) vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.add(vbox) # Grid which the buttons are packed into self._grid = Gtk.Grid() # pack the grid into a sw of a specified height sw = ScrolledWindow() sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) sw.apply_styling_to_widget() sw.add(self._grid) sw.set_size_request(152, 294) # Labels the category top_bar = self._create_top_bar() vbox.pack_start(top_bar, False, False, 0) vbox.pack_start(sw, False, False, 10) self._pack_items() self.show_all()
def __init__(self, category, avatar_parser): logger.debug( "Initialising pop up menu with category {}".format(category)) self.top_bar_height = 50 # Size of the selected icon self.button_width = 42 self.button_height = 42 self._category = category self._parser = avatar_parser if self._category == self._parser.char_label: self._signal_name = 'character_selected' else: self._signal_name = 'pop_up_item_selected' self._border_path = self._parser.get_selected_border(self._category) self._hover_path = self._parser.get_hover_border(self._category) obj_names = self._parser.list_avail_objs(self._category) SelectMenu.__init__(self, obj_names, self._signal_name) vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.add(vbox) # Grid which the buttons are packed into self._grid = Gtk.Grid() # pack the grid into a sw of a specified height sw = ScrolledWindow() sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) sw.apply_styling_to_widget() sw.add(self._grid) sw.set_size_request(152, 294) # Labels the category top_bar = self._create_top_bar() vbox.pack_start(top_bar, False, False, 0) vbox.pack_start(sw, False, False, 10) self._pack_items() self.show_all()
def _create_main_box(self, network_list): '''Show the screen with the different WiFi networks ''' heading = Heading( _("Connect to WiFi"), _("Choose a network"), self._win.is_plug(), back_btn=False ) # This box is to pack everything in the window vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) # For now, pack the network into a scrolled window sw = ScrolledWindow() sw.apply_styling_to_widget() sw.set_size_request(-1, 215) sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) self._network_box = self._create_network_box(network_list) sw.add(self._network_box) # Pack the scrolled window into an event box to give the illusion of a # border sw_border = self._add_border_to_widget(sw) sw_border.set_margin_right(30) sw_border.set_margin_left(30) sw_border.set_margin_bottom(20) sw_border.set_margin_top(10) # Then pack all the elements into the vbox vbox.pack_start(heading.container, False, False, 0) vbox.pack_start(sw_border, False, False, 0) # Pack in the refresh connect buttons button_box = self._create_refresh_connect_buttons() vbox.pack_end(button_box, False, False, 30) return vbox
def __setup_application_widgets(self): screen = Gdk.Screen.get_default() self.__spellbook = Spellbook(is_caps_lock_on=self.__is_caps_lock_on) width = screen.get_width() height = screen.get_height() terminal_width, terminal_height = width / 2 - 20, height - self.__spellbook.HEIGHT - 2 * 44 - 20 story_width, story_height = width / 2 - 20, height - self.__spellbook.HEIGHT - 2 * 44 - 10 self.__terminal = TerminalUi(terminal_width, terminal_height) self.__story = Storybook(story_width, story_height) self.hbox = Gtk.Box() story_sw = ScrolledWindow() story_sw.apply_styling_to_screen() story_sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) story_sw.add(self.__story) story_sw.set_size_request(story_width, story_height) left_background = Gtk.EventBox() left_background.get_style_context().add_class("story_background") left_background.add(story_sw) right_background = Gtk.EventBox() right_background.get_style_context().add_class("terminal_background") vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.add(vbox) vbox.pack_start(self.hbox, False, False, 0) vbox.pack_start(self.__spellbook, False, False, 0) self.hbox.pack_start(left_background, False, False, 0) self.hbox.pack_start(right_background, False, False, 0) right_background.add(self.__terminal)
def __setup_application_widgets(self): screen = Gdk.Screen.get_default() self.__spellbook = Spellbook(is_caps_lock_on=self.__is_caps_lock_on) width = screen.get_width() height = screen.get_height() terminal_width, terminal_height = width / 2 - 20, height - self.__spellbook.HEIGHT - 2 * 44 - 20 story_width, story_height = width / 2 - 20, height - self.__spellbook.HEIGHT - 2 * 44 - 10 self.__terminal = TerminalUi(terminal_width, terminal_height) self.__story = Storybook(story_width, story_height) self.hbox = Gtk.Box() story_sw = ScrolledWindow() story_sw.apply_styling_to_screen() story_sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) story_sw.add(self.__story) story_sw.set_size_request(story_width, story_height) left_background = Gtk.EventBox() left_background.get_style_context().add_class("story_background") left_background.add(story_sw) right_background = Gtk.EventBox() right_background.get_style_context().add_class("terminal_background") vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.add(vbox) vbox.pack_start(self.hbox, False, False, 0) vbox.pack_start(self.__spellbook, False, False, 0) self.hbox.pack_start(left_background, False, False, 0) self.hbox.pack_start(right_background, False, False, 0) right_background.add(self.__terminal)
class UserListView(Gtk.Grid): HEIGHT = 250 WIDTH = 1 # not important def __init__(self): Gtk.Grid.__init__(self) self.get_style_context().add_class('password') self.set_row_spacing(10) title = Heading(_('Select Account'), _('Log in to which account?')) self.attach(title.container, 0, 0, 2, 1) self.scrolled_window = ScrolledWindow() self.scrolled_window.set_size_request(self.WIDTH, self.HEIGHT) self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.box.set_spacing(10) self.box.set_margin_left(10) self.box.set_margin_right(10) self.scrolled_window.add(self.box) self.attach(self.scrolled_window, 0, 1, 2, 1) self.last_username = get_last_user() self._populate() self.add_account_btn = OrangeButton(_('Add Account')) self.add_account_btn.connect('clicked', self._btn_add_account_pressed) self.attach(self.add_account_btn, 0, 2, 1, 1) self.shutdown_btn = OrangeButton(_('Shutdown')) self.shutdown_btn.connect('clicked', self._btn_shutdown_pressed) self.attach(self.shutdown_btn, 1, 2, 1, 1) def _populate(self): # Populate list user_list = KanoUserList() for user_name in user_list.get_users(): logger.debug('adding user {}'.format(user_name)) self.add_item(user_name) def add_item(self, username): user = User(username) self.box.pack_start(user, False, False, 0) if username == self.last_username: user.grab_focus() def _btn_add_account_pressed(self, event=None, button=None): logger.debug('opening new user dialog') win = self.get_toplevel() win.go_to_newuser() def _btn_shutdown_pressed(self, event=None, button=None): shutdown_dialog = KanoDialog( title_text=_('Shutting down..'), description_text=_( 'Are you sure you want to shutdown your Kano now?'), button_dict=[{ 'label': _('Cancel').upper(), 'color': 'green', 'return_value': False }, { 'label': _('SHUTDOWN').upper(), 'color': 'orange', 'return_value': True }]) shutdown_dialog.dialog.set_position(Gtk.WindowPosition.CENTER_ALWAYS) poweroff = shutdown_dialog.run() if poweroff: LightDM.shutdown()
def report_window(self): ''' Report window Contains 2 text views and Take Screenshot, Add Image and Send buttons ''' ApplicationWindow.__init__( self, _('Report a Problem'), # noqa: F821 self.WIDTH, 0.35 ) screen = Gdk.Screen.get_default() specific_provider = Gtk.CssProvider() specific_provider.load_from_path(Media.media_dir() + 'css/style.css') style_context = Gtk.StyleContext() style_context.add_provider_for_screen(screen, specific_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) self.set_icon_name("feedback") self._grid = Gtk.Grid() # Create top bar self._top_bar = TopBar( title=_("Report a Problem"), # noqa: F821 window_width=self.WIDTH, has_buttons=False ) self._top_bar.set_close_callback(Gtk.main_quit) self.set_decorated(True) self.set_titlebar(self._top_bar) self.entry = Gtk.Entry() self.entry.props.placeholder_text = \ _("Add subject (optional)") # noqa: F821 self.entry.set_margin_left(20) self.entry.set_margin_right(20) self.entry.set_margin_top(20) self.entry.set_margin_bottom(10) self._grid.attach(self.entry, 0, 0, 1, 1) # Create Text view self._text = Gtk.TextView() self._text.set_editable(True) self._text.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) self._text.set_size_request(self.WIDTH, -1) self._textbuffer = self._text.get_buffer() self._textbuffer.set_text( _("Type your problem here!") # noqa: F821 ) self._clear_buffer_handler_id = self._textbuffer.connect( "insert-text", self.clear_buffer ) scrolledwindow = ScrolledWindow() scrolledwindow.set_vexpand(True) scrolledwindow.set_policy( Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC ) scrolledwindow.apply_styling_to_widget() scrolledwindow.add(self._text) scrolledwindow.set_margin_left(2) scrolledwindow.set_margin_right(2) scrolledwindow.set_margin_top(2) scrolledwindow.set_margin_bottom(2) # Very hacky way to get a border: create a grey event box # which is a little bigger than the widget below border = Gtk.EventBox() border.get_style_context().add_class("grey") border.add(scrolledwindow) self._grid.attach(border, 0, 1, 1, 1) border.set_margin_left(20) border.set_margin_right(20) border.set_margin_top(10) border.set_margin_bottom(20) # Create take screenshot button self._screenshot_button = KanoButton( _("TAKE SCREENSHOT"), # noqa: F821 "blue" ) self._screenshot_button.set_sensitive(True) self._screenshot_button.connect("button_press_event", self.screenshot_clicked) # Create attach screenshot button self._attach_button = KanoButton( _("ADD IMAGE"), # noqa: F821 "blue" ) self._attach_button.set_sensitive(True) self._attach_button.connect("button_press_event", self.attach_clicked) # Create send button self._send_button = KanoButton( _("SEND") # noqa: F821 ) self._send_button.set_sensitive(False) self._send_button.connect("button_press_event", self.send_feedback) self._send_button.pack_and_align() self._send_button.set_margin(10, 0, 10, 0) self.screenshot_box = Gtk.ButtonBox() self.screenshot_box.set_layout(Gtk.ButtonBoxStyle.CENTER) self.screenshot_box.set_spacing(20) self.pack_screenshot_buttons() self.screenshot_box.set_margin_bottom(20) self._grid.attach(self.screenshot_box, 0, 2, 1, 1) # Create grey box to put the button in self.bottom_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.bottom_box.pack_start(self._send_button.align, False, False, 0) bottom_background = Gtk.EventBox() bottom_background.get_style_context().add_class("grey") bottom_background.add(self.bottom_box) self._grid.attach(bottom_background, 0, 3, 1, 1) self._grid.set_row_spacing(0) self.set_main_widget(self._grid) # kano-profile stat collection try: from kano_profile.badges import increment_app_state_variable_with_dialog increment_app_state_variable_with_dialog( 'kano-feedback', 'starts', 1 ) except Exception: pass
class UserListView(Gtk.Grid): HEIGHT = 250 WIDTH = 1 # not important def __init__(self): Gtk.Grid.__init__(self) self.get_style_context().add_class('password') self.set_row_spacing(10) title = Heading(_('Select Account'), _('Log in to which account?')) self.attach(title.container, 0, 0, 2, 1) self.scrolled_window = ScrolledWindow() self.scrolled_window.set_size_request(self.WIDTH, self.HEIGHT) self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.box.set_spacing(10) self.box.set_margin_left(10) self.box.set_margin_right(10) self.scrolled_window.add(self.box) self.attach(self.scrolled_window, 0, 1, 2, 1) self.last_username = get_last_user() self._populate() self.add_account_btn = OrangeButton(_('Add Account')) self.add_account_btn.connect('clicked', self._btn_add_account_pressed) self.attach(self.add_account_btn, 0, 2, 1, 1) self.shutdown_btn = OrangeButton(_('Shutdown')) self.shutdown_btn.connect('clicked', self._btn_shutdown_pressed) self.attach(self.shutdown_btn, 1, 2, 1, 1) def _populate(self): # Populate list user_list = KanoUserList() for user_name in user_list.get_users(): logger.debug('adding user {}'.format(user_name)) self.add_item(user_name) def add_item(self, username): user = User(username) self.box.pack_start(user, False, False, 0) if username == self.last_username: user.grab_focus() def _btn_add_account_pressed(self, event=None, button=None): logger.debug('opening new user dialog') win = self.get_toplevel() win.go_to_newuser() def _btn_shutdown_pressed(self, event=None, button=None): shutdown_dialog = KanoDialog(title_text='Shutting down..', description_text='Are you sure you want to shutdown your Kano now?', button_dict=[ { 'label': _('Cancel').upper(), 'color': 'green', 'return_value': False }, { 'label': _('SHUTDOWN').upper(), 'color': 'orange', 'return_value': True } ]) shutdown_dialog.dialog.set_position(Gtk.WindowPosition.CENTER_ALWAYS) poweroff = shutdown_dialog.run() if poweroff: LightDM.shutdown()
def contact_window(self): ''' Contact Us window Contains text view and a Send button ''' # delete the directory containing all the info we'll send, and recreate delete_tmp_dir() create_tmp_dir() ApplicationWindow.__init__( self, _('Contact Us'), # noqa: F821 self.WIDTH, 0.35 ) screen = Gdk.Screen.get_default() specific_provider = Gtk.CssProvider() specific_provider.load_from_path(Media.media_dir() + 'css/style.css') style_context = Gtk.StyleContext() style_context.add_provider_for_screen(screen, specific_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) # Make sure this window has no icon in the task bar # so it plays nice with kdesk-blur self.set_property('skip-taskbar-hint', True) self._grid = Gtk.Grid() # Create top bar self._top_bar = TopBar( title=_("Contact Us"), # noqa: F821 window_width=self.WIDTH, has_buttons=False ) self._top_bar.set_close_callback(Gtk.main_quit) self.set_decorated(True) self.set_titlebar(self._top_bar) # Create Text view self._text = Gtk.TextView() self._text.set_editable(True) self._text.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) self._text.set_size_request(self.WIDTH, -1) self._textbuffer = self._text.get_buffer() self._textbuffer.set_text( _("Type your feedback here!") # noqa: F821 ) self._clear_buffer_handler_id = self._textbuffer.connect( "insert-text", self.clear_buffer ) scrolledwindow = ScrolledWindow() scrolledwindow.set_vexpand(True) scrolledwindow.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) scrolledwindow.apply_styling_to_widget() scrolledwindow.add(self._text) scrolledwindow.set_margin_left(2) scrolledwindow.set_margin_right(2) scrolledwindow.set_margin_top(2) scrolledwindow.set_margin_bottom(2) # Very hacky way to get a border: create a grey event box # which is a little bigger than the widget below border = Gtk.EventBox() border.get_style_context().add_class("grey") border.add(scrolledwindow) self._grid.attach(border, 0, 0, 1, 1) border.set_margin_left(20) border.set_margin_right(20) border.set_margin_top(10) border.set_margin_bottom(20) # Create send button self._send_button = KanoButton( _("SEND") # noqa: F821 ) self._send_button.set_sensitive(False) self._send_button.connect("button_press_event", self.send_feedback) self._send_button.pack_and_align() self._send_button.align.set_padding(10, 10, 0, 0) bottom_background = Gtk.EventBox() bottom_background.get_style_context().add_class("grey") bottom_background.add(self._send_button.align) self._grid.attach(bottom_background, 0, 1, 1, 1) self._grid.set_row_spacing(0) self.set_main_widget(self._grid) # kano-profile stat collection try: from kano_profile.badges import \ increment_app_state_variable_with_dialog increment_app_state_variable_with_dialog( 'kano-feedback', 'starts', 1 ) except Exception: pass
def setup_application_widgets(self): screen = Gdk.Screen.get_default() width = screen.get_width() height = screen.get_height() self.terminal = TerminalUi() fg_color = Gdk.Color.parse("#ffffff")[1] bg_color = Gdk.Color.parse("#262626")[1] self.terminal.set_colors(fg_color, bg_color, []) self.terminal.set_margin_top(10) self.terminal.set_margin_left(10) self.terminal.set_margin_right(10) # Set the terminal font size. There is # probably a way of doing this with css to avoid hard coding # But I have not found it yet. font_desc = Pango.FontDescription() font_desc.set_family("monospace") font_desc.set_size(13*Pango.SCALE) self.terminal.set_font(font_desc) self.spellbook = Spellbook(is_caps_lock_on=self.is_caps_lock_on) self.story = Storybook( width / 2 - 40, height - self.spellbook.HEIGHT - 2 * 44 - 10 ) self.story.set_margin_top(10) self.story.set_margin_left(10) self.story.set_margin_right(10) story_sw = ScrolledWindow() story_sw.apply_styling_to_screen() story_sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) story_sw.add(self.story) left_background = Gtk.EventBox() left_background.get_style_context().add_class("story_background") right_background = Gtk.EventBox() right_background.get_style_context().add_class("terminal_background") vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.add(vbox) self.hbox = Gtk.Box() vbox.pack_start(self.hbox, False, False, 0) vbox.pack_start(self.spellbook, False, False, 0) self.hbox.pack_start(left_background, False, False, 0) self.hbox.pack_start(right_background, False, False, 0) left_background.add(story_sw) right_background.add(self.terminal) # Allow for margin on bottom and top bar. self.terminal.set_size_request( width / 2 - 20, height - self.spellbook.HEIGHT - 2 * 44 - 20 ) story_sw.set_size_request( width / 2 - 20, height - self.spellbook.HEIGHT - 2 * 44 - 10 ) self.run_server()
def report_window(self): ''' Report window Contains 2 text views and Take Screenshot, Add Image and Send buttons ''' ApplicationWindow.__init__( self, _('Report a Problem'), # noqa: F821 self.WIDTH, 0.35) screen = Gdk.Screen.get_default() specific_provider = Gtk.CssProvider() specific_provider.load_from_path(Media.media_dir() + 'css/style.css') style_context = Gtk.StyleContext() style_context.add_provider_for_screen(screen, specific_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) self.set_icon_name("feedback") self._grid = Gtk.Grid() # Create top bar self._top_bar = TopBar( title=_("Report a Problem"), # noqa: F821 window_width=self.WIDTH, has_buttons=False) self._top_bar.set_close_callback(Gtk.main_quit) self.set_decorated(True) self.set_titlebar(self._top_bar) self.entry = Gtk.Entry() if self._pii_allowed(): self.entry.props.placeholder_text = _( "Add subject (optional)") # noqa: F821 else: self.entry.props.placeholder_text = _( "Want to send us more information?") # noqa: F821 self.entry.set_margin_left(20) self.entry.set_margin_right(20) self.entry.set_margin_top(20) self.entry.set_margin_bottom(10) self.entry.set_sensitive(self._pii_allowed()) self._grid.attach(self.entry, 0, 0, 1, 1) # Create Text view self._text = Gtk.TextView() self._text.set_editable(True) self._text.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) self._text.set_size_request(self.WIDTH, -1) self._text.set_sensitive(self._pii_allowed()) self._textbuffer = self._text.get_buffer() if self._pii_allowed(): self._textbuffer.set_text( _("Type your problem here!")) # noqa: F821 else: self._textbuffer.set_text( _("Ask your parent to check their email.")) # noqa: F821 self._clear_buffer_handler_id = self._textbuffer.connect( "insert-text", self.clear_buffer) scrolledwindow = ScrolledWindow() scrolledwindow.set_vexpand(True) scrolledwindow.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) scrolledwindow.apply_styling_to_widget() scrolledwindow.add(self._text) scrolledwindow.set_margin_left(2) scrolledwindow.set_margin_right(2) scrolledwindow.set_margin_top(2) scrolledwindow.set_margin_bottom(2) # Very hacky way to get a border: create a grey event box # which is a little bigger than the widget below border = Gtk.EventBox() border.get_style_context().add_class("grey") border.add(scrolledwindow) self._grid.attach(border, 0, 1, 1, 1) border.set_margin_left(20) border.set_margin_right(20) border.set_margin_top(10) border.set_margin_bottom(20) # Create take screenshot button self._screenshot_button = KanoButton( _("TAKE SCREENSHOT"), # noqa: F821 "blue") self._screenshot_button.set_sensitive(self._pii_allowed()) self._screenshot_button.connect("button_press_event", self.screenshot_clicked) # Create attach screenshot button self._attach_button = KanoButton( _("ADD IMAGE"), # noqa: F821 "blue") self._attach_button.set_sensitive(self._pii_allowed()) self._attach_button.connect("button_press_event", self.attach_clicked) # Create send button self._send_button = KanoButton(_("SEND") # noqa: F821 ) self._send_button.set_sensitive(not self._pii_allowed()) self._send_button.connect("button_press_event", self.send_feedback) self._send_button.pack_and_align() self._send_button.set_margin(10, 0, 10, 0) self.screenshot_box = Gtk.ButtonBox() self.screenshot_box.set_layout(Gtk.ButtonBoxStyle.CENTER) self.screenshot_box.set_spacing(20) self.pack_screenshot_buttons() self.screenshot_box.set_margin_bottom(20) self._grid.attach(self.screenshot_box, 0, 2, 1, 1) # Create grey box to put the button in self.bottom_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.bottom_box.pack_start(self._send_button.align, False, False, 0) bottom_background = Gtk.EventBox() bottom_background.get_style_context().add_class("grey") bottom_background.add(self.bottom_box) self._grid.attach(bottom_background, 0, 3, 1, 1) self._grid.set_row_spacing(0) self.set_main_widget(self._grid) # kano-profile stat collection try: from kano_profile.badges import increment_app_state_variable_with_dialog increment_app_state_variable_with_dialog('kano-feedback', 'starts', 1) except Exception: pass
def contact_window(self): ''' Contact Us window Contains text view and a Send button ''' # delete the directory containing all the info we'll send, and recreate delete_tmp_dir() create_tmp_dir() ApplicationWindow.__init__( self, _('Contact Us'), # noqa: F821 self.WIDTH, 0.35) screen = Gdk.Screen.get_default() specific_provider = Gtk.CssProvider() specific_provider.load_from_path(Media.media_dir() + 'css/style.css') style_context = Gtk.StyleContext() style_context.add_provider_for_screen(screen, specific_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) # Make sure this window has no icon in the task bar # so it plays nice with kdesk-blur self.set_property('skip-taskbar-hint', True) self._grid = Gtk.Grid() # Create top bar self._top_bar = TopBar( title=_("Contact Us"), # noqa: F821 window_width=self.WIDTH, has_buttons=False) self._top_bar.set_close_callback(Gtk.main_quit) self.set_decorated(True) self.set_titlebar(self._top_bar) # Create Text view self._text = Gtk.TextView() self._text.set_editable(True) self._text.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) self._text.set_size_request(self.WIDTH, -1) self._text.set_sensitive(self._pii_allowed()) self._textbuffer = self._text.get_buffer() if self._pii_allowed(): self._textbuffer.set_text( _("Type your feedback here!")) # noqa: F821 else: self._textbuffer.set_text( _("Want to send us more information? Ask your parent to check their email." )) # noqa: F821 self._clear_buffer_handler_id = self._textbuffer.connect( "insert-text", self.clear_buffer) scrolledwindow = ScrolledWindow() scrolledwindow.set_vexpand(True) scrolledwindow.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) scrolledwindow.apply_styling_to_widget() scrolledwindow.add(self._text) scrolledwindow.set_margin_left(2) scrolledwindow.set_margin_right(2) scrolledwindow.set_margin_top(2) scrolledwindow.set_margin_bottom(2) # Very hacky way to get a border: create a grey event box # which is a little bigger than the widget below border = Gtk.EventBox() border.get_style_context().add_class("grey") border.add(scrolledwindow) self._grid.attach(border, 0, 0, 1, 1) border.set_margin_left(20) border.set_margin_right(20) border.set_margin_top(10) border.set_margin_bottom(20) # Create send button self._send_button = KanoButton(_("SEND") # noqa: F821 ) self._send_button.set_sensitive(not self._pii_allowed()) self._send_button.connect("button_press_event", self.send_feedback) self._send_button.pack_and_align() self._send_button.align.set_padding(10, 10, 0, 0) bottom_background = Gtk.EventBox() bottom_background.get_style_context().add_class("grey") bottom_background.add(self._send_button.align) self._grid.attach(bottom_background, 0, 1, 1, 1) self._grid.set_row_spacing(0) self.set_main_widget(self._grid) # kano-profile stat collection try: from kano_profile.badges import \ increment_app_state_variable_with_dialog increment_app_state_variable_with_dialog('kano-feedback', 'starts', 1) except Exception: pass