def __make_playback_box(self, stream, index):
     process_id = int(stream['proplist']['application.process.id'])
     # if it has show mpris, then don't show sink_input
     if process_id in self.mpris_list:
         self.mpris_stream[process_id] = index
         self.stream_mpris[index] = process_id
         return
     self.stream_list[index] = {}
     volume_max_percent = pypulse.MAX_VOLUME_VALUE * 100 / pypulse.NORMAL_VOLUME_VALUE
     icon_name = self.__white_list_check(stream)
     if icon_name:
         if icon_name[0] == '/' and os.path.exists(icon_name):
             try:
                 img = gtk.image_new_from_pixbuf(gtk.gdk.pixbuf_new_from_file(
                     icon_name).scale_simple(16, 16, gtk.gdk.INTERP_TILES))
             except:
                 img = gtk.image_new_from_pixbuf(self.stream_icon)
         else:
             img = gtk.image_new_from_icon_name(icon_name, gtk.ICON_SIZE_MENU)
     else:
         img = gtk.image_new_from_pixbuf(self.stream_icon)
     scale = HScalebar(show_value=False, format_value="%", value_min=0, value_max=volume_max_percent)
     scale.set_magnetic_values([(0, 5), (100, 5), (volume_max_percent, 5)])
     scale.set_size_request(90, 10)
     mute_button = SwitchButton(
         inactive_disable_dpixbuf=app_theme.get_pixbuf("toggle_button/inactive_normal.png"), 
         active_disable_dpixbuf=app_theme.get_pixbuf("toggle_button/inactive_normal.png"))
     hbox = gtk.HBox()
     hbox.pack_start(self.__make_align(img), False, False)
     hbox.pack_start(self.__make_align(scale, yalign=0.0, yscale=1.0, padding_left=5, padding_right=5, height=25), False, False)
     hbox.pack_start(self.__make_align(mute_button), False, False)
     self.stream_list[index]['scale'] = scale
     self.stream_list[index]['button'] = mute_button
     self.stream_list[index]['container'] = hbox
     self.stream_list[index]['process_id'] = process_id
     self.stream_list[index]['stream_id'] = index
     self.stream_process[process_id] = self.stream_list[index]
     self.__set_playback_status(stream, scale, mute_button)
     if stream['volume_writable']:
         scale.connect("value-changed", self.playback_stream_scale_changed_cb, index, mute_button)
         mute_button.connect("toggled", self.playback_stream_toggled_cb, index, scale)
     hbox.show_all()
     self.__app_vbox.pack_start(hbox, False, False)
    def __create_widget(self):
        '''create gtk widget'''
        title_item_font_size = TITLE_FONT_SIZE
        option_item_font_szie = CONTENT_FONT_SIZE

        self.label_widgets["speaker"] = Label(_("Speaker"), app_theme.get_color("globalTitleForeground"), text_size=title_item_font_size, enable_select=False, enable_double_click=False)
        self.label_widgets["microphone"] = Label(_("Microphone"), app_theme.get_color("globalTitleForeground"), text_size=title_item_font_size, enable_select=False, enable_double_click=False)
        self.label_widgets["left"] = Label(_("Left"), enable_select=False, enable_double_click=False)
        self.label_widgets["right"] = Label(_("Right"), enable_select=False, enable_double_click=False)
        self.label_widgets["speaker_port"] = Label(_("Output Port"), text_size=option_item_font_szie,
                                                   text_x_align=ALIGN_END, enable_select=False,
                                                   enable_double_click=False, fixed_width=STANDARD_LINE)
        self.label_widgets["speaker_volume"] = Label(_("Output Volume"), text_size=option_item_font_szie,
                                                     text_x_align=ALIGN_END, enable_select=False,
                                                     enable_double_click=False, fixed_width=STANDARD_LINE)
        self.label_widgets["speaker_mute"] = Label(_("Sound Enabled"), text_size=option_item_font_szie,
                                                   text_x_align=ALIGN_END, enable_select=False,
                                                   enable_double_click=False, fixed_width=STANDARD_LINE)
        self.label_widgets["speaker_balance"] = Label(_("Balance"), text_size=option_item_font_szie,
                                                      text_x_align=ALIGN_END, enable_select=False,
                                                      enable_double_click=False, fixed_width=STANDARD_LINE)
        self.label_widgets["microphone_port"] = Label(_("Input Port"), text_size=option_item_font_szie,
                                                      text_x_align=ALIGN_END, enable_select=False,
                                                      enable_double_click=False, fixed_width=STANDARD_LINE)
        self.label_widgets["microphone_volume"] = Label(_("Input Volume"), text_size=option_item_font_szie,
                                                        text_x_align=ALIGN_END, enable_select=False,
                                                        enable_double_click=False, fixed_width=STANDARD_LINE)
        self.label_widgets["microphone_mute"] = Label(_("Sound Enabled"), text_size=option_item_font_szie,
                                                      text_x_align=ALIGN_END, enable_select=False,
                                                      enable_double_click=False, fixed_width=STANDARD_LINE)
        #####################################
        # image init
        self.image_widgets["balance"] = ImageBox(app_theme.get_pixbuf("%s/balance.png" % MODULE_NAME))
        self.image_widgets["speaker"] = ImageBox(app_theme.get_pixbuf("%s/speaker-3.png" % MODULE_NAME))
        self.image_widgets["microphone"] = ImageBox(app_theme.get_pixbuf("%s/microphone.png" % MODULE_NAME))
        self.image_widgets["device"] = app_theme.get_pixbuf("%s/device.png" % MODULE_NAME)
        # button init
        self.button_widgets["balance"] = SwitchButton(
            inactive_disable_dpixbuf=app_theme.get_pixbuf("toggle_button/inactive_normal.png"), 
            active_disable_dpixbuf=app_theme.get_pixbuf("toggle_button/inactive_normal.png"))
        self.button_widgets["speaker"] = SwitchButton(
            inactive_disable_dpixbuf=app_theme.get_pixbuf("toggle_button/inactive_normal.png"), 
            active_disable_dpixbuf=app_theme.get_pixbuf("toggle_button/inactive_normal.png"))
        self.button_widgets["microphone"] = SwitchButton(
            inactive_disable_dpixbuf=app_theme.get_pixbuf("toggle_button/inactive_normal.png"), 
            active_disable_dpixbuf=app_theme.get_pixbuf("toggle_button/inactive_normal.png"))
        self.button_widgets["advanced"] = Button(_("Advanced"))
        self.button_widgets["speaker_combo"] = ComboBox(fixed_width=HSCALEBAR_WIDTH)
        self.button_widgets["microphone_combo"] = ComboBox(fixed_width=HSCALEBAR_WIDTH)
        # container init
        self.container_widgets["main_vbox"] = gtk.VBox(False)
        self.container_widgets["statusbar"] = StatusBar()
        self.container_widgets["slider"] = HSlider()
        self.container_widgets["swin"] = ScrolledWindow()
        self.container_widgets["advance_set_tab_box"] = TabBox()
        self.container_widgets["advance_set_tab_box"].draw_title_background = self.draw_tab_title_background
        self.container_widgets["main_hbox"] = gtk.HBox(False)
        self.container_widgets["left_vbox"] = gtk.VBox(False)
        self.container_widgets["right_vbox"] = gtk.VBox(False)
        self.container_widgets["balance_hbox"] = gtk.HBox(False)
        self.container_widgets["speaker_main_vbox"] = gtk.VBox(False)     # speaker
        self.container_widgets["speaker_label_hbox"] = gtk.HBox(False)
        self.container_widgets["speaker_table"] = gtk.Table(4, 2)
        self.container_widgets["microphone_main_vbox"] = gtk.VBox(False)     # microphone
        self.container_widgets["microphone_label_hbox"] = gtk.HBox(False)
        self.container_widgets["microphone_table"] = gtk.Table(4, 2)
        # alignment init
        self.alignment_widgets["slider"] = gtk.Alignment()
        self.alignment_widgets["main_hbox"] = gtk.Alignment()
        self.alignment_widgets["advance_set_tab_box"] = gtk.Alignment()
        self.alignment_widgets["left"] = gtk.Alignment()
        self.alignment_widgets["right"] = gtk.Alignment()
        self.alignment_widgets["speaker_label"] = gtk.Alignment()      # speaker
        self.alignment_widgets["speaker_set"] = gtk.Alignment()
        self.alignment_widgets["microphone_label"] = gtk.Alignment()      # microphone
        self.alignment_widgets["microphone_set"] = gtk.Alignment()
        # adjust init
        volume_max_percent = pypulse.MAX_VOLUME_VALUE * 100 / pypulse.NORMAL_VOLUME_VALUE
        self.adjust_widgets["balance"] = gtk.Adjustment(0, -1.0, 1.0, 0.1, 0.2)
        self.adjust_widgets["speaker"] = gtk.Adjustment(0, 0, volume_max_percent, 1, 5)
        self.adjust_widgets["microphone"] = gtk.Adjustment(0, 0, volume_max_percent, 1, 5)
        # scale init
        self.scale_widgets["balance"] = HScalebar(value_min=-1, value_max=1, gray_progress=True)
        self.scale_widgets["balance"].set_magnetic_values([(0, 0.1), (1, 0.1), (2, 0.1)])
        self.scale_widgets["speaker"] = HScalebar(show_value=True, format_value="%", value_min=0, value_max=volume_max_percent)
        self.scale_widgets["speaker"].set_magnetic_values([(0, 5), (100, 5), (volume_max_percent, 5)])
        self.scale_widgets["microphone"] = HScalebar(show_value=True, format_value="%", value_min=0, value_max=volume_max_percent)
        self.scale_widgets["microphone"].set_magnetic_values([(0, 5), (100, 5), (volume_max_percent, 5)])
        ###################################
        # advance set
        self.container_widgets["advance_input_box"] = gtk.VBox(False)
        self.container_widgets["advance_output_box"] = gtk.VBox(False)
        self.container_widgets["advance_hardware_box"] = gtk.VBox(False)
        self.alignment_widgets["advance_input_box"] = gtk.Alignment()
        self.alignment_widgets["advance_output_box"] = gtk.Alignment()
        self.alignment_widgets["advance_hardware_box"] = gtk.Alignment()
        #
        self.label_widgets["ad_output"] = Label(_("Choose a device for sound output:"), enable_select=False, enable_double_click=False)
        self.label_widgets["ad_input"] = Label(_("Choose a device for sound input:"), enable_select=False, enable_double_click=False)
        self.label_widgets["ad_hardware"] = Label(_("Choose a device to configure:"), enable_select=False, enable_double_click=False)
        #
        self.container_widgets["ad_output"] = gtk.VBox(False)
        self.container_widgets["ad_input"] = gtk.VBox(False)
        self.container_widgets["ad_hardware"] = gtk.VBox(False)
        #
        self.view_widgets["ad_output"] = TreeView()
        self.view_widgets["ad_input"] = TreeView()
        self.view_widgets["ad_hardware"] = TreeView()
