ListTree looking for a solution

Discuss GUI programming with the MUI Royale plugin here
djrikki
Posts: 682
Joined: Wed Apr 06, 2011 12:26 am

ListTree looking for a solution

Post by djrikki »

Using the below image as a guide and focusing on foreinstance the 'HGroup 1 Window (HGROUP) node - If I want to output this tree in XML with lines such as <hgroup>, and in this example its non-container classes 'Button 1 (Button)' and 'This is is some text (Text) - can anyone make a suggestion of how I can detect the end of this node in order to output </hgroup> at the end of it?

This is the goal output which I am trying to achieve.

Code: Select all

<hgroup>
    <button>Button 1</button>
    <text>This is some text</text>
</hgroup>
But at the moment I am scratching me head on how to programmatically insert the container group end-tag in the right place.

Image
Evolve - Rapid GUI Development tool for MUI Royale and RapaGUI
http://myevolve.wordpress.com
bitRocky
Posts: 120
Joined: Fri Nov 14, 2014 6:01 pm

Re: ListTree looking for a solution

Post by bitRocky »

When using GetEntry method to get the next node inside your hgroup you have to use "SameLevel" as flags parameter.
djrikki
Posts: 682
Joined: Wed Apr 06, 2011 12:26 am

Re: ListTree looking for a solution

Post by djrikki »

What I am trying to achieve if I have the terminalogy correct, is to find the Tail of the currently traversed Node. E.g.

Code: Select all

Fruit
    Apple
         Bramley
         Crab
    Orange
         Satsuma
         Tangerine
    Pears
Vegetables
   Carrots
   Peas
   Turnips
I want to detect that Pears is the final item of the Fruit list or that Tangerine is the final item of the Orange list.
Evolve - Rapid GUI Development tool for MUI Royale and RapaGUI
http://myevolve.wordpress.com
djrikki
Posts: 682
Joined: Wed Apr 06, 2011 12:26 am

Re: ListTree looking for a solution

Post by djrikki »

Any solution needs to fit within the DumpLayoutTree function which resides in the manual about the GetEntry method.
Evolve - Rapid GUI Development tool for MUI Royale and RapaGUI
http://myevolve.wordpress.com
bitRocky
Posts: 120
Joined: Fri Nov 14, 2014 6:01 pm

Re: ListTree looking for a solution

Post by bitRocky »

Just check if the next node with the same level is null, if yes, the current node is the last node!
djrikki
Posts: 682
Joined: Wed Apr 06, 2011 12:26 am

Re: ListTree looking for a solution

Post by djrikki »

Not sure how that would fit into a structure like above, e.g. Pears and Vegetables it would need to be e..g </vgroup> followed immediately on the next line by another </vgroup>.
The table above is 3 levels deep, however I will give it a go.
Evolve - Rapid GUI Development tool for MUI Royale and RapaGUI
http://myevolve.wordpress.com
djrikki
Posts: 682
Joined: Wed Apr 06, 2011 12:26 am

Re: ListTree looking for a solution

Post by djrikki »

Nope still not having any luck, even explore 'parent', but couldn't get this to work, so here is my not working code.

Code: Select all

Function Application:DumpLayoutTree(id$, node,window)
	Local found, t = mui.DoMethod(id$, "GetEntry", node, "Head", "")
	iteration = iteration + 1
	While found = True
        	Local userdata = mui.Get(t.id,"userdata")
			
		Project.Application.Win.Layout[window][iteration] = userdata
		
		debugprint( "Project.Application.Win.Layout[" .. window .. "][" .. iteration .. "].id = " .. Project.Application.Win.Layout[window][iteration].id )
		debugprint( "Project.Application.Win.Layout[" .. window .. "][" .. iteration .. "].class = " .. Project.Application.Win.Layout[window][iteration].class )
			
		If t.Node = True		
		    Application:DumpLayoutTree(id$, t.muiid, window)
		Else
		    iteration = iteration + 1
		EndIf
				
		found, t = mui.DoMethod(id$, "GetEntry", t.muiid, "Next", "")				
	Wend	
