Post by ChaosInc on Aug 1, 2009 1:32:01 GMT -5
This allows for full customization of almost any frame within the game.
Author's Note
"Extreme" UI modders may remember the old Discord series of mods written by Lozareth. A few years ago he decided to cease development on this series. A few devoted individuals have kept the mods active at underworldexodus.com. Unfortunately, Discord Frame Modifier never truly has been kept "up to date" with the rest. The entire collection has been kept alive through what I like to call "bandaid" fixes, in which code was changed enough to keep the mods functional but are still full of errors. Unless these errors caused a cease in functionality, there were simply ignored. I finally got tired of said errors and started this project up. So enough babble, let's get on to what this thing can do!
Slash Command
/cfm - brings up config
/cfm import - bring up import frame
/cfm load <Realm> <Name> - swap to another toon's settings (remember to capitalize your realm and name)
ESC - closes config
CFM vs. DFM
No Outside Libs: DFM originally required Discord Library as a dependency. The library had so many calls that it would drastically impact performance when working with the config frame. CFM has everything built into it with no dependencies.
No Default List: This is intentional and will NOT be changed. One of my biggest pet peeves about using DFM was that it had a HUGE default list and that 98% of it was never used. The database will only contain what YOU want it to.
No required UI Reloads: When a frame was removed from the database in DFM it would require a UI reload in order to reset that frame back to it's original settings. With CFM, this is no longer the case. When a frame is added, it automatically creates a restore point for that frame's data AT THAT POINT. When a frame is removed, it resets the frame to these settings automatically. The only time when a user is prompted to reload is after swapping profiles as some frames that don't have settings will not be moved.
The Config Panel
Frame List (top-left)
This lists your frames currently in your database.
Left Click: Selects the frame and fills in it's info in all other frames (except "Add Frame").
Right Click: Prompts removal of the frame from the database.
Add Frame (bottom-left)
This is where you can add frames to your database.
Name: The custom name for your frame to show in the list (half-works, see "Known Bugs")
Frame: The actual name of the frame.
Parent: You can reassign the parent frame when adding. Leaving it blank will default it to it's current parent.
Tab: Move to next edit box.
Properties Frame (upper-right)
This displays and controls all the selected frame's properties.
Force Hide: Checking this will always hide the frame.
Width = Height: Also known as "Constrain Porportions". With this checked, if the width/height is changed, it automatically sets the other as the same value.
Width: Current width of the frame.
Height: Current height of the frame.
Scale: Current scale of the frame. (+/- adjust scale by .1)
Level: Current level of the frame. This controls where this frame's position is on the same strata (see below) as other frames. Think of it like a line of plates. You have 3 plates stacked; plate 1 overlaps plates 2 and 3. If you change plate 3 to the top of the stack (change it's level higher than plate 1), plate 3 now overlaps plates 1 and 2.
From: The selected frames anchor point. This is the point that will attach to the parent frame set in "To" (seebelow).
To: The parent's point where you want the your selected frame to attach to.
Strata: Similar to level, but more extreme. There are 5 choices and the list goes from lowest to highest (top to bottom).
Position Frame (lower-right)
This controls the frames position in relation to the parent. Both values can be increased/decreased with their corresponding "+"/"-" buttons.
X: The selected frame's horizontal position.
Y: The selected frame's vertical position.
0,0: Resets the selected frame's position to X:0,Y:0.
Mouseover Frame (bottom)
This will tell you the name of the frame your mouse is currently over.
Import Frame (/cfm import)
This allows users to import their settings from DFM. 2 things to note:
1) No restore point will be generated during an import.
2) Because of the way DFM's saved vars are laid out, there is no way to "mass import" all frames at this time. Sorry.
ALL SETTING (except in Add Frame and Import Frame) ARE APPLIED WITH YOU PRESS "ENTER"
Known Bugs
Frame name displays in list instead of the name I set!: I'm aware of this and for the time being that's the way it is. When I realized my error on this, I was too far into the project to create a fix as it'll require a consider amount of recoding to fix. I actually wanna play for a bit now, dammit! =p
Frame X doesn't keep it's settings!: Some frames are "Load on Demand", meaning they don't exist yet when CFM tries to apply changes to it. This especially applies to several default Blizz frames (like AchievementFrame). If you come across something like this, please submit a ticket and I'll add support for it.
Soon-to-be FAQs (things I've asked myself along the way)
How long did it really take to write this?
Almost 4 months. I have a full time job, a woman and 2 kids. Doesn't leave much time for continuous coding without getting yelled at.
Why didn't you keep the "Discord" name?
This was completely written from the ground up. Not to discredit the original, but this was my hard work and felt it deserved to be titled with such in mind.
Why not just fix DFM?
DFM is way too bulky and, well, out of date. With the changes to the API over the last several patches a lot of the existing code is now redundant or just plain broken. I'd also have to rewrite portions of the Discord Library to compensate for fixes and would just be bigger headache than this has been so far.
Will you consider making this "Ace"'d?
Will you consider holding a shotgun to your head and pull the trigger? If there's one tradition for the Discord mods I've always agreed with is that it'll never use Ace libs (or any other for that matter). I hate trying to work off other people's libs because if something changes that breaks the lib then I have to sit and wait for a fix before I can fix my own project.
LDB/Titan/Fubar support?
Why? Too lazy to type /cfm?
Can the colors be changed?
Eventually. Maybe. I like em. I didn't like Discord's color scheme, but I dealt with it just fine. You can too.
Will you allow WoWMatrix to distribute this?
They can go die in a bus fire.
Things To Do
1) Figure out why the strata box keeps saying "Center". (DONE!)
2) Fix so name shows in list instead of the frame.
3) Get my Argent Tournament mount. (most likely to happen first) (DONE!)
4) Compatibility with other mod's saved vars. Currently, there are a few mods that will reset frame positions when their options are opened (XPerl, Lunarsphere, etc.) Goal is that when CFM saves a frame's position, it'll also automatically save them to the parent mod's saved vars as well, preventing the "auto shift back" when these mods are opened after CFM is closed. (likely to happen second) (PARTLY DONE!)
5) Go get a soda (DONE!)
Credits
ME!: I wrote it.
Moongaze: LOTS of help along the way, including a lot of performance suggestions.
Discord Community: For keeping Discord going as long as it has been. Notable people being Shiny, ThaDruid, Kayda. No credit goes to Lappen, however, as he's just a whiny bastard who hasn't done anything useful. Ever.
WoWInterface Community: Including Seerah, Akryn, and kraftman for helping me with my noobish questions on the forums when I'd get stuck.
Author's Note
"Extreme" UI modders may remember the old Discord series of mods written by Lozareth. A few years ago he decided to cease development on this series. A few devoted individuals have kept the mods active at underworldexodus.com. Unfortunately, Discord Frame Modifier never truly has been kept "up to date" with the rest. The entire collection has been kept alive through what I like to call "bandaid" fixes, in which code was changed enough to keep the mods functional but are still full of errors. Unless these errors caused a cease in functionality, there were simply ignored. I finally got tired of said errors and started this project up. So enough babble, let's get on to what this thing can do!
Slash Command
/cfm - brings up config
/cfm import - bring up import frame
/cfm load <Realm> <Name> - swap to another toon's settings (remember to capitalize your realm and name)
ESC - closes config
CFM vs. DFM
No Outside Libs: DFM originally required Discord Library as a dependency. The library had so many calls that it would drastically impact performance when working with the config frame. CFM has everything built into it with no dependencies.
No Default List: This is intentional and will NOT be changed. One of my biggest pet peeves about using DFM was that it had a HUGE default list and that 98% of it was never used. The database will only contain what YOU want it to.
No required UI Reloads: When a frame was removed from the database in DFM it would require a UI reload in order to reset that frame back to it's original settings. With CFM, this is no longer the case. When a frame is added, it automatically creates a restore point for that frame's data AT THAT POINT. When a frame is removed, it resets the frame to these settings automatically. The only time when a user is prompted to reload is after swapping profiles as some frames that don't have settings will not be moved.
The Config Panel
Frame List (top-left)
This lists your frames currently in your database.
Left Click: Selects the frame and fills in it's info in all other frames (except "Add Frame").
Right Click: Prompts removal of the frame from the database.
Add Frame (bottom-left)
This is where you can add frames to your database.
Name: The custom name for your frame to show in the list (half-works, see "Known Bugs")
Frame: The actual name of the frame.
Parent: You can reassign the parent frame when adding. Leaving it blank will default it to it's current parent.
Tab: Move to next edit box.
Properties Frame (upper-right)
This displays and controls all the selected frame's properties.
Force Hide: Checking this will always hide the frame.
Width = Height: Also known as "Constrain Porportions". With this checked, if the width/height is changed, it automatically sets the other as the same value.
Width: Current width of the frame.
Height: Current height of the frame.
Scale: Current scale of the frame. (+/- adjust scale by .1)
Level: Current level of the frame. This controls where this frame's position is on the same strata (see below) as other frames. Think of it like a line of plates. You have 3 plates stacked; plate 1 overlaps plates 2 and 3. If you change plate 3 to the top of the stack (change it's level higher than plate 1), plate 3 now overlaps plates 1 and 2.
From: The selected frames anchor point. This is the point that will attach to the parent frame set in "To" (seebelow).
To: The parent's point where you want the your selected frame to attach to.
Strata: Similar to level, but more extreme. There are 5 choices and the list goes from lowest to highest (top to bottom).
Position Frame (lower-right)
This controls the frames position in relation to the parent. Both values can be increased/decreased with their corresponding "+"/"-" buttons.
X: The selected frame's horizontal position.
Y: The selected frame's vertical position.
0,0: Resets the selected frame's position to X:0,Y:0.
Mouseover Frame (bottom)
This will tell you the name of the frame your mouse is currently over.
Import Frame (/cfm import)
This allows users to import their settings from DFM. 2 things to note:
1) No restore point will be generated during an import.
2) Because of the way DFM's saved vars are laid out, there is no way to "mass import" all frames at this time. Sorry.
ALL SETTING (except in Add Frame and Import Frame) ARE APPLIED WITH YOU PRESS "ENTER"
Known Bugs
Frame name displays in list instead of the name I set!: I'm aware of this and for the time being that's the way it is. When I realized my error on this, I was too far into the project to create a fix as it'll require a consider amount of recoding to fix. I actually wanna play for a bit now, dammit! =p
Frame X doesn't keep it's settings!: Some frames are "Load on Demand", meaning they don't exist yet when CFM tries to apply changes to it. This especially applies to several default Blizz frames (like AchievementFrame). If you come across something like this, please submit a ticket and I'll add support for it.
Soon-to-be FAQs (things I've asked myself along the way)
How long did it really take to write this?
Almost 4 months. I have a full time job, a woman and 2 kids. Doesn't leave much time for continuous coding without getting yelled at.
Why didn't you keep the "Discord" name?
This was completely written from the ground up. Not to discredit the original, but this was my hard work and felt it deserved to be titled with such in mind.
Why not just fix DFM?
DFM is way too bulky and, well, out of date. With the changes to the API over the last several patches a lot of the existing code is now redundant or just plain broken. I'd also have to rewrite portions of the Discord Library to compensate for fixes and would just be bigger headache than this has been so far.
Will you consider making this "Ace"'d?
Will you consider holding a shotgun to your head and pull the trigger? If there's one tradition for the Discord mods I've always agreed with is that it'll never use Ace libs (or any other for that matter). I hate trying to work off other people's libs because if something changes that breaks the lib then I have to sit and wait for a fix before I can fix my own project.
LDB/Titan/Fubar support?
Why? Too lazy to type /cfm?
Can the colors be changed?
Eventually. Maybe. I like em. I didn't like Discord's color scheme, but I dealt with it just fine. You can too.
Will you allow WoWMatrix to distribute this?
They can go die in a bus fire.
Things To Do
1) Figure out why the strata box keeps saying "Center". (DONE!)
2) Fix so name shows in list instead of the frame.
3) Get my Argent Tournament mount. (most likely to happen first) (DONE!)
4) Compatibility with other mod's saved vars. Currently, there are a few mods that will reset frame positions when their options are opened (XPerl, Lunarsphere, etc.) Goal is that when CFM saves a frame's position, it'll also automatically save them to the parent mod's saved vars as well, preventing the "auto shift back" when these mods are opened after CFM is closed. (likely to happen second) (PARTLY DONE!)
5) Go get a soda (DONE!)
Credits
ME!: I wrote it.
Moongaze: LOTS of help along the way, including a lot of performance suggestions.
Discord Community: For keeping Discord going as long as it has been. Notable people being Shiny, ThaDruid, Kayda. No credit goes to Lappen, however, as he's just a whiny bastard who hasn't done anything useful. Ever.
WoWInterface Community: Including Seerah, Akryn, and kraftman for helping me with my noobish questions on the forums when I'd get stuck.