c# pdf viewer open source : How to reorder pages in pdf Library software component .net winforms azure mvc World%20of%20Warcraft%20Programming%20(2nd%20Edition)18-part1814

Chapter 8
Anatomy of an Addon
139
minimum and maximum values for the bar, and the
ScrollingMessageFrame
enables you to add and clear messages from the frame.
Most frames by themselves have no actual visible components, but
FontStrings
and
Textures
can be used to add text and graphics to frames.
Displaying Text with FontStrings
A
FontString
is a special type of object that is dedicated to displaying text.
The following attributes — and a number of others — can be customized via
XML or Lua:
Font, size, color, outline, and shadow
Justification (both vertical and horizontal)
Whether the text should wrap in the middle of a word
Almost all text that is visible within the UI is a
FontString
customized in a
specific way, set to display certain text.
Showing Graphics and Colors with Textures
Textures in World of Warcraft serve a similar purpose to font strings, except
forgraphics, colors, and gradients, which can be used to display a graphic file
stored on disk, a solid color, or a gradient from one color to another.
Anchoring Objects On-Screen
All object placement in World of Warcraft is accomplished through a series of
anchors that attach one point on an object to one point on another object. The
concepts of anchoring are covered in-depth in Chapter 9.
Responding to Interaction with Widget Scripts
World ofWarcraftallows youto respondtouser interaction (such as clickinga
button) via widget scripts. These scripts are numerous and varied, depending
on the type of widget being used. Table 8-2 shows a few widget scripts and
their purpose.
Setting these scripts is relatively simple, just a matter of providing a
Lua function to handle the event. Widget scripts are covered in depth in
Chapter 12.
Responding to Game Events
Most of the benefit of using addons is being able to respond to certain
game events (such as entering combat or requesting a duel) and displaying
something to the user. All handling of game events happens through frames.
How to reorder pages in pdf - re-order PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Customizing Page Order of PDF Document in C# Project
how to rearrange pdf pages in preview; how to change page order in pdf acrobat
How to reorder pages in pdf - 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
move pages within pdf; rearrange pdf pages in preview
140
Part II
Programming in World of Warcraft
Table 8-2: Widget Scripts
WIDGET TYPE SCRIPT
DESCRIPTION
Button
OnClick
Fires when the user clicks the button, or
when other code calls the button’s Click()
method.
EditBox
OnEscapePressed
Fires when the escape key is pressed while
the focus is in the edit box.
ScrollFrame
OnVerticalScroll Fires when the scroll frame is scrolled
vertically.
Frame
OnEnter
Fires when the mouse enters the boundaries
of the frame.
Frame
OnShow
Fires each time the frameis shown (from a
hidden state).
Frame
OnEvent
Fires when theframe has registered for a
game event, and the event occurs.
To register for a game event, you can call the
Frame:RegisterEvent()
method, which accepts the name of the event as a string. Once registered,you
can set the
OnEvent
widget script to run code when the event fires.
The following code creates a frame (with no display) that prints a message
to your chat frame when you enter and leave combat. (Don’t worry about the
names of the events; you’ll find some of them can be pretty peculiar.) In this
case the event to indicate you are entering combat is
PLAYER_REGEN_DISABLED
,
because that is when you stop regenerating health.
if not MyCombatFrame then
CreateFrame(“Frame“, “MyCombatFrame“, UIParent)
end
MyCombatFrame:RegisterEvent(“PLAYER_REGEN_ENABLED“)
MyCombatFrame:RegisterEvent(“PLAYER_REGEN_DISABLED“)
function MyCombatFrame_OnEvent(self, event, ...)
if event == “PLAYER_REGEN_ENABLED“ then
print(“Leaving combat...“)
elseif event == “PLAYER_REGEN_DISABLED“ then
print(“Entering combat!“)
end
end
MyCombatFrame:SetScript(“OnEvent“, MyCombatFrame_OnEvent)
Thatmay beconfusing right now, butthis isjustmeant to be an introduction
to game events.
C# TIFF: How to Reorder, Rearrange & Sort TIFF Pages Using C# Code
Reorder, Rearrange and Sort TIFF Document Pages in C#.NET Application. C# TIFF Page Sorting Overview. Reorder TIFF Pages in C#.NET Application.
how to rearrange pages in a pdf file; reorder pages of pdf
VB.NET PowerPoint: Sort and Reorder PowerPoint Slides by Using VB.
Sort and Reorder PowerPoint Slides Range with VB amount of robust PPT slides/pages editing methods powerful & profession imaging controls, PDF document, image
how to rearrange pages in pdf using reader; reorder pages pdf file
Chapter 8
Anatomy of an Addon
141
Loading of an Addon
The loading of an addon can also be somewhat confusing, so this section
shows you the different stages of the loading process.
1. When World of Warcraft is opened, the AddOns directory is scanned
to build a list of addons the user has installed, including their metadata
(metadata will notbe reloadedagain until youcompletelyclose the WoW
client).
2. Player logs in to World of Warcraft and is shown the character selection
screen for a given server.
3. At this point the player can enable and disable addons for either the
currently selected character or for all of the characters on the server.
4. Player selects a character and begins entering the game world.
5. Default userinterface XML andLua files areloaded in the order specified
in
FrameXML.toc
.This may cause Blizzard addons to load on demand,
depending on the situation.
6. Enabled, non-load-on-demand addons that do not have errors on the
AddOns page are loaded:
a. If this addon is dependent on any other addons and they are not
currently loaded, load them first, in an order that is dependent on the
operating system (some are alphabetic, others are by date created).
b. The addon’s Table of Contents file is read to create a list of files to be
loaded.
c. Each file is processed in order, and any
LoadAddon()
commands
are processed immediately. Any
script
elements in XML files are
processed immediately upon encountering them.
d. The saved variables for this addon are loaded (if present from a
previous game session).
e. The
ADDON_LOADED
event is fired with the first argument set to the
nameoftheaddon thathas completedloading.Dependingon theload
structure of your addons, the first event you see may not be for your
addon.
7. Blizzard’s saved variables, key binding, and macros begin loading and
synchronizing (this continues in the background).
8. The
SPELLS_CHANGED
event fires, indicating that the player’s spellbook
has loaded and is available to the user interface.
Read PDF in Web Image Viewer| Online Tutorials
from PDF documents; Extract images from PDF documents; Add, reorder pages in PDF files; Save and print PDF as you wish; More PDF Reading
pdf rearrange pages online; rearrange pages in pdf
VB.NET TIFF: Modify TIFF File by Adding, Deleting & Sort TIFF
Users can use it to reorder TIFF pages in ''' &ltsummary> ''' Sort TIFF document pages in designed powerful & profession imaging controls, PDF document, image
how to move pages around in pdf file; change page order in pdf reader
142
Part II
Programming in World of Warcraft
9. The
PLAYER_LOGIN
event fires indicating that most information about the
game world should be available to the user, and sizing and positioning
of frames should have been completed.
10. The
PLAYER_ENTERING_WORLD
event fires, indicating that the player has
entered the game world.
At some point after this sequence the
VARIABLES_LOADED
event should fire,
indicatingthatBlizzard’s savedvariables,macros,and key bindings havebeen
loaded or synchronized.
Summary
This chapter introduced you to the different components of an addon, both
on your computer and within the game world. You learned about the various
directives that can be included in a table of contents file. The frame and event
system was introduced briefly.
Learning about concepts is well enough, but you’re reading this book to
learn how to actually create addons. The next five chapters will lead you
through creating an addon called BagBuddy for World of Warcraft. Each
chapter introduces you to the details of a specific section of the user interface,
and then you will use those skills to implement a portion of the addon.
Each chapter will build on the code from the previous chapter, so try to
work through the chapters in order. If you do choose to work out of order,
there will be full code listings at the end of each chapter to prevent confusion.
C# PDF Page Rotate Library: rotate PDF page permanently in C#.net
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 pages and split
how to rearrange pdf pages; how to reorder pdf pages in reader
C# PDF: C# Code to Process PDF Document Page Using C#.NET PDF
just following attached links. C# PDF: Add, Delete, Reorder PDF Pages Using C#.NET, C# PDF: Merge or Split PDF Files Using C#.NET.
how to move pages in a pdf; how to rearrange pages in a pdf document
CH A P T E R
9
Working with Frames, Widgets,
and Other Graphical Elements
Chapter 8 introduced the concepts of frames, textures, and font strings.
This chapter builds on that introduction, showing you how to create the
foundations for an addon called BagBuddy.
Although the frame definitions in this chapter are written using XML, you
also see how the same effect could be achieved using purely Lua code. XML
is used for this addon because it is helpful to validate against the WoW
XML schema, and it helps separate the frame definitions from the behavioral
code of an addon.
Introducing BagBuddy
Each of the different race andclass combinations has its own sets of problems.
One area in which they all have issues is inventory. Items you loot go into the
first freeslot in yourbags,so whileplaying your bags can become an unsorted
mess. Countless addons help you sort your inventory, or display it in a more
meaningful way.
Theaddon you createin this chaptertakes a differentapproach andis meant
to work alongside your inventory. BagBuddy is an extra panel in the user
interface that can filter your inventory by name or rarity, and always displays
results with most-recently-looted first. Thatway ifyouneedtofindsomething
that you’ve just looted, you can open BagBuddy and it should be displayed at
the top of the list.
143
.NET Multipage TIFF SDK| Process Multipage TIFF Files
SDK, developers are easily to access, extract, swap, reorder, insert, mark up and delete pages in any multi upload to SharePoint and save to PDF documents.
reverse pdf page order online; reverse page order pdf online
C# Word: How to Create Word Document Viewer in C#.NET Imaging
in C#.NET; Offer mature Word file page manipulation functions (add, delete & reorder pages) in document viewer; Rich options to add
pdf reverse page order; reorder pages in pdf document
144
Part II
Programming in World of Warcraft
Creating an Addon Skeleton
BagBuddy consists of an XML definition of the frames, and a Lua script
that defines the behavior and logic of the addon. Start by creating a new
directory within your
Interface\AddOns
folder called
BagBuddy
.Inside this
new directory create a file called
BagBuddy.toc
and add the following content:
## Interface: 30200
## Title: BagBuddy
## Notes: A handy helper that allows you to filter your inventory
BagBuddy.lua
BagBuddy.xml
Now create
BagBuddy.xml
, adding just the basic definition of the
<Ui>
element that you have seen before:
<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“>
</Ui>
Finally, create an empty file called
BagBuddy.lua
.You won’t be adding any
code to it for the next few chapters, but creating it now ensures that the WoW
client will recognize the file without needing to be restarted.
Creating a Frame
The World of Warcraft user interface is based around the central concept of
frames. All textures and font strings must belong to a parent frame. Frames
can registerforevents and receive notification of game events. In addition, the
user can interact with frames, for example by clicking them. As a result, most
addons begin with a definition of a frame. BagBuddy is no different.
In
BagBuddy.xml
,add the following code inside the
<Ui>
element:
<Frame name=“BagBuddy“ parent=“UIParent“>
<Size x=“384“ y=“512“/>
<Anchors>
<Anchor point=“CENTER“ relativePoint=“CENTER“ “ i
relativeTo=“UIParent“/>
</Anchors>
</Frame>
This code creates a new frame called
BagBuddy
that is a child of
UIParent
.
The frame is given a width of 384 and a height of 512, and is anchored to the
center of
UIParent
,making it appear in the middle of the player’s screen.
Chapter 9
Working with Frames, Widgets, and Other Graphical Elements 145
Parenting
Every frame, texture, and font string can have at most one parent, and in fact
textures and font strings are required to have a parent. In addition, a frame
may have any number of child frames. Having an explicit mechanism for
parenting helps define a hierarchy for the user interface:
1. When a parent is hidden, all child frames cease to be visible. If this
weren’t the case, you’d have to manually hide all the other elements that
might be attached to a frame.
2. A frame’s effective scale is defined by multiplying theframe’s scaleby its
parent’s effective scale.If the parent is scaled to be largeror smaller, then
all of the children are grown or shrunk by the same amount.
3. A frame’s effective transparency (alpha) value is defined by multiplying
the frame’s alpha by its parent’s effective alpha.This enables you to make
not only a button transparent, but to ‘‘dim out’’ a frame and all of its
children at the same time.
Most of the Blizzard default frames are parented to
UIParent
. This is a
special frame that is used to hide the user interface when the player presses
Alt+Z. In addition, having a single common parent allows the interface to be
scaled consistently, making everything smaller or larger. When creating new
frames, most times you should parent the frames to
UIParent
at some point
to ensure they work the same as the other frames to which the user may be
accustomed.
When creating frames using XML, parenting alsoprovides you with an easy
to way to name your frames consistently. Any name can include the string
$parent
,which is expanded to the name of the parent frame when actually
being loaded.
You have three different ways to set the parent/child relationship between
objects:specifyinga parentexplicitlyusing XMLattributes,using thehierarchy
ofXMLelementstodefine the relationship,orcallingthe
SetParent()
method
on an object directly:
Attributes—Use the
parent
XML attribute to define a parent/child
relationship in an XML frame. This attribute’s value should be the name
of a frame that is to be set as the parent. In the preceding example, this is
used to parent
BagBuddy
to
UIParent
.You cannot use this attribute to set
the parent of a texture or font string.
XMLhierarchy—Each object is bydefaultgiven a parent simplythrough
its nested location within the XML file. Although creating sub-frames,
fontstrings,andtexturesis coveredlaterin thischapter, youshouldknow
that when defined in XML, a parent/child relationship is automatically
established.
146
Part II
Programming in World of Warcraft
The
SetParent()
method—Once an object has been created, you can
call the
SetParent()
method to change the parent. This function takes a
single argument: the frame object of the new parent (not its name).
Giving Objects Sizes
Naturally, before the user interface can know what to do with your objects, it
needs to know how large or small they are. The size of an object can be given
using the
<Size>
XML element, using either absolute or relative dimensions.
Absolute Dimensions
Absolute dimensions are specific pixel values that define how large an object
will be. In the earlier XML definition for BagBuddy, the frame is set to be
384 units wide by 512 units tall using the size tag:
<Size x=“384“ y=“512“/>
Most of Blizzard’s own XML code uses the following format instead:
<Frame name=“MyFrame“>
<Size>
<AbsDimension x=“384“ y=“512“/>
</Size>
</Frame>
Eithermethod declares thesizein thesameway. The more compact notation
is generally considered more readable and easier to type.
Relative Dimensions
Instead of using absolute values, a frame can express its height and width as a
percentage of its parent. Consider the following XML snippet that creates two
new frames:
<Frame name=“RelativeExample“>
<Size x=“100“ y=“50“/>
</Frame>
<Frame name=“RelativeExampleChild“ parent=“RelativeExample“>
<Size>
<RelDimension x=“0.5“ y=“0.5“/>
</Size>
</Frame>
The first frame,
RelativeExample
, has a size in absolute dimensions
(100 units wide by 50 units high), but the second is defined using relative
Chapter 9
Working with Frames, Widgets, and Other Graphical Elements 147
dimensions. As a result,
RelativeExampleChild
will be 50 units wide by
25 units high.You won’t seethis method of sizing usedvery often (as a matter
of fact it’s not currently used in the default interface), but it is still available as
an option.
Anchoring Objects
All object placement in World of Warcraft is done through a series of anchors
that attach one point on a frame to some other point on another frame.
Figure 9-1 shows the nine different anchor points on the frame.
CENTER
TOP
TOPRIGHT
RIGHT
BOTTOMRIGHT
BOTTOM
BOTTOMLEFT
LEFT
TOPLEFT
Figure 9-1: Available anchor points
In XML, anchors are placed within the
<Anchors>
element. A frame can
have any number of anchors, each defined using the
<Anchor>
element with
the following attributes:
point
—The point being anchored. The next section explains what each
of the anchor points is and how it works.
relativeTo
—The frame to which the point is being anchored. This
attribute is optional; if omitted, the default is the frame’s parent.
relativePoint
—The point to attach to on the
relativeTo
frame. This
attribute is optional; if omitted, the default is the point being anchored.
In addition to these attributes, the <Anchor>
element can contain an
<Offset>
element, with which youcan specify an offset in absolute or relative
dimensions (this element is used in the same way as the
<Size>
element,
allowing
x
and
y
attributes, or an absolute or relative dimension definition).
The code forBagBuddyanchors the center pointof the newframeto the center
of
UIParent
,which spans the full game screen.
Along the same lines, the following example creates a new frame called
MyFrame1
and another frame called
MyFrame2
. The first frame sits in the
center of the user interface, and the second frame sits directly to the right of
MyFrame1
.This is accomplished by anchoring the top-left point of
MyFrame2
to
148
Part II
Programming in World of Warcraft
the top-right point of
MyFrame1
.In this way the top edges are aligned with
each other, and the frames sit side by side.
<Frame name=“MyFrame1“ parent=“UIParent“>
<Size x=“50“ y=“50“/>
<Anchor>
<Anchor point=“CENTER“ relativePoint=“CENTER“/>
</Anchors>
</Frame>
<Frame name=“MyFrame2“ parent=“UIParent“>
<Size x=“50“ y=“50“/>
<Anchor>
<Anchor point=“TOPLEFT“ relativePoint=“TOPRIGHT“ i
relativeTo=“MyFrame“/>
</Anchors>
</Frame>
In this example, the top-left corner of
MyFrame2
is attached to the top-right
corner of
MyFrame1
,aligning their top edges and placing them side-by-side.
When there is no offset, the
<Offset>
tag can be left out entirely, and the
<Anchor>
tag can be made self-closing. The frames could be aligned using
the left point of
MyFrame2
andthe right point of
MyFrame1
,but ifthe frames are
different sizes, the top edges would not align.
Sticky Anchors
Anchoring a frame is not a one-time placement usedto position the frame, but
rather a sticky attachment between two objects. In the preceding example, if
you latermove
Frame1
,
Frame2
will followit to obey the defined anchorpoints.
SetAllPoints
If you want an object to have the same placement and size as another frame,
you can use the
setAllPoints
XML attribute, or the
SetAllPoints()
method.
This sets all ofthe anchor points on thesecond frame to thesamepoints on the
parent frame. You’ll see this attribute in use laterin this chapter.
Anchor Examples
The easiest way to visualize anchoring is to look at examples and determine
how the objects might be anchored together. Table 9-1 contains a number of
anchor examples, along with the anchor points that were used. Each of these
examples attaches FrameA to FrameB.
Documents you may be interested
Documents you may be interested