예제 #3
0
 # Set application icon.
 #application.set_icon(os.path.join(get_current_dir(__file__), "icon.ico"))
 
 # Set application preview pixbuf.
 #application.set_skin_preview(os.path.join(get_current_dir(__file__), "frame.png"))
 
 # Add titlebar.
 #application.add_titlebar(
     #["theme", "max", "min", "close"], 
     #os.path.join(get_current_dir(__file__), "logo.png"), 
     #"Scalebar demo",
     #"Scalebar demo",
     #)
 
 # Add Scalebar.
 hscale1 = HScalebar(show_value = True, gray_progress=True)
 hscale1.add_mark(50, gtk.POS_BOTTOM, "TOP")
 hscale1.add_mark(0, gtk.POS_BOTTOM, "LEFT")
 hscale1.add_mark(100, gtk.POS_BOTTOM, "RIGHT")
 hscale1_align = gtk.Alignment()
 hscale1_align.set(0.5, 0.5, 1, 1)
 hscale1_align.set_padding(0, 0, 0, 0)
 hscale1_align.add(hscale1)
 
 win = gtk.Window()
 win.set_size_request(300, -1)
 win.add(hscale1_align)
 win.connect("destroy", gtk.main_quit)
 win.show_all()
 gtk.main()
 #application.main_box.pack_start(hscale1_align)
    def __init__(self, tray_obj=None):
        super(TrayGui, self).__init__(False)
        self.tray_obj = tray_obj

        self.stream_icon = app_theme.get_pixbuf("sound/device.png").get_pixbuf().scale_simple(16, 16, gtk.gdk.INTERP_TILES)
        self.stream_num = 0
        self.stream_list = {}    # stream widgets
        self.stream_process = {} # process id to stream widgets
        self.stream_mpris = {}   # stream id to mpris process id

        self.__mpris_total_height = 0
        self.mpris_base_height = 70
        self.mpris_list = {}     # mpris widgets
        self.mpris_stream = {}   # mpris process id to stream id
        self.mpris2 = Mpris2()
        self.mpris2.connect("new", self.mpris2_new_cb)
        self.mpris2.connect("removed", self.mpris2_removed_cb)
        self.mpris2.connect("changed", self.mpris2_changed_cb)

        hbox = gtk.HBox(False)
        hbox.set_spacing(WIDGET_SPACING)
        #separator_color = [(0, ("#000000", 0.3)), (0.5, ("#000000", 0.2)), (1, ("#777777", 0.0))]
        #hseparator = HSeparator(app_theme.get_shadow_color("hSeparator").get_color_info(), 0, 0)
        #hseparator.set_size_request(150, 3)
        separator_color = [(0, ("#777777", 0.0)), (0.5, ("#000000", 0.3)), (1, ("#777777", 0.0))]
        hseparator = HSeparator(separator_color, 0, 0)
        hseparator.set_size_request(140, 5)
        #hbox.pack_start(self.__make_align(Label(_("Device"), enable_select=False, enable_double_click=False)), False, False)
        #hbox.pack_start(self.__make_align(hseparator), True, True)
        self.pack_start(self.__make_align(Label(_("Device"), enable_select=False, enable_double_click=False), height=-1), False, False)
        self.pack_start(self.__make_align(hseparator, xalign=0.5, height=5), False, False)

        volume_max_percent = pypulse.MAX_VOLUME_VALUE * 100 / pypulse.NORMAL_VOLUME_VALUE

        table = gtk.Table(2, 3)
        speaker_img = ImageBox(app_theme.get_pixbuf("sound/speaker-3.png"))
        self.speaker_scale = HScalebar(show_value=False, format_value="%", value_min=0, value_max=volume_max_percent)
        self.speaker_scale.set_magnetic_values([(0, 5), (100, 5), (volume_max_percent, 5)])
        self.speaker_scale.set_size_request(90, 10)
        self.speaker_mute_button = SwitchButton(
            inactive_disable_dpixbuf=app_theme.get_pixbuf("toggle_button/inactive_normal.png"), 
            active_disable_dpixbuf=app_theme.get_pixbuf("toggle_button/inactive_normal.png"))
        table.attach(self.__make_align(speaker_img), 0, 1, 0, 1, 4)
        table.attach(self.__make_align(self.speaker_scale, yalign=0.0, yscale=1.0, padding_left=5, padding_right=5, height=25), 1, 2, 0, 1, 4)
        table.attach(self.__make_align(self.speaker_mute_button), 2, 3, 0, 1, 4)

        #microphone_img = ImageBox(app_theme.get_pixbuf("sound/microphone.png"))
        #self.microphone_scale = HScalebar(show_value=False, format_value="%", value_min=0, value_max=volume_max_percent)
        #self.microphone_scale.set_size_request(90, 10)
        #self.microphone_mute_button = SwitchButton(
            #inactive_disable_dpixbuf=app_theme.get_pixbuf("toggle_button/inactive_normal.png"), 
            #active_disable_dpixbuf=app_theme.get_pixbuf("toggle_button/inactive_normal.png"))
        #table.attach(self.__make_align(microphone_img), 0, 1, 1, 2, 4)
        #table.attach(self.__make_align(self.microphone_scale, yalign=0.0, yscale=1.0, padding_left=5, padding_right=5, height=25), 1, 2, 1, 2, 4)
        #table.attach(self.__make_align(self.microphone_mute_button), 2, 3, 1, 2, 4)

        self.pack_start(table, False, False)

        self.__app_vbox = gtk.VBox(False)
        separator_color = [(0, ("#777777", 0.0)), (0.5, ("#000000", 0.3)), (1, ("#777777", 0.0))]
        hseparator = HSeparator(separator_color, 0, 0)
        hseparator.set_size_request(140, 5)
        self.__app_vbox.pack_start(self.__make_align(Label(_("Applications"), enable_select=False, enable_double_click=False)), False, False)
        self.__app_vbox.pack_start(self.__make_align(hseparator, xalign=0.5, height=5), False, False)

        self.__mpris_vbox = gtk.VBox(False)
        self.__app_vbox.pack_start(self.__mpris_vbox)
        self.pack_start(self.__app_vbox)

        hseparator = HSeparator(separator_color, 0, 0)
        hseparator.set_size_request(140, 7)
        self.pack_start(self.__make_align(hseparator, xalign=0.5, height=7), False, False)

        self.button_more = SelectButton(_("Advanced..."), font_size=10, ali_padding=5)
        self.button_more.set_size_request(-1, 25)
        self.pack_start(self.button_more, False, False)
        #self.pack_start(self.__make_align(height=10))
        ##########################################
        self.__set_output_status()
        #self.__set_input_status()

        # widget signals
        self.speaker_mute_button.connect("toggled", self.speaker_toggled)
        #self.microphone_mute_button.connect("toggled", self.microphone_toggled)
        self.speaker_scale.connect("value-changed", self.speaker_scale_value_changed)
        #self.microphone_scale.connect("value-changed", self.microphone_scale_value_changed)
        # pulseaudio signals
        pypulse.PULSE.connect("sink-changed", self.sink_changed_cb)
        #pypulse.PULSE.connect("source-changed", self.source_changed_cb)
        pypulse.PULSE.connect("server-changed", self.server_changed_cb)
        pypulse.PULSE.connect("sink-input-new", self.sink_input_new_cb)
        pypulse.PULSE.connect("sink-input-changed", self.sink_input_changed_cb)
        pypulse.PULSE.connect("sink-input-removed", self.sink_input_removed_cb)
        playback_streams = pypulse.PULSE.get_playback_streams()
        self.stream_num = len(playback_streams.keys())
        self.mpris2.get_mpris_list()
        self.mpris_num = len(self.mpris2.mpris_process.keys())
        if self.stream_num == 0 and self.mpris_num == 0:
            self.__app_vbox.set_no_show_all(True)
        for stream in playback_streams:
            self.__make_playback_box(playback_streams[stream], stream)
    def mpris2_new_cb(self, obj, pid):
        vbox = gtk.VBox()
        img = gtk.image_new_from_icon_name(obj.mpris_process[pid]['property']['DesktopEntry'], gtk.ICON_SIZE_MENU)
        # application title
        app_title = obj.mpris_process[pid]['property']['Identity']
        #if obj.mpris_process[pid]['property']['PlaybackStatus'] == 'Stopped':
            #app_title = obj.mpris_process[pid]['property']['Identity']
        #else:
            #app_title = "%s - %s" % (obj.mpris_process[pid]['property']['Identity'], _(obj.mpris_process[pid]['property']['PlaybackStatus']))
        label = Label(app_title, label_width=115)
        hbox = gtk.HBox(False, 5)
        hbox.pack_start(self.__make_align(img), False, False)
        hbox.pack_start(self.__make_align(label), False, False)
        vbox.pack_start(hbox, False, False)

        # metadata info
        meta_box = gtk.HBox(False, 10)
        xesam_vbox = gtk.VBox(False)
        #art_img = gtk.Image()
        art_img = gtk.EventBox()
        art_img.set_size_request(40, 40)
        art_img.connect("expose-event", self.__draw_mpris_art_img)

        xesam_title = Label("", label_width=75)
        xesam_artist = Label("", label_width=75)
        xesam_album = Label("", label_width=75)
        xesam_vbox.pack_start(xesam_title)
        xesam_vbox.pack_start(xesam_artist)
        #xesam_vbox.pack_start(xesam_album)
        meta_box.pack_start(self.__make_align(art_img, padding_left=21, height=40), False, False)
        meta_box.pack_start(xesam_vbox)

        self.mpris_list[pid] = {}
        # mpris control
        scale = HScalebar(app_theme.get_pixbuf("sound/point.png"), show_value=False, format_value="%", value_min=0, value_max=1, line_height=3)
        scale.set_magnetic_values([(0, 0.1), (1, 0.1)])
        scale.set_size_request(70, 10)
        prev_bt = gtk.Button()
        pause_bt = gtk.Button()
        stop_bt = gtk.Button()
        next_bt = gtk.Button()

        prev_bt.set_size_request(20, 22)
        pause_bt.set_size_request(29, 30)
        #stop_bt.set_size_request(16, 16)
        next_bt.set_size_request(20, 22)

        prev_bt.pixbuf = "previous"
        if obj.mpris_process[pid]['property']['PlaybackStatus'] == 'Playing':
            pause_bt.pixbuf = "pause"
        else:
            pause_bt.pixbuf = "play"
        #stop_bt.pixbuf = self.stop_img
        next_bt.pixbuf = "next"

        scale.set_value(obj.mpris_process[pid]['property']['Volume'])

        prev_bt.connect("clicked", self.__mpris_prev_cb, obj, pid)
        pause_bt.connect("clicked", self.__mpris_pause_cb, obj, pid)
        #stop_bt.connect("clicked", self.__mpris_stop_cb, obj, pid)
        next_bt.connect("clicked", self.__mpris_next_cb, obj, pid)
        prev_bt.connect("expose-event", self.__draw_mpris_button_cb)
        pause_bt.connect("expose-event", self.__draw_mpris_button_cb)
        stop_bt.connect("expose-event", self.__draw_mpris_button_cb)
        next_bt.connect("expose-event", self.__draw_mpris_button_cb)
        scale.connect("value-changed", self.__mpris_volume_cb, obj, pid)

        hbox = gtk.HBox()
        hbox.pack_start(self.__make_align(prev_bt, height=-1), False, False)
        hbox.pack_start(self.__make_align(pause_bt, height=-1), False, False)
        #hbox.pack_start(self.__make_align(stop_bt, height=-1), False, False)
        hbox.pack_start(self.__make_align(next_bt, height=-1), False, False)
        hbox.pack_start(self.__make_align(scale, yalign=0.0, yscale=1.0, height=-1), False, False)
        vbox.pack_start(self.__make_align(hbox, xalign=0.5, padding_top=5, padding_bottom=10, height=-1), False, False)

        self.mpris_list[pid]['app_title'] = label
        self.mpris_list[pid]['prev'] = prev_bt
        self.mpris_list[pid]['pause'] = pause_bt
        self.mpris_list[pid]['stop'] = stop_bt
        self.mpris_list[pid]['next'] = next_bt
        self.mpris_list[pid]['scale'] = scale
        self.mpris_list[pid]['meta'] = meta_box
        self.mpris_list[pid]['meta_img'] = art_img
        self.mpris_list[pid]['meta_title'] = xesam_title
        self.mpris_list[pid]['meta_artist'] = xesam_artist
        self.mpris_list[pid]['meta_album'] = xesam_album
        self.mpris_list[pid]['container'] = vbox
        if not obj.mpris_process[pid]['property']['Metadata']:
            self.mpris_list[pid]['height'] = self.mpris_base_height
        else:
            vbox.pack_start(meta_box, False, False)
            vbox.reorder_child(meta_box, 1)
            self.__set_mpris_meta_info(pid)
            self.mpris_list[pid]['height'] = self.mpris_base_height + 40
        self.__mpris_total_height += self.mpris_list[pid]['height']
        # delete playback_stream widget
        if pid in self.stream_process:
            self.stream_process[pid]['container'].destroy()
            del self.stream_list[self.stream_process[pid]['stream_id']]
            del self.stream_process[pid]
        vbox.show_all()
        self.__mpris_vbox.pack_start(vbox, False, False)

        stream_num = len(self.stream_list.keys())
        mpris_num = len(self.mpris_list.keys())
        if stream_num > 0 or mpris_num > 0:
            self.__app_vbox.set_no_show_all(False)
            self.__app_vbox.show_all()
        self.adjust_size()
        self.emit("stream-changed")
    def __init__(self):
        '''
        init docs
        '''
        gtk.VBox.__init__(self)

        self.brightness_id = None

        self.display_manager = DisplayManager()
        self.__xrandr_settings = self.display_manager.get_xrandr_settings()
        self.__xrandr_settings.connect("changed", self.__xrandr_changed)

        self.resize_width = 790
        self.resize_height = 200
        self.monitor_items = []
        self.__output_names = []
        self.__current_output_name = self.display_manager.get_primary_output_name(
        )
        self.__setup_monitor_items()
        self.sizes_items = []
        self.monitor_combo = None
        if len(self.monitor_items
               ) > 1 and self.display_manager.is_copy_monitors():
            self.__set_same_sizes()
        else:
            self.__setup_sizes_items()
        self.multi_monitors_items = [(_("Copy Display"), 1),
                                     (_("Extend Display"), 2),
                                     (_("Only shown in display 1"), 3),
                                     (_("Only shown in display 2"), 4)]
        self.rotation_items = [(_("Normal"), 1), (_("Right"), 2),
                               (_("Left"), 3), (_("Inverted"), 4)]
        self.duration_items = [("1 %s" % _("Minute"), 1),
                               ("2 %s" % _("Minutes"), 2),
                               ("3 %s" % _("Minutes"), 3),
                               ("5 %s" % _("Minutes"), 5),
                               ("10 %s" % _("Minutes"), 10),
                               ("30 %s" % _("Minutes"), 30),
                               ("1 %s" % _("Hour"), 60),
                               (_("Never"), DisplayManager.BIG_NUM / 60)]
        '''
        scrolled_window
        '''
        self.scrolled_window = ScrolledWindow()
        self.scrolled_window.set_size_request(-1, 425)
        self.scrolled_window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
        self.main_box = gtk.VBox()
        self.main_box.set_size_request(600, -1)
        self.body_box = gtk.HBox()
        '''
        left, right align
        '''
        self.left_align = self.__setup_align(
            padding_top=FRAME_TOP_PADDING,
            padding_left=TEXT_WINDOW_LEFT_PADDING)
        self.right_align = self.__setup_align(padding_top=FRAME_TOP_PADDING,
                                              padding_left=0)
        '''
        left, right box
        '''
        self.left_box = gtk.VBox(spacing=WIDGET_SPACING)
        self.right_box = gtk.VBox(spacing=WIDGET_SPACING)
        '''
        monitor operation && detect
        '''
        self.monitor_resize_align = self.__setup_align(
            padding_top=11, padding_left=int(TEXT_WINDOW_LEFT_PADDING / 2))
        self.monitor_resize_box = MonitorResizableBox(self.display_manager)
        self.monitor_resize_box.select_output(self.__current_output_name)
        self.monitor_resize_box.connect("select-output", self.__select_output)
        self.monitor_resize_box.connect("resize", self.__resize_box)
        self.monitor_resize_align.add(self.monitor_resize_box)
        '''
        monitor display
        '''
        self.monitor_display_align = self.__setup_title_align(
            app_theme.get_pixbuf("display/monitor_display.png"), _("Display"),
            0)
        '''
        monitor
        '''
        self.monitor_align = self.__setup_align()
        self.monitor_box = gtk.HBox(spacing=WIDGET_SPACING)
        self.monitor_label = self.__setup_label(_("Monitor"))
        self.monitor_combo = self.__setup_combo(self.monitor_items)
        self.monitor_combo.set_select_index(
            self.display_manager.get_primary_output_name_index(
                self.monitor_items))
        self.monitor_combo.connect("item-selected", self.__combo_item_selected,
                                   "monitor_combo")
        self.__widget_pack_start(self.monitor_box,
                                 [self.monitor_label, self.monitor_combo])
        self.monitor_align.add(self.monitor_box)
        '''
        goto individuation or power setting
        '''
        self.goto_align = self.__setup_align()
        self.goto_box = gtk.VBox(spacing=WIDGET_SPACING)
        self.goto_label = self.__setup_label(_("Relevant Settings"),
                                             text_size=TITLE_FONT_SIZE,
                                             width=None,
                                             align=ALIGN_START)
        goto_color = GOTO_FG_COLOR
        self.goto_individuation_label = self.__setup_label(text=_(
            "<span foreground=\"%s\" underline=\"single\">Personalization</span>"
        ) % goto_color,
                                                           width=None,
                                                           align=ALIGN_START)
        self.goto_individuation_label.connect("button-press-event",
                                              self.__button_press,
                                              "individuation")
        set_clickable_cursor(self.goto_individuation_label)
        self.goto_power_label = self.__setup_label(
            text=_("<span foreground=\"%s\" underline=\"single\">Power</span>")
            % goto_color,
            width=None,
            align=ALIGN_START)
        self.goto_power_label.connect("button-press-event",
                                      self.__button_press, "power")
        set_clickable_cursor(self.goto_power_label)
        self.__widget_pack_start(self.goto_box, [
            self.goto_label, self.goto_individuation_label,
            self.goto_power_label
        ])
        self.goto_align.add(self.goto_box)
        '''
        sizes
        '''
        self.sizes_align = self.__setup_align()
        self.sizes_box = gtk.HBox(spacing=WIDGET_SPACING)
        self.sizes_label = self.__setup_label(_("Resolution"))
        self.sizes_combo = self.__setup_combo(self.sizes_items)
        if self.sizes_combo:
            self.sizes_combo.set_select_index(
                self.display_manager.get_screen_size_index(
                    self.__current_output_name, self.sizes_items))
            self.sizes_combo.connect("item-selected",
                                     self.__combo_item_selected, "sizes_combo")
            self.__widget_pack_start(self.sizes_box,
                                     [self.sizes_label, self.sizes_combo])
        self.sizes_align.add(self.sizes_box)
        '''
        rotation
        '''
        self.rotation_align = self.__setup_align()
        self.rotation_box = gtk.HBox(spacing=WIDGET_SPACING)
        self.rotation_label = self.__setup_label(_("Rotation"))
        self.rotation_combo = self.__setup_combo(self.rotation_items)
        self.rotation_combo.set_select_index(
            self.display_manager.get_screen_rotation_index(
                self.__current_output_name))
        self.rotation_combo.connect("item-selected",
                                    self.__combo_item_selected,
                                    "rotation_combo")
        self.__widget_pack_start(self.rotation_box,
                                 [self.rotation_label, self.rotation_combo])
        self.rotation_align.add(self.rotation_box)
        '''
        multi-monitors
        '''
        self.multi_monitors_align = self.__setup_align()
        self.multi_monitors_box = gtk.HBox(spacing=WIDGET_SPACING)
        self.multi_monitors_label = self.__setup_label(_("Multi-Monitor"))
        self.multi_monitors_combo = self.__setup_combo(
            self.multi_monitors_items)
        self.multi_monitors_combo.set_select_index(
            self.display_manager.get_multi_monitor_index())
        self.multi_monitors_combo.connect("item-selected",
                                          self.__combo_item_selected,
                                          "multi_monitors_combo")
        self.__widget_pack_start(
            self.multi_monitors_box,
            [self.multi_monitors_label, self.multi_monitors_combo])
        self.multi_monitors_align.add(self.multi_monitors_box)
        if self.display_manager.get_output_count() < 2:
            self.multi_monitors_align.set_size_request(-1, 0)
            self.multi_monitors_align.set_child_visible(False)
        '''
        monitor brightness
        '''
        self.monitor_bright_align = self.__setup_title_align(
            app_theme.get_pixbuf("display/monitor_bright.png"),
            _("Brightness"))
        '''
        brightness
        '''
        self.brightness_align = self.__setup_align()
        self.brightness_box = gtk.HBox(spacing=2)
        self.brightness_label_align = self.__setup_align(padding_top=8,
                                                         padding_left=0,
                                                         padding_right=5)
        self.brightness_label = self.__setup_label(_("Brightness"))
        self.brightness_label_align.add(self.brightness_label)

        self.brightness_scale = HScalebar(
            point_dpixbuf=app_theme.get_pixbuf("scalebar/point.png"),
            value_min=0.1,
            value_max=1.0)
        self.brightness_scale.set_size_request(HSCALEBAR_WIDTH, 33)
        self.brightness_scale.set_value(
            self.display_manager.get_screen_brightness())
        self.brightness_scale.connect("value-changed", self.__set_brightness)
        self.__widget_pack_start(
            self.brightness_box,
            [self.brightness_label_align, self.brightness_scale])
        self.brightness_align.add(self.brightness_box)
        '''
        auto adjust monitor brightness
        '''
        self.auto_adjust_align = self.__setup_align()
        self.auto_adjust_box = gtk.HBox(spacing=WIDGET_SPACING)
        self.auto_adjust_label = self.__setup_label(_("Auto-Brightness"))
        self.auto_adjust_toggle_align = self.__setup_align(padding_top=4,
                                                           padding_left=158)
        self.auto_adjust_toggle = self.__setup_toggle()
        self.auto_adjust_toggle.set_active(
            self.display_manager.is_enable_close_monitor())
        self.auto_adjust_toggle.connect("toggled", self.__toggled,
                                        "auto_adjust_toggle")
        self.auto_adjust_toggle_align.add(self.auto_adjust_toggle)
        self.__widget_pack_start(
            self.auto_adjust_box,
            [self.auto_adjust_label, self.auto_adjust_toggle_align])
        self.auto_adjust_align.add(self.auto_adjust_box)
        '''
        close monitor
        '''
        self.close_monitor_align = self.__setup_align()
        self.close_monitor_box = gtk.HBox(spacing=WIDGET_SPACING)
        self.close_monitor_label = self.__setup_label(_("Turn off monitor"))
        self.close_monitor_combo = self.__setup_combo(self.duration_items)
        self.close_monitor_combo.set_select_index(
            self.display_manager.get_close_monitor_index(self.duration_items))
        self.close_monitor_combo.connect("item-selected",
                                         self.__combo_item_selected,
                                         "close_monitor_combo")
        self.__widget_pack_start(
            self.close_monitor_box,
            [self.close_monitor_label, self.close_monitor_combo])
        self.close_monitor_align.add(self.close_monitor_box)
        '''
        monitor lock
        '''
        self.monitor_lock_align = self.__setup_title_align(
            app_theme.get_pixbuf("lock/lock.png"), _("Lock Screen"))
        '''
        auto monitor lock
        '''
        self.auto_lock_align = self.__setup_align()
        self.auto_lock_box = gtk.HBox(spacing=WIDGET_SPACING)
        self.auto_lock_label = self.__setup_label(
            _("Lock screen automatically"))
        self.auto_lock_toggle_align = self.__setup_align(padding_top=4,
                                                         padding_left=158)
        self.auto_lock_toggle = self.__setup_toggle()
        is_enable_lock_display = self.display_manager.is_enable_lock_display()
        self.auto_lock_toggle.set_active(is_enable_lock_display)
        self.auto_lock_toggle.connect("toggled", self.__toggled,
                                      "auto_lock_toggle")
        self.auto_lock_toggle_align.add(self.auto_lock_toggle)
        self.__widget_pack_start(
            self.auto_lock_box,
            [self.auto_lock_label, self.auto_lock_toggle_align])
        self.auto_lock_align.add(self.auto_lock_box)
        '''
        lock display
        '''
        self.lock_display_align = self.__setup_align(padding_bottom=20)
        self.lock_display_box = gtk.HBox(spacing=WIDGET_SPACING)
        self.lock_display_label = self.__setup_label(_("Lock Screen"))
        self.lock_display_combo = self.__setup_combo(self.duration_items)
        self.lock_display_combo.set_select_index(
            self.display_manager.get_lock_display_index(self.duration_items))
        self.lock_display_combo.connect("item-selected",
                                        self.__combo_item_selected,
                                        "lock_display_combo")
        self.__widget_pack_start(
            self.lock_display_box,
            [self.lock_display_label, self.lock_display_combo])
        self.lock_display_align.add(self.lock_display_box)
        '''
        left_align pack_start
        '''
        self.__widget_pack_start(
            self.left_box,
            [
                self.monitor_display_align,
                self.monitor_align,
                self.sizes_align,
                self.rotation_align,
                self.multi_monitors_align,
                self.monitor_bright_align,
                self.brightness_align,
                #self.auto_adjust_align,
                #self.close_monitor_align,
                self.monitor_lock_align,
                self.auto_lock_align,
                self.lock_display_align
            ])
        self.left_align.add(self.left_box)
        '''
        right_align pack_start
        '''
        self.__widget_pack_start(self.right_box, [self.goto_align])
        self.right_box.set_size_request(280, -1)
        self.right_align.add(self.right_box)
        '''
        main && body box
        '''
        self.main_box.pack_start(self.monitor_resize_align, False, False)
        self.body_box.pack_start(self.left_align)
        self.body_box.pack_start(self.right_align, False, False)
        self.main_box.pack_start(self.body_box)
        '''
        this->HBox pack_start
        '''
        self.scrolled_window.add_child(self.main_box)
        self.pack_start(self.scrolled_window)

        self.__send_message("status", ("display", ""))
