Esempio n. 1
0
/**
 * Queue a bitzi queries from the search context menu
 */
void
on_popup_search_metadata_activate(GtkMenuItem *unused_menuitem,
	gpointer unused_udata)
{
    GList *node_list;
	GSList *data_list;
    search_t *search;
	guint32 bitzi_debug;

	(void) unused_menuitem;
	(void) unused_udata;

    search = search_gui_get_current_search();
    g_assert(search != NULL);

    gtk_clist_freeze(GTK_CLIST(search->tree));

	node_list = g_list_copy(GTK_CLIST(search->tree)->selection);
	data_list = search_cb_collect_ctree_data(GTK_CTREE(search->tree),
					node_list, gui_record_sha1_eq);

	/* Make sure the column is actually visible. */
	{
		static const gint min_width = 80;
		GtkCList *clist = GTK_CLIST(search->tree);

    	gtk_clist_set_column_visibility(clist, c_sr_meta, TRUE);
		if (clist->column[c_sr_meta].width < min_width)
    		gtk_clist_set_column_width(clist, c_sr_meta, min_width);
	}
	
	/* Queue up our requests */
    gnet_prop_get_guint32_val(PROP_BITZI_DEBUG, &bitzi_debug);
	if (bitzi_debug > 10)
		g_debug("on_popup_search_metadata_activate: %d items, %p",
			  g_slist_position(data_list, g_slist_last(data_list)) + 1,
			  cast_to_gconstpointer(data_list));

	G_SLIST_FOREACH(data_list, search_gui_queue_bitzi_by_sha1);

	gtk_clist_thaw(GTK_CLIST(search->tree));
	g_slist_free(data_list);
	g_list_free(node_list);
}
Esempio n. 2
0
GtkWidget *
create_file_view(FileView *view)
{
  GtkWidget *vbox;
  GtkWidget *hbox;
  GtkWidget *menu_bar;
  GtkWidget *button;
  GtkWidget *pixmapwid;
  GdkPixmap *pixmap;
  GdkBitmap *mask;
  GtkStyle *style;
  GdkFont *font;
  GtkWidget *sw;
  gint i;

  /* Top Pane */
  vbox = gtk_vbox_new(FALSE, 0);
  gtk_widget_show(vbox);

  menu_bar = create_filelist_menu_bar(view);
  gtk_widget_show(menu_bar);
  gtk_box_pack_start(GTK_BOX(vbox), menu_bar, FALSE, FALSE, 0);

  hbox = gtk_hbox_new(FALSE, 0);
  gtk_widget_show(hbox);

  /* Show/Hide Button */
  if (view == &app.right_view)
    button = gtk_button_new_with_label("<");
  else
    button = gtk_button_new_with_label(">");
  GTK_WIDGET_UNSET_FLAGS(button, GTK_CAN_FOCUS);
  gtk_signal_connect(GTK_OBJECT(button), "button_press_event", 
                    GTK_SIGNAL_FUNC(show_hide_file_view_cb), view);
  gtk_tooltips_set_tip(GTK_TOOLTIPS(app.tooltips), button,
                       _("Left Click: Maximize/Minimize File View\n"
                         "Right Click: Sync Dirs"), NULL);
  gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
  gtk_widget_show(button);

  /* Hidden files toggle button */
  view->hidden_toggle = gtk_toggle_button_new_with_label("H");
  GTK_WIDGET_UNSET_FLAGS(view->hidden_toggle, GTK_CAN_FOCUS);
  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(view->hidden_toggle),
                               view->show_hidden);
  gtk_signal_connect(GTK_OBJECT(view->hidden_toggle), "toggled",
                     GTK_SIGNAL_FUNC(toggle_show_hidden_cb), view);
  gtk_tooltips_set_tip(GTK_TOOLTIPS(app.tooltips), view->hidden_toggle,
                       _("Show/Hide hidden files"), NULL);
  gtk_box_pack_start(GTK_BOX(hbox), view->hidden_toggle, FALSE, FALSE, 0);
  gtk_widget_show(view->hidden_toggle);

  /* Dir Entry Combo */
  view->dir_entry = gtk_combo_new();
  gtk_combo_disable_activate(GTK_COMBO(view->dir_entry));
  gtk_combo_set_use_arrows_always(GTK_COMBO(view->dir_entry), TRUE);
  gtk_combo_set_case_sensitive(GTK_COMBO(view->dir_entry), TRUE);
  gtk_signal_connect(GTK_OBJECT(GTK_COMBO(view->dir_entry)->entry), 
              "activate", GTK_SIGNAL_FUNC(dir_entry_cb), view);
  gtk_signal_connect(GTK_OBJECT(GTK_COMBO(view->dir_entry)->popwin),
              "hide", GTK_SIGNAL_FUNC(dir_popwin_cb), view);
  gtk_box_pack_start(GTK_BOX(hbox), view->dir_entry, TRUE, TRUE, 0);
  gtk_widget_show(view->dir_entry);

  /* Up Dir Button */
  button = gtk_button_new();
  GTK_WIDGET_UNSET_FLAGS(button, GTK_CAN_FOCUS);
  gtk_signal_connect(GTK_OBJECT(button), "button_press_event",
                     GTK_SIGNAL_FUNC(updir_click_cb), view);
  gtk_tooltips_set_tip(GTK_TOOLTIPS(app.tooltips), button,
                       _("Left Click: Up Dir   Right Click: Home"), NULL);
  gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
  gtk_widget_show(button);

  style = gtk_widget_get_style(app.main_window);
  pixmap = gdk_pixmap_create_from_xpm_d(app.main_window->window, &mask, 
                                        &style->bg[GTK_STATE_NORMAL], 
                                        icon_dirparent_xpm);
  pixmapwid = gtk_pixmap_new(pixmap, mask);
  gtk_container_add(GTK_CONTAINER(button), pixmapwid);
  gtk_widget_show(pixmapwid);

  gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);

  sw = gtk_scrolled_window_new(NULL, NULL);
  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
          GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
  gtk_scrolled_window_set_placement(GTK_SCROLLED_WINDOW(sw), cfg.scrollbar_pos);
  gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
  gtk_widget_show(sw);

  /* File List */
  view->clist = gtk_clist_new(MAX_COLUMNS);
  for (i = 0; i < MAX_COLUMNS; i++)
  {
    GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
    GtkWidget *label = gtk_label_new(all_columns[i].title);

    view->sort_arrows[i] = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_IN);
    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0);
    gtk_box_pack_end(GTK_BOX(hbox), view->sort_arrows[i], FALSE, TRUE, 0);

    gtk_widget_show(label);
    gtk_widget_show(hbox);
    gtk_clist_set_column_widget(GTK_CLIST(view->clist), i, hbox);
    GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(view->clist)->column[i].button,
                           GTK_CAN_FOCUS);
  } 
  gtk_clist_column_titles_show(GTK_CLIST(view->clist));
  gtk_clist_set_shadow_type(GTK_CLIST(view->clist), GTK_SHADOW_ETCHED_IN);
  gtk_clist_set_selection_mode(GTK_CLIST(view->clist), GTK_SELECTION_EXTENDED);
  gtk_clist_set_use_drag_icons(GTK_CLIST(view->clist), TRUE);
  gtk_clist_set_row_height(GTK_CLIST(view->clist), 0);
  
  font = gdk_font_load(cfg.list_font);
  if (font != NULL)
  {
    style = gtk_style_copy(gtk_widget_get_style(view->clist));
    style->font = font;
    gtk_widget_set_style(view->clist, style);
  }

  for (i = 0; i < MAX_COLUMNS; i++)
  {
    gtk_clist_set_column_width(GTK_CLIST(view->clist), i, all_columns[i].size);
    gtk_clist_set_column_visibility(GTK_CLIST(view->clist), i,
                                    all_columns[i].is_visible);
  }

  gtk_signal_connect(GTK_OBJECT(view->clist), "select_row",
                     GTK_SIGNAL_FUNC(select_row_cb), view);
  gtk_signal_connect(GTK_OBJECT(view->clist), "button_press_event",
                     GTK_SIGNAL_FUNC(mouse_click_cb), view);
  gtk_signal_connect(GTK_OBJECT(view->clist), "key_press_event",
                     GTK_SIGNAL_FUNC(file_list_key_press_cb), view);
  gtk_signal_connect(GTK_OBJECT(view->clist), "click_column",
                     GTK_SIGNAL_FUNC(column_button_cb), view);
  gtk_signal_connect(GTK_OBJECT(view->clist), "drag_data_get",
                     GTK_SIGNAL_FUNC(clist_drag_data_get), view);
  gtk_signal_connect(GTK_OBJECT(view->clist), "drag_motion",
                     GTK_SIGNAL_FUNC(clist_drag_motion), view);
  gtk_signal_connect(GTK_OBJECT(view->clist), "drag_leave",
                     GTK_SIGNAL_FUNC(clist_drag_leave), view);
  gtk_signal_connect(GTK_OBJECT(view->clist), "drag_data_received",
                     GTK_SIGNAL_FUNC(clist_drag_data_received), view);
  gtk_drag_dest_set(view->clist, GTK_DEST_DEFAULT_MOTION |
    GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP, target_table,
    n_targets, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK |
    GDK_ACTION_ASK);

  gtk_container_add(GTK_CONTAINER(sw), view->clist);
  gtk_widget_show(view->clist);

  /* Set the CLIST_COLOR for resetting from the DRAG_HILIGHT color */
  {
    GtkStyle *style = gtk_widget_get_style(view->clist);
    CLIST_COLOR.red   = style->base[GTK_STATE_NORMAL].red;
    CLIST_COLOR.green = style->base[GTK_STATE_NORMAL].green;
    CLIST_COLOR.blue  = style->base[GTK_STATE_NORMAL].blue;
  }

  return vbox;
}
Esempio n. 3
0
/***********************************************************************
 * Create                                                              *
 ***********************************************************************/
