示例#1
0
class PageControl(Gtk.Alignment):

    __gsignals__ = {
        'back-button-clicked': (GObject.SIGNAL_RUN_FIRST, None, ()),
        'next-button-clicked': (GObject.SIGNAL_RUN_FIRST, None, ())
    }

    def __init__(self,
                 num_of_pages=3,
                 selected_page=1,
                 back_text=_("BACK"),
                 next_text=_("NEXT")):

        Gtk.Alignment.__init__(self, xalign=0.5, xscale=0)
        self.num_of_pages = num_of_pages
        self.selected = selected_page

        self._box = Gtk.Box()
        self.add(self._box)

        # The back button has subtly different styling to the next button
        # When the back button is disabled, it goes invisible, while
        # the NEXT button goes grey.
        self._back_button = OrangeButton(back_text)
        self._back_button.connect('clicked', self.back_button_clicked)
        attach_cursor_events(self._back_button)

        self._next_button = OrangeButton(next_text)
        self._next_button.connect('clicked', self.next_button_clicked)
        attach_cursor_events(self._next_button)

        self.dot_box = Gtk.Box()
        self._create_progress_dots(self.selected)
        self._box.pack_start(self._back_button, False, False, 40)
        self._box.pack_start(self.dot_box, False, False, 0)
        self._box.pack_start(self._next_button, False, False, 40)

        if self.selected == 1:
            self._back_button.set_sensitive(False)
        if self.selected == self.num_of_pages:
            self._next_button.set_sensitive(False)

        # self.connect('next-button-clicked', self.select_dot)
        # self.connect('back-button-clicked', self.select_dot)

    @property
    def back_button(self):
        return self._back_button

    @property
    def next_button(self):
        return self._next_button

    def disable_buttons(self):
        self._next_button.set_sensitive(False)
        self._back_button.set_sensitive(False)

    def enable_buttons(self):
        self._next_button.set_sensitive(True)
        self._back_button.set_sensitive(True)

    def enable_next(self):
        self._next_button.set_sensitive(True)

    def enable_back(self):
        self._back_button.set_sensitive(True)

    def disable_next(self):
        self._next_button.set_sensitive(False)

    def disable_back(self):
        self._back_button.set_sensitive(False)

    def set_back_button_text(self, text):
        self._back_button.set_label(text)

    def set_next_button_text(self, text):
        self._next_button.set_label(text)

    def get_back_button(self):
        return self._back_button

    def get_next_button(self):
        return self._next_button

    # TODO: these are expanding to fill the parent container.
    def _create_progress_dots(self, index):
        '''Index is a number from1 to 3, and represents which is
        the selected dot (i.e selected page number)
        '''

        logger.debug("Creating dots")

        for child in self.dot_box.get_children():
            self.dot_box.remove(child)

        for i in range(self.num_of_pages):
            if i + 1 == index:
                dot = self.selected_dot()
                dot.set_margin_left(3)
                dot.set_margin_right(3)
                dot.set_margin_top(9)
                dot.set_margin_bottom(9)
            else:
                dot = self.unselected_dot()
                dot.set_margin_left(5)
                dot.set_margin_right(5)
                dot.set_margin_top(11)
                dot.set_margin_bottom(11)

            self.dot_box.pack_start(dot, False, False, 0)

        self.dot_box.show_all()

    def unselected_dot(self):
        '''Produce an unselected grey spot
        '''

        grey_dot = Gtk.EventBox()
        grey_dot.get_style_context().add_class('grey_dot')
        grey_dot.set_size_request(6, 6)
        return grey_dot

    def selected_dot(self):
        '''Produce a selected orange dot
        '''

        orange_dot = Gtk.EventBox()
        orange_dot.get_style_context().add_class('orange_dot')
        orange_dot.set_size_request(10, 10)
        return orange_dot

    # these functions may not be needed
    def select_dot(self, widget, index):
        '''index is the integers 1 - 3, to represent the page numbers
        '''

        if index not in range(self.num_of_pages):
            return

        self._create_progress_dots(index)

        if index == 1:
            self._back_button.set_sensitive(False)
            self._next_button.set_sensitive(True)
        elif index == self.num_of_pages:
            self._next_button.set_sensitive(False)
            self._back_button.set_sensitive(True)
        else:
            self._next_button.set_sensitive(True)
            self._back_button.set_sensitive(True)

        self.show_all()

    # These give external windows a way of knowing when these buttons have been
    # clicked, without mixing up the classes
    def back_button_clicked(self, widget):
        # Are these needed?
        # self.selected -= 1
        self.emit('back-button-clicked')  # , self.selected)

    def next_button_clicked(self, widget):
        # self.selected += 1
        self.emit('next-button-clicked')  # , self.selected)