EndFunction
Because I cannot detect closure, I cannot insert the relevant closure tag nor can I reduce the tab space and end up with unfinished code like this:

Code: Select all

...
	<WINDOW ID="MAIN" MENUSTRIP="" MuiID="MAIN" Width="Screen:100" Height=":100" Notify="Activate;CloseRequest;MouseObject" open="true" Title="Default Application Window" Borderless="false" CloseGadget="true" DepthGadget="true"  SizeGadget="true"  AppWindow="false" >
		<VGROUP ID="win0-vgroup0" Frame="group" FrameTitle="frame-title" Background="Groupback">
				<REGISTER ID=" win0-register0"  Notify="ActivePage" >
						<VGROUP ID="win0-vgroup1" Frame="group" FrameTitle="frame-title" Background="Groupback">
								<LISTVIEW ID=" win0-vgroup1-listview-0"  Weight="100"  Notify="ClickColumn;DoubleClick;"  AdjustWidth="true"  AdjustHeight="true"  AutoVisible="true"  MultiSelect="default"  MinLineHeight="20"  ScrollerPos="right"  CycleChain="true">
									<Column Title="Name">
 										<Item>Richard Lake</Item>
										<Item>Laura Campbell</Item>
									</Column>
									<Column Title="Age">
 										<Item>38</Item>
										<Item>29</Item>
									</Column>
								</LISTVIEW>
		<HGROUP ID="win0-hgroup0" Frame="group" FrameTitle="frame-title" Background="Groupback">
				<LABEL ID="win0-colour-0" ControlChar="l"  Hidden="true"  Centered="true"  DoubleFrame="true"  LeftAligned="true"  Font="Normal" >Select a Label</LABEL>
		<COLORADJUST ID="win0-colour-1" ShortHelp="shorthelp-coloradjust"  HelpNode="coloradjust-node"  Weight="100"  Disabled="true"  Hidden="true"  Notify="Rgb" Rgb="$FF00FF" />
								<VGROUP ID="win0-vgroup2" Frame="group" FrameTitle="frame-title" Background="Groupback">
										<RADIO ID=" win0-othertab-0"  Weight="100"  Active="2"  CycleChain="true">
											<Item>Red</Item>
											<Item>Green</Item>
											<Item>Blue</Item>
										</RADIO>
		<HOLLYWOOD ID="win0-othertab-1" Weight="100"  MinWidth="100"  MaxWidth="1000"  MinHeight="100"  MaxHeight="1000" />
				<HGROUP ID="win0-hgroup1" Frame="group" FrameTitle="frame-title" Background="Groupback">
		<BUTTON ID="win0-hgroup1-button1" ShortHelp="shorthelp-text"  HelpNode="button-node"  Weight="100"  ControlChar="b"  Disabled="true"  Hidden="true"  Label="Action"  HiChar="b"  Notify="Pressed;Selected" Toggle="true" />
								<TEXT ID="win0-hgroup1-text4" Hidden="true"  HiChar="t"  Preparse="preparse-text" >This is some text</TEXT>
										<HGROUP ID="win0-hgroup2" Frame="group" FrameTitle="frame-title" Background="Groupback">
		<STRING ID="win0-hgroup2-string1" ShortHelp="shorthelp-string"  HelpNode="string-node"  Weight="100"  ControlChar="s"  Disabled="true"  Hidden="true"  Notify="Acknowledge;Contents" Contents="this is a string"  Maxlen="80"  Accept="accept"  Reject="reject"  Secret="true"  AdvanceOnCR="true" />
														<POPLIST ID=" win0-hgroup2-poplist1"  Weight="100"  Notify="Acknowledge;Contents" Contents="Apple"  CycleChain="true">
															<Item>Apple</Item>
														</POPLIST>
		<POPDRAWER ID="win0-hgroup2-popdrawer1" ShortHelp="shorthelp-popdrawer"  HelpNode="popdrawer-node"  Weight="100"  ControlChar="d"  Disabled="true"  Hidden="true"  Notify="Acknowledge;Contents" Title="PopDrawer"  Contents="PROGDIR:"  SaveMode="true" />
		<POPFILE ID="win0-hgroup2-popfile1" ShortHelp="shorthelp-popfile"  HelpNode="popfile-node"  Weight="100"  ControlChar="f"  Disabled="true"  Hidden="true"  Notify="Acknowledge;Contents" Contents="defaultvalue"  RejectPattern="#?.accepted"  RejectPattern="#?.test"  SaveMode="true"  RejectIcons="true"  ShowPattern="true" />
						<HGROUP ID="win0-hgroup3" Frame="group" FrameTitle="frame-title" Background="Groupback">
		<TEXTEDITOR ID="win0-hgroup3-texteditor1" ShortHelp="shorthelp-texteditor"  HelpNode="texteditor-node"  Weight="100"  ControlChar="t"  Disabled="true"  Hidden="true"  Notify="AreaMarked;CursorX;CursorY;HasChanged;Pen;RedoAvailable;StyleBold;StyleItalic;StyleUnderline;UndoAvailable" Contents="This is some text"  Columns="80"  Rows="40"  FixedFont="true"  ReadOnly="true"  ScrollBars="true"  FixedFont="hardwrap"  WrapWords="true"  ConvertTabs="true" />
		<POPPEN ID="win0-hgroup3-poppen1" ShortHelp="shorthelp-poppen"  HelpNode="poppen-node"  Weight="100"  Disabled="true"  Hidden="true"  Notify="Rgb" Title="Select a Pen"  Rgb="$FF00FF" />
												<HGROUP ID="win0-hgroup4" Frame="group" FrameTitle="frame-title" Background="Groupback">
														<VGROUP ID="win0-vgroup3" Frame="group" FrameTitle="frame-title" Background="Groupback">
		<SLIDER ID="win0-vgroup3-slider1" ShortHelp="shorthelp-slider"  HelpNode="slider-node"  Weight="100"  ControlChar="s"  Disabled="true"  Hidden="true"  Horiz="true"  Level="65"  Min="50"  Max="75"  Format="%ld"  Quiet="true"  Reverse="true"  Notify="Stringify" Stringify="MyFunction" />
		<IMAGE ID="win0-vgroup3-image1" ShortHelp="shorthelp-image"  HelpNode="image-node"  Weight="100"  Source="brush:100" />
																				<HGROUP ID="win0-hgroup5" Frame="group" FrameTitle="frame-title" Background="Groupback">
																						<CYCLE ID=" win0-hgroup5-cycle1"  Weight="100"  Notify="Active" Active="0"  CycleChain="true">
																							<Item>Red</Item>
																							<Item>Yellow</Item>
																							<Item>Pink</Item>
																							<Item>Green</Item>
																						</CYCLE>
		<HGROUP ID="win0-hgroup6" Frame="group" FrameTitle="frame-title" Background="Groupback">
				<FLOATTEXT ID="win0-hgroup6-floattext1" Hidden="true"  Justify="true"  Font="Normal" >This is some floattext</FLOATTEXT>
		<POPFONT ID="win0-hgroup6-popfont1" Weight="100"  ControlChar="f"  Disabled="true"  Hidden="true"  Notify="Acknowledge;Contents" Title="Select a Font..."  Contents="topaz/8"  MinHeight="5"  MaxHeight="32"  FixedWidthOnly="true" />
		<RECTANGLE ID="win0-hgroup6-rectangle" BarTitle="rectangle-test"  Hbar="true" />
		<GAUGE ID="win0-hgroup6-gauge" Weight="100"  Hidden="true"  Notify="Current" Horiz="false"  Current="75"  Min="50"  Max="100"  InfoText="%ld %% completed..." />
										<Scale/>
		<CHECKMARK ID="win0-hgroup6-checkmark1" ShortHelp="shorthelp-text"  HelpNode="checkmark-node"  Weight="100"  Disabled="true"  Hidden="true"  Notify="Selected" Toggle="true" />
														<TOOLBAR ID=" win0-toolbar0"  Weight="100"  Notify="Active;MouseOver"  BarPos="left"  Horiz="true"  EnableKeys="true"  LabelPos="bottom"  ViewMode="textgfx"  IgnoreAppearance="true"  CycleChain="true">
		<TOOLBARBUTTON ID="win0-toolbar0-button1" ShortHelp="shorthelp-toolbarbutton"  HelpNode="toolbarbutton-node"  Disabled="true"  Hidden="true"  Notify="Pressed;Selected" />
																</Toolbar>
		<HGROUP ID="win0-hgroup7" Frame="group" FrameTitle="frame-title" Background="Groupback">
				<SCROLLGROUP ID=" win0-scrollgroup0" >
						<VIRTGROUP ID=" win0-virtgroup0" >
								<LISTTREE ID=" win0-virtgroup0-listtree"  Weight="100"  Disabled="false"  ShortHelp="shorthelp-listtree" HelpNode="listtree-node" Notify="Active;DoubleClick"  CycleChain="true">
								</LISTTREE>
	</WINDOW>
