Commit ea71c1ef authored by Billy Barrow's avatar Billy Barrow Committed by Georges Basile Stavracas Neto

playlist-dialog: add bottom entry

The current implementation of the playlist editor dialog
uses an inline editor, which may be confusing due to the
lack of obviousness.

Fix that by adding a new entry + 'Add' button at the bottom
of the dialog.

https://bugzilla.gnome.org/show_bug.cgi?id=744834
parent 1f6ccf14
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.15.2 on Thu Aug 22 16:04:08 2013 -->
<!-- Generated with glade 3.19.0 -->
<interface>
<!-- interface-requires gtk+ 3.10 -->
<requires lib="gtk+" version="3.10"/>
<object class="GtkHeaderBar" id="headerbar1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="title">Select Playlist</property>
<child>
<object class="GtkButton" id="cancel-button">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
<style>
<class name="text-button"/>
</style>
</object>
</child>
<child>
<object class="GtkButton" id="select-button">
<property name="label" translatable="yes">Add</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
<style>
<class name="suggested-action"/>
<class name="text-button"/>
</style>
</object>
<packing>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<object class="GtkListStore" id="liststore1">
<columns>
<!-- column-name playlist-name -->
<column type="gchararray"/>
<!-- column-name editable -->
<column type="gboolean"/>
<!-- column-name item -->
<column type="GObject"/>
</columns>
</object>
<object class="GtkDialog" id="dialog1">
<property name="width_request">400</property>
<property name="height_request">500</property>
......@@ -9,28 +51,17 @@
<property name="modal">True</property>
<property name="destroy_with_parent">True</property>
<property name="type_hint">dialog</property>
<property name="use_header_bar">1</property>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child internal-child="action_area">
<object class="GtkButtonBox" id="dialog-action_area1">
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
<property name="border_width">0</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="margin">12</property>
<property name="shadow_type">in</property>
<property name="vexpand">True</property>
<child>
<object class="GtkTreeView" id="treeview1">
<property name="visible">True</property>
......@@ -38,62 +69,65 @@
<property name="model">liststore1</property>
<property name="headers_visible">False</property>
<property name="activate_on_single_click">True</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection1"/>
</child>
<style>
<class name="list-row"/>
<class name="playlists-list"/>
</style>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection1"/>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkBox" id="new-playlist-hbox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">6</property>
<child>
<object class="GtkEntry" id="new-playlist-entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="placeholder_text" translatable="yes">New Playlist</property>
<style>
<class name="linked"/>
</style>
</object>
</child>
<child>
<object class="GtkButton" id="new-playlist-button">
<property name="label" translatable="yes">Add</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<style>
<class name="suggested-action"/>
<class name="linked"/>
</style>
</object>
</child>
<style>
<class name="linked"/>
</style>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkHeaderBar" id="headerbar1">
<property name="title" translatable="yes">Select Playlist</property>
<property name="visible">True</property>
<child>
<object class="GtkButton" id="cancel-button">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<style>
<class name="text-button"/>
</style>
</object>
<packing>
<property name="pack-type">start</property>
</packing>
</child>
<child>
<object class="GtkButton" id="select-button">
<property name="label" translatable="yes">Select</property>
<property name="visible">True</property>
<style>
<class name="suggested-action"/>
<class name="text-button"/>
</style>
</object>
<packing>
<property name="pack-type">end</property>
</packing>
</child>
</object>
<object class="GtkListStore" id="liststore1">
<columns>
<!-- column-name playlist-name -->
<column type="gchararray"/>
<!-- column-name editable -->
<column type="gboolean"/>
<!-- column-name item -->
<column type="GObject"/>
</columns>
</object>
</interface>
......@@ -812,6 +812,17 @@ class PlaylistDialog():
self._cancel_button.connect('clicked', self._on_cancel_button_clicked)
self._select_button.connect('clicked', self._on_selection)
self._new_playlist_button = self.ui.get_object('new-playlist-button')
self._new_playlist_button.connect('clicked', self._on_editing_done)
self._new_playlist_entry = self.ui.get_object('new-playlist-entry')
self._new_playlist_entry.connect('changed',
self._on_new_playlist_entry_changed)
self._new_playlist_entry.connect('activate',
self._on_editing_done)
self._new_playlist_entry.connect('focus-in-event',
self._on_new_playlist_entry_focused)
self.playlist = Playlists.get_default()
self.playlist.connect('playlist-created', self._on_playlist_created)
......@@ -833,17 +844,13 @@ class PlaylistDialog():
ellipsize=Pango.EllipsizeMode.END,
xalign=0.0
)
type_renderer.connect('editing-started', self._on_editing_started, None)
cols.pack_start(type_renderer, True)
cols.add_attribute(type_renderer, "text", 0)
cols.add_attribute(type_renderer, "editable", 1)
cols.set_cell_data_func(type_renderer, self._on_list_text_render)
self.view.append_column(cols)
@log
def populate(self):
self.add_playlist_iter = self.model.append()
self.model.set(self.add_playlist_iter, [0, 1], [_("New Playlist"), True])
if grilo.tracker:
GLib.idle_add(grilo.populate_playlists, 0, self._add_item)
......@@ -854,7 +861,7 @@ class PlaylistDialog():
@log
def _add_item_to_model(self, item):
new_iter = self.model.insert_before(self.add_playlist_iter)
new_iter = self.model.append()
self.model.set(
new_iter,
[0, 1, 2],
......@@ -880,6 +887,8 @@ class PlaylistDialog():
@log
def _on_item_activated(self, view, path, column):
self._new_playlist_entry.set_text("")
self._new_playlist_button.set_sensitive(False)
_iter = self.model.get_iter(path)
if self.model.get_value(_iter, 1):
self.view.set_cursor(path, column, True)
......@@ -895,15 +904,11 @@ class PlaylistDialog():
else:
self._select_button.set_sensitive(True)
@log
def _on_editing_started(self, renderer, editable, path, data=None):
editable.set_text('')
editable.connect('editing-done', self._on_editing_done, None)
@log
def _on_editing_done(self, editable, data=None):
if editable.get_text() != '':
self.playlist.create_playlist(editable.get_text())
def _on_editing_done(self, sender, data=None):
if self._new_playlist_entry.get_text() != '':
self.playlist.create_playlist(self._new_playlist_entry.get_text())
@log
def _on_playlist_created(self, playlists, item):
......@@ -913,6 +918,18 @@ class PlaylistDialog():
self.view.get_columns()[0], False)
self.view.row_activated(self.model.get_path(new_iter),
self.view.get_columns()[0])
self.dialog_box.response(Gtk.ResponseType.ACCEPT)
@log
def _on_new_playlist_entry_changed(self, editable, data=None):
if editable.get_text() != '':
self._new_playlist_button.set_sensitive(True)
else:
self._new_playlist_button.set_sensitive(False)
@log
def _on_new_playlist_entry_focused(self, editable, data=None):
self.selection.unselect_all()
class CellRendererClickablePixbuf(Gtk.CellRendererPixbuf):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment