def __init__(self, tab_type, selected_tabs): Display.__init__(self) self.widget = widgetset.Scroller(False, True) alignment = widgetset.Alignment(xalign=0.5, yalign=0.0, xscale=1) alignment.add(tabcontroller.StoresTab()) self.widget.add(alignment)
def __init__(self, field, items, label): Field.__init__(self, field, items, label) self.textbox = widgetset.MultilineTextEntry() self.textbox.set_text(self.common_value or "") self.widget = widgetset.Scroller(False, True) self.widget.set_has_borders(True) self.widget.set_size_request(250, 130) self.widget.add(self.textbox)
def set_up(self): self.html_stripper = util.HTMLStripper() self.id_counter = itertools.count() self.setup_text() self.item_list = itemlist.ItemList() self.item_list.set_sort(itemlist.DateSort(True)) self.item_list.add_items(self.generate_items(self.initial_items)) self.make_item_view() scroller = widgetset.Scroller(False, True) scroller.add(self.item_view) self.vbox.pack_start(scroller, expand=True)
def build_widget(self): self.titlebar = itemlistwidgets.ConvertingTitlebar() self.widget.pack_start(self.titlebar) self.titlebar.connect('stop-all', self.on_cancel_all) self.titlebar.connect('reveal', self.on_reveal_conversions_folder) self.titlebar.connect('clear-finished', self.on_clear_finished) self.model = widgetset.TableModel('object') self.table = ConvertingTableView(self.model) self.table.connect_weak('hotspot-clicked', self.on_hotspot_clicked) scroller = widgetset.Scroller(False, True) scroller.add(self.table) self.widget.pack_start(scroller, expand=True) conversion_manager.fetch_tasks_list()
def __init__(self): self.device = None self.bulk_change = False RoundedVBox.__init__(self) self.create_signal('changed') top_vbox = widgetset.VBox() self.sync_library = widgetset.Checkbox(self.title) self.sync_library.connect('toggled', self.sync_library_toggled) top_vbox.pack_start(self.sync_library) self._pack_extra_buttons(top_vbox) self.pack_start(widgetutil.pad(top_vbox, 20, 20, 20, 20)) bottom_vbox = widgetset.VBox() self.feed_list = widgetset.VBox() self.feed_list.set_size_request(450, -1) self.info_map = {} feeds = self.get_feeds() if feeds: for info in feeds: checkbox = widgetset.Checkbox(info.name) checkbox.connect('toggled', self.feed_toggled, info) self.feed_list.pack_start(checkbox) self.info_map[self.info_key(info)] = checkbox else: self.sync_library.disable() background = widgetset.SolidBackground(self.BG_COLOR) background.add(self.feed_list) scroller = widgetset.Scroller(False, True) scroller.set_child(background) self.feed_list.disable() bottom_vbox.pack_start(scroller, expand=True) line = widgetset.HBox(spacing=5) button = widgetutil.TitlebarButton(_("Select none")) button.connect('clicked', self.select_clicked, False) line.pack_end(button) button = widgetutil.TitlebarButton(_("Select all")) button.connect('clicked', self.select_clicked, True) line.pack_end(button) bottom_vbox.pack_start(widgetutil.pad(line, top=5)) self.pack_start(widgetutil.pad(bottom_vbox, 20, 20, 20, 20), expand=True)
def __init__(self, field, items, label, readonly): Field.__init__(self, field, items, label, readonly=readonly) DialogOwnerMixin.__init__(self, self.DIALOG, self.TITLE, default=self.common_value) label = widgetset.Label(self.common_value or '') label.set_selectable(True) self.widget = widgetset.Scroller(True, False) self.widget.set_has_borders(False) self.widget.add(label) if label.get_width() > 440: height = 50 else: height = 25 # have to set height and width or gtk will make it very small self.widget.set_size_request(440, height) if not readonly: button = widgetset.Button(_("Move")) button.connect('clicked', self.show_dialog) self.extra.append(button)
def run_dialog(self, report): self.report = report try: vbox = widgetset.VBox(spacing=8) lab = widgetset.Label( _("You can help us fix this problem by submitting an " "error report.")) lab.set_wrap(True) lab.set_size_request(600, -1) vbox.pack_start(widgetutil.align_left(lab)) warning = widgetset.Label( _("Note: This error report will not be posted publicly, " "but may include uniquely identifable information " "including file names, website URLs, podcast URLs, " "and disk paths.")) warning.set_wrap(True) warning.set_size_request(600, -1) vbox.pack_start(widgetutil.align_left(warning)) self.see_crash_button = widgetset.Button(_("See crash report")) self.see_crash_button.set_size(widgetconst.SIZE_SMALL) self.see_crash_button.connect('clicked', self.on_see_crash_report) vbox.pack_start(widgetutil.align_right(self.see_crash_button)) cbx = widgetset.Checkbox( _("Include entire program database including all " "filenames, websites, and podcasts with the " "error report.")) vbox.pack_start(widgetutil.align_left(cbx)) lab2 = widgetset.Label( _("What were you doing when you got this message? " "(Helpful, but not required.)")) lab2.set_wrap(True) lab2.set_size_request(600, -1) vbox.pack_start(widgetutil.align_left(lab2)) text = widgetset.MultilineTextEntry() scroller = widgetset.Scroller(True, True) scroller.add(text) scroller.set_size_request(600, 100) vbox.pack_start(widgetutil.align_left(scroller)) hidden_vbox = widgetset.VBox(spacing=5) lab = widgetset.Label(_("Crash Report:")) hidden_vbox.pack_start(widgetutil.align_left(lab)) report_text = widgetset.MultilineTextEntry(self.report) report_text.set_editable(False) scroller = widgetset.Scroller(True, True) scroller.add(report_text) scroller.set_size_request(600, 100) hidden_vbox.pack_start(widgetutil.align_left(scroller)) self.hidden_vbox = widgetutil.HideableWidget(hidden_vbox) self.hidden_vbox.hide() vbox.pack_start(self.hidden_vbox) self.set_extra_widget(vbox) self.add_button(BUTTON_SUBMIT_REPORT.text) self.add_button(BUTTON_IGNORE.text) self.vbox = vbox ret = self.run() if ret == 0: messages.ReportCrash(report, text.get_text(), cbx.get_checked()).send_to_backend() else: return IGNORE_ERRORS except StandardError: logging.exception("crashdialog threw exception.")
def __init__(self): self.device = None widgetset.VBox.__init__(self) self.button_row = segmented.SegmentedButtonsRow() for key, name in (('main', _('Main')), ('podcasts', _('Podcasts')), ('playlists', _('Playlists')), ('settings', _('Settings'))): button = DeviceTabButtonSegment(key, name, self._tab_clicked) self.button_row.add_button(name.lower(), button) self.button_row.set_active('main') tbc = TabButtonContainer() tbc.add( widgetutil.align_center(self.button_row.make_widget(), top_pad=9)) width = tbc.child.get_size_request()[0] tbc.child.set_size_request(-1, 24) self.pack_start(tbc) self.tabs = {} self.tab_container = widgetset.Background() scroller = widgetset.Scroller(False, True) scroller.add(self.tab_container) self.pack_start(scroller, expand=True) vbox = widgetset.VBox() vbox.pack_start( widgetutil.align_left(tabcontroller.ConnectTab.build_header( _("Individual Files")), top_pad=10)) label = tabcontroller.ConnectTab.build_text( _("Drag individual video and audio files onto " "the device in the sidebar to copy them.")) label.set_size_request(width, -1) label.set_wrap(True) vbox.pack_start(widgetutil.align_left(label, top_pad=10)) vbox.pack_start( widgetutil.align_left(tabcontroller.ConnectTab.build_header( _("Syncing")), top_pad=30)) label = tabcontroller.ConnectTab.build_text( _("Use the tabs above and these options for " "automatic syncing.")) label.set_size_request(width, -1) label.set_wrap(True) vbox.pack_start(widgetutil.align_left(label, top_pad=10)) self.auto_sync = widgetset.Checkbox( _("Sync automatically when this " "device is connected")) self.auto_sync.connect('toggled', self._auto_sync_changed) vbox.pack_start(widgetutil.align_left(self.auto_sync, top_pad=10)) max_fill_label = _( "Don't fill more than %(count)i percent of the " "free space when syncing", {'count': id(self)}) checkbox_label, text_label = max_fill_label.split(unicode(id(self)), 1) self.max_fill_enabled = widgetset.Checkbox(checkbox_label) self.max_fill_enabled.connect('toggled', self._max_fill_enabled_changed) self.max_fill_percent = widgetset.TextEntry() self.max_fill_percent.set_size_request(50, -1) self.max_fill_percent.connect('focus-out', self._max_fill_percent_changed) label = widgetset.Label(text_label) vbox.pack_start( widgetutil.align_left(widgetutil.build_hbox( [self.max_fill_enabled, self.max_fill_percent, label], 0), top_pad=10)) rounded_vbox = RoundedVBox() vbox.pack_start( widgetutil.align_left(tabcontroller.ConnectTab.build_header( _("Auto Fill")), top_pad=30, bottom_pad=10)) self.auto_fill = widgetset.Checkbox( _("After syncing my selections in the tabs above, " "fill remaining space with:")) self.auto_fill.connect('toggled', self._auto_fill_changed) rounded_vbox.pack_start( widgetutil.align_left(self.auto_fill, 20, 20, 20, 20)) names = [(_('Newest Music'), u'recent_music'), (_('Random Music'), u'random_music'), (_('Most Played Songs'), u'most_played_music'), (_('New Playlists'), u'new_playlists'), (_('Most Recent Podcasts'), u'recent_podcasts')] longest = max(names, key=lambda x: len(x[0]))[0] width = widgetset.Label(longest).get_width() less_label = widgetset.Label(_('Less').upper()) less_label.set_size(tabcontroller.ConnectTab.TEXT_SIZE / 2) more_label = widgetset.Label(_('More').upper()) more_label.set_size(tabcontroller.ConnectTab.TEXT_SIZE / 2) label_hbox = widgetutil.build_hbox([ less_label, widgetutil.pad( more_label, left=(200 - less_label.get_width() - more_label.get_width())) ], padding=0) label_hbox.set_size_request(200, -1) scrollers = [widgetutil.align_right(label_hbox, right_pad=20)] self.auto_fill_sliders = {} for name, setting in names: label = widgetutil.align_right(widgetset.Label(name)) label.set_size_request(width, -1) dragger = AutoFillSlider() dragger.connect('released', self._auto_fill_slider_changed, setting) self.auto_fill_sliders[setting] = dragger hbox = widgetutil.build_hbox([label, dragger], 20) scrollers.append(hbox) rounded_vbox.pack_start( widgetutil.align_left(widgetutil.build_vbox(scrollers, 10), 20, 20, 20, 20)) vbox.pack_start(widgetutil.align_left(rounded_vbox)) self.device_size = SizeWidget() self.device_size.sync_button.connect('clicked', self.sync_clicked) self.pack_end(self.device_size) self.add_tab('main', widgetutil.align_center(vbox, 20, 20, 20, 20)) self.add_tab( 'podcasts', widgetutil.align_center(PodcastSyncWidget(), 20, 20, 20, 20)) self.add_tab( 'playlists', widgetutil.align_center(PlaylistSyncWidget(), 20, 20, 20, 20)) self.add_tab( 'settings', widgetutil.align_center(DeviceSettingsWidget(), 20, 20, 20, 20))
def build_widget(self): itemlistcontroller.SimpleItemListController.build_widget(self) scroller = widgetset.Scroller(False, True) scroller.add(EmptySearchList()) self.widget.list_empty_mode_vbox.pack_start(scroller, expand=True)
def run_dialog(channel_infos, downloaded_items, downloading_items, has_watched_feeds): """Displays the remove feeds dialog. """ title = ngettext('Remove Podcast', 'Remove Podcasts', len(channel_infos)) rc_window = MainDialog(title) try: try: v = widgetset.VBox(spacing=5) lab = widgetset.Label( ngettext("Are you sure you want to remove this podcast:", "Are you sure you want to remove these podcasts:", len(channel_infos))) lab.set_wrap(True) v.pack_start(widgetutil.align_left(lab)) v2 = widgetset.VBox() lab_height = None for mem in channel_infos: lab_mem = widgetset.Label(util.clamp_text(mem.name, 40)) if lab_height is None: dummy, lab_height = lab_mem.get_size_request() v2.pack_start(widgetutil.align_left(lab_mem, left_pad=15)) if len(channel_infos) > 5: scroller = widgetset.Scroller(False, True) scroller.set_has_borders(True) scroller.add(v2) scroller_width, scroller_height = scroller.get_size_request() if scroller_height == 0: scroller.set_size_request(scroller_width, 5 * (lab_height + 1)) v2 = scroller v.pack_start(v2, padding=10) cbx_downloaded = None if downloaded_items: cbx_downloaded = widgetset.Checkbox( _("Keep items that have been downloaded in my library.")) v.pack_start( widgetutil.align_left(cbx_downloaded, bottom_pad=5)) if has_watched_feeds: lab = widgetset.Label( _( "Watched folders will be removed from the sidebar but " "their contents will still appear in your library. " "You can stop watching watched folders completely " "in the %(appname)s preference panel.", {"appname": app.config.get(prefs.SHORT_APP_NAME)})) lab.set_wrap(True) lab.set_size_request(390, -1) v.pack_start(widgetutil.align_left(lab, bottom_pad=5)) if downloading_items: lab_downloading = widgetset.Label( ngettext( "Are you sure you want to remove this podcast? " "The downloads currently in progress will be canceled.", "Are you sure you want to remove these podcasts? " "The downloads currently in progress will be canceled.", len(channel_infos))) lab_downloading.set_wrap(True) lab_downloading.set_size_request(390, -1) v.pack_start(widgetutil.align_left(lab_downloading)) rc_window.set_extra_widget(v) rc_window.add_button(BUTTON_REMOVE.text) rc_window.add_button(BUTTON_CANCEL.text) ret = rc_window.run() if ret == 0: # this is silly, but it sets us up for adding additional # bits later. ret = {KEEP_ITEMS: False} if downloaded_items: ret[KEEP_ITEMS] = cbx_downloaded.get_checked() return ret except StandardError: logging.exception("removefeeds threw exception.") finally: rc_window.destroy()