Beispiel #1
0
void wp_set_enabled(int enabled)
{
	cfg_set_single_value_as_int(config, "wp-plugin", "enable", enabled);
	if (enabled)
	{
		if(wiki_ref == NULL)
		{
			wp_add(GTK_WIDGET(playlist3_get_category_tree_view()));
		}
	}
	else if (wiki_ref)
	{
		GtkTreePath *path = gtk_tree_row_reference_get_path(wiki_ref);
		if (path){
			GtkTreeIter iter;
			if (gtk_tree_model_get_iter(GTK_TREE_MODEL(playlist3_get_category_tree_store()), &iter, path)){
				gtk_list_store_remove(playlist3_get_category_tree_store(), &iter);
			}
			gtk_tree_path_free(path);
			gtk_tree_row_reference_free(wiki_ref);
			wiki_ref = NULL;
		}
	}
}
static void serverstats_init(void)
{
    /** Get an allready exposed widgets to grab theme colors from. */
    GtkWidget *colw = (GtkWidget *) playlist3_get_category_tree_view();
    GtkWidget *label = NULL;
    GtkWidget *table = NULL;
    GtkWidget *hbox = NULL;
    GtkWidget *event = NULL;
    GtkWidget *serverstats_vbox = gtk_vbox_new(FALSE, 0);
    GtkWidget *serverstats_event;
    gchar *markup = NULL;
    int i = 0;

    serverstats_sw = gtk_scrolled_window_new(NULL, NULL);
    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(serverstats_sw), GTK_SHADOW_IN);
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(serverstats_sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);

    serverstats_event = gtk_event_box_new();
    gtk_event_box_set_visible_window(GTK_EVENT_BOX(serverstats_event), TRUE);
    gtk_container_add(GTK_CONTAINER(serverstats_event), serverstats_vbox);
    {
        GtkStyleContext *cs = gtk_widget_get_style_context(GTK_WIDGET(serverstats_event));
        gtk_style_context_add_class(cs, GTK_STYLE_CLASS_VIEW);
    }

    /* wrap in event box to set bg color */
    event = gtk_event_box_new();
    gtk_event_box_set_visible_window(GTK_EVENT_BOX(event), TRUE);
    //gtk_widget_set_state(GTK_WIDGET(event), GTK_STATE_SELECTED);
    {
        GtkStyleContext *cs = gtk_widget_get_style_context(GTK_WIDGET(serverstats_event));
        gtk_style_context_add_class(cs, GTK_STYLE_CLASS_HEADER);
    }
    

    //gtk_widget_modify_bg(serverstats_event, GTK_STATE_NORMAL, &(colw->style->base[GTK_STATE_NORMAL]));
    g_signal_connect(G_OBJECT(serverstats_vbox), "style-set", G_CALLBACK(serverstats_header_style_changed),
                     serverstats_event);

    /* set label and padding */
    hbox = gtk_hbox_new(FALSE, 6);
    label = gtk_image_new_from_icon_name("mpd", GTK_ICON_SIZE_DND);
    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0);
    label = gtk_label_new("");
    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
    markup = g_markup_printf_escaped("<span size='xx-large' weight='bold'>%s</span>", _("Server Information"));
    gtk_label_set_markup(GTK_LABEL(label), markup);
    g_free(markup);
    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0);
    gtk_container_add(GTK_CONTAINER(event), hbox);

    gtk_container_set_border_width(GTK_CONTAINER(hbox), 6);
    gtk_box_pack_start(GTK_BOX(serverstats_vbox), event, FALSE, TRUE, 0);
    gtk_widget_show_all(event);

    label = gtk_hseparator_new();
    gtk_box_pack_start(GTK_BOX(serverstats_vbox), label, FALSE, TRUE, 0);
    gtk_widget_show(label);
    /**
     * Data list
     */
    table = gtk_grid_new();//(SERVERSTATS_NUM_FIELDS + 2, 2, FALSE);
    gtk_grid_set_column_spacing(GTK_GRID(table), 6);
    gtk_grid_set_row_spacing(GTK_GRID(table), 6);
    gtk_container_set_border_width(GTK_CONTAINER(table), 12);

    /** Database */
    label = gtk_label_new("");
    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
    markup = g_markup_printf_escaped("<span size='x-large' weight='bold'>%s</span>", _("Server"));
    gtk_label_set_markup(GTK_LABEL(label), markup);
    g_free(markup);
    gtk_grid_attach(GTK_GRID(table), label, 0,0,2,1); 

    i = 1;
    /** Mpd version */
    serverstats_add_entry(table, i++, _("Version"), SERVERSTATS_MPD_VERSION);

    serverstats_add_entry(table, i++, _("Uptime"), SERVERSTATS_MPD_UPTIME);
    serverstats_add_entry(table, i++, _("Time Playing"), SERVERSTATS_MPD_PLAYTIME);

    /** Database */
    label = gtk_label_new("");
    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);

    markup = g_markup_printf_escaped("<span size='x-large' weight='bold'>%s</span>", _("Database"));
    gtk_label_set_markup(GTK_LABEL(label), markup);
    g_free(markup);
    gtk_grid_attach(GTK_GRID(table), label, 0, i, 2, 1);
    i++;

    /** Mpd Playtime */
    serverstats_add_entry(table, i++, _("Total Playtime"), SERVERSTATS_MPD_DB_PLAYTIME);
    /** Mpd Artists*/
    serverstats_add_entry(table, i++, _("Number of artists"), SERVERSTATS_MPD_DB_ARTISTS);
    /** Mpd Albums */
    serverstats_add_entry(table, i++, _("Number of albums"), SERVERSTATS_MPD_DB_ALBUMS);
    /** Mpd Songs */
    serverstats_add_entry(table, i++, _("Number of songs"), SERVERSTATS_MPD_DB_SONGS);
    /** Mpd Songs */
    serverstats_add_entry(table, i++, _("URL Handlers"), SERVERSTATS_MPD_URLHANDLERS);
    /** Mpd Songs */
    serverstats_add_entry(table, i++, _("Tag Types"), SERVERSTATS_MPD_TAG_TYPES);
    /** Stats */
    label = gtk_label_new("");
    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);

    markup = g_markup_printf_escaped("<span size='x-large' weight='bold'>%s</span>", _("Tag statistics"));
    gtk_label_set_markup(GTK_LABEL(label), markup);
    g_free(markup);
    gtk_grid_attach(GTK_GRID(table), label, 0, i, 2, 1);
    i++;
    gtk_widget_show_all(table);

    /**
     * Stats treeview
     */
    {
        int j;
        GtkWidget *combo = NULL;
        GtkWidget *sw = NULL, *cancel;
        GtkListStore *store;
        GtkCellRenderer *renderer;
        GtkWidget *pb = gtk_progress_bar_new();
        combo = gtk_combo_box_text_new();
        for (j = 0; j < MPD_TAG_NUM_OF_ITEM_TYPES - 1; j++)
        {
            if (mpd_server_tag_supported(connection, j))
            {
                gtk_combo_box_text_append(GTK_COMBO_BOX(combo),NULL, mpdTagItemKeys[j]);
            }
        }

        gtk_grid_attach(GTK_GRID(table), combo, 0, i, 2, 1);
        i++;
        gtk_widget_show(combo);

        hbox = gtk_hbox_new(FALSE, 6);
        cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
        g_signal_connect(G_OBJECT(cancel), "clicked", G_CALLBACK(cancel_clicked), NULL);
        gtk_box_pack_start(GTK_BOX(hbox), pb, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), cancel, FALSE, TRUE, 0);

        gtk_grid_attach(GTK_GRID(table), hbox, 0, i, 2, 1);
        i++; 
        g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(serverstats_combo_changed), pb);

        sw = gtk_scrolled_window_new(NULL, NULL);
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_NEVER);
        gtk_container_set_border_width(GTK_CONTAINER(sw), 6);

        store = gtk_list_store_new(4, G_TYPE_ULONG, G_TYPE_STRING, G_TYPE_ULONG, G_TYPE_STRING);
        gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), 0, GTK_SORT_DESCENDING);
        serverstats_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
        gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(serverstats_tree), FALSE);
        gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(serverstats_tree), TRUE);
        renderer = gtk_cell_renderer_text_new();
        g_object_set(G_OBJECT(renderer), "ellipsize", PANGO_ELLIPSIZE_END, "ellipsize-set", TRUE, "width-chars", 30,
                     NULL);
        gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(serverstats_tree), -1, "", renderer, "text", 1, NULL);
        renderer = gtk_cell_renderer_progress_new();
        gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(serverstats_tree),
                                                    -1, "", renderer, "value", 2, "text", 3, NULL);

        gtk_tree_view_set_search_column(GTK_TREE_VIEW(serverstats_tree), 1);

        gtk_container_add(GTK_CONTAINER(sw), serverstats_tree);

        gtk_grid_attach(GTK_GRID(table), sw, 0, i, 2, 1); 
        i++;
        gtk_widget_show_all(sw);
    }
    /**
     * Add table
     */
    gtk_box_pack_start(GTK_BOX(serverstats_vbox), table, TRUE, TRUE, 0);
    /* maintain my own reference to the widget, so it won't get destroyed removing
     * from view
     */
    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(serverstats_sw), serverstats_event);
    gtk_widget_show(serverstats_vbox);
    gtk_widget_show(serverstats_event);
    gtk_widget_show(serverstats_sw);
    g_object_ref_sink(serverstats_sw);
}