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 / ScrolledGE.C < prev    next >
C/C++ Source or Header  |  1998-08-05  |  3KB  |  107 lines

  1. // $Id: ScrolledGE.C,v 1.18 1998/08/05 09:25:46 zeller Exp $  -*- C++ -*-
  2. // Scrolled Graph Editor
  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. char ScrolledGraphEdit_rcsid[] = 
  30.     "$Id: ScrolledGE.C,v 1.18 1998/08/05 09:25:46 zeller Exp $";
  31.  
  32. #ifdef __GNUG__
  33. #pragma implementation
  34. #endif
  35.  
  36. #include <iostream.h>
  37. #include "ScrolleGEP.h"
  38. #include "GraphEdit.h"
  39. #include "verify.h"
  40. #include "strclass.h"
  41.  
  42. // We have no special class for scrolling a graph editor, but use the
  43. // Motif ScrolledWindow class instead.
  44.  
  45. WidgetClass scrolledGraphEditWidgetClass = xmScrolledWindowWidgetClass;
  46.  
  47. static void ResizeEH(Widget, XtPointer client_data, XEvent *, Boolean *)
  48. {
  49.     Widget graphEdit = Widget(client_data);
  50.     graphEditSizeChanged(graphEdit);
  51. }
  52.  
  53. Widget createScrolledGraphEdit(Widget parent, String name,
  54.                    ArgList arglist, Cardinal argcount)
  55. {
  56.     Arg args[10];
  57.     int arg = 0;
  58.  
  59.     XtSetArg(args[arg], XmNscrollingPolicy, XmAUTOMATIC); arg++;
  60.     string swindow_name = string(name) + "_swindow";
  61.  
  62.     XtSetArg(args[arg], XmNborderWidth,     0); arg++;
  63.     XtSetArg(args[arg], XmNspacing,         0); arg++;
  64.     XtSetArg(args[arg], XmNshadowThickness, 0); arg++;
  65.  
  66.     Widget scrolledWindow = 
  67.     verify(XtCreateManagedWidget((char *)swindow_name, 
  68.                      scrolledGraphEditWidgetClass,
  69.                      parent, args, arg));
  70.  
  71.     Widget graphEdit = 
  72.     verify(XtCreateManagedWidget(name, graphEditWidgetClass,
  73.                      scrolledWindow, arglist, argcount));
  74.  
  75.     XtAddEventHandler(scrolledWindow, StructureNotifyMask, False,
  76.               ResizeEH, XtPointer(graphEdit));
  77.  
  78.     // Propagate requested width and height of graph editor to scrolled window
  79.     Dimension width, height;
  80.     XtVaGetValues(graphEdit, 
  81.           XtNrequestedWidth, &width,
  82.           XtNrequestedHeight, &height,
  83.           NULL);
  84.  
  85.     if (width > 0)
  86.     XtVaSetValues(scrolledWindow, XmNwidth, width, NULL);
  87.     if (height > 0)
  88.     XtVaSetValues(scrolledWindow, XmNheight, height, NULL);
  89.  
  90.     return graphEdit;
  91. }
  92.  
  93. // For a given graph editor W, return its scroller
  94. Widget scrollerOfGraphEdit(Widget w)
  95. {
  96.     XtCheckSubclass(w, GraphEditWidgetClass, "Bad widget class");
  97.  
  98.     Widget parent = w;
  99.     while (parent != 0)
  100.     {
  101.     if (XtIsSubclass(parent, scrolledGraphEditWidgetClass))
  102.         break;
  103.     parent = XtParent(parent);
  104.     }
  105.     return parent;
  106. }
  107.