Example #1
0
 AbstractNode::AbstractNode (int width, int height, int flag)
 : AbstractView(width, height),
   node_flag_(flag),
   round_radius_(5.f),
   focused_widget_(0),
   hovered_widget_(0),
   cursor_position_(InsideRectangle),
   focused_(false),
   pressed_(false)
 {
   set_view_type(ViewTypeNode);
 }
Example #2
0
static void
module_selected_show_info(ShellModuleEntry * entry, gboolean reload)
{
    GKeyFile		*key_file = g_key_file_new();
    gchar		*key_data;
    gchar		**groups;
    GtkTreeStore	*store;
    gint                i;

    if (entry->func) {
        key_data = entry->func(entry->number);
    } else {
        key_data = g_strdup("[Error]\n"
                            "Invalid module=");
    }

    /* reset the view type to normal */
    set_view_type(SHELL_VIEW_NORMAL);

    /* recreate the iter hash table only if we're not reloading the module section */
    if (!reload) {
        if (update_tbl != NULL) {
            g_hash_table_foreach_remove(update_tbl, g_true, NULL);
        }
        update_tbl = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
    }

    store = GTK_TREE_STORE(shell->info->model);
    gtk_tree_store_clear(store);

    g_key_file_load_from_data(key_file, key_data, strlen(key_data), 0, NULL);
    groups = g_key_file_get_groups(key_file, NULL);

    for (i = 0; groups[i]; i++) {
        gchar *group = groups[i];
        gchar **keys = g_key_file_get_keys(key_file, group, NULL, NULL);

        if (*group == '$') {
            group_handle_special(key_file, entry, group, keys);
        } else {
            group_handle_normal(key_file, entry, group, keys);
        }
    }

    gtk_tree_view_expand_all(GTK_TREE_VIEW(shell->info->view));

    g_strfreev(groups);
    g_key_file_free(key_file);
    g_free(key_data);
}
Example #3
0
static void
module_selected(GtkTreeSelection * ts, gpointer data)
{
    ShellTree			*shelltree = shell->tree;
    GtkTreeModel		*model = GTK_TREE_MODEL(shelltree->model);
    GtkTreeIter			 parent;
    ShellModuleEntry		*entry;
    static ShellModuleEntry	*current = NULL;
    static gboolean		updating = FALSE;

    if (updating)
        return;

    updating = TRUE;

    /* Gets the currently selected item on the left-side TreeView; if there is no
       selection, silently return */
    if (!gtk_tree_selection_get_selected(ts, &model, &parent))
        return;

    /* Mark the currently selected module as "unselected"; this is used to kill the
       update timeout. */
    if (current)
        current->selected = FALSE;

    /* Get the current selection and shows its related info */
    gtk_tree_model_get(model, &parent, TREE_COL_DATA, &entry, -1);
    if (entry && entry->func && !entry->selected) {
        shell_status_set_enabled(TRUE);
        shell_status_update("Updating...");

        entry->selected = TRUE;
        shell->selected = entry;
        module_selected_show_info(entry, FALSE);

        info_selected_show_extra(NULL);	/* clears the more info store */
        gtk_tree_view_columns_autosize(GTK_TREE_VIEW(shell->info->view));

        /* urgh. why don't GTK do this when the model is cleared? */
        gtk_range_set_value(GTK_RANGE(GTK_SCROLLED_WINDOW(shell->info->scroll)->vscrollbar), 0.0);
        gtk_range_set_value(GTK_RANGE(GTK_SCROLLED_WINDOW(shell->info->scroll)->hscrollbar), 0.0);
        gtk_range_set_value(GTK_RANGE(GTK_SCROLLED_WINDOW(shell->moreinfo->scroll)->vscrollbar), 0.0);
        gtk_range_set_value(GTK_RANGE(GTK_SCROLLED_WINDOW(shell->moreinfo->scroll)->hscrollbar), 0.0);

        shell_status_update("Done.");
        shell_status_set_enabled(FALSE);

        gchar *tmp = g_strdup_printf("%s - System Information", entry->name);
        gtk_window_set_title(GTK_WINDOW(shell->window), tmp);
        g_free(tmp);

        shell_action_set_enabled("RefreshAction", entry->reloadfunc ? TRUE : FALSE);
    } else {
        gtk_window_set_title(GTK_WINDOW(shell->window), "System Information");
        shell_action_set_enabled("RefreshAction", FALSE);

        gtk_tree_store_clear(GTK_TREE_STORE(shell->info->model));
        set_view_type(SHELL_VIEW_NORMAL);
    }

    current = entry;
    updating = FALSE;
}
Example #4
0
static void
group_handle_special(GKeyFile * key_file, ShellModuleEntry * entry,
                     gchar * group, gchar ** keys)
{
    if (g_str_equal(group, "$ShellParam$")) {
        gint i;

        for (i = 0; keys[i]; i++) {
            gchar *key = keys[i];

            if (g_str_has_prefix(key, "UpdateInterval")) {
                gint ms;
                ShellFieldUpdate *fu = g_new0(ShellFieldUpdate, 1);

                ms = g_key_file_get_integer(key_file, group, key, NULL);

                fu->field_name = g_strdup(strchr(key, '$') + 1);
                fu->entry = entry;
                fu->loadgraph = FALSE;

                g_timeout_add(ms, update_field, fu);
            } else if (g_str_has_prefix(key, "LoadGraphInterval")) {
                gint ms;
                ShellFieldUpdate *fu = g_new0(ShellFieldUpdate, 1);

                ms = g_key_file_get_integer(key_file, group, key, NULL);

                fu->field_name = g_strdup(strchr(key, '$') + 1);
                fu->entry = entry;
                fu->loadgraph = TRUE;

                g_timeout_add(ms, update_field, fu);
            } else if (g_str_equal(key, "ReloadInterval")) {
                gint ms;

                ms = g_key_file_get_integer(key_file, group, key, NULL);

                g_timeout_add(ms, reload_section, entry);
            } else if (g_str_equal(key, "ViewType")) {
                set_view_type(g_key_file_get_integer(key_file, group,
                                                     key, NULL));
            } else if (g_str_has_prefix(key, "Icon")) {
                GtkTreeIter *iter = g_hash_table_lookup(update_tbl,
                                                        strchr(key, '$') + 1);

                if (iter) {
                    gchar *file = g_key_file_get_value(key_file, group, key, NULL);
                    gtk_tree_store_set(GTK_TREE_STORE(shell->info->model),
                                       iter, INFO_TREE_COL_PBUF,
                                       icon_cache_get_pixbuf_at_size(file, 24, 24),
                                       -1);
                    g_free(file);
                }
            } else if (g_str_equal(key, "Zebra")) {
                gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(shell->info->view),
                                             g_key_file_get_boolean(key_file,
                                                     group,
                                                     key, NULL));
            }
        }
    } else {
        g_warning("Unknown parameter group '%s'", group);
    }
}