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
-
- #ifdef DO_MENUS
-
- /* LTP_ShrinkMenu(RootMenu *Root,ItemNode *First,ItemNode *Last,UWORD Mask):
- *
- * Rethink the widths of all menu items between First and Last, including
- * both the first and the last entry.
- */
-
- VOID
- LTP_ShrinkMenu(RootMenu *Root,ItemNode *First,ItemNode *Last,LONG Mask)
- {
- ItemNode *Here;
- LONG Width,MaxWidth = 0,CommandWidth = 0;
-
- // Determine the widths of all items, also calculate
- // the command widths
-
- for(Here = First ; Here->Node.mln_Succ ; Here = (ItemNode *)Here->Node.mln_Succ)
- {
- if((Here->Flags & ITEMF_IsSub) == Mask)
- {
- if(!(Here->Flags & ITEMF_IsBar))
- {
- struct IntuiText *IntuiText = (struct IntuiText *)Here->Item.ItemFill;
-
- Width = 2 + TextLength(&Root->RPort,IntuiText->IText,strlen(IntuiText->IText)) + 2;
-
- if(Here->Item.Flags & CHECKIT)
- Width += 2 + Root->CheckWidth;
-
- if(Width > MaxWidth)
- MaxWidth = Width;
-
- if((Width = LTP_GetCommandWidth(Root,Here)) > CommandWidth)
- CommandWidth = Width;
- }
- }
-
- if(Here == Last)
- break;
- }
-
- // Now adjust the widths of all objects
-
- for(Here = First ; Here->Node.mln_Succ ; Here = (ItemNode *)Here->Node.mln_Succ)
- {
- if((Here->Flags & ITEMF_IsSub) == Mask)
- {
- if(Here->Flags & ITEMF_IsBar)
- {
- struct Image *Image = (struct Image *)Here->Item.ItemFill;
-
- Image->Width = MaxWidth + CommandWidth - 4;
- }
- else
- {
- // Move over the submenu items if necessary
-
- if(Here->Item.SubItem)
- {
- ItemNode *Sub = (ItemNode *)((ULONG)Here->Item.SubItem - sizeof(struct MinNode));
-
- FOREVER
- {
- Sub->Item.LeftEdge = MaxWidth + 2;
-
- if(Sub->Item.NextItem)
- Sub = (ItemNode *)Sub->Node.mln_Succ;
- else
- break;
- }
- }
- }
-
- Here->Item.Width = MaxWidth + CommandWidth;
- }
-
- if(Here == Last)
- break;
- }
- }
-
- #endif /* DO_MENUS */
-