本文整理汇总了Python中quodlibet.qltk.x.Align.add方法的典型用法代码示例。如果您正苦于以下问题:Python Align.add方法的具体用法?Python Align.add怎么用?Python Align.add使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类quodlibet.qltk.x.Align
的用法示例。
在下文中一共展示了Align.add方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
# 需要导入模块: from quodlibet.qltk.x import Align [as 别名]
# 或者: from quodlibet.qltk.x.Align import add [as 别名]
def __init__(self, library, player, pattern_filename):
super(SongInfo, self).__init__()
self._pattern_filename = pattern_filename
self.set_visible_window(False)
align = Align(halign=Gtk.Align.START, valign=Gtk.Align.START)
label = Gtk.Label()
label.set_ellipsize(Pango.EllipsizeMode.MIDDLE)
label.set_track_visited_links(False)
label.set_selectable(True)
align.add(label)
label.set_alignment(0.0, 0.0)
self._label = label
connect_destroy(library, 'changed', self._on_library_changed, player)
connect_destroy(player, 'song-started', self._on_song_started)
label.connect('populate-popup', self._on_label_popup, player, library)
self.connect('button-press-event', self._on_button_press_event,
player, library)
try:
with open(self._pattern_filename, "rb") as h:
self._pattern = h.read().strip().decode("utf-8")
except (EnvironmentError, UnicodeDecodeError):
pass
self._compiled = XMLFromMarkupPattern(self._pattern)
align.show_all()
self.add(align)
示例2: Frame
# 需要导入模块: from quodlibet.qltk.x import Align [as 别名]
# 或者: from quodlibet.qltk.x.Align import add [as 别名]
def Frame(name, widget):
f = Gtk.Frame()
f.set_shadow_type(Gtk.ShadowType.NONE)
l = Gtk.Label()
l.set_markup("<u><b>%s</b></u>" % name)
f.set_label_widget(l)
a = Align(top=3, left=12)
f.add(a)
a.add(widget)
return f
示例3: Frame
# 需要导入模块: from quodlibet.qltk.x import Align [as 别名]
# 或者: from quodlibet.qltk.x.Align import add [as 别名]
def Frame(name, widget):
def hx(value):
return hex(int(value * 255))[2:]
f = Gtk.Frame()
qltk.add_css(f, '* {opacity: 0.9}')
l = Gtk.Label()
l.set_markup(util.escape(name))
qltk.add_css(l, " * {opacity: 0.6; padding: 0px 2px;}")
f.set_label_widget(l)
a = Align(top=6, left=12, bottom=6, right=6)
f.add(a)
a.add(widget)
return f
示例4: ratings_vbox
# 需要导入模块: from quodlibet.qltk.x import Align [as 别名]
# 或者: from quodlibet.qltk.x.Align import add [as 别名]
def ratings_vbox(self):
"""Returns a new VBox containing all ratings widgets"""
vb = Gtk.VBox(spacing=6)
# Default Rating
model = Gtk.ListStore(float)
default_combo = Gtk.ComboBox(model=model)
default_lab = Gtk.Label(label=_("_Default rating:"))
default_lab.set_use_underline(True)
default_lab.set_alignment(0, 0.5)
def draw_rating(column, cell, model, it, data):
num = model[it][0]
text = "%0.2f: %s" % (num, util.format_rating(num))
cell.set_property('text', text)
def default_rating_changed(combo, model):
it = combo.get_active_iter()
if it is None:
return
RATINGS.default = model[it][0]
qltk.redraw_all_toplevels()
def populate_default_rating_model(combo, num):
model = combo.get_model()
model.clear()
deltas = []
default = RATINGS.default
precision = RATINGS.precision
for i in range(0, num + 1):
r = i * precision
model.append(row=[r])
deltas.append((abs(default - r), i))
active = sorted(deltas)[0][1]
print_d("Choosing #%d (%.2f), closest to current %.2f"
% (active, precision * active, default))
combo.set_active(active)
cell = Gtk.CellRendererText()
default_combo.pack_start(cell, True)
default_combo.set_cell_data_func(cell, draw_rating, None)
default_combo.connect('changed', default_rating_changed, model)
default_lab.set_mnemonic_widget(default_combo)
def refresh_default_combo(num):
populate_default_rating_model(default_combo, num)
# Rating Scale
model = Gtk.ListStore(int)
scale_combo = Gtk.ComboBox(model=model)
scale_lab = Gtk.Label(label=_("Rating _scale:"))
scale_lab.set_use_underline(True)
scale_lab.set_mnemonic_widget(scale_combo)
cell = Gtk.CellRendererText()
scale_combo.pack_start(cell, False)
num = RATINGS.number
for i in [1, 2, 3, 4, 5, 6, 8, 10]:
it = model.append(row=[i])
if i == num:
scale_combo.set_active_iter(it)
def draw_rating_scale(column, cell, model, it, data):
num_stars = model[it][0]
text = "%d: %s" % (num_stars, RATINGS.full_symbol * num_stars)
cell.set_property('text', text)
def rating_scale_changed(combo, model):
it = combo.get_active_iter()
if it is None:
return
RATINGS.number = num = model[it][0]
refresh_default_combo(num)
refresh_default_combo(RATINGS.number)
scale_combo.set_cell_data_func(cell, draw_rating_scale, None)
scale_combo.connect('changed', rating_scale_changed, model)
default_align = Align(halign=Gtk.Align.START)
default_align.add(default_lab)
scale_align = Align(halign=Gtk.Align.START)
scale_align.add(scale_lab)
grid = Gtk.Grid(column_spacing=6, row_spacing=6)
grid.add(scale_align)
grid.add(scale_combo)
grid.attach(default_align, 0, 1, 1, 1)
grid.attach(default_combo, 1, 1, 1, 1)
vb.pack_start(grid, False, False, 6)
# Bayesian Factor
bayesian_factor = config.getfloat("settings",
"bayesian_rating_factor", 0.0)
adj = Gtk.Adjustment.new(bayesian_factor, 0.0, 10.0, 0.5, 0.5, 0.0)
bayes_spin = Gtk.SpinButton(adjustment=adj, numeric=True)
bayes_spin.set_digits(1)
bayes_spin.connect('changed', self.__changed_and_signal_library,
'settings', 'bayesian_rating_factor')
bayes_spin.set_tooltip_text(
_("Bayesian Average factor (C) for aggregated ratings.\n"
#.........这里部分代码省略.........
示例5: __init__
# 需要导入模块: from quodlibet.qltk.x import Align [as 别名]
# 或者: from quodlibet.qltk.x.Align import add [as 别名]
def __init__(self):
super(PreferencesWindow.Player, self).__init__(spacing=12)
self.set_border_width(12)
self.title = _("Playback")
# player backend
if app.player and hasattr(app.player, 'PlayerPreferences'):
player_prefs = app.player.PlayerPreferences()
f = qltk.Frame(_("Output Configuration"), child=player_prefs)
self.pack_start(f, False, True, 0)
# replaygain
fallback_gain = config.getfloat("player", "fallback_gain", 0.0)
adj = Gtk.Adjustment.new(fallback_gain, -12.0, 12.0, 0.5, 0.5, 0.0)
fb_spin = Gtk.SpinButton(adjustment=adj)
fb_spin.set_digits(1)
fb_spin.connect('changed', self.__changed,
'player', 'fallback_gain')
fb_spin.set_tooltip_text(
_("If no Replay Gain information is available "
"for a song, scale the volume by this value"))
fb_label = Gtk.Label(label=_("_Fall-back gain (dB):"))
fb_label.set_use_underline(True)
fb_label.set_mnemonic_widget(fb_spin)
pre_amp_gain = config.getfloat("player", "pre_amp_gain", 0.0)
adj = Gtk.Adjustment.new(pre_amp_gain, -6, 6, 0.5, 0.5, 0.0)
adj.connect('value-changed', self.__changed,
'player', 'pre_amp_gain')
pre_spin = Gtk.SpinButton(adjustment=adj)
pre_spin.set_digits(1)
pre_spin.set_tooltip_text(
_("Scale volume for all songs by this value, "
"as long as the result will not clip"))
pre_label = Gtk.Label(label=_("_Pre-amp gain (dB):"))
pre_label.set_use_underline(True)
pre_label.set_mnemonic_widget(pre_spin)
widgets = [pre_label, pre_spin, fb_label, fb_spin]
c = CCB(_("_Enable Replay Gain volume adjustment"),
"player", "replaygain", populate=True)
c.connect('toggled', self.__toggled_gain, widgets)
# packing
table = Gtk.Table.new(3, 2, False)
table.set_col_spacings(6)
table.set_row_spacings(6)
table.attach(c, 0, 2, 0, 1)
fb_label.set_alignment(0, 0.5)
table.attach(fb_label, 0, 1, 1, 2,
xoptions=Gtk.AttachOptions.FILL)
pre_label.set_alignment(0, 0.5)
table.attach(pre_label, 0, 1, 2, 3,
xoptions=Gtk.AttachOptions.FILL)
fb_align = Align(halign=Gtk.Align.START)
fb_align.add(fb_spin)
table.attach(fb_align, 1, 2, 1, 2)
pre_align = Align(halign=Gtk.Align.START)
pre_align.add(pre_spin)
table.attach(pre_align, 1, 2, 2, 3)
f = qltk.Frame(_("Replay Gain Volume Adjustment"), child=table)
c.emit('toggled')
self.pack_start(f, False, True, 0)
for child in self.get_children():
child.show_all()
示例6: __init__
# 需要导入模块: from quodlibet.qltk.x import Align [as 别名]
# 或者: from quodlibet.qltk.x.Align import add [as 别名]
def __init__(self, parent=None):
if self.is_not_unique():
return
super(PluginWindow, self).__init__()
self.set_title(_("Plugins"))
self.set_border_width(12)
self.set_default_size(655, 404)
self.set_transient_for(parent)
paned = Paned()
vbox = Gtk.VBox(spacing=6)
sw = Gtk.ScrolledWindow()
sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.ALWAYS)
model = ObjectStore()
filter_model = ObjectModelFilter(child_model=model)
tv = PluginListView()
tv.set_model(filter_model)
tv.set_rules_hint(True)
tv.connect("plugin-toggled", self.__plugin_toggled)
fb = Gtk.HBox(spacing=6)
filter_combo = PluginFilterCombo()
filter_combo.connect("changed", lambda s: filter_model.refilter())
fb.pack_start(filter_combo, False, True, 0)
filter_entry = ClearEntry()
filter_entry.connect("changed", lambda s: filter_model.refilter())
filter_entry.enable_clear_button()
fb.pack_start(filter_entry, True, True, 0)
sw.add(tv)
sw.set_shadow_type(Gtk.ShadowType.IN)
sw.set_size_request(200, -1)
bbox = Gtk.HBox(homogeneous=True, spacing=12)
errors = qltk.Button(_("Show _Errors"), Icons.DIALOG_WARNING)
errors.set_focus_on_click(False)
errors.connect('clicked', self.__show_errors)
errors.set_no_show_all(True)
bbox.pack_start(errors, True, True, 0)
pref_box = PluginPreferencesContainer()
if const.DEBUG:
refresh = qltk.Button(_("_Refresh"), Icons.VIEW_REFRESH)
refresh.set_focus_on_click(False)
refresh.connect('clicked', self.__refresh, tv, pref_box, errors,
filter_combo)
bbox.pack_start(refresh, True, True, 0)
vbox.pack_start(fb, False, True, 0)
vbox.pack_start(sw, True, True, 0)
vbox.pack_start(bbox, False, True, 0)
paned.pack1(vbox, True, False)
close = qltk.Button(_("_Close"), Icons.WINDOW_CLOSE)
close.connect('clicked', lambda *x: self.destroy())
bb_align = Align(halign=Gtk.Align.END, valign=Gtk.Align.END)
bb = Gtk.HButtonBox()
bb.set_layout(Gtk.ButtonBoxStyle.END)
bb.pack_start(close, True, True, 0)
bb_align.add(bb)
selection = tv.get_selection()
selection.connect('changed', self.__selection_changed, pref_box)
selection.emit('changed')
right_box = Gtk.VBox(spacing=12)
right_box.pack_start(pref_box, True, True, 0)
self.use_header_bar()
if not self.has_close_button():
right_box.pack_start(bb_align, True, True, 0)
paned.pack2(Align(right_box, left=6), True, False)
paned.set_position(250)
self.add(paned)
self.__refill(tv, pref_box, errors, filter_combo)
self.connect('destroy', self.__destroy)
filter_model.set_visible_func(
self.__filter, (filter_entry, filter_combo))
self.get_child().show_all()
filter_entry.grab_focus()
restore_id = config.get("memory", "plugin_selection")
tv.select_by_plugin_id(restore_id)
示例7: QuodLibetWindow
# 需要导入模块: from quodlibet.qltk.x import Align [as 别名]
# 或者: from quodlibet.qltk.x.Align import add [as 别名]
class QuodLibetWindow(Window, PersistentWindowMixin):
def __init__(self, library, player, headless=False, restore_cb=None):
super(QuodLibetWindow, self).__init__(dialog=False)
self.last_dir = get_home_dir()
self.__destroyed = False
self.__update_title(player)
self.set_default_size(550, 450)
main_box = Gtk.VBox()
self.add(main_box)
# create main menubar, load/restore accelerator groups
self.__library = library
ui = self.__create_menu(player, library)
accel_group = ui.get_accel_group()
self.add_accel_group(accel_group)
def scroll_and_jump(*args):
self.__jump_to_current(True, True)
keyval, mod = Gtk.accelerator_parse("<control><shift>J")
accel_group.connect(keyval, mod, 0, scroll_and_jump)
# dbus app menu
# Unity puts the app menu next to our menu bar. Since it only contains
# menu items also available in the menu bar itself, don't add it.
if not util.is_unity():
AppMenu(self, ui.get_action_groups()[0])
# custom accel map
accel_fn = os.path.join(quodlibet.get_user_dir(), "accels")
Gtk.AccelMap.load(accel_fn)
# save right away so we fill the file with example comments of all
# accels
Gtk.AccelMap.save(accel_fn)
menubar = ui.get_widget("/Menu")
# Since https://git.gnome.org/browse/gtk+/commit/?id=b44df22895c79
# toplevel menu items show an empty 16x16 image. While we don't
# need image items there UIManager creates them by default.
# Work around by removing the empty GtkImages
for child in menubar.get_children():
if isinstance(child, Gtk.ImageMenuItem):
child.set_image(None)
main_box.pack_start(menubar, False, True, 0)
# get the playlist up before other stuff
self.songlist = MainSongList(library, player)
self.songlist.show_all()
self.songlist.connect("key-press-event", self.__songlist_key_press)
self.songlist.connect_after(
'drag-data-received', self.__songlist_drag_data_recv)
self.song_scroller = SongListScroller(
ui.get_widget("/Menu/View/SongList"))
self.song_scroller.add(self.songlist)
self.qexpander = QueueExpander(
ui.get_widget("/Menu/View/Queue"), library, player)
self.playlist = PlaylistMux(
player, self.qexpander.model, self.songlist.model)
top_bar = TopBar(self, player, library)
main_box.pack_start(top_bar, False, True, 0)
self.top_bar = top_bar
self.__browserbox = Align(bottom=3)
main_box.pack_start(self.__browserbox, True, True, 0)
statusbox = StatusBarBox(self.songlist.model, player)
self.order = statusbox.order
self.repeat = statusbox.repeat
self.statusbar = statusbox.statusbar
main_box.pack_start(
Align(statusbox, border=3, top=-3, right=3),
False, True, 0)
self.songpane = ConfigRVPaned("memory", "queue_position", 0.75)
self.songpane.pack1(self.song_scroller, resize=True, shrink=False)
self.songpane.pack2(self.qexpander, resize=True, shrink=False)
self.__handle_position = self.songpane.get_property("position")
def songpane_button_press_cb(pane, event):
"""If we start to drag the pane handle while the
queue expander is unexpanded, expand it and move the handle
to the bottom, so we can 'drag' the queue out
"""
if event.window != pane.get_handle_window():
return False
if not self.qexpander.get_expanded():
self.qexpander.set_expanded(True)
pane.set_relative(1.0)
return False
self.songpane.connect("button-press-event", songpane_button_press_cb)
#.........这里部分代码省略.........
示例8: __init__
# 需要导入模块: from quodlibet.qltk.x import Align [as 别名]
# 或者: from quodlibet.qltk.x.Align import add [as 别名]
def __init__(self, parent, song):
super(CoverArea, self).__init__()
self.song = song
self.dirname = song("~dirname")
self.main_win = parent
self.data_cache = []
self.current_data = None
self.current_pixbuf = None
self.image = Gtk.Image()
self.button = Button(_("_Save"), Icons.DOCUMENT_SAVE)
self.button.set_sensitive(False)
self.button.connect('clicked', self.__save)
close_button = Button(_("_Close"), Icons.WINDOW_CLOSE)
close_button.connect('clicked', lambda x: self.main_win.destroy())
self.window_fit = self.ConfigCheckButton(_('Fit image to _window'),
'fit', True)
self.window_fit.connect('toggled', self.__scale_pixbuf)
self.name_combo = Gtk.ComboBoxText()
self.cmd = qltk.entry.ValidatingEntry(iscommand)
# Both labels
label_open = Gtk.Label(label=_('_Program:'))
label_open.set_use_underline(True)
label_open.set_mnemonic_widget(self.cmd)
label_open.set_justify(Gtk.Justification.LEFT)
self.open_check = self.ConfigCheckButton(_('_Edit image after saving'),
'edit', False)
label_name = Gtk.Label(label=_('File_name:'), use_underline=True)
label_name.set_use_underline(True)
label_name.set_mnemonic_widget(self.name_combo)
label_name.set_justify(Gtk.Justification.LEFT)
self.cmd.set_text(self.config_get('edit_cmd', 'gimp'))
# Create the filename combo box
fn_list = ['cover.jpg', 'folder.jpg', '.folder.jpg']
# Issue 374 - add dynamic file names
artist = song("artist")
alartist = song("albumartist")
album = song("album")
labelid = song("labelid")
if album:
fn_list.append("<album>.jpg")
if alartist:
fn_list.append("<albumartist> - <album>.jpg")
else:
fn_list.append("<artist> - <album>.jpg")
else:
print_w(u"No album for \"%s\". Could be difficult "
u"finding art…" % song("~filename"))
title = song("title")
if title and artist:
fn_list.append("<artist> - <title>.jpg")
if labelid:
fn_list.append("<labelid>.jpg")
set_fn = self.config_get('fn', fn_list[0])
for i, fn in enumerate(fn_list):
self.name_combo.append_text(fn)
if fn == set_fn:
self.name_combo.set_active(i)
if self.name_combo.get_active() < 0:
self.name_combo.set_active(0)
table = Gtk.Table(n_rows=2, n_columns=2, homogeneous=False)
table.set_row_spacing(0, 5)
table.set_row_spacing(1, 5)
table.set_col_spacing(0, 5)
table.set_col_spacing(1, 5)
table.attach(label_open, 0, 1, 0, 1)
table.attach(label_name, 0, 1, 1, 2)
table.attach(self.cmd, 1, 2, 0, 1)
table.attach(self.name_combo, 1, 2, 1, 2)
self.scrolled = Gtk.ScrolledWindow()
self.scrolled.add_with_viewport(self.image)
self.scrolled.set_policy(Gtk.PolicyType.AUTOMATIC,
Gtk.PolicyType.AUTOMATIC)
bbox = Gtk.HButtonBox()
bbox.set_spacing(6)
bbox.set_layout(Gtk.ButtonBoxStyle.END)
bbox.pack_start(self.button, True, True, 0)
bbox.pack_start(close_button, True, True, 0)
bb_align = Align(valign=Gtk.Align.END, right=6)
bb_align.add(bbox)
#.........这里部分代码省略.........
示例9: __init__
# 需要导入模块: from quodlibet.qltk.x import Align [as 别名]
# 或者: from quodlibet.qltk.x.Align import add [as 别名]
def __init__(self, parent=None):
if self.is_not_unique():
return
super(PluginWindow, self).__init__()
self.set_title(_("Plugins"))
self.set_default_size(700, 500)
self.set_transient_for(parent)
self.enable_window_tracking("plugin_prefs")
paned = Paned()
vbox = Gtk.VBox()
sw = ScrolledWindow()
sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.ALWAYS)
model = ObjectStore()
filter_model = ObjectModelFilter(child_model=model)
self._list_view = tv = PluginListView()
tv.set_model(filter_model)
tv.set_rules_hint(True)
tv.connect("plugin-toggled", self.__plugin_toggled)
fb = Gtk.HBox(spacing=6)
enabled_combo = PluginEnabledFilterCombo()
enabled_combo.connect("changed", lambda s: filter_model.refilter())
enabled_combo.set_tooltip_text(_("Filter by plugin state / tag"))
fb.pack_start(enabled_combo, True, True, 0)
self._enabled_combo = enabled_combo
type_combo = PluginTypeFilterCombo()
type_combo.connect("changed", lambda s: filter_model.refilter())
type_combo.set_tooltip_text(_("Filter by plugin type"))
fb.pack_start(type_combo, True, True, 0)
self._type_combo = type_combo
filter_entry = UndoSearchEntry()
filter_entry.set_tooltip_text(
_("Filter by plugin name or description"))
filter_entry.connect("changed", lambda s: filter_model.refilter())
self._filter_entry = filter_entry
sw.add(tv)
sw.set_shadow_type(Gtk.ShadowType.IN)
bbox = Gtk.VBox()
errors = qltk.Button(_("Show _Errors"), Icons.DIALOG_WARNING)
errors.set_focus_on_click(False)
errors.connect('clicked', self.__show_errors)
errors.show()
errors = Align(errors, top=6, bottom=6)
errors.set_no_show_all(True)
bbox.pack_start(errors, True, True, 0)
pref_box = PluginPreferencesContainer()
if const.DEBUG:
refresh = qltk.Button(_("_Refresh"), Icons.VIEW_REFRESH)
refresh.set_focus_on_click(False)
refresh.connect('clicked', self.__refresh, tv, pref_box, errors,
enabled_combo)
bbox.pack_start(refresh, True, True, 0)
filter_box = Gtk.VBox(spacing=6)
filter_box.pack_start(fb, False, True, 0)
filter_box.pack_start(filter_entry, False, True, 0)
vbox.pack_start(Align(filter_box, border=6, right=-6), False, False, 0)
vbox.pack_start(sw, True, True, 0)
vbox.pack_start(Align(bbox, left=6), False, True, 0)
paned.pack1(vbox, False, False)
close = qltk.Button(_("_Close"), Icons.WINDOW_CLOSE)
close.connect('clicked', lambda *x: self.destroy())
bb_align = Align(halign=Gtk.Align.END, valign=Gtk.Align.END)
bb = Gtk.HButtonBox()
bb.set_layout(Gtk.ButtonBoxStyle.END)
bb.pack_start(close, True, True, 0)
bb_align.add(bb)
selection = tv.get_selection()
selection.connect('changed', self.__selection_changed, pref_box)
selection.emit('changed')
right_box = Gtk.VBox(spacing=12)
right_box.pack_start(pref_box, True, True, 0)
self.use_header_bar()
if not self.has_close_button():
right_box.pack_start(bb_align, True, True, 0)
paned.pack2(Align(right_box, border=12), True, False)
paned.set_position(275)
self.add(paned)
self.__refill(tv, pref_box, errors, enabled_combo)
self.connect('destroy', self.__destroy)
#.........这里部分代码省略.........
示例10: QuodLibetWindow
# 需要导入模块: from quodlibet.qltk.x import Align [as 别名]
# 或者: from quodlibet.qltk.x.Align import add [as 别名]
class QuodLibetWindow(Window, PersistentWindowMixin, AppWindow):
def __init__(self, library, player, headless=False, restore_cb=None):
super(QuodLibetWindow, self).__init__(dialog=False)
self.__destroyed = False
self.__update_title(player)
self.set_default_size(600, 480)
main_box = Gtk.VBox()
self.add(main_box)
self.side_book = qltk.Notebook()
# get the playlist up before other stuff
self.songlist = MainSongList(library, player)
self.songlist.connect("key-press-event", self.__songlist_key_press)
self.songlist.connect_after(
'drag-data-received', self.__songlist_drag_data_recv)
self.song_scroller = ScrolledWindow()
self.song_scroller.set_policy(
Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
self.song_scroller.set_shadow_type(Gtk.ShadowType.IN)
self.song_scroller.add(self.songlist)
self.qexpander = QueueExpander(library, player)
self.qexpander.set_no_show_all(True)
self.qexpander.set_visible(config.getboolean("memory", "queue"))
def on_queue_visible(qex, param):
config.set("memory", "queue", str(qex.get_visible()))
self.qexpander.connect("notify::visible", on_queue_visible)
self.playlist = PlaylistMux(
player, self.qexpander.model, self.songlist.model)
self.__player = player
# create main menubar, load/restore accelerator groups
self.__library = library
ui = self.__create_menu(player, library)
accel_group = ui.get_accel_group()
self.add_accel_group(accel_group)
def scroll_and_jump(*args):
self.__jump_to_current(True, None, True)
keyval, mod = Gtk.accelerator_parse("<Primary><shift>J")
accel_group.connect(keyval, mod, 0, scroll_and_jump)
# custom accel map
accel_fn = os.path.join(quodlibet.get_user_dir(), "accels")
Gtk.AccelMap.load(accel_fn)
# save right away so we fill the file with example comments of all
# accels
Gtk.AccelMap.save(accel_fn)
menubar = ui.get_widget("/Menu")
# Since https://git.gnome.org/browse/gtk+/commit/?id=b44df22895c79
# toplevel menu items show an empty 16x16 image. While we don't
# need image items there UIManager creates them by default.
# Work around by removing the empty GtkImages
for child in menubar.get_children():
if isinstance(child, Gtk.ImageMenuItem):
child.set_image(None)
main_box.pack_start(menubar, False, True, 0)
top_bar = TopBar(self, player, library)
main_box.pack_start(top_bar, False, True, 0)
self.top_bar = top_bar
self.__browserbox = Align(bottom=3)
self.__paned = paned = ConfigRHPaned("memory", "sidebar_pos", 0.25)
paned.pack1(self.__browserbox, resize=True)
# We'll pack2 when necessary (when the first sidebar plugin is set up)
main_box.pack_start(paned, True, True, 0)
play_order = PlayOrderWidget(self.songlist.model, player)
statusbox = StatusBarBox(play_order, self.qexpander)
self.order = play_order
self.statusbar = statusbox.statusbar
main_box.pack_start(
Align(statusbox, border=3, top=-3),
False, True, 0)
self.songpane = SongListPaned(self.song_scroller, self.qexpander)
self.songpane.show_all()
try:
orders = []
for e in config.getstringlist('memory', 'sortby', []):
orders.append((e[1:], int(e[0])))
except ValueError:
pass
else:
self.songlist.set_sort_orders(orders)
#.........这里部分代码省略.........