PS3 custom xai_plugin (+ source)

@sandungas @DeViL303

I came across this thread and realized you guys don't know what these Pairs do

Code:
<Pair key="fo_lbl_alpha"><String></String></Pair>
                <Pair key="fo_lbl2_alpha"><String></String></Pair>

The first one affects the title and the second one the info when out of focus, you can use values between 0 and 1 to give different transparency (alpha) effects, any values above 1 will give a strange blinking behaviour,

i use these attributes manly on long info texts that overlaps the item below it.

Example here (See the Install Package Files info text)

Case 1: Normal XMB behaviour (Long text will overlap the other icon)
9y8EIrS.png



Case 2: Using
Code:
<Pair key="fo_lbl2_alpha"><String>0</String></Pair>
to hide it and show only when focused

Out of focus: (As i set it to 0, it will be transparent)

HRNZzNC.png


And it will show only when focused

05ObsK4.png


@sandungas @DeViL303

See here i'm using

Code:
<Pair key="fo_lbl_alpha"><String>0.6</String></Pair>
                <Pair key="fo_lbl2_alpha"><String>0.2</String></Pair>

Any value above 1 will give a blinking effect

GSbDV6j.png
Hmmm ok, i dedicated some minutes to try to make sense of the codenames, let me know if i understood you
In XMBML slang "lbl" is the "title" (or "title_rsc") and "lbl2" is the "info" (or "info_rsc")
If we where talking in PARAM.SFO slang we could say the "lbl" is the "TITLE" and the "lbl2" is the "SUBTITLE", right ?
But in rco slang this objects containing texts are named "LabelText"
Incorrectly named "EditBox" in rcomage, this was a made up name, not official
There are references to this LabelText (or EditBox) objects in this wiki pages
https://www.psdevwiki.com/ps3/RCOXML_Objects#.280x81F.29_EditBox
https://www.psdevwiki.com/ps3/Talk:RCOXML_Objects#WidgetType
https://www.psdevwiki.com/ps3/VSH_Exports#paf

Not sure if what i said is completly correct or just a coincidence, anyway the "lbl" seems to mean "label" (for TITLE) and "lbl2" is another "label" (for SUBTITLE)
And the "fo" prefix means "Focus Out", so...

fo_lbl_alpha <--- focus out label alpha (a value in between 0 and 1, where 0 is transparent and 1 opaque)
fo_lbl2_alpha <--- focus out label 2 alpha (a value in between 0 and 1, where 0 is transparent and 1 opaque)

Im not sure why you are having a blinking effect when using values bigger than 1, in theory that 1 is "translated" into RGBA in hex as 0xFF (highest value for the alpha byte)... but maybe the code implements some special cases for values over 1 or even for text strings like "none", "hidden", "visible" or whatever
I guess the blinking effect probably is some kind of glitch (unexpected behaviour) either from the xmb code or from the graphic library
 
Last edited:
@sandungas @DeViL303

Code:
<Pair key="bar_action"><String></String></Pair>

Is useful when a plugin uses an user interface and we need to hide the XMB to show it properly

Lets use download plugin as example

Code:
<Pair key="module_name"><String>download_plugin</String></Pair>
                <Pair key="module_action"><String>0</String></Pair>

This one allow you to enter an url to download a file without need to go to the web browser
cT5qzb3.png



Using "none' as bar action will result in:
w1WOdxE.png


Using "hide" as bar_action will result in:
y3kOaL8.png
Hmmm, this codenames are also interesting, there is actually another VSH export codenamed paf::PhXmBar::WidgetType(void)
And there is another object incorrectly named "XMenu" in rcomage, this was another made up name, not official

The weird detail is that XmBar (or XMenu)... has been always considered the main horizontal row of icons (the icons most at top of the hierarchy, photo, video, game, etc...)
I guess this concept is not completly right... but at least it makes sense when you use the value "hide" with it is not visible any icon because you are hiding the whole XrossMediaBar (or XMB for short)

Edit:
Let me know if this is right....
When you used the value "none" what happened is the icons remained static, right ? (not hidden, and not any other change)
In that case i guess this means the value "none" means to dont do anything with the main icons (is like freezing them, the cursor stays in the same position)
 
Last edited:
BTW
<Pair key="lbl_half"><String>1</String></Pair>

is still a mistery to me
If what i said in my previous posts about the codenames meaning is right (fo_lbl_alpha = focus out label alpha) then we can deduce this one is an effect applyed when the cursor is in the "focus in" state

Just for curiosity sake... there are only 6 focus states, focus in and focus out are triggered when you enter or exit a submenu by clicking a button
Then there are another 4 focus left, right, up, down, triggered by pressing the D-pad directions
We know this one is not related with D-pad directions, and is not a focus out (because the codename doesnt have the "fo" prefix)... so it should be a "focus in"
The prefix is not mentioned in the codename, but "lbl_half" seems to be "focus in label half"

I cant figure what means the "half" though, initially it makes me think in some kind of geometrical division, either is dividing the label in half horizontally or vertically, dunno
But remember, for experimenting purposes this effect is going to be applyed only when the icon is in "focus in" state
 
Hmmm, this codenames are also interesting, there is actually another VSH export codenamed paf::PhXmBar::WidgetType(void)
And there is another object incorrectly named "XMenu" in rcomage, this was another made up name, not official

The weird detail is that XmBar (or XMenu)... has been always considered the main horizontal row of icons (the icons most at top of the hierarchy, photo, video, game, etc...)
I guess this concept is not completly right... but at least it makes sense when you use the value "hide" with it is not visible any icon because you are hiding the whole XrossMediaBar (or XMB for short)

I did some research on vsh exports a while ago which allowed me and TheRouletteBoi to render text and planes via vsh plugins (sprx), those widgets are the same as the ones stored in rco's.

So far I have the whole widget class hierarchy, those are the official names used by sony:
vsh paf classes hierarchy.PNG


To understand this better I reimplemented it here:
https://github.com/TheRouletteBoi/VirtualShell/blob/main/include/vsh/paf.hpp#L1893

As for the XmBar you mentioned, it is the 'parent' of the xmb, its childs are the XmList entries which are the categories that holds XmItem's. So hiding it will also hide the categories and their childs.
 
I did some research on vsh exports a while ago which allowed me and TheRouletteBoi to render text and planes via vsh plugins (sprx), those widgets are the same as the ones stored in rco's.

