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
-
- ObjectNode *
- LTP_CreateObjectNode(LayoutHandle *handle,LONG type,ULONG id,STRPTR label)
- {
- ObjectNode *node;
- ULONG size,extra;
-
- if(type < BUTTON_KIND || (type > TEXT_KIND && type < INCREMENTER_KIND) || type > BLANK_KIND)
- return(NULL);
-
- switch(type)
- {
- #ifdef DO_GAUGE_KIND
-
- case GAUGE_KIND:
-
- extra = sizeof(GaugeExtra);
- break;
- #endif
-
- #ifdef DO_TAPEDECK_KIND
- case TAPEDECK_KIND:
-
- extra = sizeof(TapeDeckExtra);
- break;
- #endif /* DO_TAPEDECK_KIND */
-
- #ifdef DO_LEVEL_KIND
- case LEVEL_KIND:
-
- extra = sizeof(LevelExtra);
- break;
- #endif /* DO_LEVEL_KIND */
-
- case BUTTON_KIND:
-
- extra = sizeof(ButtonExtra);
- break;
-
- case XBAR_KIND:
- case YBAR_KIND:
-
- extra = sizeof(BarExtra);
- break;
-
- case BOX_KIND:
-
- extra = sizeof(BoxExtra);
- break;
-
- case FRAME_KIND:
-
- extra = sizeof(FrameExtra);
- break;
-
- case PICKER_KIND:
-
- extra = sizeof(PickerExtra);
- break;
-
- case INCREMENTER_KIND:
-
- extra = sizeof(IncrementerExtra);
- break;
-
- case LISTVIEW_KIND:
-
- extra = sizeof(ListExtra);
- break;
-
- case MX_KIND:
-
- extra = sizeof(RadioExtra);
- break;
-
- case TEXT_KIND:
-
- extra = sizeof(TextExtra);
- break;
-
- case NUMBER_KIND:
-
- extra = sizeof(NumberExtra);
- break;
-
- case CYCLE_KIND:
-
- extra = sizeof(CycleExtra);
- break;
-
- #if defined(DO_POPUP_KIND) && defined(DO_BOOPSI_KIND)
- case POPUP_KIND:
-
- extra = sizeof(PopupExtra);
- break;
- #endif
-
- #if defined(DO_TAB_KIND) && defined(DO_BOOPSI_KIND)
- case TAB_KIND:
-
- extra = sizeof(TabExtra);
- break;
- #endif
-
- case PALETTE_KIND:
-
- extra = sizeof(PalExtra);
- break;
-
- case SLIDER_KIND:
-
- extra = sizeof(SliderExtra);
- break;
-
- case SCROLLER_KIND:
-
- extra = sizeof(ScrollerExtra);
- break;
-
- case INTEGER_KIND:
-
- extra = sizeof(IntegerExtra);
- break;
-
- case PASSWORD_KIND:
- case STRING_KIND:
-
- extra = sizeof(StringExtra);
- break;
-
- case HORIZONTAL_KIND:
- case VERTICAL_KIND:
-
- extra = sizeof(GroupExtra);
- break;
-
- #ifdef DO_BOOPSI_KIND
- case BOOPSI_KIND:
-
- extra = sizeof(BOOPSIExtra);
- break;
- #endif /* DO_BOOPSI_KIND */
-
- default:
-
- extra = 0;
- break;
- }
-
- size = offsetof(ObjectNode,Special) + extra;
-
- if(node = LTP_Alloc(handle,size))
- {
- node->Type = type;
- node->Label = label;
- node->ID = id;
- node->PointBack = node;
-
- switch(type)
- {
- case LISTVIEW_KIND:
-
- node->LabelPlace = PLACE_ABOVE;
- node->Lines = 1;
- node->Current = ~0;
- node->Special.List.LinkID = -1;
- node->Special.List.AutoPageID = -1;
-
- break;
-
- case PASSWORD_KIND:
- case STRING_KIND:
-
- node->Special.String.LayoutHandle = handle;
- node->Special.String.LinkID = -1;
- node->Special.String.MaxChars = 256;
-
- break;
-
- case INTEGER_KIND:
-
- node->Special.Integer.LayoutHandle = handle;
- node->Min = -2147483647;
- node->Max = 2147483647;
- node->Special.Integer.MaxChars = 11;
-
- break;
- #ifdef DO_BOOPSI_KIND
- case BOOPSI_KIND:
-
- node->Special.BOOPSI.Link = NIL_LINK;
- break;
- #endif /* DO_BOOPSI_KIND */
-
- #ifdef DO_TAPEDECK_KIND
- case TAPEDECK_KIND:
-
- node->LabelPlace = PLACE_BELOW;
- break;
- #endif /* DO_TAPEDECK_KIND */
-
- case MX_KIND:
-
- node->LabelPlace = PLACE_RIGHT;
- node->Special.Radio.TitlePlace = PLACETEXT_LEFT;
- node->Special.Radio.AutoPageID = -1;
-
- break;
- #if defined(DO_POPUP_KIND) && defined(DO_BOOPSI_KIND)
- case POPUP_KIND:
-
- node->Special.Popup.AutoPageID = -1;
- break;
- #endif
-
- #if defined(DO_TAB_KIND) && defined(DO_BOOPSI_KIND)
- case TAB_KIND:
-
- node->Special.Tab.AutoPageID = -1;
- break;
- #endif
- case CYCLE_KIND:
-
- node->Special.Cycle.AutoPageID = -1;
- break;
-
- case SCROLLER_KIND:
-
- node->Special.Scroller.Visible = 2;
- node->Special.Scroller.RelVerify = TRUE;
- node->Special.Scroller.Immediate = TRUE;
- break;
-
- case SLIDER_KIND:
-
- node->Special.Slider.LevelPlace = PLACETEXT_LEFT;
- node->Special.Slider.LevelFormat = (LocaleBase && LocaleBase->lb_SysPatches) ? "%lD" : "%ld";
-
- break;
-
- case FRAME_KIND:
-
- node->Special.Frame.DrawBox = TRUE;
- node->Special.Frame.Dummy.GadgetID = id;
- break;
-
- case BOX_KIND:
-
- node->Special.Box.DrawBox = TRUE;
- break;
-
- case TEXT_KIND:
-
- node->Special.Text.FrontPen = node->Special.Text.BackPen = -1;
- break;
-
- case NUMBER_KIND:
-
- node->Special.Number.FrontPen = node->Special.Number.BackPen = -1;
- node->Special.Number.MaxNumberLen = 10;
- break;
-
- case HORIZONTAL_KIND:
-
- node->Special.Group.Horizontal = TRUE;
-
- /* Fall through to... */
-
- case VERTICAL_KIND:
-
- node->Type = GROUP_KIND;
- node->LabelPlace = PLACE_IN;
- #ifdef NOT_FUNCTIONAL
- node->Special.Group.UseWidth = node->Special.Group.UseHeight = -1;
- #endif // NOT_FUNCTIONAL
- break;
- #ifdef DO_LEVEL_KIND
- case LEVEL_KIND:
-
- node->Special.Level.LevelPlace = PLACETEXT_LEFT;
- node->LabelPlace = PLACE_LEFT;
- node->Special.Level.LevelFormat = (LocaleBase && LocaleBase->lb_SysPatches) ? "%lD" : "%ld";
-
- break;
- #endif /* DO_LEVEL_KIND */
-
- #ifdef DO_GAUGE_KIND
- case GAUGE_KIND:
-
- node->Special.Gauge.LastPercentage = -1;
- break;
- #endif /* DO_GAUGE_KIND */
- }
- }
-
- return(node);
- }
-