c# pdf viewer open source : Reorder pdf page application Library utility html .net winforms visual studio World%20of%20Warcraft%20Programming%20(2nd%20Edition)17-part1813

Chapter 8
Anatomy of an Addon
129
Dependencies also ensure addons are loaded in the proper order,so if
Beta
relies on
Alpha
,the client will load
Alpha
before it loads
Beta
.This is even
true for a long chain of dependencies.
## Dependencies
and
## RequiredDeps
both work the same for this directive. Addons should obviously try to avoid
circular dependencies, because no addon will ever be loaded in that case.
## OptionalDeps:
## OptionalDeps: Juggernaut, Alpha
When an addon can interact with anotheraddon, butdoesn’tstrictly require
it to function, it can be listed as an optional dependency using the
##
OptionalDeps
directive. All this directive does is ensure that the optional
dependencies are loadedbeforethis addon,if they are available. Thisdirective
takes a comma-separated list of addon names. The names listed must match
the
.toc
file and the directory names of the given addons.
## LoadOnDemand:
## LoadOnDemand: 1
As mentioned in Chapter 1, each of the Blizzard addons is configured to
load on demand, meaning that the client will load and initialize the addon
in response to some game event. This saves memory and load time by not
loading all of the addons each time the player logs in to the game, but only
when he needs them. Because not all addons may be written in a way that
supports load on demand (LoD), there is a directive that flags an addon as
LoD capable.
An LoD addon can still use the other directives, and still appears in the
addon list, but will not be loaded until explicitly requested by another addon.
Many addons use this functionality for their configuration systems, only
loading them when the user tries to make a configuration change.
This option takes either a
1
or a
0
,where
1
means theaddon is LoD capable,
and
0
means it is not. If this value isn’t supplied in the TOC, it defaults to
0
.
## LoadsWith:
## LoadsWith: Blizzard_RaidUI
The
## LoadsWith
directive can be combined with
## LoadOnDemand
toload
an addon as soon as anotherisbeing loaded.Forexample,an addon that alters
the default Blizzard Raid UI could include
## LoadsWith: Blizzard_RaidUI
to be loaded along with the default raid interface. This directive has rather
limited use but expands the usefulness of LoD components quite a bit. If
Reorder pdf page - re-order PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Customizing Page Order of PDF Document in C# Project
change pdf page order preview; move pages in pdf file
Reorder pdf page - VB.NET PDF Page Move Library: re-order PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Sort PDF Document Pages Using VB.NET Demo Code
how to move pages in pdf; how to change page order in pdf document
130
Part II
Programming in World of Warcraft
multiple addons are listed, the addon will be loaded as soon as any of those
listed finishes loading.
## DefaultState:
## DefaultState: disabled
Not all addons are meant to be loaded on each and every character, so this
directive enables you to set the default state of an addon. The flag tells the
client whether an addon should be checked (enabled) in the addon selection
screen by default. As soon as a user overrides this setting by checking or
unchecking the addon, the user preference is respected. If not supplied, this
value defaults to enabled.
## LoadManager:
## LoadManager: AddonLoader
Adding to the complexity (and versatility) of the LoD system is the
##
LoadManager
directive,which indicatesthatsomeotheraddonwill takerespon-
sibility forloading this addon.The addon is flagged as LoD as longas the load
manager addon is installed and enabled.
The most prevalent load manager is called AddonLoader and is available
from a few different locations, including:
http://wowace.com/projects/addon-loader
http://wowinterface.com/downloads/info11476-r77-release.html
AddonLoader is used by several addons as a LoadManager. The developer
can provide conditions in the TOC that AddonLoader then uses to decide
when the addon should be loaded. For example, an addon that is specific to
Rogues can be flagged with
## X-LoadOn-Class: Rogue
,and it will be loaded
for any rogue characters but not for any others.
This method requires the developer to add these flags to the TOC file and
the usertodownload AddonLoader, but itprovides major benefits when used
correctly. You can find documentation about using AddonLoader online at
http://www.wowwiki.com/AddonLoader
.
## SavedVariables:
## SavedVariables: JuggernautDB
The only way an addon can save information between sessions is to define
aLua variable and list the name of the variable in the
## SavedVariables
directivein itsTOC file.This tells thegame to savethecontents ofthatvariable
out to a file when the game is closed, and read it back in when the game is
started upagain. The variable can be a string, number, Boolean, or table.
C# TIFF: How to Reorder, Rearrange & Sort TIFF Pages Using C# Code
C# TIFF Page Sorting Overview. RasterEdge XDoc.Tiff for .NET is powerful enough to enable C# users to reorder and rearrange multi-page Tiff file flexibly.
pdf rearrange pages; reordering pdf pages
C# PDF: C# Code to Process PDF Document Page Using C#.NET PDF
C# PDF Page Processing: Sort PDF Pages - online C#.NET tutorial page for how to reorder, sort, reorganize or re-arrange PDF document files using C#.NET code.
reorder pages in pdf reader; change pdf page order
Chapter 8
Anatomy of an Addon
131
## SavedVariablesPerCharacter:
## SavedVariablesPerCharacter: JuggernautDB
The
## SavedVariablesPerCharacter: VariableName
directive operates in
the same way as
## SavedVariables:
,except a different file is saved and
loaded for each character you log in with. If you log in to character Alice, her
settings will be saved separately from those for Bob. Nothing special needs to
happen in the addon; it’s all handled automatically by the client.
NONSTANDARD METADATA DIRECTIVES
Beyond the officially supported metadata tags, you may see any number of
other tags included in the .toc file of custom addons. One customary direc-
tive is ## Author. This information isn’t displayed by default client, but can be
accessed by other addons in-game.
## Author: ArgyleSocks
X-Label Directives
In addition, custom directives can be defined with an X, followed by a hyphen
and then some label. These directives can contain any string of data, limited to
roughly 1,000 characters. For example, an addon could include a web address
using an ## X-Website directive.
Each of the X label directives is localized by the game client, so you can
include all of the following and only the correct version will be available
through the GetAddOnMetadata() API function:
## X-FAQ-Website: http://www.myaddon.com/faq/
## X-FAQ-Website-esES: http://www.myaddon.com/faq/esES
## X-FAQ-Website-deDE: http://www.myaddon.com/faq/deDE
Addon Categories
The addon community has developed a standard set of addon categories that
can be included in the metadata for an addon, making it easier to group simi-
lar types of addons together when listing or displaying them. Here’s the list of
categories:
Action Bars
Frame Modification
Priest
Auction
Guild
Quest
Audio
Healer
Raid
Battlegrounds/PvP
Hunter
Rogue
(continued)
VB.NET PDF: VB.NET Guide to Process PDF Document in .NET Project
It can be used to add or delete PDF document page(s), sort the order of PDF pages, add image to PDF document page and extract page(s) from PDF document in VB
how to move pages within a pdf; moving pages in pdf
.NET Multipage TIFF SDK| Process Multipage TIFF Files
are easily to access, extract, swap, reorder, insert, mark up and delete pages in any multi-page TIFF images upload to SharePoint and save to PDF documents
how to move pages in pdf acrobat; move pages in pdf reader
132
Part II
Programming in World of Warcraft
NONSTANDARD METADATA DIRECTIVES (continued)
Buffs
Interface Enhancements
Shaman
Caster
Inventory
Tank
Chat/Communication
Library
Tradeskill
Combat
Mage
UnitFrame
Compilations
Mail
Warlock
Data Export
Map
Warrior
Development Tools
Miscellaneous
Druid
Paladin
You could use one of these categories or define your own set — that’s
the beauty of addon metadata. To supply your category, simply use the ##
X-Category: CategoryName directive.
XML Files
HelloFriend.xml
A table of contents file can list any number of XML files to be loaded.
Markup in these files will be validated against the WoW UI XML schema file
as it’s parsedandloaded.XMLfiles can alsoloadLua scripts using the
<Script
file=“SomeFile.lua“/>
tag. Each XML file should contain a top-level
<Ui>
element.
To validate your XML document, you will also need to include the schema
information in the
<Ui>
element. Here’s an example:
<Ui xmlns=“http://www.blizzard.com/wow/ui/“
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance“
xsi:schemaLocation=“http://www.blizzard.com/wow/ui/
http://wowprogramming.com/FrameXML/UI.xsd“>
This may need a bit of explanation. The
xlmns
attribute defines the name-
spacethatthe document is hoping to conformto. It must match the namespace
declaredin the given schema. In this case,it is a value defined by Blizzard.The
xmlns:xsi
attribute tells the validating program to which schema instance the
schema will conform. Finally,
xsi:schemaLocation
is a pair of strings,the first
being the name of a namespace and the second being the location where that
schema can be found.
The example specifies that the
http://www.blizzard.com/wow/ui/
schema
can be foundin the online document
http://wowprogramming.com/FrameXML/
UI.xsd
. This is a file that is kept updated on the website for validation
purposes. Instead of using the online version, you could specify the path to
the
UI.xsd
file on your local machine. Thelocation of this file depends on your
specific installation, but it will be unpacked when you use the User Interface
Customization Tool.
VB.NET PDF: Create PDF Document Viewer in C#.NET for Document
Support navigating to the previous or next page of the PDF document; Able to insert, delete or reorder PDF document page in VB.NET document viewer;
how to reorder pdf pages; reordering pages in pdf document
VB.NET PowerPoint: Sort and Reorder PowerPoint Slides by Using VB.
Sort and Reorder PowerPoint Slides Range with VB.NET PPT PPT Page Extracting. dedicated to provide powerful & profession imaging controls, PDF document, image
how to reorder pages in a pdf document; how to reverse pages in pdf
Chapter 8
Anatomy of an Addon
133
As your XML files are loaded, any errors will appear in the
Logs\
FrameXML.log
file in your base World of Warcraft installation. If your addons
aren’t behaving properly, it’s a good idea to check this file to ensure there
wasn’t an error in validating or parsing your code.
Lua Script Files
HelloFriend.lua
The TOC file can list any number of Lua files that exist somewhere under-
neath the addons directory. Each of these files is loaded, parsed, and then
executedbythegame clientin theorderlisted in the TOC file.Because each file
is run independently, local variables defined in one file will not be available
in another file; if you need to share data between different files you should
ensure that you use global variables of some sort.
Media Files
Addons can include custom graphics, sounds, and fonts to be displayed (or
played) within the game client, providing a different visual style or audio
cues. These files are included within the addon directoriesthemselves, andare
addressed by full pathname from the WoW directory.
Music
Assume you have a file called
CreepySound.mp3
included as part of an addon
called
Goober
that resides in the following location:
World of Warcraft\Interface\Addons\Goober\CreepySound.mp3
Itcanthenbeplayedbyrunningthefollowingcommandin-game(remember
to escape the backslash character because Lua uses it as the escape character):
/run PlaySoundFile(“Interface\\Goober\\CreepySound.mp3“)
TheWoWclient can nativelyplay MP3 files aswellas WAV files.Converting
files to these formats can be accomplished through a number of tools freely
available on the Internet.
Graphics
WoW accepts two graphics formats when loading textures for frames. In
addition to being in the right format, each graphic must meet the following
basic requirements to be loaded:
1. The file’s width and height must be greaterthan or equalto2, andsmaller
than 1024 pixels.
2. The height and width of the file must be a power of two, although they
need not be the same.
C# PDF Page Rotate Library: rotate PDF page permanently in C#.net
PDF document page, it is also featured with the functions to merge PDF files using C# .NET, add new PDF page, delete certain PDF page, reorder existing PDF
how to reorder pages in pdf online; rearrange pages in pdf online
VB.NET TIFF: VB.NET Sample Code to Process & Manage TIFF Page
TIFF page, and sort & reorder TIFF pages from VB.NET programming, this TIFF page processing control powerful & profession imaging controls, PDF document, image
pdf reorder pages online; how to move pages in pdf files
134
Part II
Programming in World of Warcraft
For example, a file that is 32 x 64 is acceptable, whereas a file thatis 512 x 400
is not (because the height is not a power of two). In addition, the file can, and
should, contain an alpha channel, something that is particular to the specific
graphics editing software you are using.
More information on creating and editing custom graphics for addons is
available in Chapter 20.
Following is a look atthe twoprimary graphics formats used in WoW: BLP2
and TGA.
BLP2 Format
If you have extracted the Blizzard Interface Art using the User Interface
Customization Tool (as shown in Chapter 7), youmayhave noticed that all the
files that were created have a
.blp
extension. That file format was created by
Blizzard, and has been used in both Warcraft III and World of Warcraft. Even
though Blizzard provides a way to extract the files, there is still no official tool
that can convert these files. The companion website for the book provides a
way to convert these graphics to the PNG format, which is easier to view and
edit; see Chapter 7 for more information.
The only time this book deals with
.blp
files is if any original game art is
altered, in which case the texture is providedin the
.tga
format instead.
TGA Format
Wikipedia defines a
.tga
file as a Truevision Advanced Raster Graphics
Adapter (TARGA)file. This is a simple graphics file format thatcan be usedto
store color images, including transparency information. TGA files never use
lossless compression, which means the image is not degraded as a result of
saving the image,as happens with JPG files.Mostmodern graphicseditors can
save tothis file format natively, and Chapter 20 provides an extensivetutorial
on creating files to be used in the game.
Localizing Your Addons
Localization as it relates to addon development is the process of converting
the text and icons used in the application to a format that is meaningful for
users from other regions of the world, who may speak different languages.
WoW boasts more than 10 million subscribers, many of them coming from
regions in Europe and Asia.You may see the word ‘‘localization’’ abbreviated
to L10n, which stands for ‘‘L’’ followed by 10 other letters, followed by an
‘‘n.’’ Similarly, youmaysee I18n as an abbreviation for ‘‘Internationalization.’’
However youcall it, localization makes your addons more accessible.
Chapter 8
Anatomy of an Addon
135
Valid Locales
Blizzard provides a number of game locales with World of Warcraft. Table 8-1
shows a list of the current valid game locale codes. For each of these
languages, Blizzard has translated each in-game message and string so they
are meaningful to users from that region.
Table 8-1: Valid Client Locales
LOCALE CODE
CORRESPONDING LANGUAGE
deDE
German
enUS
American English
enGB
British English
esES
Spanish
esMX
Spanish (Mexico)
frFR
French
koKR
Korean
ruRU
Russian
zhCN
Simplified Chinese
zhTW
Traditional Chinese
Although there is technically an
enGB
locale, the game will never display
that locale anywhere (in particular,
GetLocale()
will not return it).
Reasons for Providing Localization
When users play the game in their native language, it’s often easier for them
tomakesplit-second decisions if they aren’ttrying toread an entirelydifferent
language as part of a custom addon. Imagine if you were a native Spanish
speakerwho played the game in Spanish, but had addons that displayedyour
information in English. Even if you’re a fluent reader of both languages, your
brain may find difficulty in switching between the two quickly.
Froma purelypracticalstandpoint,whynotprovide supportforlocalization
in your addon? Most users arewilling andable to helpauthors with the addon
localization, and if the addon is organized well, it can be a very easy task to
keep localizations up to date.
136
Part II
Programming in World of Warcraft
Encouraging Users to Contribute
More often than not, users will approach authors with localization files, but
the author can take some steps to ensure the addon is easy to localize. This
typically means the following:
1. Include a dedicated localization file with no otheraddon logic, including
aset of constants of a lookup table to be used instead of string constants.
2. Provide information in the
readme.txt
file for your addon and the
addon’s website on how users can contact you to help with localization.
3. Provide comments aboutwhata specific messagemeanssoitcan easilybe
translated. Although the word ‘‘speed’’ means only one thing in English,
it may translate to different words depending on the language.
Implementing Localization
Becauselocalizationimplementationsaresimplydifferentmeansofstructuring
Lua programs, there are countless ways to do it. This section describes one
particular way to implement localization.
When working with non-English locales, you should ensure that your
editors work properly with UTF-8 markup. Most modern text editors work
just fine, but older, less-featured editors may show garbage instead of the
correct markup.
Add a File for Each Locale
Begin by adding a new localization file for each locale for which you have
translations. If you don’t have any translations to begin with, simply create a
fileforthe‘‘base’’locale inwhich you’vedevelopedtheaddon.Formyaddons,
this means adding a
Localization.enUS.lua
file to my directory structure.
Add the file to the topof the
.toc
file to ensure that it’s loaded first.
Create a Global Table Containing the Base Strings
Create a new global table called
MyAddonLocalization
in the
Localization
.enUS.lua
file, replacing
MyAddon
with the name of your addon. For instance,
if your addon is named BurgerDoodle, your global table would be called
BurgerDoodleLocalization
.
You can use full strings or tokens to add the base translations to this file.
Using Full Strings
The following is a set of table definitions that takes the entire string to be
translated and uses it as both the key and the value. The reason for this will
become apparent later.
Chapter 8
Anatomy of an Addon
137
MyAddonLocalization = {}
MyAddonLocalization[“Frames have been locked“] = “Frames have i
been locked“
MyAddonLocalization[“Frames have been unlocked“] = “Frames have i
been unlocked“
This tends to work for smaller strings but, as you can see, can be quite
verbose for longer string keys.
Using Tokens
Instead of using the entire string as the table key, you can use a smallerstring
or ‘‘token.’’ The same localization file might look like this:
MyAddonLocalization = {}
MyAddonLocalization[“FRAMES_LOCKED“] = “Frames have been locked“
MyAddonLocalization[“FRAMES_UNLOCKED“] = “Frames have been unlocked“
Using the Localization Table
The reason for loading the localization file first is to ensure that the tables are
available when the rest of the addon files are loading. For example, you can
display the ‘‘locked’’ message using the following:
print(MyAddonLocalization[“Frames have been locked“])
or
print(MyAddonLocalization[“FRAMES_LOCKED“])
If that appears too verbose for you, you could make a shortcut to the global
table. This is typicallydonewith the variable
L
,which isused in othersoftware
realms for localization:
local L = MyAddonLocalization
print(L[“Frames have been locked“])
If you’ve opted for the token method, you can even use syntactic sugar to
make it easier to type:
print(L.FRAMES_LOCKED)
Adding New Locales
Newlanguages can be addedbydefining newfilesand following thestandard
you’ve already established. The new files should be listed after the base locale
in the
.toc
file,butbeforethe main addon. Forexample, create alocalization file
for German by creating
Localization.deDE.lua
with the following contents:
if
GetLocale() == “deDE“ then
if not MyAddonLocalization then
138
Part II
Programming in World of Warcraft
MyAddonLocalization = {}
end
MyAddonLocalization[“FRAMES_LOCKED“] = “Frames wurden gesperrt“
MyAddonLocalization[“FRAMES_UNLOCKED“] = “Frames wurden entsperrt“
end
The first line checks to ensure that the user’s locale is deDE; otherwise, the
translation file is skipped. The second line creates the global table if it doesn’t
already exist, and the rest is the same as the base locale file, with the values of
the table being the translated strings.
Now the message printed on a German client will be displayedin the native
language rather than in English.
Handling Partial Translations
Whathappensifsomestringshavebeen translatedintoGermanbutnotothers?
Currently,becausethemain Englishtableis createdfirst,andtheGerman table
is loaded after it, any English strings that haven’t been translated to German
will be displayed in English. This gives you a mix of the two rather than an
error message.
Introducing Frames, Widget Scripts, and Events
Although the previous section explained the different components of addons,
it only covered the details of the files stored on your computer. There’s quite
abit more to getting an addon up and running. This section introduces you to
the different components that make up an addon within the game.
Frames, FontStrings, and Textures
Every visual component in an addon begins with a frame, which serves as
the container for font strings and textures. A number of types of frames serve
different purposes. For example, the following is a short list of some of the
different frame types (a full listing is given in Chapter10):
StatusBar
—Used to display a numerical value in a given range, such as
health, mana, or a progress bar.
CheckButton
—Used for any button that has an on and an off state, such
as checkboxes or radio buttons.
EditBox
—Allows the user to supply input via the keyboard.
ScrollingMessageFrame
—Can display a series of text messages in a
scrolling frame.
The main differences between the different types are the functions that they
provide to customize them. For example a
StatusBar
allows you to set the
Documents you may be interested
Documents you may be interested