Ejemplo n.º 1
0
// Create and bind the tree model to the tree view for the queue list
// Also, connect up the signal that lets us know the selection has changed
static void
bind_queue_tree_model (signal_user_data_t *ud)
{
	GtkCellRenderer *cell, *textcell;
	GtkTreeViewColumn *column;
	GtkTreeStore *treestore;
	GtkTreeView  *treeview;
	GtkTreeSelection *selection;
	GtkTargetEntry SrcEntry;
	SrcEntry.target = "DATA";
	SrcEntry.flags = GTK_TARGET_SAME_WIDGET;

	g_debug("bind_queue_tree_model ()\n");
	treeview = GTK_TREE_VIEW(GHB_WIDGET (ud->builder, "queue_list"));
	selection = gtk_tree_view_get_selection (treeview);
	treestore = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
	gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(treestore));

	column = gtk_tree_view_column_new();
	gtk_tree_view_column_set_title (column, _("Job Information"));
	cell = gtk_cell_renderer_pixbuf_new();
	g_object_set(cell, "yalign", 0.0, NULL);
	gtk_tree_view_column_pack_start (column, cell, FALSE);
	gtk_tree_view_column_add_attribute (column, cell, "icon-name", 0);
	textcell = gtk_cell_renderer_text_new();
	g_object_set(textcell, "wrap-mode", PANGO_WRAP_CHAR, NULL);
	g_object_set(textcell, "wrap-width", 500, NULL);
	gtk_tree_view_column_pack_start (column, textcell, TRUE);
	gtk_tree_view_column_add_attribute (column, textcell, "markup", 1);
    gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
	gtk_tree_view_column_set_expand (column, TRUE);
	gtk_tree_view_column_set_max_width (column, 550);

	cell = custom_cell_renderer_button_new();
	g_object_set(cell, "yalign", 0.0, NULL);
	column = gtk_tree_view_column_new_with_attributes(
									_(""), cell, "icon-name", 2, NULL);
	gtk_tree_view_column_set_min_width (column, 24);
    gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));

	gtk_tree_view_enable_model_drag_dest (treeview, &SrcEntry, 1, 
											GDK_ACTION_MOVE);
	gtk_tree_view_enable_model_drag_source (treeview, GDK_BUTTON1_MASK, 
											&SrcEntry, 1, GDK_ACTION_MOVE);

	g_signal_connect(selection, "changed", queue_list_selection_changed_cb, ud);
	g_signal_connect(cell, "clicked", queue_remove_clicked_cb, ud);
	g_signal_connect(treeview, "size-allocate", queue_list_size_allocate_cb, 
						textcell);
	g_signal_connect(treeview, "drag_data_received", queue_drag_cb, ud);
	g_signal_connect(treeview, "drag_motion", queue_drag_motion_cb, ud);

	// Work around silly treeview display bug.  If the treeview
	// hasn't been shown yet, the width request doesn't seem
	// to work right.  Cells get badly formatted.
	GtkWidget *widget = GHB_WIDGET (ud->builder, "queue_window");
	gtk_widget_show (widget);
	gtk_widget_hide (widget);
}
Ejemplo n.º 2
0
// Create and bind the tree model to the tree view for the audio track list
// Also, connect up the signal that lets us know the selection has changed
static void
bind_audio_tree_model(signal_user_data_t *ud)
{
    GtkCellRenderer *source_cell;
    GtkCellRenderer *arrow_cell;
    GtkCellRenderer *output_cell;
    GtkCellRenderer *edit_cell;
    GtkCellRenderer *delete_cell;
    GtkTreeViewColumn *column;
    GtkTreeStore *treestore;
    GtkTreeView  *treeview;
    GtkTreeSelection *selection;

    g_debug("bind_audio_tree_model()\n");
    treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "audio_list_view"));
    selection = gtk_tree_view_get_selection(treeview);
    treestore = gtk_tree_store_new(6, G_TYPE_STRING, G_TYPE_STRING,
                                      G_TYPE_STRING, G_TYPE_STRING,
                                      G_TYPE_STRING, G_TYPE_FLOAT);
    gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(treestore));

    source_cell = gtk_cell_renderer_text_new();
    arrow_cell = gtk_cell_renderer_text_new();
    output_cell = gtk_cell_renderer_text_new();
    edit_cell = custom_cell_renderer_button_new();
    delete_cell = custom_cell_renderer_button_new();

    column = gtk_tree_view_column_new();
    gtk_tree_view_column_set_spacing(column, 12);
    gtk_tree_view_column_set_title(column, _("Track Information"));
    gtk_tree_view_column_pack_start(column, source_cell, FALSE);
    gtk_tree_view_column_add_attribute(column, source_cell, "markup", 0);
    gtk_tree_view_column_add_attribute(column, source_cell, "yalign", 5);
    gtk_tree_view_column_pack_start(column, arrow_cell, FALSE);
    gtk_tree_view_column_add_attribute(column, arrow_cell, "text", 1);
    gtk_tree_view_column_pack_start(column, output_cell, TRUE);
    gtk_tree_view_column_add_attribute(column, output_cell, "markup", 2);
    gtk_tree_view_column_add_attribute(column, output_cell, "yalign", 5);
    gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
    gtk_tree_view_column_set_expand(column, TRUE);
    gtk_tree_view_column_set_max_width(column, 400);

    column = gtk_tree_view_column_new_with_attributes(
                                    _(""), edit_cell, "icon-name", 3, NULL);
    //gtk_tree_view_column_set_min_width(column, 24);
    gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));

    column = gtk_tree_view_column_new_with_attributes(
                                    _(""), delete_cell, "icon-name", 4, NULL);
    //gtk_tree_view_column_set_min_width(column, 24);
    gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));

    g_signal_connect(selection, "changed", audio_list_selection_changed_cb, ud);
    g_signal_connect(edit_cell, "clicked", audio_edit_clicked_cb, ud);
    g_signal_connect(delete_cell, "clicked", audio_remove_clicked_cb, ud);

    g_debug("Done\n");
}
Ejemplo n.º 3
0
// Create and bind the tree model to the tree view for the queue list
// Also, connect up the signal that lets us know the selection has changed
static void
bind_queue_tree_model(signal_user_data_t *ud)
{
    GtkCellRenderer *cell, *textcell;
    GtkTreeViewColumn *column;
    GtkTreeStore *treestore;
    GtkTreeView  *treeview;
    GtkTreeSelection *selection;
    GtkTargetEntry SrcEntry;
    SrcEntry.target = "DATA";
    SrcEntry.flags = GTK_TARGET_SAME_WIDGET;

    g_debug("bind_queue_tree_model()\n");
    treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "queue_list"));
    selection = gtk_tree_view_get_selection(treeview);
    treestore = gtk_tree_store_new(5, G_TYPE_BOOLEAN, G_TYPE_STRING,
                                      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
    gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(treestore));

    column = gtk_tree_view_column_new();
    gtk_tree_view_column_set_title(column, _("Job Information"));
    cell = gtk_cell_renderer_spinner_new();
    gtk_tree_view_column_pack_start(column, cell, FALSE);
    gtk_tree_view_column_add_attribute(column, cell, "active", 0);
    gtk_tree_view_column_add_attribute(column, cell, "pulse", 4);
    cell = gtk_cell_renderer_pixbuf_new();
    gtk_tree_view_column_pack_start(column, cell, FALSE);
    gtk_tree_view_column_add_attribute(column, cell, "icon-name", 1);
    textcell = gtk_cell_renderer_text_new();
    g_object_set(textcell, "wrap-mode", PANGO_WRAP_CHAR, NULL);
    g_object_set(textcell, "wrap-width", 500, NULL);
    gtk_tree_view_column_pack_start(column, textcell, TRUE);
    gtk_tree_view_column_add_attribute(column, textcell, "markup", 2);
    gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
    gtk_tree_view_column_set_expand(column, TRUE);
    gtk_tree_view_column_set_max_width(column, 550);
    g_signal_connect(treeview, "size-allocate", queue_list_size_allocate_cb,
                        textcell);

    cell = custom_cell_renderer_button_new();
    column = gtk_tree_view_column_new_with_attributes(
                                    _(""), cell, "icon-name", 3, NULL);
    gtk_tree_view_column_set_min_width(column, 24);
    gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));

    gtk_tree_view_enable_model_drag_dest(treeview, &SrcEntry, 1,
                                            GDK_ACTION_MOVE);
    gtk_tree_view_enable_model_drag_source(treeview, GDK_BUTTON1_MASK,
                                            &SrcEntry, 1, GDK_ACTION_MOVE);

    g_signal_connect(selection, "changed", queue_list_selection_changed_cb, ud);
    g_signal_connect(cell, "clicked", queue_remove_clicked_cb, ud);
    g_signal_connect(treeview, "drag_data_received", queue_drag_cb, ud);
    g_signal_connect(treeview, "drag_motion", queue_drag_motion_cb, ud);
}
Ejemplo n.º 4
0
static GtkTreeViewColumn *new_column(int type, int width, const char *title, ...){
    GtkTreeViewColumn *col;
    GtkCellRenderer *render=NULL;
    col=gtk_tree_view_column_new();
    switch(type){
    case 0:
	render=gtk_cell_renderer_text_new();
#if GTK_MAJOR_VERSION>=3 || GTK_MINOR_VERSION >= 18
	gtk_cell_renderer_set_padding(render, 1, 1);
	gtk_cell_renderer_set_alignment(render, 1, 0.5);
#endif
	break;
    case 1:
	render=gtk_cell_renderer_progress_new();
	break;
    case 2:
	render=gtk_cell_renderer_pixbuf_new();
	break;
    default:
	error("Invalid\n");
    }
    gtk_tree_view_column_set_title(col, title);
    gtk_tree_view_column_set_spacing(col, 2);
    gtk_tree_view_column_set_alignment(col, 1);
    gtk_tree_view_column_set_resizable(col, TRUE);
    //gtk_tree_view_column_set_clickable(col, TRUE);
    //gtk_tree_view_column_set_expand(col,FALSE);
    if(width>0){//Adjustable columns
	//Do not set min_width if set resizable.
	//gtk_tree_view_column_set_min_width(col, width);
	gtk_tree_view_column_set_expand(col,TRUE);
	//resizable is not good if expand
	gtk_tree_view_column_set_resizable(col, FALSE);
	if(type==0){
	    g_object_set(G_OBJECT(render),"ellipsize",PANGO_ELLIPSIZE_START,NULL);
	}
    }else if(width<0){/*max width*/
	gtk_tree_view_column_set_min_width(col,-width/10);
	gtk_tree_view_column_set_max_width(col,-width);
    }
    gtk_tree_view_column_pack_start(col,render,TRUE);
    va_list ap;
    va_start(ap, title);
    const char *att=NULL;
    while((att=va_arg(ap, const char *))){
	gtk_tree_view_column_add_attribute(col, render, att, va_arg(ap,int));
    }
    va_end(ap);
    return col;
}
static void
populate_jobs_list (PpJobsDialog *dialog)
{
  GtkTreeViewColumn *column;
  GtkCellRenderer   *renderer;
  GtkCellRenderer   *title_renderer;
  GtkTreeView       *treeview;

  treeview = (GtkTreeView*)
    gtk_builder_get_object (dialog->builder, "job-treeview");

  renderer = gtk_cell_renderer_text_new ();
  title_renderer = gtk_cell_renderer_text_new ();

  /* Translators: Name of column showing titles of print jobs */
  column = gtk_tree_view_column_new_with_attributes (_("Job Title"), title_renderer,
                                                     "text", JOB_TITLE_COLUMN, NULL);
  g_object_set (G_OBJECT (title_renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
  gtk_tree_view_column_set_fixed_width (column, 180);
  gtk_tree_view_column_set_min_width (column, 180);
  gtk_tree_view_column_set_max_width (column, 180);
  gtk_tree_view_append_column (treeview, column);

  /* Translators: Name of column showing statuses of print jobs */
  column = gtk_tree_view_column_new_with_attributes (_("Job State"), renderer,
                                                     "text", JOB_STATE_COLUMN, NULL);
  gtk_tree_view_column_set_expand (column, TRUE);
  gtk_tree_view_append_column (treeview, column);

  /* Translators: Name of column showing times of creation of print jobs */
  column = gtk_tree_view_column_new_with_attributes (_("Time"), renderer,
                                                     "text", JOB_CREATION_TIME_COLUMN, NULL);
  gtk_tree_view_column_set_expand (column, TRUE);
  gtk_tree_view_append_column (treeview, column);

  g_signal_connect (gtk_tree_view_get_selection (treeview),
                    "changed", G_CALLBACK (job_selection_changed_cb), dialog);

  update_jobs_list (dialog);
}
Ejemplo n.º 6
0
static void
history_dialog_setup_view (HistoryDialog *dialog)
{
	GtkTreeView *treeview = dialog->priv->treeview;
	GtkTreeStore *treestore;
	GtkCellRenderer *renderer;
        GtkTreeViewColumn *column;
	GtkTreeSelection *selection;

	/* set tree model */
        treestore = gtk_tree_store_new (8,
                                        G_TYPE_STRING,
                                        G_TYPE_STRING,
                                        G_TYPE_STRING,
                                        G_TYPE_STRING,
                                        G_TYPE_INT,
					G_TYPE_POINTER,
					G_TYPE_INT,
					G_TYPE_INT);
        dialog->priv->model = GTK_TREE_MODEL(treestore);
        gtk_tree_view_set_model (treeview, 
                                 GTK_TREE_MODEL (treestore));
        gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(treeview),
                                           TRUE);
        g_signal_connect (treeview, "row_activated",
                          G_CALLBACK (history_dialog_row_activated_cb), 
			  dialog);
	selection = gtk_tree_view_get_selection (treeview);
        gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);

	gtk_tree_view_enable_model_drag_source (treeview,
                                          	GDK_BUTTON1_MASK,
                                          	url_drag_types,
                                          	G_N_ELEMENTS (url_drag_types),
                                          	GDK_ACTION_COPY);
	g_signal_connect (G_OBJECT(treeview),
                          "drag_data_get",
                          G_CALLBACK(treeview_drag_data_get_cb),
                          dialog);
	
        renderer = gtk_cell_renderer_text_new ();

        gtk_tree_view_insert_column_with_attributes (treeview,
                                                     0, _("Title"),
                                                     renderer,
                                                     "text", 0,
                                                     NULL);
        column = gtk_tree_view_get_column (treeview, 0);
        gtk_tree_view_column_set_resizable (column, TRUE);
        gtk_tree_view_column_set_reorderable (column, TRUE);
	gtk_tree_view_column_set_min_width (column, 20);
	gtk_tree_view_column_set_max_width (column, 400);
        gtk_tree_view_column_set_sort_column_id (column, 0);

        gtk_tree_view_insert_column_with_attributes (treeview,
                                                     1, _("URL"),
                                                     renderer,
                                                     "text", 1,
                                                     NULL);
        column = gtk_tree_view_get_column (treeview, 1);
        gtk_tree_view_column_set_resizable (column, TRUE);
        gtk_tree_view_column_set_reorderable (column, TRUE);
	gtk_tree_view_column_set_min_width (column, 20);
	gtk_tree_view_column_set_max_width (column, 500);
        gtk_tree_view_column_set_sort_column_id (column, 1);

	gtk_tree_view_insert_column_with_attributes (treeview,
                                                     2, _("Last visited"),
                                                     renderer,
                                                     "text", 2,
                                                     NULL);
        column = gtk_tree_view_get_column (treeview, 2);
        gtk_tree_view_column_set_resizable (column, TRUE);
        gtk_tree_view_column_set_reorderable (column, TRUE);
        gtk_tree_view_column_set_sort_column_id (column, 6);

        gtk_tree_view_insert_column_with_attributes (treeview,
                                                     3, _("First visited"),
                                                     renderer,
                                                     "text", 3,
                                                     NULL);
        column = gtk_tree_view_get_column (treeview, 3);
        gtk_tree_view_column_set_resizable (column, TRUE);
        gtk_tree_view_column_set_reorderable (column, TRUE);
        gtk_tree_view_column_set_sort_column_id (column, 7);

        gtk_tree_view_insert_column_with_attributes (treeview,
                                                     4, _("Times visited"),
                                                     renderer,
                                                     "text", 4,
                                                     NULL);
        column = gtk_tree_view_get_column (treeview, 4);
        gtk_tree_view_column_set_resizable (column, TRUE);
        gtk_tree_view_column_set_reorderable (column, TRUE);
        gtk_tree_view_column_set_sort_column_id (column, 4);
}
Ejemplo n.º 7
0
// Create and bind the tree model to the tree view for the subtitle track list
// Also, connect up the signal that lets us know the selection has changed
static void
bind_subtitle_tree_model (signal_user_data_t *ud)
{
	GtkCellRenderer *cell;
	GtkTreeViewColumn *column;
	GtkListStore *treestore;
	GtkTreeView  *treeview;
	GtkTreeSelection *selection;
	GtkWidget *widget;

	g_debug("bind_subtitle_tree_model ()\n");
	treeview = GTK_TREE_VIEW(GHB_WIDGET (ud->builder, "subtitle_list"));
	selection = gtk_tree_view_get_selection (treeview);
	// 6 columns in model.  5 are visible, the other 1 is for storing
	// values that I need
	// Track, force, burn, default, type, srt offset, track short, source
	// force visible, burn visible, offset visible
	treestore = gtk_list_store_new(10, 
									G_TYPE_STRING,
									G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
									G_TYPE_BOOLEAN,
									G_TYPE_INT,     G_TYPE_STRING,
									G_TYPE_INT,
									G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
									G_TYPE_BOOLEAN);
	gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(treestore));

	cell = gtk_cell_renderer_text_new();
	column = gtk_tree_view_column_new_with_attributes(
									_("Track"), cell, "text", 0, NULL);
	gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
	gtk_tree_view_column_set_min_width (column, 350);
	gtk_tree_view_column_set_max_width (column, 350);

	cell = gtk_cell_renderer_toggle_new();
	column = gtk_tree_view_column_new_with_attributes(
			_("Forced Only"), cell, "active", 1, "visible", 7, NULL);
	gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
	g_signal_connect(cell, "toggled", subtitle_forced_toggled_cb, ud);

	cell = gtk_cell_renderer_toggle_new();
	gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(cell), TRUE);
	column = gtk_tree_view_column_new_with_attributes(
			_("Burned In"), cell, "active", 2, "visible", 8, NULL);
	gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
	g_signal_connect(cell, "toggled", subtitle_burned_toggled_cb, ud);

	cell = gtk_cell_renderer_toggle_new();
	gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(cell), TRUE);
	column = gtk_tree_view_column_new_with_attributes(
				_("Default"), cell, "active", 3, NULL);
	gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
	g_signal_connect(cell, "toggled", subtitle_default_toggled_cb, ud);

	cell = gtk_cell_renderer_text_new();
	column = gtk_tree_view_column_new_with_attributes(
			_("Srt Offset"), cell, "text", 4, "visible", 9, NULL);
	gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));


	g_signal_connect(selection, "changed", subtitle_list_selection_changed_cb, ud);
	// Need to disable remove and update buttons since there are initially
	// no selections
	widget = GHB_WIDGET (ud->builder, "subtitle_remove");
	gtk_widget_set_sensitive(widget, FALSE);
	g_debug("Done\n");
}
Ejemplo n.º 8
0
// Create and bind the tree model to the tree view for the audio track list
// Also, connect up the signal that lets us know the selection has changed
static void
bind_audio_tree_model (signal_user_data_t *ud)
{
	GtkCellRenderer *cell;
	GtkTreeViewColumn *column;
	GtkListStore *treestore;
	GtkTreeView  *treeview;
	GtkTreeSelection *selection;
	GtkWidget *widget;

	g_debug("bind_audio_tree_model ()\n");
	treeview = GTK_TREE_VIEW(GHB_WIDGET (ud->builder, "audio_list"));
	selection = gtk_tree_view_get_selection (treeview);
	// 12 columns in model.  6 are visible, the other 6 are for storing
	// values that I need
	treestore = gtk_list_store_new(7, G_TYPE_STRING, G_TYPE_STRING, 
								   G_TYPE_STRING, G_TYPE_STRING, 
								   G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
	gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(treestore));

	cell = gtk_cell_renderer_text_new();
	column = gtk_tree_view_column_new_with_attributes(
									_("Track"), cell, "text", 0, NULL);
    gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
	gtk_tree_view_column_set_min_width (column, 200);
	gtk_tree_view_column_set_max_width (column, 200);

	cell = gtk_cell_renderer_text_new();
	column = gtk_tree_view_column_new_with_attributes(
									_("Codec"), cell, "text", 1, NULL);
    gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
	gtk_tree_view_column_set_min_width (column, 110);

	cell = gtk_cell_renderer_text_new();
	column = gtk_tree_view_column_new_with_attributes(
									_("Bitrate"), cell, "text", 2, NULL);
    gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
	gtk_tree_view_column_set_min_width (column, 50);

	cell = gtk_cell_renderer_text_new();
	column = gtk_tree_view_column_new_with_attributes(
									_("Sample Rate"), cell, "text", 3, NULL);
    gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
	gtk_tree_view_column_set_min_width (column, 100);

	cell = gtk_cell_renderer_text_new();
	column = gtk_tree_view_column_new_with_attributes(
									_("Mix"), cell, "text", 4, NULL);
    gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
	gtk_tree_view_column_set_min_width (column, 115);

	cell = gtk_cell_renderer_text_new();
	column = gtk_tree_view_column_new_with_attributes(
									_("Gain"), cell, "text", 5, NULL);
    gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));

	cell = gtk_cell_renderer_text_new();
	column = gtk_tree_view_column_new_with_attributes(
									_("DRC"), cell, "text", 6, NULL);
    gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));

	g_signal_connect(selection, "changed", audio_list_selection_changed_cb, ud);
	// Need to disable remove and update buttons since there are initially
	// no selections
	widget = GHB_WIDGET (ud->builder, "audio_remove");
	gtk_widget_set_sensitive(widget, FALSE);
	g_debug("Done\n");
}
Ejemplo n.º 9
0
void rc_gui_treeview_init()
{
    rc_ui = rc_gui_get_data();
    gint count = 0;
    rc_ui->list2_tree_model = NULL;
    rc_ui->list1_tree_model = NULL;
    rc_ui->list1_tree_view = gtk_tree_view_new();
    rc_ui->list2_tree_view = gtk_tree_view_new();
    gtk_widget_set_name(rc_ui->list1_tree_view, "RCListView1");
    gtk_widget_set_name(rc_ui->list2_tree_view, "RCListView2");
    gtk_tree_view_columns_autosize(GTK_TREE_VIEW(rc_ui->list1_tree_view));
    gtk_tree_view_columns_autosize(GTK_TREE_VIEW(rc_ui->list2_tree_view));
    for(count=0;count<5;count++)
        rc_ui->renderer_text[count] = gtk_cell_renderer_text_new();
    for(count=0;count<2;count++)
        rc_ui->renderer_pixbuf[count] = gtk_cell_renderer_pixbuf_new();
    gtk_cell_renderer_set_fixed_size(rc_ui->renderer_text[0], 80, -1);
    gtk_cell_renderer_set_fixed_size(rc_ui->renderer_text[1], 120, -1);
    gtk_cell_renderer_set_fixed_size(rc_ui->renderer_text[4], 55, -1);
    g_object_set(G_OBJECT(rc_ui->renderer_text[0]), "ellipsize", 
        PANGO_ELLIPSIZE_END, "ellipsize-set", TRUE, NULL);
    g_object_set(G_OBJECT(rc_ui->renderer_text[1]), "ellipsize", 
        PANGO_ELLIPSIZE_END, "ellipsize-set", TRUE, NULL);
    g_object_set(G_OBJECT(rc_ui->renderer_text[2]), "ellipsize", 
        PANGO_ELLIPSIZE_END, "ellipsize-set", TRUE, NULL);
    g_object_set(G_OBJECT(rc_ui->renderer_text[3]),"ellipsize",
        PANGO_ELLIPSIZE_END, "ellipsize-set", TRUE, NULL);
    g_object_set(G_OBJECT(rc_ui->renderer_text[4]), "xalign", 1.0, "width-chars", 5,
        NULL);
    gtk_cell_renderer_set_fixed_size(rc_ui->renderer_pixbuf[0], 16, -1);
    gtk_cell_renderer_set_fixed_size(rc_ui->renderer_pixbuf[1], 16, -1);
    list1_column = gtk_tree_view_column_new();
    list2_index_column = gtk_tree_view_column_new_with_attributes(
        "#", rc_ui->renderer_pixbuf[1], "stock-id", PLIST2_STATE, NULL);
    list2_title_column = gtk_tree_view_column_new_with_attributes(
        _("Title"), rc_ui->renderer_text[2], "text", PLIST2_TITLE, NULL);
    list2_time_column = gtk_tree_view_column_new_with_attributes(
        _("Length"), rc_ui->renderer_text[4], "text", PLIST2_LENGTH, NULL);
    gtk_tree_view_column_set_title(list1_column, "Playlist");
    gtk_tree_view_column_pack_start(list1_column, rc_ui->renderer_pixbuf[0],
        FALSE);
    gtk_tree_view_column_pack_start(list1_column, rc_ui->renderer_text[0],
        TRUE);
    gtk_tree_view_column_add_attribute(list1_column, 
        rc_ui->renderer_pixbuf[0], "stock-id", PLIST1_STATE);
    gtk_tree_view_column_add_attribute(list1_column,
        rc_ui->renderer_text[0], "text", PLIST1_NAME);
    gtk_tree_view_append_column(GTK_TREE_VIEW(rc_ui->list1_tree_view),
        list1_column);
    gtk_tree_view_column_set_expand(list1_column, TRUE);
    gtk_tree_view_column_set_expand(list2_title_column, TRUE);
    gtk_tree_view_column_set_sizing(list2_time_column,
        GTK_TREE_VIEW_COLUMN_FIXED);
    gtk_tree_view_column_set_fixed_width(list2_index_column ,30);
    gtk_tree_view_column_set_min_width(list2_index_column, 30);
    gtk_tree_view_column_set_max_width(list2_index_column, 30);
    gtk_tree_view_column_set_fixed_width(list2_time_column, 55);
    gtk_tree_view_column_set_alignment(list2_time_column, 1.0);
    gtk_tree_view_append_column(GTK_TREE_VIEW(rc_ui->list2_tree_view),
        list2_index_column);
    gtk_tree_view_append_column(GTK_TREE_VIEW(rc_ui->list2_tree_view),
        list2_title_column);
    gtk_tree_view_append_column(GTK_TREE_VIEW(rc_ui->list2_tree_view),
        list2_time_column);
    rc_ui->list1_selection = gtk_tree_view_get_selection(
        GTK_TREE_VIEW(rc_ui->list1_tree_view));
    rc_ui->list2_selection = gtk_tree_view_get_selection(
        GTK_TREE_VIEW(rc_ui->list2_tree_view));
    gtk_tree_selection_set_mode(rc_ui->list1_selection,
        GTK_SELECTION_BROWSE);
    gtk_tree_selection_set_mode(rc_ui->list2_selection,
        GTK_SELECTION_MULTIPLE);
    gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(
        rc_ui->list1_tree_view), FALSE);
        gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(
        rc_ui->list2_tree_view), FALSE);
    gtk_tree_view_set_reorderable(GTK_TREE_VIEW(rc_ui->list2_tree_view),
        FALSE);
    gtk_tree_view_set_reorderable(GTK_TREE_VIEW(rc_ui->list1_tree_view),
        FALSE);
    gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(rc_ui->list2_tree_view),
        TRUE);
    gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(rc_ui->list1_tree_view),
        TRUE);
    rc_gui_list1_tree_view_set_drag();
    rc_gui_list2_tree_view_set_drag();
    g_signal_connect(G_OBJECT(rc_ui->renderer_text[0]), "edited",
        G_CALLBACK(rc_gui_list1_edited), NULL);
    g_signal_connect(G_OBJECT(rc_ui->list1_tree_view), "cursor-changed",
        G_CALLBACK(rc_gui_list1_row_selected), NULL);
    g_signal_connect(G_OBJECT(rc_ui->list2_tree_view), "row-activated",
        G_CALLBACK(rc_gui_list2_row_activated), NULL);
    g_signal_connect(G_OBJECT(rc_ui->list2_tree_view),
        "button-press-event", G_CALLBACK(rc_gui_list2_popup_menu), NULL);
    g_signal_connect(G_OBJECT(rc_ui->list2_tree_view),
        "button-release-event",
        G_CALLBACK(rc_gui_list2_button_release_event), NULL);
    g_signal_connect(G_OBJECT(rc_ui->list1_tree_view),
        "button-release-event", G_CALLBACK(rc_gui_list1_popup_menu), NULL);
    g_signal_connect(G_OBJECT(rc_ui->list2_tree_view),
        "drag_data_received", G_CALLBACK(rc_gui_list2_dnd_data_received),
        NULL);
    g_signal_connect(G_OBJECT(rc_ui->list2_tree_view), "drag-data-get",
        G_CALLBACK(rc_gui_list2_dnd_data_get), NULL);
    g_signal_connect(G_OBJECT(rc_ui->list2_tree_view), "drag-motion",
        G_CALLBACK(rc_gui_list2_dnd_motion), NULL);
    g_signal_connect(G_OBJECT(rc_ui->list1_tree_view), 
        "drag-data-received", G_CALLBACK(rc_gui_list1_dnd_data_received),
        NULL);
    g_signal_connect(G_OBJECT(rc_ui->list1_tree_view), "drag-data-get",
        G_CALLBACK(rc_gui_list1_dnd_data_get), NULL);
}
Ejemplo n.º 10
0
static GtkWidget *cd_build_events_widget (void)
{
	GtkWidget *pMainBox = gtk_box_new (GTK_ORIENTATION_VERTICAL, MARGIN);
	
	// category toolbar.
	GtkWidget *pToolBar = gtk_toolbar_new ();
	///gtk_toolbar_set_orientation (GTK_TOOLBAR (pToolBar), GTK_ORIENTATION_HORIZONTAL);
	gtk_toolbar_set_style (GTK_TOOLBAR (pToolBar), GTK_TOOLBAR_BOTH);  // overwrite system preference (GTK_TOOLBAR_ICONS)

	gtk_style_context_add_class (gtk_widget_get_style_context (pToolBar),
		GTK_STYLE_CLASS_INLINE_TOOLBAR); // style: inline
	GtkCssProvider *css = gtk_css_provider_new (); // but without border
	gtk_css_provider_load_from_data (css, ".inline-toolbar.toolbar { "
		"background: transparent; border-color: transparent; }", -1, NULL);
	GtkStyleContext *ctx = gtk_widget_get_style_context (pToolBar);
	gtk_style_context_add_provider (ctx, GTK_STYLE_PROVIDER (css),
		GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);

	gtk_toolbar_set_show_arrow (GTK_TOOLBAR (pToolBar), FALSE);  // force to display all the entries.
	gtk_box_pack_start (GTK_BOX (pMainBox), pToolBar, TRUE, TRUE, MARGIN);
	
	int i = 0;
	GtkToolItem *group = _add_category_button (pToolBar, D_("All"), "stock_search", i++, NULL);
	_add_category_button (pToolBar, D_("Applications"), "exec", i++, group);
	_add_category_button (pToolBar, D_("Documents"), "document", i++, group);
	///_add_category_button (pToolBar, D_("Folders"), "folder", i++, group);
	_add_category_button (pToolBar, D_("Images"), "image", i++, group);
	_add_category_button (pToolBar, D_("Audio"), "sound", i++, group);
	_add_category_button (pToolBar, D_("Videos"), "video", i++, group);
	_add_category_button (pToolBar, D_("Web"), "text-html", i++, group);
	_add_category_button (pToolBar, D_("Others"), "unknown", i++, group);
	_add_category_button (pToolBar, D_("Top Results"), "gtk-about", i, group);
	
	// search entry.
	GtkWidget *pFilterBox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, CAIRO_DOCK_GUI_MARGIN);
	gtk_box_pack_start (GTK_BOX (pMainBox), pFilterBox, FALSE, FALSE, MARGIN);
	
	GtkWidget *pFilterLabel = gtk_label_new (D_("Look for events"));
	gldi_dialog_set_widget_text_color (GTK_WIDGET (pFilterLabel));
	gtk_box_pack_start (GTK_BOX (pFilterBox), pFilterLabel, FALSE, FALSE, MARGIN);
	
	GtkWidget *pEntry = gtk_entry_new ();
	// press any key:
	g_signal_connect (pEntry, "key-release-event", G_CALLBACK (on_key_press_filter), NULL);
	gtk_box_pack_start (GTK_BOX (pFilterBox), pEntry, TRUE, TRUE, MARGIN);
	gtk_widget_set_tooltip_text (pEntry, D_("The default boolean operator is AND. Thus the query foo bar will be interpreted as foo AND bar. To exclude a term from the result set prepend it with a minus sign - eg foo -bar. Phrase queries can be done by double quoting the string \"foo is a bar\". You can truncate terms by appending a *. "));

	gtk_entry_set_icon_activatable (GTK_ENTRY (pEntry), GTK_ENTRY_ICON_SECONDARY, TRUE);
	gtk_entry_set_icon_from_icon_name (GTK_ENTRY (pEntry), GTK_ENTRY_ICON_SECONDARY, GLDI_ICON_NAME_CLEAR);
	g_signal_connect (pEntry, "icon-press", G_CALLBACK (on_clear_filter), NULL);

	myData.pEntry = pEntry;
	gtk_widget_grab_focus (pEntry);
	
	// model
	GtkListStore *pModel = gtk_list_store_new (CD_MODEL_NB_COLUMNS,
		G_TYPE_STRING,  /* CD_MODEL_NAME */
		G_TYPE_STRING,  /* CD_MODEL_URI */
		G_TYPE_STRING,  /* CD_MODEL_PATH */
		GDK_TYPE_PIXBUF,  /* CD_MODEL_ICON */
		G_TYPE_INT64,  /* CD_MODEL_DATE */
		G_TYPE_UINT);  /* CD_MODEL_ID */
	myData.pModel = pModel;
	
	// tree-view
	GtkWidget *pOneWidget = gtk_tree_view_new ();
	gtk_tree_view_set_model (GTK_TREE_VIEW (pOneWidget), GTK_TREE_MODEL (pModel));
	gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (pOneWidget), TRUE);
	gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW (pOneWidget), TRUE);
	GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (pOneWidget));
	gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
	/**gtk_tree_selection_set_select_function (selection,
		(GtkTreeSelectionFunc) _cairo_dock_select_one_item_in_tree,
		NULL,
		NULL);*/
	g_signal_connect (G_OBJECT (pOneWidget), "button-release-event", G_CALLBACK (_on_click_module_tree_view), NULL);  // pour le menu du clic droit
	g_signal_connect (G_OBJECT (pOneWidget), "button-press-event", G_CALLBACK (_on_click_module_tree_view), NULL);  // pour le menu du clic droit
	
	g_object_set (G_OBJECT (pOneWidget), "tooltip-column", CD_MODEL_PATH, NULL);
	
	GtkTreeViewColumn* col;
	GtkCellRenderer *rend;
	// icon
	rend = gtk_cell_renderer_pixbuf_new ();
	gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (pOneWidget), -1, NULL, rend, "pixbuf", CD_MODEL_ICON, NULL);
	// file name
	rend = gtk_cell_renderer_text_new ();
	col = gtk_tree_view_column_new_with_attributes (D_("File name"), rend, "text", CD_MODEL_NAME, NULL);
	gtk_tree_view_column_set_min_width (col, 200);
	gtk_tree_view_column_set_max_width (col, MAX (500, g_desktopGeometry.Xscreen.width / g_desktopGeometry.iNbScreens * .67));  // we don't know on which screen is place the container...
	gtk_tree_view_column_set_sort_column_id (col, CD_MODEL_NAME);
	gtk_tree_view_append_column (GTK_TREE_VIEW (pOneWidget), col);
	// date
	rend = gtk_cell_renderer_text_new ();
	col = gtk_tree_view_column_new_with_attributes (D_("Last access"), rend, "text", CD_MODEL_DATE, NULL);
	gtk_tree_view_column_set_cell_data_func (col, rend, (GtkTreeCellDataFunc)_render_date, NULL, NULL);
	gtk_tree_view_column_set_sort_column_id (col, CD_MODEL_DATE);
	gtk_tree_view_append_column (GTK_TREE_VIEW (pOneWidget), col);
	
	// barres de defilement
	GtkAdjustment *adj = gtk_adjustment_new (0., 0., 100., 1, 10, 10);
	gtk_scrollable_set_vadjustment (GTK_SCROLLABLE (pOneWidget), GTK_ADJUSTMENT (adj));

	GtkWidget *pScrolledWindow = gtk_scrolled_window_new (NULL, NULL);
	g_object_set (pScrolledWindow, "height-request", 300, NULL);
	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (pScrolledWindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
	#if GTK_CHECK_VERSION (3, 8, 0)
	gtk_container_add (GTK_CONTAINER (pScrolledWindow), pOneWidget);
	#else
	gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (pScrolledWindow), pOneWidget);
	#endif
	gtk_box_pack_start (GTK_BOX (pMainBox), pScrolledWindow, FALSE, FALSE, MARGIN);

	return pMainBox;
}