GtkTreeView* gnc_tree_view_sx_list_new(GncSxInstanceModel *sx_instances) { GncTreeView *view; GtkTreeViewColumn *col; GncTreeViewSxListPrivate *priv; view = (GncTreeView*)g_object_new(GNC_TYPE_TREE_VIEW_SX_LIST, NULL); g_object_set(view, "name", "sx_list_tree", NULL); priv = GNC_TREE_VIEW_SX_LIST_GET_PRIVATE(view); priv->tree_model = GTK_TREE_MODEL(gnc_sx_list_tree_model_adapter_new(sx_instances)); gnc_tree_view_set_model(view, GTK_TREE_MODEL(priv->tree_model)); col = gnc_tree_view_add_text_column(view, _("Name"), "name", NULL, "Semi-Monthly Paycheck", SXLTMA_COL_NAME, -1, NULL); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); col = gnc_tree_view_add_toggle_column(view, _("Enabled"), /* Translators: This string has a context prefix; the translation must only contain the part after the | character. */ Q_("Single-character short column-title form of 'Enabled'|E"), "enabled", SXLTMA_COL_ENABLED, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, NULL, NULL); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); col = gnc_tree_view_add_text_column(view, _("Frequency"), "frequency", NULL, "Weekly (x3): -------", SXLTMA_COL_FREQUENCY, -1, NULL); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); col = gnc_tree_view_add_text_column(view, _("Last Occur"), "last-occur", NULL, "2007-01-02", SXLTMA_COL_LAST_OCCUR, -1, NULL); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); col = gnc_tree_view_add_text_column(view, _("Next Occur"), "next-occur", NULL, "2007-01-02", SXLTMA_COL_NEXT_OCCUR, -1, NULL); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); gnc_tree_view_configure_columns(view); gtk_widget_show(GTK_WIDGET(view)); return GTK_TREE_VIEW(view); }
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 (); }
/* * Create a new price tree view with (optional) top level root node. * This view will be based on a model that is common to all view of * the same set of books, but will have its own private filter on that * model. */ GtkTreeView * gnc_tree_view_price_new (QofBook *book, const gchar *first_property_name, ...) { GncTreeView *view; GtkTreeModel *model, *f_model, *s_model; GtkTreeViewColumn *col; GNCPriceDB *price_db; va_list var_args; const gchar *sample_text; gchar *sample_text2; ENTER(" "); /* Create/get a pointer to the existing model for this set of books. */ price_db = gnc_pricedb_get_db(book); model = gnc_tree_model_price_new (book, price_db); /* Set up the view private filter on the common model. */ f_model = gtk_tree_model_filter_new (model, NULL); g_object_unref(G_OBJECT(model)); s_model = gtk_tree_model_sort_new_with_model (f_model); g_object_unref(G_OBJECT(f_model)); /* Create our view */ view = g_object_new (GNC_TYPE_TREE_VIEW_PRICE, "name", "price_tree", NULL); gtk_tree_view_set_model (GTK_TREE_VIEW (view), s_model); g_object_unref(G_OBJECT(s_model)); DEBUG("model ref count is %d", G_OBJECT(model)->ref_count); DEBUG("f_model ref count is %d", G_OBJECT(f_model)->ref_count); DEBUG("s_model ref count is %d", G_OBJECT(s_model)->ref_count); sample_text = gnc_commodity_get_printname(gnc_default_currency()); sample_text2 = g_strdup_printf("%s%s", sample_text, sample_text); col = gnc_tree_view_add_text_column ( view, _("Security"), "security", NULL, sample_text2, GNC_TREE_MODEL_PRICE_COL_COMMODITY, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_name); g_free(sample_text2); col = gnc_tree_view_add_text_column ( view, _("Currency"), "currency", NULL, sample_text, GNC_TREE_MODEL_PRICE_COL_CURRENCY, GNC_TREE_MODEL_PRICE_COL_VISIBILITY, sort_by_name); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); col = gnc_tree_view_add_text_column ( view, _("Date"), "date", NULL, "2005-05-20", GNC_TREE_MODEL_PRICE_COL_DATE, GNC_TREE_MODEL_PRICE_COL_VISIBILITY, sort_by_date); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); col = gnc_tree_view_add_text_column ( view, _("Source"), "source", NULL, "Finance::Quote", GNC_TREE_MODEL_PRICE_COL_SOURCE, GNC_TREE_MODEL_PRICE_COL_VISIBILITY, sort_by_source); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); col = gnc_tree_view_add_text_column ( view, _("Type"), "type", NULL, "last", GNC_TREE_MODEL_PRICE_COL_TYPE, GNC_TREE_MODEL_PRICE_COL_VISIBILITY, sort_by_type); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); col = gnc_tree_view_add_numeric_column ( view, _("Price"), "price", "100.00000", GNC_TREE_MODEL_PRICE_COL_VALUE, GNC_TREE_VIEW_COLUMN_COLOR_NONE, GNC_TREE_MODEL_PRICE_COL_VISIBILITY, sort_by_value); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); gnc_tree_view_configure_columns(view); /* Set properties */ va_start (var_args, first_property_name); g_object_set_valist (G_OBJECT(view), first_property_name, var_args); va_end (var_args); /* Sort on the commodity column by default. This allows for a consistent * sort if commodities are removed and re-added from the model. */ if (!gtk_tree_sortable_get_sort_column_id(GTK_TREE_SORTABLE(s_model), NULL, NULL)) { gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(s_model), GNC_TREE_MODEL_PRICE_COL_COMMODITY, GTK_SORT_ASCENDING); } gtk_widget_show(GTK_WIDGET(view)); LEAVE(" %p", view); return GTK_TREE_VIEW(view); }
/* * Create a new commodity tree view with (optional) top level root node. * This view will be based on a model that is common to all view of * the same set of books, but will have its own private filter on that * model. */ GtkTreeView * gnc_tree_view_commodity_new (QofBook *book, const gchar *first_property_name, ...) { GncTreeView *view; GtkTreeModel *model, *f_model, *s_model; GtkTreeViewColumn *col; gnc_commodity_table *ct; va_list var_args; ENTER(" "); /* Create/get a pointer to the existing model for this set of books. */ ct = gnc_commodity_table_get_table (book); model = gnc_tree_model_commodity_new (book, ct); /* Set up the view private filter on the common model. */ f_model = gtk_tree_model_filter_new (model, NULL); g_object_unref(G_OBJECT(model)); s_model = gtk_tree_model_sort_new_with_model (f_model); g_object_unref(G_OBJECT(f_model)); /* Create our view */ view = g_object_new (GNC_TYPE_TREE_VIEW_COMMODITY, "name", "commodity_tree", NULL); gtk_tree_view_set_model (GTK_TREE_VIEW (view), s_model); g_object_unref(G_OBJECT(s_model)); DEBUG("model ref count is %d", G_OBJECT(model)->ref_count); DEBUG("f_model ref count is %d", G_OBJECT(f_model)->ref_count); DEBUG("s_model ref count is %d", G_OBJECT(s_model)->ref_count); /* Set default visibilities */ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(view), FALSE); col = gnc_tree_view_add_text_column ( view, _("Namespace"), "namespace", NULL, "NASDAQ", GNC_TREE_MODEL_COMMODITY_COL_NAMESPACE, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_commodity_string); col = gnc_tree_view_add_text_column ( view, _("Symbol"), "symbol", NULL, "ACMEACME", GNC_TREE_MODEL_COMMODITY_COL_MNEMONIC, GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY, sort_by_commodity_string); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); col = gnc_tree_view_add_text_column ( view, _("Name"), "name", NULL, "Acme Corporation, Inc.", GNC_TREE_MODEL_COMMODITY_COL_FULLNAME, GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY, sort_by_commodity_string); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); col = gnc_tree_view_add_text_column ( view, _("Print Name"), "printname", NULL, "ACMEACME (Acme Corporation, Inc.)", GNC_TREE_MODEL_COMMODITY_COL_PRINTNAME, GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY, sort_by_commodity_string); col = gnc_tree_view_add_text_column ( view, _("Display symbol"), "user_symbol", NULL, "ACME", GNC_TREE_MODEL_COMMODITY_COL_USER_SYMBOL, GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY, sort_by_commodity_string); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); col = gnc_tree_view_add_text_column ( view, _("Unique Name"), "uniquename", NULL, "NASDAQ::ACMEACME", GNC_TREE_MODEL_COMMODITY_COL_UNIQUE_NAME, GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY, sort_by_commodity_string); col = gnc_tree_view_add_text_column ( /* Translators: Again replace CUSIP by the name of your National Securities Identifying Number. */ view, _("ISIN/CUSIP"), "cusip_code", NULL, "QWERTYUIOP", GNC_TREE_MODEL_COMMODITY_COL_CUSIP, GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY, sort_by_commodity_string); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); col = gnc_tree_view_add_numeric_column ( view, _("Fraction"), "fraction", "10000", GNC_TREE_MODEL_COMMODITY_COL_FRACTION, GNC_TREE_VIEW_COLUMN_COLOR_NONE, GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY, sort_by_fraction); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); col = gnc_tree_view_add_toggle_column( view, _("Get Quotes"), /* Translators: This string has a context prefix; the translation must only contain the part after the | character. */ Q_("Column letter for 'Get Quotes'|Q"), "quote_flag", GNC_TREE_MODEL_COMMODITY_COL_QUOTE_FLAG, GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY, sort_by_quote_flag, NULL); col = gnc_tree_view_add_text_column ( view, _("Source"), "quote_source", NULL, "yahoo", GNC_TREE_MODEL_COMMODITY_COL_QUOTE_SOURCE, GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY, sort_by_commodity_string); col = gnc_tree_view_add_text_column ( view, _("Timezone"), "quote_timezone", NULL, "America/New_York", GNC_TREE_MODEL_COMMODITY_COL_QUOTE_TZ, GNC_TREE_MODEL_COMMODITY_COL_VISIBILITY, sort_by_commodity_string); g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1)); gnc_tree_view_configure_columns(view); /* Set properties */ va_start (var_args, first_property_name); g_object_set_valist (G_OBJECT(view), first_property_name, var_args); va_end (var_args); /* Sort on the name column by default. This allows for a consistent * sort if commodities are briefly removed and re-added. */ if (!gtk_tree_sortable_get_sort_column_id(GTK_TREE_SORTABLE(s_model), NULL, NULL)) { gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(s_model), GNC_TREE_MODEL_COMMODITY_COL_FULLNAME, GTK_SORT_ASCENDING); } gtk_widget_show(GTK_WIDGET(view)); LEAVE(" %p", view); return GTK_TREE_VIEW(view); }
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(" "); }
/* * Create a new owner tree view for one type of owners. * This view will be based on a model that is common to all views of * the same set of books, but will have its own private filter on that * model. */ GtkTreeView * gnc_tree_view_owner_new (GncOwnerType owner_type) { GncTreeView *view; GtkTreeModel *model, *f_model, *s_model; const gchar *sample_type, *sample_currency; GncTreeViewOwnerPrivate *priv; GtkTreeViewColumn *tax_info_column; GtkCellRenderer *renderer; ENTER(" "); /* Create our view */ view = g_object_new (GNC_TYPE_TREE_VIEW_OWNER, "name", "owner_tree", NULL); priv = GNC_TREE_VIEW_OWNER_GET_PRIVATE(GNC_TREE_VIEW_OWNER (view)); /* Create/get a pointer to the existing model for this set of books. */ model = gnc_tree_model_owner_new (owner_type); /* Set up the view private filter layer on the common model. */ f_model = gtk_tree_model_filter_new (model, NULL); /* A GncTreeModelOwner is based on a GncTreeModel, which is a * GObject that provides a GtkTreeModel interface. */ g_object_unref(G_OBJECT(model)); /* Set up the view private sort layer on the common model. */ s_model = gtk_tree_model_sort_new_with_model(f_model); g_object_unref(G_OBJECT(f_model)); gnc_tree_view_set_model (view, s_model); g_object_unref(G_OBJECT(s_model)); /* Set default visibilities */ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(view), FALSE); sample_type = gncOwnerTypeToQofIdType (GNC_OWNER_CUSTOMER); sample_currency = gnc_commodity_get_fullname(gnc_default_currency()); priv->name_column = gnc_tree_view_add_text_column(view, _("Owner Name"), GNC_OWNER_TREE_NAME_COL, NULL, "GnuCash Inc.", GNC_TREE_MODEL_OWNER_COL_NAME, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_string); gnc_tree_view_add_text_column(view, _("Type"), GNC_OWNER_TREE_TYPE_COL, NULL, sample_type, GNC_TREE_MODEL_OWNER_COL_TYPE, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_string); priv->id_column = gnc_tree_view_add_text_column(view, _("Owner ID"), GNC_OWNER_TREE_ID_COL, NULL, "1-123-1234", GNC_TREE_MODEL_OWNER_COL_ID, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_string); gnc_tree_view_add_text_column(view, _("Currency"), GNC_OWNER_TREE_CURRENCY_COL, NULL, sample_currency, GNC_TREE_MODEL_OWNER_COL_CURRENCY, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_string); gnc_tree_view_add_text_column(view, _("Address Name"), GNC_OWNER_TREE_ADDRESS_NAME_COL, NULL, "GnuCash Inc.", GNC_TREE_MODEL_OWNER_COL_ADDRESS_NAME, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_string); gnc_tree_view_add_text_column(view, _("Address 1"), GNC_OWNER_TREE_ADDRESS_1_COL, NULL, "Free Software Foundation", GNC_TREE_MODEL_OWNER_COL_ADDRESS_1, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_string); gnc_tree_view_add_text_column(view, _("Address 2"), GNC_OWNER_TREE_ADDRESS_2_COL, NULL, "51 Franklin Street, Fifth Floor", GNC_TREE_MODEL_OWNER_COL_ADDRESS_2, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_string); gnc_tree_view_add_text_column(view, _("Address 3"), GNC_OWNER_TREE_ADDRESS_3_COL, NULL, "Boston, MA 02110-1301", GNC_TREE_MODEL_OWNER_COL_ADDRESS_3, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_string); gnc_tree_view_add_text_column(view, _("Address 4"), GNC_OWNER_TREE_ADDRESS_4_COL, NULL, "USA", GNC_TREE_MODEL_OWNER_COL_ADDRESS_4, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_string); gnc_tree_view_add_text_column(view, _("Phone"), GNC_OWNER_TREE_PHONE_COL, NULL, "+1-617-542-5942", GNC_TREE_MODEL_OWNER_COL_PHONE, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_string); gnc_tree_view_add_text_column(view, _("Fax"), GNC_OWNER_TREE_FAX_COL, NULL, "+1-617-542-2652", GNC_TREE_MODEL_OWNER_COL_FAX, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_string); gnc_tree_view_add_text_column(view, _("E-mail"), GNC_OWNER_TREE_EMAIL_COL, NULL, "*****@*****.**", GNC_TREE_MODEL_OWNER_COL_EMAIL, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_string); gnc_tree_view_add_numeric_column(view, _("Balance"), GNC_OWNER_TREE_BALANCE_COL, SAMPLE_OWNER_VALUE, GNC_TREE_MODEL_OWNER_COL_BALANCE, GNC_TREE_MODEL_OWNER_COL_COLOR_BALANCE, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_balance_value); priv->balance_report_column = gnc_tree_view_add_numeric_column(view, _("Balance"), GNC_OWNER_TREE_BALANCE_REPORT_COL, SAMPLE_OWNER_VALUE, GNC_TREE_MODEL_OWNER_COL_BALANCE_REPORT, GNC_TREE_MODEL_OWNER_COL_COLOR_BALANCE, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_balance_value); priv->notes_column = gnc_tree_view_add_text_column(view, _("Notes"), GNC_OWNER_TREE_NOTES_COL, NULL, "Sample owner notes.", GNC_TREE_MODEL_OWNER_COL_NOTES, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_string); gnc_tree_view_add_toggle_column (view, _("Active"), /* Translators: This string has a context prefix; the translation must only contain the part after the | character. */ Q_("Column letter for 'Active'|A"), GNC_OWNER_TREE_ACTIVE_COL, GNC_TREE_MODEL_OWNER_COL_ACTIVE, GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, sort_by_boolean, gnc_tree_view_owner_active_toggled); /* Update column titles to use the currency name. */ gtvo_update_column_names(view); /* By default only the first column is visible. */ gnc_tree_view_configure_columns(view); gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (f_model), gnc_tree_view_owner_filter_helper, view, NULL); /* Default the sorting to owner name */ gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(s_model), GNC_TREE_MODEL_OWNER_COL_NAME, GTK_SORT_ASCENDING); gtk_widget_show(GTK_WIDGET(view)); LEAVE("%p", view); return GTK_TREE_VIEW(view); }
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; }