Quantcast
# ViragDevTool Info

> Looking for Legion Beta to test and update this addon

ViragDevTool is Lua World of Warcraft addon for addon-developers.
Functionality is similar to a debugger.

This addon can help new developers to understand WoW API.
Main idea is to examine WoW API or your addon's variables in table-like UI.
Much easier to use then default print or chat debug

**[Curse download page](http://mods.curse.com/addons/wow/varrendevtool)**

<a href="http://www.youtube.com/watch?feature=player_embedded&v=KWC5QnATlwE
" target="_blank"><img src="http://img.youtube.com/vi/KWC5QnATlwE/0.jpg"
alt="Video Demo" width="400" height="200" border="10" /></a>

## How To Use

Main (and the only) function you can use is **ViragDevTool_AddData(data, "some string name")**:

```lua
--- Adds data to ViragDevTool UI list to monitor
-- @param data (any type)- is object you would like to track.
-- Default behavior is reference and not object copy
-- @param dataName (string or nil) - name tag to show in UI for you variable.
-- Main purpose is to give readable names to objects you want to track.
function ViragDevTool_AddData(data, dataName)
 ...
end
```

![ViragDevTool demo][demo]

Lets suppose you have `MyModFN` function in yours addon
```lua
function MyModFN()
    local var = {}
    ... some code here
    ViragDevTool_AddData(var, "My local var in MyModFN")
end
```
This will add var as new row in ViragDevTool UI `HybridScrollFrameTemplate` list

For example
```lua
ViragDevTool_AddData(_G, "_G")
```
Output:

![ViragDevTool Global vars demo][GDemo]

| Id(Row in list)   | Type          | Data Name  | Data Value  |
| ----------------- | ------------- | ---------- | -----------------------|

#### Here is how i use ViragDevTool_AddData:
```lua
--define print fn so we can easily turn it off
function MyOtherAddon_Print(strName, tData)
    if ViragDevTool_AddData and MyOtherAddon.kbDEBUG then
        ViragDevTool_AddData(tData, strName)
    end
end

-- use this function all over my code instead of print
MyOtherAddon_Print("MyOtherAddon", MyOtherAddon) -- sends object to UI
```
### How to use sidebar:
There are 3 tabs in sidebar and text field has different behavior in each tab.

* **In \vdt history tab** it is just easy way to call `/vdt ...` for example you can print `find Virag` and it is the same as printing `/vdt find Virag` in chat

* **In Events tab** textfield can only use `eventname` or `eventname unit` and this is the same as `/vdt eventadd eventname` or `/vdt eventadd unit` where eventname is Blizzard API event(http://wowwiki.wikia.com/wiki/Events_A-Z_(Full_List)) string name
For example: `UNIT_AURA player` in textbox is the same as `/vdt eventadd UNIT_AURA player` in chat
```lua
if unit then f:RegisterUnitEvent(event, unit)
else f:RegisterEvent(event) end
```
![ViragDevTool events demo][eventsDemo]

* **In Fn Call Log** tab you can type `tableName functionName` into textfield and it will try to find `_G.tableName.functionName` and if this field is a function it will be replaced with logger function like this:
```lua
tParent[fnName] = function(...)
   ViragDevTool:Add({ ... }) -- will add args to the list
   local result = { savedOldFn(...) }
   ViragDevTool:Add(result) -- will add return value to the list
   return unpack(result)
end
```
![ViragDevTool logger demo][loggerDemo]
### How to use function arguments:
You can specify coma separated arguments that will be passed to the function.
Can be string, number, nil, true/false and table
to pass table you have to specify prefix `t=` so lets suppose i want to pass ViragDevToolFrame as a argument, then the string has to be `t=ViragDevToolFrame`

Demo1: FN Call Args: `t=Frame, 12, a12` => someFunction(_G.Frame (table) , 12 (number), a12 (string))
Demo2: FN Call Args: `t=Frame.Frame2.Frame3` => someFunction(_G.Frame.Frame2.Frame3 (table))

### /CMD

* **/vdt - toggle ui**
* **/vdt help - for everything else**

### Other functionality
* **Clicking on table name** will expand and show its children
* **Clicking on function name** will try to call the function. **WARNING BE CAREFUL**
* If table has WoW API `GetObjectType()` then its type will be visible in value column
* Can monitor WoW API events
* Can log function calls:  their input args and return values

* Note: Strings in value column have no line brakes

### TODO list:

ViragDevTool is in beta  so there is lots of stuff to add and tune.

1. Create dynamic text and color size chooser (probably not everyone likes SystemFont_Small)
2. Add filters by object name and type
3. Add object deep copy option
4. Add predefined buttons for every WoW API (just like _G)
5. Add row delimiters so we can resize rows in table
6. Add function args info and description from mapping file

### How to contribute
For now this addon will be updated only when i need certain feature in my other addon's development

Preferred option is to use Github issue tracker if you have some todos, bugs, feature requests, and more.
https://github.com/varren/ViragDevTool/issues

Can also use Curse comments board
http://mods.curse.com/addons/wow/varrendevtool

> Inspired by Rover addon from Wildstar
> http://mods.curse.com/ws-addons/wildstar/220043-rover

ViragDevTool is Rover for WoW

[demo]: http://legacy.curseforge.com/media/images/89/812/1844ef88f22d780658b2150f0cc20c19.png "Logo Title Text 2"
[GDemo]: http://i.gyazo.com/e0287b175965c790b229e4b99418203d.png
[eventsDemo]: https://i.gyazo.com/1093752a1a066e7143b8cfcf1926d8da.png
[loggerDemo]: https://i.gyazo.com/ea97b93c56ee95d20a88f5ec154df5ca.png