EQ2Interface.com
Search Downloads


Go Back   EQ2Interface > Developer Discussion > XML Modification Help & Info

Reply
Thread Tools Search this Thread Display Modes
  #1  
Unread 05-24-2006, 04:23 AM
Solf Solf is offline
A Forest Scavenger
 
Join Date: Apr 2006
Server: Antonia Bayle
Posts: 18
Default Guide: modifying default windows without creating a copy.

Hi!

It seems that a standard approach whenever someone wants to change something in the detault window is to make a copy of the XML file and make edits in that copy.

This works, but it has problems (IMO):
- If SOE changes something in their version of the window (XML file), user wouldn't even know that something has changed (because he uses another copy of the XML file).
- When SOE makes change to original window (same as above), mod author has to go through the entire new XML and align his changes with what SOE did. This can get very time-consuming and tiresome fast.


Myself I've came up with the approach that is (to my eyes) much better. It doesn't solve all problems (for example, you cannot add any new elements to default windows -- or at least I don't know how to do that; you also cannot entirely get away from XML copy approach), but it has worked quite nicely for me and the type of edits that I want to make (most spectacular is probably changing layout of the Quest Journal to horizontal -- without editing a single line in the actual Quest Journal XML file!).


So here's how it works:

First of all it is still necessary to invade SOE XML files -- this is because we need our initialization scripts to execute on UI initialization and it looks possible only through OnShow handlers in default windows (that are auto-shown).

However the invasion is minimal and affects only one file.

You have to select one of the default windows (that you have auto-showing on login) for the code injection. I recommend selecting a window that you think has the least chance of being changed by SOE. Myself, I've selected Compass window.

In this window we need to hook initialization scripts:
Code:
<Page allowcloseontop="false" eq2usescomwndcontrols="true" Location="847,707" MaximumSize="172,68" MinimumSize="94,46" Name="Compass" PackLocation="right,bottom" PackLocationProp="-177/0001,-061/0001" ScrollExtent="117,62" Size="117,62" UserMovable="true" UserResizable="true" version="1.0.1" version_note="AbsorbsInput=false everywhere" OnShow="'/MainHUD.Compass.Solf.InitOnce.Activated'=true">
<include>Solf_stuff.xml</include>
(I've highlighted in Bold what was changed from the original lines)


Now that initialization hook is in place and our custom scripts file is included (Solf_stuff.xml), let's move on to the Solf_stuff.xml contents:

(longish since I'm including entire horizontal journal modification in case anyone want to use it )
(also note that the code below references my custom bitmap font "arial18aa", so it won't work "as is" for you; bitmap fonts, btw, are a huge performance improvement over smooth fonts option)
Code:
<Page AbsorbsInput="false" Enabled="false" GetsInput="false" Name="Solf" Visible="false">

<!-- Init once hook -->
<Button Name="InitOnce" OnActivate="Activated=false
Parent.DoInit.Activated=true
OnActivate=''
" Visible="false"></Button>

<!-- Global initialization -->
<Button Name="DoInit" OnActivate="Activated=false
Parent.InitChatFrame.Activated=true
Parent.InitQuestJournals.Activated=true
Parent.InitRewardPack.Activated=true
" Visible="false"></Button>



<!-- Chat initialization -->
<Button Name="InitChatFrame" OnActivate="Activated=false
'/MainHUD.MainChat.ChatPage.ChatFrame.ChatScroll.Opacity'=0.0
'/MainHUD.MainChat.ChatPage.ChatFrame.ChatScroll.OnHoverIn'='Opacity=1.0'
'/MainHUD.MainChat.ChatPage.ChatFrame.ChatScroll.OnHoverOut'='Opacity=0.0'
'/MainHUD.MainChat.ChatPage.TabFrame.TabPane.Opacity'=0.0
'/MainHUD.MainChat.ChatPage.TabFrame.TabPane.OnHoverIn'='Opacity=1.0'
'/MainHUD.MainChat.ChatPage.TabFrame.TabPane.OnHoverOut'='Opacity=0.0'
'/MainHUD.MainChat.ChatPage.ChatFrame.DefaultChannelButton.Opacity'=0.0
'/MainHUD.MainChat.ChatPage.ChatFrame.DefaultChannelButton.OnHoverIn'='Opacity=1.0 Parent.DefaultChannelBkg.Opacity=1.0'
'/MainHUD.MainChat.ChatPage.ChatFrame.DefaultChannelButton.OnHoverOut'='Opacity=0.0 Parent.DefaultChannelBkg.Opacity=0.0'
'/MainHUD.MainChat.ChatPage.ChatFrame.DefaultChannelBkg.Opacity'=0.0
'/MainHUD.MainChat.ChatPage.ChatFrame.DefaultChannelBkg.Opacity'=0.0
'/MainHUD.MainChat.ChatPage.ChatFrame.ChatInput.Location'='20,94'
'/MainHUD.MainChat.ChatPage.ChatFrame.ChatInput.MaximumSize'='16384,21'
'/MainHUD.MainChat.ChatPage.ChatFrame.ChatInput.MinimumSize'='30,21'
'/MainHUD.MainChat.ChatPage.ChatFrame.ChatInput.ScrollExtent'='426,21'
'/MainHUD.MainChat.ChatPage.ChatFrame.ChatInput.Size'='426,21'
'/MainHUD.MainChat.ChatPage.ChatFrame.ChatDisplay.Font'='/MainHUD.Compass.Solf.Styles.TextStyles.arial18aa'
'/MainHUD.MainChat.chat_textbox.NormalTextStyle'='/MainHUD.Compass.Solf.Styles.TextStyles.arial18aa'
" Visible="false"></Button>


<!-- Horizontal journal initialization & Quest Helper Initialization -->
<Button Name="InitQuestJournals" OnActivate="Activated=false
'/Journals.JournalsQuest.Location'='18,103'
'/Journals.JournalsQuest.MinimumSize'='700,300'
'/Journals.JournalsQuest.ScrollExtent'='700,300'
'/Journals.JournalsQuest.Size'='700,300'
'/Journals.JournalsQuest.TabPane.ScrollExtent'='640,32'
'/Journals.JournalsQuest.TabPane.Size'='640,32'
'/Journals.JournalsQuest.TabPages.ScrollExtent'='660,205'
'/Journals.JournalsQuest.TabPages.Size'='660,205'
'/Journals.JournalsQuest.TabPages.Active.ScrollExtent'='660,205'
'/Journals.JournalsQuest.TabPages.Active.Size'='660,205'
'/Journals.JournalsQuest.TabPages.Active.Before.MinimumSize'='300,205'
'/Journals.JournalsQuest.TabPages.Active.Before.ScrollExtent'='300,205'
'/Journals.JournalsQuest.TabPages.Active.Before.Size'='300,205'
'/Journals.JournalsQuest.TabPages.Active.Before.PackSize'='fixed,absolute'
'/Journals.JournalsQuest.TabPages.Active.Before.LimitText.ScrollExtent'='300,18'
'/Journals.JournalsQuest.TabPages.Active.Before.LimitText.Size'='300,18'
'/Journals.JournalsQuest.TabPages.Active.Before.dropdownSort.Location'='100,20'
'/Journals.JournalsQuest.TabPages.Active.Before.QuestList.ScrollExtent'='300,129'
'/Journals.JournalsQuest.TabPages.Active.Before.QuestList.Size'='300,129'
'/Journals.JournalsQuest.TabPages.Active.Before.QuestList.Scroll.ScrollExtent'='22,109'
'/Journals.JournalsQuest.TabPages.Active.Before.QuestList.Scroll.Size'='22,109'
'/Journals.JournalsQuest.TabPages.Active.Before.QuestList.Scroll.Location'='268,10'
'/Journals.JournalsQuest.TabPages.Active.Before.QuestList.TreeView.MinimumScrollExtent'='260,120'
'/Journals.JournalsQuest.TabPages.Active.Before.QuestList.TreeView.ScrollExtent'='260,120'
'/Journals.JournalsQuest.TabPages.Active.Before.QuestList.TreeView.Size'='260,109'
'/Journals.JournalsQuest.TabPages.Active.Before.HideButton.Location'='210,179'
'/Journals.JournalsQuest.TabPages.Active.Before.ShowHiddenCheckbox.Location'='0,181'
'/Journals.JournalsQuest.TabPages.Active.SplitterActive.Location'='300,0'
'/Journals.JournalsQuest.TabPages.Active.SplitterActive.MaximumSize'='14,16384'
'/Journals.JournalsQuest.TabPages.Active.SplitterActive.MinimumSize'='14,100'
'/Journals.JournalsQuest.TabPages.Active.SplitterActive.ScrollExtent'='14,205'
'/Journals.JournalsQuest.TabPages.Active.SplitterActive.Size'='14,205'
'/Journals.JournalsQuest.TabPages.Active.SplitterActive.PackSize'='fixed,absolute'
'/Journals.JournalsQuest.TabPages.Active.After.Location'='315,0'
'/Journals.JournalsQuest.TabPages.Active.After.MinimumSize'='352,205'
'/Journals.JournalsQuest.TabPages.Active.After.ScrollExtent'='352,205'
'/Journals.JournalsQuest.TabPages.Active.After.Size'='352,205'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetails.ScrollExtent'='312,160'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetails.Size'='312,160'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetails.Name.ScrollExtent'='304,22'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetails.Name.Size'='304,22'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetails.Name.RewardPack.ScrollExtent'='307,330'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetails.Name.RewardPack.Size'='307,330'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetails.Name.RewardPack.CoinPage.Location'='28,88'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetails.Name.RewardPack.InteriorGrouper.ScrollExtent'='307,330'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetails.Name.RewardPack.InteriorGrouper.Size'='307,330'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetails.Name.RewardPack.InteriorGrouper.Frame.ScrollExtent'='307,330'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetails.Name.RewardPack.InteriorGrouper.Frame.Size'='307,330'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetailsFrame.ScrollExtent'='352,180'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetailsFrame.Size'='352,180'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetailsFrame.Scroll.Location'='320,10'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetailsFrame.Scroll.ScrollExtent'='22,160'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetailsFrame.Scroll.Size'='22,160'
'/Journals.JournalsQuest.TabPages.Active.After.ShowHelperCheckbox.Location'='0,181'
'/Journals.JournalsQuest.TabPages.Active.After.DeleteButton.Location'='147,179'
'/Journals.JournalsQuest.TabPages.Active.After.WaypointButton.Location'='247,179'
'/Journals.JournalsQuest.TabPages.Collection.ScrollExtent'='660,205'
'/Journals.JournalsQuest.TabPages.Collection.Size'='660,205'
'/Journals.JournalsQuest.TabPages.Collection.AllPage.ScrollExtent'='646,43'
'/Journals.JournalsQuest.TabPages.Collection.AllPage.Size'='646,43'
'/Journals.JournalsQuest.TabPages.Collection.FilterPage.ScrollExtent'='646,43'
'/Journals.JournalsQuest.TabPages.Collection.FilterPage.Size'='646,43'
'/Journals.JournalsQuest.TabPages.Collection.FilterPage.FilterItem.Location'='614,6'
'/Journals.JournalsQuest.TabPages.Collection.FilterPage.ShowAllButton.Location'='310,5'
'/Journals.JournalsQuest.TabPages.Collection.FilterPage.FilterText.Location'='543,10'
'/Journals.JournalsQuest.TabPages.Collection.CollectionTemplate.ScrollExtent'='623,97'
'/Journals.JournalsQuest.TabPages.Collection.CollectionTemplate.Size'='623,97'
'/Journals.JournalsQuest.TabPages.Collection.CollectionTemplate.AddButton.Location'='543,23'
'/Journals.JournalsQuest.TabPages.Collection.CollectionTemplate.Name.ScrollExtent'='609,22'
'/Journals.JournalsQuest.TabPages.Collection.CollectionTemplate.Name.Size'='609,22'
'/Journals.JournalsQuest.TabPages.Collection.CollectionTemplate.Items.ScrollExtent'='619,46'
'/Journals.JournalsQuest.TabPages.Collection.CollectionTemplate.Items.Size'='619,46'
'/Journals.JournalsQuest.TabPages.Collection.CollectionFrame.ScrollExtent'='636,152'
'/Journals.JournalsQuest.TabPages.Collection.CollectionFrame.Size'='636,152'
'/Journals.JournalsQuest.TabPages.Collection.CollectionFrame.NoMatchText.Location'='15,25'
'/Journals.JournalsQuest.TabPages.Collection.CollectionFrame.NoMatchText.ScrollExtent'='606,82'
'/Journals.JournalsQuest.TabPages.Collection.CollectionFrame.NoMatchText.Size'='606,82'
'/Journals.JournalsQuest.TabPages.Collection.CollectionFrame.CollectionComposite.ScrollExtent'='625,138'
'/Journals.JournalsQuest.TabPages.Collection.CollectionFrame.CollectionComposite.Size'='625,138'
'/Journals.JournalsQuest.TabPages.Collection.CollectionScroll.Location'='640,49'
'/Journals.JournalsQuest.TabPages.Collection.CollectionScroll.ScrollExtent'='22,152'
'/Journals.JournalsQuest.TabPages.Collection.CollectionScroll.Size'='22,152'
'/Journals.JournalsQuest.TabPages.Completed.ScrollExtent'='660,205'
'/Journals.JournalsQuest.TabPages.Completed.Size'='660,205'
'/Journals.JournalsQuest.TabPages.Completed.Before.MinimumSize'='300,205'
'/Journals.JournalsQuest.TabPages.Completed.Before.ScrollExtent'='300,205'
'/Journals.JournalsQuest.TabPages.Completed.Before.Size'='300,205'
'/Journals.JournalsQuest.TabPages.Completed.Before.PackSize'='fixed,absolute'
'/Journals.JournalsQuest.TabPages.Completed.Before.CompletedText.ScrollExtent'='211,24'
'/Journals.JournalsQuest.TabPages.Completed.Before.CompletedText.Size'='202,24'
'/Journals.JournalsQuest.TabPages.Completed.Before.QuestList.ScrollExtent'='299,160'
'/Journals.JournalsQuest.TabPages.Completed.Before.QuestList.Size'='299,160'
'/Journals.JournalsQuest.TabPages.Completed.Before.QuestList.Scroll.ScrollExtent'='22,140'
'/Journals.JournalsQuest.TabPages.Completed.Before.QuestList.Scroll.Size'='22,140'
'/Journals.JournalsQuest.TabPages.Completed.Before.QuestList.Scroll.Location'='267,10'
'/Journals.JournalsQuest.TabPages.Completed.Before.QuestList.TreeView.MinimumScrollExtent'='258,160'
'/Journals.JournalsQuest.TabPages.Completed.Before.QuestList.TreeView.ScrollExtent'='258,160'
'/Journals.JournalsQuest.TabPages.Completed.Before.QuestList.TreeView.Size'='258,140'
'/Journals.JournalsQuest.TabPages.Completed.Before.ShowRepeatableCheckbox.Location'='0,181'
'/Journals.JournalsQuest.TabPages.Completed.SplitterCompleted.Location'='300,0'
'/Journals.JournalsQuest.TabPages.Completed.SplitterCompleted.MaximumSize'='14,16384'
'/Journals.JournalsQuest.TabPages.Completed.SplitterCompleted.MinimumSize'='14,30'
'/Journals.JournalsQuest.TabPages.Completed.SplitterCompleted.ScrollExtent'='14,205'
'/Journals.JournalsQuest.TabPages.Completed.SplitterCompleted.Size'='14,205'
'/Journals.JournalsQuest.TabPages.Completed.SplitterCompleted.PackSize'='fixed,absolute'
'/Journals.JournalsQuest.TabPages.Completed.After.Location'='315,0'
'/Journals.JournalsQuest.TabPages.Completed.After.MinimumSize'='352,205'
'/Journals.JournalsQuest.TabPages.Completed.After.ScrollExtent'='352,205'
'/Journals.JournalsQuest.TabPages.Completed.After.Size'='352,205'
'/Journals.JournalsQuest.TabPages.Completed.After.QuestDetails.ScrollExtent'='311,174'
'/Journals.JournalsQuest.TabPages.Completed.After.QuestDetails.Size'='311,174'
'/Journals.JournalsQuest.TabPages.Completed.After.QuestDetailsFrame.ScrollExtent'='353,194'
'/Journals.JournalsQuest.TabPages.Completed.After.QuestDetailsFrame.Size'='353,194'
'/Journals.JournalsQuest.TabPages.Completed.After.QuestDetailsFrame.Scroll.Location'='321,10'
'/Journals.JournalsQuest.TabPages.Completed.After.QuestDetailsFrame.Scroll.ScrollExtent'='22,174'
'/Journals.JournalsQuest.TabPages.Completed.After.QuestDetailsFrame.Scroll.Size'='22,174'
'/Journals.JournalsQuest.TabPages.Group.ScrollExtent'='660,205'
'/Journals.JournalsQuest.TabPages.Group.Size'='660,205'
'/Journals.JournalsQuest.TabPages.Group.Before.MinimumSize'='300,205'
'/Journals.JournalsQuest.TabPages.Group.Before.ScrollExtent'='300,205'
'/Journals.JournalsQuest.TabPages.Group.Before.Size'='300,205'
'/Journals.JournalsQuest.TabPages.Group.Before.PackSize'='fixed,absolute'
'/Journals.JournalsQuest.TabPages.Group.Before.dropdownSort.Location'='99,0'
'/Journals.JournalsQuest.TabPages.Group.Before.QuestList.ScrollExtent'='299,173'
'/Journals.JournalsQuest.TabPages.Group.Before.QuestList.Size'='299,173'
'/Journals.JournalsQuest.TabPages.Group.Before.QuestList.Scroll.ScrollExtent'='22,153'
'/Journals.JournalsQuest.TabPages.Group.Before.QuestList.Scroll.Size'='22,153'
'/Journals.JournalsQuest.TabPages.Group.Before.QuestList.Scroll.Location'='267,10'
'/Journals.JournalsQuest.TabPages.Group.Before.QuestList.TreeView.MinimumScrollExtent'='257,120'
'/Journals.JournalsQuest.TabPages.Group.Before.QuestList.TreeView.ScrollExtent'='257,153'
'/Journals.JournalsQuest.TabPages.Group.Before.QuestList.TreeView.Size'='257,153'
'/Journals.JournalsQuest.TabPages.Group.SplitterGroup.Location'='300,0'
'/Journals.JournalsQuest.TabPages.Group.SplitterGroup.MaximumSize'='14,16384'
'/Journals.JournalsQuest.TabPages.Group.SplitterGroup.MinimumSize'='14,30'
'/Journals.JournalsQuest.TabPages.Group.SplitterGroup.ScrollExtent'='14,205'
'/Journals.JournalsQuest.TabPages.Group.SplitterGroup.Size'='14,205'
'/Journals.JournalsQuest.TabPages.Group.SplitterGroup.PackSize'='fixed,absolute'
'/Journals.JournalsQuest.TabPages.Group.After.Location'='315,0'
'/Journals.JournalsQuest.TabPages.Group.After.MinimumSize'='352,205'
'/Journals.JournalsQuest.TabPages.Group.After.ScrollExtent'='352,205'
'/Journals.JournalsQuest.TabPages.Group.After.Size'='352,205'
'/Journals.JournalsQuest.TabPages.Group.After.QuestDetails.ScrollExtent'='313,186'
'/Journals.JournalsQuest.TabPages.Group.After.QuestDetails.Size'='313,186'
'/Journals.JournalsQuest.TabPages.Group.After.QuestDetailsFrame.ScrollExtent'='352,180'
'/Journals.JournalsQuest.TabPages.Group.After.QuestDetailsFrame.Size'='352,180'
'/Journals.JournalsQuest.TabPages.Group.After.QuestDetailsFrame.Scroll.Location'='320,10'
'/Journals.JournalsQuest.TabPages.Group.After.QuestDetailsFrame.Scroll.ScrollExtent'='22,185'
'/Journals.JournalsQuest.TabPages.Group.After.QuestDetailsFrame.Scroll.Size'='22,185'
'/Journals.JournalsQuest.WindowFrame.ScrollExtent'='700,300'
'/Journals.JournalsQuest.WindowFrame.Size'='700,300'
'/Journals.JournalsQuest.WindowFrame.Settings.Location'='642,8'
'/Journals.JournalsQuest.WindowFrame.Help.Location'='647,8'
'/Journals.JournalsQuest.WindowFrame.Close.Location'='664,8'
'/Journals.JournalsQuest.WindowFrame.RightGrouper.Location'='530,0'
'/Journals.JournalsQuest.WindowFrame.Frame.ScrollExtent'='700,300'
'/Journals.JournalsQuest.WindowFrame.Frame.Size'='700,300'
'/Journals.JournalsQuest.WindowFrame.UpperTabBkg.ScrollExtent'='700,70'
'/Journals.JournalsQuest.WindowFrame.UpperTabBkg.Size'='700,70'
'/Journals.JournalsQuest.WindowFrame.Bkg.ScrollExtent'='700,265'
'/Journals.JournalsQuest.WindowFrame.Bkg.Size'='700,265'
'/Journals.JournalsQuest.TabPages.Active.SplitterActive.Style'='/MainHUD.Compass.Solf.Styles.Splitters.VerticalSplitter.style'
'/Journals.JournalsQuest.TabPages.Completed.SplitterCompleted.Style'='/MainHUD.Compass.Solf.Styles.Splitters.VerticalSplitter.style'
'/Journals.JournalsQuest.TabPages.Group.SplitterGroup.Style'='/MainHUD.Compass.Solf.Styles.Splitters.VerticalSplitter.style'
'/Journals.JournalsQuest.TabPages.Active.Before.QuestList.TreeView.Style'='/MainHUD.Compass.Solf.Styles.TreeViewStyles.QuestStyle'
'/Journals.JournalsQuest.TabPages.Completed.Before.QuestList.TreeView.Style'='/MainHUD.Compass.Solf.Styles.TreeViewStyles.QuestStyle'
'/Journals.JournalsQuest.TabPages.Group.Before.QuestList.TreeView.Style'='/MainHUD.Compass.Solf.Styles.TreeViewStyles.QuestStyle'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetails.TreeView.Style'='/MainHUD.Compass.Solf.Styles.TreeViewStyles.QuestChecklistStyle'
'/Journals.JournalsQuest.TabPages.Group.After.QuestDetails.TreeView.Style'='/MainHUD.Compass.Solf.Styles.TreeViewStyles.QuestChecklistStyle'
'/Journals.JournalsQuest.TabPages.Active.After.QuestDetails.Body.Font'='/MainHUD.Compass.Solf.Styles.TextStyles.arial18aa'
'/Journals.JournalsQuest.TabPages.Completed.After.QuestDetails.Body.Font'='/MainHUD.Compass.Solf.Styles.TextStyles.arial18aa'
'/Journals.JournalsQuest.TabPages.Group.After.QuestDetails.Body.Font'='/MainHUD.Compass.Solf.Styles.TextStyles.arial18aa'
'/Journals.ActiveQuest.JournalsQuestDetail.TreeContainer.StageTreeViewStyle.DefaultTextStyle'='/MainHUD.Compass.Solf.Styles.TextStyles.arial18aa'
" Visible="false"></Button>


<!-- Rewardpack (quest accept/reward accept window) initialization -->
<Button Name="InitRewardPack" OnActivate="Activated=false
'/Popup.RewardPack.SummaryText.Font'='/MainHUD.Compass.Solf.Styles.TextStyles.arial18aa'
" Visible="false"></Button>



<!-- Styling -->
<Namespace Name="Styles">

<!-- TextStyle -->
<Namespace Name="TextStyles">
<!-- 
That's my own custom bitmap font -- bitmap fonts vastly improve performance over
smoothed fonts.
-->
<include>arial18aa.xml</include>
</Namespace>


<!-- Splitters -->
<Namespace Name="Splitters">
<Namespace Name="VerticalSplitter">
<ImageStyle Filter="true" Name="startcap">
<ImageFrame Name="image" Source="images/commonelements.dds" SourceRect="292,195,306,199"/>
</ImageStyle>
<ImageStyle Filter="true" Name="endcap">
<ImageFrame Name="image" Source="images/commonelements.dds" SourceRect="292,199,306,203"/>
</ImageStyle>
<ImageStyle Filter="true" Name="bkg">
<ImageFrame Name="image" Source="images/commonelements.dds" SourceRect="292,198,306,200"/>
</ImageStyle>
<SplitterStyle Background="bkg" EndCap="endcap" Layout="Vertical" Name="style" StartCap="startcap"/>
</Namespace>
</Namespace>


<!-- TreeViewStyle -->
<Namespace Name="TreeViewStyles">
<TreeViewStyle CellHeight="20" CellPadding="0,0" DefaultTextStyle="/MainHUD.Compass.Solf.Styles.TextStyles.arial18aa" GridColor="#FFFFFF" ImageStyleChecked="checked" ImageStyleUnchecked="unchecked" Indentation="20" Name="QuestChecklistStyle" SelectionColorBackground="#4A404A" SelectionColorRect="#4A404A"/>
<ImageStyle Name="unchecked">
<ImageFrame Name="image" Source="images/commonelements.dds" SourceRect="211,291,233,313"/>
</ImageStyle>
<ImageStyle Name="expanded">
<ImageFrame Name="image" Source="images/commonelements.dds" SourceRect="211,341,231,361"/>
</ImageStyle>
<ImageStyle Name="collapsed">
<ImageFrame Name="image" Source="images/commonelements.dds" SourceRect="211,317,231,337"/>
</ImageStyle>
<ImageStyle Name="checked">
<ImageFrame Name="image" Source="images/commonelements.dds" SourceRect="211,265,233,287"/>
</ImageStyle>
<TreeViewStyle CellHeight="20" CellPadding="0,0" DefaultTextShadowStyle="/ShadowStylesNew.Drop.style" DefaultTextStyle="/MainHUD.Compass.Solf.Styles.TextStyles.arial18aa" DisabledTextShadowStyle="/ShadowStylesNew.Drop.style" GridColor="#FFFFFF" ImageStyleChecked="checked" ImageStyleCollapsed="collapsed" ImageStyleExpanded="expanded" ImageStyleUnchecked="unchecked" Indentation="20" Name="QuestStyle" SelectionColorBackground="#4A404A" SelectionColorRect="#4A404A" SelectionTextShadowStyle="/ShadowStylesNew.Drop.style"/>
</Namespace>


</Namespace>
</Page>

Interesting notes about the entire file:
- InitOnce button is used to ensure that initialization process is auto-activated only once -- not each time when Compass window is shown.
- DoInit button is used to provide a hook to force re-initialization should the need arise.
- Individual buttons are used for each separate UI piece for organizational purposes.
- Absolute element reference syntax used in initialization seems to work ONLY from OnShow handlers in default windows! At "runtime" you have to use Parent.Parent.Parent monikers, or it won't work. OnShow for default windows seems to execute while system is in some "initialization" mode and it has interesting consequences: (a) you can use absolute references; (b) changes made through absolute references affect ALL instances of windows. For example, if you have two chat windows in game, then at "runtime" you can at once change style of one window only (through Parent.Parent syntax). So you can have two chat windows that look differently (because apparently you are modifying "instances"). Absolute syntax in initialization apparently modifies "definition", so all spawned "instances" will use modified definition.


Advantages of my approach:
- No original SOE files are copied and modified (except the one used for initialization hook). This means that if SOE changes one of windows that you've modified, you will most likely notice it right away. Also depending on the SOE modification type your modifications may continue to work without a hitch.
- If you do have to adjust your modifications (e.g. to account for SOE changes), it is very easy to do so -- since all changes are completely localized.


Disadvantages of my approach:
It makes deploying separate mods more difficult. E.g. in the "standard" approach you can simply copy files from two separate mods and they'll work (as long as they don't modify the same file).

In my approach if mod authors use the same file (e.g. Compass) to hook initialization, then simple file copying is not enough. Minor edits will be needed to Compass XML file to ensure that both mods are initialized.


I hope this is helpful

Also let me know is something is not explained clearly enough.
Reply With Quote
Reply



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
Forum Jump


All times are GMT -5. The time now is 12:48 PM.


Our Network
EQInterface | EQ2Interface | WoWInterface | LoTROInterface | ESOUI | MMOUI