示例#2
0
class SetSimpleOverscan(OverscanTemplate):
    def __init__(self, win, original_overscan=None):
        OverscanTemplate.__init__(
            self,
            win,
            _("Overscan"),
            _("This setting lets you adjust your screen's size."),
            original_overscan
        )

        self.win.change_prev_callback(self.go_to_display)

        # Listen for key events
        self.key_press_handler = self.win.connect('key-press-event', self.on_key_press)

        # slider
        self.t_value = Gtk.Label()
        self.t_value.get_style_context().add_class('slider_label')
        self.t_scale = Gtk.HScale.new_with_range(0, get_overscan_limit(), 1)
        self.t_scale.set_value(self.overscan_values['top'])
        self.t_scale.set_size_request(400, 30)
        self.t_scale.connect('value_changed', self.adjust_all)
        self.t_scale.connect('value_changed', self.update_all_values)
        self.t_scale.set_draw_value(False)
        self.update_all_values(self.t_scale)

        box = Gtk.Box()
        box.pack_start(self.t_scale, False, False, 5)
        box.pack_start(self.t_value, False, False, 5)
        box.pack_start(self.reset_button, False, False, 25)

        align = Gtk.Alignment(xalign=0.6, xscale=0, yscale=0, yalign=0.5)
        align.add(box)

        # Advance button
        self.advanced_button = OrangeButton()
        self.advanced_button.connect('button_press_event', self.go_to_advanced)
        self.advanced_button.set_label(_("Advanced"))

        button_box = Gtk.ButtonBox()
        button_box.set_layout(Gtk.ButtonBoxStyle.SPREAD)
        button_box.pack_start(self.advanced_button, False, False, 15)
        button_box.pack_start(self.kano_button.align, False, False, 15)
        empty_label = Gtk.Label(" ")
        button_box.pack_start(empty_label, False, False, 0)

        self.pack_start(align, True, True, 0)
        self.pack_end(button_box, False, False, 30)

        self.win.show_all()

    def reset(self, widget=None, event=None):
        # Restore overscan if any
        if self.original_overscan != self.overscan_values:
            set_overscan_status(self.original_overscan)
            self.t_scale.set_value(self.original_overscan['top'])

    def go_to_advanced(self, event=None, arg=None):

        # Remove key press handler from screen
        self.win.disconnect(self.key_press_handler)
        self.win.clear_win()
        SetAdvancedOverscan(self.win, self.original_overscan)

    def on_key_press(self, widget, event):
        # Right arrow (65363)
        if not hasattr(event, 'keyval') or event.keyval == Gdk.KEY_Right:
            self.overscan_values['top'] += 1
            self.overscan_values['bottom'] += 1
            self.overscan_values['left'] += 1
            self.overscan_values['right'] += 1
            set_overscan_status(self.overscan_values)
            self.t_scale.set_value(self.overscan_values['top'])
            return
        # Left arrow (65361)
        if not hasattr(event, 'keyval') or event.keyval == Gdk.KEY_Left:
            self.overscan_values['top'] -= 1
            self.overscan_values['bottom'] -= 1
            self.overscan_values['left'] -= 1
            self.overscan_values['right'] -= 1
            set_overscan_status(self.overscan_values)
            self.t_scale.set_value(self.overscan_values['top'])
            return

    def update_all_values(self, widget):
        new_value = str(int(widget.get_value()))
        self.t_value.set_text(new_value)
class SetSimpleOverscan(OverscanTemplate):
    def __init__(self, win, original_overscan=None):
        OverscanTemplate.__init__(
            self,
            win,
            "Overscan",
            "This setting lets you adjust your screen's size.",
            original_overscan
        )

        self.win.change_prev_callback(self.go_to_display)

        # Listen for key events
        self.key_press_handler = self.win.connect("key-press-event", self.on_key_press)

        ## slider
        self.t_value = Gtk.Label()
        self.t_value.get_style_context().add_class("slider_label")
        self.t_scale = Gtk.HScale.new_with_range(0, 100, 1)
        self.t_scale.set_value(self.overscan_values['top'])
        self.t_scale.set_size_request(400, 30)
        self.t_scale.connect('value_changed', self.adjust_all)
        self.t_scale.connect('value_changed', self.update_all_values)
        self.t_scale.set_draw_value(False)
        self.update_all_values(self.t_scale)

        box = Gtk.Box()
        box.pack_start(self.t_scale, False, False, 5)
        box.pack_start(self.t_value, False, False, 5)
        box.pack_start(self.reset_button, False, False, 25)

        align = Gtk.Alignment(xalign=0.6, xscale=0, yscale=0, yalign=0.5)
        align.add(box)

        # Advance button
        self.advanced_button = OrangeButton()
        self.advanced_button.connect("button_press_event", self.go_to_advanced)
        self.advanced_button.set_label("Advanced")

        button_box = Gtk.ButtonBox()
        button_box.set_layout(Gtk.ButtonBoxStyle.SPREAD)
        button_box.pack_start(self.advanced_button, False, False, 15)
        button_box.pack_start(self.kano_button.align, False, False, 15)
        empty_label = Gtk.Label(" ")
        button_box.pack_start(empty_label, False, False, 0)

        self.pack_start(align, True, True, 0)
        self.pack_end(button_box, False, False, 30)

        self.win.show_all()

    def reset(self, widget=None, event=None):
        # Restore overscan if any
        if self.original_overscan != self.overscan_values:
            set_overscan_status(self.original_overscan)
            self.t_scale.set_value(self.original_overscan['top'])

    def go_to_advanced(self, event=None, arg=None):

        # Remove key press handler from screen
        self.win.disconnect(self.key_press_handler)
        self.win.clear_win()
        SetAdvancedOverscan(self.win, self.original_overscan)

    def on_key_press(self, widget, event):
        # Right arrow (65363)
        if not hasattr(event, 'keyval') or event.keyval == Gdk.KEY_Right:
            self.overscan_values['top'] += 1
            self.overscan_values['bottom'] += 1
            self.overscan_values['left'] += 1
            self.overscan_values['right'] += 1
            set_overscan_status(self.overscan_values)
            self.t_scale.set_value(self.overscan_values['top'])
            return
         # Left arrow (65361)
        if not hasattr(event, 'keyval') or event.keyval == Gdk.KEY_Left:
            self.overscan_values['top'] -= 1
            self.overscan_values['bottom'] -= 1
            self.overscan_values['left'] -= 1
            self.overscan_values['right'] -= 1
            set_overscan_status(self.overscan_values)
            self.t_scale.set_value(self.overscan_values['top'])
            return

    def update_all_values(self, widget):
        new_value = str(int(widget.get_value()))
        self.t_value.set_text(new_value)