So far I have the whole widget class hierarchy, those are the official names used by sony:
View attachment 39778

To understand this better I reimplemented it here:
https://github.com/TheRouletteBoi/VirtualShell/blob/main/include/vsh/paf.hpp#L1893

As for the XmBar you mentioned, it is the 'parent' of the xmb, its childs are the XmList entries which are the categories that holds XmItem's. So hiding it will also hide the categories and their childs.
This is awesome, im going to need some time to process, review and verify all that names, but to get you an idea of how important are this codenames let me eplain some details
The RCOXML Objects page in psdevwiki was written (pretty much entirelly) by me, in it are explained all the attributes used in them
The term "rcoxml objects" is another name coined by the person who made rcomage... as i was suspecting are codenamed widgets, but let me continue naming them objects by now
Inside the rco code all this objects and attributes are given an ID in hexadecimal (but doesnt have any text name)

As example... the person who made rcomage realized the ID=0x816 was loading a event:native:/OnTickClockFirstConfig so he decided to give the name "clock" to ID=0x816 and the resulting xml generated by rcomage did look like this:
Code:
<Clock clockOnTick="event:native:/OnTickClockFirstConfig">
In this case with the "Clock" object he hitted in the nail (the name he invented is exactly the official codename) but there are other names that only matches partially (he was close though), others doesnt matches at all, and there are a couple of unknowns

Well, when i was creating the wiki pages i tryed to respect a lot of the original rcomage names... but i changed most of the attribute names to make them more intuitive and unique (this feature making the attribute names unique is very important imo)
I made this special version of rcomage that matches all the names in wiki pages, and it have some hundreds more attributes identifyed by me https://www.psx-place.com/threads/research-rcomage-psdevwiki-mod.17958/
When i was doing all this, i was about to modify the object codenames by the officials (in wiki pages and my special rcomage version). In this wiki page i wrote a lot of guesses and speculations because i was not sure about which name is each in rcomage, most of that page are deductions and (educated) guesses because i never did any reverse engineering so i never had a real proof to prove my theories was right, but as you can see by comparing with your list the assotiations in this table matches pretty much entirelly with your list :D
https://www.psdevwiki.com/ps3/Talk:RCOXML_Objects#WidgetType

In that table the rows in green color are the (legacy/old) rcomage names that matches 100% with the official codenames... this ones doesnt needs to be modifyed in rcomage neither on wiki because are perfect
In blue are the names that was close to the officials (and are already identifyed, easy to change them)
In red are the names that confuses me a bit (but i hope after reviewing all this and checking at your list i will be able to identify a few more)
And yellow... is stuff completly unknown, never used in PSP or PS3 firmwares and/or not implemented in rcomage

Now the challenge is to complete that list in wiki with the official codenames, right now i dont have a clear overview of everything... but this is a great progress, your list is going to help a lot, thx :)
 
I've been rebuilding the table, rewrote the texts introduction to explain what im trying to achieve with it, and moved the texts and the table to the top of the page
This wiki "talk" pages sometimes are used as a worklog or notpead for things that are not fully documented yet, and this "talk" page was one of my favourites, the previous version was a bit chaotic, sorry :D

Now all the table cells with question marks indicates that im not sure about it, the column most at left of the table is the hexadecimal type+ID (used inside the RCO structure), this IDs are very useful for identification purposes because the RCO format reserves IDs for all them, now the table is the complete collection of the "RCOXML Objects" (or XMB widgets) ordered by ID
Rcomage have code to deal with all this IDs, and have an unnofficial name associated with them (the second column of the table in colors), that colors indicates how much the unoffiicial name differs from the official codename
If you or someone else have an insight of this relationships in between rcomage unnofficial names and official codenames, or any suggestion to improve/rebuild that table let me know

Note that some 'WidgetType' functions doesn't have an export, simply because they aren't used in vsh modules.
The idea to add the VSH exports at the right columns of the table was because many time ago (not sure how many but some years) nobody was mentioning that relationship existed, at some point i was checking the VSH exports page in wiki and realized a couple of the names did seem to match (at least partially), some days later i started trying to figure the other names that was not matching, made a list just to be sure how many i had... and yeah at some point it was obvious around 80% or more of the names was already listed in the VSH exports page
So i decided to add the VSH exports to the table, as a proof for other wiki readerds that was i was publishing in the "talk" wiki page was right (at least partially) :D
I have doubts if there are some exports missing in the wiki VSH exports page and your code, because some of them could be used only by a few rare modules (.sprx) or the reverse engineering of them could be very obfuscated and not clear, or maybe existed in old firmwares and was removed/modifyed in new firmwares, dunno
Anyway, now that you are saying some of them simply doesnt have VSH exports, i have to ask you if you have another suggestion to show some relliable proof that the codename exists, i mean... instead of the VSH export
Also, the decission to add the VSH exports is because it could be very useful and could boost the interest of develoeprs and reverse engineers to investigate them
At some point that table could be rebuilt to add all the other related VSH exports of every object btw... this would make the table way bigger (and more useful), but not sure if is a bit soon for that, i prefer to dont enter in that forest yet

Anyway, i have some questions related with your screenshot,while i was editing wiki i made a list with some questions related to some of the codenames that appears in your screenshot, any info you could give about them is welcome

--------------------------
PhCamera
This codename is mentioned in the VSH exports wiki page and paf.hpp in github but the most generic function i see is paf::PhCamera::Setup(void)
Do you think is a good idea to add paf::PhCamera::Setup(void) in the wiki table as a sample ?, or can you figure something better as a proof of his existence ?

PhLabelPrimDiv
This codename is mentioned in the VSH exports wiki page and paf.hpp in github but the only apparence of this codename is paf::PhLabelPrimDiv::PhLabelPrimDiv(paf::PhWidget *, paf::PhAppear *)
Do you think is a good idea to add paf::PhLabelPrimDiv::PhLabelPrimDiv(paf::PhWidget *, paf::PhAppear *) in the wiki table as a sample ?, or can you figure something better as a proof of his existence ?

PhSpin
This codename is mentioned in the VSH exports wiki page and paf.hpp in github but the most generic function i see is paf::PhSpin::SetStyle(int, int)
Do you think is a good idea to add paf::PhSpin::SetStyle(int, int) in the wiki table as a sample ?, or can you figure something better as a proof of his existence ?

