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 / GraphEdit.h < prev    next >
C/C++ Source or Header  |  1998-11-30  |  10KB  |  307 lines

  1. // $Id: GraphEdit.h,v 1.27 1998/11/30 08:59:12 zeller Exp $
  2. // GraphEdit Widget -- public 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_GraphEdit_h
  30. #define _DDD_GraphEdit_h
  31.  
  32. #ifdef __GNUG__
  33. #pragma interface
  34. #endif
  35.  
  36. #include <X11/Intrinsic.h>
  37. #include "BoxPoint.h"
  38.  
  39. class Graph;
  40. class GraphGC;
  41. class GraphNode;
  42.  
  43.  
  44. // define any special resource names here that are not in <X11/StringDefs.h>
  45.  
  46. // Resource names
  47.  
  48. #define XtNgraph                     "graph"
  49. #define XtNmoveDelta                "moveDelta"
  50. #define XtNrubberEdges              "rubberEdges"
  51. #define XtNrubberArrows             "rubberArrows"
  52. #define XtNrubberAnnotations        "rubberAnnotations"
  53. #define XtNshowHints                "showHints"
  54. #define XtNshowAnnotations          "showAnnotations"
  55. #define XtNhintSize                 "hintSize"
  56. #define XtNopaqueMove               "opaqueMove"
  57. #define XtNautoRaise                "autoRaise"
  58. #define XtNgridWidth                "gridWidth"
  59. #define XtNgridHeight               "gridHeight"
  60. #define XtNextraWidth               "extraWidth"
  61. #define XtNextraHeight              "extraHeight"
  62. #define XtNrequestedWidth           "requestedWidth"
  63. #define XtNrequestedHeight          "requestedHeight"
  64. #define XtNshowGrid                 "showGrid"
  65. #define XtNsnapToGrid               "snapToGrid"
  66. #define XtNedgeWidth                "edgeWidth"
  67. #define XtNedgeAttachMode        "edgeAttachMode"
  68. #define XtNlayoutMode                "layoutMode"
  69. #define XtNarrowAngle            "arrowAngle"
  70. #define XtNarrowLength            "arrowLength"
  71. #define XtNdefaultCursor            "defaultCursor"
  72. #define XtNmoveCursor               "moveCursor"
  73. #define XtNselectCursor             "selectCursor"
  74. #define XtNselectBottomLeftCursor   "selectBottomLeftCursor"
  75. #define XtNselectBottomRightCursor  "selectBottomRightCursor"
  76. #define XtNselectTopLeftCursor      "selectTopLeftCursor"
  77. #define XtNselectTopRightCursor     "selectTopRightCursor"
  78. #define XtNpositionChangedCallback  "positionChanged"
  79. #define XtNselectionChangedCallback "selectionChanged"
  80. #define XtNsizeChangedCallback      "sizeChanged"
  81. #define XtNcompareNodesCallback     "compareNodes"
  82. #define XtNpreLayoutCallback        "preLayout"
  83. #define XtNpostLayoutCallback       "postLayout"
  84. #define XtNpreSelectionCallback     "preSelection"
  85. #define XtNselectTile               "selectTile"
  86. #define XtNrotation            "rotation"
  87. #define XtNautoLayout            "autoLayout"
  88. #define XtNnodeColor                "nodeColor"
  89. #define XtNedgeColor                "edgeColor"
  90. #define XtNframeColor               "frameColor"
  91. #define XtNoutlineColor             "outlineColor"
  92. #define XtNgridColor                "gridColor"
  93. #define XtNselectColor              "selectColor"
  94. #define XtNnodePrintColor           "nodePrintColor"
  95. #define XtNedgePrintColor           "edgePrintColor"
  96. #define XtNselfEdgeDiameter         "selfEdgeDiameter"
  97. #define XtNselfEdgePosition         "selfEdgePosition"
  98. #define XtNselfEdgeDirection        "selfEdgeDirection"
  99. #define XtNdashedLines              "dashedLines"
  100.  
  101.  
  102.  
  103. // Class types
  104.  
  105. #define XtCGraph              "Graph"
  106. #define XtCMoveDelta         "MoveDelta"
  107. #define XtCRubberEdges       "RubberEdges"
  108. #define XtCRubberArrows      "RubberArrows"
  109. #define XtCRubberAnnotations "RubberAnnotations"
  110. #define XtCShowHints         "ShowHints"
  111. #define XtCShowAnnotations   "ShowAnnotations"
  112. #define XtCHintSize          "HintSize"
  113. #define XtCOpaqueMove        "OpaqueMove"
  114. #define XtCAutoRaise         "AutoRaise"
  115. #define XtCGridSize          "GridSize"
  116. #define XtCExtraSize         "ExtraSize"
  117. #define XtCRequestedSize     "RequestedSize"
  118. #define XtCShowGrid          "ShowGrid"
  119. #define XtCSnapToGrid        "SnapToGrid"
  120. #define XtCEdgeWidth         "EdgeWidth"
  121. #define XtCEdgeAttachMode    "EdgeAttachMode"
  122. #define XtCLayoutMode        "LayoutMode"
  123. #define XtCArrowAngle         "ArrowAngle"
  124. #define XtCArrowLength         "ArrowLength"
  125. #define XtCRotation         "Rotation"
  126. #define XtCAutoLayout         "AutoLayout"
  127. #define XtCSelfEdgeDiameter  "SelfEdgeDiameter"
  128. #define XtCSelfEdgePosition  "SelfEdgePosition"
  129. #define XtCSelfEdgeDirection "SelfEdgeDirection"
  130. #define XtCDashedLines       "DashedLines"
  131.  
  132.  
  133. // Representation types
  134.  
  135. #define XtREdgeAttachMode    "EdgeAttachMode"
  136. #define XtRLayoutMode        "LayoutMode"
  137. #define XtRSelfEdgePosition  "SelfEdgePosition"
  138. #define XtRSelfEdgeDirection "SelfEdgeDirection"
  139.  
  140.  
  141. // Declare specific GraphEdit class and instance datatypes
  142. typedef struct _GraphEditClassRec *GraphEditWidgetClass;
  143. typedef struct _GraphEditRec      *GraphEditWidget;
  144.  
  145.  
  146. // Modes
  147. enum LayoutMode {
  148.     RegularLayoutMode,        // Use regular Sugiyama/Misue layout method
  149.     CompactLayoutMode        // Use a more compact alternative
  150. };
  151.  
  152. enum SelectionMode { 
  153.     SetSelection,        // Set the selection
  154.     ExtendSelection,        // Extend the selection
  155.     ToggleSelection        // Toggle the selection
  156. };
  157.  
  158.  
  159. // Callback Infos
  160. struct GraphEditPositionChangedInfo {
  161.     Graph     *graph;          // Graph this node is in
  162.     GraphNode *node;           // Node that changed position
  163.     BoxPoint  old_position;    // Old node position
  164.     BoxPoint  new_position;    // New node position
  165.     Boolean   is_last;         // True iff no more changes follow
  166.  
  167.     GraphEditPositionChangedInfo():
  168.         graph(0), node(0), 
  169.     old_position(),
  170.     new_position(),
  171.     is_last(False)
  172.     {}
  173.     GraphEditPositionChangedInfo(const GraphEditPositionChangedInfo& info):
  174.         graph(info.graph), node(info.node), 
  175.         old_position(info.old_position),
  176.         new_position(info.new_position),
  177.         is_last(info.is_last)
  178.     {}
  179.     GraphEditPositionChangedInfo& 
  180.         operator = (const GraphEditPositionChangedInfo& info)
  181.     {
  182.     graph        = info.graph;
  183.     node         = info.node;
  184.     old_position = info.old_position;
  185.     new_position = info.new_position;
  186.     is_last      = info.is_last;
  187.     return *this;
  188.     }
  189. };
  190.  
  191. struct GraphEditPreSelectionInfo {
  192.     Graph     *graph;        // Graph this node is in
  193.     GraphNode *node;        // Selected node
  194.     XEvent    *event;        // Event
  195.     Boolean   double_click;    // Double-click?
  196.     Boolean   doit;        // Flag: do default action?
  197.  
  198.     GraphEditPreSelectionInfo():
  199.         graph(0), node(0), event(0), double_click(False), doit(True)
  200.     {}
  201.     GraphEditPreSelectionInfo(const GraphEditPreSelectionInfo& info):
  202.         graph(info.graph), node(info.node), event(info.event),
  203.     double_click(info.double_click), doit(info.doit)
  204.     {}
  205.     GraphEditPreSelectionInfo& 
  206.         operator = (const GraphEditPreSelectionInfo& info)
  207.     {
  208.     graph        = info.graph;
  209.     node         = info.node;
  210.     event        = info.event;
  211.     double_click = info.double_click;
  212.     doit         = info.doit;
  213.     return *this;
  214.     }
  215. };
  216.  
  217. typedef GraphEditPreSelectionInfo GraphEditSelectionChangedInfo;
  218.  
  219. struct GraphEditLayoutInfo {
  220.     Graph     *graph;        // Graph this node is in
  221.     LayoutMode mode;        // Current layout mode
  222.     int rotation;        // Rotation (in degrees)
  223.  
  224.     GraphEditLayoutInfo():
  225.         graph(0), mode(RegularLayoutMode), rotation(0)
  226.     {}
  227.     GraphEditLayoutInfo(const GraphEditLayoutInfo& info):
  228.         graph(info.graph), mode(info.mode), rotation(info.rotation)
  229.     {}
  230.     GraphEditLayoutInfo& 
  231.         operator = (const GraphEditLayoutInfo& info)
  232.     {
  233.     graph    = info.graph;
  234.     mode     = info.mode;
  235.     rotation = info.rotation;
  236.     return *this;
  237.     }
  238. };
  239.  
  240. struct GraphEditCompareNodesInfo {
  241.     Graph     *graph;        // Graph these nodes are in
  242.     GraphNode *node1;        // Nodes to compare
  243.     GraphNode *node2;
  244.     int       result;        // Compare result (read/write; < 0, 0, > 0)
  245.  
  246.     GraphEditCompareNodesInfo():
  247.         graph(0),
  248.     node1(0),
  249.     node2(0),
  250.     result(0)
  251.     {}
  252.     GraphEditCompareNodesInfo(const GraphEditCompareNodesInfo& info):
  253.         graph(info.graph),
  254.     node1(info.node1),
  255.     node2(info.node2),
  256.     result(info.result)
  257.     {}
  258.     GraphEditCompareNodesInfo& 
  259.         operator = (const GraphEditCompareNodesInfo& info)
  260.     {
  261.         graph  = info.graph;
  262.     node1  = info.node1;
  263.     node2  = info.node2;
  264.     result = info.result;
  265.     return *this;
  266.     }
  267. };
  268.  
  269.  
  270. // Declare the class constant
  271. extern WidgetClass graphEditWidgetClass;
  272.  
  273. // Declare special access functions
  274.  
  275. // Inform widget that its size has changed
  276. extern void graphEditSizeChanged(Widget w);
  277.  
  278. // Get the graph's Graphic Context
  279. extern const GraphGC& graphEditGetGraphGC(Widget w);
  280.  
  281. // Get the graph
  282. extern Graph *graphEditGetGraph(Widget w);
  283.  
  284. // Get node at point
  285. extern GraphNode *graphEditGetNodeAtPoint(Widget w, BoxPoint p);
  286.  
  287. // Get node at event
  288. extern GraphNode *graphEditGetNodeAtEvent(Widget w, XEvent *e);
  289.  
  290. // Redraw all
  291. extern void graphEditRedraw(Widget w);
  292.  
  293. // Redraw a single node
  294. extern void graphEditRedrawNode(Widget w, GraphNode *node);
  295.  
  296. // Raise a single node
  297. extern void graphEditRaiseNode(Widget w, GraphNode *node);
  298.  
  299. // Return final position (if snapToGrid is enabled, for example)
  300. extern BoxPoint graphEditFinalPosition(Widget w, const BoxPoint& p);
  301.  
  302. // Disable or enable display
  303. extern Boolean graphEditEnableRedisplay(Widget w, Boolean state);
  304.  
  305. #endif // _DDD_GraphEdit_h
  306. // DON'T ADD ANYTHING BEHIND THIS #endif
  307.