def __init__(self, *args, new=False, **kwargs): Box.__init__(self, *args, **kwargs) if new: #self.new_ref.set_visible(True) self.grid.set_visible(False) self.props.margin_top = 0 self.props.margin_bottom = 0
def on_button_toggled(self: Gtk.CheckButton, configname: str, tlpconfigbox: Gtk.Box): tlpobject = settings.tlpconfig[configname] if self.get_active(): tlpobject.set_enabled(True) tlpconfigbox.set_opacity(1) else: tlpobject.set_enabled(False) tlpconfigbox.set_opacity(opacitylevel)
def box_add( box: Gtk.Box, widget: Gtk.Widget, expand: bool = True, fill: bool = True, padding: int = 0, ): box.pack_start(widget, expand, fill, padding) box.show_all()
def create_toggle_button(configname:str, tlpconfigbox: Gtk.Box) -> Gtk.CheckButton: togglebutton = Gtk.CheckButton() if settings.tlpconfig[configname].is_enabled(): togglebutton.set_active(True) else: tlpconfigbox.set_opacity(opacitylevel) togglebutton.connect('toggled', on_button_toggled, configname, tlpconfigbox) return togglebutton
def on_button_toggled(self: Gtk.CheckButton, configname: str, tlpconfigbox: Gtk.Box): tlpobject = settings.tlpconfig[configname] if self.get_active(): tlpobject.set_enabled(True) tlpconfigbox.set_opacity(1) else: tlpobject.set_enabled(False) tlpconfigbox.set_opacity(opacitylevel)
def on_button_toggled(self: Gtk.CheckButton, configname: str, tlpconfigbox: Gtk.Box): """Process and store config state.""" tlpobject = settings.tlpconfig[configname] if self.get_active(): tlpobject.set_enabled(True) tlpconfigbox.set_opacity(1) else: tlpobject.set_enabled(False) tlpconfigbox.set_opacity(OPACITY_LEVEL)
def create_toggle_button(configname: str, tlpconfigbox: Gtk.Box) -> Gtk.CheckButton: """Create state toggle.""" togglebutton = Gtk.CheckButton() if settings.tlpconfig[configname].is_enabled(): togglebutton.set_active(True) else: tlpconfigbox.set_opacity(OPACITY_LEVEL) togglebutton.connect('toggled', on_button_toggled, configname, tlpconfigbox) return togglebutton
def on_load(self, container: Gtk.Box) -> None: self._builder = Builder("services-transfer.ui") self.widget = self._builder.get_widget("transfer", Gtk.Widget) container.pack_start(self.widget, True, True, 0) a = AppletService() if "TransferService" in a.QueryPlugins(): self._setup_transfer() else: self.widget.props.sensitive = False self.widget.props.tooltip_text = _( "Applet's transfer service plugin is disabled")
def add_button_if_pos_mark(self, box: Gtk.Box, buffer: Gtk.TextBuffer): textiter = buffer.get_iter_at_offset(buffer.props.cursor_position) pos = self._get_start_pos_mark(textiter) if pos is None or pos != self._active_pos: self.reset(box) if pos is not None and pos != self._active_pos: self._active_pos = pos self._active_widget: Gtk.Button = Gtk.Button.new_with_label('Edit Position Mark') self._active_widget.connect('clicked', self.on_clicked) box.pack_start(self._active_widget, True, False, 0) return True
def on_load(self, container: Gtk.Box) -> None: self.Builder = Gtk.Builder() self.Builder.set_translation_domain("blueman") self.Builder.add_from_file(UI_PATH + "/services-transfer.ui") self.widget = self.Builder.get_object("transfer") container.pack_start(self.widget, True, True, 0) a = AppletService() if "TransferService" in a.QueryPlugins(): self._setup_transfer() else: self.widget.props.sensitive = False self.widget.props.tooltip_text = _("Applet's transfer service plugin is disabled")
def _setButtons(self) -> None: """ Sets up the cancel and generate buttons. :return: """ box: Box = Box() self._main_box.pack_end(box, False, True, 0) box.set_halign(Align.CENTER) box.set_orientation(Orientation.HORIZONTAL) setMargin(box, 5) self._cancel_btn = Button(label='Cancel') box.pack_start(self._cancel_btn, False, True, 0) setMargin(self._cancel_btn, 5, 5, 100, 5) self._cancel_btn.connect('clicked', self._onCancelBtnClicked) self._generate_btn = Button(label='Generate') box.pack_end(self._generate_btn, False, True, 0) setMargin(self._generate_btn, 100, 5, 5, 5) self._generate_btn.connect('clicked', self._onGenerateBtnClicked) timeout_add(300, self._setSensitiveGenerateBtn)
def on_load(self, container: Gtk.Box) -> None: self._builder = Builder("services-network.ui") self.widget = self._builder.get_widget("network_frame", Gtk.Widget) container.pack_start(self.widget, True, True, 0) self.interfaces: List[Tuple[str, ipaddress.IPv4Interface]] = [] netifs = get_local_interfaces() for iface in netifs: if iface != "lo" and iface != "pan1": logging.info(iface) ipiface = ipaddress.ip_interface('/'.join( cast(Tuple[str, str], netifs[iface]))) self.interfaces.append((iface, ipiface)) self.setup_network() try: self.ip_check() except (ValueError, ipaddress.AddressValueError) as e: logging.exception(e)
def __init__(self, app: Application): super().__init__(title='Asts', application=app) self._app: Application = app self.set_default_size(1000, 700) self.set_keep_above(True) self.set_resizable(False) self._box: Box = Box() self._box.set_orientation(Orientation.VERTICAL) setBgColor(widget=self, alpha=0.93) setMargin(self._box, 10) self._fst_grid: Grid = Grid() # labels self._setLabels() # file choosers button # _fc_s[0] = anki2.collection file # _fc_s[1] = video file # _fc_s[2] = subtitle file # _fc_s[3] = optional subtitle file self._fc_s: List[FileChooser] = self._setFileChoosers() # text entry self._entry: Entry self._setTextEntry() self._fillCachedFile() # filters self._setFilters() # buttons self._next_btn: Button self._setButtonsSignals() # box.pack_(child, expand, fill, padding) self._box.pack_start(self._fst_grid, False, True, 0) self.add(self._box)
def __init__(self, **kwargs): super(ReaderWindow, self).__init__( title='Eearth Reader', **kwargs ) app = self.get_application() assert isinstance(app, EarthReaderApp) self.set_wmclass('Earth Reader', 'Earth Reader') self.set_icon_list(ICON_LIST) self.box = Box(spacing=0) self.add(self.box) subscriptions = SubscriptionTreeModel(app.stage) self.subscriptions_sidebar = ScrolledWindow() self.subscription_list = TreeView(subscriptions) cell_renderer = CellRendererText() subscription_column = TreeViewColumn('Title', cell_renderer, text=0) def cell_data_func(column, renderer, model, tree_iter, *args): if isinstance(model[tree_iter], Category): renderer.set_property('cell-background', 'silver') else: renderer.set_property('cell-background', None) subscription_column.set_cell_data_func(cell_renderer, cell_data_func) self.subscription_list.append_column(subscription_column) self.subscriptions_sidebar.add(self.subscription_list) self.box.pack_start(self.subscriptions_sidebar, expand=True, fill=True, padding=0) entries_store = dummy_entries() entry_column = TreeViewColumn('Title', CellRendererText(), text=0) self.entry_list_box = ScrolledWindow() self.entry_list = TreeView(entries_store) self.entry_list.append_column(entry_column) self.entry_list_box.add(self.entry_list) self.box.pack_start(self.entry_list_box, expand=True, fill=True, padding=0) self.content_view = WebView() self.box.pack_start(self.content_view, expand=True, fill=True, padding=0)
def start_playback(wdg): # Create GStreamer instance self.gst = GStreamer() self.gst.set_playback('gapless') self.gst.player.connect('about-to-finish', self.song_nearly_ended) self.gst.stop() self.current_song = False self.current_album = False # Prepare buttons self.btn_playpause = wdg[0][7] self.btn_previous = wdg[0][5] self.btn_next = wdg[0][8] self.btn_stop = wdg[0][6] self.btn_previous.connect('clicked', self.previous_pressed) self.btn_stop.connect('clicked', self.stop_pressed) self.btn_playpause.connect('clicked', self.play_pressed) self.btn_next.connect('clicked', self.next_pressed) self.btn_player = wdg[0][9] self.headerbar = wdg[0][0] # Create the player box and popover gtkpla = join(self.functions.datadir, 'glade', 'playerbar.ui') win = gtk_builder() win.set_translation_domain('bluemindo') win.add_from_file(gtkpla) basebox = win.get_object('playerbox') wdg[0][0].add(basebox) self.player_event = win.get_object('player_event') self.player_event.set_size_request(32, 32) self.player_button_img = win.get_object('image_cover') self.player_event.connect('button-press-event', self.show_player) default = join(self.functions.datadir, 'image', 'logo_head_big.png') cover_px = Pixbuf.new_from_file_at_scale(default, 20, 20, True) self.player_button_img.set_from_pixbuf(cover_px) self.player_event.set_sensitive(False) self.player_scalab = win.get_object('label_scale') self.player_scalab.set_markup('<span size="small">00:00</span>') self.player_sca = win.get_object('scale') self.player_sca.connect('change-value', self.on_change_value) self.player_sca.set_sensitive(False) # Create the player popover gtkpla = join(self.functions.datadir, 'glade', 'playerpopover.ui') win = gtk_builder() win.add_from_file(gtkpla) hbox = win.get_object('box-player') self.player_img = win.get_object('image') self.player_pop = Popover.new(self.player_event) self.player_pop.set_size_request(200, 200) self.player_pop.add(hbox) self.lyrics_button = wdg[1].get_object('tool-lyrics') self.lyrics_pop = Popover.new(self.lyrics_button) self.lyrics_pop.set_size_request(400, 600) box = Box(1, 0) self.lyrics_swin = ScrolledWindow() lyrics_tview = TextView() lyrics_tview.set_editable(False) self.lyrics_buffer = TextBuffer() lyrics_tview.set_buffer(self.lyrics_buffer) self.lyrics_swin.add(lyrics_tview) box.add(self.lyrics_swin) self.lyrics_wait = Spinner() self.lyrics_wait.props.active = True box.add(self.lyrics_wait) self.lyrics_pop.add(box) def show_lyrics(widget): if self.current_song: title = self.current_song.title artist = self.current_song.artist album = self.current_song.album filename = self.current_song.filename sn = self.functions.get_hash(title, artist) lyrics_file = join(self.userconf.datadir, '%s.lyrics' % sn) lyrics = self.lyrics_downloader.get_lyrics(title, artist, True) self.lyrics_pop.show_all() if lyrics is not None: self.lyrics_wait.hide() self.lyrics_swin.show() self.lyrics_buffer.set_text(lyrics) else: self.lyrics_swin.hide() self.lyrics_wait.show() self.lyrics_buffer.set_text('') self.lyrics_button.connect('clicked', show_lyrics) self.lyrics_button.set_sensitive(False)
def _setButtonsSignals(self) -> None: """ Set up the buttons and their respective signals for both grids. :param win: A window. :param fst_grid: The first grid container where the buttons goes in. :param box: The box container where the first grid goes in. :param fc_s: A list with file choosers. :return: """ del_img: Optional[Pixbuf] img_path: str = path.abspath('asts/Icons/delete.png') try: del_img = Pixbuf().new_from_file_at_scale(img_path, 20, 20, False) except GLib_Error: exit(f'{img_path} file not found. Failed to create pixbuf.') icons: List[Optional[Image]] = [ Image().new_from_pixbuf(del_img) for _ in range(4) ] btns: List[Button] = [Button() for _ in range(4)] for (idx, btn) in enumerate(btns): btn.set_image(icons[idx]) setMargin(btn, 0, 5, 0, 5) btn.set_halign(Align.END) self._fst_grid.attach(btn, 2, idx, 1, 1) btns[FileType.ANKI2_COLLECTION].connect( 'clicked', lambda _: self._fc_s[FileType.ANKI2_COLLECTION].unselect_all()) btns[FileType.VIDEO].connect( 'clicked', lambda _: self._fc_s[FileType.VIDEO].unselect_all()) btns[FileType.SUBTITLE].connect( 'clicked', lambda _: self._fc_s[FileType.SUBTITLE].unselect_all()) btns[FileType.O_SUBTITLE].connect( 'clicked', lambda _: self._fc_s[FileType.O_SUBTITLE].unselect_all()) box: Box = Box() self._box.pack_end(box, False, True, 0) box.set_orientation(Orientation.HORIZONTAL) box.set_halign(Align.CENTER) cancel_btn: Button = Button(label='Cancel') box.pack_start(cancel_btn, False, True, 0) cancel_btn.set_margin_bottom(10) cancel_btn.connect('clicked', lambda _: self.close()) self._next_btn = Button(label='Next') box.pack_end(self._next_btn, False, True, 0) setMargin(self._next_btn, 200, 10, 0, 0) self._next_btn.connect('clicked', self._onNextBtnClicked) timeout_add(300, self._setSensitiveNextBtn) timeout_add(300, self._checkInvalidSelection)
def __init__(self, parent: Window, app: Application, col_filename: Filename, vid_filename: Filename, sub_filename: Filename, opt_sub_filename: OptFilename, deck_name: str): super().__init__(title='Asts - Anki Card Generator', application=app, transient_for=parent) self.set_default_size(width=1000, height=700) self.set_keep_above(True) self.set_modal(True) self.set_resizable(False) setBgColor(widget=self, alpha=0.93) self._main_box: Box = Box() self._main_box.set_orientation(Orientation.VERTICAL) setMargin(self._main_box, 10) self.add(self._main_box) self._subtitles_grid: Grid = Grid() setMargin(self._subtitles_grid, 5) # box.pack_(expand, fill, padding) self._main_box.pack_start(self._subtitles_grid, False, True, 0) self._collection_filename: Filename = col_filename self._video_filename: Filename = vid_filename self._subtitles_filename: Filename = sub_filename self._opt_subtitles_filename: OptFilename = opt_sub_filename self._deck_name: str = deck_name self._any_media_toggled: bool = False self._dict_any_media: Dict[str, bool] self._dict_any_change_front: Dict[str, bytes] self._dict_any_change_back: Dict[str, bytes] self._textview_front: TextView self._textview_back: TextView self._textbuffer_front: TextBuffer self._textbuffer_back: TextBuffer self._subtitles_liststore: ListStore self._subtitles_liststore_back: ListStore self._subtitles_treeview: TreeView self._selected_row: TreeSelection self._progress_bar: ProgressBar self._cancel_btn: Button self._generate_btn: Button self._cur_progress: int self._max_tasks: int self._cancel_task: bool self._list_of_sentences: ListSentences self._list_info_medias: List[List[Info]] self._color_tag_names: List[str] # TheadingHandler will utilize these # updating the status for each task tasks # also the sensitive and progress of the progress bar # depends on these. self._futures_list: List[Future]
def _setSentenceRelated(self) -> None: """ Sets up the sentence editing widgets related. Also initialize both text buffers. :return: """ box: Box = Box() self._main_box.pack_start(box, False, True, 0) box.set_orientation(Orientation.VERTICAL) setMargin(box, 5) toolbar: Toolbar = Toolbar() box.pack_start(toolbar, False, True, 0) toolbar.set_halign(Align.END) setMargin(toolbar, 5) lbl: Label = Label() lbl.set_markup('<i><b>Front</b></i>') box.pack_start(lbl, False, True, 0) lbl.set_halign(Align.START) setMargin(lbl, 5) scrl_wnd: ScrolledWindow = ScrolledWindow() scrl_wnd.set_hexpand(True) scrl_wnd.set_vexpand(True) textview: TextView = TextView() scrl_wnd.add(textview) box.pack_start(scrl_wnd, False, True, 0) self._textbuffer_front = textview.get_buffer() lbl2: Label = Label() lbl2.set_halign(Align.START) lbl2.set_markup('<i><b>Back</b></i>') box.pack_start(lbl2, False, True, 0) setMargin(lbl2, 5) scrl_wnd2: ScrolledWindow = ScrolledWindow() scrl_wnd2.set_hexpand(True) scrl_wnd2.set_vexpand(True) textview2: TextView = TextView() scrl_wnd2.add(textview2) box.pack_end(scrl_wnd2, False, True, 0) self._textbuffer_back = textview2.get_buffer() # this depends on the text buffer to be initialized self._setToolbarColorButton(toolbar) toolbar.insert(SeparatorToolItem(), 3) self._setToolbarUnderlineButton(toolbar) self._setToolbarBoldButton(toolbar) self._setToolbarItalicButton(toolbar) toolbar.insert(SeparatorToolItem(), 7) self._setToolbarTagRemoverButton(toolbar)
def __new__(cls,*args,**kwargs): print ("NEW") result = Box.__new__(cls,*args,**kwargs) return result
def _init_tab(self, notebook_page: Gtk.Box): assert self.builder layers_box = self.builder.get_object('bg_layers') toolbox_box = self.builder.get_object('bg_layers_toolbox') toolbox_box_child_layers = self.builder.get_object( 'bg_layers_toolbox_layers') toolbox_box_child_collision = self.builder.get_object( 'bg_layers_toolbox_collision') toolbox_box_child_data = self.builder.get_object( 'bg_layers_toolbox_data') if Gtk.Buildable.get_name(notebook_page) != 'metadata': for child in notebook_page.get_children(): notebook_page.remove(child) for child in toolbox_box.get_children(): toolbox_box.remove(child) page_name = Gtk.Buildable.get_name(notebook_page) if page_name == 'bg_layer2' and self.bma.number_of_layers < 2: # Layer 2: Does not exist label: Gtk.Label = Gtk.Label.new( _('This map only has one layer.\n' 'You can add a second layer at Map > Settings.')) label.set_vexpand(True) label.show() notebook_page.add(label) elif page_name in ['bg_layer1', 'bg_layer2']: # Layer 1 / 2 if layers_box.get_parent(): layers_box.get_parent().remove(layers_box) notebook_page.pack_start(layers_box, True, True, 0) if toolbox_box_child_layers.get_parent(): toolbox_box_child_layers.get_parent().remove( toolbox_box_child_layers) toolbox_box.pack_start(toolbox_box_child_layers, True, True, 0) self._init_chunks_icon_view(0 if page_name == 'bg_layer1' else 1) self._init_drawer_layer_selected() elif page_name == 'bg_col1' and self.bma.number_of_collision_layers < 1: # Collision 1: Does not exist label = Gtk.Label.new( _('This map has no collision.\n' 'You can add collision at Map > Settings.')) label.set_vexpand(True) label.show() notebook_page.add(label) elif page_name == 'bg_col2' and self.bma.number_of_collision_layers < 2: # Collision 2: Does not exist label = Gtk.Label.new( _('This map has no second collision layer.\n' 'You can add a second collision layer at Map > Settings.')) label.set_vexpand(True) label.show() notebook_page.add(label) elif page_name in ['bg_col1', 'bg_col2']: # Collision 1 / 2 if layers_box.get_parent(): layers_box.get_parent().remove(layers_box) notebook_page.pack_start(layers_box, True, True, 0) if toolbox_box_child_collision.get_parent(): toolbox_box_child_collision.get_parent().remove( toolbox_box_child_collision) toolbox_box.pack_start(toolbox_box_child_collision, True, True, 0) self._init_drawer_collision_selected(0 if page_name == 'bg_col1' else 1) elif page_name == 'bg_data' and self.bma.unk6 < 1: # Data Layer: Does not exist label = Gtk.Label.new( _('This map has no data layer.\n' 'You can add a data layer at Map > Settings.')) label.set_vexpand(True) label.show() notebook_page.add(label) elif page_name == 'bg_data': # Data Layer if layers_box.get_parent(): layers_box.get_parent().remove(layers_box) notebook_page.pack_start(layers_box, True, True, 0) if toolbox_box_child_data.get_parent(): toolbox_box_child_data.get_parent().remove( toolbox_box_child_data) toolbox_box.pack_start(toolbox_box_child_data, True, True, 0) self._init_data_layer_combobox() self._init_drawer_data_layer_selected() else: # Metadata # Nothing to do, tab is already finished. pass self._update_scales()
def on_selection_changed(self, icon_view, album=None): popup = Popover.new(self.albumview) popup.set_size_request(810, 240) if album is None: selection = icon_view.get_selected_items() if len(selection) != 1: return path = selection[0] treeiter = self.albumfilter.get_iter(path) isset, path, cell = icon_view.get_cursor() isset, rect = icon_view.get_cell_rect(path, cell) popup.set_pointing_to(rect) album_id = self.albumfilter.get_value(treeiter, 4) album_obj = self.albums[album_id] else: album_obj = album popup.set_relative_to(self.search_entry) # Handle double clicks def empty_dblclick(): self.dblclick = None if self.dblclick is None: self.dblclick = album_obj timeout_add(1000, empty_dblclick) elif self.dblclick == album_obj: self.play(album_obj) return album = album_obj.name artist = album_obj.artist glade_album = join(self.functions.datadir, 'glade', 'albumview.ui') box = gtk_builder() box.set_translation_domain('bluemindo') box.add_from_file(glade_album) popup.add(box.get_object('box1')) box.get_object('label_album').set_text(album) box.get_object('label_artist').set_text(artist) bdir = join(self.userconf.datadir, 'modules', 'player', 'covers') cover = join(bdir, self.functions.get_hash(album, artist)) if isfile(cover): cover_px = Pixbuf.new_from_file_at_scale(cover, 180, 180, True) else: cover_px = Pixbuf.new_from_file(join(self.functions.datadir, 'image', 'logo_head_big.png')) box.get_object('album_cover').set_from_pixbuf(cover_px) def play_album(wdg, album): self.play(album) def queue_album(wdg, album): self.queue(album) def change_cover(wdg, ka, album): artist_name = album.artist album_name = album.name fcdialog = FileChooserDialog( title=_('Change the cover picture for this album'), buttons=(_('Select'), ResponseType.OK)) fcdialog.set_transient_for(self.widgets[0][11]) response = fcdialog.run() if response == ResponseType.OK: filename = fcdialog.get_filename() datadir = self.userconf.datadir hash_a = self.functions.get_hash(album_name, artist_name) pictures_dir = join(datadir, 'modules', 'player', 'covers') album_file = join(pictures_dir, hash_a) copyfile(filename, album_file) new = Pixbuf.new_from_file_at_scale(album_file, 180, 180, True) box.get_object('album_cover').set_from_pixbuf(new) fcdialog.destroy() box.get_object('button_play').connect('clicked', play_album, album_obj) box.get_object('button_add').connect('clicked', queue_album, album_obj) box.get_object('coverevent').connect('button-press-event', change_cover, album_obj) i = 0 a = -1 previous_column = 0 grid_songs = box.get_object('grid_songs') grid_songs.set_size_request(-1, 200) grid_songs.set_column_spacing(5) try: kids = grid_songs.get_children() for kid in kids: grid_songs.remove(kid) except IndexError: pass for song in album_obj.tracks: i += 1 a += 1 def queue(wdg, song): self.queue(song) def play(wdg, song): self.play(song) song_wdg = Box(spacing=0) song_btr = Button() song_btr.connect('clicked', play, song) song_btr.set_relief(ReliefStyle.NONE) song_btr_content = Box(spacing=0) song_btr.add(song_btr_content) song_tr = Label() song_tr.set_markup('<span foreground="grey">' + str(song.track) + '</span>') song_tr.set_width_chars(3) song_btr_content.pack_start(song_tr, False, True, 0) song_ti = Label() song_ti.set_markup('<b>' + self.functions.view_encode(song.title, 22) + '</b>') song_ti.set_alignment(0.0, 0.5) song_ti.set_size_request(190, -1) song_btr_content.pack_start(song_ti, False, False, 0) length = self.functions.human_length(song.length) song_le = Label() song_le.set_markup('<span foreground="grey">' + length + '</span>') song_le.set_width_chars(5) song_btr_content.pack_start(song_le, False, True, 0) song_wdg.pack_start(song_btr, False, False, 0) song_add = Button.new_from_icon_name('list-add-symbolic', 0) song_add.set_property('relief', 2) song_add.set_size_request(14, 14) song_add.connect('clicked', queue, song) song_wdg.pack_start(song_add, False, False, 0) if i <= len(album_obj.tracks)/2: column = 0 previous_column = 0 row = a else: if previous_column == 0: a = 0 column = 1 previous_column = 1 row = a grid_songs.attach(song_wdg, column, row, 1, 1) popup.show_all()
def __init__(self, extensions): # Start threads threads_init() self.extensions = extensions # Create the main Bluemindo window self.main_window = Window() functions.open_bluemindo(self.main_window) # Handling close button def close_window(wdg, ka): functions.close_bluemindo(self.main_window, True) self.main_window.connect('delete_event', close_window) # Create the whole Header Bar box = HeaderBar() box.set_show_close_button(True) box.props.title = 'Bluemindo' self.main_window.set_titlebar(box) # Add an icon to the window icon_file = join(functions.datadir, 'image', 'logo_head_small.png') pixbuf = Pixbuf.new_from_file(icon_file) self.main_window.set_icon(pixbuf) # Add the about button about_button = Button(relief=2) about_button.add( Image.new_from_gicon(ThemedIcon(name='help-about-symbolic'), IconSize.BUTTON)) box.pack_end(about_button) # Add the reload button refresh_button = Button(relief=2) refresh_button.add( Image.new_from_gicon(ThemedIcon(name='view-refresh-symbolic'), IconSize.BUTTON)) box.pack_end(refresh_button) # Add PREVIOUS/STOP/PLAYPAUSE/NEXT buttons player_box = Box(orientation=Orientation.HORIZONTAL) StyleContext.add_class(player_box.get_style_context(), 'linked') previous_b = Button() previous_b.set_size_request(42, -1) previous_b.add( Image.new_from_gicon( ThemedIcon(name='media-skip-backward-symbolic'), IconSize.BUTTON)) player_box.add(previous_b) stop_b = Button() stop_b.set_size_request(42, -1) stop_b.add( Image.new_from_gicon( ThemedIcon(name='media-playback-stop-symbolic'), IconSize.BUTTON)) player_box.add(stop_b) playpause_b = Button() playpause_b.set_size_request(55, -1) playpause_b.add( Image.new_from_gicon( ThemedIcon(name='media-playback-start-symbolic'), IconSize.BUTTON)) player_box.add(playpause_b) next_b = Button() next_b.set_size_request(42, -1) next_b.add( Image.new_from_gicon( ThemedIcon(name='media-skip-forward-symbolic'), IconSize.BUTTON)) player_box.add(next_b) box.pack_start(player_box) # Create the main window glade_main = join(functions.datadir, 'glade', 'mainwindow.ui') win = gtk_builder() win.set_translation_domain('bluemindo') win.add_from_file(glade_main) self.main_window.add(win.get_object('box1')) # Connect to the about button def show_dialog(wdg): dialog = AboutDialog() dialog.set_transient_for(self.main_window) dialog.set_artists(['Thomas Julien <*****@*****.**>']) dialog.set_authors([ 'Erwan Briand <*****@*****.**>', 'Vincent Berset <*****@*****.**>', 'Thibaut Girka <*****@*****.**>', 'Ľubomír Remák <*****@*****.**>', 'Anaël Verrier <*****@*****.**>' ]) dialog.set_translator_credits( 'Bruno Conde <*****@*****.**>\n' + 'Niklas Grahn <*****@*****.**>\n' + 'Ľubomír Remák <*****@*****.**>\n' + 'Salvatore Tomarchio <*****@*****.**>\n' + 'Shang Yuanchun <*****@*****.**>') dialog.set_copyright('Copyright © 2007-2016 Erwan Briand ' + '<*****@*****.**>') dialog.set_comments( _('Ergonomic and modern music player ' + 'designed for audiophiles.')) dialog.set_license('GNU General Public License (v3)') dialog.set_license_type(10) dialog.set_program_name('Bluemindo') dialog.set_version('1.0RC1') dialog.set_website('http://bluemindo.codingteam.net') pxbf = Pixbuf.new_from_file_at_scale( join(functions.datadir, 'image', 'logo_head_big.png'), 60, 60, True) dialog.set_logo(pxbf) dialog.show_all() about_button.connect('clicked', show_dialog) # Start main handler headerbar_wdg = [ box, None, about_button, refresh_button, player_box, previous_b, stop_b, playpause_b, next_b, None, win.get_object('box1'), self.main_window ] self.wdg = [headerbar_wdg, win]