PhMicon, PhModel, PhCanvas, PhWeb, PhSaveData
This codenames are not mentioned in the VSH exports wiki neither in paf.hpp in github
What kind of samples can i use in the wiki table as a proof of his existence ?

Also, for the widget 'hierachy', I meant the classes inheritance, sorry for the mistake.
Dont worry, your comment didnt confused me, the notes i added in the table about the parent-children relationships are intended to call attention to the fact that some of that "lists" and "items" are given a consecutive ID in hexadecimal, there are 6 groups:
0x804/0x805/0x806 (XmBar, XmItem, XmList)
0x809/0x80A (MenuList, MenuItem?)
0x80B/0x80C (ObjUnknown0xB, XItem?)
0x813/0x814 (List?, Item?)
0x817/0x818 (InfoList, InfoItem?)
0x81C/0x81D (CheckBoxList, CheckBox)

The consecutive IDs are a good hint to identify them, you know... there is an "item" next to each "list" (or the other way around, there is a "list" next to each "item")
Is specially interesting because the ObjUnknown0xB seems to be a list (in other words, 0x80B seems to be the parent of 0x80C)

There is another relationship related with programming classes that could be a bit misleading, as example "PhLabelText" (0x81F) is an improved version of "Text" (0x80D). In plain words, in the XML generated by rcomage "PhLabelText" looks identical to "PhText" but with some added attributes at the end, at code level this attributes can be inherited from classes, but for someone that is wrtiting a RCO structure from scratch in XML (or in a sprx) "PhLabelText" and "Text" are not related with each other, can be used independently and can be considered 2 different objects
For the table purposes we can forget about the fact that "PhLabelText" is derived from "PhText"
 
Last edited:
@sandungas

Well you see, PhWidgets objects all have a vtable with 'WidgetType' as the first method, so by getting the root of the whole xmb and by parsing every childs, I should be able to dump the type of every objects in the currently loaded rcos which would make your work easier.
If you can provide me an xmb_plugin rco with unknowns I'll be able to retrieve their names.

Also, for the ones that aren't present on the wiki, ie: PhCanvas, I found the names in a pre-retail paf.sprx file with symbols, maybe they are only used by specific modules like the web browser...
 
@sandungas

Well you see, PhWidgets objects all have a vtable with 'WidgetType' as the first method, so by getting the root of the whole xmb and by parsing every childs, I should be able to dump the type of every objects in the currently loaded rcos which would make your work easier.
If you can provide me an xmb_plugin rco with unknowns I'll be able to retrieve their names.
Great, thx for your interest, i will do the custom rco later, but lets progress step by step, im looking at the official xmb_plugin_normal.rco and there are 3 things that needs to be confirmed, please tell me the codename used by this unique names:

page_xmb <--- this is a PhWidget, PhScene, PhCanvas, or a PhCamera ?
list_user <--- this is a PhXmItem or a PhXmList ?

xmenu <--- this is a PhXmBar, right ?
indi_base <--- this is a PhPlane, right ?
online_num <--- this is a PhText, right ?

Also, for the ones that aren't present on the wiki, ie: PhCanvas, I found the names in a pre-retail paf.sprx file with symbols, maybe they are only used by specific modules like the web browser...
Thats the kind of things im afraid that could happen, but the most we progress identifying the others the most close we are going to be to find if there is something missing or unrelated to RCO contents





EDIT:
Do you know how to check who is the parent of an specific object ?
In that case i would like to know the codename used by the parent of page_xmb
RCOmage represents it in XML format simply as <ObjectTree> because his attributes are like "metadata", related to the internal RCO structure (are lost when you extract RCO contents, and regenerated when you compile the RCO), so i guess there is no other way to identify it other than asking to one of his childrens who is his parent :D
https://www.psdevwiki.com/ps3/RCOXML_Objects#.280x800.29_ObjectTree
 
Last edited:
@sandungas

The parent of 'page_xmb' is a widget called 'phi_root', i believe it is the same for every pages.
I attached to this post a zip file containing a few rco objects dump with their respective names and types.

Here's the code i used:
Code:
void Dump(paf::PhWidget* widget)
{
    if (!widget)
        return;

    vsh::printf("%s | %s\n", widget->name.c_str(), widget->WidgetType());

    for (auto bigchungus : widget->childs)
        if (bigchungus)
            Dump(bigchungus);
}

void DumpWidgets()
{
    paf::PhWidget* page_xmb = paf::View::Find("xmb_plugin")->FindWidget("page_xmb");

    if (!page_xmb)
        return (void)vsh::printf("DumpWidgets: fatal error\n");

    paf::PhWidget* phi_root = page_xmb->GetDispatcher();

    Dump(phi_root);
}
 

Attachments

@sandungas

The parent of 'page_xmb' is a widget called 'phi_root', i believe it is the same for every pages.
I attached to this post a zip file containing a few rco objects dump with their respective names and types.

Here's the code i used:
Code:
void Dump(paf::PhWidget* widget)
{
    if (!widget)
        return;

    vsh::printf("%s | %s\n", widget->name.c_str(), widget->WidgetType());

    for (auto bigchungus : widget->childs)
        if (bigchungus)
            Dump(bigchungus);
}

void DumpWidgets()
{
    paf::PhWidget* page_xmb = paf::View::Find("xmb_plugin")->FindWidget("page_xmb");

    if (!page_xmb)
        return (void)vsh::printf("DumpWidgets: fatal error\n");

    paf::PhWidget* phi_root = page_xmb->GetDispatcher();

    Dump(phi_root);
}
This dumps are very useful, nice idea. I been taking a fast peek at the .txt dumps and it seems you got a lot of the ones marked as doubtful, i will update the wiki soon (a couple of days max)

There are going to be a few missing anyway, because are rarelly used in official firmware, yesterday i was thinking in the experiment you said about adding custom stuff inside xmb_plugin_normal.rco and i have the rcomage xml code ready to identify one of those rarelly used, is what rcomage names "Group" (ID=0x0812)
But to be sure we are not creating any incompatibility in between RCO versions... can you upload the exact xmb_plugin_normal.rco you are using ?. I will add the ID=0x0812 to it in the less intrusive way
 
@jordywastaken is REBUG 4.84.2 REX (MD5:0835D81E3C581F3BDFDFBE86FCA5E192)... not D-REX, right ?

