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 / RegionGN.h < prev    next >
C/C++ Source or Header  |  1998-03-25  |  3KB  |  130 lines

  1. // $Id: RegionGN.h,v 1.15 1998/03/25 12:44:07 zeller Exp $
  2. // RegionGraphNode class: PosGraphNode with rectangular region
  3. // centered around position
  4.  
  5. // Copyright (C) 1995 Technische Universitaet Braunschweig, Germany.
  6. // Written by Andreas Zeller <zeller@ips.cs.tu-bs.de>.
  7. // 
  8. // This file is part of DDD.
  9. // 
  10. // DDD is free software; you can redistribute it and/or
  11. // modify it under the terms of the GNU General Public
  12. // License as published by the Free Software Foundation; either
  13. // version 2 of the License, or (at your option) any later version.
  14. // 
  15. // DDD is distributed in the hope that it will be useful,
  16. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  18. // See the GNU General Public License for more details.
  19. // 
  20. // You should have received a copy of the GNU General Public
  21. // License along with DDD -- see the file COPYING.
  22. // If not, write to the Free Software Foundation, Inc.,
  23. // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  24. // 
  25. // DDD is the data display debugger.
  26. // For details, see the DDD World-Wide-Web page, 
  27. // `http://www.cs.tu-bs.de/softech/ddd/',
  28. // or send a mail to the DDD developers <ddd@ips.cs.tu-bs.de>.
  29.  
  30. #ifndef _DDD_RegionGraphNode_h
  31. #define _DDD_RegionGraphNode_h
  32.  
  33. #ifdef __GNUG__
  34. #pragma interface
  35. #endif
  36.  
  37.  
  38. #include "PosGraphN.h"
  39. #include "BoxRegion.h"
  40.  
  41. class RegionGraphNode: public PosGraphNode {
  42. public:
  43.     DECLARE_TYPE_INFO
  44.  
  45. private:
  46.     BoxRegion _region;        // The region occupied by this node
  47.  
  48. protected:        
  49.     // Draw region
  50.     virtual void forceDraw(Widget w, 
  51.                const BoxRegion& exposed, 
  52.                const GraphGC& gc) const = 0;
  53.  
  54.     // Center around position
  55.     void center();
  56.  
  57.     // Copy Constructor
  58.     RegionGraphNode(const RegionGraphNode& node):
  59.         PosGraphNode(node),
  60.         _region(node._region)
  61.     {}
  62.  
  63. public:
  64.     // Constructor
  65.     RegionGraphNode(const BoxPoint& initialPos = BoxPoint(),
  66.     const BoxSize& initialSize = BoxSize()):
  67.     PosGraphNode(initialPos),
  68.     _region(initialPos, initialSize)
  69.     {
  70.     center();
  71.     }
  72.  
  73.     // Destructor
  74.     virtual ~RegionGraphNode() {}
  75.  
  76.     // Move
  77.     virtual void moveTo(const BoxPoint& newPos)
  78.     {
  79.     PosGraphNode::moveTo(newPos);
  80.     center();
  81.     }
  82.  
  83.     // Size change handler: return true iff ok
  84.     static bool (*ResizeCB)(RegionGraphNode *node, 
  85.                 const BoxSize& newSize);
  86.  
  87.     // Assign new size
  88.     virtual void resize(const BoxSize& newSize)
  89.     {
  90.     if (newSize != _region.space() && ResizeCB(this, newSize))
  91.     {
  92.         _region.space() = newSize;
  93.         center();
  94.     }
  95.     }
  96.  
  97.     // Compute position for ORIGIN
  98.     virtual BoxPoint originToPos(const BoxPoint& origin, const GraphGC&) const;
  99.  
  100.     // Draw
  101.     virtual void draw(Widget w,
  102.               const BoxRegion& exposed,
  103.               const GraphGC& gc) const;
  104.  
  105.     // Print
  106.     virtual void _print(ostream& os, const GraphGC& gc) const;
  107.  
  108.     // Attributes
  109.     // Region occupied by this node
  110.     virtual const BoxRegion& region(const GraphGC&) const
  111.     { 
  112.     return _region; 
  113.     }
  114.  
  115.     // Region to be highlighted
  116.     virtual const BoxRegion& highlightRegion(const GraphGC& gc) const 
  117.     { 
  118.     return region(gc); 
  119.     }
  120.  
  121.     // Sensitive region
  122.     virtual const BoxRegion& sensitiveRegion(const GraphGC& gc) const 
  123.     { 
  124.     return region(gc); 
  125.     }
  126. };
  127.  
  128. #endif // _DDD_RegionGraphNode_h
  129. // DON'T ADD ANYTHING BEHIND THIS #endif
  130.