1 /* 2 * gnc-tree-model-account-types.h -- GtkTreeModel implementation 3 * to display account types in a GtkTreeView. 4 * 5 * Copyright (C) 2003 Jan Arne Petersen <jpetersen@uni-bonn.de> 6 * Copyright (C) 2005, 2006 Chris Shoemaker <c.shoemaker@cox.net> 7 * Copyright (C) 2006 Eskil Bylund <eskil.bylund@gmail.com> 8 * 9 * This program is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU General Public License as 11 * published by the Free Software Foundation; either version 2 of 12 * the License, or (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, contact: 21 * 22 * Free Software Foundation Voice: +1-617-542-5942 23 * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 24 * Boston, MA 02110-1301, USA gnu@gnu.org 25 */ 26 /** @addtogroup GUI 27 * @{ */ 28 /** @addtogroup GuiTreeModel 29 * @{ */ 30 /** @file gnc-tree-model-account-types.h 31 * @brief GtkTreeModel implementation to display account types in a 32 * GtkTreeView. 33 * @author Copyright (C) 2003 Jan Arne Petersen 34 * @author: Jan Arne Petersen <jpetersen@uni-bonn.de> 35 * 36 */ 37 38 #ifndef __GNC_TREE_MODEL_ACCOUNT_TYPES_H 39 #define __GNC_TREE_MODEL_ACCOUNT_TYPES_H 40 41 #include "Account.h" 42 43 G_BEGIN_DECLS 44 45 /* type macros */ 46 #define GNC_TYPE_TREE_MODEL_ACCOUNT_TYPES (gnc_tree_model_account_types_get_type ()) 47 #define GNC_TREE_MODEL_ACCOUNT_TYPES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_TREE_MODEL_ACCOUNT_TYPES, GncTreeModelAccountTypes)) 48 #define GNC_TREE_MODEL_ACCOUNT_TYPES_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GNC_TYPE_TREE_MODEL_ACCOUNT_TYPES, GncTreeModelAccountTypesClass)) 49 #define GNC_IS_TREE_MODEL_ACCOUNT_TYPES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_TREE_MODEL_ACCOUNT_TYPES)) 50 #define GNC_IS_TREE_MODEL_ACCOUNT_TYPES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_TREE_MODEL_ACCOUNT_TYPES)) 51 #define GNC_TREE_MODEL_ACCOUNT_TYPES_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_TREE_MODEL_ACCOUNT_TYPES, GncTreeModelAccountTypesClass)) 52 53 typedef enum 54 { 55 GNC_TREE_MODEL_ACCOUNT_TYPES_COL_TYPE, 56 GNC_TREE_MODEL_ACCOUNT_TYPES_COL_NAME, 57 GNC_TREE_MODEL_ACCOUNT_TYPES_COL_SELECTED, 58 GNC_TREE_MODEL_ACCOUNT_TYPES_NUM_COLUMNS 59 } GncTreeModelAccountTypesColumn; 60 61 /* typedefs & structures */ 62 typedef struct 63 { 64 GObject gobject; 65 int stamp; 66 } GncTreeModelAccountTypes; 67 68 typedef struct 69 { 70 GObjectClass gobject; 71 } GncTreeModelAccountTypesClass; 72 73 /* function prototypes */ 74 GType gnc_tree_model_account_types_get_type (void); 75 76 /* Choose one of two methods to use the GncTreeModelAccountTypes 77 objects defined here, depending on how you want to deal with 78 selection state. Method 1 is simpler and light-weight, but Method 79 2 is more flexible. 80 81 Method 1: If you just want to allow selection of a subset of all 82 account types while showing all account types, use 83 gnc_tree_model_account_types_master() to get the treemodel. 84 Connect it to your tree view and use 85 gnc_tree_model_account_types_{sg}et_selection() to convert between 86 bitmasks and GtkTreeView states. No need to free the treemodel. 87 88 Method 2: If you must store selection state in the model for some 89 reason (maybe you want to use a checkbox column to indicate 90 selection?) then you need your own instance from 91 gnc_tree_model_account_types_new(). Use 92 gnc_tree_model_account_types_{gs}et_selected() to get and set the 93 models "SELECTED" column values. You must free the model when 94 you're done with it. 95 96 */ 97 98 /*************** Method 1 functions ***************/ 99 100 /* Returns a GtkTreeModelFilter that wraps the model. Only account 101 types specified by the 'types' bitmask are visible. To force the 102 visibility of deprecated account types, pass 103 (xaccAccountTypesValid() | (1 << xaccAccountGetType(acct))). 104 105 To get the GtkTreeModel that shows all account types, including 106 deprecated account types, pass (-1). 107 108 To get the GtkTreeModel that only shows non-deprecated account types, 109 use gnc_tree_model_account_types_valid(). 110 111 Caller is responsible for ref/unref. */ 112 GtkTreeModel * gnc_tree_model_account_types_filter_using_mask (guint32 types); 113 114 /* Update the set of the visibible account types in 'f_model' to 'types'. */ 115 void gnc_tree_model_account_types_set_mask (GtkTreeModel *f_model, 116 guint32 types); 117 118 /* Return the current set of the visibible account types. */ 119 guint32 gnc_tree_model_account_types_get_mask (GtkTreeModel *f_model); 120 121 /* Return the bitmask of the account type enums reflecting the state 122 of the tree selection. If your view allows the selection of 123 multiple account types, use must use this function to get the 124 selection. */ 125 guint32 gnc_tree_model_account_types_get_selection(GtkTreeSelection *sel); 126 127 /* Gets the selected account type. Use the function if your view 128 allows the selection of only one account type. If no types are 129 selected, returns ACCT_TYPE_NONE. If more than one type is 130 selected, arbitrarily returns one of the selected types. */ 131 GNCAccountType 132 gnc_tree_model_account_types_get_selection_single(GtkTreeSelection *sel); 133 134 /* Set the selection state of the tree selection to match the bitmask 135 of account-type enums in 'selected'. This will also scroll to a 136 selected row in the TreeView.*/ 137 void gnc_tree_model_account_types_set_selection(GtkTreeSelection *sel, 138 guint32 selected); 139 140 141 /**************** Method 2 functions **************/ 142 143 GtkTreeModel *gnc_tree_model_account_types_new(guint32 selected); 144 145 146 G_END_DECLS 147 148 #endif /* __GNC_TREE_MODEL_ACCOUNT_H */ 149 150 /** @} */ 151 /** @} */ 152