Just to let you know what im doing, yesterday i started comparing your dumps with some RCO files i already had extracted from 4.89 OFW mostly, but there was many mistmatches related with the web browser. When you said you had installed a 4.84 firmware i downloaded OFW 4.84 but there was still mistmatches, then i realized rebug downgraded the webbrowser_plugin to a vulnerable version (and it also have files taken from DEX firmwares)... so i had to download REBUG 4.84.2 REX... but i still have mistmatches, im a bit confused by now and wondering if there is some prolem in the dumper, or the .sprx's are doing some change in real time, or maybe im looking at the incorrect RCO, anyway i will talk about this later incase someone figures what is happening

By now i can tell in your dumps there are 10 objects 100% confirmed. I guess i will add blue color for them in the wiki table just because i want to keep a record
And your dumps have another 3 more objects that are the ones driving me nuts right now.... if at some point i figure what is happening this will make a total of 13 objects identifyed, good work :)
And now that i understood how you are doing the dumps i guess i can figure other "enviroments" that are going to confirm more objects, as example the "PhIPAddress" is only used in the network setings screen (the screen where we need to enter numbers with the onscreen keyboard), i guess this is going to be an easy catch
There is also a pair of menu/item used by the audio files (i guess is used when displaying info about it, before playing it)
 
Btw, i had a couple of ideas to improve the dumper code

The first idea is to flip the order of the names, you are dumping them like:
Code:
UniqueName | CodeName
But they are going to be better aligned if you dump them as:
Code:
CodeName | UniqueName

-------------------------------------
The "PhScene" (named "Page" in rcomage) is always located at the same level of the hierarchy and can be used to separate groups of objects visually, the idea is to check "if (object = PhScene) add a linefeed", this way is going to be dumped in groups of:

Code:
PhScene | whatever_name_1
OtherCodeNames | children
OtherCodeNames | children
OtherCodeNames | children

PhScene | whatever_name_2
OtherCodeNames | children

PhScene | whatever_name_3
OtherCodeNames | children
OtherCodeNames | children

---------------------------------
Other idea is to dump into .xml format instead of .txt because the good text editors are going to highlight the xml attributes in colors
It will improve readability a bit, and will be closer to the xml code generated by rcomage, something like this:

Code:
<PhScene name="whatever_name_1"></PhScene>
<OtherCodeNames name="children"></OtherCodeNames>
<OtherCodeNames name="children"></OtherCodeNames>
<OtherCodeNames name="children"></OtherCodeNames>

<PhScene name="whatever_name_2"></PhScene>
<OtherCodeNames name="children"></OtherCodeNames>

<PhScene name="whatever_name_3"></PhScene>
<OtherCodeNames name="children"></OtherCodeNames>
<OtherCodeNames name="children"></OtherCodeNames>

------------------------------
Finally, it will be great to represent the parent/children hierarchy adding TABs at the line start when needed, but it will also require to enclose tags after the childrens, something like this:

Code:
<PhScene name="whatever_name_1">
	<OtherCodeNames name="children"></OtherCodeNames>
	<OtherCodeNames name="children"></OtherCodeNames>
	<OtherCodeNames name="children"></OtherCodeNames>
</PhScene>

<PhScene name="whatever_name_2">
	<OtherCodeNames name="children"></OtherCodeNames>
</PhScene>

<PhScene name="whatever_name_3">
	<OtherCodeNames name="children"></OtherCodeNames>
	<OtherCodeNames name="children"></OtherCodeNames>
</PhScene>

-------------------------------------
I know the last suggestion is a lot more tricky to implement than the others because requires to check the hierarchy of everything, but if you know some easy way to to do it the dumps are going to be almost identical to the xml code generated by rcomage

Just to be clear, for the research im doing i dont need any of this improvements, the actual dumps are good enought for identification purposes
To be fair... if i where in your boots, the only improvement i would do by now is the first and second ideas about flipping the names and adding a linefeed before every "PhScene" because you are dumping some objects that cant be represented in XML (like the "PhCamera"), and by now i dont even understand what they means

I guess the "PhCamera" is added automatically by the .sprx after every "PhScene" but doesnt exists in the RCO structure as far i remember
 
Last edited:
@sandungas

I made some changes in the code i used, it now dumps directly in xml format (which was surprisingly easy to implement).

Here's the updated code which is a bit messy but at least it does what we need:
Code:
int childLevel = 0;
void Dump(paf::PhWidget* widget)
{
    if (!widget)
        return;

    std::string tabs(childLevel, '\t');
    vsh::printf("%s<%s name=\"%s\">", tabs.c_str(), widget->WidgetType(), widget->name.c_str());

    if (!widget->childs.empty())
        vsh::printf("\n");

    childLevel++;

    for (auto bigchungus : widget->childs)
        if (bigchungus)
            Dump(bigchungus);

    childLevel--;

    if (widget->childs.empty())
        vsh::printf("</%s>\n", widget->WidgetType());
    else
        vsh::printf("%s</%s>\n\n", tabs.c_str(), widget->WidgetType());
}

void DumpWidgets()
{
    paf::PhWidget* page_xmb = paf::View::Find("xmb_plugin")->FindWidget("page_xmb");

    if (!page_xmb)
        return (void)vsh::printf("DumpWidgets: fatal error\n");

    paf::PhWidget* phi_root = page_xmb->GetDispatcher();

    vsh::printf("<?xml version=\"1.0\" encoding=\"ASCII\"?>\n");
    Dump(phi_root);
}

I attached to this post some more dumps using the new format.
 

Attachments

Look at this for curiosity sake, im going to post it before i forget about it, is a good example of the differences in between the RCO contents and your dumps

