2 Copyright 2004-2005 Chris Tallon
4 This file is part of VOMP.
6 VOMP is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 VOMP is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with VOMP; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
34 #include "surfacewin.h"
36 #include "surfacemvp.h"
45 virtual void setSize(UINT w, UINT h); // virtual? really?
46 void setPosition(UINT x, UINT y); // Set position on parent. Even numbers only!!!
47 void createBuffer(); // Make this a root view that goes in the BoxStack
51 void setGap(UINT gap);
52 void setBackgroundColour(Colour& colour);
53 void setVisible(bool isVisible);
56 // The following are supposed to be abstract functions
57 // However, it is useful to be able to make instances of Boxx
58 // Therefore the following stubs are provided.
59 virtual int handleCommand(int x) { return 0; }
60 virtual void processMessage(Message* m) {}
61 virtual bool mouseMove(int x, int y) { return false; }
62 virtual bool mouseLBDOWN(int x, int y) { return false; }
63 virtual void deactivateAllControls() {}
67 int getScreenX(); // where is it on screen
69 int getRootBoxOffsetX(); // where is it relative to the top-parent in the boxstack
70 int getRootBoxOffsetY();
71 int getX(); // where is it relative to its parent
72 int getX2(); // .. and the right edge
78 Region* getRegion(); // Not to be used for changing the region
79 void getRootBoxRegion(Region*);
81 // Drawing functions level 1
82 void fillColour(Colour& colour);
83 void drawPara(char* text, int x, int y, Colour& colour);
85 // Drawing functions level 0
86 void rectangle(UINT x, UINT y, UINT w, UINT h, Colour& colour);
87 void rectangle(Region& region, Colour& colour);
89 void drawText(const char* text, int x, int y, Colour& colour);
90 void drawText(const char* text, int x, int y, int width, Colour& colour);
91 void drawTextRJ(const char* text, int x, int y, Colour& colour);
92 void drawTextCentre(const char* text, int x, int y, Colour& colour);
93 void drawPixel(UINT x, UINT y, Colour& colour);
95 /* This is for system which need a locking of the drawing surface to speed up drawing */
99 int charWidth(char c);
101 void add(Boxx*); // a boxx has a set of child boxxs
105 The following function sets the child's parent pointer without adding the child to the children vector.
106 It's a hack (that should be deprecated?) to allow things like WSymbol to be created, do some drawing on
107 the surface and then be deleted again, leaving the drawing present.
108 A better design would be to create many WSymbols - one per symbol and leave them created - then the
109 automatic draw code will be able to redraw the symbols without all that code needing
110 to be in the derived boxx's draw method.
112 void TEMPADD(Boxx* child) { child->setParent(this); }
114 friend class BoxStack;
118 vector<Boxx*> children;
120 void setParent(Boxx*);
123 static const int paraMargin = 10;
126 Colour backgroundColour;
127 bool backgroundColourSet;
130 static char numBoxxes;
141 It's "Boxx" because "Box" was already taken.
143 BoxStack replaces Viewman and handles displaying a stack of root boxxs (boxxs with surfaces) on the screen.
145 Boxx relaces Box, Widget and parts of View and represents a box with or without a surface.
146 Let's call a Boxx with a surface a root box, and a boxx without a surface a child box.
148 A boxx with a surface (root) is like an old View and is handled by BoxStack.
149 A boxx without a surface (child) is like and old Widget and needs to be a child box of another boxx (root or not).
151 Don't add a boxx with a surface to another boxx. That isn't the design.
153 So, when you create a boxx, either that boxx calls createBuffer() on itself,
154 or some other box add()s the new box to itself.
156 Root boxxs can overlap each other - this is managed by boxstack.
157 Child boxxs within a parent boxx do not overlap each other.
158 However, a grandchild box can overlap a child box (but must be entirely contained within the child box).
160 TBBoxx replaces View but is now only a convenience class for the window dressing stuff. It isn't required anymore since
161 all the real work that view used to do is done in Boxx now.
163 Obseleted classes: Box, View, Viewman, Widget, others?
164 No code outside boxx should talk about surfaces anymore. Hopefully.