c# pdf viewer open source : How to move pages in pdf SDK application API .net windows asp.net sharepoint World%20of%20Warcraft%20Programming%20(2nd%20Edition)53-part1853

Chapter 25
Taking Protected Action in Combat 489
with
“_on“
;that is,if triggeredby a change to the
state-unitexists
attribute,
it looks for a snippet to handle that attribute in the
_onstate-unitexists
attribute. Instead of the raw name and value arguments, it calls that snippet
with the
stateid
argument, which is the name of the changed attribute minus
the
“state-“
portion,and the
newstate
argument, which is thesame as
value
.
Thatis, ifthe statehandlerwas triggeredby a changeinthe
state-unitexists
attribute, the
stateid
argument will be
“unitexists“
.
To see one rather remarkable way you can use
SecureHandlerState
Template
,enter the following block into a fresh page in-game (if you don’t
have a priest to test this with, substitute spells or items appropriate to your
character):
local self = AvatarCaster or CreateFrame(“Button“, “AvatarCaster“, i
nil, “SecureActionButtonTemplate,SecureHandlerStateTemplate“)
self:Hide()
self:SetAttribute(“_onstate-mouseover“, [[
if newstate == “exists“ then
local name = self:GetName()
self:SetBindingClick(false, “SHIFT-BUTTON1“, name, “shift1“)
self:SetBindingClick(false, “CTRL-BUTTON1“, name, “ctrl1“)
self:SetBindingClick(false, “SHIFT-BUTTON2“, name, “shift2“)
self:SetBindingClick(false, “CTRL-BUTTON2“, name, “ctrl2“)
else
self:ClearBindings()
end ]]
)
RegisterStateDriver(self, “mouseover“, i
“[target=mouseover,exists] exists; noexists“)
self:SetAttribute(“unit“, “mouseover“)
self:SetAttribute(“type“, “spell“)
self:SetAttribute(“*spell-shift1“, “Power Word: Fortitude“)
self:SetAttribute(“*spell-shift2“, “Power Word: Shield“)
self:SetAttribute(“*spell-ctrl1“, “Flash Heal“)
self:SetAttribute(“*spell-ctrl2“, “Renew“)
Run this script once you’ve finished it. Try holding down Shift or Control
and clicking various character or monster avatars in the game-world display;
observe how spells are cast on them directly without changing your target.
Now, you can break down how it works.
The frame is created from a combination of
SecureActionButtonTemplate
(so that it can actually cast spells) and
SecureHandlerStateTemplate
(so that
it can respond to changes in the game state). The
AvatarCaster or
portion
simply prevents you from creating a new frame if you need to run the script
more than once, such as by making an error in the script the first time. The
How to move 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
change pdf page order; reorder pdf pages online
How to move 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
rearrange pdf pages online; pdf rearrange pages online
490
Part III
Advanced Addon Techniques
frameis purelyfunctional,andrequires novisual presentation such as textures
or font strings.
The
_onstate-mouseover
snippet will be called whenever the
state-mouseover
attribute is set, with
“mouseover“
as the
stateid
argument and the new value of the attribute as the
newstate
argument.
Because this snippet is only being used for one state variable, it disregards
the
stateid
argument. If
state-mouseover
is set to
“exists“
,the button will
rebind several mouse clicks so that they ‘‘click’’this action button even though
the mouse is no longer over it. These bindings do not replace any standard
bindings associated with these button clicks; instead, they are ‘‘owned’’ by
the frame whose handle sets them, and last until the frame releases them (as it
does when the snippet is called with
“noexists“
).
Rather than standard values such as
“LeftButton“
,the button argument
received by the button’s
OnClick
handler will be a special value such as
“shift1“
. This workaround is need to preserve information about which
modifiers were down when the click was made, because when a binding that
includes modifiers, such as
SHIFT-F1
,is pressed, the binding’s actual code is
resolved as if Shift (or whatever modifiers are included in the binding) were
not being held down; this prevents the action button from finding traditional
modified attributes such as
shift-spell1
.
The
RegisterStateDriver
call establishes a driver so that when your
mouse cursor is pointing at a targetable player or creature, the button’s
state-mouseover
attribute will be set to either
“exists“
or
“noexists“
,
accordingly. It will not actually set the frame’s attribute value if the new
value would be the same as the old value, so the frame’s
_onstate-mouseover
snippet will only be called when it actually changes.
The last block of code sets up the spellcasting characteristics of the button,
as explained in Chapter 15. Two points are worthy of note: the button’s
unit
is
“mouseover“
,so that spells will be cast on whatever playeror mob is under
the mouse in the world frame; and the attributes are phrased to key off of the
custom button values supplied by the
SetBindingClick
calls in the previous
code snippet.
State Conditionals
The key to registering state drivers that actually do what you want is under-
standing the conditional system. If you are familiar with writing macros, you
have likely seen it already; macros that select a spell based on modifier keys
or the nature of the target rely on the same system. When you give it a string,
it returns a portion of that string basedon the game state by calling a function
called
SecureCmdOptionParse
.
This function starts at the beginning of the string and looks for the first
matching pair of square brackets (
[]
)and anything they contain. If it does not
C# TIFF: How to Reorder, Rearrange & Sort TIFF Pages Using C# Code
Using this C#.NET Tiff image management library, you can easily change and move the position of any two or more Tiff file pages or make a totally new order for
rearrange pdf pages reader; reorder pdf page
C# Word - Sort Word Pages Order in C#.NET
page reorganizing library control, developers can swap or adjust the order of all or several Word document pages, or just C# DLLs: Move Word Page Position.
how to reorder pages in pdf reader; change page order in pdf online
Chapter 25
Taking Protected Action in Combat 491
find a pair of brackets, it goes to either the first semicolon it finds, if there is
one, or the end of the string, if there isn’t, and returns everything from where
it is upto that point, trimming offany leading or trailing whitespace.If it does
findsuch a pair,it separatesthe contents into a seriesof conditions whereverit
finds commas, and determines the truth value of each condition. If all of them
are true, it looks for either the next semicolon after the end bracket, or the end
of the string, and returns anything before the point it finds, starting from the
last closing square bracket before that point, again trimming off any leading
or trailing whitespace. If any of the conditions are false, it repeats its search,
starting from after the ending bracket of the set of conditions it just checked.
Figure 25-3 shows the breakdown of parsing a secure command.
Figure 25-3: Breaking down conditionals
Acomprehensive list(asof the timeofthis writing) of recognized conditions
follows. The system is case-sensitive; conditions must be in lowercase to be
recognized, except for the names of spells, units, or creature types, for which
case is disregarded. If a condition is encountered that is not recognized, it is
automatically treated as being false, and a system message appears in your
chat window indicating that an unknown macro option was encountered and
what it was. A recognized condition prefaced with
no
is alsoa validcondition,
meaning the opposite of what the condition tests for; for instance,
[nocombat]
returns true if you are not in combat.
Target Specifiers and Unit Conditions
Although most conditions, such as
[combat]
,are general inquiries about the
player’s game state, certain conditions apply to a specific unit, such as
[dead]
.
By default,such conditions refer to the player’s currenttarget; but if you want
to ask about the status of another unit, you can include a
[target=unitID]
clause in your conditions. By itself, a
[target=unitID]
specifier is always
true; this is useful in many macros (because in a macro, such a specifier
will also redirect a spell or item being cast to its unit), but not in state
driver conditionals. However, they still have many uses in state drivers when
combined with specific unit conditions, such as
[target=mouseover,exists]
in the
AvatarCaster
example earlier.
Any acceptable
unitID
can be supplied. Remember that names of pets or
characters in your raid or party are also valid
unitID
s, but names of mobs,
totems, enemies, or allied players outside your group are not.
C# PowerPoint - Sort PowerPoint Pages Order in C#.NET
library control, developers can swap or adjust the order of all or several PowerPoint document pages, or just change the C# DLLs: Move PowerPoint Page Position.
pdf reorder pages online; move pdf pages
C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
RasterEdge XDoc.PDF allows you to easily move PDF document pages position, including sorting pages and swapping two pages. Copying and Pasting Pages.
pdf reverse page order preview; how to rearrange pages in pdf document
492
Part III
Advanced Addon Techniques
State Variables
Some conditions can have more than one value. For instance,
[modifier]
is
trueifany of the Ctrl, Shift,and Alt keys are held down, but
[modifier:ctrl]
is true only if the Control key, specifically, is down, whether or not other
modifier keys are down.
Astate variablecan becheckedformore than onepossiblevaluebystringing
them together; for example,
[modifier:shift/alt]
is true if either the Shift
or the Alt key is down. If you negate this condition, first the whole condition
is evaluated, then the result is negated, so
[nomodifier:shift/alt]
is true if
neither the Shift key nor the Alt key is down. This means that if you want to
test if the Control key and only the Control key is being held, you can use the
compound condition
[modifier:ctrl, nomodifier:shift/alt]
.
Some condition variables can be checked meaningfully without checking
them for a particular value; that is,
[channeling]
is true if you are presently
channeling any spell, but
[channeling:Blizzard]
is only true if you are
particularly channeling the Blizzard spell.However, somecondition variables
always have a value, so you must specify one or more values to get a
meaningful result.
[actionbar:3]
is only true if your main action bar is set to
page 3, but
[actionbar]
is always true, because youare always on some page
or another.
Unit Conditions
The following conditions are tested against your target, unless you specify
another target using a
[target=unitID]
phrase:
[exists]
—Indicates whether the unit exists, regardless of its condition.
So
[noexists]
will be true if you have no target.
[harm]
—Indicates that the unit exists and that youare able to cast attack
spells on it. So
[target=focus,noharm]
means that either you have no
focus or that it is not attackable.
[help]
—Indicates that the unit exists and that you could target it with
beneficial spells such as buffs or heals. It is possible, although very
uncommon, for both
[help]
and
[harm]
to be true for a given unit; it is
more common forboth
[noharm]
and
[nohelp]
to be true for a unit, such
as certain NPCs; and naturally, if
[noexists]
is true for a unit, then both
[nohelp]
and
[noharm]
will also be true.
[dead]
—Trueiftheunitexistsandisdeadora ghost.Currently,
[nodead]
is usually more functional, and usually needs tobe in a
[exists,nodead]
clause to be useful.
[party]
and
[raid]
—True if the target is in the same party or raid with
you, respectively. If
[party]
is true,
[raid]
will also be true, but not
C# PDF insert text Library: insert text into PDF content in C#.net
int pageIndex = 0; // Move cursor to (400F, 100F). String outputFilePath = Program.RootPath + "\\" output.pdf"; doc.Save(outputFilePath);
rearrange pdf pages in reader; switch page order pdf
VB.NET PDF insert text library: insert text into PDF content in vb
Dim pageIndex As Integer = 0 ' Move cursor to (400F, 100F). Dim outputFilePath As String = Program.RootPath + "\\" output.pdf" doc.Save(outputFilePath).
reorder pages in pdf; change page order in pdf file
Chapter 25
Taking Protected Action in Combat 493
always the other way around. Be careful not to confuse these conditions
with
[group:party]
and
[group:raid]
,describedlater.
General Conditions
These conditions always apply to the condition of the player character or the
client UI,regardless of which unit mightbe specified in the conditional clause.
Several of the following conditions have abbreviations or synonyms that you
can use if you need to make your code more concise:
[actionbar:1/2/3/4/5/6]
,
[bar:1/2/3/4/5/6]
—These both return true
ifthe given page (orone ofthegiven pages)is currently theactivepagein
the UI. In state drivers, this can be useful for synchronizing two or more
action bars together so that one changes when another does.
[bonusbar:1/2/3/4/5]
—Used to handle special additional action bar
pages such as those provided when a warrior switches stances or when a
druidswitchesshapeshift forms. Assuming thatthecharacterhas learned
all appropriate stances, forms, or similar capabilities, they are numbered
as shown in Table 25-2.
Table 25-2: Bonus Bar Values for Various Classes and Modes
BONUS BAR
WARRIOR
DRUID
ROGUE
PRIEST/WARLOCK
1
Battle
Stance
Bear Form/
Dire Bear
Form
Stealth
Shadowform or
Metamorphosis
2
Defensive
Stance
Cat Form
Shadow
Dance
3
Berserker
Stance
Moonkin
Form/Tree
of Life Form
There are two other numbers: 4, which is presently not used by the stock
UI, and 5, a special case available to all players, used when you are
possessing another unit or controlling a vehicle.
[button:1/.../5/<virtual
click>]
,
[btn:1/.../5/<virtual
click>]
—Because it selects based on what mouse button was clicked on
an action button to trigger the current action, this option is very useful in
macros, but is almost totally purposeless for use in state drivers.
[channeling],[channeling:<spell name>{/<spell name>}]
—In its
general form, this condition is true if the player is channeling any spell;
C# PDF Image Extract Library: Select, copy, paste PDF images in C#
Get image information, such as its location, zonal information, metadata, and so on. Able to edit, add, delete, move, and output PDF document image.
pdf move pages; move pages in a pdf file
VB.NET PDF Library SDK to view, edit, convert, process PDF file
Rapidly and multiple PDF document (pages) creation and edit methods file formats; merge, append, and split PDF files; insert, delete, move, rotate, copy
reorder pdf pages reader; how to change page order in pdf acrobat
494
Part III
Advanced Addon Techniques
with a value or list of values, it is true while the player is channeling any
of the listed spells.
[combat]
—True whenever the player character or his pet is engaged in
combat.
[equipped:<item type>]
,
[worn:<item type>]
—True ifthe player char-
acter has an item that is of the given type or subtype equipped and
equipped in the given inventory slot.
It can check for any of the following item types or subtypes; it cannot
check for a specific item by name:
Arrow
Leather
Shields
Bullet
Librams
Staves
Bows
Mail
Thrown
Cloth
Miscellaneous
Totems
Crossbows
One-Hand
Two-Hand
Daggers
One-Handed Axes
Two-Handed Axes
Guns
One-Handed Maces
Two-Handed Maces
Fishing Poles
One-Handed Swords
Two-Handed Swords
Fist Weapons
Plate
Wands
Idols
Polearms
[flyable]
—Returns true if the player is in an area where flying is
allowed. This also returns true even if the player lacks a skill needed to
fly in that area.
[flying]
—True if the player is flying; that is, off the ground on a flying
mount or in a flying form. It is not true when the character is in the air
because he is jumping or falling, even with a slow fall effect.
[group]
,
[group:party]
,
[group:raid]
[group]
is true when you are
in any kind of group;
[group:raid]
is true whenever you are in
any kind of raid group, including battlegrounds.
[group:party]
and
[group:party/raid]
are legal syntax, but are both effectively longer
synonyms for
[group]
.
[indoors]
—True whenever the player is indoors.
[modifier:shift/ctrl/alt/<MODIFIEDCLICK>]
,
[mod:shift/ctrl/
alt/<MODIFIEDCLICK>]
[modifier]
and
[mod]
by themselves are true
whenever the player is holding any of the Shift, Control, or Alt keys
down. With a specified key or list of keys, they are true whenever any of
the specified keys are down.
This condition also supports abstract, rebindable modifiers such as
SELFCAST
(which defaults to the Alt key). See the
IsModifiedClick
and
SetModifiedClick
functions (API) for more information.
Chapter 25
Taking Protected Action in Combat 495
[mounted]
—Truewhenevertheplayer characteris on any kindofmount,
including automated flight path (taxi) mounts, but typically not when
operating a vehicle.
[outdoors]
—True whenever the player character is outdoors. It uses a
separate API from
[indoors]
(pertaining to the usability of certain spells
and items, which does not necessarily correspond to whether a roof is
overtheplayer’shead),soitis notalwayssynonymouswith
[noindoors]
,
although this will generally be the case.
[pet]
,
[pet:<pet name>]
,
[pet:<pet type>]
[pet]
is true whenever
the player character is controlling a pet of any kind, including a vehicle
or possessed unit. With an argument or list of arguments, it is true if the
player character is controlling a pet whose name or type (such as owl or
succubus) matches any of the listed arguments.
[spec:n]
—True if the player character’s currently active talent special-
ization index is in the list of arguments. At the time of this writing, only
the values 1 and 2 are possible, but this could be expanded at some point
in the future.
[stance]
,
[form]
,
[stance:0/1/2/.../n]
,
[form:0/.../n]
—By itself,
[stance]
or
[form]
returns true if the player character is in any stance
or shapeshift form; this will always be true for warriors. With a list of
numerical arguments,it is true when theplayer character’s currentstance
or form index is in the argument list. Table 25-3 shows the possible
indices, depending on class:
Table 25-3: Stance Values for Different Classes
INDEX WARRIOR
DRUID
ROGUE
PRIEST
SHAMAN
WARLOCK
1
Battle
Stance
Bear
Form/Dire
Bear Form
Stealth
Shadow
form
Ghost
Wolf
2
Defensive
Stance
Aquatic
Form
Metamor-
phosis
3
Berserker
Stance
Cat Form
Shadow
Dance
4
Travel Form
Druid stance values are a bit more complicated because, due to talents, the
player might have Tree of Life form or Moonkin Form. In that case, stance 5
will contain this form, and stance 6 will contain the player’s flight form(either
Flight Form or Swift Flight Form). If the player does not have either of those
talented stances, the flight forms will be moved into stance 5.
496
Part III
Advanced Addon Techniques
This condition is closely related, but not identical, to
[bonusbar]
.
[stealth]
—Trueiftheplayercharacterisin anykindofstealthcondition,
including rogue stealth, druid prowl, night elf shadowmeld, or mage
invisibility. There is presently no way to determine if a hunter pet is in
stealth from the conditional system.
[swimming]
—True whenever your character is in the water.
Summary
This chapter addresses quite a lot of material, but fortunately most of it is
based on a few common principles.By now, you should grasp how to:
Write snippets that use implied arguments, private globals, frame han-
dles,and a restricted environment.
Attach these snippets to frames for secure execution by using
SecureHandler
templates or script wrappers.
Register state drivers to take action on frames,and constructconditionals
that will select the values you want to use based on game state.
The Code
BlessedMenus
BlessedMenus.toc
## Interface: 30300
## Title: BlessedMenus
## Notes: Creates menus on party frames to select spells to cast on them
BlessedMenus.xml
BlessedMenus.lua
BlessedMenus.xml
<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“>
<Button name=“BlessedMenusSpellButtonTemplate“ enableMouse=“true“ “ i
inherits=“SecureActionButtonTemplate“ virtual=“true“>
<Size x=“144“ y=“16“ />
<Layers>
Chapter 25
Taking Protected Action in Combat 497
<Layer level=“ARTWORK“>
<Texture parentKey=“icon“>
<Size x=“16“ y=“16“ />
<Anchors>
<Anchor point=“TOPLEFT“ />
</Anchors>
</Texture>
</Layer>
</Layers>
<Attributes>
<Attribute name=“type“ value=“spell“ />
<Attribute name=“useparent-unit“ value=“true“ type=“boolean“ />
</Attributes>
<Scripts>
<OnLoad>
SecureHandlerWrapScript(self, “OnClick“, self:GetParent(),
[[return nil, “closeMenu“]],
[[if message == “closeMenu“ then owner:Hide() end]]
)
self:GetFontString():SetPoint(“LEFT“, self.icon, “RIGHT“, 2, 1)
self:RegisterEvent(“PLAYER_ENTERING_WORLD“)
</OnLoad>
<OnEvent>
self.icon:SetTexturei
(GetSpellTexture(self:GetAttribute(“spell“)))
</OnEvent>
</Scripts>
<ButtonText inherits=“GameFontHighlight“ justifyH=“LEFT“ />
<HighlightTexture alphaMode=“ADD“>
<Color r=“0.75“ g=“0.75“ b=“0.6“ a=“0.5“ />
</HighlightTexture>
</Button>
<Button name=“BlessedMenusMenuTemplate“ hidden=“true“ i
inherits=“SecureHandlerShowHideTemplate,SecureHandlerClickTemplate“ i
virtual=“true“>
<Size x=“160“ y=“18“ />
<Backdrop bgFile=“Interface\Tooltips\UI-Tooltip-Background“ i
edgeFile=“Interface\Tooltips\UI-Tooltip-Border“ tile=“true“>
<EdgeSize val=“16“/>
<TileSize val=“16“/>
<BackgroundInsets left=“4“ right=“4“ top=“4“ bottom=“4“/>
<BorderColor r=“1“ g=“1“ b=“1“ />
<Color r=“0.09“ g=“0.09“ b=“0.19“ />
</Backdrop>
<Attributes>
<Attribute name=“useparent-unit“ value=“true“ type=“boolean“ />
<Attribute name=“_onshow“ value=“self:SetBindingClick(false, i
’ESCAPE’, self:GetName(), 'Escape’)“ />
<Attribute name=“_onhide“ value=“self:ClearBindings()“ />
<Attribute name=“_onclick“
498
Part III
Advanced Addon Techniques
value=“if button == 'Escape’ then self:Hide() end“ />
</Attributes>
</Button>
</Ui>
BlessedMenus.lua
local function BlessedMenu(name, ...)
local self = CreateFrame(“Frame“, name, nil, i
“BlessedMenusMenuTemplate“)
self.buttons = {}
for i=1, select(’#’, ...) do
local spellName = select(i, ...)
local button = CreateFrame(“Button“, nil, self, i
“BlessedMenusSpellButtonTemplate“)
self.buttons[i] = button
button:SetAttribute(“spell“, spellName)
button:SetText(spellName)
if i == 1 then
button:SetPoint(“TOPLEFT“, 8, -8)
else
button:SetPoint(“TOPLEFT“, self.buttons[i - 1], “BOTTOMLEFT“, i
0, -2)
end
end
self:SetHeight(#self.buttons * 18 + 14)
return self
end
local heals = BlessedMenu(“BlessedMenusHeals“,
“Holy Light“,
“Flash of Light“,
“Lay on Hands“
)
local hands = BlessedMenu(“BlessedMenusHands“,
“Hand of Protection“,
“Hand of Freedom“,
“Hand of Salvation“,
“Hand of Sacrifice“
)
local blessings = BlessedMenu(“BlessedMenusBlessings“,
“Blessing of Might“,
“Blessing of Kings“,
“Blessing of Wisdom“
)
local openSpellList = [[
local menu = IsAltKeyDown() and “blessings“
Documents you may be interested
Documents you may be interested