LibQTipClick-1.1

Getting Started

Usage

Get a reference to the library:

 local QTC = LibStub("LibQTipClick-1.1")

Other than the callbacks, usage is exactly as in LibQTip-1.0.

Supported callbacks

  • OnEnter
  • OnLeave
  • OnMouseDown
  • OnMouseUp

These functions are set as callbacks by the tooltip itself. Not setting a function uses the library default.

Examples

In these examples, we assign a callback handler to the tooltip for OnMouseDown, and assign values to the cells. Note that "MouseHandler", "EnterHandler", and "LeaveHandler" are simply the names used in these examples - in your code they can be whatever you want.

 local function myFunc()
         tooltip = QTC:Acquire("MyAddonNameTooltip", 3, "LEFT", "LEFT", "CENTER")
         -- Assign the callback to the tooltip
         tooltip:SetCallback("OnMouseDown", MouseHandler)
         local y, x = tooltip:AddLine()
         y, x = tooltip:SetCell(y, 1, "Cell 1", "c1")
         y, x = tooltip:SetCell(y, 2, "Cell 2", "c2")
         y, x = tooltip:SetCell(y, 3, "Cell 3", "c3")
         tooltip:Show()
 end

This example uses closures, which should generally be avoided because it makes more work for Lua's garbage collector by creating new functions every time the example function is called.

 local function myFunc()
         tooltip = QTC:Acquire("MyAddonNameTooltip", 3, "LEFT", "LEFT", "CENTER")
         -- Assign the callback to the tooltip
         tooltip:SetCallback("OnMouseDown", MouseHandler)
         local y, x = tooltip:AddLine()
         y, x = tooltip:SetCell(y, 1, "Cell 1", function() return "You clicked cell 1!" end)
         y, x = tooltip:SetCell(y, 2, "Cell 2", function() return "You clicked cell 2!" end)
         y, x = tooltip:SetCell(y, 3, "Cell 3", function() return "You clicked cell 3!" end)
         tooltip:Show()
 end

The MouseHandler function

This is a very simple handler: It assigns a string based on the value of "arg" and prints it to the default chat frame.

local function MouseHandler(event, cell, arg, button)
        local str
        if arg == "c1" then
                str = "#1"
        elseif arg == "c2" then
                str = "#2"
        elseif arg == "c3" then
                str = "#3"
        end
        DEFAULT_CHAT_FRAME:AddMessage("You clicked cell "..str)
 end

In this version of MouseHandler, "arg" has been passed as a function which returns a string.

 local function MouseHandler(event, cell, arg, button)
         local text = arg()
         DEFAULT_CHAT_FRAME:AddMessage(text)
 end

This example illustrates how to handle cases where "arg" can be of mixed types. For the purposes of this example, "arg" returns no value when passed as a function and has members named "message" and "func" when passed as a table.

 local function MouseHandler(event, cell, arg, button)
        if type(arg) == "function" then
                arg()
        elseif type(arg) == "table" then
                DEFAULT_CHAT_FRAME:AddMessage(arg.message)
                arg.func()
        elseif arg == "c1" then
                DEFAULT_CHAT_FRAME:AddMessage("You clicked cell #1")
        end
 end

Here, we want to do different things based on which mouse button is used.

local function MouseHandler(event, cell, arg, button)
        if button == "LeftButton" then
                -- Do something with arg, perhaps.
        elseif button == "MiddleButton" then
                -- Do something with arg, perhaps.
        else
                -- Do something with arg, perhaps.
        end
end

The EnterHandler and LeaveHandler functions

There are occasions when changing the default behavior for mousing into and out of a cell is desirable. The main difference between these and the OnMouseDown handler is that these lack a "button" parameter.

However, once they are changed the default behavior of highlighting the cell no longer functions unless explicitly called from within the new handler using the library's default OnEnter and OnLeave functions. Since the cell must be passed as the only parameter to these functions, dot-notation must be used instead of colon-notation.

We set a custom OnEnter handler, but wish to retain the highlighting behavior.

local function EnterHandler(event, cell, arg)
        DEFAULT_CHAT_FRAME:AddMessage("The cell's arg parameter is "..arg)
        QTC.OnEnter(event, cell, arg)
end

If a custom OnLeave handler was specified and the OnEnter handler highlights the cell, we must explicitly un-highlight it when we call OnLeave.

local function LeaveHandler(event, cell, arg)
        DEFAULT_CHAT_FRAME:AddMessage("The cell's arg parameter is "..arg)
        QTC.OnLeave(event, cell, arg)
end

Setting Callbacks on Non-Tooltip Objects

The Library also has the ability to designate another object's embedded methods as a callback. In this case, dot-notation (tooltip.SetCallback) is used instead of colon-notation (tooltip:SetCallback) because we'll be passing the object as the first argument to SetCallBack(). In this example, we'll use the main AddOn object.

 local function myFunc()
         tooltip = QTC:Acquire("MyAddonNameTooltip", 3, "LEFT", "LEFT", "CENTER")
         -- Assign the callback to the AddOn object
         tooltip.SetCallback(myAddOn, "OnMouseDown", "someFunc")
         -- The rest of the code goes below.
 end

This would cause myAddon:someFunc() to fire as the OnMouseDown handler for the tooltip.

You must login to post a comment. Don't have an account? Register to get one!

  • 2 comments
  • Avatar of Torhal Torhal Jun 07, 2009 at 13:27 UTC - 0 likes

    Because it says: In this version of MouseHandler, "arg" has been passed as a function which returns a string.

  • Avatar of ReebooTheMad ReebooTheMad May 28, 2009 at 20:03 UTC - 0 likes

    Why

    local function MouseHandler(event, cell, arg, button)
             local text = arg()
             DEFAULT_CHAT_FRAME:AddMessage(text)
    end
    

    and not

    local function MouseHandler(event, cell, arg, button)
             DEFAULT_CHAT_FRAME:AddMessage(arg)
    end
    

    ?

    Just asking, because the first one produces an error for me: attempt to call local 'arg' (a string value)

  • 2 comments