Inside auth_plugin. rco REBUG 4.84.2 REX
Code:
<Page name="page_auth_plugin_password_number_input" pageMode="0x1101" pageOnInit="event:native:/OnInitPageWizardEventHandler" pageOnCancel="nothing" pageOnContext="nothing" pageOnActivate="nothing">
	<Plane name="plane_auth_plugin_password_number_input" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="0" sizeY="0" sizeZ="0" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" planeImage="nothing" planeResizeMode="0x0">
		<Text name="text_title_auth_plugin_password_number_input" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="0" sizeY="0" sizeZ="1" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x1000" onInit="nothing" positionOverrideX="0x100" positionOverrideY="0x72020100" positionOverrideZ="0x100" sizeOverrideX="0x2c040100" sizeOverrideY="0x2d040100" sizeOverrideZ="0x0" textMessage="text:msg_pw_enter" textFontStyle="nothing" textFontMode="0x1000100" textUnk29="0x1" textFontSizeY="10" textTopColorScaleR="1" textTopColorScaleG="1" textTopColorScaleB="1" textBottomColorScaleR="1" textBottomColorScaleG="1" textBottomColorScaleB="1" textLineSpacing="0" textUnk37="0x0" textUnk38="0x0" textUnk39="0x0" textCharacterSpacing="0" textShadowOffsetX="4" textShadowOffsetY="-5" textShadowOffsetZ="0" textShadowColorScaleR="0.25" textShadowColorScaleG="0.25" textShadowColorScaleB="0.25" textShadowColorScaleA="1" textUnk48="0x0" textUnk49="0x0" textUnk50="0x0" textUnkFloat51="1" textUnkFloat52="1" textUnkFloat53="1" textUnkFloat54="1" textResizeMode="0xffffffff" textOverrideUnk56="0x14000100" textOverrideUnk57="0x3000000" textOverrideUnk58="0x0"></Text>
		<Group name="group_spin_auth_plugin_password_number_input" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="0" sizeY="0" sizeZ="0" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x100" positionOverrideY="0x100" positionOverrideZ="0x100" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0">
			<ItemSpin name="numspin_auth_plugin_password_number_input_0" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="0" sizeY="0" sizeZ="1" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="event:native:/OnInitNumSpinWizardEventHandler" positionOverrideX="0x6d020000" positionOverrideY="0x71020000" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" itemspinUnkInt23="0x0" itemspinUnkInt24="0x9" itemspinUnkInt25="0x1" itemspinUnkInt26="0xffffffff" itemspinUnk27="0x1" itemspinUnkFloat28="0" itemspinImageArrow="nothing" itemspinImageArrowShadow="nothing" itemspinOnDecide="event:native:/OnDecideNumSpinWizardEventHandler" itemspinOnCancel="event:native:/OnCancelNumSpinWizardEventHandler" itemspinOnRollIn="nothing" itemspinOnCursorMove="nothing" itemspinOnFocusIn="nothing" itemspinOnFocusOut="nothing" itemspinOnFocusLeft="nothing" itemspinOnFocusRight="event:native:/OnFocusRightNumSpinWizardEventHandler" itemspinOnFocusUp="nothing" itemspinOnFocusDown="nothing"></ItemSpin>
			<ItemSpin name="numspin_auth_plugin_password_number_input_1" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="0" sizeY="0" sizeZ="1" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="event:native:/OnInitNumSpinWizardEventHandler" positionOverrideX="0x6e020000" positionOverrideY="0x71020000" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" itemspinUnkInt23="0x0" itemspinUnkInt24="0x9" itemspinUnkInt25="0x1" itemspinUnkInt26="0xffffffff" itemspinUnk27="0x1" itemspinUnkFloat28="0" itemspinImageArrow="nothing" itemspinImageArrowShadow="nothing" itemspinOnDecide="event:native:/OnDecideNumSpinWizardEventHandler" itemspinOnCancel="event:native:/OnCancelNumSpinWizardEventHandler" itemspinOnRollIn="nothing" itemspinOnCursorMove="nothing" itemspinOnFocusIn="nothing" itemspinOnFocusOut="nothing" itemspinOnFocusLeft="event:native:/OnFocusLeftNumSpinWizardEventHandler" itemspinOnFocusRight="event:native:/OnFocusRightNumSpinWizardEventHandler" itemspinOnFocusUp="nothing" itemspinOnFocusDown="nothing"></ItemSpin>
			<ItemSpin name="numspin_auth_plugin_password_number_input_2" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="0" sizeY="0" sizeZ="1" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="event:native:/OnInitNumSpinWizardEventHandler" positionOverrideX="0x6f020000" positionOverrideY="0x71020000" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" itemspinUnkInt23="0x0" itemspinUnkInt24="0x9" itemspinUnkInt25="0x1" itemspinUnkInt26="0xffffffff" itemspinUnk27="0x1" itemspinUnkFloat28="0" itemspinImageArrow="nothing" itemspinImageArrowShadow="nothing" itemspinOnDecide="event:native:/OnDecideNumSpinWizardEventHandler" itemspinOnCancel="event:native:/OnCancelNumSpinWizardEventHandler" itemspinOnRollIn="nothing" itemspinOnCursorMove="nothing" itemspinOnFocusIn="nothing" itemspinOnFocusOut="nothing" itemspinOnFocusLeft="event:native:/OnFocusLeftNumSpinWizardEventHandler" itemspinOnFocusRight="event:native:/OnFocusRightNumSpinWizardEventHandler" itemspinOnFocusUp="nothing" itemspinOnFocusDown="nothing"></ItemSpin>
			<ItemSpin name="numspin_auth_plugin_password_number_input_3" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="0" sizeY="0" sizeZ="1" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="event:native:/OnInitNumSpinWizardEventHandler" positionOverrideX="0x70020000" positionOverrideY="0x71020000" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" itemspinUnkInt23="0x0" itemspinUnkInt24="0x9" itemspinUnkInt25="0x1" itemspinUnkInt26="0xffffffff" itemspinUnk27="0x1" itemspinUnkFloat28="0" itemspinImageArrow="nothing" itemspinImageArrowShadow="nothing" itemspinOnDecide="event:native:/OnDecideNumSpinWizardEventHandler" itemspinOnCancel="event:native:/OnCancelNumSpinWizardEventHandler" itemspinOnRollIn="nothing" itemspinOnCursorMove="nothing" itemspinOnFocusIn="nothing" itemspinOnFocusOut="nothing" itemspinOnFocusLeft="event:native:/OnFocusLeftNumSpinWizardEventHandler" itemspinOnFocusRight="nothing" itemspinOnFocusUp="nothing" itemspinOnFocusDown="nothing"></ItemSpin>
			<Text name="text_spin_asterisk_auth_plugin_password_number_input_0" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="0" sizeY="0" sizeZ="1" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x6d020000" positionOverrideY="0x71020000" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" textMessage="nothing" textFontStyle="nothing" textFontMode="0x1000100" textUnk29="0x1" textFontSizeY="10" textTopColorScaleR="1" textTopColorScaleG="1" textTopColorScaleB="1" textBottomColorScaleR="1" textBottomColorScaleG="1" textBottomColorScaleB="1" textLineSpacing="0" textUnk37="0x0" textUnk38="0x0" textUnk39="0x0" textCharacterSpacing="0" textShadowOffsetX="4" textShadowOffsetY="-5" textShadowOffsetZ="0" textShadowColorScaleR="0.25" textShadowColorScaleG="0.25" textShadowColorScaleB="0.25" textShadowColorScaleA="1" textUnk48="0x0" textUnk49="0x0" textUnk50="0x0" textUnkFloat51="1" textUnkFloat52="1" textUnkFloat53="1" textUnkFloat54="1" textResizeMode="0xffffffff" textOverrideUnk56="0x13000100" textOverrideUnk57="0x3000000" textOverrideUnk58="0x0"></Text>
			<Text name="text_spin_asterisk_auth_plugin_password_number_input_1" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="0" sizeY="0" sizeZ="1" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x6e020000" positionOverrideY="0x71020000" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" textMessage="nothing" textFontStyle="nothing" textFontMode="0x1000100" textUnk29="0x1" textFontSizeY="10" textTopColorScaleR="1" textTopColorScaleG="1" textTopColorScaleB="1" textBottomColorScaleR="1" textBottomColorScaleG="1" textBottomColorScaleB="1" textLineSpacing="0" textUnk37="0x0" textUnk38="0x0" textUnk39="0x0" textCharacterSpacing="0" textShadowOffsetX="4" textShadowOffsetY="-5" textShadowOffsetZ="0" textShadowColorScaleR="0.25" textShadowColorScaleG="0.25" textShadowColorScaleB="0.25" textShadowColorScaleA="1" textUnk48="0x0" textUnk49="0x0" textUnk50="0x0" textUnkFloat51="1" textUnkFloat52="1" textUnkFloat53="1" textUnkFloat54="1" textResizeMode="0xffffffff" textOverrideUnk56="0x13000100" textOverrideUnk57="0x3000000" textOverrideUnk58="0x0"></Text>
			<Text name="text_spin_asterisk_auth_plugin_password_number_input_2" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="0" sizeY="0" sizeZ="1" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x6f020000" positionOverrideY="0x71020000" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" textMessage="nothing" textFontStyle="nothing" textFontMode="0x1000100" textUnk29="0x1" textFontSizeY="10" textTopColorScaleR="1" textTopColorScaleG="1" textTopColorScaleB="1" textBottomColorScaleR="1" textBottomColorScaleG="1" textBottomColorScaleB="1" textLineSpacing="0" textUnk37="0x0" textUnk38="0x0" textUnk39="0x0" textCharacterSpacing="0" textShadowOffsetX="4" textShadowOffsetY="-5" textShadowOffsetZ="0" textShadowColorScaleR="0.25" textShadowColorScaleG="0.25" textShadowColorScaleB="0.25" textShadowColorScaleA="1" textUnk48="0x0" textUnk49="0x0" textUnk50="0x0" textUnkFloat51="1" textUnkFloat52="1" textUnkFloat53="1" textUnkFloat54="1" textResizeMode="0xffffffff" textOverrideUnk56="0x13000100" textOverrideUnk57="0x3000000" textOverrideUnk58="0x0"></Text>
			<Text name="text_spin_asterisk_auth_plugin_password_number_input_3" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="0" sizeY="0" sizeZ="1" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x70020000" positionOverrideY="0x71020000" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" textMessage="nothing" textFontStyle="nothing" textFontMode="0x1000100" textUnk29="0x1" textFontSizeY="10" textTopColorScaleR="1" textTopColorScaleG="1" textTopColorScaleB="1" textBottomColorScaleR="1" textBottomColorScaleG="1" textBottomColorScaleB="1" textLineSpacing="0" textUnk37="0x0" textUnk38="0x0" textUnk39="0x0" textCharacterSpacing="0" textShadowOffsetX="4" textShadowOffsetY="-5" textShadowOffsetZ="0" textShadowColorScaleR="0.25" textShadowColorScaleG="0.25" textShadowColorScaleB="0.25" textShadowColorScaleA="1" textUnk48="0x0" textUnk49="0x0" textUnk50="0x0" textUnkFloat51="1" textUnkFloat52="1" textUnkFloat53="1" textUnkFloat54="1" textResizeMode="0xffffffff" textOverrideUnk56="0x13000100" textOverrideUnk57="0x3000000" textOverrideUnk58="0x0"></Text>
		</Group>
	</Plane>
