Flex Bar has some GUI stuff

Flexbar is arcane: Okay - this criticism holds water -- the programmer of Flexbar found Vi to be user friendly. The heavy reliance on slash commands stems from both that and the fact that editing GUI elements in WoW is a royal pain.

However, Flexbar 1.37 has several GUI panels to make some things a bit easier.

- Global Options - from here you can set things such as verbose level, tooltips, load speed and more
- Event Editor -- Forget countless tries of /flexbar xxx on xxxx - The event editor makes adding, editing and deleting events much easier. It includes context sensitive lists of potential values for each parameter -- makes remembering the spelling of some of my longer event names much easier.
- Performance Panel -- Set event checking for some of the CPU hogs to off or low to get better performance. There is a penalty for some of this, if you turn of Unit Buffs (or set it to low) the conditionals unitbuff/unitdebuff/unitdebufftype will not work. However, in most cases (particularly isusable, enoughmana, cooldown, inrange) setting to low is a very good idea.
- Scripts Editor -- A simple text editor that will allow you to write scripts/macros/config files up to 10240 characters, save them to SavedVariables.lua and run them as script/macro/configs from the editor. A saved macro/script can later be used in runmacro/script or flexmacro/script commands.
- Auto Items Manager -- A simple panel to allow you to toggle on/off auto items.

For all windows - escape will close any open menus, if there are no open menus it will close any open GUI panels, if there are no open GUI panels it will close the FlexBar Main Menu, if it isn't open it will behave like normal.

Look in KeyBindings in the Main Game Menu for direct bindings to the FlexBar main menu and to all these panels.

Global Options

1. Load Speed: This defaults to std (standard) which has a pause in it before loading the profile. The reason for this was a poor design decision early on in FlexBar that caused WoW to store where it thought some of the buttons should be. The conflict cause some of them to move. I have fixed this in the XML - BUT, if you have had flexbar before then those locations are cached. If you want to use fast load, go to your World of Warcraft\WTF\Account\<account name>\<character name>\ directory to the layout-cache.txt file. Remove all entries with "FlexFrame" in them (or delete it entirely). This may cause some of your empty buttons to show a clear background - just drag an action them, then remove it, that will fix it. Now you can toggle fast load. Safe load is a holdover from the lost configurations, there should be no need for it now.
2. Detailed Feedback: Also known as verbose mode, this gives a great deal of feed back on the actions FlexBar is taking. Keep it off most times for your sanity.
3. Hide Tooltips: Check to hide FlexBar Button tooltips
4. Force Shading: This will enable buttons to automatically shade red if they are out of range, green if they are unusable and blue if they don't have enough mana.
5. Auto Performance: Check to have FlexBar try to automatically set your event notification level. For any event group which does not have one of its events int he event list, that event group will be turned off (see performance panel). For any event group with an event in the event list, it will be set to low. Please be aware of the potential problems this will cause with certain conditionals. See performance panel for details.

Event Editor:

The most powerful part of FlexBar is also its most difficult to manage - taking actions on events. Among the problems I've seen are: Long and not consistently named events, a lack of understanding of the possible targets for events and a cumbersome interface for editing/adding/deleting events.

Enter the Event Editor window:

> At the top is a scrolling list of events (scroll with either the large arrow buttons on the top left or with your scroll wheel). To the right of each event are 5 buttons - EDT (edit this event), DEL (insert above this line), DEL (delete this event), a down arrow (swap this event with the one underneath it) and and up arrow (swap this event with the one above it).

> At the bottom is a set of entry boxes for the various parameters of an event - most with drop-down menus accessed by the down arrow to the right. For every event the following fields are available:

> 1. On= This is the event name to watch for. The drop down list is prepopulated with EVERY event that FlexBar currently raises. If you hand type the event, single quotes are still required. On tabbing out of this box, the drop down arrow to the second box becomes available.
> 2. Target= This is the target that raised the event. The drop down menu will contain a list of possible targets if the are available. Most events have a limited list of possible targets. Some, however, I was unable to enumerate when I wrote this. Among those are buff names, debuff names and aura names and combat targets. What I've had FlexBar do is keep track of every buff/debuff/combat type/aura name it sees so it eventually will give you a better list of these. One thing you should do is turn the event group Unit Combat to high and go melee a bit to populate that list with the 5 actions in your native language.
> 3. If = This has a dual drop down - one a list of conditionals and the other a list of (,),and,or,not - use these to build your if expression. One thing it does not have is auto target fill in for the conditions, you'll still have to do that manually.
> 4. Command= This is the command you want to execute on that event, the drop down shows a list of all commands that can be do on an event. On selecting a command, a series of parameter boxes appear with drops downs for each paramter the command can take.
> 5. In= This is the delay to wait before executing the command. Delay is in tenths of a second
> 6. Tname= This the optional name for the timer started with the In= parameter, using this name the timer can be terminated
> 7. TToggle= The only value for this is 'true' - if it is true, then if a timer is already running with that name, it is cancelled.

> Below this are the command specific parameters

> Finally there are two buttons -

> > - <Save All Changes> saves the current event to the event list
> > - <Cancel All Changes> erases the current event info

