[Xfce4-commits] <postler:master> Display attachments as icon view and no paths
Christian Dywan
noreply at xfce.org
Sat Jan 29 01:02:01 CET 2011
Updating branch refs/heads/master
to 1e652fda4beb15ab3a245fda49ebdb19756c4734 (commit)
from 3e99d11c46008b99026088dbe3e57f3dc74f9dfb (commit)
commit 1e652fda4beb15ab3a245fda49ebdb19756c4734
Author: Christian Dywan <christian at twotoasts.de>
Date: Sat Jan 29 01:01:00 2011 +0100
Display attachments as icon view and no paths
postler/postler-composer.vala | 67 ++++++++++++++++++++++++++++++++--------
postler/postler-viewer.vala | 2 +-
2 files changed, 54 insertions(+), 15 deletions(-)
diff --git a/postler/postler-composer.vala b/postler/postler-composer.vala
index 6b94689..e957fff 100644
--- a/postler/postler-composer.vala
+++ b/postler/postler-composer.vala
@@ -20,7 +20,7 @@ public class Postler.Composer : Gtk.Window {
Gtk.VBox shelf;
Gtk.Toolbar toolbar;
Postler.Content content;
- Gtk.TreeView att_view;
+ Gtk.IconView att_view;
Gtk.ListStore attachments;
Gtk.ComboBox combo_from;
Gtk.Entry entry_to;
@@ -324,6 +324,41 @@ public class Postler.Composer : Gtk.Window {
att_view.visible = false;
}
+ static int attachment_icon_size = 0;
+ void render_pixbuf (Gtk.CellLayout layout, Gtk.CellRenderer cell,
+ Gtk.TreeModel model, Gtk.TreeIter iter) {
+
+ if (attachment_icon_size == 0)
+ attachment_icon_size = Gtk.icon_size_register ("attachment", 32, 32);
+
+ string filename;
+ model.get (iter, 0, out filename);
+
+ uchar[] data = {};
+ bool uncertain;
+ string mime_type = g_content_type_guess (filename, data, out uncertain);
+ string icon_name = Postler.Viewer.icon_name_for_mime_type (mime_type, this);
+ cell.set ("icon-name", icon_name,
+ "stock-size", attachment_icon_size);
+ }
+
+ void render_filename (Gtk.CellLayout layout, Gtk.CellRenderer cell,
+ Gtk.TreeModel model, Gtk.TreeIter iter) {
+
+ string filename;
+ model.get (iter, 0, out filename);
+ cell.set ("text", Filename.display_basename (filename),
+ "width-chars", 16,
+ "ellipsize", Pango.EllipsizeMode.MIDDLE);
+ }
+
+ void render_delete (Gtk.CellLayout layout, Gtk.CellRenderer cell,
+ Gtk.TreeModel model, Gtk.TreeIter iter) {
+
+ cell.set ("stock-id", Gtk.STOCK_REMOVE,
+ "width", 16, "height", 16);
+ }
+
void drag_received (Gdk.DragContext context, int x, int y,
Gtk.SelectionData data, uint info, uint timestamp) {
@@ -564,24 +599,28 @@ public class Postler.Composer : Gtk.Window {
var scrolled = new Postler.ScrolledWindow (content);
scrolled.shadow_type = Gtk.ShadowType.IN;
shelf.pack_start (scrolled, true, true, 0);
- att_view = new Gtk.TreeView ();
- var attachment_del = new Postler.CellRendererToggle ();
- attachment_del.stock_id = Gtk.STOCK_REMOVE;
- attachment_del.prelight_stock_id = Gtk.STOCK_REMOVE;
- attachment_del.width = 32;
- attachments = new Gtk.ListStore (2, typeof (string), typeof (ulong));
- att_view.insert_column_with_attributes (-1, "Attachments",
- new Gtk.CellRendererText (), "text", 0);
- att_view.insert_column_with_attributes (1, "", attachment_del, "stock-id", 0);
- att_view.get_column (0).expand = true;
- attachment_del.toggled.connect ((renderer, path) => {
+
+ att_view = new Gtk.IconView ();
+ att_view.columns = 3;
+ att_view.set ("item-orientation", Gtk.Orientation.HORIZONTAL);
+ var renderer_pixbuf = new Gtk.CellRendererPixbuf ();
+ att_view.pack_start (renderer_pixbuf, true);
+ att_view.set_cell_data_func (renderer_pixbuf, render_pixbuf);
+ var renderer_filename = new Gtk.CellRendererText ();
+ att_view.pack_start (renderer_filename, false);
+ att_view.set_cell_data_func (renderer_filename, render_filename);
+ var renderer_delete = new Postler.CellRendererToggle ();
+ att_view.pack_end (renderer_delete, false);
+ att_view.set_cell_data_func (renderer_delete, render_delete);
+ renderer_delete.toggled.connect ((renderer, path) => {
remove_attachment (path);
});
+ attachments = new Gtk.ListStore (1, typeof (string));
att_view.set_model (attachments);
att_view.set_no_show_all (true);
att_view.key_press_event.connect ((event) => {
if (event.keyval == Gdk.keyval_from_name ("Delete")) {
- var paths = att_view.get_selection ().get_selected_rows (null);
+ var paths = att_view.get_selected_items ();
var path = paths.nth_data (0);
if (path != null)
remove_attachment (path.to_string ());
@@ -589,7 +628,7 @@ public class Postler.Composer : Gtk.Window {
}
return false;
});
- shelf.pack_start (att_view, true, true, 0);
+ shelf.pack_start (att_view, false, false, 0);
shelf.show_all ();
Gtk.drag_dest_set (content, Gtk.DestDefaults.ALL, {}, Gdk.DragAction.COPY);
diff --git a/postler/postler-viewer.vala b/postler/postler-viewer.vala
index 3f9b40b..37bf7a5 100644
--- a/postler/postler-viewer.vala
+++ b/postler/postler-viewer.vala
@@ -78,7 +78,7 @@ public class Postler.Viewer : Gtk.VBox {
content.display_part (content.current_part);
}
- static string icon_name_for_mime_type (string mime_type, Gtk.Widget widget) {
+ internal static string icon_name_for_mime_type (string mime_type, Gtk.Widget widget) {
var icon_theme = Gtk.IconTheme.get_for_screen (widget.get_screen ());
var parts = mime_type.split ("/", 2);
string icon_name = parts[0] + "-" + parts[1];
More information about the Xfce4-commits
mailing list