This is all there is. Nothing out of the ordinary. Using window.class and layout.class
Code: Select all
if (!(BookmarksSpeedBarList=(struct List *)IExec->AllocSysObject(ASOT_LIST,NULL)))
{
SAK_EasyRequest(Objects[OID_WINDOW],MainWindow,RequesterTitle,REQIMAGE_ERROR,0,SAK_LocaleString(MSG_COULD_NOT_CREATE_EXEC_LIST),SAK_LocaleString(MSG_TERMINATE));
return(FALSE);
}
// load bookmarks into list from prefs file
// create speedbar gadget
struct Node *node; // I even put this in the while() loop, no better
uint32 x=0;
BookmarksNode=(struct BookmarksNode *)SAK_FirstGenericListNode(MasterBookmarksList);
while(BookmarksNode)
{
if ((node=ISpeedBar->AllocSpeedButtonNode(x,
SBNA_Text, BookmarksNode->Name,
SBNA_Spacing, 2,
SBNA_UserData, x,
TAG_DONE)))
{
IExec->AddTail(BookmarksSpeedBarList,node);
}
else
{
return(FALSE);
}
x++;
BookmarksNode=(struct BookmarksNode *)SAK_NextGenericListNode(MasterBookmarksList);
}
if (!(Objects[GAD_BOOKMARKS_SPEEDBAR]=IIntuition->NewObject(ISpeedBar->SPEEDBAR_GetClass(),NULL,
GA_ID, GAD_BOOKMARKS_SPEEDBAR,
GA_RelVerify, TRUE,
GA_Underscore, ~0,
SPEEDBAR_BevelStyle, BVS_NONE,
SPEEDBAR_HorizPadding, 0,
SPEEDBAR_VertPadding, 0,
SPEEDBAR_ButtonType, SBTYPE_TEXT,
SPEEDBAR_Buttons, BookmarksSpeedBarList,
ICA_TARGET, ICTARGET_IDCMP, // since can't get Code to work properly
TAG_DONE)))
return(FALSE);
// main Wait() loop
IIntuition->GetAttrs(Objects[OID_WINDOW],
WINDOW_SigMask, &SignalsMask,
TAG_DONE);
while(!done)
{
Signals=IExec->Wait(SignalsMask);
if (Signals & SignalsMask)
{
while((Result=IIntuition->IDoMethod(Objects[OID_WINDOW],WM_HANDLEINPUT,&Code)) != WMHI_LASTMSG)
{
switch(Result & WMHI_CLASSMASK)
{
case WMHI_GADGETUP:
switch(Result & WMHI_GADGETMASK)
{
case GAD_BOOKMARKS_SPEEDBAR:
// handled in IDCMP_IDCMPUPDATE hook
//
// would rather do this:
//
IIntuition->GetAttrs(Objects[GAD_BOOKMARKS_SPEEDBAR],
SPEEDBAR_ButtonID, &Offset, (or SPEEDBAR_Selected)
TAG_DONE);
//
// or
//
struct Node *WorkingNode;
IIntuition->GetAttrs(Objects[GAD_BOOKMARKS_SPEEDBAR],
SPEEDBAR_SelectedNode, &WorkingNode,
TAG_DONE);
ISpeedBar->GetSpeedButtonNodeAttrs(WorkingNode,
SBNA_UserData, &Offset,
TAG_DONE);
break;
}
}
}
}
}
..........
case IDCMP_IDCMPUPDATE:
Code=IUtility->GetTagData(GA_ID,0,imsg->IAddress);
if (Code==GAD_BOOKMARKS_SPEEDBAR)
{
if ((WorkingNode=(struct Node *)IUtility->GetTagData(SPEEDBAR_SelectedNode,0,imsg->IAddress)))
{
ISpeedBar->GetSpeedButtonNodeAttrs(WorkingNode,
SBNA_UserData, &Offset,
TAG_DONE);
HandleBookmarks(Offset);
}
}
if (BookmarksSpeedBarList)
{
FreeSpeedBarList(BookmarksSpeedBarList);
IExec->FreeSysObject(ASOT_LIST,BookmarksSpeedBarList);
}