> See the topic "Advanced Use: Events, Delays and Conditionals" for examples.

Performance Panel:

FlexBar has a lot going on under the hood, and this brings up justified worries about its impact on framerates. In order to address this, the Performance Panel allows you to customize Event detection and reporting to reduce CPU load.

Every event is part of an Events Group (see the detailed list of events for the group name for each event). The performance panel has a button for each group with options of Off, Low and High.

> OFF At this setting the events in the group will not be raised at all, moreover the least amount of processing takes place determining that we don't want to do it (for polled events like isusable, inrange etc, the timer on which these states are checked are turned off. For events that happen off of WoW events, we exit in the first line of the handler) For some (like buttonpresses) it just disables reporting (so we don't process the event list - although it is a negligible savings, since that routine exits immediately if we don't have any commands attached to that event)

> LOW At Low, the event is processed, but it is raised only for those targets that are specified in the events list. IE: if the only usable event we have in the list is Show Button=1 on='IsUsable' Target=1, then on low setting it will only raise IsUsable for button 1, not the rest. Moreover, for items like not/isusable, outof/nowinrange, (not)enoughmana, cooldownmet/start - it only loops through the buttons we are interested - potentially avoiding a tremendous amount of cpu usage. For other events it merely restricts reporting. For many events Low and High are indistinguisable (for those events with no target need).

> HIGH The default state, scan every target, report every target. Potentially CPU expensive for button the events mentioned in Low because it requires scanning each of 120 buttons for an action, then for the mana/range/usable/cooldown state of teh button of buttons with an action.

Important Caveat: Several conditionals (UnitBuff/UnitDebuff/UnitDebuffType/HasBuff/HasDeBuff/HasDebuffType) are dependent on the event group of the associated events being turned to high to always produce accurate results. If it is turned to Low, then these conditionals will only be accurate for units specified as targets of one of the events. If you are a class with buffs or the ability to dispell debuffs, I recommend this either be turned to High, or (in the case of having Auto Performance set) you include the units you are interested in in dummy events: EG Runscript Script='do end' on='UnitBuff' Target=['player' 'party1' 'party2' 'party3' 'party4'] -- this will force FlexBar to keep this info up to date.

Scripts Editor:

The FlexBar scripts editor provides a (very) simple note-pad like editor that can hold 10240 characters. There are some quirks to it: Hitting home or end will take you to the beginning/end of the whole edit box, not the line as in a regular editor. If you hit return at the bottom of the editor and it is the last line in the script the cursor will dissappear below the border until you start typing -- just keep an extra blank line at the bottom to avoid this. Clicking in the box sometimes causes a large portion to be highlighted, be careful.

At the bottom of the window are several UI elements

- The Script Name Edit box, this is where you'll type in the name of a script to be loaded, deleted or saved to. To the right of this box is a down arrow that will show a list of all saved scripts - clicking on one will load its name in the Name edit box, right-clicking will load the script into the editor as well.
- Run - as <Script> -- This button will execute the contents of the script box as Lua code. Do not use this option for FlexBar commands or Macro (slash) commands - it will just give you an error.
- Run - as <Macro> -- This button executes each line as though you had typed it at the command line of WoW. Do not use this for lua code or multiple flexbar commands (the first it will just say the lua code, the second causes timing issues with some commands).
- Configuration - Management <Config> -- This button executes the lines in the file as FlexBar commands with the proper delay between them to help prevent timing issues.
- Configuration - Management <Import> -- The original implementation of configs had them in FlexBar_Config.lua - this has problems, but people would like to edit/keep those. Using this button, the editor will search for that config in the config.lua file and load it as a series of flexbar commands. Recommended: Import each config and resave it to SavedVariables.lua.
- Configuration - Mangement <Restore> -- Each time you run <Config> a copy of the old profile is stored to a temporary undo buffer. This buffer only holds the last profile and only lasts until logoff/reloadui. Hitting <Restore> will bring that profile back.
- <Save> -- Saves the current text block to the named location. This will overwrite any previous text block of that name without warning.
- <Delete> -- Delete the named text block - this will delete without warning.
- <Load> -- Load the named text block into the editor
- <List> -- Pop up a scrolling list of all text blocks - not as nice as the new drop down.
- <Close> -- Close script editor
- <New> -- Erase current text editor contents.

Auto Items Manager:

Note: Auto items are no longer necessary for the most part. as of WoW patch 1.6 most of this functionality is built into the default button interface, and thus into Flexbar buttons.

This window displays a scrolling list of all usable items that you have in your action bar (such as potions, bandaids and the like). To the left of each item is a check box, to the right the number of them you have and the ID at which they reside. Checking the box will cause FlexBar to try to make those items stick in that ID slot: When you run out it will keep the icon in there and it will try to reload them into that ID when you get more.

When you run out of an Auto Item, an event is raised (autoitemout) as is an event when they are replaced in the action bar.

If you are out of an Auto Item it is still displayed in the box - until you uncheck it, at which time it will dissappear.

Auto Items can not be dragged out of their buttons, nor can other actions be dragged onto them.