</Page>

Inside your _Dump while editing the ps3 password.xml REBUG 4.84.2 REX
Code:
<PhScene name="page_auth_plugin_password_number_input">
	<PhCamera name="camera"></PhCamera>
	<PhPlane name="plane_auth_plugin_password_number_input">
		<PhText name="text_title_auth_plugin_password_number_input"></PhText>
		<PhWidget name="group_spin_auth_plugin_password_number_input">
			<PhNumSpin name="numspin_auth_plugin_password_number_input_0">
				<PhWidget name="">
					<PhLabelText name=""></PhLabelText>
					<PhLabelText name=""></PhLabelText>
				</PhWidget>

			</PhNumSpin>

			<PhNumSpin name="numspin_auth_plugin_password_number_input_1">
				<PhWidget name="">
					<PhLabelText name=""></PhLabelText>
					<PhLabelText name=""></PhLabelText>
				</PhWidget>

			</PhNumSpin>

			<PhNumSpin name="numspin_auth_plugin_password_number_input_2">
				<PhWidget name="">
					<PhLabelText name=""></PhLabelText>
					<PhLabelText name=""></PhLabelText>
				</PhWidget>

			</PhNumSpin>

			<PhNumSpin name="numspin_auth_plugin_password_number_input_3">
				<PhWidget name="">
					<PhLabelText name=""></PhLabelText>
					<PhLabelText name=""></PhLabelText>
				</PhWidget>

			</PhNumSpin>

			<PhText name="text_spin_asterisk_auth_plugin_password_number_input_0"></PhText>
			<PhText name="text_spin_asterisk_auth_plugin_password_number_input_1"></PhText>
			<PhText name="text_spin_asterisk_auth_plugin_password_number_input_2"></PhText>
			<PhText name="text_spin_asterisk_auth_plugin_password_number_input_3"></PhText>
		</PhWidget>

	</PhPlane>

</PhScene>

