/* * Copyright(c) 1992 Bell Communications Research, Inc. (Bellcore) * Copyright(c) 1995-99 Andrew Lister * Copyright © 1999, 2000, 2001, 2002, 2003, 2004 by the LessTif Developers. * * 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.81 2006/05/16 19:59:53 tobiasoed Exp $ */ /* * MatrixP.h - Private definitions for Matrix widget */ #ifndef _Xbae_MatrixP_h #define _Xbae_MatrixP_h #include <Xm/ManagerP.h> #include <Xbae/Matrix.h> #ifdef __cplusplus extern "C" { #endif /* * New types for the class methods */ typedef void (*XbaeMatrixSetCellProc)(XbaeMatrixWidget, int, int, const String, Boolean); typedef String (*XbaeMatrixGetCellProc)(XbaeMatrixWidget, int, int); typedef void (*XbaeMatrixEditCellProc)(XbaeMatrixWidget, XEvent *, int, int, String *, Cardinal); typedef void (*XbaeMatrixSelectCellProc)(XbaeMatrixWidget, int, int); typedef void (*XbaeMatrixSelectRowProc)(XbaeMatrixWidget, int); typedef void (*XbaeMatrixShowColumnArrowsProc)(XbaeMatrixWidget, int, Boolean); typedef void (*XbaeMatrixSelectColumnProc)(XbaeMatrixWidget, int); typedef void (*XbaeMatrixDeselectAllProc)(XbaeMatrixWidget); typedef void (*XbaeMatrixSelectAllProc)(XbaeMatrixWidget); typedef void (*XbaeMatrixDeselectCellProc)(XbaeMatrixWidget, int, int); typedef void (*XbaeMatrixDeselectRowProc)(XbaeMatrixWidget, int); typedef void (*XbaeMatrixDeselectColumnProc)(XbaeMatrixWidget, int); typedef Boolean (*XbaeMatrixCommitEditProc)(XbaeMatrixWidget, XEvent *, Boolean); typedef void (*XbaeMatrixCancelEditProc)(XbaeMatrixWidget, Boolean); typedef void (*XbaeMatrixAddRowsProc)(XbaeMatrixWidget, int, String *, String *, Pixel *, Pixel *, int); typedef void (*XbaeMatrixAddVarRowsProc)(XbaeMatrixWidget, int, String *, String *, short *, int *, unsigned char*, unsigned char *, Pixel *, Pixel *, int); typedef void (*XbaeMatrixDeleteRowsProc)(XbaeMatrixWidget, int, int); typedef void (*XbaeMatrixAddColumnsProc)(XbaeMatrixWidget, int, String *, String *, short *, int *, unsigned char*, unsigned char *, Pixel *, Pixel *, int); typedef void (*XbaeMatrixDeleteColumnsProc)(XbaeMatrixWidget, int, int); typedef void (*XbaeMatrixSetRowColorsProc)(XbaeMatrixWidget, int, Pixel *, int, Boolean); typedef void (*XbaeMatrixSetColumnColorsProc)(XbaeMatrixWidget, int, Pixel *, int, Boolean); typedef void (*XbaeMatrixSetCellColorProc)(XbaeMatrixWidget, int, int, Pixel, Boolean); /* * New fields for the Matrix widget class record */ typedef struct { XbaeMatrixSetCellProc set_cell; XbaeMatrixGetCellProc get_cell; XbaeMatrixEditCellProc edit_cell; XbaeMatrixSelectCellProc select_cell; XbaeMatrixShowColumnArrowsProc set_show_column_arrows; 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; XbaeMatrixAddVarRowsProc add_var_rows; XbaeMatrixDeleteRowsProc delete_rows; XbaeMatrixAddColumnsProc add_columns; XbaeMatrixDeleteColumnsProc delete_columns; XbaeMatrixSetRowColorsProc set_row_colors; XbaeMatrixSetColumnColorsProc set_column_colors; XbaeMatrixSetCellColorProc set_cell_color; XtPointer extension; XrmQuark QPointer; XrmQuark QLeft; XrmQuark QRight; XrmQuark QUp; XrmQuark QDown; XrmQuark QPageUp; XrmQuark QPageDown; XrmQuark QFocus; XrmQuark QLoosingFocus; XrmQuark default_qtag; } 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 XbaeInheritShowColumnArrows ((XbaeMatrixShowColumnArrowsProc) _XtInherit) #define XbaeInheritSelectRow ((XbaeMatrixSelectRowProc) _XtInherit) #define XbaeInheritSelectColumn ((XbaeMatrixSelectColumnProc) _XtInherit) #define XbaeInheritHighlightCell ((XbaeMatrixHighlightCellProc) _XtInherit) #define XbaeInheritHighlightRow ((XbaeMatrixHighlightRowProc) _XtInherit) #define XbaeInheritHighlightColumn ((XbaeMatrixHighlightColumnProc) _XtInherit) #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 XbaeInheritAddVarRows ((XbaeMatrixAddVarRowsProc) _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) /* * Bundle per cell attributes into one structure * This bundles all the "2D array"s that were previously in the XbaeMatrixPart. */ typedef struct _XbaeMatrixPerCellRec { unsigned char shadow_type; /* Per cell shadow type */ unsigned char highlighted; /* Is the cell highlighted ? */ Boolean selected; /* Is the cell selected ? */ Boolean underlined; /* Is the cell underlined ? */ XtPointer user_data; /* userdata; cant be edited in xbae */ Pixel background; /* Background pixel per cell */ Pixel color; /* Foreground pixel per cell */ Widget widget; /* So-called cell widgets */ Pixmap pixmap; /* pixmap; cant be edited in xbae */ Pixmap mask; /* clipmask; cant be edited in xbae */ String CellValue; /* String */ XrmQuark qtag; /* The quarkified tag of the font used to draw the CellValue */ } XbaeMatrixPerCellRec; typedef struct { XmFontType type; union { XFontStruct *font_struct; XFontSet font_set; } fontp; short width; short height; short y; Font id; } XbaeMatrixFontInfo; /* * New fields for the Matrix widget record */ typedef struct { /* * resources */ Boolean allow_column_resize; /* Public: can columns dynamically resize? */ Boolean allow_row_resize; /* Public: can rows dynamically resize? */ Boolean fill; /* Public: fill available space? */ Boolean horz_fill; /* Public: when filled, extend the 'last' column to fill available space? */ Boolean vert_fill; /* Public: when filled, extend the 'last' row to fill available space? */ Boolean non_fixed_detached_left; /* Public: when filled, put empty space after fixed columns */ Boolean non_fixed_detached_top; /* Public: when filled, put empty space after fixed rows */ Boolean trailing_attached_right; /* Public: when filled, put trailing columns fixed to right */ Boolean trailing_attached_bottom; /* Public: when filled, put trailing rows fixed to bottom */ Boolean bold_labels; /* Public: draw bold row/column labels? */ Boolean useXbaeInput; /* Public: Whether to use XbaeInput widget */ Boolean reverse_select; /* Public: reverse colours - selected cells? */ Boolean scroll_select; /* Public: flag to scroll a selected cell */ Boolean traverse_fixed; /* Public: allow traversal to fixed cells? */ Boolean calc_cursor_position; /* Public: calculate insert pos from click */ Boolean text_field_is_mapped; /* Private: Is the text field on top of a cell? */ unsigned int disable_redisplay; /* Private: disable redisplay counter */ Boolean show_arrows; /* Public: sow arrows when text obscured? */ Boolean *show_column_arrows; /* Public: which columns will show arrows */ Boolean *column_font_bold; /* Public: which columns have bold fonts */ Boolean button_labels; /* Public: draw labels as buttons? */ Boolean *column_button_labels; /* Public: which column labels are buttons */ Boolean *row_button_labels; /* Public: which row labels are buttons */ Boolean column_width_in_pixels; /* Public: column width mesured in pixels? */ Boolean row_height_in_pixels; /* Public: row height mesured in pixels? */ short row_label_width; /* Public: max width of row labels in chars */ short *column_widths; /* Public: width of each column in chars or pixels */ short *row_heights; /* Public: height of each row in chars or pixels */ int *column_positions; /* Private: pixel position of each column */ int *row_positions; /* Private: pixel position of each row */ int visible_fixed_column_width; int visible_fixed_row_height; int visible_trailing_fixed_column_width; int visible_trailing_fixed_row_height; int visible_non_fixed_height; int visible_non_fixed_width; int *column_max_lengths; /* Public: max length of each col in chars */ Boolean multi_line_cell; /* Public: Whether to draw more than one line in a cell */ unsigned char wrap_type; /* Public: How to wrap the lines in multi_line_cell mode */ unsigned char scrollbar_placement; /* Public: placement of the scrollbars */ unsigned char selection_policy; /* Public: as for XmList */ unsigned char grid_type; /* Public: shadowed in/shadowed out/plain */ unsigned char shadow_type; /* Public: matrix window shadow type */ unsigned char cell_shadow_type; /* Public: cell shadow type */ unsigned char hsb_display_policy; /* Public: horiz scroll bar display policy */ unsigned char vsb_display_policy; /* Public: vert scroll bar display policy */ unsigned char row_label_alignment; /* Public: alignment of row labels */ unsigned char *column_label_alignments;/* Public: alignment of each column label */ unsigned char *column_alignments; /* Public: alignment of each column */ unsigned char *column_shadow_types; /* Public: 1D array of per col shadow types */ unsigned char *row_shadow_types; /* Public: 1D array of per row shadow types */ XmString *xmcolumn_labels; /* Public: array of xmlabels above each column */ XmString *xmrow_labels; /* Public: array of xmlabels next to each row */ String *column_labels; /* Public: array of labels above each column */ String *row_labels; /* Public: array of labels next to each row */ int column_label_maxlines; /* Private: max number of lines in column labels */ int row_label_maxlength; /* Private: max line length of row labels */ XtPointer *column_user_data; /* Public: 1D array of per column user data */ XtPointer *row_user_data; /* Public: 1D array of per row user data */ int columns; /* Public: number of cells per row */ int rows; /* Public: number of rows per column */ Dimension fixed_columns; /* Public: number of leading fixed columns */ Dimension fixed_rows; /* Public: number of leading fixed rows */ Dimension trailing_fixed_columns; /* Public: number of trailing fixed columns */ Dimension trailing_fixed_rows; /* Public: number of trailing fixed rows */ Dimension visible_columns; /* Public: number of columns to make visible */ Dimension visible_rows; /* Public: number of rows to make visible */ Dimension cell_margin_height; /* Public: margin height for textField */ Dimension cell_margin_width; /* Public: margin width for textField */ Dimension cell_highlight_thickness; /* Public: highlight thickness for textField */ Dimension cell_shadow_thickness; /* Public: shadow thickness for each cell */ Dimension text_shadow_thickness; /* Public: shadow thickness for text field */ Dimension space; /* Public: spacing for scrollbars */ Dimension underline_width; /* Public: number of pixels thick the underline is */ int alt_row_count; /* Public: # of rows for e/o background */ Pixel even_row_background; /* Public: even row background color */ Pixel odd_row_background; /* Public: odd row background color */ Pixel column_label_color; /* Public: color of column label */ Pixel row_label_color; /* Public: color of row label */ Pixel button_label_background; /* Public: color of button label background */ Pixel grid_line_color; /* Public: color of grid, for XmGrid_LINE */ Pixel selected_background; /* Public: background for selected cells */ Pixel selected_foreground; /* Public: foreground for selected cells */ Pixel scroll_background; /* Public: bacground for scrollbar */ Pixel text_background; /* Public: background for the text field */ Boolean text_background_is_cell; /* Public: background for the text field when text_background is undefined */ Position underline_position; /* Public: number of pixels below the text baseline */ XtTranslations text_translations; /* Public: translations for textField widget */ XtCallbackList default_action_callback; /* Public: called for a double click */ XtCallbackList draw_cell_callback; /* Public: called when a cell is drawn */ XtCallbackList enter_cell_callback; /* Public: called when a cell is entered */ XtCallbackList track_cell_callback; /* Public: called when a cell is crossed */ XtCallbackList label_activate_callback; /* Public: called when label pressed */ XtCallbackList leave_cell_callback; /* Public: called when a cell is left */ XtCallbackList modify_verify_callback; /* Public: verify change to textField */ /* Public: and a draw_cell_callback is set */ XtCallbackList process_drag_callback; /* Public: called when a drag is initiated */ XtCallbackList resize_callback; /* Public: called when Matrix is resized */ XtCallbackList resize_row_callback; /* Public: called when row is resized */ XtCallbackList resize_column_callback; /* Public: called when column is resized */ XtCallbackList select_cell_callback; /* Public: called when cells are selected */ XtCallbackList traverse_cell_callback; /* Public: next cell to traverse to */ XtCallbackList value_changed_callback; /* Public: same as XmText(3) */ XtCallbackList write_cell_callback; /* Public: called when a cell needs to be set */ #if XmVERSION >= 2 XmRenderTable render_table; /* Public: renderTable from which we get the fonts used to draw cells/labels */ #endif XmFontList font_list; /* Public: fontList of widget and textField */ XmFontList label_font_list; /* Public: fontList of labels */ XbaeMatrixFontInfo cell_font; /* Private: Cashed info on the font used to draw cells with no tags */ XbaeMatrixFontInfo label_font; /* Private: Cashed info on the font used to draw labels */ XbaeMatrixFontInfo current_draw_font; /* Private: Cashed info on the font currently in draw_gc */ XrmQuark current_draw_qtag; /* Private: The quarkified tag of the font in the draw_gc */ XrmQuark current_text_qtag; /* Private: The quarkified tag of the rendition installed on the text field */ /* * private state */ Dimension desired_height; /* Private: height widget wants to be */ Dimension desired_width; /* Private: width widget wants to be */ int num_selected_cells; /* Private: The number selected cells */ int horiz_origin; /* Private: horiz origin (in pixel space) */ int vert_origin; /* Private: vert origin (in pixel space) */ int row_label_baseline; /* Private: baseline of row labels */ int cell_baseline; /* Private: baseline of text in each cell */ Time last_click_time; /* Private: Used to detect double clicks */ int double_click_interval; /* Public: interval between clicks */ int last_column; /* Private: Used to detect double clicks */ int last_row; /* Private: Used to detect double clicks */ int prev_column; /* Private: Used to compare tracking callback */ int prev_row; /* Private: Used to compare tracking callback */ Widget text_field; /* Private: the text field */ Widget horizontal_sb; /* Private: the horizontal scrollbar */ Widget vertical_sb; /* Private: the vertical scrollbar */ Widget center_clip; /* Private: the clips */ Widget left_clip; Widget right_clip; Widget top_clip; Widget bottom_clip; Widget row_label_clip; Widget column_label_clip; GC grid_line_gc; /* Private: GC for grid line */ GC draw_gc; /* Private: GC for drawing cells */ GC label_gc; /* Private: GC for drawing labels */ GC pixmap_gc; /* Private: GC for drawing pixmap cells */ GC resize_bottom_shadow_gc; GC resize_top_shadow_gc; Cursor cursor; /* Used to be global static */ XbaeMatrixPerCellRec **per_cell; /* Private: 2D array */ /* Unused: */ Pixmap *row_pixmaps; /* Private: array of pixmaps next to each row */ Pixmap *column_pixmaps; /* Private: array of pixmaps next to each column */ } XbaeMatrixPart; /* * Full instance record declaration */ typedef struct _XbaeMatrixRec { CorePart core; CompositePart composite; ConstraintPart constraint; XmManagerPart manager; XbaeMatrixPart matrix; } XbaeMatrixRec; /* * Constraint resources */ typedef struct { int row; int column; } XbaeMatrixConstraintsRec; /* * End of array indicator for converters of strings */ extern char xbaeBadString; /* * Macro replacements */ Widget _XbaeGetShellAncestor(Widget w); #ifdef __cplusplus } #endif #endif /* _Xbae_MatrixP_h */