Thread Tools Display Modes
01-20-10, 02:48 AM   #1
Amenity
Guest
Posts: n/a
Ok...I officially give up. I'm stuck and need help with the dumbest thing ever.

It's a stupid little addon to move the quest tracker and keep it there.

Pastey:

http://pastey.net/131698-1pom

The Cupcake's talkin', but ain't nobody listenin'. Debug works fine too (/atr debug). Everything that's handled north of the Cupcake is working perfectly as far as I can tell.

If I read another page on using tables in variables, methods of handling events, or "why don't you use XML?"...I may have G19 key imprints on my face for a week. I HAVE to be on the right track here, surely...it's gotta be just a little blank spot in my still-n00b Lua skillz. I hope.

Halp greatly appreciated. Will consider providing non-self-aware cupcakes in exchange.
  Reply With Quote
01-20-10, 03:48 AM   #2
Xrystal
nUI Maintainer
 
Xrystal's Avatar
Premium Member
AddOn Author - Click to view addons
Join Date: Feb 2006
Posts: 5,919
You're not alone there. I have been trying to put the quest tracker into a scrollable frame with no luck. It seems to refuse to be resized and contained within a smaller frame and moved around the screen without something going wrong. Despite other frames scrolling fine and as expected. All I can think of is that something else is done with the watchframe to stop us from controlling its dimensions and positioning directly.
__________________


Characters:
Gwynedda - 70 - Demon Warlock
Galaviel - 65 - Resto Druid
Gamaliel - 61 - Disc Priest
Gwynytha - 60 - Survival Hunter
Lienae - 60 - Resto Shaman
Plus several others below level 60

Info Panel IDs : http://www.wowinterface.com/forums/s...818#post136818
  Reply With Quote
01-20-10, 10:13 AM   #3
Amenity
Guest
Posts: n/a
Originally Posted by Xrystal View Post
You're not alone there. I have been trying to put the quest tracker into a scrollable frame with no luck. It seems to refuse to be resized and contained within a smaller frame and moved around the screen without something going wrong. Despite other frames scrolling fine and as expected. All I can think of is that something else is done with the watchframe to stop us from controlling its dimensions and positioning directly.
Gonna elaborate a bit...when I made that post I was quite exhausted, having been up all night bashing crap in there to try to make it work. (lol)

