/usr/include/gnucash/table-allgui.h is in gnucash-common 1:2.4.10-6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 | /********************************************************************\
* table-allgui.h -- 2D grid table object, embeds cells for i/o *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation; either version 2 of *
* the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License*
* along with this program; if not, contact: *
* *
* Free Software Foundation Voice: +1-617-542-5942 *
* 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
* Boston, MA 02110-1301, USA gnu@gnu.org *
* *
\********************************************************************/
/** @addtogroup GUI
* @{
*/
/** @addtogroup Register Registers, Ledgers and Journals
* @{
*/
/** @addtogroup RegisterCore Register Core
* @{
*/
/** @file table-allgui.h
* @brief Declarations for the Table object
* @author Copyright (c) 1998,1999,2000 Linas Vepstas
* @author Copyright (c) 2000-2001 Dave Peticolas
*
* @details
* The Table object defines the structure and the GUI required
* to display a two-dimensional grid. It provides several
* important functions:
* - An array of virtual cells. These cells contain:
* - the cellblock handler for that virtual cell.
* - a user data pointer
* - Tab-traversing mechanism so that operator can tab in a
* predefined order between cells.
*
* Please see src/doc/design/gnucash-design.info for additional information.
*
* This implements the gui-independent parts of the table
* infrastructure. Additional, GUI-dependent parts are implemented
* in table-gnome.c.
*
* The following concepts apply to the rows in a table:
* - a cursor is always the same size as the virt row its on,
* - there is only one cursor for a given virt row.
* - there is no overlap; a phys row can only belong to one virt row.
*
* Lets say there are three cursors T(rans), S(plit), and B(lank).
* Lets say that these are used to 'print' the following table layout:
*
@verbatim
virtual row 1 T
virtual row 2 S
virtual row 3 B
virtual row 4 T
virtual row 5 S
virtual row 6 S
virtual row 7 S
virtual row 8 S
virtual row 9 B
@endverbatim
*
* You can see there is only one cursor per virtual row. There is no overlap
* between cursors and virtual rows; the correspondence is one to one. Note
* that the three cursors T, S and B may consist of one, or more physical rows,
* e.g. B and S may be one line each, but T may be two lines. Thus, we
* have the following physical layout:
*
@verbatim
physical row 1 virtual row 1 T
physical row 2 virtual row 1 T
physical row 3 virtual row 2 S
physical row 4 virtual row 3 B
physical row 5 virtual row 4 T
physical row 6 virtual row 4 T
physical row 7 virtual row 5 S
physical row 8 virtual row 6 S
physical row 9 virtual row 7 S
physical row 10 virtual row 8 S
physical row 11 virtual row 9 B
@endverbatim
*
* This layout remains static until the next time that the table is
* re-'printed'.
*/
#ifndef TABLE_ALLGUI_H
#define TABLE_ALLGUI_H
#include <glib.h>
#include "basiccell.h"
#include "cellblock.h"
#include "gtable.h"
#include "register-common.h"
#include "table-control.h"
#include "table-layout.h"
#include "table-model.h"
/* The VirtualCell structure holds information about each virtual cell. */
typedef struct
{
CellBlock *cellblock; /* Array of physical cells */
gpointer vcell_data; /* Used by higher-level code */
/* flags */
unsigned int visible : 1; /* visible in the GUI */
unsigned int start_primary_color : 1; /* color usage flag */
} VirtualCell;
typedef struct table Table;
typedef void (*TableCursorRefreshCB) (Table *table,
VirtualCellLocation vcell_loc,
gboolean do_scroll);
typedef void (*TableRedrawHelpCB) (Table *table);
typedef void (*TableDestroyCB) (Table *table);
typedef struct
{
TableCursorRefreshCB cursor_refresh;
TableRedrawHelpCB redraw_help;
TableDestroyCB destroy;
} TableGUIHandlers;
struct table
{
TableLayout *layout;
TableModel *model;
TableControl *control;
int num_virt_rows;
int num_virt_cols;
CellBlock *current_cursor;
VirtualLocation current_cursor_loc;
/* private data */
/* The virtual cell table */
GTable *virt_cells;
TableGUIHandlers gui_handlers;
gpointer ui_data;
};
/* Set the default gui handlers used by new tables. */
void gnc_table_set_default_gui_handlers (TableGUIHandlers *gui_handlers);
/* Functions to create and destroy Tables. */
Table * gnc_table_new (TableLayout *layout,
TableModel *model,
TableControl *control);
void gnc_virtual_location_init (VirtualLocation *vloc);
void gnc_table_save_state (Table *table);
void gnc_table_destroy (Table *table);
/* Functions to work with current cursor */
int gnc_table_current_cursor_changed (Table *table,
gboolean include_conditional);
void gnc_table_clear_current_cursor_changes (Table *table);
void gnc_table_save_current_cursor (Table *table, CursorBuffer *buffer);
void gnc_table_restore_current_cursor (Table *table,
CursorBuffer *buffer);
const char * gnc_table_get_current_cell_name (Table *table);
gboolean gnc_table_get_current_cell_location (Table *table,
const char *cell_name,
VirtualLocation *virt_loc);
/* This function checks the given location and returns true
* if it is out of bounds of the table. */
gboolean gnc_table_virtual_cell_out_of_bounds (Table *table,
VirtualCellLocation vcell_loc);
gboolean gnc_table_virtual_location_in_header (Table *table,
VirtualLocation virt_loc);
/* This function returns the virtual cell associated with a particular
* virtual location. If the location is out of bounds, NULL is *
* returned. */
VirtualCell * gnc_table_get_virtual_cell (Table *table,
VirtualCellLocation vcell_loc);
const char * gnc_table_get_entry (Table *table, VirtualLocation virt_loc);
const char * gnc_table_get_label (Table *table, VirtualLocation virt_loc);
CellIOFlags gnc_table_get_io_flags (Table *table, VirtualLocation virt_loc);
guint32 gnc_table_get_fg_color (Table *table, VirtualLocation virt_loc);
guint32 gnc_table_get_bg_color (Table *table, VirtualLocation virt_loc,
gboolean *hatching);
guint32 gnc_table_get_gtkrc_bg_color (Table *table, VirtualLocation virt_loc,
gboolean *hatching);
void gnc_table_get_borders (Table *table, VirtualLocation virt_loc,
PhysicalCellBorders *borders);
CellAlignment gnc_table_get_align (Table *table, VirtualLocation virt_loc);
gboolean gnc_table_is_popup (Table *table, VirtualLocation virt_loc);
char * gnc_table_get_help (Table *table);
BasicCell * gnc_table_get_cell (Table *table, VirtualLocation virt_loc);
const char * gnc_table_get_cell_name (Table *table,
VirtualLocation virt_loc);
const gchar * gnc_table_get_cell_type_name (Table *table,
VirtualLocation virt_loc);
gboolean gnc_table_get_cell_location (Table *table,
const char * cell_name,
VirtualCellLocation vcell_loc,
VirtualLocation *virt_loc);
void gnc_table_save_cells (Table *table, gpointer save_data);
/* Return the virtual cell of the header */
VirtualCell * gnc_table_get_header_cell (Table *table);
/* The gnc_table_set_size() method will resize the table to the
* indicated dimensions. */
void gnc_table_set_size (Table * table, int virt_rows, int virt_cols);
/* Indicate what handler should be used for a given virtual block */
void gnc_table_set_vcell (Table *table, CellBlock *cursor,
gconstpointer vcell_data,
gboolean visible,
gboolean start_primary_color,
VirtualCellLocation vcell_loc);
/* Set the virtual cell data for a particular location. */
void gnc_table_set_virt_cell_data (Table *table,
VirtualCellLocation vcell_loc,
gconstpointer vcell_data);
/* Set the visibility flag for a particular location. */
void gnc_table_set_virt_cell_visible (Table *table,
VirtualCellLocation vcell_loc,
gboolean visible);
/* Set the cellblock handler for a virtual cell. */
void gnc_table_set_virt_cell_cursor (Table *table,
VirtualCellLocation vcell_loc,
CellBlock *cursor);
/* The gnc_table_move_cursor() method will move the cursor (but not
* the cursor GUI) to the indicated location. This function is
* useful when loading the table from the cursor: data can be loaded
* into the cursor, then committed to the table, all without the
* annoying screen flashing associated with GUI redraw. */
void gnc_table_move_cursor (Table *table, VirtualLocation virt_loc);
/* The gnc_table_move_cursor_gui() method will move the cursor and its
* GUI to the indicated location. Through a series of callbacks, all
* GUI elements get repositioned. */
void gnc_table_move_cursor_gui (Table *table, VirtualLocation virt_loc);
/* The gnc_table_verify_cursor_position() method checks the location
* of the cursor with respect to a virtual location position, and if
* the resulting virtual location has changed, repositions the
* cursor and gui to the new position. Returns true if the cell
* cursor was repositioned. */
gboolean gnc_table_verify_cursor_position (Table *table,
VirtualLocation virt_loc);
/* The gnc_table_get_vcell_data() method returns the virtual cell data
* associated with a cursor located at the given virtual coords, or
* NULL if the coords are out of bounds. */
gpointer gnc_table_get_vcell_data (Table *table,
VirtualCellLocation vcell_loc);
/* Find a close valid cell. If exact_cell is true, cells that must
* be explicitly selected by the user (as opposed to just tabbing
* into), are considered valid cells. */
gboolean gnc_table_find_close_valid_cell (Table *table,
VirtualLocation *virt_loc,
gboolean exact_cell);
/** UI-specific functions *******************************/
/* Initialize the GUI from a table */
void gnc_table_init_gui (GtkWidget *widget, gpointer data);
void gnc_table_realize_gui (Table *table);
/* Refresh the current cursor gui */
void gnc_table_refresh_current_cursor_gui (Table * table,
gboolean do_scroll);
/* Refresh the whole GUI from the table. */
void gnc_table_refresh_gui (Table *table, gboolean do_scroll);
/* Try to show the whole range in the register. */
void gnc_table_show_range (Table *table,
VirtualCellLocation start_loc,
VirtualCellLocation end_loc);
/* Refresh the cursor in the given location. If do_scroll is TRUE,
* scroll the register so the location is in view. */
void gnc_table_refresh_cursor_gui (Table * table,
VirtualCellLocation vcell_loc,
gboolean do_scroll);
/* ==================================================== */
void gnc_table_wrap_verify_cursor_position (Table *table,
VirtualLocation virt_loc);
gboolean gnc_table_virtual_loc_valid(Table *table,
VirtualLocation virt_loc,
gboolean exact_pointer);
gboolean gnc_table_move_tab (Table *table,
VirtualLocation *virt_loc,
gboolean move_right);
/** Moves away from virtual location @a virt_loc by @a phys_row_offset physical
* rows. Virtual cells that are not visible are skipped over.
*
* @param table The table
*
* @param virt_loc The virtual location to start from. If the move succeeds,
* it is updated with the new location.
*
* @param phys_row_offset The number of physical rows to move. A positive
* number moves down and a negative number moves up.
*
* @return TRUE if the location changed, FALSE otherwise
*/
gboolean gnc_table_move_vertical_position (Table *table,
VirtualLocation *virt_loc,
int phys_row_offset);
gboolean gnc_table_enter_update(Table *table,
VirtualLocation virt_loc,
int *cursor_position,
int *start_selection,
int *end_selection);
void gnc_table_leave_update(Table *table, VirtualLocation virt_loc);
gboolean gnc_table_confirm_change(Table *table, VirtualLocation virt_loc);
const char * gnc_table_modify_update(Table *table,
VirtualLocation virt_loc,
const char *change,
int change_len,
const char *newval,
int newval_len,
int *cursor_position,
int *start_selection,
int *end_selection,
gboolean *cancelled);
gboolean gnc_table_direct_update(Table *table,
VirtualLocation virt_loc,
char **newval_ptr,
int *cursor_position,
int *start_selection,
int *end_selection,
gpointer gui_data);
gboolean gnc_table_traverse_update(Table *table,
VirtualLocation virt_loc,
gncTableTraversalDir dir,
VirtualLocation *dest_loc);
#endif /* TABLE_ALLGUI_H */
/** @} */
/** @} */
/** @} */
|