Quantcast
Download
(4 Kb)
Download
Updated: 10-31-16 03:32 PM
Pictures
File Info
Compatibility:
Return to Karazhan (7.1.0)
Updated:10-31-16 03:32 PM
Created:12-27-08 08:46 PM
Downloads:76,573
Favorites:319
MD5:
Categories:Action Bar Mods, Buff, Debuff, Spell
7.1.0

rButtonTemplate  Popular! (More than 5000 hits)

Version: 710.20161031
by: zork [More]


Intro

rButtonTemplate is a framework to theme Blizzard action, aura and item buttons. It does nothing on its own, needs a theme.
API documentation
https://github.com/zorker/rothui/blo...late/README.me (Check the themes for examples)
Quick-Links
rActionBar, rActionBar_Default, rActionBar_Zork, rBuffFrame, rBuffFrame_Default, rBuffFrame_Zork, rButtonTemplate, rButtonTemplate_Default, rButtonTemplate_Zork
Git
https://github.com/zorker/rothui/tre...ButtonTemplate

Optional Files (20)
File Name
Version
Size
Author
Date
Type
1.0-2016112001
4kB
11-19-16 07:31 PM
Addon
710.20161117
14kB
11-17-16 11:42 AM
Addon
700.20161004
23kB
10-04-16 06:24 AM
Addon
1.3
80kB
11-29-10 02:09 PM
Addon
1.0
22kB
11-14-10 06:23 PM
Addon
1.2
24kB
11-09-10 02:59 PM
Addon
1.0
3kB
11-05-10 09:22 AM
Addon
rev3
6kB
07-06-10 06:25 PM
Addon
1.0
8kB
04-25-10 01:32 PM
Patch
1.0
2kB
12-06-09 12:47 PM
Addon
1.0
3kB
08-18-09 11:37 AM
Addon
1.0
10kB
07-06-09 12:02 PM
Addon
v1
16kB
06-17-09 06:57 PM
Addon
v1.3
18kB
02-19-09 12:10 PM
Addon
001
21kB
01-23-09 03:24 AM
Addon
1.0
5kB
01-22-09 09:38 AM
Addon
003
6kB
01-20-09 08:16 PM
Patch
001
15kB
01-20-09 03:59 PM
Addon
001
10kB
01-20-09 03:58 PM
Addon
0.1
7kB
01-17-09 10:12 AM
Addon


Archived Files (26)
File Name
Version
Size
Author
Date
710.20161027
4kB
zork
10-27-16 12:37 PM
700.20161009
4kB
zork
10-09-16 02:21 PM
700.20161004
4kB
zork
10-04-16 06:21 AM
60000.01
24kB
zork
10-24-14 07:47 PM
50400.01
24kB
zork
09-16-13 04:44 AM
50200.01
24kB
zork
03-04-13 05:37 PM
50100.01
24kB
zork
11-28-12 01:27 PM
50001.07
24kB
zork
11-21-12 12:24 PM
50001.06
24kB
zork
09-21-12 02:19 PM
40300.06
23kB
zork
02-16-12 03:14 PM
40300.05
23kB
zork
02-15-12 04:59 PM
40300.04
23kB
zork
01-20-12 12:51 PM
40300.03
23kB
zork
12-04-11 05:16 PM
40300.02
23kB
zork
11-30-11 01:45 PM
40300.01
23kB
zork
11-30-11 12:35 PM
4.007
23kB
zork
06-29-11 03:40 PM
4.006
23kB
zork
04-28-11 11:40 AM
4.005
23kB
zork
02-09-11 01:55 PM
4.004
23kB
zork
10-17-10 07:16 AM
4.003
18kB
zork
10-16-10 06:03 AM
4.001
18kB
zork
10-15-10 03:40 PM
100812
18kB
zork
08-12-10 03:11 PM
005
18kB
zork
08-02-09 06:42 AM
004-2
17kB
zork
04-18-09 08:28 PM
003
17kB
zork
01-20-09 04:04 PM
002
12kB
zork
01-17-09 07:20 AM


Post A Reply Comment Options
Unread 08-01-09, 06:15 AM  
zork
A Pyroguard Emberseer
 
zork's Avatar
AddOn Author - Click to view AddOns

Forum posts: 1632
File comments: 3612
Uploads: 118
Ok code is done I guess. Currently beta testing. Help me if you want:

