home *** CD-ROM | disk | FTP | other *** search
- /* GadTools layout toolkit
- **
- ** Copyright © 1993-1995 by Olaf `Olsen' Barthel
- ** Freely distributable.
- */
-
- #include "gtlayout_global.h"
-
- #ifdef DO_BOOPSI_KIND
- STATIC VOID __regargs
- LocalAddPart(STRPTR Base,STRPTR Name)
- {
- LONG Len = strlen(Base);
-
- if(Base[Len - 1] != ':')
- strcat(Base,"/");
-
- strcat(Base,Name);
- }
-
- STATIC struct Library * __regargs
- OpenClass(STRPTR Name)
- {
- struct Library *Result;
-
- if(!(Result = OpenLibrary(Name,0)))
- {
- struct Process *Process = (struct Process *)FindTask(NULL);
- UBYTE LocalBuffer[256];
- LONG i,Len;
-
- Len = strlen(Name);
-
- for(i = Len - 1 ; i >= 0 ; i--)
- {
- if(Name[i] == '/' || Name[i] == ':')
- {
- Name = &Name[i + 1];
-
- break;
- }
- }
-
- if(Process -> pr_Task . tc_Node . ln_Type == NT_PROCESS && Process -> pr_HomeDir)
- {
- strcpy(LocalBuffer,"PROGDIR:Classes/Gadgets");
- LocalAddPart(LocalBuffer,Name);
-
- Result = OpenLibrary(LocalBuffer,0);
- }
-
- if(!Result)
- {
- strcpy(LocalBuffer,":Classes/Gadgets");
- LocalAddPart(LocalBuffer,Name);
-
- if(!(Result = OpenLibrary(LocalBuffer,0)))
- {
- strcpy(LocalBuffer,"Gadgets");
- LocalAddPart(LocalBuffer,Name);
-
- if(!(Result = OpenLibrary(LocalBuffer,0)))
- Result = OpenLibrary(Name,0);
- }
- }
- }
-
- return(Result);
- }
- #endif /* DO_BOOPSI_KIND */
-
-
- /*****************************************************************************/
-
-
- VOID __regargs
- LTP_LayoutGadgets(LayoutHandle *Handle,ObjectNode *Group,LONG Left,LONG Top,LONG PlusWidth,LONG PlusHeight)
- {
- if(!Handle -> Failed)
- {
- STATIC struct TagItem NoUnderscoreVanillaTags[] =
- {
- {TAG_DONE}
- };
-
- STATIC struct TagItem VanillaTags[] =
- {
- {GT_Underscore, '_'},
- {TAG_DONE}
- };
-
- STATIC struct TagItem DisabledTags[] =
- {
- {GT_Underscore, '_' },
- {GA_Disabled, TRUE},
- {TAG_DONE}
- };
-
- STATIC struct TagItem NoUnderscoreDisabledTags[] =
- {
- {GA_Disabled, TRUE},
- {TAG_DONE}
- };
-
- struct NewGadget NewGadget;
-
- struct Gadget *Gadget,
- *Extra;
- struct TagItem *Tags;
- ULONG page;
- ObjectNode *Node;
-
- if(!Handle -> List)
- {
- if(!(Handle -> Previous = CreateContext(&Handle -> List)))
- {
- Handle -> Failed = TRUE;
-
- return;
- }
- }
-
- NewGadget . ng_TextAttr = Handle -> TextAttr;
- NewGadget . ng_VisualInfo = Handle -> VisualInfo;
-
- Group -> Special . Group . Visible = TRUE;
-
- SCANPAGE(Group,Node,page)
- {
- if(Node -> Type != FRAME_KIND && Node -> Type != BOX_KIND && Node -> Type != XBAR_KIND && Node -> Type != YBAR_KIND)
- {
- Extra = NULL;
-
- if(Node -> GroupIndent)
- {
- NewGadget . ng_LeftEdge = Node -> Left + 4;
- NewGadget . ng_TopEdge = Node -> Top + 2;
- NewGadget . ng_Width = Node -> Width - (4 + 4);
- NewGadget . ng_Height = Node -> Height - (2 + 2);
- }
- else
- {
- NewGadget . ng_LeftEdge = Node -> Left;
- NewGadget . ng_TopEdge = Node -> Top;
- NewGadget . ng_Width = Node -> Width;
- NewGadget . ng_Height = Node -> Height;
- }
-
- NewGadget . ng_GadgetText = Node -> Label ? Node -> Label : (STRPTR)"";
- NewGadget . ng_GadgetID = Node -> ID;
- NewGadget . ng_UserData = Node;
-
- if(Node -> NoKey)
- {
- if(Node -> Disabled)
- {
- if(!V39 && (Node -> Type == MX_KIND || Node -> Type == LISTVIEW_KIND))
- Tags = NoUnderscoreVanillaTags;
- else
- Tags = NoUnderscoreDisabledTags;
- }
- else
- Tags = NoUnderscoreVanillaTags;
- }
- else
- {
- if(Node -> Disabled)
- {
- if(!V39 && (Node -> Type == MX_KIND || Node -> Type == LISTVIEW_KIND))
- Tags = VanillaTags;
- else
- Tags = DisabledTags;
- }
- else
- Tags = VanillaTags;
- }
-
- switch(Node -> LabelPlace)
- {
- case PLACE_LEFT:
-
- NewGadget . ng_Flags = PLACETEXT_LEFT;
- break;
-
- case PLACE_RIGHT:
-
- NewGadget . ng_Flags = PLACETEXT_RIGHT;
- break;
-
- case PLACE_ABOVE:
-
- NewGadget . ng_Flags = PLACETEXT_ABOVE;
- break;
-
- case PLACE_BELOW:
-
- NewGadget . ng_Flags = PLACETEXT_BELOW;
- break;
-
- case PLACE_IN:
-
- NewGadget . ng_Flags = PLACETEXT_IN;
- break;
-
- default:
-
- NewGadget . ng_Flags = NULL;
- break;
- }
-
- if(Node -> HighLabel)
- NewGadget . ng_Flags |= NG_HIGHLABEL;
-
- switch(Node -> Type)
- {
- #ifdef DO_BOOPSI_KIND
- case BOOPSI_KIND:
- {
- struct Gadget *Link;
-
- if(Node -> Special . BOOPSI . Link != NIL_LINK && Node -> Special . BOOPSI . TagLink)
- {
- if(!(Link = LTP_FindGadget(Handle,Node -> Special . BOOPSI . Link)))
- {
- Handle -> Failed = TRUE;
-
- break;
- }
- }
- else
- Link = NULL;
-
- if(Node -> Special . BOOPSI . ClassLibraryName)
- {
- if(!(Node -> Special . BOOPSI . ClassBase = OpenClass(Node -> Special . BOOPSI . ClassLibraryName)))
- {
- Gadget = NULL;
-
- break;
- }
- }
-
- if(Node -> Special . BOOPSI . FullWidth)
- {
- NewGadget . ng_LeftEdge = Node -> Special . BOOPSI . Parent -> Left;
- NewGadget . ng_Width = Node -> Special . BOOPSI . Parent -> Width;
- }
-
- if(Node -> Special . BOOPSI . FullHeight)
- {
- NewGadget . ng_TopEdge = Node -> Special . BOOPSI . Parent -> Top;
- NewGadget . ng_Height = Node -> Special . BOOPSI . Parent -> Height;
- }
-
- Gadget = NewObject(Node -> Special . BOOPSI . ClassInstance,Node -> Special . BOOPSI . ClassName,
- GA_Left, NewGadget . ng_LeftEdge,
- GA_Top, NewGadget . ng_TopEdge,
- GA_Width, NewGadget . ng_Width,
- GA_Height, NewGadget . ng_Height,
- GA_Disabled, Node -> Disabled,
- GA_ID, Node -> ID,
- GA_UserData, Node,
-
- Link ? Node -> Special . BOOPSI . TagLink : TAG_IGNORE, Link,
- Handle -> BOOPSIPrevious ? GA_Previous : TAG_IGNORE, Handle -> BOOPSIPrevious,
- Node -> Special . BOOPSI . TagTextAttr ? Node -> Special . BOOPSI . TagTextAttr : TAG_IGNORE, Handle -> TextAttr,
- Node -> Special . BOOPSI . TagDrawInfo ? Node -> Special . BOOPSI . TagDrawInfo : TAG_IGNORE, Handle -> DrawInfo,
- Node -> Special . BOOPSI . TagScreen ? Node -> Special . BOOPSI . TagScreen : TAG_IGNORE, Handle -> Screen,
- Node -> Special . BOOPSI . ClassTags ? TAG_MORE : TAG_DONE, Node -> Special . BOOPSI . ClassTags);
-
- break;
- }
-
- #ifdef DO_POPUP_KIND
- case POPUP_KIND:
-
- Gadget = NewObject(LTP_PopupClass,NULL,
- GA_Left, NewGadget . ng_LeftEdge,
- GA_Top, NewGadget . ng_TopEdge,
- GA_Width, NewGadget . ng_Width,
- GA_Height, NewGadget . ng_Height,
- GA_Disabled, Node -> Disabled,
- GA_ID, Node -> ID,
- GA_UserData, Node,
- GA_RelVerify, TRUE,
- PIA_Labels, Node -> Special . Popup . Choices,
- PIA_Active, Node -> Current,
- PIA_Font, Handle -> TextAttr,
-
- Handle -> BOOPSIPrevious ? GA_Previous : TAG_IGNORE,Handle -> BOOPSIPrevious,
- TAG_DONE);
-
- break;
- #endif // DO_POPUP_KIND
-
- #ifdef DO_TAB_KIND
- case TAB_KIND:
-
- if(Node -> Special . Tab . FullWidth)
- {
- NewGadget . ng_LeftEdge = Handle -> TopGroup -> Left - Left;
- NewGadget . ng_Width = Handle -> TopGroup -> Width + PlusWidth;
-
- NewGadget . ng_LeftEdge += Handle -> Screen -> WBorLeft;
- NewGadget . ng_Width -= Handle -> Screen -> WBorLeft + Handle -> Screen -> WBorRight;
- }
- else
- {
- NewGadget . ng_LeftEdge = Node -> Special . Tab . Parent -> Left;
- NewGadget . ng_Width = Node -> Special . Tab . Parent -> Width;
- }
-
- Gadget = NewObject(LTP_TabClass,NULL,
- GA_Left, NewGadget . ng_LeftEdge,
- GA_Top, NewGadget . ng_TopEdge,
- GA_Width, NewGadget . ng_Width,
- GA_Height, NewGadget . ng_Height,
- GA_Disabled, Node -> Disabled,
- GA_ID, Node -> ID,
- GA_UserData, Node,
- GA_RelVerify, TRUE,
- TIA_Labels, Node -> Special . Popup . Choices,
- TIA_Index, Node -> Current,
- TIA_Font, Handle -> TextAttr,
- TIA_DrawInfo, Handle -> DrawInfo,
- TIA_Screen, Handle -> Screen,
-
- Handle -> BOOPSIPrevious ? GA_Previous : TAG_IGNORE,Handle -> BOOPSIPrevious,
- TAG_DONE);
-
- break;
- #endif // DO_TAB_KIND
- #endif /* DO_BOOPSI_KIND */
-
- #ifdef DO_LEVEL_KIND
- case LEVEL_KIND:
-
- if(Node -> Special . Level . LevelImage = NewObject(LTP_LevelClass,NULL,
- IA_Width, Node -> Width,
- IA_Height, Node -> Height,
- IA_Left, 0,
- IA_Top, 0,
- LVIA_DrawInfo, Handle -> DrawInfo,
- LVIA_FontWidth, Handle -> GlyphWidth,
- LVIA_Max, Node -> Special . Level . Max - Node -> Special . Level . Plus,
- LVIA_Current, Node -> Special . Level . Level - Node -> Special . Level . Plus,
- TAG_DONE))
- {
- NewGadget . ng_GadgetText = "";
- NewGadget . ng_Flags = NULL;
-
- if(Gadget = CreateGadgetA(GENERIC_KIND,Handle -> Previous,&NewGadget,NULL))
- {
- Gadget -> GadgetType |= GTYP_CUSTOMGADGET;
-
- Gadget -> Flags = GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
- Gadget -> Activation = GACT_RELVERIFY | GACT_IMMEDIATE | GACT_FOLLOWMOUSE;
- Gadget -> MutualExclude = (ULONG)&Node -> Special . Level . CustomHook;
- Gadget -> GadgetRender = Node -> Special . Level . LevelImage;
- Gadget -> SelectRender = Node -> Special . Level . LevelImage;
- Gadget -> SpecialInfo = &Node -> Special . Level;
-
- if(Node -> Disabled)
- Gadget -> Flags |= GFLG_DISABLED;
- }
- }
-
- break;
- #endif /* DO_LEVEL_KIND */
- case BUTTON_KIND:
-
- #ifdef OLD_STYLE_DEFAULT_KEY
- if(Node -> Special . Button . Lines)
- #else
- if(Node -> Special . Button . ReturnKey)
- Handle -> TextAttr -> ta_Style |= FSF_BOLD;
-
- if(Node -> Special . Button . Lines || Node -> Special . Button . ReturnKey)
- #endif
- {
- if(Node -> Special . Button . ButtonImage = NewObject(LTP_ImageClass,NULL,
- IIA_ImageType, IMAGECLASS_MULTILINEBUTTON,
- IIA_Lines, Node -> Special . Button . Lines,
- IIA_LineCount, Node -> Special . Button . LineCount,
- IIA_KeyStroke, Node -> Special . Button . KeyStroke,
- IIA_Emboss, Node -> Special . Button . ReturnKey,
- IIA_Label, Node -> Label,
- IA_Width, NewGadget . ng_Width,
- IA_Height, NewGadget . ng_Height,
- TAG_DONE))
- {
- NewGadget . ng_GadgetText = "";
- NewGadget . ng_Flags = NULL;
-
- if(Gadget = CreateGadgetA(GENERIC_KIND,Handle -> Previous,&NewGadget,NULL))
- {
- Gadget -> GadgetType |= GTYP_BOOLGADGET;
-
- Gadget -> Flags = GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
- Gadget -> Activation = GACT_RELVERIFY;
-
- Gadget -> GadgetRender = Node -> Special . Button . ButtonImage;
- Gadget -> SelectRender = Node -> Special . Button . ButtonImage;
-
- if(Node -> Disabled)
- Gadget -> Flags |= GFLG_DISABLED;
- }
- }
- }
- else
- Gadget = CreateGadgetA(BUTTON_KIND,Handle -> Previous,&NewGadget,Tags);
- #ifndef OLD_STYLE_DEFAULT_KEY
- if(Node -> Special . Button . ReturnKey)
- Handle -> TextAttr -> ta_Style &= ~FSF_BOLD;
- #endif
- break;
-
- case GROUP_KIND:
-
- LTP_LayoutGadgets(Handle,Node,Left,Top,PlusWidth,PlusHeight);
-
- continue;
-
- case CHECKBOX_KIND:
-
- Gadget = CreateGadget(CHECKBOX_KIND,Handle -> Previous,&NewGadget,
- GTCB_Checked, Node -> Current,
- GTCB_Scaled, TRUE,
- TAG_MORE,Tags);
-
- break;
-
- case LISTVIEW_KIND:
- {
- struct TextFont *LocalFont;
-
- if(!Node -> Special . List . ReadOnly && Node -> Special . List . LinkID != -1 && Node -> Special . List . LinkID != NIL_LINK)
- Gadget = Node -> Special . List . Link = LTP_FindGadget(Handle,Node -> Special . List . LinkID);
- else
- Gadget = NULL;
-
- if((NewGadget . ng_Flags & PLACETEXT_ABOVE) && Node -> Label && Node -> Special . List . FlushLabelLeft)
- NewGadget . ng_GadgetText = "";
-
- if(Node -> Special . List . TextAttr)
- {
- // Use the system default font?
-
- if(Node -> Special . List . TextAttr == (struct TextAttr *)~0)
- {
- Forbid();
-
- LTP_GetDefaultFont(&Handle -> FixedFont);
-
- if(!(LocalFont = OpenFont((struct TextAttr *)&Handle -> FixedFont)))
- {
- Permit();
-
- Handle -> Failed = TRUE;
-
- Gadget = NULL;
-
- break;
- }
-
- NewGadget . ng_TextAttr = (struct TextAttr *)&Handle -> FixedFont;
- }
- else
- {
- NewGadget . ng_TextAttr = Node -> Special . List . TextAttr;
-
- LocalFont = NULL;
- }
-
- NewGadget . ng_GadgetText = "";
- }
-
- Gadget = CreateGadget(LISTVIEW_KIND,Handle -> Previous,&NewGadget,
- GTLV_Selected, Node -> Current,
- GTLV_ReadOnly, Node -> Special . List . ReadOnly,
- GTLV_ScrollWidth, 2 + 2 * Handle -> GlyphWidth + 2,
-
- Node -> Current >= 0 ? GTLV_Top: TAG_IGNORE,Node -> Current,
- Node -> Current >= 0 ? GTLV_MakeVisible: TAG_IGNORE,Node -> Current,
- Node -> Special . List . Labels ? GTLV_Labels: TAG_IGNORE,Node -> Special . List . Labels,
- Node -> Special . List . LinkID != -1 ? GTLV_ShowSelected: TAG_IGNORE,Gadget,
- Node -> Special . List . CallBack ? GTLV_CallBack: TAG_IGNORE,Node -> Special . List . CallBack,
- Node -> Special . List . MaxPen ? GTLV_MaxPen: TAG_IGNORE,Node -> Special . List . MaxPen,
- TAG_MORE,Tags);
-
- if(Node -> Special . List . TextAttr)
- {
- NewGadget . ng_TextAttr = Handle -> TextAttr;
-
- if(LocalFont)
- {
- CloseFont(LocalFont);
-
- Permit();
- }
- }
-
- break;
- }
-
- case MX_KIND:
-
- NewGadget . ng_Height = Handle -> RPort . TxHeight;
-
- Gadget = CreateGadget(MX_KIND,Handle -> Previous,&NewGadget,
- GTMX_Labels, Node -> Special . Radio . Choices,
- GTMX_Active, Node -> Current,
- GTMX_Spacing, Handle -> InterHeight,
- GTMX_Scaled, TRUE,
-
- Node -> Label ? GTMX_TitlePlace : TAG_IGNORE, Node -> Special . Radio . TitlePlace,
- TAG_MORE,Tags);
-
- break;
-
- case TEXT_KIND:
-
- if(Node -> Special . Text . UsePicker)
- NewGadget . ng_Width -= (4 + (((6 * Handle -> GlyphWidth) / 4) & ~1) + 1 + 4);
-
- if(Gadget = CreateGadget(TEXT_KIND,Handle -> Previous,&NewGadget,
- GTTX_Border, Node -> Special . Text . Border,
- GTTX_Justification, Node -> Special . Text . Justification,
-
- Node -> Special . Text . Text ? GTTX_Text : TAG_IGNORE,Node -> Special . Text . Text,
- TAG_MORE,Tags))
- {
- if(Node -> Special . Text . UsePicker)
- {
- Extra = LTP_CreatePicker(Handle,Node,Gadget,&NewGadget);
-
- if(!Extra)
- Gadget = NULL;
-
- Node -> Special . Text . Picker = Extra;
- }
- }
-
- break;
- #ifdef DO_GAUGE_KIND
- case GAUGE_KIND:
-
- NewGadget . ng_Height -= Handle -> InterHeight + Handle -> RPort . TxHeight + 2;
-
- Gadget = CreateGadgetA(TEXT_KIND,Handle -> Previous,&NewGadget,NULL);
-
- break;
- #endif
-
- #ifdef DO_TAPEDECK_KIND
- case TAPEDECK_KIND:
-
- if(Node -> Special . TapeDeck . ButtonType >= TDBT_BACKWARD && Node -> Special . TapeDeck . ButtonType < TDBTLAST)
- {
- LONG ImageType;
- UWORD Activation,
- Flags;
-
- if(Node -> Special . TapeDeck . Toggle)
- Activation = GACT_TOGGLESELECT | GACT_IMMEDIATE;
- else
- {
- if(Node -> Special . TapeDeck . Tick)
- {
- Activation = GACT_RELVERIFY | GACT_IMMEDIATE;
-
- Handle -> IDCMP |= IDCMP_GADGETDOWN | IDCMP_GADGETUP | IDCMP_INTUITICKS;
- }
- else
- Activation = GACT_RELVERIFY;
- }
-
- if(Node -> Current)
- Flags = GFLG_GADGIMAGE | GFLG_GADGHIMAGE | GFLG_SELECTED;
- else
- Flags = GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
-
- switch(Node -> Special . TapeDeck . ButtonType)
- {
- case TDBT_BACKWARD:
-
- ImageType = IMAGECLASS_BACKWARD;
- break;
-
- case TDBT_FORWARD:
-
- ImageType = IMAGECLASS_FORWARD;
- break;
-
- case TDBT_PREVIOUS:
-
- ImageType = IMAGECLASS_PREVIOUS;
- break;
-
- case TDBT_NEXT:
-
- ImageType = IMAGECLASS_NEXT;
- break;
-
- case TDBT_RECORD:
-
- ImageType = IMAGECLASS_RECORD;
- break;
-
- case TDBT_PLAY:
-
- ImageType = IMAGECLASS_PLAY;
- break;
-
- case TDBT_STOP:
-
- ImageType = IMAGECLASS_STOP;
- break;
-
- case TDBT_PAUSE:
-
- ImageType = IMAGECLASS_PAUSE;
- break;
-
- case TDBT_REWIND:
-
- ImageType = IMAGECLASS_REWIND;
- break;
-
- case TDBT_EJECT:
-
- ImageType = IMAGECLASS_EJECT;
- break;
- }
-
- if(Node -> Special . TapeDeck . ButtonImage = NewObject(LTP_ImageClass,NULL,
- IIA_ImageType, ImageType,
- IIA_GlyphWidth, Node -> Special . TapeDeck . ButtonWidth,
- IIA_GlyphHeight,Node -> Special . TapeDeck . ButtonHeight,
- IA_Width, NewGadget . ng_Width,
- IA_Height, NewGadget . ng_Height,
- TAG_DONE))
- {
- NewGadget . ng_GadgetText = "";
- NewGadget . ng_Flags = NULL;
-
- if(Gadget = CreateGadgetA(GENERIC_KIND,Handle -> Previous,&NewGadget,NULL))
- {
- Gadget -> GadgetType |= GTYP_BOOLGADGET;
- Gadget -> Flags |= Flags;
- Gadget -> Activation |= Activation;
-
- Gadget -> GadgetRender = Node -> Special . TapeDeck . ButtonImage;
- Gadget -> SelectRender = Node -> Special . TapeDeck . ButtonImage;
-
- if(Node -> Disabled)
- Gadget -> Flags |= GFLG_DISABLED;
- }
- }
- }
-
- break;
- #endif /* DO_TAPEDECK_KIND */
- case NUMBER_KIND:
-
- Gadget = CreateGadget(NUMBER_KIND,Handle -> Previous,&NewGadget,
- GTNM_Number, Node -> Special . Number . Number,
- GTNM_Border, Node -> Special . Number . Border,
- GTNM_Justification, Node -> Special . Number . Justification,
- GTNM_Border, Node -> Special . Number . Border,
- GTNM_Justification, Node -> Special . Number . Justification,
- GTNM_Format, Node -> Special . Number . Format ? Node -> Special . Number . Format : (STRPTR)"%ld",
- TAG_MORE,Tags);
-
- break;
-
- case CYCLE_KIND:
-
- Gadget = CreateGadget(CYCLE_KIND,Handle -> Previous,&NewGadget,
- GTCY_Labels, Node -> Special . Cycle . Choices,
- GTCY_Active, Node -> Current,
- TAG_MORE,Tags);
-
- break;
-
- case PALETTE_KIND:
-
- if(Node -> Special . Palette . UsePicker)
- {
- NewGadget . ng_Width = Node -> Special . Palette . IndicatorWidth;
-
- if(Gadget = CreateGadget(TEXT_KIND,Handle -> Previous,&NewGadget,TAG_MORE,Tags))
- {
- Extra = LTP_CreatePicker(Handle,Node,Gadget,&NewGadget);
-
- if(!Extra)
- Gadget = NULL;
-
- Node -> Special . Palette . Picker = Extra;
- }
- }
- else
- {
- Gadget = CreateGadget(PALETTE_KIND,Handle -> Previous,&NewGadget,
- GTPA_Depth, Node -> Special . Palette . Depth,
- GTPA_Color, Node -> Current,
- GTPA_ColorOffset, Node -> Min,
- GTPA_IndicatorWidth, MAX(10,Node -> Width / (Node -> Max - Node -> Min + 1)),
- GTPA_IndicatorHeight, Node -> Height,
-
- Node -> Special . Palette . ColourTable ? GTPA_ColorTable : TAG_IGNORE,Node -> Special . Palette . ColourTable,
- TAG_MORE,Tags);
- }
-
- break;
-
- case SLIDER_KIND:
-
- Gadget = CreateGadget(SLIDER_KIND,Handle -> Previous,&NewGadget,
- GTSL_Min, Node -> Min,
- GTSL_Max, Node -> Max,
- GTSL_Level, Node -> Current,
- GTSL_MaxLevelLen, Node -> Special . Slider . MaxLevelLen,
- GTSL_LevelPlace, Node -> Special . Slider . LevelPlace,
- GTSL_LevelFormat, Node -> Special . Slider . LevelFormat ? Node -> Special . Slider . LevelFormat : (STRPTR)"%ld",
- GA_RelVerify, TRUE,
-
- V40 ? GTSL_MaxPixelLen : TAG_IGNORE, Node -> Special . Slider . LevelWidth,
- V40 ? GTSL_Justification : TAG_IGNORE, GTJ_RIGHT,
- Node -> Special . Slider . DispFunc ? GTSL_DispFunc : TAG_IGNORE,Node -> Special . Slider . DispFunc,
- TAG_MORE,Tags);
-
- break;
-
- case SCROLLER_KIND:
-
- Gadget = CreateGadget(SCROLLER_KIND,Handle -> Previous,&NewGadget,
- GA_RelVerify, Node -> Special . Scroller . RelVerify,
- GA_Immediate, Node -> Special . Scroller . Immediate,
- GTSC_Top, Node -> Current,
- GTSC_Total, Node -> Max,
- GTSC_Visible, Node -> Special . Scroller . Visible,
- PGA_Freedom, Node -> Special . Scroller . Vertical ? LORIENT_VERT : LORIENT_HORIZ,
-
- Node -> Special . Scroller . Arrows ? GTSC_Arrows : TAG_IGNORE,Node -> Special . Scroller . ArrowSize,
- TAG_MORE,Tags);
-
- break;
-
- case STRING_KIND:
-
- if(Node -> Special . String . LinkID != -1)
- {
- ObjectNode *ListView = LTP_FindNode(Handle -> TopGroup,Node -> Special . String . LinkID);
-
- if(ListView)
- {
- NewGadget . ng_LeftEdge = ListView -> Left;
- NewGadget . ng_TopEdge = ListView -> Top + ListView -> Height;
- NewGadget . ng_Width = ListView -> Width;
- }
- }
-
- if(Node -> Special . String . UsePicker)
- NewGadget . ng_Width -= (4 + (((6 * Handle -> GlyphWidth) / 4) & ~1) + 1 + 4);
-
- if(Gadget = CreateGadget(STRING_KIND,Handle -> Previous,&NewGadget,
- GTST_String, Node -> Special . String . String,
- GTST_MaxChars, Node -> Special . String . MaxChars,
- GTST_EditHook, Node -> Special . String . EditHook ? Node -> Special . String . EditHook : Handle -> StandardEditHook,
- GA_Immediate, TRUE,
- STRINGA_Justification, Node -> Special . String . Justification,
- STRINGA_ExitHelp, Handle -> HelpHook != NULL,
- TAG_MORE,Tags))
- {
- if(!V39)
- Gadget -> Activation |= GACT_IMMEDIATE;
-
- if(Node -> Special . String . UsePicker)
- {
- Extra = LTP_CreatePicker(Handle,Node,Gadget,&NewGadget);
-
- if(!Extra)
- Gadget = NULL;
-
- Node -> Special . String . Picker = Extra;
- }
- }
-
- break;
- #ifdef DO_FRACTION_KIND
- case FRACTION_KIND:
-
- if(Node -> Special . String . LinkID != -1)
- {
- ObjectNode *ListView = LTP_FindNode(Handle -> TopGroup,Node -> Special . String . LinkID);
-
- if(ListView)
- {
- NewGadget . ng_LeftEdge = ListView -> Left;
- NewGadget . ng_TopEdge = ListView -> Top + ListView -> Height;
- NewGadget . ng_Width = ListView -> Width;
- }
- }
-
- /* ALWAYS */
- {
- UBYTE LocalBuffer[20];
-
- sprintf(LocalBuffer,"%ld%lc%ld",Node -> Current / FIXED_UNITY,LTP_Locale ? LTP_Locale -> loc_DecimalPoint[0] : '.',Node -> Current % FIXED_UNITY);
-
- if(Gadget = CreateGadget(STRING_KIND,Handle -> Previous,&NewGadget,
- GTST_String, LocalBuffer,
- GTST_MaxChars, Node -> Special . String . MaxChars > 12 ? 12 : Node -> Special . String . MaxChars,
- GTST_EditHook, &Handle -> FracEditHook,
- GA_Immediate, TRUE,
- STRINGA_Justification, Node -> Special . String . Justification,
- STRINGA_ExitHelp, Handle -> HelpHook != NULL,
- TAG_MORE,Tags))
- {
- if(!V39)
- Gadget -> Activation |= GACT_IMMEDIATE;
- }
- }
-
- break;
- #endif
-
- #ifdef DO_PASSWORD_KIND
- case PASSWORD_KIND:
- {
- WORD Len;
-
- if(Len = strlen(Node -> Special . String . Original))
- memset(Node -> Special . String . Original,'·',Len);
-
- if(Gadget = CreateGadget(STRING_KIND,Handle -> Previous,&NewGadget,
- GTST_String, Node -> Special . String . Original,
- GTST_MaxChars, Node -> Special . String . MaxChars,
- GTST_EditHook, &Handle -> PasswordEditHook,
- GA_Immediate, TRUE,
- STRINGA_Justification, Node -> Special . String . Justification,
- STRINGA_ExitHelp, Handle -> HelpHook != NULL,
- TAG_MORE,Tags))
- {
- if(!V39)
- Gadget -> Activation |= GACT_IMMEDIATE;
- }
-
- if(Len)
- strcpy(Node -> Special . String . Original,Node -> Special . String . RealString);
-
- break;
- }
- #endif
-
- case INTEGER_KIND:
-
- if(Node -> Special . Integer . UseIncrementers)
- {
- NewGadget . ng_Width -= 4 + Handle -> GlyphWidth + 4;
- NewGadget . ng_Width -= 4 + Handle -> GlyphWidth + 4;
-
- if(Node -> Special . Integer . IncrementerHook)
- {
- LONG Value;
-
- Value = (LONG)CallHookPkt(Node -> Special . Integer . IncrementerHook,(APTR)Node -> Special . Integer . Number,(APTR)INCREMENTERMSG_INITIAL);
-
- if(Value < Node -> Min)
- Value = Node -> Min;
- else
- {
- if(Value > Node -> Max)
- Value = Node -> Max;
- }
-
- Node -> Special . Integer . Number = Value;
- }
- }
-
- #ifndef DO_HEXHOOK
- Gadget = CreateGadget(INTEGER_KIND,Handle -> Previous,&NewGadget,
- GTIN_Number, Node -> Special . Integer . Number,
- GTIN_MaxChars, Node -> Special . Integer . MaxChars,
- GTIN_EditHook, Node -> Special . Integer . EditHook ? Node -> Special . Integer . EditHook : Handle -> StandardEditHook,
- GA_Immediate, TRUE,
- STRINGA_Justification, Node -> Special . Integer . Justification,
- STRINGA_ExitHelp, Handle -> HelpHook != NULL,
- TAG_MORE,Tags);
- #else
- if(Node -> Special . Integer . EditHook)
- {
- Gadget = CreateGadget(INTEGER_KIND,Handle -> Previous,&NewGadget,
- GTIN_Number, Node -> Special . Integer . Number,
- GTIN_MaxChars, Node -> Special . Integer . MaxChars,
- GTIN_EditHook, Node -> Special . Integer . EditHook,
- GA_Immediate, TRUE,
- STRINGA_Justification, Node -> Special . Integer . Justification,
- STRINGA_ExitHelp, Handle -> HelpHook != NULL,
- TAG_MORE,Tags);
- }
- else
- {
- UBYTE LocalBuffer[20];
-
- sprintf(LocalBuffer,"%ld",Node -> Special . Integer . Number);
-
- Gadget = CreateGadget(STRING_KIND,Handle -> Previous,&NewGadget,
- GTST_String, LocalBuffer,
- GTST_MaxChars, Node -> Special . Integer . MaxChars,
- GTST_EditHook, &Handle -> HexEditHook,
- GA_Immediate, TRUE,
- STRINGA_Justification, Node -> Special . Integer . Justification,
- STRINGA_ExitHelp, Handle -> HelpHook != NULL,
- TAG_MORE,Tags);
- }
-
- if(Gadget)
- {
- struct StringInfo *StringInfo = (struct StringInfo *)Gadget -> SpecialInfo;
-
- StringInfo -> LongInt = Node -> Special . Integer . Number;
- }
- #endif
-
- if(Gadget)
- {
- if(!V39)
- Gadget -> Activation |= GACT_IMMEDIATE;
-
- if(Node -> Special . Integer . UseIncrementers)
- {
- Handle -> Previous = Gadget;
-
- if(Node -> Special . Integer . LeftIncrementer = LTP_CreateIncrementer(Handle,Node,Gadget,&NewGadget,TRUE,-1))
- {
- Handle -> Previous = Node -> Special . Integer . LeftIncrementer;
-
- if(Node -> Special . Integer . RightIncrementer = LTP_CreateIncrementer(Handle,Node,Gadget,&NewGadget,FALSE,1))
- Extra = Node -> Special . Integer . RightIncrementer;
- else
- Gadget = NULL;
- }
- else
- Gadget = NULL;
- }
- }
-
- break;
- }
-
- if(Gadget)
- {
- Handle -> GadgetArray[Handle -> Index++] = Gadget;
-
- Node -> Host = Gadget;
- #ifdef DO_BOOPSI_KIND
- if(Node -> Type == BOOPSI_KIND || Node -> Type == POPUP_KIND || Node -> Type == TAB_KIND)
- {
- Handle -> BOOPSIPrevious = (Object *)Gadget;
-
- if(!Handle -> BOOPSIList)
- Handle -> BOOPSIList = (Object *)Gadget;
- }
- else
- {
- if(Extra)
- Handle -> Previous = Extra;
- else
- Handle -> Previous = Gadget;
- }
- #else
- if(Extra)
- Handle -> Previous = Extra;
- else
- Handle -> Previous = Gadget;
- #endif /* DO_BOOPSI_KIND */
- }
- else
- {
- Handle -> Failed = TRUE;
-
- return;
- }
- }
- }
- }
- }
-