GtkWidget *widget_table_create(
	AttributeSet *Attr, tag_attr *attr, gint Type)
{
	GList            *element;
	GtkWidget        *widget;
	gchar            *value;
	gint              column;
	gint              sort_function;
	list_t           *sliced;

#ifdef DEBUG_TRANSITS
	fprintf(stderr, "%s(): Entering.\n", __func__);
#endif

#if !GTK_CHECK_VERSION(3,0,0)	/* gtk3: Deprecated in gtk2 and now gone */
	if (attributeset_is_avail(Attr, ATTR_LABEL)) {
		sliced = linecutter(g_strdup(attributeset_get_first(
			&element, Attr, ATTR_LABEL)), '|');
		widget = gtk_clist_new_with_titles(sliced->n_lines,
			sliced->line);
		if (sliced) list_t_free(sliced);	/* Free linecutter memory */
	} else {
		widget = gtk_clist_new(1);	/* 1 column */
	}

	if (attr) {
		/* Get sort-function (custom) */
		if ((value = get_tag_attribute(attr, "sort-function"))) {
			sort_function = atoi(value);
			if (sort_function == 1) {
				gtk_clist_set_compare_func(GTK_CLIST(widget), widget_table_natcmp);
			} else if (sort_function == 2) {
				gtk_clist_set_compare_func(GTK_CLIST(widget), widget_table_natcasecmp);
			}
		}
		/* Get sort-type (auto-sort will require this preset) */
		if ((value = get_tag_attribute(attr, "sort-type"))) {
			gtk_clist_set_sort_type(GTK_CLIST(widget), atoi(value));
		}
		/* Get sort-column (custom) */
		if ((value = get_tag_attribute(attr, "sort-column"))) {
			gtk_clist_set_sort_column(GTK_CLIST(widget), atoi(value));
		}
		/* Get auto-sort (custom) */
		if ((value = get_tag_attribute(attr, "auto-sort")) &&
			((strcasecmp(value, "true") == 0) || (strcasecmp(value, "yes") == 0) ||
			(atoi(value) == 1))) {
			gtk_clist_set_auto_sort(GTK_CLIST(widget), TRUE);
		} else {
			gtk_clist_set_auto_sort(GTK_CLIST(widget), FALSE);
		}
		/* Get column-header-active (custom) */
		if ((value = get_tag_attribute(attr, "column-header-active"))) {
			sliced = linecutter(g_strdup(value), '|');
			for (column = 0; column < sliced->n_lines; column++) {
				if ((strcasecmp(sliced->line[column], "true") == 0) ||
					(strcasecmp(sliced->line[column], "yes") == 0) ||
					(atoi(sliced->line[column]) == 1)) {
					gtk_clist_column_title_active(GTK_CLIST(widget), column);
				} else {
					gtk_clist_column_title_passive(GTK_CLIST(widget), column);
				}
			}
			if (sliced) list_t_free(sliced);	/* Free linecutter memory */
		}
		/* Get column-visible (custom) */
		if ((value = get_tag_attribute(attr, "column-visible"))) {
			sliced = linecutter(g_strdup(value), '|');
			for (column = 0; column < sliced->n_lines; column++) {
				if ((strcasecmp(sliced->line[column], "true") == 0) ||
					(strcasecmp(sliced->line[column], "yes") == 0) ||
					(atoi(sliced->line[column]) == 1)) {
					gtk_clist_set_column_visibility(GTK_CLIST(widget),
						column, TRUE);
				} else {
					gtk_clist_set_column_visibility(GTK_CLIST(widget),
						column, FALSE);
				}
			}
			if (sliced) list_t_free(sliced);	/* Free linecutter memory */
		}
	}
#else
	fprintf(stderr, "%s(): The table (GtkCList) widget has been removed from GTK+ 3 and tree is recommended as a replacement.\n", __func__);
	exit(EXIT_FAILURE);
#endif

#ifdef DEBUG_TRANSITS
	fprintf(stderr, "%s(): Exiting.\n", __func__);
#endif

	return widget;
}