static void fm_places_view_init(FmPlacesView *self) { GtkTreeViewColumn* col; GtkCellRenderer* renderer; GtkTargetList* targets; GdkPixbuf* pix; guint handler; if(G_UNLIKELY(!model)) { model = fm_places_model_new(); g_object_add_weak_pointer(G_OBJECT(model), &model); } else g_object_ref(model); gtk_tree_view_set_model(GTK_TREE_VIEW(self), model); g_object_unref(model); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(self), FALSE); gtk_tree_view_set_row_separator_func(GTK_TREE_VIEW(self), (GtkTreeViewRowSeparatorFunc)sep_func, NULL, NULL ); col = gtk_tree_view_column_new(); renderer = fm_cell_renderer_pixbuf_new(); handler = g_signal_connect(fm_config, "changed::pane_icon_size", G_CALLBACK(on_renderer_icon_size_changed), renderer); g_object_weak_ref(G_OBJECT(renderer), (GDestroyNotify)on_cell_renderer_pixbuf_destroy, GUINT_TO_POINTER(handler)); fm_cell_renderer_pixbuf_set_fixed_size(FM_CELL_RENDERER_PIXBUF(renderer), fm_config->pane_icon_size, fm_config->pane_icon_size); gtk_tree_view_column_pack_start( col, renderer, FALSE ); gtk_tree_view_column_set_attributes( col, renderer, "pixbuf", FM_PLACES_MODEL_COL_ICON, NULL ); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start( col, renderer, TRUE ); g_object_set(renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); gtk_tree_view_column_set_attributes( col, renderer, "text", FM_PLACES_MODEL_COL_LABEL, NULL ); renderer = gtk_cell_renderer_pixbuf_new(); self->mount_indicator_renderer = renderer; gtk_tree_view_column_pack_start( col, renderer, FALSE ); gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(col), renderer, fm_places_model_mount_indicator_cell_data_func, NULL, NULL); gtk_tree_view_append_column ( GTK_TREE_VIEW(self), col ); gtk_tree_view_enable_model_drag_source(GTK_TREE_VIEW(self), GDK_BUTTON1_MASK, dnd_src_targets, G_N_ELEMENTS(dnd_src_targets), GDK_ACTION_MOVE); gtk_drag_dest_set(self, 0, fm_default_dnd_dest_targets, N_FM_DND_DEST_DEFAULT_TARGETS, GDK_ACTION_COPY|GDK_ACTION_MOVE|GDK_ACTION_LINK|GDK_ACTION_ASK); targets = gtk_drag_dest_get_target_list((GtkWidget*)self); /* add our own targets */ gtk_target_list_add_table(targets, dnd_dest_targets, G_N_ELEMENTS(dnd_dest_targets)); self->dnd_dest = fm_dnd_dest_new((GtkWidget*)self); g_signal_connect(self->dnd_dest, "files_dropped", G_CALLBACK(on_dnd_dest_files_dropped), self); }
static void set_icon_size(FmFolderView* fv, guint icon_size) { FmCellRendererPixbuf* render = (FmCellRendererPixbuf*)fv->renderer_pixbuf; fm_cell_renderer_pixbuf_set_fixed_size(render, icon_size, icon_size); if(!fv->model) return; fm_folder_model_set_icon_size(FM_FOLDER_MODEL(fv->model), icon_size); if( fv->mode != FM_FV_LIST_VIEW ) /* this is an ExoIconView */ { /* FIXME: reset ExoIconView item sizes */ } }
static void fm_places_view_init(FmPlacesView *self) { GtkTreeViewColumn* col; GtkCellRenderer* renderer; GtkTargetList* targets; GdkPixbuf* pix; guint handler; init_model(); gtk_tree_view_set_model(GTK_TREE_VIEW(self), model); g_object_unref(model); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(self), FALSE); gtk_tree_view_set_row_separator_func(GTK_TREE_VIEW(self), (GtkTreeViewRowSeparatorFunc)sep_func, NULL, NULL ); col = gtk_tree_view_column_new(); renderer = fm_cell_renderer_pixbuf_new(); handler = g_signal_connect(fm_config, "changed::pane_icon_size", G_CALLBACK(on_renderer_icon_size_changed), renderer); g_object_weak_ref(G_OBJECT(renderer), (GDestroyNotify)on_cell_renderer_pixbuf_destroy, GUINT_TO_POINTER(handler)); fm_cell_renderer_pixbuf_set_fixed_size(FM_CELL_RENDERER_PIXBUF(renderer), fm_config->pane_icon_size, fm_config->pane_icon_size); gtk_tree_view_column_pack_start( col, renderer, FALSE ); gtk_tree_view_column_set_attributes( col, renderer, "pixbuf", COL_ICON, NULL ); renderer = gtk_cell_renderer_text_new(); // g_signal_connect( renderer, "edited", G_CALLBACK(on_bookmark_edited), view ); gtk_tree_view_column_pack_start( col, renderer, TRUE ); gtk_tree_view_column_set_attributes( col, renderer, "text", COL_LABEL, NULL ); gtk_tree_view_append_column ( GTK_TREE_VIEW(self), col ); /* gtk_drag_source_set(fv->view, GDK_BUTTON1_MASK, fm_default_dnd_src_targets, N_FM_DND_SRC_DEFAULT_TARGETS, GDK_ACTION_COPY|GDK_ACTION_MOVE|GDK_ACTION_LINK|GDK_ACTION_ASK); fm_dnd_src_set_widget(fv->dnd_src, fv->view); */ gtk_drag_dest_set(self, 0, fm_default_dnd_dest_targets, N_FM_DND_DEST_DEFAULT_TARGETS, GDK_ACTION_COPY|GDK_ACTION_MOVE|GDK_ACTION_LINK|GDK_ACTION_ASK); targets = gtk_drag_dest_get_target_list((GtkWidget*)self); /* add our own targets */ gtk_target_list_add_table(targets, dnd_dest_targets, G_N_ELEMENTS(dnd_dest_targets)); self->dnd_dest = fm_dnd_dest_new((GtkWidget*)self); g_signal_connect(self->dnd_dest, "query-info", G_CALLBACK(on_dnd_dest_query_info), self); g_signal_connect(self->dnd_dest, "files_dropped", G_CALLBACK(on_dnd_dest_files_dropped), self); }
static void on_renderer_icon_size_changed(FmConfig* cfg, gpointer user_data) { FmCellRendererPixbuf* render = (FmCellRendererPixbuf*)user_data; fm_cell_renderer_pixbuf_set_fixed_size(render, fm_config->pane_icon_size, fm_config->pane_icon_size); }
static inline void create_list_view(FmFolderView* fv, GList* sels) { GtkTreeViewColumn* col; GtkTreeSelection* ts; GList *l; GtkCellRenderer* render; FmFolderModel* model = (FmFolderModel*)fv->model; int icon_size = 0; fv->view = exo_tree_view_new(); render = fm_cell_renderer_pixbuf_new(); fv->renderer_pixbuf = render; // fv->icon_size_changed_handler = g_signal_connect(fm_config, "changed::small_icon_size", G_CALLBACK(on_small_icon_size_changed), fv); icon_size = fm_config->small_icon_size; fm_cell_renderer_pixbuf_set_fixed_size(FM_CELL_RENDERER_PIXBUF(fv->renderer_pixbuf), icon_size, icon_size); if(model) fm_folder_model_set_icon_size(model, icon_size); gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(fv->view), TRUE); col = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(col, _("Name")); gtk_tree_view_column_pack_start(col, render, FALSE); gtk_tree_view_column_set_attributes(col, render, "pixbuf", COL_FILE_ICON, "info", COL_FILE_INFO, NULL); render = gtk_cell_renderer_text_new(); g_object_set(render, "ellipsize", PANGO_ELLIPSIZE_END, NULL); gtk_tree_view_column_pack_start(col, render, TRUE); gtk_tree_view_column_set_attributes(col, render, "text", COL_FILE_NAME, NULL); gtk_tree_view_column_set_sort_column_id(col, COL_FILE_NAME); gtk_tree_view_column_set_expand(col, TRUE); gtk_tree_view_column_set_resizable(col, TRUE); gtk_tree_view_column_set_sizing(col, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_fixed_width(col, 200); gtk_tree_view_append_column((GtkTreeView*)fv->view, col); /* only this column is activable */ exo_tree_view_set_activable_column((ExoTreeView*)fv->view, col); render = gtk_cell_renderer_text_new(); col = gtk_tree_view_column_new_with_attributes(_("Description"), render, "text", COL_FILE_DESC, NULL); gtk_tree_view_column_set_resizable(col, TRUE); gtk_tree_view_column_set_sort_column_id(col, COL_FILE_DESC); gtk_tree_view_append_column((GtkTreeView*)fv->view, col); render = gtk_cell_renderer_text_new(); g_object_set(render, "xalign", 1.0, NULL); col = gtk_tree_view_column_new_with_attributes(_("Size"), render, "text", COL_FILE_SIZE, NULL); gtk_tree_view_column_set_sort_column_id(col, COL_FILE_SIZE); gtk_tree_view_column_set_resizable(col, TRUE); gtk_tree_view_append_column((GtkTreeView*)fv->view, col); render = gtk_cell_renderer_text_new(); col = gtk_tree_view_column_new_with_attributes(_("Modified"), render, "text", COL_FILE_MTIME, NULL); gtk_tree_view_column_set_resizable(col, TRUE); gtk_tree_view_column_set_sort_column_id(col, COL_FILE_MTIME); gtk_tree_view_append_column((GtkTreeView*)fv->view, col); gtk_tree_view_set_search_column((GtkTreeView*)fv->view, COL_FILE_NAME); gtk_tree_view_set_rubber_banding((GtkTreeView*)fv->view, TRUE); exo_tree_view_set_single_click((ExoTreeView*)fv->view, fm_config->single_click); exo_tree_view_set_single_click_timeout((ExoTreeView*)fv->view, SINGLE_CLICK_TIMEOUT); ts = gtk_tree_view_get_selection((GtkTreeView*)fv->view); g_signal_connect(fv->view, "row-activated", G_CALLBACK(on_tree_view_row_activated), fv); g_signal_connect(ts, "changed", G_CALLBACK(on_sel_changed), fv); /*cancel_pending_row_activated(fv);*/ /* FIXME: is this needed? */ gtk_tree_view_set_model((GtkTreeView*)fv->view, fv->model); gtk_tree_selection_set_mode(ts, fv->sel_mode); for(l = sels;l;l=l->next) gtk_tree_selection_select_path(ts, (GtkTreePath*)l->data); }
static inline void create_icon_view(FmFolderView* fv, GList* sels) { GtkTreeViewColumn* col; GtkTreeSelection* ts; GList *l; GtkCellRenderer* render; FmFolderModel* model = (FmFolderModel*)fv->model; int icon_size = 0; fv->view = exo_icon_view_new(); render = fm_cell_renderer_pixbuf_new(); fv->renderer_pixbuf = render; g_object_set((GObject*)render, "follow-state", TRUE, NULL ); gtk_cell_layout_pack_start((GtkCellLayout*)fv->view, render, TRUE); gtk_cell_layout_add_attribute((GtkCellLayout*)fv->view, render, "pixbuf", COL_FILE_ICON ); gtk_cell_layout_add_attribute((GtkCellLayout*)fv->view, render, "info", COL_FILE_INFO ); if(fv->mode == FM_FV_COMPACT_VIEW) /* compact view */ { // fv->icon_size_changed_handler = g_signal_connect(fm_config, "changed::small_icon_size", G_CALLBACK(on_small_icon_size_changed), fv); icon_size = fm_config->small_icon_size; fm_cell_renderer_pixbuf_set_fixed_size(FM_CELL_RENDERER_PIXBUF(fv->renderer_pixbuf), icon_size, icon_size); if(model) fm_folder_model_set_icon_size(model, icon_size); render = fm_cell_renderer_text_new(); g_object_set((GObject*)render, "xalign", 1.0, /* FIXME: why this needs to be 1.0? */ "yalign", 0.5, NULL ); exo_icon_view_set_layout_mode( (ExoIconView*)fv->view, EXO_ICON_VIEW_LAYOUT_COLS ); exo_icon_view_set_orientation( (ExoIconView*)fv->view, GTK_ORIENTATION_HORIZONTAL ); } else /* big icon view or thumbnail view */ { if(fv->mode == FM_FV_ICON_VIEW) { fv->icon_size_changed_handler = g_signal_connect(fm_config, "changed::big_icon_size", G_CALLBACK(on_big_icon_size_changed), fv); icon_size = fm_config->big_icon_size; fm_cell_renderer_pixbuf_set_fixed_size(FM_CELL_RENDERER_PIXBUF(fv->renderer_pixbuf), icon_size, icon_size); if(model) fm_folder_model_set_icon_size(model, icon_size); render = fm_cell_renderer_text_new(); /* FIXME: set the sizes of cells according to iconsize */ g_object_set((GObject*)render, "wrap-mode", PANGO_WRAP_WORD_CHAR, "wrap-width", 90, "alignment", PANGO_ALIGN_CENTER, "xalign", 0.5, "yalign", 0.0, NULL ); exo_icon_view_set_column_spacing( (ExoIconView*)fv->view, 4 ); exo_icon_view_set_item_width ( (ExoIconView*)fv->view, 110 ); } else { fv->icon_size_changed_handler = g_signal_connect(fm_config, "changed::thumbnail_size", G_CALLBACK(on_thumbnail_size_changed), fv); icon_size = fm_config->thumbnail_size; fm_cell_renderer_pixbuf_set_fixed_size(FM_CELL_RENDERER_PIXBUF(fv->renderer_pixbuf), icon_size, icon_size); if(model) fm_folder_model_set_icon_size(model, icon_size); render = fm_cell_renderer_text_new(); /* FIXME: set the sizes of cells according to iconsize */ g_object_set((GObject*)render, "wrap-mode", PANGO_WRAP_WORD_CHAR, "wrap-width", 180, "alignment", PANGO_ALIGN_CENTER, "xalign", 0.5, "yalign", 0.0, NULL ); exo_icon_view_set_column_spacing( (ExoIconView*)fv->view, 8 ); exo_icon_view_set_item_width ( (ExoIconView*)fv->view, 200 ); } } gtk_cell_layout_pack_start((GtkCellLayout*)fv->view, render, TRUE); gtk_cell_layout_add_attribute((GtkCellLayout*)fv->view, render, "text", COL_FILE_NAME ); exo_icon_view_set_item_width((ExoIconView*)fv->view, 96); exo_icon_view_set_search_column((ExoIconView*)fv->view, COL_FILE_NAME); g_signal_connect(fv->view, "item-activated", G_CALLBACK(on_icon_view_item_activated), fv); g_signal_connect(fv->view, "selection-changed", G_CALLBACK(on_sel_changed), fv); exo_icon_view_set_model((ExoIconView*)fv->view, fv->model); exo_icon_view_set_selection_mode((ExoIconView*)fv->view, fv->sel_mode); exo_icon_view_set_single_click((ExoIconView*)fv->view, fm_config->single_click); exo_icon_view_set_single_click_timeout((ExoIconView*)fv->view, SINGLE_CLICK_TIMEOUT); for(l = sels;l;l=l->next) exo_icon_view_select_path((ExoIconView*)fv->view, (GtkTreePath*)l->data); }