Hi,
Would it be possible to add a tag to the page.gadget's array of tags?
Tag in question: PAGE_AddHead.
Functionally identical to PAGE_Add, with the difference that the specified page is added at the head of page.gadget's internal list, in contrast with PAGE_Add, where the page is added to the list's tail.
For reasons of consistency (and clarity) PAGE_Add could then have a synonym with PAGE_AddTail, this latter being not much more then an update of the SDK.
OldFart
Request for additional tag for page.gadget
Request for additional tag for page.gadget
X5000, appears to be sick. Dismantled jan 1, 2024.
Dead MicroA1
A1200 in ElBox, c/w Blizzard '040 @ 50MHz + SCSI module, ZIV-board c/w (o.a.) cv64/3d + flickerdoubler + FastATA-ZIV + Lots of SCSI gear, sitting idle.
RaspBerry Pi 2B, 3B, 4B/4Gb, 4B/8Gb
OrangePi 5+ 8Gb
ACER Windows 10
Dead MicroA1
A1200 in ElBox, c/w Blizzard '040 @ 50MHz + SCSI module, ZIV-board c/w (o.a.) cv64/3d + flickerdoubler + FastATA-ZIV + Lots of SCSI gear, sitting idle.
RaspBerry Pi 2B, 3B, 4B/4Gb, 4B/8Gb
OrangePi 5+ 8Gb
ACER Windows 10
Re: Request for additional tag for page.gadget
@OldFart
For a static building of pages in a layout, PAGE_AddHead doesn't make much sense, because you can always add to the top the page you want at the top
Dynamic page arrangement is a different story, but page.gadget seems to lack an API for that - something along the lines of the LM_ADDCHILD / LM_REMOVECHILD methods in layout.gadget.
For a static building of pages in a layout, PAGE_AddHead doesn't make much sense, because you can always add to the top the page you want at the top
The Rear Window blog
AmigaOne X5000 @ 2GHz / 4GB RAM / Radeon RX 560 / ESI Juli@ / AmigaOS 4.1 Final Edition
SAM440ep-flex @ 667MHz / 1GB RAM / Radeon 9250 / AmigaOS 4.1 Final Edition
AmigaOne X5000 @ 2GHz / 4GB RAM / Radeon RX 560 / ESI Juli@ / AmigaOS 4.1 Final Edition
SAM440ep-flex @ 667MHz / 1GB RAM / Radeon 9250 / AmigaOS 4.1 Final Edition
Re: Request for additional tag for page.gadget
@trixie,
In my recently published version of 'HexView', I have a.o. applied both a pag.gadget and a chooser.gadget, the latter controling the first. The chooser.gadget shows its labels in a fashion of the last label entered is at the top (head) of the list. However, to obtain congruency between both gadgets in terms of order of addition, I need to add pages at the top of the list.
Currently this code code is applied to achieve that goal:
Huge parts could be circumvented when pages could be added to the head of page.gadget's list, hence my request.
OldFart
In my recently published version of 'HexView', I have a.o. applied both a pag.gadget and a chooser.gadget, the latter controling the first. The chooser.gadget shows its labels in a fashion of the last label entered is at the top (head) of the list. However, to obtain congruency between both gadgets in terms of order of addition, I need to add pages at the top of the list.
Currently this code code is applied to achieve that goal:
Code: Select all
{
IIntuition->SetGadgetAttrs(_SetGadTarget(GOID_ChooseEntry, ACTIVEWOID), CHOOSER_Labels, (Tag)LABELS_DETACHED, TAG_END);
/*
** As adding a page to a page gadget allows only to
** do this at the page's internal list's tail,
** measurements have to be taken to circumvent this
** when pages have to be added at that list's head.
** This is achieved by first removing all existing
** pages from the gadget's list one-by-one and subsequently
** adding the new page at the list's tail, as that's the
** only possibility, and finally adding them at the
** list's tail again. This will effectively put the
** newly added page at the top of the list.
** Cumbersome, but hey! it works.
*/
{
struct EntryData *EntryData;
struct Node *ChooserNode = IExec->GetHead((__GD)->gd_ChooserList);
/*
** For starters, remove all existing pages
** from the page gadget's internal list:
** (Don't worry: they are restored later on
** from the Chooser's list...)
*/
while (ChooserNode != NULL)
{
IChooser->GetChooserNodeAttrs(ChooserNode, CNA_UserData, &EntryData, TAG_END);
IIntuition->SetGadgetAttrs(_SetGadTarget(GOID_Page, ACTIVEWOID), PAGE_Remove, (Tag)EntryData->ed_PageObject, TAG_END);
ChooserNode = IExec->GetSucc(ChooserNode);
}
/*
** Now add the newly created ChooserNode to the chooser's
** list and subsequently the corresponding new page at
** the (tail of the) page gadget's internal list:
*/
ChooserNode = IExec->GetHead((__GD)->gd_ChooserList);
IExec->AddHead((__GD)->gd_ChooserList, (__ED)->ed_ChooserNode);
IIntuition->SetGadgetAttrs(_SetGadTarget(GOID_Page, ACTIVEWOID), PAGE_Add , (Tag)(__ED)->ed_PageObject
, PAGE_NoDispose, (Tag)TRUE
, TAG_END);
/*
** And finally restore the page gadget's list
** by adding all pages again at the list's tail:
*/
while (ChooserNode != NULL)
{
IChooser->GetChooserNodeAttrs(ChooserNode, CNA_UserData, (Tag)&EntryData, TAG_END);
IIntuition->SetGadgetAttrs(_SetGadTarget(GOID_Page, ACTIVEWOID), PAGE_Add , (Tag)EntryData->ed_PageObject
, PAGE_NoDispose, (Tag)TRUE
, TAG_END);
ChooserNode = IExec->GetSucc(ChooserNode);
}
IIntuition->SetGadgetAttrs(_SetGadTarget(GOID_Page, ACTIVEWOID), PAGE_Current, (Tag)1, TAG_END);
ILayout->RethinkLayout (_SetGadTarget(GOID_Page, ACTIVEWOID), TRUE);
IIntuition->RefreshGList (_SetGadTarget(GOID_Page, ACTIVEWOID), 1);
}
(__GD)->gd_LabelCount++;
IIntuition->SetGadgetAttrs(_SetGadTarget(GOID_ChooseEntry, ACTIVEWOID), CHOOSER_Labels , (Tag)(__GD)->gd_ChooserList
, CHOOSER_Selected, (Tag)0
, GA_Disabled , (Tag)FALSE
, GA_HintInfo , (Tag)(__ED)->ed_HintInfo
, TAG_END);
IIntuition->SetGadgetAttrs(_SetGadTarget(GOID_NextEntry , ACTIVEWOID), GA_Disabled , (Tag)TRUE , TAG_END);
IIntuition->SetGadgetAttrs(_SetGadTarget(GOID_CurrentEntry, ACTIVEWOID), BUTTON_Integer, (Tag)1 , TAG_END);
IIntuition->SetGadgetAttrs(_SetGadTarget(GOID_RemEntry , ACTIVEWOID), GA_Disabled , (Tag)((__GD)->gd_LabelCount == 0) , TAG_END);
IIntuition->SetGadgetAttrs(_SetGadTarget(GOID_PrevEntry , ACTIVEWOID), GA_Disabled , (Tag)((__GD)->gd_LabelCount < 2) , TAG_END);
Success = TRUE;
}
_ElseError("Alloc ChooserNode");OldFart
X5000, appears to be sick. Dismantled jan 1, 2024.
Dead MicroA1
A1200 in ElBox, c/w Blizzard '040 @ 50MHz + SCSI module, ZIV-board c/w (o.a.) cv64/3d + flickerdoubler + FastATA-ZIV + Lots of SCSI gear, sitting idle.
RaspBerry Pi 2B, 3B, 4B/4Gb, 4B/8Gb
OrangePi 5+ 8Gb
ACER Windows 10
Dead MicroA1
A1200 in ElBox, c/w Blizzard '040 @ 50MHz + SCSI module, ZIV-board c/w (o.a.) cv64/3d + flickerdoubler + FastATA-ZIV + Lots of SCSI gear, sitting idle.
RaspBerry Pi 2B, 3B, 4B/4Gb, 4B/8Gb
OrangePi 5+ 8Gb
ACER Windows 10