Replace the rActionButtonStyler.lua code with the one below.
Code:
  
  --rActionButtonStyler - roth 2009

  local _G = _G
  
  ---------------------------------------
  -- CONFIG 
  ---------------------------------------
  
  --TEXTURES
  --default border texture  
  local rb2_normal_texture    = "Interface\\AddOns\\rActionButtonStyler\\media\\gloss"
  --texture when a button flashs --> button becomes ready
  local rb2_flash_texture     = "Interface\\AddOns\\rActionButtonStyler\\media\\flash"
  --hover textures
  local rb2_hover_texture     = "Interface\\AddOns\\rActionButtonStyler\\media\\hover"    
  --texture if you push that button
  local rb2_pushed_texture    = "Interface\\AddOns\\rActionButtonStyler\\media\\pushed"
  --texture that is active when the button is in active state (next melee swing attacks mostly)
  local rb2_checked_texture   = "Interface\\AddOns\\rActionButtonStyler\\media\\checked" 
  --texture used for equipped items, this can differ since you may want to apply a different vertexcolor
  local rb2_equipped_texture  = "Interface\\AddOns\\rActionButtonStyler\\media\\gloss_grey"

  --FONT
  --the font you want to use for your button texts
  local button_font = "Fonts\\FRIZQT__.TTF"
  
  --hide the hotkey? 0/1
  local hide_hotkey = 0
  
  --use dominos? 0/1
  local use_dominos = 0
    
  --COLORS
  --color you want to appy to the standard texture (red, green, blue in RGB)
  local color = { r = 0.37, g = 0.3, b = 0.3, }
  --want class color? just comment in this:
  --local color = RAID_CLASS_COLORS[select(2, UnitClass("player"))]

  --color for equipped border texture (red, green, blue in RGB)
  local color_equipped = { r = 0, g = 0.5, b = 0, }
  
  --color when out of range
  local range_color = { r = 0.8, g = 0.1, b = 0.1, }
    
