home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 mARCH / PCWK3A99.iso / Linux / DDD331 / DDD-3_1_.000 / DDD-3_1_ / ddd-3.1.1 / ddd / GraphEditP.h < prev    next >
C/C++ Source or Header  |  1998-10-05  |  7KB  |  200 lines

  1. // $Id: GraphEditP.h,v 1.22 1998/10/05 12:21:07 zeller Exp $
  2. // GraphEdit Widget -- private interface
  3.  
  4. // Copyright (C) 1995 Technische Universitaet Braunschweig, Germany.
  5. // Written by Andreas Zeller <zeller@ips.cs.tu-bs.de>.
  6. // 
  7. // This file is part of DDD.
  8. // 
  9. // DDD is free software; you can redistribute it and/or
  10. // modify it under the terms of the GNU General Public
  11. // License as published by the Free Software Foundation; either
  12. // version 2 of the License, or (at your option) any later version.
  13. // 
  14. // DDD is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  17. // See the GNU General Public License for more details.
  18. // 
  19. // You should have received a copy of the GNU General Public
  20. // License along with DDD -- see the file COPYING.
  21. // If not, write to the Free Software Foundation, Inc.,
  22. // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  23. // 
  24. // DDD is the data display debugger.
  25. // For details, see the DDD World-Wide-Web page, 
  26. // `http://www.cs.tu-bs.de/softech/ddd/',
  27. // or send a mail to the DDD developers <ddd@ips.cs.tu-bs.de>.
  28.  
  29. #ifndef _DDD_GraphEditP_h
  30. #define _DDD_GraphEditP_h
  31.  
  32. // Superclasses
  33. extern "C" {
  34. #define new new_w
  35. #define class class_w
  36. #include <X11/CoreP.h>
  37. #include <Xm/XmP.h>
  38. #if XmVersion >= 1002
  39. #include <Xm/PrimitiveP.h>
  40. #endif
  41. #undef new
  42. #undef class
  43. }
  44.  
  45. // This class
  46. #include "GraphEdit.h"
  47. #include "Graph.h"
  48.  
  49.  
  50. // The GraphEdit class record
  51.  
  52. typedef struct {
  53.     caddr_t extension;
  54. } GraphEditClassPart;
  55.  
  56. typedef struct _GraphEditClassRec {
  57.     CoreClassPart        core_class;
  58.     XmPrimitiveClassPart primitive_class;
  59.     GraphEditClassPart   graphEdit_class;
  60. } GraphEditClassRec;
  61.  
  62. extern GraphEditClassRec graphEditClassRec;
  63.  
  64.  
  65. // Possible states
  66.  
  67. enum GraphEditState {
  68.     SelectState,    // draw select frame
  69.     DeltaState,        // wait for movement
  70.     MoveState,        // draw move frames
  71.     NopState        // something completely different
  72. };
  73.  
  74. // The GraphEdit instance record
  75.  
  76. typedef struct _GraphEditPart {
  77.     // Resources
  78.  
  79.     // Graph stuff
  80.     Graph *graph;        // Graph to be displayed
  81.  
  82.     // Movement stuff
  83.     Dimension moveDelta;    // Start move after movement greater than this
  84.     Boolean rubberEdges;    // Draw edges  when moving
  85.     Boolean rubberArrows;    // Draw arrows when moving
  86.     Boolean rubberAnnotations;    // Draw annotations when moving
  87.     Boolean opaqueMove;        // Draw nodes  when moving
  88.  
  89.     // Selection stuff
  90.     Boolean autoRaise;        // Raise selected nodes?
  91.  
  92.     // Hint stuff
  93.     Boolean showHints;        // Display hints?
  94.  
  95.     // Annotation stuff
  96.     Boolean showAnnotations;    // Display annotations?
  97.  
  98.     // Grid stuff
  99.     Boolean showGrid;        // Display grid?
  100.     Dimension gridWidth;    // Grid width (> 0)
  101.     Dimension gridHeight;    // Grid height (> 0)
  102.     Boolean snapToGrid;        // Make sure nodes are on grid?
  103.  
  104.     // Layout stuff
  105.     Boolean autoLayout;        // Layout graph after each change?
  106.  
  107.     // Rotation stuff
  108.     Cardinal rotation;        // Rotation in degrees (starting with zero)
  109.  
  110.     // Sizes
  111.     Dimension hintSize;        // Hint size (in pixels)
  112.     Dimension edgeWidth;    // Edge width (in pixels)
  113.     Dimension arrowAngle;    // Arrow angle (in degrees)
  114.     Dimension arrowLength;    // Arrow length (in pixels)
  115.     Dimension selfEdgeDiameter; // Diameter of edge pointing at self
  116.  
  117.     // Extra size to be added to the graph size; for panner usage only
  118.     Dimension extraWidth;    // Additional width (in pixels)
  119.     Dimension extraHeight;    // Additional height (in pixels)
  120.  
  121.     // Requested sizes; for panner and scrollbar creation only
  122.     Dimension requestedWidth;    // Requested width (in pixels)
  123.     Dimension requestedHeight;    // Requested height (in pixels)
  124.  
  125.     // Pixmaps
  126.     Pixmap selectTile;        // Tile to apply when node is selected
  127.  
  128.     // Modes
  129.     EdgeAttachMode edgeAttachMode;       // How to attach edges on nodes
  130.     LayoutMode layoutMode;             // How to layout graphs
  131.     SelfEdgePosition  selfEdgePosition;  // Position of self-pointing edges
  132.     SelfEdgeDirection selfEdgeDirection; // Its direction
  133.     Boolean dashedLines;         // Whether dashed lines are to be used
  134.  
  135.     // Cursors
  136.     Cursor defaultCursor;             // Standard cursor to use
  137.     Cursor moveCursor;             // Cursor to use when moving
  138.     Cursor selectCursor;             // Cursors to use when selecting
  139.     Cursor selectBottomLeftCursor;
  140.     Cursor selectBottomRightCursor;
  141.     Cursor selectTopLeftCursor;
  142.     Cursor selectTopRightCursor;
  143.  
  144.     // Colors
  145.     Pixel nodeColor;                  // Color to use for nodes
  146.     Pixel edgeColor;                  // Color to use for edges
  147.     Pixel frameColor;                  // Color to use for frame
  148.     Pixel outlineColor;                  // Color to use for outlines
  149.     Pixel gridColor;                  // Color to use for grid
  150.     Pixel selectColor;                      // Color to use for selected nodes
  151.  
  152.     // Printing colors
  153.     String nodePrintColor;              // Color for printing nodes
  154.     String edgePrintColor;              // Color for printing edges
  155.  
  156.     // Callbacks
  157.     XtCallbackList positionChangedProc;   // Position changed
  158.     XtCallbackList selectionChangedProc;  // Selection changed
  159.     XtCallbackList sizeChangedProc;       // Size changed
  160.     XtCallbackList compareNodesProc;      // Compare nodes (for layouting)
  161.     XtCallbackList preLayoutProc;         // Called before layouting
  162.     XtCallbackList postLayoutProc;        // Called after layouting
  163.     XtCallbackList preSelectionProc;      // Called before selection
  164.  
  165.     // Private state
  166.     GraphEditState state;    // Current state
  167.  
  168.     BoxPoint startAction;    // Starting point action
  169.     BoxPoint endAction;        // End point action
  170.     BoxPoint minimalOffset;    // Minimal offset for moving
  171.     BoxPoint lastOffset;    // Last offset for moving
  172.  
  173.     Time lastSelectTime;    // Last selection time (for multi-clicks)
  174.     XtIntervalId redrawTimer;    // Timer used for redrawing
  175.  
  176.     GC nodeGC;            // Graphic context for nodes
  177.     GC edgeGC;            // Graphic context for edges
  178.     GC invertGC;        // Graphic context for inverting
  179.     GC clearGC;                // Graphic context for clearing
  180.     GC frameGC;            // Graphic context for frame
  181.     GC outlineGC;        // Graphic context for outlines
  182.  
  183.     GraphGC graphGC;        // Graph graphic context
  184.  
  185.     Pixmap gridPixmap;        // Grid pixmap
  186.  
  187.     Boolean sizeChanged;    // Flag: size changed in SetValues
  188.     Boolean redisplayEnabled;    // Flag: redisplay is enabled
  189.  
  190. } GraphEditPart;
  191.  
  192. typedef struct _GraphEditRec {
  193.     CorePart        core;
  194.     XmPrimitivePart primitive;
  195.     GraphEditPart   graphEdit;
  196. } GraphEditRec;
  197.  
  198. #endif // _DDD_GraphEditP_h
  199. // DON'T ADD ANYTHING BEHIND THIS #endif
  200.