home *** CD-ROM | disk | FTP | other *** search
- /*
- ** GadTools layout toolkit
- **
- ** Copyright © 1993-1996 by Olaf `Olsen' Barthel
- ** Freely distributable.
- **
- ** :ts=4
- */
-
- #ifndef _GTLAYOUT_GLOBAL_H
- #include "gtlayout_global.h"
- #endif
-
- VOID
- LTP_Spread(LayoutHandle *Handle,ObjectNode *Group,LONG Width,LONG Height)
- {
- ObjectNode *Node;
- LONG Count;
-
- Count = 0;
-
- SCANGROUP(Group,Node)
- {
- Count++;
- }
-
- if(Group->Special.Group.Horizontal)
- {
- LONG Room = Width - Group->Width,Left,Width,i = 0;
-
- if(Count > 1)
- {
- Left = 0;
-
- Room += --Count * Handle->InterWidth;
- }
- else
- Left = Room / 2;
-
- SCANGROUP(Group,Node)
- {
- if(!LIKE_STRING_KIND(Node) || Node->Special.String.LinkID == -1)
- {
- Width = Node->Width;
-
- switch(Node->LabelPlace)
- {
- case PLACE_LEFT:
-
- if(Node->Type == MX_KIND)
- {
- Left += Node->Special.Radio.LabelWidth + INTERWIDTH;
-
- if(Node->Label)
- {
- if(Node->Special.Radio.TitlePlace == PLACETEXT_LEFT)
- Left += Node->LabelWidth + INTERWIDTH;
- else
- Width += INTERWIDTH + Node->LabelWidth;
- }
- }
- else
- Left += Node->LabelWidth + INTERWIDTH;
-
- break;
-
- case PLACE_RIGHT:
-
- if(Node->Type == MX_KIND)
- {
- Width += INTERWIDTH + Node->Special.Radio.LabelWidth;
-
- if(Node->Label)
- {
- if(Node->Special.Radio.TitlePlace == PLACETEXT_LEFT)
- Left += Node->LabelWidth + INTERWIDTH;
- else
- Width += INTERWIDTH + Node->LabelWidth;
- }
- }
- else
- Width += INTERWIDTH + Node->LabelWidth;
-
- break;
- }
-
- if(Node->Type == LISTVIEW_KIND && Node->Special.List.ExtraLabelWidth)
- Left += Node->Special.List.ExtraLabelWidth + INTERWIDTH;
-
- if(Node->Type == SLIDER_KIND)
- {
- if(Node->Special.Slider.LevelPlace == PLACETEXT_RIGHT)
- Width += INTERWIDTH + Node->Special.Slider.LevelWidth;
-
- if(Node->Special.Slider.LevelPlace == PLACETEXT_LEFT && Node->LabelPlace != PLACE_LEFT)
- Left += INTERWIDTH + Node->Special.Slider.LevelWidth;
- }
-
- #ifdef DO_LEVEL_KIND
- if(Node->Type == LEVEL_KIND)
- {
- if(Node->Special.Level.LevelPlace == PLACETEXT_RIGHT)
- Width += INTERWIDTH + Node->Special.Level.MaxLevelWidth;
-
- if(Node->Special.Level.LevelPlace == PLACETEXT_LEFT && Node->LabelPlace != PLACE_LEFT)
- Left += INTERWIDTH + Node->Special.Level.MaxLevelWidth;
- }
- #endif /* DO_LEVEL_KIND*/
-
- Node->Left = Left;
-
- Left += Width + ((Room * (i + 1)) / Count - (Room * i) / Count);
-
- i++;
- }
- }
- }
- else
- {
- LONG Room = Height - Group->Height,Height,Top,y,i = 0;
-
- if(Count > 1)
- {
- Top = 0;
-
- Room += --Count * Handle->InterHeight;
- }
- else
- Top = Room / 2;
-
- SCANGROUP(Group,Node)
- {
- if(!LIKE_STRING_KIND(Node) || Node->Special.String.LinkID == -1)
- {
- if(Count++)
- {
- if(Node->ExtraSpace > 0)
- y = Top + Node->ExtraSpace * Handle->InterHeight;
- else
- {
- if(Node->ExtraSpace < 0)
- y = Top - Node->ExtraSpace;
- else
- y = Top + Handle->InterHeight;
- }
- }
- else
- y = Top;
-
- if(Node->LabelPlace == PLACE_ABOVE)
- y += Handle->GlyphHeight + INTERHEIGHT;
-
- Node->Top = y;
-
- if(Node->LabelPlace == PLACE_BELOW && Node->Label)
- Height = Node->Height + INTERHEIGHT + Handle->GlyphHeight;
- else
- Height = Node->Height;
-
- Top = y + Height + ((Room * (i + 1)) / Count - (Room * i) / Count);
-
- i++;
- }
- }
- }
- }
-