--color when out of power (mana)
  local mana_color = { r = 0.1, g = 0.3, b = 1, }

  --color when button is usable
  local usable_color = { r = 1, g = 1, b = 1, }
  
  --color when button is unusable (example revenge not active, since you have not blocked yet)
  local unusable_color = { r = 0.4, g = 0.4, b = 0.4, }

  -- !!!IMPORTANT!!! - read this before editing the value blow
  -- !!!do not set this below 0.1 ever!!!
  -- you have 120 actionbuttons on screen (most of you have at 80) and each of them will get updated on this timer in seconds
  -- default is 1, it is needed for the rangecheck
  -- if you dont want it just set the timer to 999 and the cpu usage will be near zero
  -- if you set the timer to 0 it will update all your 120 buttons on every single frame
  -- so if you have 120FPS it will call the function 14.400 times a second!
  -- if the timer is 1 it will call the function 120 times a second (depends on actionbuttons in screen)
  local update_timer = 1

  ---------------------------------------
  -- CONFIG END
  ---------------------------------------

  -- DO NOT TOUCH ANYTHING BELOW!

  ---------------------------------------
  -- FUNCTIONS
  ---------------------------------------
  
  --initial style func
  local function rActionButtonStyler_AB_style(self)
  
    local action = self.action
    local name = self:GetName()
    local bu  = _G[name]
    local ic  = _G[name.."Icon"]
    local co  = _G[name.."Count"]
    local bo  = _G[name.."Border"]
    local ho  = _G[name.."HotKey"]
    local cd  = _G[name.."Cooldown"]
    local na  = _G[name.."Name"]
    local fl  = _G[name.."Flash"]
    local nt  = _G[name.."NormalTexture"]
    
    nt:SetHeight(bu:GetHeight())
    nt:SetWidth(bu:GetWidth())
    nt:SetPoint("Center", 0, 0)
    bo:Hide()
    
    ho:SetFont(button_font, 18, "OUTLINE")
    co:SetFont(button_font, 18, "OUTLINE")
    na:SetFont(button_font, 12, "OUTLINE")
    if hide_hotkey == 1 then
      ho:Hide()
    end
    na:Hide()
  
    fl:SetTexture(rb2_flash_texture)
    bu:SetHighlightTexture(rb2_hover_texture)
    bu:SetPushedTexture(rb2_pushed_texture)
    bu:SetCheckedTexture(rb2_checked_texture)
    bu:SetNormalTexture(rb2_normal_texture)
  
    ic:SetTexCoord(0.1,0.9,0.1,0.9)
    ic:SetPoint("TOPLEFT", bu, "TOPLEFT", 2, -2)
    ic:SetPoint("BOTTOMRIGHT", bu, "BOTTOMRIGHT", -2, 2)
  
    if ( IsEquippedAction(action) ) then
      bu:SetNormalTexture(rb2_equipped_texture)
      nt:SetVertexColor(color_equipped.r,color_equipped.g,color_equipped.b,1)
    else
      bu:SetNormalTexture(rb2_normal_texture)
      nt:SetVertexColor(color.r,color.g,color.b,1)
    end  
  
  end
  
  --style pet buttons
  local function rActionButtonStyler_AB_stylepet()
    
    for i=1, NUM_PET_ACTION_SLOTS do
      local name = "PetActionButton"..i
      local bu  = _G[name]
      local ic  = _G[name.."Icon"]
      local fl  = _G[name.."Flash"]
      local nt  = _G[name.."NormalTexture2"]
  
      nt:SetHeight(bu:GetHeight())
      nt:SetWidth(bu:GetWidth())
      nt:SetPoint("Center", 0, 0)
      
      nt:SetVertexColor(color.r,color.g,color.b,1)
      
      fl:SetTexture(rb2_flash_texture)
      bu:SetHighlightTexture(rb2_hover_texture)
      bu:SetPushedTexture(rb2_pushed_texture)
      bu:SetCheckedTexture(rb2_checked_texture)
      bu:SetNormalTexture(rb2_normal_texture)
    
      ic:SetTexCoord(0.1,0.9,0.1,0.9)
      ic:SetPoint("TOPLEFT", bu, "TOPLEFT", 2, -2)
      ic:SetPoint("BOTTOMRIGHT", bu, "BOTTOMRIGHT", -2, 2)
      
    end  
  end
  
  --style shapeshift buttons
  local function rActionButtonStyler_AB_styleshapeshift()    
    for i=1, NUM_SHAPESHIFT_SLOTS do
      local name = "ShapeshiftButton"..i
      local bu  = _G[name]
      local ic  = _G[name.."Icon"]
      local fl  = _G[name.."Flash"]
      local nt  = _G[name.."NormalTexture"]
  
      nt:ClearAllPoints()
      nt:SetPoint("TOPLEFT", bu, "TOPLEFT", 0, 0)
      nt:SetPoint("BOTTOMRIGHT", bu, "BOTTOMRIGHT", 0, 0)
      
      nt:SetVertexColor(color.r,color.g,color.b,1)
      
      fl:SetTexture(rb2_flash_texture)
      bu:SetHighlightTexture(rb2_hover_texture)
      bu:SetPushedTexture(rb2_pushed_texture)
      bu:SetCheckedTexture(rb2_checked_texture)
      bu:SetNormalTexture(rb2_normal_texture)
    
      ic:SetTexCoord(0.1,0.9,0.1,0.9)
      ic:SetPoint("TOPLEFT", bu, "TOPLEFT", 2, -2)
      ic:SetPoint("BOTTOMRIGHT", bu, "BOTTOMRIGHT", -2, 2)  
    end    
  end
  
  --fix the grid display
  --the default function has a bug and once you move a button the alpha stays at 0.5, this gets fixed here
  local function rActionButtonStyler_AB_fixgrid(button)
    local name = button:GetName()
    local action = button.action
    local nt  = _G[name.."NormalTexture"]
    if ( IsEquippedAction(action) ) then
      nt:SetVertexColor(color_equipped.r,color_equipped.g,color_equipped.b,1)
    else
      nt:SetVertexColor(color.r,color.g,color.b,1)
    end  
  end
  
  --update the button colors onUpdateUsable
  local function rActionButtonStyler_AB_usable(self)
    local name = self:GetName()
    local action = self.action
    local nt  = _G[name.."NormalTexture"]
    local icon = _G[name.."Icon"]
    if ( IsEquippedAction(action) ) then
      nt:SetVertexColor(color_equipped.r,color_equipped.g,color_equipped.b,1)
    else
      nt:SetVertexColor(color.r,color.g,color.b,1)
    end  
    local isUsable, notEnoughMana = IsUsableAction(action)
    if (ActionHasRange(action) and IsActionInRange(action) == 0) then
      icon:SetVertexColor(range_color.r,range_color.g,range_color.b,1)
      return
    elseif (notEnoughMana) then
      icon:SetVertexColor(mana_color.r,mana_color.g,mana_color.b,1)
      return
    elseif (isUsable) then
      icon:SetVertexColor(usable_color.r,usable_color.g,usable_color.b,1)
      return
    else
      icon:SetVertexColor(unusable_color.r,unusable_color.g,unusable_color.b,1);
      return
    end
  end
  
  --rewrite of the onupdate func
  --much less cpu usage needed
  local function rActionButtonStyler_AB_onupdate(self,elapsed)
    local t = self.rABS_range
    if (not t) then
      self.rABS_range = 0
      return
    end
    t = t + elapsed
    if (t<update_timer) then
      self.rABS_range = t
      return
    else
      self.rABS_range = 0
      rActionButtonStyler_AB_usable(self)
    end
  end
  
  --hotkey func
  --is only needed when you want to hide the hotkeys and use the default barmod (Dominos does not need this)
  local function rActionButtonStyler_AB_hotkey(self, actionButtonType)
    if (not actionButtonType) then
      actionButtonType = "ACTIONBUTTON";
    end
    local hotkey = _G[self:GetName().."HotKey"]
    local key = GetBindingKey(actionButtonType..self:GetID()) or GetBindingKey("CLICK "..self:GetName()..":LeftButton");
   	local text = GetBindingText(key, "KEY_", 1);
    hotkey:SetText(text);
    hotkey:Hide()
  end 
  
  
  ---------------------------------------
  -- CALLS // HOOKS
  ---------------------------------------
  
  hooksecurefunc("ActionButton_Update",   rActionButtonStyler_AB_style)
  hooksecurefunc("ActionButton_UpdateUsable",   rActionButtonStyler_AB_usable)
  
  --rewrite default onUpdateFunc, the new one uses much less CPU power
  ActionButton_OnUpdate = rActionButtonStyler_AB_onupdate
  
  --fix grid
  hooksecurefunc("ActionButton_ShowGrid", rActionButtonStyler_AB_fixgrid)
  
  --call the special func to hide hotkeys after entering combat with the default actionbar
  if hide_hotkey == 1 and use_dominos == 0 then
    hooksecurefunc("ActionButton_UpdateHotkeys", rActionButtonStyler_AB_hotkey)
  end
  
  hooksecurefunc("ShapeshiftBar_OnLoad",   rActionButtonStyler_AB_styleshapeshift)
  hooksecurefunc("ShapeshiftBar_Update",   rActionButtonStyler_AB_styleshapeshift)
  hooksecurefunc("ShapeshiftBar_UpdateState",   rActionButtonStyler_AB_styleshapeshift)
  hooksecurefunc("PetActionBar_Update",   rActionButtonStyler_AB_stylepet)