예제 #7
0
 def __create_widget(self):
     '''create gtk widget'''
     title_item_font_size = TITLE_FONT_SIZE
     option_item_font_size = CONTENT_FONT_SIZE
     # image init
     self.image_widgets["custom"] = ImageBox(
         app_theme.get_pixbuf("%s/pad_l%s.png" %
                              (MODULE_NAME, self.has_touchpad_icon)))
     self.image_widgets["speed"] = ImageBox(
         app_theme.get_pixbuf("%s/pointer%s.png" %
                              (MODULE_NAME, self.has_touchpad_icon)))
     self.image_widgets["double"] = ImageBox(
         app_theme.get_pixbuf("%s/double-click%s.png" %
                              (MODULE_NAME, self.has_touchpad_icon)))
     self.image_widgets["drag"] = ImageBox(
         app_theme.get_pixbuf("%s/drag%s.png" %
                              (MODULE_NAME, self.has_touchpad_icon)))
     self.image_widgets["double_test_1"] = app_theme.get_pixbuf(
         "%s/smiley00%s.png" % (MODULE_NAME, self.has_touchpad_icon))
     self.image_widgets["double_test_2"] = app_theme.get_pixbuf(
         "%s/smiley01.png" % (MODULE_NAME))
     # label init
     self.label_widgets["custom"] = Label(
         _("Custom"),
         app_theme.get_color("globalTitleForeground"),
         text_size=title_item_font_size,
         enable_select=False,
         enable_double_click=False)
     self.label_widgets["pointer_speed"] = Label(
         _("Pointer Speed"),
         app_theme.get_color("globalTitleForeground"),
         text_size=title_item_font_size,
         enable_select=False,
         enable_double_click=False)
     self.label_widgets["acceleration"] = Label(
         _("Acceleration"),
         text_size=option_item_font_size,
         text_x_align=ALIGN_END,
         enable_select=False,
         enable_double_click=False,
         fixed_width=STANDARD_LINE)
     self.label_widgets["sensitivity"] = Label(
         _("Sensitivity"),
         text_size=option_item_font_size,
         text_x_align=ALIGN_END,
         enable_select=False,
         enable_double_click=False,
         fixed_width=STANDARD_LINE)
     self.label_widgets["double_click"] = Label(
         _("Double-click"),
         app_theme.get_color("globalTitleForeground"),
         text_size=title_item_font_size,
         enable_select=False,
         enable_double_click=False)
     self.label_widgets["click_rate"] = Label(
         _("Frequency"),
         text_size=option_item_font_size,
         text_x_align=ALIGN_END,
         enable_select=False,
         enable_double_click=False,
         fixed_width=STANDARD_LINE)
     self.label_widgets["double_test"] = Label(
         _("Double-click on the smiley face to test your settings."),
         label_width=HSCALEBAR_WIDTH,
         wrap_width=HSCALEBAR_WIDTH,
         enable_select=False,
         enable_double_click=False)
     self.label_widgets["drag_drop"] = Label(
         _("Drag and Drop"),
         app_theme.get_color("globalTitleForeground"),
         text_size=title_item_font_size,
         enable_select=False,
         enable_double_click=False)
     self.label_widgets["drag_threshold"] = Label(
         _("Drag threshold"),
         text_size=option_item_font_size,
         text_x_align=ALIGN_END,
         enable_select=False,
         enable_double_click=False,
         fixed_width=STANDARD_LINE)
     self.label_widgets["relevant"] = Label(_("Relevant Settings"),
                                            text_size=title_item_font_size,
                                            enable_select=False,
                                            enable_double_click=False,
                                            fixed_width=180)
     # button init
     self.button_widgets["right_hand_radio"] = RadioButton(
         _("Right-handed"), padding_x=10)
     self.button_widgets["left_hand_radio"] = RadioButton(_("Left-handed"),
                                                          padding_x=10)
     self.button_widgets["double_test"] = gtk.EventBox()
     # relevant settings button
     self.button_widgets["keyboard_setting"] = Label(
         "<u>%s</u>" % _("Keyboard Settings"),
         DynamicColor(GOTO_FG_COLOR),
         text_size=option_item_font_size,
         enable_select=False,
         enable_double_click=False,
         fixed_width=180)
     self.button_widgets["mouse_setting"] = Label(
         "<u>%s</u>" % _("Mouse Settings"),
         DynamicColor(GOTO_FG_COLOR),
         text_size=option_item_font_size,
         enable_select=False,
         enable_double_click=False,
         fixed_width=180)
     self.button_widgets["set_to_default"] = Button(_("Reset"))
     # container init
     self.container_widgets["main_vbox"] = gtk.VBox(False)
     self.container_widgets["statusbar"] = StatusBar()
     self.container_widgets["main_swindow"] = ScrolledWindow()
     self.container_widgets["main_hbox"] = gtk.HBox(False)
     self.container_widgets["left_vbox"] = gtk.VBox(False)
     self.container_widgets["right_vbox"] = gtk.VBox(False)
     self.container_widgets["custom_main_vbox"] = gtk.VBox(False)  # custom
     self.container_widgets["custom_label_hbox"] = gtk.HBox(False)
     self.container_widgets["custom_button_hbox"] = gtk.HBox(False)
     self.container_widgets["pointer_speed_main_vbox"] = gtk.VBox(
         False)  # pointer speed
     self.container_widgets["pointer_speed_label_hbox"] = gtk.HBox(False)
     self.container_widgets["pointer_speed_table"] = gtk.Table(2, 4, False)
     self.container_widgets["double_click_main_vbox"] = gtk.VBox(
         False)  # double click
     self.container_widgets["double_click_label_hbox"] = gtk.HBox(False)
     self.container_widgets["double_click_table"] = gtk.Table(2, 4, False)
     self.container_widgets["drag_threshold_main_vbox"] = gtk.VBox(
         False)  # mouse wheel
     self.container_widgets["drag_threshold_label_hbox"] = gtk.HBox(False)
     self.container_widgets["drag_threshold_table"] = gtk.Table(1, 4, False)
     # alignment init
     self.alignment_widgets["left"] = gtk.Alignment()
     self.alignment_widgets["right"] = gtk.Alignment()
     self.alignment_widgets["custom_label"] = gtk.Alignment()  # custom
     self.alignment_widgets["custom_button"] = gtk.Alignment()
     self.alignment_widgets["pointer_speed_label"] = gtk.Alignment(
     )  # pointer speed
     self.alignment_widgets["pointer_speed_table"] = gtk.Alignment()
     self.alignment_widgets["double_click_label"] = gtk.Alignment(
     )  # double click
     self.alignment_widgets["double_click_table"] = gtk.Alignment()
     self.alignment_widgets["drag_threshold_label"] = gtk.Alignment(
     )  # mouse wheel
     self.alignment_widgets["drag_threshold_table"] = gtk.Alignment()
     self.alignment_widgets["keyboard_setting"] = gtk.Alignment()
     self.alignment_widgets["mouse_setting"] = gtk.Alignment()
     # adjust init
     self.adjust_widgets["pointer_speed_accel"] = gtk.Adjustment(
         1.0, 1.0, 10.0, 1, 2)
     self.adjust_widgets["pointer_speed_sensitiv"] = gtk.Adjustment(
         1, 1, 10, 1, 2)
     self.adjust_widgets["double_click_rate"] = gtk.Adjustment(
         100, 100, 1000, 100, 200)
     self.adjust_widgets["drag_threshold_time"] = gtk.Adjustment(
         1, 1, 10, 1, 2)
     # scale init
     self.scale_widgets["pointer_speed_accel"] = HScalebar(value_min=1.0,
                                                           value_max=10.0)
     self.scale_widgets["pointer_speed_sensitiv"] = HScalebar(value_min=1,
                                                              value_max=10)
     self.scale_widgets["double_click_rate"] = HScalebar(value_min=100,
                                                         value_max=1000)
     self.scale_widgets["drag_threshold_time"] = HScalebar(value_min=1,
                                                           value_max=10)