00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef FXTABLE_H
00024 #define FXTABLE_H
00025
00026 #ifndef FXSCROLLAREA_H
00027 #include "FXScrollArea.h"
00028 #endif
00029
00030 namespace FX {
00031
00032
00033 class FXIcon;
00034 class FXFont;
00035 class FXTable;
00036 class FXHeader;
00037 class FXButton;
00038
00039
00040
00041 enum { DEFAULT_MARGIN = 2 };
00042
00043
00044
00045
00046 enum {
00047 TABLE_COL_SIZABLE = 0x00100000,
00048 TABLE_ROW_SIZABLE = 0x00200000,
00049 TABLE_NO_COLSELECT = 0x00400000,
00050 TABLE_NO_ROWSELECT = 0x00800000,
00051 TABLE_READONLY = 0x01000000,
00052 TABLE_COL_RENUMBER = 0x02000000,
00053 TABLE_ROW_RENUMBER = 0x04000000
00054 };
00055
00056
00057
00058 struct FXTablePos {
00059 FXint row;
00060 FXint col;
00061 };
00062
00063
00064
00065 struct FXTableRange {
00066 FXTablePos fm;
00067 FXTablePos to;
00068 };
00069
00070
00071
00072 class FXAPI FXTableItem : public FXObject {
00073 FXDECLARE(FXTableItem)
00074 friend class FXTable;
00075 protected:
00076 FXString label;
00077 FXIcon *icon;
00078 void *data;
00079 FXuint state;
00080 private:
00081 FXTableItem(const FXTableItem&);
00082 FXTableItem& operator=(const FXTableItem&);
00083 protected:
00084 FXTableItem():icon(NULL),data(NULL),state(0){}
00085 FXint textWidth(const FXTable* table) const;
00086 FXint textHeight(const FXTable* table) const;
00087 virtual void draw(const FXTable* table,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00088 virtual void drawBorders(const FXTable* table,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00089 virtual void drawContent(const FXTable* table,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00090 virtual void drawPattern(const FXTable* table,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00091 virtual void drawBackground(const FXTable* table,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00092 public:
00093 enum{
00094 SELECTED = 0x00000001,
00095 FOCUS = 0x00000002,
00096 DISABLED = 0x00000004,
00097 DRAGGABLE = 0x00000008,
00098 RESERVED1 = 0x00000010,
00099 RESERVED2 = 0x00000020,
00100 ICONOWNED = 0x00000040,
00101 RIGHT = 0x00002000,
00102 LEFT = 0x00004000,
00103 CENTER_X = 0,
00104 TOP = 0x00008000,
00105 BOTTOM = 0x00010000,
00106 CENTER_Y = 0,
00107 BEFORE = 0x00020000,
00108 AFTER = 0x00040000,
00109 ABOVE = 0x00080000,
00110 BELOW = 0x00100000,
00111 LBORDER = 0x00200000,
00112 RBORDER = 0x00400000,
00113 TBORDER = 0x00800000,
00114 BBORDER = 0x01000000
00115 };
00116 public:
00117
00118
00119 FXTableItem(const FXString& text,FXIcon* ic=NULL,void* ptr=NULL):label(text),icon(ic),data(ptr),state(RIGHT|CENTER_Y){}
00120
00121
00122 virtual void setText(const FXString& txt);
00123
00124
00125 virtual FXString getText() const { return label; }
00126
00127
00128 virtual void setIcon(FXIcon* icn,FXbool owned=false);
00129
00130
00131 virtual FXIcon* getIcon() const { return icon; }
00132
00133
00134 void setData(void* ptr){ data=ptr; }
00135
00136
00137 void* getData() const { return data; }
00138
00139
00140 virtual void setFocus(FXbool focus);
00141
00142
00143 FXbool hasFocus() const { return (state&FOCUS)!=0; }
00144
00145
00146 virtual void setSelected(FXbool selected);
00147
00148
00149 FXbool isSelected() const { return (state&SELECTED)!=0; }
00150
00151
00152 virtual void setEnabled(FXbool enabled);
00153
00154
00155 FXbool isEnabled() const { return (state&DISABLED)==0; }
00156
00157
00158 virtual void setDraggable(FXbool draggable);
00159
00160
00161 FXbool isDraggable() const { return (state&DRAGGABLE)!=0; }
00162
00163
00164 virtual void setJustify(FXuint justify=RIGHT|CENTER_Y);
00165
00166
00167 FXuint getJustify() const { return state&(RIGHT|LEFT|TOP|BOTTOM); }
00168
00169
00170 virtual void setIconPosition(FXuint mode);
00171
00172
00173 FXuint getIconPosition() const { return state&(BEFORE|AFTER|ABOVE|BELOW); }
00174
00175
00176 virtual void setBorders(FXuint borders=0);
00177
00178
00179 FXuint getBorders() const { return state&(LBORDER|RBORDER|TBORDER|BBORDER); }
00180
00181
00182 virtual void setStipple(FXStipplePattern pattern);
00183
00184
00185 FXStipplePattern getStipple() const;
00186
00187
00188 virtual FXWindow *getControlFor(FXTable* table);
00189
00190
00191 virtual void setFromControl(FXWindow *control);
00192
00193
00194 virtual FXint getWidth(const FXTable* table) const;
00195
00196
00197 virtual FXint getHeight(const FXTable* table) const;
00198
00199
00200 virtual void create();
00201
00202
00203 virtual void detach();
00204
00205
00206 virtual void destroy();
00207
00208
00209 virtual void save(FXStream& store) const;
00210
00211
00212 virtual void load(FXStream& store);
00213
00214
00215 virtual ~FXTableItem();
00216 };
00217
00218
00219
00220 class FXAPI FXComboTableItem : public FXTableItem {
00221 FXDECLARE(FXComboTableItem)
00222 protected:
00223 FXString selections;
00224 private:
00225 FXComboTableItem(const FXComboTableItem&);
00226 FXComboTableItem& operator=(const FXComboTableItem&);
00227 protected:
00228 FXComboTableItem(){}
00229 public:
00230
00231
00232 FXComboTableItem(const FXString& text,FXIcon* ic=NULL,void* ptr=NULL);
00233
00234
00235 virtual FXWindow *getControlFor(FXTable* table);
00236
00237
00238 virtual void setFromControl(FXWindow *control);
00239
00240
00241 void setSelections(const FXString& strings);
00242
00243
00244 const FXString& getSelections() const { return selections; }
00245 };
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284 class FXAPI FXTable : public FXScrollArea {
00285 FXDECLARE(FXTable)
00286 protected:
00287 FXHeader *colHeader;
00288 FXHeader *rowHeader;
00289 FXButton *cornerButton;
00290 FXTableItem **cells;
00291 FXWindow *editor;
00292 FXFont *font;
00293 FXint nrows;
00294 FXint ncols;
00295 FXint visiblerows;
00296 FXint visiblecols;
00297 FXint margintop;
00298 FXint marginbottom;
00299 FXint marginleft;
00300 FXint marginright;
00301 FXColor textColor;
00302 FXColor baseColor;
00303 FXColor hiliteColor;
00304 FXColor shadowColor;
00305 FXColor borderColor;
00306 FXColor selbackColor;
00307 FXColor seltextColor;
00308 FXColor gridColor;
00309 FXColor stippleColor;
00310 FXColor cellBorderColor;
00311 FXint cellBorderWidth;
00312 FXColor cellBackColor[2][2];
00313 FXint defColWidth;
00314 FXint defRowHeight;
00315 FXTablePos current;
00316 FXTablePos anchor;
00317 FXTableRange input;
00318 FXTableRange selection;
00319 FXString clipped;
00320 FXbool hgrid;
00321 FXbool vgrid;
00322 FXuchar mode;
00323 FXint grabx;
00324 FXint graby;
00325 FXint rowcol;
00326 FXString help;
00327 public:
00328 static FXDragType csvType;
00329 static const FXchar csvTypeName[];
00330 protected:
00331 FXTable();
00332 FXint startRow(FXint row,FXint col) const;
00333 FXint startCol(FXint row,FXint col) const;
00334 FXint endRow(FXint row,FXint col) const;
00335 FXint endCol(FXint row,FXint col) const;
00336 void spanningRange(FXint& sr,FXint& er,FXint& sc,FXint& ec,FXint anchrow,FXint anchcol,FXint currow,FXint curcol);
00337 virtual void moveContents(FXint x,FXint y);
00338 virtual void drawCell(FXDC& dc,FXint sr,FXint er,FXint sc,FXint ec);
00339 virtual void drawRange(FXDC& dc,FXint rlo,FXint rhi,FXint clo,FXint chi);
00340 virtual void drawHGrid(FXDC& dc,FXint rlo,FXint rhi,FXint clo,FXint chi);
00341 virtual void drawVGrid(FXDC& dc,FXint rlo,FXint rhi,FXint clo,FXint chi);
00342 virtual void drawContents(FXDC& dc,FXint x,FXint y,FXint w,FXint h);
00343 virtual FXTableItem* createItem(const FXString& text,FXIcon* icon,void* ptr);
00344 virtual FXWindow *getControlForItem(FXint r,FXint c);
00345 virtual void setItemFromControl(FXint r,FXint c,FXWindow *control);
00346 virtual void updateColumnNumbers(FXint lo,FXint hi);
00347 virtual void updateRowNumbers(FXint lo,FXint hi);
00348 protected:
00349 enum {
00350 MOUSE_NONE,
00351 MOUSE_SCROLL,
00352 MOUSE_DRAG,
00353 MOUSE_SELECT
00354 };
00355 private:
00356 FXTable(const FXTable&);
00357 FXTable& operator=(const FXTable&);
00358 public:
00359 long onPaint(FXObject*,FXSelector,void*);
00360 long onEnter(FXObject*,FXSelector,void*);
00361 long onLeave(FXObject*,FXSelector,void*);
00362 long onFocusIn(FXObject*,FXSelector,void*);
00363 long onFocusOut(FXObject*,FXSelector,void*);
00364 long onMotion(FXObject*,FXSelector,void*);
00365 long onKeyPress(FXObject*,FXSelector,void*);
00366 long onKeyRelease(FXObject*,FXSelector,void*);
00367 long onLeftBtnPress(FXObject*,FXSelector,void*);
00368 long onLeftBtnRelease(FXObject*,FXSelector,void*);
00369 long onRightBtnPress(FXObject*,FXSelector,void*);
00370 long onRightBtnRelease(FXObject*,FXSelector,void*);
00371 long onUngrabbed(FXObject*,FXSelector,void*);
00372 long onSelectionLost(FXObject*,FXSelector,void*);
00373 long onSelectionGained(FXObject*,FXSelector,void*);
00374 long onSelectionRequest(FXObject*,FXSelector,void* ptr);
00375 long onClipboardLost(FXObject*,FXSelector,void*);
00376 long onClipboardGained(FXObject*,FXSelector,void*);
00377 long onClipboardRequest(FXObject*,FXSelector,void*);
00378 long onAutoScroll(FXObject*,FXSelector,void*);
00379 long onCommand(FXObject*,FXSelector,void*);
00380 long onClicked(FXObject*,FXSelector,void*);
00381 long onDoubleClicked(FXObject*,FXSelector,void*);
00382 long onTripleClicked(FXObject*,FXSelector,void*);
00383 long onQueryTip(FXObject*,FXSelector,void*);
00384 long onQueryHelp(FXObject*,FXSelector,void*);
00385 long onTipTimer(FXObject*,FXSelector,void*);
00386
00387 long onCmdToggleEditable(FXObject*,FXSelector,void*);
00388 long onUpdToggleEditable(FXObject*,FXSelector,void*);
00389
00390
00391 long onCmdHorzGrid(FXObject*,FXSelector,void*);
00392 long onUpdHorzGrid(FXObject*,FXSelector,void*);
00393 long onCmdVertGrid(FXObject*,FXSelector,void*);
00394 long onUpdVertGrid(FXObject*,FXSelector,void*);
00395
00396
00397 long onCmdDeleteColumn(FXObject*,FXSelector,void*);
00398 long onUpdDeleteColumn(FXObject*,FXSelector,void*);
00399 long onCmdDeleteRow(FXObject*,FXSelector,void*);
00400 long onUpdDeleteRow(FXObject*,FXSelector,void*);
00401 long onCmdInsertColumn(FXObject*,FXSelector,void*);
00402 long onUpdInsertColumn(FXObject*,FXSelector,void*);
00403 long onCmdInsertRow(FXObject*,FXSelector,void*);
00404 long onUpdInsertRow(FXObject*,FXSelector,void*);
00405
00406
00407 long onCmdMoveRight(FXObject*,FXSelector,void*);
00408 long onCmdMoveLeft(FXObject*,FXSelector,void*);
00409 long onCmdMoveUp(FXObject*,FXSelector,void*);
00410 long onCmdMoveDown(FXObject*,FXSelector,void*);
00411 long onCmdMoveHome(FXObject*,FXSelector,void*);
00412 long onCmdMoveEnd(FXObject*,FXSelector,void*);
00413 long onCmdMoveTop(FXObject*,FXSelector,void*);
00414 long onCmdMoveBottom(FXObject*,FXSelector,void*);
00415 long onCmdMovePageDown(FXObject*,FXSelector,void*);
00416 long onCmdMovePageUp(FXObject*,FXSelector,void*);
00417
00418
00419 long onCmdMark(FXObject*,FXSelector,void*);
00420 long onCmdExtend(FXObject*,FXSelector,void*);
00421
00422
00423 long onUpdSelectCell(FXObject*,FXSelector,void*);
00424 long onCmdSelectCell(FXObject*,FXSelector,void*);
00425 long onUpdSelectRow(FXObject*,FXSelector,void*);
00426 long onCmdSelectRow(FXObject*,FXSelector,void*);
00427 long onUpdSelectColumn(FXObject*,FXSelector,void*);
00428 long onCmdSelectColumn(FXObject*,FXSelector,void*);
00429 long onCmdSelectRowIndex(FXObject*,FXSelector,void*);
00430 long onCmdSelectColumnIndex(FXObject*,FXSelector,void*);
00431 long onUpdSelectAll(FXObject*,FXSelector,void*);
00432 long onCmdSelectAll(FXObject*,FXSelector,void*);
00433 long onUpdDeselectAll(FXObject*,FXSelector,void*);
00434 long onCmdDeselectAll(FXObject*,FXSelector,void*);
00435
00436
00437 long onCmdCutSel(FXObject*,FXSelector,void*);
00438 long onCmdCopySel(FXObject*,FXSelector,void*);
00439 long onCmdDeleteSel(FXObject*,FXSelector,void*);
00440 long onCmdPasteSel(FXObject*,FXSelector,void*);
00441 long onUpdHaveSelection(FXObject*,FXSelector,void*);
00442
00443
00444 long onCmdStartInput(FXObject*,FXSelector,void*);
00445 long onUpdStartInput(FXObject*,FXSelector,void*);
00446 long onCmdAcceptInput(FXObject*,FXSelector,void*);
00447 long onUpdAcceptInput(FXObject*,FXSelector,void*);
00448 long onCmdCancelInput(FXObject*,FXSelector,void*);
00449 public:
00450
00451 enum {
00452 ID_HORZ_GRID=FXScrollArea::ID_LAST,
00453 ID_VERT_GRID,
00454 ID_TOGGLE_EDITABLE,
00455 ID_DELETE_COLUMN,
00456 ID_DELETE_ROW,
00457 ID_INSERT_COLUMN,
00458 ID_INSERT_ROW,
00459 ID_SELECT_COLUMN_INDEX,
00460 ID_SELECT_ROW_INDEX,
00461 ID_SELECT_COLUMN,
00462 ID_SELECT_ROW,
00463 ID_SELECT_CELL,
00464 ID_SELECT_ALL,
00465 ID_DESELECT_ALL,
00466 ID_MOVE_LEFT,
00467 ID_MOVE_RIGHT,
00468 ID_MOVE_UP,
00469 ID_MOVE_DOWN,
00470 ID_MOVE_HOME,
00471 ID_MOVE_END,
00472 ID_MOVE_TOP,
00473 ID_MOVE_BOTTOM,
00474 ID_MOVE_PAGEDOWN,
00475 ID_MOVE_PAGEUP,
00476 ID_START_INPUT,
00477 ID_CANCEL_INPUT,
00478 ID_ACCEPT_INPUT,
00479 ID_MARK,
00480 ID_EXTEND,
00481 ID_CUT_SEL,
00482 ID_COPY_SEL,
00483 ID_PASTE_SEL,
00484 ID_DELETE_SEL,
00485 ID_LAST
00486 };
00487
00488 public:
00489
00490
00491
00492
00493
00494
00495 FXTable(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_MARGIN,FXint pr=DEFAULT_MARGIN,FXint pt=DEFAULT_MARGIN,FXint pb=DEFAULT_MARGIN);
00496
00497
00498 virtual FXint getDefaultWidth();
00499
00500
00501 virtual FXint getDefaultHeight();
00502
00503
00504 virtual FXint getContentWidth();
00505
00506
00507 virtual FXint getContentHeight();
00508
00509
00510 virtual FXint getVisibleX() const;
00511
00512
00513 virtual FXint getVisibleY() const;
00514
00515
00516 virtual FXint getVisibleWidth() const;
00517
00518
00519 virtual FXint getVisibleHeight() const;
00520
00521
00522 virtual void create();
00523
00524
00525 virtual void detach();
00526
00527
00528 virtual void layout();
00529
00530
00531 virtual void recalc();
00532
00533
00534 virtual FXbool canFocus() const;
00535
00536
00537 virtual void setFocus();
00538
00539
00540 virtual void killFocus();
00541
00542
00543 virtual void changeFocus(FXWindow *child);
00544
00545
00546 FXButton* getCornerButton() const { return cornerButton; }
00547
00548
00549 FXHeader* getColumnHeader() const { return colHeader; }
00550
00551
00552 FXHeader* getRowHeader() const { return rowHeader; }
00553
00554
00555 void setVisibleRows(FXint nvrows);
00556
00557
00558 FXint getVisibleRows() const { return visiblerows; }
00559
00560
00561 void setVisibleColumns(FXint nvcols);
00562
00563
00564 FXint getVisibleColumns() const { return visiblecols; }
00565
00566
00567 FXbool isEditable() const;
00568
00569
00570 void setEditable(FXbool edit=true);
00571
00572
00573 void showHorzGrid(FXbool on=true);
00574
00575
00576 FXbool isHorzGridShown() const { return hgrid; }
00577
00578
00579 void showVertGrid(FXbool on=true);
00580
00581
00582 FXbool isVertGridShown() const { return vgrid; }
00583
00584
00585 FXint getNumRows() const { return nrows; }
00586
00587
00588 FXint getNumColumns() const { return ncols; }
00589
00590
00591 void setMarginTop(FXint pt);
00592
00593
00594 FXint getMarginTop() const { return margintop; }
00595
00596
00597 void setMarginBottom(FXint pb);
00598
00599
00600 FXint getMarginBottom() const { return marginbottom; }
00601
00602
00603 void setMarginLeft(FXint pl);
00604
00605
00606 FXint getMarginLeft() const { return marginleft; }
00607
00608
00609 void setMarginRight(FXint pr);
00610
00611
00612 FXint getMarginRight() const { return marginright; }
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622 virtual FXbool startInput(FXint row,FXint col);
00623
00624
00625
00626
00627
00628
00629
00630 virtual FXbool cancelInput();
00631
00632
00633
00634
00635
00636
00637
00638
00639
00640
00641 virtual FXbool acceptInput(FXbool notify=false);
00642
00643
00644
00645
00646
00647
00648 FXint colAtX(FXint x) const;
00649
00650
00651
00652
00653
00654
00655 FXint rowAtY(FXint y) const;
00656
00657
00658 FXTableItem *getItem(FXint row,FXint col) const;
00659
00660
00661 void setItem(FXint row,FXint col,FXTableItem* item,FXbool notify=false);
00662
00663
00664 virtual void setTableSize(FXint nr,FXint nc,FXbool notify=false);
00665
00666
00667 virtual void insertRows(FXint row,FXint nr=1,FXbool notify=false);
00668
00669
00670 virtual void insertColumns(FXint col,FXint nc=1,FXbool notify=false);
00671
00672
00673 virtual void removeRows(FXint row,FXint nr=1,FXbool notify=false);
00674
00675
00676 virtual void removeColumns(FXint col,FXint nc=1,FXbool notify=false);
00677
00678
00679 virtual FXTableItem* extractItem(FXint row,FXint col,FXbool notify=false);
00680
00681
00682 virtual void removeItem(FXint row,FXint col,FXbool notify=false);
00683
00684
00685 virtual void removeRange(FXint startrow,FXint endrow,FXint startcol,FXint endcol,FXbool notify=false);
00686
00687
00688 virtual void clearItems(FXbool notify=false);
00689
00690
00691 virtual void makePositionVisible(FXint r,FXint c);
00692
00693
00694 FXbool isItemVisible(FXint r,FXint c) const;
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704 void setColumnHeaderMode(FXuint hint=LAYOUT_FIX_HEIGHT);
00705
00706
00707 FXuint getColumnHeaderMode() const;
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717 void setRowHeaderMode(FXuint hint=LAYOUT_FIX_WIDTH);
00718
00719
00720 FXuint getRowHeaderMode() const;
00721
00722
00723