__________________
| Simple is beautiful.
| WoWI AddOns | GitHub | Zork (WoW) | TDMOG

"I wonder what the non-pathetic people are doing tonight?" - Rajesh Koothrappali (The Big Bang Theory)
Last edited by zork : 08-01-09 at 06:16 AM.
Report comment to moderator  
Reply With Quote
Unread 08-01-09, 04:00 AM  
zork
A Pyroguard Emberseer
 
zork's Avatar
AddOn Author - Click to view AddOns

Forum posts: 1632
File comments: 3612
Uploads: 118
Additionally I am currently working on a workaround for the onUpdate func. The problem is that this function is called so often and you can only hook it. The CPU usage of that function is just insane. If you hook it the CPU usage gets visible. But I think its not possible to fix it only completly disabling the function would do it, but that is not allowed the function is secured.

Hmm...that is interesting. I seem to be allowed to rewrite the Blizzard function. This is good since the old bastard gets simply replaced.

I will release an updated version tomorrow. Went down from 140 to 13 CPU usage...the blizzard function just calls itself to often again. Tested it in combat and still no error messages. Good.
__________________
| Simple is beautiful.
| WoWI AddOns | GitHub | Zork (WoW) | TDMOG

"I wonder what the non-pathetic people are doing tonight?" - Rajesh Koothrappali (The Big Bang Theory)
Last edited by zork : 08-01-09 at 04:23 AM.
Report comment to moderator  
Reply With Quote
Unread 08-01-09, 03:45 AM  
zork
A Pyroguard Emberseer
 
