Google

Main Page   Class Hierarchy   Compound List   File List   Compound Members  

csbaglay.h

00001 /*
00002     Copyright (C) Aleksandras Gluchovas
00003     CS port by Norman Krämer <norman@users.sourceforge.net>
00004 
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Library General Public
00007     License as published by the Free Software Foundation; either
00008     version 2 of the License, or (at your option) any later version.
00009 
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Library General Public License for more details.
00014 
00015     You should have received a copy of the GNU Library General Public
00016     License along with this library; if not, write to the Free
00017     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00018 */
00019 
00020 #ifndef __GRIDBAGLAYOUT_G__
00021 #define __GRIDBAGLAYOUT_G__
00022 
00023 #include "cslayout.h"
00024 
00146 class csGridBagConstraint : public csLayoutConstraint
00147 {
00148 public:
00149   csGridBagConstraint (csComponent *comp);
00150   csGridBagConstraint (const csGridBagConstraint &c);
00151   csGridBagConstraint (csComponent *comp, int _gridx, int _gridy,
00152                        int _gridwidth, int _gridheight, float _weightx,
00153                        float _weighty, int _anchor, int _fill,
00154                        csRect _insets, int _ipadx, int _ipady);
00155   csLayoutConstraint *Clone ();
00156 public:
00162   int gridx;
00169   int gridy;
00174   int gridwidth;
00179   int gridheight;
00186   float weightx;
00193   float weighty;
00208   int anchor;
00215   int fill;
00219   csRect insets;
00224   int ipadx;
00229   int ipady;
00230 
00231 #undef RELATIVE
00232 #undef _LEFT
00233 #undef _CENTER
00234 
00235   enum GRID_BAG_CONSTANTS
00236   {
00237     RELATIVE   = -1,
00238     REMAINDER  = 0,
00239 
00240     NONE       = 0,
00241     BOTH       = 1,
00242     HORIZONTAL = 2,
00243     VERTICAL   = 3,
00244 
00245     CENTER    = 10,
00246     NORTH     = 11,
00247     NORTHEAST = 12,
00248     EAST      = 13,
00249     SOUTHEAST = 14,
00250     SOUTH     = 15,
00251     SOUTHWEST = 16,
00252     WEST      = 17,
00253     NORTHWEST = 18
00254   };
00255 
00256   // used interally  (do not use!)
00257 
00258   enum  GRID_BAG_CONSTANTS_INTERNAL
00259   {
00260     _LEFT     = 20,
00261     _CENTER   = 21,
00262     _RIGHT    = 22
00263   };
00264 
00265   // for internal uses
00266   bool bSized;
00267   csPoint mPrefCompSize;
00268 };
00269 
00270 class csGridBagLayout : public csLayout2
00271 {
00272   struct CellInfo
00273   {
00274     csComponent* comp;
00275 
00276     int prefSize;        // actually, it can be calculated on-the-fly
00277     int prefCompSize;
00278 
00279     int cellSpan;
00280     int leftInset;
00281     int rightInset;
00282     int pad;
00283     int fill;
00284     int anchor;
00285 
00286     float extraSpace;
00287     float weight;
00288 
00289     int finalSize;
00290     int finalPos;
00291     int finalCompSize;
00292     int finalCompPos;
00293   };
00294 
00295   struct CellHolder
00296   {
00297     csGridBagConstraint* constr;
00298     float weightx;
00299     float weighty;
00300 
00301     int gridwidth;
00302     int gridheight;
00303     int actualWidth;
00304     int actualHeight;
00305 
00306     bool isFirstCellForComp;
00307     int x, y;
00308   };
00309 
00310   CS_DECLARE_TYPED_VECTOR(CellHolderArrayT, CellHolder);
00311 
00312  public:
00313   csGridBagLayout (csComponent *pParent);
00314   ~csGridBagLayout ();
00315 
00316   virtual void RemoveLayoutComponent (csComponent* comp);
00317   virtual void SuggestSize (int &sugw, int &sugh);
00318   virtual void LayoutContainer ();
00319 
00320   virtual void MaximumLayoutSize (int &w, int &h);
00321   virtual float GetLayoutAlignmentX ();
00322   virtual float GetLayoutAlignmentY ();
00323 
00324   csGridBagConstraint c;
00325 
00326 protected:
00327   int CalcPrefSize (CellInfo* cells, int xCnt, int yCnt, int _arrayWidth);
00328   void LayoutCells (CellInfo* cells, int xCnt, int yCnt,
00329                     int outterSize, int outterPos, int _arrayWidth );
00330 
00331   void InitializeCellArray (CellInfo* cells, int size);
00332   void InitCellFromHolder (CellHolder& holder);
00333   void CreateMatrix ();
00334   long GetCellCode (int x, int y);
00335   void CleanupConstraints ();
00336   void ClearCachedData ();
00337   bool HasCashedInfo ();
00338   void SetComponentLocations ();
00339 
00340 protected:
00341   CellInfo* mpHorizCellInfos;
00342   CellInfo* mpVertCellInfos;
00343   int mColCount;
00344   int mRowCount;
00345 };
00346 
00347 #endif // __GRIDBAGLAYOUT_G__

Generated for Crystal Space by doxygen 1.2.5 written by Dimitri van Heesch, ©1997-2000