To summarize, inside the "PhWidget" (or inside the rcomage unnofficial name "Group") there are 4 spins and 4 texts... but the content of the spins is located somewhere else (is not located in auth_plugin. rco)
Either is "merged" on runtime from a different RCO or by the SPRX

In the wiki "talk" page i added a section about "spins confussion" because time ago i thought that the spin names was swapped in rcomage (itemspin by numspin), but later i realized there is another spin (3 in total ?), and the other day when i was making the new table with colors i added 0x0811 with question marks because i was not sure, but this is a confirmation that (at least) one of the rcomage spin names is wrong

0x0811 (ItemSpin in rcomage) = PhNumSpin (official codename) :)

I guess is associated with an animation that basically does this (with a single character):
Number.gif


In this sample the "PhNumSpin" is repeated 4 times because the password is 4 digits

-------------------
EDIT:
Btw, there is no need to do the experiment we was talking before with the rcomage "Group", it was confirmed in the dumps you uploaded yesterday (and this sample confirms it too)

0x0812 (Group in rcomage) = PhWidget (official codename)

Is used a lot more frequently than i thought, in this sample appears in the RCO, but most of the times is added "on runtime" by the SPRX (not in the RCO)
This object is a bit special, i cant give an accurate explanation of how it works, but usually is not displayed, is like an invisible container intended to join together other objects, probably to apply transformations to all them (size, position, etc...)
 
Last edited:
@jordywastaken i updated the table https://www.psdevwiki.com/ps3/Talk:RCOXML_Objects#WidgetType
The blue color means the object was found in your dumps, and it matches with the xml code generated by rcomage

Lets try to catch a couple more, PhLevelMeter and PhProgress
The LevelMeter is the volume bar used by the media player, this screenshot is from PSVita, but in the PS3 (and in the PSP) it looks similar, is composed by a row of little rectangles
television-old-fashion-volume-collection_vyw-tfkme__s0000-jpg.22342


-----------------------
And the Progress is a bar used in different places (when installing a firmware, or when checking the HDD filesystem), but probably there are other better places to dump it
p1cNSvdpIrYyMCDchjE-S4wA0c9oe9zAM4U2luBnzetCsuseufrV3x4W270ntbeBZKFUhSPaBuT_kIy8OBki4ZTJ1Zccc_kGkJ3aEDWXdoQ3D5C5DVTkLlCxNQ


While looking at the media player i realized it have a progress bar too (at bottom right corner), im not sure if you can make a dump from inside the media player, anyway, if you can figure other places of the XMB where is used that bar it should work too because as far i know the XMB only have 1 progress bar
panel001.jpg



EDIT:
Can you make another dump in this screen ?, this menu looks pretty nice and useful for homebrew, i guess is a combination of CheckBoxList (parent) and CheckBox (children), but right now im not sure
soundoutput003.jpg
 
Last edited:
@jordywastaken i updated the table https://www.psdevwiki.com/ps3/Talk:RCOXML_Objects#WidgetType
The blue color means the object was found in your dumps, and it matches with the xml code generated by rcomage

Lets try to catch a couple more, PhLevelMeter and PhProgress
The LevelMeter is the volume bar used by the media player, this screenshot is from PSVita, but in the PS3 (and in the PSP) it looks similar, is composed by a row of little rectangles
television-old-fashion-volume-collection_vyw-tfkme__s0000-jpg.22342


-----------------------
And the Progress is a bar used in different places (when installing a firmware, or when checking the HDD filesystem), but probably there are other better places to dump it
p1cNSvdpIrYyMCDchjE-S4wA0c9oe9zAM4U2luBnzetCsuseufrV3x4W270ntbeBZKFUhSPaBuT_kIy8OBki4ZTJ1Zccc_kGkJ3aEDWXdoQ3D5C5DVTkLlCxNQ


While looking at the media player i realized it have a progress bar too (at bottom right corner), im not sure if you can make a dump from inside the media player, anyway, if you can figure other places of the XMB where is used that bar it should work too because as far i know the XMB only have 1 progress bar
panel001.jpg



EDIT:
Can you make another dump in this screen ?, this menu looks pretty nice and useful for homebrew, i guess is a combination of CheckBoxList (parent) and CheckBox (children), but right now im not sure
soundoutput003.jpg

Alrighty, i dumped all of those

So the LevelMeter is correct
Code:
<PhScene name="audioplayer_volume_page">
        <PhCamera name="camera"></PhCamera>
        <PhLevelMeter name="audioplayer_volume_level_meter">
            <PhLabelPrimDiv name=""></PhLabelPrimDiv>
            <PhLabelText name=""></PhLabelText>
            <PhLabelText name=""></PhLabelText>
            <PhLabelText name=""></PhLabelText>
            <PhLabelPrim name=""></PhLabelPrim>
            <PhLabelPrim name=""></PhLabelPrim>
            <PhLabelPrim name=""></PhLabelPrim>
            <PhLabelPrim name=""></PhLabelPrim>
            <PhLabelPrim name=""></PhLabelPrim>
            <PhLabelPrim name=""></PhLabelPrim>
            <PhLabelPrim name=""></PhLabelPrim>
            <PhLabelPrim name=""></PhLabelPrim>
            <PhLabelPrim name=""></PhLabelPrim>
            <PhLabelPrim name=""></PhLabelPrim>
        </PhLevelMeter>

    </PhScene>

Progress is correct too
Code:
<PhScene name="nas_dialog">
        <PhCamera name="camera"></PhCamera>
        <PhWidget name="mbox_seat">
            <PhPlane name="mbox_show_plane"></PhPlane>
            <PhPlane name="mbox_show_plane2"></PhPlane>
            <PhWidget name="mbox_base_plane">
                <PhInfoList name="mbox_label">
                    <PhWidget name="">
                        <PhLabelPrimDiv name=""></PhLabelPrimDiv>
                        <PhLabelPrimDiv name=""></PhLabelPrimDiv>
                        <PhLabelText name=""></PhLabelText>
                        <PhLabelText name=""></PhLabelText>
                    </PhWidget>

                    <PhScroll name="mbox_scroll"></PhScroll>
                </PhInfoList>

                <PhProgress name="mbox_progress0"></PhProgress>
                <PhText name="mbox_progress_label0"></PhText>
                <PhText name="mbox_progress_status_label0"></PhText>
            </PhWidget>

            <PhPlane name="mbox_texture0"></PhPlane>
            <PhPlane name="mbox_texture1"></PhPlane>
        </PhWidget>

    </PhScene>