zork's Avatar
AddOn Author - Click to view AddOns

Forum posts: 1632
File comments: 3612
Uploads: 118
Ok this is easy. Dominos has a own functionality to keep KeyBinds active while in combat. So the rActionButtonStyler_AB_hotkey() function is not needed, thus the function call can be commented out. Additional the initial "hide" of the hotkey needs to be commented out aswell this is in the rActionButtonStyler_AB_style() function.

So for easier use.

Change line 46 from (comment out the initial setup)
Code:
  ho:Hide()
to
Code:
  --ho:Hide()
and change line 187 from (comment out the function call)
Code:
hooksecurefunc("ActionButton_UpdateHotkeys", rActionButtonStyler_AB_hotkey)
to
Code:
--hooksecurefunc("ActionButton_UpdateHotkeys", rActionButtonStyler_AB_hotkey)
Thats it.
__________________
| Simple is beautiful.
| WoWI AddOns | GitHub | Zork (WoW) | TDMOG

"I wonder what the non-pathetic people are doing tonight?" - Rajesh Koothrappali (The Big Bang Theory)
Last edited by zork : 08-01-09 at 03:46 AM.
Report comment to moderator  
Reply With Quote
Unread 07-31-09, 08:25 PM  
MastaM00
A Kobold Labourer

Forum posts: 0
File comments: 3
Uploads: 0
Has there been any movement on the missing keybinding text issue with Dominos?

I tried commenting out the hide call and adding a show to no avail.

--hotkey:Hide()
hotkey:Show()
Report comment to moderator  
Reply With Quote
Unread 07-21-09, 07:20 AM  
Rintrah
A Defias Bandit

Forum posts: 2
File comments: 15
Uploads: 0
Alright, thanks a lot. Again, I don't mean to sound like an ass hating on your mod - I really like it. Sounds like its out of your control due to blizz api, but range check isn't something I'm really worried about so that will be fine for me.
Report comment to moderator  
Reply With Quote
Unread 07-21-09, 06:58 AM  
zork
A Pyroguard Emberseer
 
zork's Avatar
AddOn Author - Click to view AddOns

Forum posts: 1632
File comments: 3612
Uploads: 118
What pretty much kills any fps are so called "OnUpdate" functions. Those are loops that call themself on a given timer. Whats the problem on this with buttons is that any button on screen has such a OnUpdate function. Normal addons may use 1-2 of these functions but the Blizzard actionbars use this for every button on screen.

When does it get used. One word: "range-check". Everything else on your buttons can be handled by so called events, but the range-check can not.
If you set the timer to high your range check will look kinda laggy. If you set it to low you will kill your fps.

What you can do is to comment out this line
Code:
hooksecurefunc("ActionButton_OnUpdate",   rActionButtonStyler_AB_onupdate)
make it
Code:
--hooksecurefunc("ActionButton_OnUpdate",   rActionButtonStyler_AB_onupdate)
This will remove any onUpdate functionality from rButtonStyler. Btw...RedRange uses the same technique.
__________________
| Simple is beautiful.
| WoWI AddOns | GitHub | Zork (WoW) | TDMOG

"I wonder what the non-pathetic people are doing tonight?" - Rajesh Koothrappali (The Big Bang Theory)
Report comment to moderator  
Reply With Quote
Unread 07-20-09, 02:01 PM  
Rintrah
A Defias Bandit

Forum posts: 2
File comments: 15
Uploads: 0
Originally posted by zork
This is no big deal since the performance stays the same since the default function would also be used without any addons. You just could not track it, since it is a Blizzard function.
I'm sure you know what you're talking about, but my experience is different. I keep coming back to your buttonstyler, but if I'm running rbarstyler alone doing an FPS-intensive fight like Algalon everything runs smooth. If I enable rbuttonstyler with no other changes I get a huge FPS hit (~10-12 fps change, which matters a lot in a raid setting like Algalon where there is particles everywhere). If rbuttonstyler using no more cpu than the blizzard function this would no be happening, no? Is it reapplying all texture button textures when any single update happens? ie, one button pushed = highlight = mod updates all buttons? I don't mean to sound like a ui snob and pretty ignorant about how mods work, i just really like this addon but find it unusable due to performance hit, maybe i'm just paranoid and retarded I D K
Report comment to moderator  
Reply With Quote
Unread 07-15-09, 04:42 AM  
zork
A Pyroguard Emberseer
 