Resizing the frame (well, at least making it larger...I haven't tried shrinking it) seems to be working ok, and when I move it in-game it *seems* to stay wherever I put it (I haven't gone out questing with it or anything, but normal stuff like adding and removing quests from the tracker works fine). My issue seems to be with using SetPoint(whereIwantU) with a SavedVariable on PLAYER_ENTERING_WORLD (I've also tried other events like PLAYER_ALIVE to see if it was some weird "order of operations" thing). If I set my SetPoint in my debug slashie, it works fine (so my table call is ok) and putting a print(whateva) in my event function works too (so my OnEvent stuff is fine too).

What I *think* is happening is that my little addon here is working fine, but something after its' SetPoint is resetting the frame to its' default location. In fact, at one point I became irritated and did a reload with it in the default location, and after the reload it had pulled the old SavedVariable I had and was in its' correst user-defined spot. Subsequent reloads reverted back to its' current crap.

At this point...I think it's just taunting me:



Why Blizz removed the native ability to move this thing, I've no idea.
  Reply With Quote
01-20-10, 11:59 AM   #4
nightcracker
A Molten Giant
 
nightcracker's Avatar
AddOn Author - Click to view addons
Join Date: Sep 2009
Posts: 716
What about:

lua Code:
  1. f:ClearAllPoints() -- screw your position,
  2. f:SetPoint() -- i want mine...
  3. f.SetPoint = function() end -- forever
__________________
Three things are certain,
Death, taxes and site not found,
You, victim of one.
  Reply With Quote
01-20-10, 12:50 PM   #5
Amenity
Guest
Posts: n/a
Originally Posted by nightcracker View Post
What about:

lua Code:
  1. f:ClearAllPoints() -- screw your position,
  2. f:SetPoint() -- i want mine...
  3. f.SetPoint = function() end -- forever
You...are definitely my hero (not to be confused with "an hero"):
lua Code:
  1. local function thecupcakespeaks(self, event, addon)
  2.     if TframeLOC then
  3.         Tframe:ClearAllPoints()
  4.         Tframe:SetPoint(unpack(TframeLOC))
  5.         Tframe.SetPoint = function() end
  6.     else _ERRORMESSAGE("EPIC FAIL - NaN/0×8 IS BEING CALCULATED. EVERYTHING IS RUINED. OH SHI-")
  7.     end
  8.     --print("I AM THE SELF-AWARE CUPCAKE.")
  9. end
So far it's working great!

Really appreciate this.

**EDIT** BAH, spoke too soon. It's not liking SetHeight...again...only this time it's when you try to maximize the tracker (placement is still staying where I set it, but I can't move it from there...it won't "unlock"). Funny thing, though...it actually IS trying to divide by zero. (lol)

Back to WatchFrame.lua we go...

Last edited by Amenity : 01-20-10 at 01:19 PM.
  Reply With Quote
01-20-10, 02:05 PM   #6
Xrystal
nUI Maintainer
 
Xrystal's Avatar
Premium Member
AddOn Author - Click to view addons
Join Date: Feb 2006
Posts: 5,919
Well, spent the last hour or two re-doing my code and managed to get it working to a point. The only thing that isn't working for me so far is scrolling on the last view page of the list.

The code I have to rework the frame is thus. It was given to me by Scott who uses it in nUI to allow it to be moved around the screen. In my case I am hard coding the height to a set value, which I will probably change to a user defined value. Maybe something in there will help you with your problem.:

Code:
	WatchFrame.moving = true;
	WatchFrame.sizing = true;
	
	WatchFrame:SetMovable( true );
	WatchFrame:SetResizable( true );
	WatchFrame:StartMoving();
	WatchFrame:StartSizing( "TOPLEFT" );
	
	WatchFrame:ClearAllPoints();
	WatchFrame:SetParent(parent);
	WatchFrame:SetPoint( "TOPLEFT", parent, "TOPLEFT", 30,-10 );
	WatchFrame:SetHeight( 500 );
	WatchFrame:SetWidth( parent:GetWidth() );

	WatchFrame.moving = nil;
	WatchFrame.sizing = nil;

	WATCHFRAME_IGNORECURSOR = "1";			
	WATCHFRAME_LASTWIDTH    = parent:GetWidth() ;
	
	WatchFrame:StopMovingOrSizing();
	WatchFrame:SetUserPlaced( true );
	WatchFrame_Expand( WatchFrame );
Also, I've attached a screenshot with how it looks at present.
Attached Thumbnails
Click image for larger version

Name:	WoWScrnShot_012010_191736.jpg
Views:	615
Size:	363.6 KB
ID:	3868  
__________________


Characters:
Gwynedda - 70 - Demon Warlock
Galaviel - 65 - Resto Druid
Gamaliel - 61 - Disc Priest
Gwynytha - 60 - Survival Hunter
Lienae - 60 - Resto Shaman
Plus several others below level 60

Info Panel IDs : http://www.wowinterface.com/forums/s...818#post136818
  Reply With Quote
01-20-10, 03:07 PM   #7
Amenity
Guest
Posts: n/a
Hm...two things:

1. Is "parent" just a blank frame?

2. How in the hell did you get "WatchFrame:SetUserPlaced( true );" to work? When I tried that method it threw errors all over the place...that's why I'm doing the whole SavedVariable = GetPoint, OnEvent SetPoint(SavedVariable) thing.

Here's my error/debug (yes, I still use Swatter...I heart it so goood...)
Code:
Message: ..\FrameXML\WatchFrame.lua line 341:
   attempt to perform arithmetic on a nil value
Debug:
   [C]: ?
   ..\FrameXML\WatchFrame.lua:341: WatchFrame_Update()
   ..\FrameXML\WatchFrame.lua:297: WatchFrame_Expand()
   ..\FrameXML\WatchFrame.lua:1054:
      ..\FrameXML\WatchFrame.lua:1051
I looked through WatchFrame.lua, and this is the line that's doin' some funkeh mathz:

lua Code:
  1. local maxHeight = (WatchFrame:GetTop() - WatchFrame:GetBottom());

And here are the functions that are involved:


lua Code:
  1. function WatchFrame_CollapseExpandButton_OnClick (self)
  2. local WatchFrame = WatchFrame;
  3. if ( WatchFrame.collapsed ) then
  4. WatchFrame_Expand(WatchFrame);
  5. PlaySound("igMiniMapOpen");
  6. else
  7. WatchFrame_Collapse(WatchFrame);
  8. PlaySound("igMiniMapClose");
  9. end
  10. end
lua Code:
  1. function WatchFrame_Expand (self)
  2. self.collapsed = nil;
  3. self:SetWidth(WATCHFRAME_LASTWIDTH);
  4. WATCHFRAME_LASTWIDTH = 0;
  5. WatchFrameLines:Show();
  6. local button = WatchFrameCollapseExpandButton;
  7. local texture = button:GetNormalTexture();
  8. texture:SetTexCoord(0, 0.5, 0.5, 1);
  9. texture = button:GetPushedTexture();
  10. texture:SetTexCoord(0.5, 1, 0.5, 1);
  11. WatchFrame_Update(self);
  12. WatchFrame_UpdateStateCVar();
  13. end

So, my idea was to hide the button altogether and use the WatchFrame_Collapse and WatchFrame_Expand functions (yes, a dirty method, but right now function > * imo) for...well...ok I hadn't gotten that far yet, but for testing purposes slashies would be fine.

But noooo...I run into another snag. I can't hide the button. No errors or anything...it just stays there. I can do it manually through a /script, but when I put the same line in my .lua I get nada. To make it even more strange, I have no trouble at all doing WatchFrameCollapseExpandButton:EnableMouse(false)

So now I've got a button that sits there and does nothing, but I can't remove it.

I never thought that something so simple as moving the WatchFrame would end up being the massive headache that this has been. It just simply should NOT be this difficult!
  Reply With Quote
01-20-10, 03:30 PM   #8
Amenity
Guest
Posts: n/a


I parented WatchFrame to the selfawarecupcake, and parented that to UIParent. The text is now ZOMGGINORMOUS, but everything works!
  Reply With Quote
01-20-10, 03:59 PM   #9
Xrystal
nUI Maintainer
 
Xrystal's Avatar
Premium Member
AddOn Author - Click to view addons
Join Date: Feb 2006
Posts: 5,919
Sorry, missed your last post while browsing job sites rofl. But glad you managed to get it working.

In answer to your questions though from the other post.

1. Is "parent" just a blank frame?
Nope, it's the name of the frame I want it parented to. Sorry, forgot it wasn't the full code I posted rofl. I call the function after the initial container window is created and pass that new window variable to it.

2. How in the hell did you get "WatchFrame:SetUserPlaced( true );" to work? When I tried that method it threw errors all over the place...that's why I'm doing the whole SavedVariable = GetPoint, OnEvent SetPoint(SavedVariable) thing.
I noticed I only got those errors if I passed the wrong parent frame to the function as it couldn't get hold of certain information the WatchFrame.lua code looks for.
__________________


Characters:
Gwynedda - 70 - Demon Warlock
Galaviel - 65 - Resto Druid
Gamaliel - 61 - Disc Priest
Gwynytha - 60 - Survival Hunter
Lienae - 60 - Resto Shaman
Plus several others below level 60

Info Panel IDs : http://www.wowinterface.com/forums/s...818#post136818
  Reply With Quote
01-20-10, 04:11 PM   #10
Bluspacecow
Giver of walls of text :)
 