...
See how I am struggling to format </scrollgroup>, </virtgroup> </vgroup> and other container group tags.
Evolve - Rapid GUI Development tool for MUI Royale and RapaGUI
http://myevolve.wordpress.com
bitRocky
Posts: 120
Joined: Fri Nov 14, 2014 6:01 pm

Re: ListTree looking for a solution

Post by bitRocky »

You have to print the closing tag after the DumpLayoutTree() call.
Because it gets called recursively for every listnode.
And use SameLevel flag for the GetEntry method.
This should work.
I will try to give a code example tomorrow.
djrikki
Posts: 682
Joined: Wed Apr 06, 2011 12:26 am

Re: ListTree looking for a solution

Post by djrikki »

Thanks.
Evolve - Rapid GUI Development tool for MUI Royale and RapaGUI
http://myevolve.wordpress.com
bitRocky
Posts: 120
Joined: Fri Nov 14, 2014 6:01 pm

Re: ListTree looking for a solution

Post by bitRocky »

Hi,

here is a C source code, I hope you can make some use of it:

Code: Select all

printCID(long i, enum CLASSID cid, BOOL end) {
	long j;

	for(j=1; j <= i; j++) {bug("  "); }
	bug("%s%s\n", end ? "/" : "", CLASSIDStr[cid]);
}
...
	DEC_QUICK(MM_WinMain_Test)
	{
		GETDATA;
		//struct MP_ *m = (APTR)msg;
		Object				*lt = data->ltMenu;
		structTN			*tn = NULL, *hd = NULL, *tnP = NULL, *ln = NULL, *pn = NULL;
		struct MenuEntry	*entry;
		long				i=0, j;

		Bug("DumpTree\n");
		tn = LT_Head(lt, NULL);
		while (tn)
		{
			entry = tn->tn_User;
			if (entry) {
				printCID(i, entry->cid, FALSE);
				if (LT_IsListNode(tn)){
					i++;
				}
			}
			tnP = tn; hd = 1;
			if (LT_IsListNode(tn) && (hd = LT_Head(lt, tn))){
				tn = hd;
			}else{
				if (!hd){
					i--;
					printCID(i, entry->cid, TRUE);
				}
				tn = LT_NextSame(lt, tn);
				while (!tn) {
					i--;
					pn = LT_Parent(lt, tnP);
					if (pn){
						entry = pn->tn_User;
						printCID(i, entry->cid, TRUE);
						tn = LT_NextSame(lt, pn); tnP = pn;
					}else{
						break;
					}
				}
			}
			if (!tn) {
				while( (pn = LT_Parent(lt, tnP)) && !(tn = LT_NextSame(lt, pn)) )
					{ tnP = pn; };
			}
		}// while	
		return 0;
	}
And this is the output:

Code: Select all

 Application
   Window
     Button
     Checkmark
     Gauge
     HGroup
       HGroup
         Cycle
         HGroup
           HGroup
             Listtree
               Image
             /Listtree
           /HGroup
         /HGroup
       /HGroup
       Coloradjust
     /HGroup
   /Window
   Window
   /Window
 /Application
And this is the tree:
Image
Post Reply