summaryrefslogtreecommitdiff
path: root/mediainfo
diff options
context:
space:
mode:
authorStefan Sauer <ensonic@users.sf.net>2013-09-27 08:03:59 +0200
committerStefan Sauer <ensonic@users.sf.net>2013-09-30 18:20:23 +0200
commitddeadf0f7c1e622b1b4e08402250539569aa37b4 (patch)
tree755e5afa9acded3d6543cfbddc88420ccc07a66e /mediainfo
parent3a6f42bf67049fd3a24dcab76ad96506fff14c8d (diff)
mi-info: use a TreeView for the toc
Use a TreeView with a TreeStore to show toc-entries.
Diffstat (limited to 'mediainfo')
-rw-r--r--mediainfo/src/mi-info.vala45
1 files changed, 30 insertions, 15 deletions
diff --git a/mediainfo/src/mi-info.vala b/mediainfo/src/mi-info.vala
index 91a9347..7bd243d 100644
--- a/mediainfo/src/mi-info.vala
+++ b/mediainfo/src/mi-info.vala
@@ -35,7 +35,7 @@ public class MediaInfo.Info : Box
private Notebook video_streams; // depending on screen resolution
private Notebook audio_streams;
private Notebook subtitle_streams;
- private Label toc_entries; // TODO(ensonic): use treeview
+ private TreeView toc_entries;
private Preview preview;
private ScrolledWindow info_area;
// gstreamer objects
@@ -239,8 +239,19 @@ public class MediaInfo.Info : Box
table.attach (label, 0, 3, row, row+1, fill_exp, 0, 0, 1);
row++;
- toc_entries = new Label (null); // TODO(ensonic): use TreeView
- //toc.row_activated.connect (on_toc_entry_activated);
+ // TODO(ensonic): use tabs for editions?
+ toc_entries = new TreeView ();
+ toc_entries.set_enable_search (false);
+ toc_entries.set_headers_visible (false);
+ toc_entries.get_selection ().set_mode (SelectionMode.BROWSE);
+ //toc_entries.row_activated.connect (on_toc_entry_activated);
+
+ TreeViewColumn column = new TreeViewColumn ();
+ toc_entries.append_column (column);
+ CellRendererText renderer = new CellRendererText ();
+ column.pack_start (renderer, false);
+ column.add_attribute (renderer, "text", 0);
+
table.attach (toc_entries, 0, 3, row, row+1, fill_exp, 0, 0, 1);
row++;
@@ -441,7 +452,8 @@ public class MediaInfo.Info : Box
}
nb.show_all();
- toc_entries.set_text (build_toc_info (toc));
+ toc_entries.set_model (build_toc_info (toc));
+ toc_entries.expand_all ();
if (have_video) {
Gdk.Point res = video_resolutions[0];
@@ -843,36 +855,39 @@ public class MediaInfo.Info : Box
// TODO(ensonic): use a Gtk.TreeStore here, pass parent, instead of indent
// TODO(ensonic): one column with the formatted string or 3 strings: label, start, stop
- private string build_toc_info_for_entry (TocEntry e, string indent) {
+ private void build_toc_info_for_entry (TreeStore s, TocEntry e, TreeIter? p) {
+ TreeIter iter;
int64 start, stop;
+
e.get_start_stop_times(out start, out stop);
- string s = indent;
+ string str = "";
if (start != Gst.CLOCK_TIME_NONE) {
- s += "%s ".printf(format_time((ClockTime)start));
+ str += "%s ".printf(format_time((ClockTime)start));
}
if (stop != Gst.CLOCK_TIME_NONE) {
- s += "- %s ".printf(format_time((ClockTime)stop));
+ str += "- %s ".printf(format_time((ClockTime)stop));
}
- s += "%s\n".printf(TocEntryType.get_nick(e.get_entry_type()));
+ str += TocEntryType.get_nick(e.get_entry_type());
+
+ s.append(out iter, p);
+ s.set(iter, 0, str, -1);
unowned GLib.List<TocEntry> entries = e.get_sub_entries ();
if (entries != null) {
- string new_indent = indent + " ";
foreach (TocEntry se in entries) {
- s += build_toc_info_for_entry (se, new_indent);
+ build_toc_info_for_entry (s, se, iter);
}
}
- return s;
}
- private string? build_toc_info (Toc? t) {
+ private TreeStore? build_toc_info (Toc? t) {
if (t == null)
return null;
- string s = "";
+ TreeStore s = new TreeStore(1, typeof (string));
unowned GLib.List<TocEntry> entries = t.get_entries ();
foreach (TocEntry e in entries) {
- s += build_toc_info_for_entry (e, "");
+ build_toc_info_for_entry (s, e, null);
}
return s;