Bluspacecow's Avatar
AddOn Author - Click to view addons
Join Date: Dec 2006
Posts: 770
Can we expect an addon to move the official quest tracker from you two soon

Something that just makes it moveable and resizable but nothing else (I hate kitchen sink addons that you only use 5% of)
__________________
tuba_man on Apple test labs : "I imagine a brushed-aluminum room with a floor made of keyboards, each one plugged into a different test box somewhere. Someone is tasked with tossing a box full of cats (all wearing turtlenecks) into this room. If none of the systems catch fire within 30 minutes, testing is complete. Someone else must remove the cats. All have iPods." (http://community.livejournal.com/tec...t/2018070.html)
  Reply With Quote
01-20-10, 04:15 PM   #11
Xrystal
nUI Maintainer
 
Xrystal's Avatar
Premium Member
AddOn Author - Click to view addons
Join Date: Feb 2006
Posts: 5,919
Rofl, it was one of my ideas to create a non nUI version of the addon ( primarily so that the conversion to plug it into nUI would be easier ), but I can easily stand back from that if Amenity wants to cover that side of things. I have to adjust the code somewhat for it to work with nUI even outside of an infopanel framework and at present I am having problems with it.
__________________


Characters:
Gwynedda - 70 - Demon Warlock
Galaviel - 65 - Resto Druid
Gamaliel - 61 - Disc Priest
Gwynytha - 60 - Survival Hunter
Lienae - 60 - Resto Shaman
Plus several others below level 60

Info Panel IDs : http://www.wowinterface.com/forums/s...818#post136818
  Reply With Quote
01-20-10, 04:32 PM   #12
Amenity
Guest
Posts: n/a
Originally Posted by Xrystal View Post
Sorry, missed your last post while browsing job sites rofl. But glad you managed to get it working.

In answer to your questions though from the other post.

1. Is "parent" just a blank frame?
Nope, it's the name of the frame I want it parented to. Sorry, forgot it wasn't the full code I posted rofl. I call the function after the initial container window is created and pass that new window variable to it.

2. How in the hell did you get "WatchFrame:SetUserPlaced( true );" to work? When I tried that method it threw errors all over the place...that's why I'm doing the whole SavedVariable = GetPoint, OnEvent SetPoint(SavedVariable) thing.
I noticed I only got those errors if I passed the wrong parent frame to the function as it couldn't get hold of certain information the WatchFrame.lua code looks for.
1. Yeah I figured it wasn't blank, I was just curious as to what was goin' on there.


2. Hmm. I may have to give that another go.

And as an update...it borked again. Frame wasn't getting the correct scale, so I tossed this in there:
Code:
upscale = UIParent:GetScale()
cupcakescale = upscale
Started getting the exact same error that I was getting before when I expand the frame. So, I commented out that part, and...I'm still getting that error.

I'm gonna have to take a break from messing with this. I want to get some play time in eventually. (lol)
  Reply With Quote
01-20-10, 04:56 PM   #13
Xrystal
nUI Maintainer
 
Xrystal's Avatar
Premium Member
AddOn Author - Click to view addons
Join Date: Feb 2006
Posts: 5,919
It's good to take a break after a while. Come to it with a fresh mind and who knows, you may spot a deliberate mistake in there somewhere
__________________


Characters:
Gwynedda - 70 - Demon Warlock
Galaviel - 65 - Resto Druid
Gamaliel - 61 - Disc Priest
Gwynytha - 60 - Survival Hunter
Lienae - 60 - Resto Shaman
Plus several others below level 60

Info Panel IDs : http://www.wowinterface.com/forums/s...818#post136818
  Reply With Quote
01-20-10, 05:32 PM   #14
Amenity
Guest
Posts: n/a
Sorry, I missed these somehow when I made my earlier reply...

Originally Posted by Bluspacecow View Post
Can we expect an addon to move the official quest tracker from you two soon

Something that just makes it moveable and resizable but nothing else (I hate kitchen sink addons that you only use 5% of)
You can probably expect one soon™, sure. :P

And actually, my reasoning for starting this project was to smack it in my own "kitchen sink" for REMIX when it was ready. It's never been intended for release on its' own...it's basically just a bunch of random stuff I didn't want to have to grab several addons to do (make some frames moveable, throw a few things in LibSharedMedia, that kind of thing). Primary motivation is to make REMIX compatible with the MMOUI Minion (as I end up hackpasting addons to do what I want them to do a lot).

Originally Posted by Xrystal View Post
Rofl, it was one of my ideas to create a non nUI version of the addon ( primarily so that the conversion to plug it into nUI would be easier ), but I can easily stand back from that if Amenity wants to cover that side of things. I have to adjust the code somewhat for it to work with nUI even outside of an infopanel framework and at present I am having problems with it.
It really doesn't matter to me either. Looks like we're both fighting the same war for the same reasons, just in different battlefields. (lol)

I'm not gonna outright say "yes, I'm going to put out an addon for this" for two reasons. First, by the time I'm done someone else may have already done it better or faster. And Second...at this rate I don't know if I'll ever have this thing working right. /shrug

Honestly, it'd be easier to make an entire new tracker from scratch than simply moving the stock one.
  Reply With Quote
01-20-10, 05:46 PM   #15
Xrystal
nUI Maintainer
 
Xrystal's Avatar
Premium Member
AddOn Author - Click to view addons
Join Date: Feb 2006
Posts: 5,919
Rofl, yeah, quite possibly. In my case there was just a request to move it into an infopanel so its one more thing not cluttering the screen

Likewise, if no-one has even ventured forward with an option, and you're still nowhere near, perhaps my scrollable frame option can be releasted. But will see.
__________________


Characters:
Gwynedda - 70 - Demon Warlock
Galaviel - 65 - Resto Druid
Gamaliel - 61 - Disc Priest
Gwynytha - 60 - Survival Hunter
Lienae - 60 - Resto Shaman
Plus several others below level 60

Info Panel IDs : http://www.wowinterface.com/forums/s...818#post136818
  Reply With Quote
01-20-10, 09:47 PM   #16
Sythalin
Curse staff
 
Sythalin's Avatar
AddOn Author - Click to view addons
Join Date: Aug 2006
Posts: 680
Whoops, edited wrong post. See page 2.

Last edited by Sythalin : 01-21-10 at 12:27 AM.
  Reply With Quote
01-20-10, 09:51 PM   #17
Xrystal
nUI Maintainer
 
Xrystal's Avatar
Premium Member
AddOn Author - Click to view addons
Join Date: Feb 2006
Posts: 5,919
In my code SetMovable is used in the same function. It's tried and tested code from nUI that allows us to move the tracker where they like and I haven't had a problem to make it not stick. Scott pointed the code out to me when I said I was having problems getting the positioning to work.

Found since though that the same addon in nUI environment doesn't work as well as it no in there. So more work for another day.
__________________


Characters:
Gwynedda - 70 - Demon Warlock
Galaviel - 65 - Resto Druid
Gamaliel - 61 - Disc Priest
Gwynytha - 60 - Survival Hunter
Lienae - 60 - Resto Shaman
Plus several others below level 60

Info Panel IDs : http://www.wowinterface.com/forums/s...818#post136818
  Reply With Quote
01-20-10, 09:55 PM   #18
Sythalin
Curse staff
 
Sythalin's Avatar
AddOn Author - Click to view addons
Join Date: Aug 2006
Posts: 680
Originally Posted by Xrystal View Post
In my code SetMovable is used in the same function. It's tried and tested code from nUI that allows us to move the tracker where they like and I haven't had a problem to make it not stick. Scott pointed the code out to me when I said I was having problems getting the positioning to work.

Found since though that the same addon in nUI environment doesn't work as well as it no in there. So more work for another day.
My issue comes in that frames adjust either at PLAYER_ENTERING_WORLD or "OnShow" scripts (mainly for LoD frames). It appears other events cause the frame to jump back to it's default positions, something I've really been meaning to go check out.
  Reply With Quote
01-20-10, 10:02 PM   #19
Xrystal
nUI Maintainer
 
Xrystal's Avatar
Premium Member
AddOn Author - Click to view addons
Join Date: Feb 2006
Posts: 5,919
Well, I'm not getting that problem but then I am reparenting the frame to my own frame that I have full control over. Here's my full code though.

Code:
local ObjectivesBackdrop = {                         
	bgFile = "Interface/Tooltips/UI-Tooltip-Background", 
        	edgeFile = "Interface/Tooltips/UI-Tooltip-Border", 
        	tile = true, 
        	tileSize = 16, 
        	edgeSize = 16, 
        	insets = { left = 4, right = 4, top = 4, bottom = 4 }
        	};                       

local ObjectivesBackcolor = { 
        	red=0,green=0,blue=0,alpha=1 
        	};

local ObjectivesBordercolor = { 
        	red=255,green=255,blue=0,alpha=1 
        	}; 

local WatchFrameScrollFrame;

local function ResetWatchFrame(parent)
	
	WatchFrame.moving = true;
	WatchFrame.sizing = true;
	
	WatchFrame:SetMovable( true );
	WatchFrame:SetResizable( true );
	WatchFrame:StartMoving();
	WatchFrame:StartSizing( "TOPLEFT" );
	
	WatchFrame:ClearAllPoints();
	WatchFrame:SetParent(parent);
	WatchFrame:SetPoint( "TOPLEFT", parent, "TOPLEFT", 30,-10 );
	WatchFrame:SetHeight( 500 );
	WatchFrame:SetWidth( parent:GetWidth() );

	WatchFrame.moving = nil;
	WatchFrame.sizing = nil;

	WATCHFRAME_IGNORECURSOR = "1";			
	WATCHFRAME_LASTWIDTH    = parent:GetWidth() ;
	
	WatchFrame:StopMovingOrSizing();
	WatchFrame:SetUserPlaced( true );
	WatchFrame_Expand( WatchFrame );
end

-- Frame is moving
local function OnMouseDown(self)
	if ( ( not self.isLocked ) or ( self.isLocked == 0 ) ) then
        self:StartMoving();
        self.isMoving = true;
	end
end

-- Frame has stopped moving
local function OnMouseUp(self)
	if ( self.isMoving ) then
		self:StopMovingOrSizing();
		self.isMoving = false;
	end
end

-- Frame has been hidden
local function OnHide(self)
	if ( self.isMoving ) then
		self:StopMovingOrSizing();
		self.isMoving = false;
	end
end

local function CreateScrollFrame()
	
	local f = CreateFrame( "Frame", "WatchFrame_Container",UIParent);
	f:SetWidth(400);
	f:SetHeight(200);
	f:SetClampedToScreen(true);
	f:SetFrameStrata("HIGH");
	f:SetPoint("CENTER",UIParent,"CENTER",0,0);
	f:SetBackdrop(ObjectivesBackdrop);
	f:SetBackdropColor(ObjectivesBackcolor.red,ObjectivesBackcolor.green,ObjectivesBackcolor.blue, ObjectivesBackcolor.alpha);
	f:SetBackdropBorderColor(ObjectivesBordercolor.red, ObjectivesBordercolor.green,ObjectivesBordercolor.blue, ObjectivesBordercolor.alpha);
	f:RegisterForDrag("LeftButton");
	f:EnableMouse(true);
	f:SetMovable(true);
	f:SetScript("OnMouseDown",OnMouseDown);
	f:SetScript("OnMouseUp",OnMouseUp);
	f:SetScript("OnHide",OnHide);

	local s = CreateFrame( "ScrollFrame", "WatchFrame_ScrollFrame", f, "UIPanelScrollFrameTemplate" );
	s:SetPoint("TOPLEFT", 5, -5);
	s:SetPoint("BOTTOMRIGHT", -30, 5);
	f.Scroll = s;
	
	local c = CreateFrame("Frame","WatchFrame_ScrollChild",s);
	s:SetScrollChild(c);
	c:SetWidth(2);
	c:SetHeight(2);
	f.Child = c;
		
	return f;
end

local plugin    = CreateFrame( "Frame", "Mini_ObjectiveFrame", UIParent );

local function onEvent()
	if event == "VARIABLES_LOADED" then
		WatchFrameScrollFrame = CreateScrollFrame();
		ResetWatchFrame(WatchFrameScrollFrame.Child);
	end	
end

plugin:SetScript( "OnEvent", onEvent );
plugin:RegisterEvent( "VARIABLES_LOADED" );
__________________


Characters:
Gwynedda - 70 - Demon Warlock
Galaviel - 65 - Resto Druid
Gamaliel - 61 - Disc Priest
Gwynytha - 60 - Survival Hunter
Lienae - 60 - Resto Shaman
Plus several others below level 60

Info Panel IDs : http://www.wowinterface.com/forums/s...818#post136818
  Reply With Quote
01-20-10, 10:09 PM   #20
Sythalin
Curse staff
 
Sythalin's Avatar
AddOn Author - Click to view addons
Join Date: Aug 2006
Posts: 680
Originally Posted by Xrystal View Post
Well, I'm not getting that problem but then I am reparenting the frame to my own frame that I have full control over. Here's my full code though.
Yeah, mine keeps the parent data intact and it's up to the user if they want to change it. If there is no parent set (or named), it defaults to UIParent. What I need to do is go experimenting and track when it moves from the placed position back to default (adding new info? loading screen?). I honestly haven't paid much attention to it lately.

Although I may add the "OnEvent" hook to my project. Didn't even think about that until I recommended it here.

Anyways, /endhijackthread
  Reply With Quote

WoWInterface » Developer Discussions » General Authoring Discussion » Ok...I officially give up. I'm stuck and need help with the dumbest thing ever.

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off