As for the checkboxes, it seems that only 'CheckBoxList' is used, the actual checkbox item seems to be a PhLabelPrim ? Not sure i'll need to dump some more
 

Attachments

@sandungas

I got bored and added this to my xmb_plugin_normal.rco:
Code:
<Plane name="Plane object"></Plane>
                <Button name="Button object"></Button>
                <XList name="XList object"></XList>
                <Progress name="Progress object"></Progress>
                <Scroll name="Scroll object"></Scroll>
                <MList name="MList object"></MList>
                <MItem name="MItem object"></MItem>
                <ObjUnknown0xB name="ObjUnknown0xB object"></ObjUnknown0xB>
                <XItem name="XItem object"></XItem>
                <Text name="Text object"></Text>
                <ModelObject name="ModelObject object"></ModelObject>
                <Spin name="Spin object"></Spin>
                <Action name="Action object"></Action>
                <ItemSpin name="ItemSpin object"></ItemSpin>
                <Group name="Group object"></Group>
                <LList name="LList object"></LList>
                <LItem name="LItem object"></LItem>
                <Edit name="Edit object"></Edit>
                <Clock name="Clock object"></Clock>
                <IList name="IList object"></IList>
                <IItem name="IItem object"></IItem>
                <Icon name="Icon object"></Icon>
                <UButton name="UButton object"></UButton>
                <ObjUnknown0x1B name="ObjUnknown0x1B object"></ObjUnknown0x1B>
                <CheckboxItem name="CheckboxItem object"></CheckboxItem>
                <Meter name="Meter object"></Meter>
                <EditBox name="EditBox object"></EditBox>

The result is pretty interesting, it seems some types aren't recognised by the internal rco parser
rco objects go brrr.PNG


And here is the dump result:
Code:
        <PhPlane name="Plane object"></PhPlane>
        <PhButton name="Button object"></PhButton>
        <PhXmList name="XList object">
            <PhWidget name="xlist_orig">
                <PhXmItem name="item0"></PhXmItem>
                <PhXmItem name="item1"></PhXmItem>
                <PhXmItem name="item2"></PhXmItem>
                <PhXmItem name="item3"></PhXmItem>
                <PhXmItem name="item4"></PhXmItem>
                <PhXmItem name="item5"></PhXmItem>
                <PhXmItem name="item6"></PhXmItem>
                <PhXmItem name="item7"></PhXmItem>
                <PhXmItem name="item8"></PhXmItem>
                <PhXmItem name="item9"></PhXmItem>
                <PhXmItem name="item10"></PhXmItem>
            </PhWidget>

        </PhXmList>

        <PhProgress name="Progress object"></PhProgress>
        <PhScroll name="Scroll object"></PhScroll>
        <PhMenuList name="MList object">
            <PhWidget name="">
                <PhLabelText name=""></PhLabelText>
                <PhLabelText name=""></PhLabelText>
                <PhLabelText name=""></PhLabelText>
            </PhWidget>

        </PhMenuList>

        <PhText name="Text object"></PhText>
        <PhItemSpin name="Spin object">
            <PhWidget name="">
                <PhLabelText name=""></PhLabelText>
                <PhLabelText name=""></PhLabelText>
            </PhWidget>

        </PhItemSpin>

        <PhNumSpin name="ItemSpin object">
            <PhWidget name="">
                <PhLabelText name=""></PhLabelText>
                <PhLabelText name=""></PhLabelText>
            </PhWidget>

        </PhNumSpin>

        <PhWidget name="Group object"></PhWidget>
        <PhList name="LList object">
            <PhWidget name="">
                <PhLabelText name=""></PhLabelText>
                <PhLabelText name=""></PhLabelText>
                <PhLabelText name=""></PhLabelText>
            </PhWidget>

        </PhList>

        <PhIPAddr name="Edit object">
            <PhButton name=""></PhButton>
            <PhNumSpin name="">
                <PhWidget name="">
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                </PhWidget>

            </PhNumSpin>

            <PhLabelText name=""></PhLabelText>
            <PhLabelText name=""></PhLabelText>
            <PhLabelText name=""></PhLabelText>
            <PhLabelText name=""></PhLabelText>
            <PhLabelText name=""></PhLabelText>
            <PhLabelText name=""></PhLabelText>
            <PhLabelText name=""></PhLabelText>
        </PhIPAddr>

        <PhClock name="Clock object">
            <PhLabelText name=""></PhLabelText>
            <PhLabelText name=""></PhLabelText>
            <PhLabelText name=""></PhLabelText>
            <PhLabelText name=""></PhLabelText>
            <PhNumSpin name="">
                <PhWidget name="">
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                </PhWidget>

            </PhNumSpin>

            <PhNumSpin name="">
                <PhWidget name="">
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                </PhWidget>

            </PhNumSpin>

            <PhNumSpin name="">
                <PhWidget name="">
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                </PhWidget>

            </PhNumSpin>

            <PhNumSpin name="">
                <PhWidget name="">
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                </PhWidget>

            </PhNumSpin>

            <PhNumSpin name="">
                <PhWidget name="">
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                </PhWidget>

            </PhNumSpin>

            <PhNumSpin name="">
                <PhWidget name="">
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                </PhWidget>

            </PhNumSpin>

            <PhItemSpin name="">
                <PhWidget name="">
                    <PhLabelText name=""></PhLabelText>
                    <PhLabelText name=""></PhLabelText>
                </PhWidget>

            </PhItemSpin>

        </PhClock>

        <PhInfoList name="IList object">
            <PhWidget name="">
                <PhLabelPrimDiv name=""></PhLabelPrimDiv>
            </PhWidget>

        </PhInfoList>

        <PhXmItem name="Icon object"></PhXmItem>
        <PhButton name="UButton object"></PhButton>
        <PhLevelMeter name="Meter object">
            <PhLabelPrimDiv name=""></PhLabelPrimDiv>
            <PhLabelText name=""></PhLabelText>
            <PhLabelText name=""></PhLabelText>
            <PhLabelText name=""></PhLabelText>
            <PhLabelPrim name=""></PhLabelPrim>
            <PhLabelPrim name=""></PhLabelPrim>
        </PhLevelMeter>

        <PhText name="EditBox object"></PhText>

As you can see some types are identical, and some objects have childrens probably added directly by the vsh rco parser...
 
Back
Top