Rolling Your Own Menu
Have you ever wanted to gather all your favorite and most-used items from Second Life's main menus, and put them all in one place for easy access? Well, you can do exactly that by editing SL's XUI files!
For my own purposes, made a new sub-menu,
I also added two new menu items, for options found in the Edit tool window: Stretch Both Sides and Stretch Textures! Because they are now menu entries instead of checkboxes in the Edit window, I can assign keyboard shortcut keys to toggle them! Double-Yay!
Rather than walk through every step of editing the XML, I'll just point out the important or new things. All the editing is done in menu_viewer.xml, the same file we editted to change the keyboard shortcuts before, but I also referred to floater_tools.xml, as described later in this post.
Creating a new menu is fairly easy: just make (or duplicate and modify) a <menu> block, being careful (of course) to close the block with a </menu> tag. Gathering items from other menus is a simple matter, just copy and pasting each desired <menu_item_*> block into the middle of your new menu block. From what I can tell, the positioning attributes (bottom, left, etc.) are ignored or overridden by SL, so you don't even have to worry about getting those numbers right.
Adding the two new menu items,
The key is that all three of these options are manipulated by calling the ToggleControl function and passing the
Making the two new menu items was just a matter of looking up their control names (ScaleUniform and ScaleStretchTextures) in floater_tools.xml, and plugging them into copies of the
Doing a quick grep of the XML files, there are a handful of other miscellanious options which have control_names. This suggests to me that menus could be built to change these too. Some notable example uses are: (un)muting audio; the Copy Selection tool; toggling chat bubbles; toggling avatar names above their heads.
It may also be possible to change other options which are not simple on/off switches. For example, it just might be possible to make a menu item which changes all the render detail settings and draw distance to the minimum, for dealing with crowded areas.
Unfortunately, this dependence on knowing the option's control name means that this method does not allow us to add an "Edit Linked Parts" menu item—the checkbox in the Edit window does not refer to any control name. I still hope that it can be added somehow, but for now it's up to the Lindens.
Happy building!
For my own purposes, made a new sub-menu,
Builder Tool, which lives under the
Toolsmain menu. In it, I put lots of useful building tools and options that I took from various other menus. Now I can tear off one little menu, and have them close at hand while working! Yay!
I also added two new menu items, for options found in the Edit tool window: Stretch Both Sides and Stretch Textures! Because they are now menu entries instead of checkboxes in the Edit window, I can assign keyboard shortcut keys to toggle them! Double-Yay!
Rather than walk through every step of editing the XML, I'll just point out the important or new things. All the editing is done in menu_viewer.xml, the same file we editted to change the keyboard shortcuts before, but I also referred to floater_tools.xml, as described later in this post.
Creating a new menu is fairly easy: just make (or duplicate and modify) a <menu> block, being careful (of course) to close the block with a </menu> tag. Gathering items from other menus is a simple matter, just copy and pasting each desired <menu_item_*> block into the middle of your new menu block. From what I can tell, the positioning attributes (bottom, left, etc.) are ignored or overridden by SL, so you don't even have to worry about getting those numbers right.
Adding the two new menu items,
Stretch Both Sidesand
Stretch Textures, was not much harder. But in fact, it is only possible because of the particular way that those two options, along with the
Snap to Grid/Use Gridoption, were implemented; I suspect that they were all once menu items in the past, or were intended to be so.
Snap to Gridcurrently is a menu item in the Tools menu, and it was by examining the XML for the menu item and comparing it to the corresponding checkbox in the Edit window that I discovered that it was possible to do the same with the other two options.
The key is that all three of these options are manipulated by calling the ToggleControl function and passing the
control nameof the option. Both the menu and the checkbox refer to the SnapEnabled control name: in floater_tools.xml, the
Use Gridcheckbox has an attribute, control_name="SnapEnabled"; in menu_viewer.xml, the
Snap to Griditem has two lines which mention SnapEnabled, once in an <on_click> tag, and once in an <on_check> tag.
Making the two new menu items was just a matter of looking up their control names (ScaleUniform and ScaleStretchTextures) in floater_tools.xml, and plugging them into copies of the
Snap to Gridmenu item definition in both lines (be sure to change the text labels to be descriptive of their new functions).
Doing a quick grep of the XML files, there are a handful of other miscellanious options which have control_names. This suggests to me that menus could be built to change these too. Some notable example uses are: (un)muting audio; the Copy Selection tool; toggling chat bubbles; toggling avatar names above their heads.
It may also be possible to change other options which are not simple on/off switches. For example, it just might be possible to make a menu item which changes all the render detail settings and draw distance to the minimum, for dealing with crowded areas.
Unfortunately, this dependence on knowing the option's control name means that this method does not allow us to add an "Edit Linked Parts" menu item—the checkbox in the Edit window does not refer to any control name. I still hope that it can be added somehow, but for now it's up to the Lindens.
Happy building!
3 comments:
Not wanting to sound stupid, but, what the heck. Do the weekly updates wipe out the XML and ini files if you change them?
Wow... you are seriously deep into SL! The limited time I have to spend there usually goes straight into socializing.
Still, I find it fascinating to read up on all the hacks, even if I never get to perform them, myself. Thanks for taking the time to explore and then report back on all your findings!
Have you had any luck messing around with the Show Avatar Names part? I looked into the Debug Settings and found that the radioboxes return an integer value starting with index 0 and ending with numberofitems-1, but I'm having absolutely no luck setting RenderName to an appropriate value using menu_item_call or menu_item_check.
Not that I really expected it to be supported, but I thought I might be able to hack something together with menu_item_check (which should be boolean) since the only values I care about are 0 and 1 anyway. It'd be great to have names off at all times and then hit a shortcut to display them briefly.
And thus I am kerpwn3d. :|
Post a Comment