215 lines
7.0 KiB
C
215 lines
7.0 KiB
C
|
/** \file
|
||
|
* \brief iupmatrix. definitions.
|
||
|
*
|
||
|
* See Copyright Notice in "iup.h"
|
||
|
*/
|
||
|
|
||
|
#ifndef __IUPMAT_DEF_H
|
||
|
#define __IUPMAT_DEF_H
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#define IMAT_PROCESS_COL 1 /* Process the columns */
|
||
|
#define IMAT_PROCESS_LIN 2 /* Process the lines */
|
||
|
|
||
|
/***************************************************************************/
|
||
|
/* Decoration size in pixels */
|
||
|
/***************************************************************************/
|
||
|
#define IMAT_PADDING_W 6
|
||
|
#define IMAT_PADDING_H 6
|
||
|
#define IMAT_FRAME_W 2
|
||
|
#define IMAT_FRAME_H 2
|
||
|
|
||
|
/* Cell/Column/Line flags */
|
||
|
#define IMAT_HAS_FONT 0x01 /* Has FONTL:C attribute */
|
||
|
#define IMAT_HAS_FGCOLOR 0x02 /* Has FGCOLORL:C attribute */
|
||
|
#define IMAT_HAS_BGCOLOR 0x04 /* Has BGCOLORL:C attribute */
|
||
|
#define IMAT_IS_MARKED 0x08 /* Is marked */
|
||
|
#define IMAT_HAS_FRAMEHORIZCOLOR 0x10 /* Has FRAMEHORIZCOLORL:C */
|
||
|
#define IMAT_HAS_FRAMEVERTCOLOR 0x20 /* Has FRAMEVERTCOLORL:C */
|
||
|
#define IMAT_HAS_TYPE 0x40 /* Has TYPEL:C attribute */
|
||
|
|
||
|
/* Numeric Column flags */
|
||
|
#define IMAT_IS_NUMERIC 1 /* Is numeric */
|
||
|
#define IMAT_HAS_FORMAT 2 /* has format for lin!= 0 */
|
||
|
#define IMAT_HAS_FORMATTITLE 4 /* has format for lin== 0 */
|
||
|
|
||
|
enum{IMAT_TYPE_TEXT,
|
||
|
IMAT_TYPE_COLOR,
|
||
|
IMAT_TYPE_IMAGE,
|
||
|
IMAT_TYPE_FILL};
|
||
|
|
||
|
enum{IMAT_EDITNEXT_LIN,
|
||
|
IMAT_EDITNEXT_COL,
|
||
|
IMAT_EDITNEXT_LINCR,
|
||
|
IMAT_EDITNEXT_COLCR,
|
||
|
IMAT_EDITNEXT_NONE};
|
||
|
|
||
|
/* Text Alignment that will be draw. Used by iMatrixDrawCellValue */
|
||
|
#define IMAT_ALIGN_CENTER 0
|
||
|
#define IMAT_ALIGN_START 1
|
||
|
#define IMAT_ALIGN_END 2
|
||
|
|
||
|
typedef double (*ImatNumericConvertFunc)(double number, int quantity, int src_units, int dst_units);
|
||
|
|
||
|
|
||
|
/***************************************************************************/
|
||
|
/* Structures stored in each matrix */
|
||
|
/***************************************************************************/
|
||
|
typedef struct _ImatCell
|
||
|
{
|
||
|
char *value; /* Cell value */
|
||
|
unsigned char flags; /* Attribute flags for the cell */
|
||
|
} ImatCell;
|
||
|
|
||
|
typedef struct _ImatLinCol
|
||
|
{
|
||
|
int size; /* Width/height of the column/line */
|
||
|
unsigned char flags; /* Attribute flags for the column/line */
|
||
|
} ImatLinCol;
|
||
|
|
||
|
typedef struct _ImatLinColData
|
||
|
{
|
||
|
ImatLinCol* dt; /* columns/lines data (allocated after map) */
|
||
|
|
||
|
int num; /* Number of columns/lines, default/minimum=1, always includes the non scrollable cells */
|
||
|
int num_alloc; /* Number of columns/lines allocated, default=5 */
|
||
|
int num_noscroll; /* Number of non scrollable columns/lines, default/minimum=1 */
|
||
|
|
||
|
int first_offset; /* Scroll offset of the first visible column/line from right to left
|
||
|
(or the invisible part of the first visible cell)
|
||
|
This is how the scrollbar controls scrolling of cells. */
|
||
|
int first; /* First visible column/line */
|
||
|
int last; /* Last visible column/line */
|
||
|
|
||
|
/* used to configure the scrollbar */
|
||
|
int total_visible_size; /* Sum of the widths/heights of the columns/lines, not including the non scrollable cells */
|
||
|
int current_visible_size; /* Width/height of the visible window, not including the non scrollable cells */
|
||
|
|
||
|
int total_size; /* Sum of the widths/heights of all columns/lines */
|
||
|
|
||
|
int focus_cell; /* index of the current cell */
|
||
|
} ImatLinColData;
|
||
|
|
||
|
typedef struct _ImatNumericData
|
||
|
{
|
||
|
unsigned char quantity;
|
||
|
unsigned char unit, unit_shown;
|
||
|
unsigned char flags;
|
||
|
} ImatNumericData;
|
||
|
|
||
|
typedef struct _ImatMergedData
|
||
|
{
|
||
|
int start_lin;
|
||
|
int start_col;
|
||
|
int end_lin;
|
||
|
int end_col;
|
||
|
unsigned char used;
|
||
|
} ImatMergedData;
|
||
|
|
||
|
struct _IcontrolData
|
||
|
{
|
||
|
iupCanvas canvas; /* from IupCanvas (must reserve it) */
|
||
|
|
||
|
ImatCell** cells; /* Cell value, this will be NULL if in callback mode (allocated after map) */
|
||
|
|
||
|
Ihandle* texth; /* Text handle */
|
||
|
Ihandle* droph; /* Dropdown handle */
|
||
|
Ihandle* datah; /* Current active edition element, may be equal to texth or droph */
|
||
|
int editing,
|
||
|
edit_hide_onfocus, edit_lin, edit_col,
|
||
|
edit_hidden_byfocus; /* Used by MatrixList */
|
||
|
|
||
|
cdCanvas* cd_canvas;
|
||
|
|
||
|
ImatLinColData lines;
|
||
|
ImatLinColData columns;
|
||
|
int noscroll_as_title; /* Non scrollable columns/lines shown as title columns/lines, default=0 */
|
||
|
|
||
|
/* State */
|
||
|
int has_focus;
|
||
|
int w, h;
|
||
|
int callback_mode;
|
||
|
int need_calcsize;
|
||
|
int need_redraw;
|
||
|
int inside_markedit_cb; /* avoid recursion */
|
||
|
int last_sort_col;
|
||
|
|
||
|
/* attributes */
|
||
|
int mark_continuous, mark_mode, mark_multiple;
|
||
|
int hidden_text_marks, editnext;
|
||
|
int use_title_size; /* use title contents when calculating cell size */
|
||
|
int limit_expand; /* limit expand to maximum size */
|
||
|
int undo_redo,
|
||
|
flat,
|
||
|
show_fill_value;
|
||
|
|
||
|
/* Mouse and Keyboard AUX */
|
||
|
int button1edit, button1press;
|
||
|
int homekeycount, endkeycount; /* numbers of times that key was pressed */
|
||
|
|
||
|
/* ColRes AUX */
|
||
|
int colres_dragging, /* indicates if it is being made a column resize */
|
||
|
colres_drag_col, /* column being resized, handler is at right of the column */
|
||
|
colres_drag_col_start_x; /* handler start position */
|
||
|
long colres_color;
|
||
|
int colres_feedback; /* draw the colres feedback */
|
||
|
int colres_x, colres_y1, colres_y2;
|
||
|
int colres_drag; /* draw while dragging */
|
||
|
|
||
|
/* Mark AUX */
|
||
|
int mark_lin1, mark_col1, /* used to store the start cell when a block is being marked */
|
||
|
mark_lin2, mark_col2, /* used to store the end cell when a block was marked */
|
||
|
mark_full1, /* indicate if full lines or columns is being selected */
|
||
|
mark_full2;
|
||
|
int mark_block; /* inside MarkBlockBegin/MarkBlockEnd */
|
||
|
|
||
|
/* Draw AUX, valid only after iupMatrixPrepareDrawData */
|
||
|
sIFnii font_cb, type_cb;
|
||
|
IFniiIII fgcolor_cb;
|
||
|
IFniiIII bgcolor_cb;
|
||
|
char *bgcolor, *bgcolor_parent, *fgcolor, *font; /* not need to free */
|
||
|
long bgcolor_cd;
|
||
|
|
||
|
/* Clipping AUX for cell */
|
||
|
int clip_x1, clip_x2, clip_y1, clip_y2;
|
||
|
|
||
|
/* Numeric Columns */
|
||
|
char numeric_buffer_get[80];
|
||
|
char numeric_buffer_set[80];
|
||
|
ImatNumericData* numeric_columns; /* information for numeric columns (allocated after map) */
|
||
|
ImatNumericConvertFunc numeric_convert_func;
|
||
|
|
||
|
/* Column Sort */
|
||
|
int* sort_line_index; /* Remap index of the line */
|
||
|
int sort_has_index; /* has a remap index of columns/lines */
|
||
|
|
||
|
/* merged ranges */
|
||
|
ImatMergedData* merge_info; /* must free if not NULL */
|
||
|
int merge_info_max, merge_info_count;
|
||
|
};
|
||
|
|
||
|
|
||
|
int iupMatrixIsValid(Ihandle* ih, int check_cells);
|
||
|
void iupMatrixRegisterEx(Iclass* ic);
|
||
|
|
||
|
#define iupMATRIX_INVERTYAXIS(_ih, _y) cdCanvasInvertYAxis((_ih)->data->cd_canvas, (_y))
|
||
|
|
||
|
#define iupMATRIX_CHECK_COL(_ih, _col) ((_col >= 0) && (_col < (_ih)->data->columns.num))
|
||
|
#define iupMATRIX_CHECK_LIN(_ih, _lin) ((_lin >= 0) && (_lin < (_ih)->data->lines.num))
|
||
|
|
||
|
int iupMatrixGetScrollbar(Ihandle* ih);
|
||
|
int iupMatrixGetScrollbarSize(Ihandle* ih);
|
||
|
int iupMatrixGetWidth(Ihandle* ih);
|
||
|
int iupMatrixGetHeight(Ihandle* ih);
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif
|