zork's Avatar
AddOn Author - Click to view AddOns

Forum posts: 1632
File comments: 3612
Uploads: 118
Are you using the latest version? Make sure you do not use a version that has
Code:
RANGE_INDICATOR = "";
still in there. When Blizzard released the new questlog items this entry gave me errors. But since I removed it the error was gone.
__________________
| Simple is beautiful.
| WoWI AddOns | GitHub | Zork (WoW) | TDMOG

"I wonder what the non-pathetic people are doing tonight?" - Rajesh Koothrappali (The Big Bang Theory)
Report comment to moderator  
Reply With Quote
Unread 07-14-09, 06:43 PM  
-ReD-
A Murloc Raider

Forum posts: 5
File comments: 19
Uploads: 0
Originally posted by zork
Questhelper?
I am not sure of what you mean, but I am not using questhelper, what I mean is that when you pick up a quest (eg. a daily quest) that needs you to use an item in a certain place, the item icon appears besides the quest being tracked in the track log under your minimap, to avoid wasting time looking for it in the bags. However, everytime I try to click on that button I get that error message.
Report comment to moderator  
Reply With Quote
Unread 07-14-09, 10:19 AM  
zork
A Pyroguard Emberseer
 
zork's Avatar
AddOn Author - Click to view AddOns

Forum posts: 1632
File comments: 3612
Uploads: 118
Questhelper?
__________________
| Simple is beautiful.
| WoWI AddOns | GitHub | Zork (WoW) | TDMOG

"I wonder what the non-pathetic people are doing tonight?" - Rajesh Koothrappali (The Big Bang Theory)
Report comment to moderator  
Reply With Quote
Unread 07-14-09, 09:57 AM  
-ReD-
A Murloc Raider

Forum posts: 5
File comments: 19
Uploads: 0
Hello, I have recently started using this addon, however everytime I click on the quest items that appear right next the quest tracking log, I get the following message "ractionbuttonstyler has been blocked from an action only available to blizzard UI". Anyone knows a fix for this?
Report comment to moderator  
Reply With Quote
Unread 06-20-09, 10:53 AM  
tophero21
A Cliff Giant
 
tophero21's Avatar

Forum posts: 71
File comments: 26
Uploads: 0
note - i found that the setting did not seem to stick, by default the bindings will go back to being hidden regardless and you have to re-open your dominos settings and deselect/select the option again. seeing if i can get this figured out...
Report comment to moderator  
Reply With Quote
Unread 06-18-09, 04:05 PM  
tophero21
A Cliff Giant
 
tophero21's Avatar

Forum posts: 71
File comments: 26
Uploads: 0
you just have to comment out the line that says hotkey:Hide() and put in hotkey:Show() below it, not the whole part that he posted.

I did this while in-game, reloaded ui to pick up the change and then found that I also had to open up the dominos options and deselect/reselect the show bindings box to get them to show.
Report comment to moderator  
Reply With Quote
Unread 06-07-09, 12:21 AM  
Qupe
A Warpwood Thunder Caller
 
Qupe's Avatar
AddOn Author - Click to view AddOns

Forum posts: 92
File comments: 520
Uploads: 9
Originally posted by MoonWitch
No clue man, just thought I'd post how I solved the issue. I still have all my textures >.< But that piece of code doesn't affect texturing, only the hotkey display. Perhaps you commented out too much?
I probably did, what exact portion did you comment out?
Report comment to moderator  
Reply With Quote
Unread 06-06-09, 08:29 AM  
MoonWitch
A Firelord
AddOn Author - Click to view AddOns

Forum posts: 455
File comments: 163
Uploads: 8
Originally posted by Qupe
So is this a working fix? I tried commenting that section of code out and it did show binding text but it removed the texture from my bars.
No clue man, just thought I'd post how I solved the issue. I still have all my textures >.< But that piece of code doesn't affect texturing, only the hotkey display. Perhaps you commented out too much?
Report comment to moderator  
Reply With Quote
Post A Reply



Category Jump: