File: MatrixP.h

package info (click to toggle)
gridengine 8.1.9%2Bdfsg-10
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 56,880 kB
  • sloc: ansic: 432,689; java: 87,068; cpp: 31,958; sh: 29,429; jsp: 7,757; perl: 6,336; xml: 5,828; makefile: 4,701; csh: 3,928; ruby: 2,221; tcl: 1,676; lisp: 669; yacc: 519; python: 503; lex: 361; javascript: 200
file content (439 lines) | stat: -rw-r--r-- 20,665 bytes parent folder | download | duplicates (6)
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
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
/*
 * Copyright(c) 1992 Bell Communications Research, Inc. (Bellcore)
 * Copyright(c) 1995-99 Andrew Lister
 *                        All rights reserved
 * Permission to use, copy, modify and distribute this material for
 * any purpose and without fee is hereby granted, provided that the
 * above copyright notice and this permission notice appear in all
 * copies, and that the name of Bellcore not be used in advertising
 * or publicity pertaining to this material without the specific,
 * prior written permission of an authorized representative of
 * Bellcore.
 *
 * BELLCORE MAKES NO REPRESENTATIONS AND EXTENDS NO WARRANTIES, EX-
 * PRESS OR IMPLIED, WITH RESPECT TO THE SOFTWARE, INCLUDING, BUT
 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR ANY PARTICULAR PURPOSE, AND THE WARRANTY AGAINST IN-
 * FRINGEMENT OF PATENTS OR OTHER INTELLECTUAL PROPERTY RIGHTS.  THE
 * SOFTWARE IS PROVIDED "AS IS", AND IN NO EVENT SHALL BELLCORE OR
 * ANY OF ITS AFFILIATES BE LIABLE FOR ANY DAMAGES, INCLUDING ANY
 * LOST PROFITS OR OTHER INCIDENTAL OR CONSEQUENTIAL DAMAGES RELAT-
 * ING TO THE SOFTWARE.
 *
 * MatrixWidget Author: Andrew Wason, Bellcore, aw@bae.bellcore.com
 *
 * $Id: MatrixP.h,v 1.1 2001-07-18 11:05:59 root Exp $
 */

/*
 * MatrixP.h - Private definitions for Matrix widget
 */

#ifndef _Xbae_MatrixP_h
#define _Xbae_MatrixP_h

#if XmVersion <= 1001
#        include <Xm/XmP.h>
#else
#        include <Xm/ManagerP.h>
#endif

#include "Matrix.h"

#ifndef P
#if defined(__STDC__) || defined (__cplusplus)
#define P(x)                x
#else
#define P(x)                ()
#define const
#define volatile
#endif
#endif

/*
 * A few definitions we like to use, but those with R4 won't have.
 * From Xfuncproto.h in R5.
 */

#ifndef XlibSpecificationRelease
# ifndef _XFUNCPROTOBEGIN
#   ifdef __cplusplus                      /* for C++ V2.0 */
#     define _XFUNCPROTOBEGIN extern "C" {   /* do not leave open across includes */
#     define _XFUNCPROTOEND }
#   else
#     define _XFUNCPROTOBEGIN
#     define _XFUNCPROTOEND
#   endif
# endif /* _XFUNCPROTOBEGIN */
#else
#include <X11/Xfuncproto.h>
#endif

/*
 * New types for the class methods
 */
_XFUNCPROTOBEGIN

typedef void (*XbaeMatrixSetCellProc) P((XbaeMatrixWidget, int, int,
                                         const String, Boolean));

typedef String (*XbaeMatrixGetCellProc) P((XbaeMatrixWidget, int, int));

typedef void (*XbaeMatrixEditCellProc) P((XbaeMatrixWidget, XEvent *,
                                          int, int, String *, Cardinal));

typedef void (*XbaeMatrixSelectCellProc) P((XbaeMatrixWidget, int, int));

typedef void (*XbaeMatrixSelectRowProc) P((XbaeMatrixWidget, int));

typedef void (*XbaeMatrixSelectColumnProc) P((XbaeMatrixWidget, int));

typedef void (*XbaeMatrixDeselectAllProc) P((XbaeMatrixWidget));

typedef void (*XbaeMatrixSelectAllProc) P((XbaeMatrixWidget));

typedef void (*XbaeMatrixDeselectCellProc) P((XbaeMatrixWidget, int, int));

typedef void (*XbaeMatrixDeselectRowProc) P((XbaeMatrixWidget, int));

typedef void (*XbaeMatrixDeselectColumnProc) P((XbaeMatrixWidget, int));

typedef Boolean (*XbaeMatrixCommitEditProc) P((XbaeMatrixWidget, XEvent *,
                                               Boolean));

typedef void (*XbaeMatrixCancelEditProc) P((XbaeMatrixWidget, Boolean));

typedef void (*XbaeMatrixAddRowsProc) P((XbaeMatrixWidget, int, String *,
                                         String *, Pixel *, Pixel *, int));

typedef void (*XbaeMatrixDeleteRowsProc) P((XbaeMatrixWidget, int, int));

typedef void (*XbaeMatrixAddColumnsProc) P((XbaeMatrixWidget, int, String *,
                                            String *, short *, int *,
                                            unsigned char*, unsigned char *,
                                            Pixel *, Pixel *, int));

typedef void (*XbaeMatrixDeleteColumnsProc) P((XbaeMatrixWidget, int, int));

typedef void (*XbaeMatrixSetRowColorsProc) P((XbaeMatrixWidget, int, Pixel *,
                                              int, Boolean));

typedef void (*XbaeMatrixSetColumnColorsProc) P((XbaeMatrixWidget, int,
                                                 Pixel *, int, Boolean));

typedef void (*XbaeMatrixSetCellColorProc) P((XbaeMatrixWidget, int, int,
                                              Pixel, Boolean));

_XFUNCPROTOEND

/*
 * Different than the traversal directions in Xm.h
 */
#define NOT_TRAVERSING        -1

/*
 * New fields for the Matrix widget class record
 */
typedef struct {
    XbaeMatrixSetCellProc                set_cell;
    XbaeMatrixGetCellProc                get_cell;
    XbaeMatrixEditCellProc                edit_cell;
    XbaeMatrixSelectCellProc                select_cell;
    XbaeMatrixSelectRowProc                select_row;
    XbaeMatrixSelectColumnProc                select_column;
    XbaeMatrixDeselectAllProc                deselect_all;
    XbaeMatrixSelectAllProc                select_all;
    XbaeMatrixDeselectCellProc                deselect_cell;
    XbaeMatrixDeselectRowProc                deselect_row;
    XbaeMatrixDeselectColumnProc        deselect_column;
    XbaeMatrixCommitEditProc                commit_edit;
    XbaeMatrixCancelEditProc                cancel_edit;
    XbaeMatrixAddRowsProc                add_rows;
    XbaeMatrixDeleteRowsProc                delete_rows;
    XbaeMatrixAddColumnsProc                add_columns;
    XbaeMatrixDeleteColumnsProc                delete_columns;
    XbaeMatrixSetRowColorsProc                set_row_colors;
    XbaeMatrixSetColumnColorsProc        set_column_colors;
    XbaeMatrixSetCellColorProc                set_cell_color;
    XtPointer                                extension;
} XbaeMatrixClassPart;

/*
 * Full class record declaration
 */
typedef struct _XbaeMatrixClassRec {
    CoreClassPart                core_class;
    CompositeClassPart                composite_class;
    ConstraintClassPart                constraint_class;
    XmManagerClassPart                manager_class;
    XbaeMatrixClassPart                matrix_class;
} XbaeMatrixClassRec;

externalref XbaeMatrixClassRec xbaeMatrixClassRec;


/*
 * Inheritance constants for set/get/edit methods
 */
#define XbaeInheritGetCell ((XbaeMatrixGetCellProc) _XtInherit)
#define XbaeInheritSetCell ((XbaeMatrixSetCellProc) _XtInherit)
#define XbaeInheritEditCell ((XbaeMatrixEditCellProc) _XtInherit)
#define XbaeInheritSelectCell ((XbaeMatrixSelectCellProc) _XtInherit)
#define XbaeInheritSelectRow ((XbaeMatrixSelectRowProc) _XtInherit)
#define XbaeInheritSelectColumn ((XbaeMatrixSelectColumnProc) _XtInherit)
#if XmVersion >= 1002
#define XbaeInheritHighlightCell ((XbaeMatrixHighlightCellProc) _XtInherit)
#define XbaeInheritHighlightRow ((XbaeMatrixHighlightRowProc) _XtInherit)
#define XbaeInheritHighlightColumn ((XbaeMatrixHighlightColumnProc) _XtInherit)
#endif
#define XbaeInheritDeselectAll ((XbaeMatrixDeselectAllProc) _XtInherit)
#define XbaeInheritSelectAll ((XbaeMatrixSelectAllProc) _XtInherit)
#define XbaeInheritDeselectCell ((XbaeMatrixDeselectCellProc) _XtInherit)
#define XbaeInheritDeselectRow ((XbaeMatrixDeselectRowProc) _XtInherit)
#define XbaeInheritDeselectColumn ((XbaeMatrixDeselectColumnProc) _XtInherit)
#define XbaeInheritCommitEdit ((XbaeMatrixCommitEditProc) _XtInherit)
#define XbaeInheritCancelEdit ((XbaeMatrixCancelEditProc) _XtInherit)
#define XbaeInheritAddRows ((XbaeMatrixAddRowsProc) _XtInherit)
#define XbaeInheritDeleteRows ((XbaeMatrixDeleteRowsProc) _XtInherit)
#define XbaeInheritAddColumns ((XbaeMatrixAddColumnsProc) _XtInherit)
#define XbaeInheritDeleteColumns ((XbaeMatrixDeleteColumnsProc)_XtInherit)
#define XbaeInheritSetRowColors ((XbaeMatrixSetRowColorsProc)_XtInherit)
#define XbaeInheritSetColumnColors ((XbaeMatrixSetColumnColorsProc)_XtInherit)
#define XbaeInheritSetCellColor ((XbaeMatrixSetCellColorProc)_XtInherit)

/*
 * New data structures for the ScrollMgr code
 */
typedef struct _SmScrollNode {
    int x;
    int y;
    struct _SmScrollNode *next;
    struct _SmScrollNode *prev;
} SmScrollNodeRec, *SmScrollNode;

typedef struct _SmScrollMgr {
    int offset_x;
    int offset_y;
    int scroll_count;
    SmScrollNode scroll_queue;
    Boolean scrolling;
} SmScrollMgrRec, *SmScrollMgr;

/*
 * Rectangle struct used for internal calculations.  (x1,y1) are the upper
 * left corner, (x2,y2) are the lower right.
 */
typedef struct _Rectangle
{
    int x1, y1;
    int x2, y2;
}
Rectangle;

/*
 * Data structure for column labels
 */
typedef struct _ColumnLabelLines {
    int lines;
    int *lengths;
} ColumnLabelLinesRec, *ColumnLabelLines;

/*
 * New fields for the Matrix widget record
 */
typedef struct {
    /*
     * resources
     */
    Boolean        allow_column_resize;        /* can columns dynamically resize?   */
    Boolean        bold_labels;                /* draw bold row/column labels?             */
    Boolean        button_labels;                /* draw labels as buttons?             */
    Boolean        fill;                        /* fill available space?             */
    Boolean        trailing_attached_right;  /* trailing columns fixed to right */
    Boolean        trailing_attached_bottom; /* trailing rows fixed to bottom   */
    Boolean        reverse_select;                /* reverse colours - selected cells? */
    Boolean        scroll_select;                /* flag to scroll a selected cell    */
    Boolean        **selected_cells;        /* 2D array of selected cells             */
    Boolean        show_arrows;                /* sow arrows when text obscured?    */
    Boolean     *column_button_labels;  /* which column labels are butons */
    Boolean     *row_button_labels;     /* which row labels are butons */
    Boolean        traverse_fixed;                /* allow traversal to fixed cells?   */
    Boolean        calc_cursor_position;        /* calculate insert pos from click   */
    unsigned char cell_shadow_type;        /* cell shadow type                     */
    unsigned char **cell_shadow_types;        /* 2D array of per cell shadow type  */
    unsigned char *column_alignments;        /* alignment of each column             */
    unsigned char *column_label_alignments;/* alignment of each column label */
    unsigned char *column_shadow_types;        /* 1D array of per col shadow types  */
    unsigned char grid_type;                /* shadowed in/shadowed out/plain    */
    unsigned char hsb_display_policy;        /* horiz scroll bar display policy   */
    unsigned char row_label_alignment;        /* alignment of row labels             */
    unsigned char *row_shadow_types;        /* 1D array of per row shadow types  */
    unsigned char scrollbar_placement;        /* placement of the scrollbars             */
    unsigned char selection_policy;        /* as for XmList */
    unsigned char shadow_type;                /* matrix window shadow type             */
#if XmVersion >= 1002
    unsigned char **highlighted_cells;        /* 2D array of highlighted cells     */
#endif
    unsigned char vsb_display_policy;        /* vert scroll bar display policy    */

    String        **cells;                /* 2D array of strings                     */
    String        *column_labels;                /* array of labels above each column */
    String        *row_labels;                /* array of labels next to each row  */

    XtPointer        **cell_user_data;        /* 2D array of per cell user data    */
    XtPointer        *column_user_data;        /* 1D array of per column user data  */
    XtPointer        *row_user_data;                /* 1D array of per row user data     */

    short        *column_widths;                /* width of each column in chars     */
    short        row_label_width;        /* max width of row labels in chars  */

    int                alt_row_count;                /* # of rows for e/o background             */
    int                columns;                /* number of cells per row             */
    int                *column_max_lengths;        /* max length of each col in chars   */
    int         double_click_interval;        /* interval between clicks             */
    int         left_column;                /* horizontal origin (in col space)  */
    int                rows;                        /* number of rows per column             */
    int                top_row;                /* vertical origin (in row space)    */

    Dimension        cell_highlight_thickness; /* hilite thickness for textField  */
    Dimension        cell_margin_height;        /* margin height for textField             */
    Dimension        cell_margin_width;        /* margin width for textField             */
    Dimension        cell_shadow_thickness;        /* shadow thickness for each cell    */
    Dimension        fixed_columns;                /* number of leading fixed columns   */
    Dimension        fixed_rows;                /* number of leading fixed rows             */
    Dimension        space;                        /* spacing for scrollbars             */
    Dimension        text_shadow_thickness;        /* shadow thickness for text field   */
    Dimension        trailing_fixed_columns;        /* number of trailing fixed columns  */
    Dimension        trailing_fixed_rows;        /* number of trailing fixed rows     */
    Dimension        visible_columns;        /* number of columns to make visible */
    Dimension        visible_rows;                /* number of rows to make visible    */

    Pixel        button_label_background; /* color of button label background */
    Pixel        **cell_background;        /* 2D array of Pixels                     */
    Pixel        **colors;                /* 2D array of Pixels                     */
    Pixel        column_label_color;        /* color of column label             */
    Pixel        even_row_background;        /* even row background color             */
    Pixel        grid_line_color;        /* color of grid, for XmGrid_LINE    */
    Pixel       odd_row_background;        /* odd row background color             */
    Pixel        row_label_color;        /* color of row label                     */
    Pixel        selected_background;        /* background for selected cells     */
    Pixel        selected_foreground;        /* foreground for selected cells     */
    Pixel        text_background;        /* background for the "text" field   */

    XtTranslations text_translations;        /* translations for textField widget */

    XtCallbackList default_action_callback; /* called for a double click     */
    XtCallbackList draw_cell_callback;        /* called when a cell is drawn             */
    XtCallbackList enter_cell_callback;        /* called when a cell is entered     */
    XtCallbackList label_activate_callback; /* called when label pressed     */
    XtCallbackList leave_cell_callback;        /* called when a cell is left             */
    XtCallbackList modify_verify_callback; /* verify change to textField     */
                                        /* and a draw_cell_callback is set   */
#if XmVersion > 1001
    XtCallbackList process_drag_callback; /* called when a drag is initiated */
#endif
    XtCallbackList resize_callback;        /* called when Matrix is resized     */
    XtCallbackList resize_column_callback; /* called when column is resized  */
    XtCallbackList select_cell_callback; /* called when cells are selected   */
    XtCallbackList traverse_cell_callback; /* next cell to traverse to             */
    XtCallbackList write_cell_callback;        /*called when a cell needs to be set*/ 

    XmFontList        font_list;                /* fontList of widget and textField  */
    XmFontList        label_font_list;        /* fontList of labels                     */

    
    /*
     * private state
     */
#if XmVersion >= 1002
    unsigned char highlight_location;        /* What is being highlighted             */
#endif
    short        first_row_offset;        /* hidden first row */
    int                cell_visible_height;        /* height of visible cells in pixels */
    int                column_label_maxlines;        /* max # lines in column labels             */
    int                *column_positions;        /* pixel position of each column     */
    int                current_column;                /* column of the text field             */
    int                current_row;                /* row of the text field             */
    int                horiz_origin;                /* horiz origin (in pixel space)     */
    int                label_baseline;                /* baseline of label                     */
    int                last_column;                /* The last selected column             */
    int                last_row;                /* The last selected row             */
    int                num_selected_cells;        /* The number selected cells             */
    int                text_baseline;                /* baseline of text in each cell     */
    int                traversing;                /* direction we are traversing             */

    unsigned int non_fixed_total_width;        /* width of cell area in pixels             */
    unsigned int current_clip;                /* current clip mask setting             */
    unsigned int disable_redisplay;        /* disable redisplay counter             */

    Dimension        desired_height;                /* height widget wants to be             */
    Dimension        desired_width;                /* width widget wants to be             */

    Time        last_click_time;        /* when last ButtonPress occurred    */

    Widget        text_field;                /* the text field                     */
    Widget        horizontal_sb;                /* the horizontal scrollbar             */
    Widget      vertical_sb;                /* the vertical scrollbar             */
    Widget        clip_window;                /* the clip child                     */
    Widget        left_clip;                /* clips for scrolling fixed cells   */
    Widget        right_clip;
    Widget        top_clip;
    Widget        bottom_clip;
    Widget        current_parent;                /* Current textField parent window   */
#if CELL_WIDGETS
    Widget        **cell_widgets;                /* array of widgets for cells             */
#endif

    GC                cell_bottom_shadow_clip_gc; /* GC for clipped bottom shadow  */
    GC          cell_grid_line_gc;
    GC                cell_top_shadow_clip_gc; /* GC for clipped top shadow             */
    GC                draw_gc;                /* GC for drawing cells                     */
    GC          grid_line_gc;                /* GC for grid line                     */
    GC                label_clip_gc;                /* GC for clipped labels             */
    GC                label_gc;                /* GC for drawing labels             */
    GC                pixmap_gc;                /* GC for drawing pixmap cells             */
    GC                resize_bottom_shadow_gc;
    GC                resize_top_shadow_gc;

    ColumnLabelLines column_label_lines; /* structs for multi line labels    */
                                     
    XFontStruct        *font_struct;                /* fontStruct from fontList             */
    XFontStruct        *label_font_struct;        /* fontStruct from fontList             */

    SmScrollMgr clip_scroll_mgr;        /* ScrollMgr for Clip                     */
    SmScrollMgr matrix_scroll_mgr;        /* ScrollMgr for Matrix                     */

    XFontSet        font_set;                /* fontSet from fontList             */
    short        font_y;
    short        font_width;
    short        font_height;
    Font        fid;
    XFontSet        label_font_set;                /* fontSet from fontList             */
    short        label_font_y;
    short        label_font_width;
    short        label_font_height;
    Font        label_fid;

} XbaeMatrixPart;

/*
 * Full instance record declaration
 */
typedef struct _XbaeMatrixRec {
    CorePart                core;
    CompositePart        composite;
    ConstraintPart        constraint;
    XmManagerPart        manager;
    XbaeMatrixPart        matrix;
} XbaeMatrixRec;

/* provide clean-up for those with R4 */
#ifndef XlibSpecificationRelease
# undef _Xconst
# undef _XFUNCPROTOBEGIN
# undef _XFUNCPROTOEND
#endif

#undef P
#endif /* _Xbae_MatrixP_h */