/* Sort changed callback */ static void gnc_split_reg2_sort_changed_cb (GtkTreeSortable *sortable, gpointer user_data) { GNCSplitReg2 *gsr = user_data; GncTreeViewSplitReg *view; GncTreeModelSplitReg *model; GtkSortType type; gint sortcol; gint sort_depth; const gchar *state_section; GKeyFile *state_file = gnc_state_get_current(); gtk_tree_sortable_get_sort_column_id (sortable, &sortcol, &type); ENTER("sortcol is %d", sortcol); view = gnc_ledger_display2_get_split_view_register (gsr->ledger); model = gnc_ledger_display2_get_split_model_register (gsr->ledger); sort_depth = gnc_tree_view_reg_get_selected_row_depth (view); if (sort_depth != 0) model->sort_depth = sort_depth; model->sort_col = sortcol; model->sort_direction = type; /* Save the sort depth state */ state_section = gnc_tree_view_get_state_section (GNC_TREE_VIEW (view)); g_key_file_set_integer (state_file, state_section, "sort_depth", model->sort_depth); LEAVE("m_sort_col %d, m_sort_direction is %d m_sort_depth is %d", model->sort_col, model->sort_direction, model->sort_depth); if (sortcol != -1) gnc_ledger_display2_refresh (gsr->ledger); }
void on_final_account_prepare (hierarchy_data *data) { GSList *actlist; GtkTreeView *tree_view; GtkTreeSelection *selection; GtkCellRenderer *renderer; GtkTreeViewColumn *column; gnc_commodity *com; /* Anything to do? */ if (!data->category_set_changed) return; data->category_set_changed = FALSE; gnc_suspend_gui_refresh (); /* Delete any existing account tree */ if (data->final_account_tree) { gtk_widget_destroy(GTK_WIDGET(data->final_account_tree)); data->final_account_tree = NULL; } delete_our_account_tree (data); /* Build a new account list */ actlist = get_selected_account_list (data->categories_tree); com = gnc_currency_edit_get_currency (GNC_CURRENCY_EDIT(data->currency_selector)); data->our_account_tree = hierarchy_merge_accounts (actlist, com); /* Now build a new account tree */ data->final_account_tree = GNC_TREE_VIEW_ACCOUNT(gnc_tree_view_account_new_with_root (data->our_account_tree, FALSE)); tree_view = GTK_TREE_VIEW(data->final_account_tree); gnc_tree_view_account_set_name_edited(data->final_account_tree, gnc_tree_view_account_name_edited_cb); gnc_tree_view_account_set_code_edited(data->final_account_tree, gnc_tree_view_account_code_edited_cb); gnc_tree_view_account_set_description_edited(data->final_account_tree, gnc_tree_view_account_description_edited_cb); gnc_tree_view_account_set_notes_edited(data->final_account_tree, gnc_tree_view_account_notes_edited_cb); gtk_tree_view_set_headers_visible (tree_view, TRUE); column = gnc_tree_view_find_column_by_name ( GNC_TREE_VIEW(data->final_account_tree), "type"); g_object_set_data(G_OBJECT(column), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); gnc_tree_view_configure_columns (GNC_TREE_VIEW(data->final_account_tree)); gnc_tree_view_set_show_column_menu (GNC_TREE_VIEW(data->final_account_tree), FALSE); selection = gtk_tree_view_get_selection (tree_view); gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); // This is a re-definition of the placeholder that the account-tree model // provides, reflecting the to-be-created state of the account tree // post-merge. { renderer = gtk_cell_renderer_toggle_new(); g_object_set(G_OBJECT (renderer), "activatable", FALSE, "sensitive", FALSE, NULL); column = gtk_tree_view_column_new_with_attributes(_("Placeholder"), renderer, NULL); gtk_tree_view_column_set_cell_data_func (column, renderer, placeholder_cell_data_func, (gpointer)data, NULL); gnc_tree_view_append_column (GNC_TREE_VIEW(tree_view), column); } { renderer = gtk_cell_renderer_text_new (); g_object_set (G_OBJECT (renderer), "xalign", 1.0, (char *)NULL); g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (balance_cell_edited), data); column = gtk_tree_view_column_new_with_attributes (_("Opening Balance"), renderer, NULL); gtk_tree_view_column_set_cell_data_func (column, renderer, balance_cell_data_func, (gpointer)data, NULL); gnc_tree_view_append_column (GNC_TREE_VIEW(tree_view), column); } // only in the case where there *are* existing accounts... if (gnc_account_n_descendants(gnc_book_get_root_account(gnc_get_current_book())) > 0) { GList *renderers; column = gnc_tree_view_add_text_column(GNC_TREE_VIEW(tree_view), _("Use Existing"), NULL, NULL, "yes", GNC_TREE_VIEW_COLUMN_DATA_NONE, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, NULL); renderers = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(column)); g_object_set(G_OBJECT(renderer), "xalign", 1.0, (char*)NULL); gtk_tree_view_column_set_cell_data_func(column, GTK_CELL_RENDERER(renderers->data), use_existing_account_data_func, (gpointer)data, NULL); g_list_free(renderers); } gtk_container_add(GTK_CONTAINER(data->final_account_tree_container), GTK_WIDGET(data->final_account_tree)); /* Expand the entire tree */ gtk_tree_view_expand_all (tree_view); gtk_widget_show(GTK_WIDGET(data->final_account_tree)); gnc_resume_gui_refresh (); }
static void gsr2_create_table (GNCSplitReg2 *gsr) { GncTreeViewSplitReg *view; GncTreeModelSplitReg *model; GtkTreeModel *s_model; GtkWidget *scrolled_window; GtkTreeViewColumn *col; GNCLedgerDisplay2Type ledger_type; GtkWidget *hbox; gdouble num_of_trans; gchar *state_section; GKeyFile *state_file = gnc_state_get_current(); const GncGUID * guid; Account * account; account = gnc_ledger_display2_leader (gsr->ledger); guid = xaccAccountGetGUID (account); ENTER("create table gsr=%p", gsr); gnc_ledger_display2_set_user_data (gsr->ledger, (gpointer)gsr); gnc_ledger_display2_set_handlers (gsr->ledger, gnc_split_reg2_ld_destroy, gnc_split_reg2_get_parent); model = gnc_ledger_display2_get_split_model_register (gsr->ledger); view = gnc_tree_view_split_reg_new_with_model (model); g_object_unref (G_OBJECT (model)); /* State_section is used to store per register state: column widths, sort order,... */ ledger_type = gnc_ledger_display2_type (gsr->ledger); if (ledger_type == LD2_GL && model->type == GENERAL_JOURNAL2) state_section = g_strdup (STATE_SECTION_GEN_JOURNAL); else if (ledger_type == LD2_SUBACCOUNT) { gchar guidstr[GUID_ENCODING_LENGTH+1]; guid_to_string_buff (guid, guidstr); state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", guidstr, " w/subaccounts", NULL); } else { gchar guidstr[GUID_ENCODING_LENGTH+1]; guid_to_string_buff (guid, guidstr); state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", guidstr, NULL); } g_object_set (G_OBJECT (view), "state-section", state_section, "show-column-menu", FALSE, NULL); // Create a hbox for treeview and scrollbar. hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE); gtk_widget_show (hbox); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_show (scrolled_window); gtk_box_pack_start (GTK_BOX (gsr), hbox, TRUE, TRUE, 0); num_of_trans = model->number_of_trans_in_full_tlist - 1; gsr->scroll_adj = GTK_ADJUSTMENT (gtk_adjustment_new (model->position_of_trans_in_full_tlist, 0.0, num_of_trans + 10, 1.0, 10.0, 10.0)); gsr->scroll_bar = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, GTK_ADJUSTMENT (gsr->scroll_adj)); gtk_widget_show (gsr->scroll_bar); gtk_box_pack_start (GTK_BOX (hbox), gsr->scroll_bar, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (hbox), scrolled_window, TRUE, TRUE, 0); gnc_ledger_display2_set_split_view_register (gsr->ledger, view); /* Synchronize model state with view state * (needed to properly set up the internal query) */ /* Restore the sort depth from saved state */ model->sort_depth = g_key_file_get_integer (state_file, state_section, "sort_depth", NULL); g_free(state_section); s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(view)); if (s_model) { gint sort_col; GtkSortType type; if (gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (s_model), &sort_col, &type)) { model->sort_col = sort_col; model->sort_direction = type; } } gnc_tree_view_configure_columns (GNC_TREE_VIEW (view)); if (ledger_type == LD2_GL && model->type == GENERAL_JOURNAL2) gnc_tree_view_set_show_column_menu (GNC_TREE_VIEW (view), TRUE); else gnc_tree_view_set_show_column_menu (GNC_TREE_VIEW (view), FALSE); /* This column gets all the free space */ gnc_tree_view_expand_columns (GNC_TREE_VIEW (view), "descnotes", NULL); /* This sets the status color column, 4 is the minimum */ col = gnc_tree_view_find_column_by_name (GNC_TREE_VIEW (view), "status"); if (col != NULL) g_object_set (G_OBJECT(col), "resizable", FALSE, "sizing", GTK_TREE_VIEW_COLUMN_FIXED, "fixed-width", 4, NULL); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), TRUE); gtk_widget_show (GTK_WIDGET (view)); gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (view)); gtk_widget_show (GTK_WIDGET (gsr)); /* Should this be read only */ gnc_tree_view_split_reg_set_read_only (view, gsr->read_only); /* This tells the ledger that we have a valid tree view */ gnc_ledger_display2_set_split_view_refresh (gsr->ledger, TRUE); /* This triggers the update of the summary bar */ g_signal_connect_after (model, "refresh_status_bar", G_CALLBACK (gsr2_redraw_all_cb), gsr); //this works // This will keep scrollbar in sync. g_signal_connect (model, "scroll_sync", G_CALLBACK (gsr2_scroll_sync_cb), gsr); /* This triggers the update of the help text */ g_signal_connect (view, "help_signal", G_CALLBACK (gsr2_emit_help_changed), gsr); // this works gsr2_scroll_value_changed_cb (GTK_ADJUSTMENT (gsr->scroll_adj), gsr); /* This triggers the tooltip to change when scrolling */ g_signal_connect (gsr->scroll_adj, "value-changed", G_CALLBACK (gsr2_scroll_value_changed_cb), gsr); // this works /* This triggers the model update when mouse button released */ g_signal_connect (gsr->scroll_bar, "button-release-event", G_CALLBACK (gsr2_scroll_button_event_cb), gsr); // Connect a call back to update the sort settings. g_signal_connect (GTK_TREE_SORTABLE (s_model), "sort-column-changed", G_CALLBACK (gnc_split_reg2_sort_changed_cb), gsr); LEAVE(" "); }
static GtkWidget * gnc_plugin_page_owner_tree_create_widget (GncPluginPage *plugin_page) { GncPluginPageOwnerTree *page; GncPluginPageOwnerTreePrivate *priv; GtkTreeSelection *selection; GtkTreeView *tree_view; GtkWidget *scrolled_window; GtkTreeViewColumn *col; const gchar *state_section = NULL; gchar* label = ""; ENTER("page %p", plugin_page); page = GNC_PLUGIN_PAGE_OWNER_TREE (plugin_page); priv = GNC_PLUGIN_PAGE_OWNER_TREE_GET_PRIVATE(page); if (priv->widget != NULL) { LEAVE("widget = %p", priv->widget); return priv->widget; } priv->widget = gtk_vbox_new (FALSE, 0); gtk_widget_show (priv->widget); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_show (scrolled_window); gtk_box_pack_start (GTK_BOX (priv->widget), scrolled_window, TRUE, TRUE, 0); tree_view = gnc_tree_view_owner_new(priv->owner_type); /* Show default columns */ col = gnc_tree_view_find_column_by_name( GNC_TREE_VIEW(tree_view), GNC_OWNER_TREE_ID_COL); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); col = gnc_tree_view_find_column_by_name( GNC_TREE_VIEW(tree_view), GNC_OWNER_TREE_ADDRESS_1_COL); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); col = gnc_tree_view_find_column_by_name( GNC_TREE_VIEW(tree_view), GNC_OWNER_TREE_ADDRESS_2_COL); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); col = gnc_tree_view_find_column_by_name( GNC_TREE_VIEW(tree_view), GNC_OWNER_TREE_PHONE_COL); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); gnc_tree_view_configure_columns(GNC_TREE_VIEW(tree_view)); switch (priv->owner_type) { case GNC_OWNER_NONE : case GNC_OWNER_UNDEFINED : break; case GNC_OWNER_CUSTOMER : label = N_("Customers"); state_section = "Customers Overview"; break; case GNC_OWNER_JOB : label = N_("Jobs"); state_section = "Jobs Overview"; break; case GNC_OWNER_VENDOR : label = N_("Vendors"); state_section = "Vendors Overview"; break; case GNC_OWNER_EMPLOYEE : label = N_("Employees"); state_section = "Employees Overview"; break; } g_object_set(G_OBJECT(tree_view), "state-section", state_section, "show-column-menu", TRUE, NULL); g_object_set(G_OBJECT(plugin_page), "page-name", label, NULL); priv->tree_view = tree_view; selection = gtk_tree_view_get_selection(tree_view); g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK (gnc_plugin_page_owner_tree_selection_changed_cb), page); g_signal_connect (G_OBJECT (tree_view), "button-press-event", G_CALLBACK (gnc_plugin_page_owner_tree_button_press_cb), page); g_signal_connect (G_OBJECT (tree_view), "row-activated", G_CALLBACK (gnc_plugin_page_owner_tree_double_click_cb), page); gtk_tree_view_set_headers_visible(tree_view, TRUE); gnc_plugin_page_owner_tree_selection_changed_cb (NULL, page); gtk_widget_show (GTK_WIDGET (tree_view)); gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET(tree_view)); priv->fd.tree_view = GNC_TREE_VIEW_OWNER(priv->tree_view); gnc_tree_view_owner_set_filter ( GNC_TREE_VIEW_OWNER(tree_view), gnc_plugin_page_owner_tree_filter_owners, &priv->fd, NULL); priv->component_id = gnc_register_gui_component(PLUGIN_PAGE_ACCT_TREE_CM_CLASS, gnc_plugin_page_owner_refresh_cb, gnc_plugin_page_owner_tree_close_cb, page); gnc_gui_component_set_session (priv->component_id, gnc_get_current_session()); LEAVE("widget = %p", priv->widget); return priv->widget; }