c# pdf viewer open source : How to reorder pdf pages in control SDK system azure wpf html console World%20of%20Warcraft%20Programming%20(2nd%20Edition)45-part1844

Chapter 21
Responding to the Combat Log and Threat Information
409
elseif event == “PLAYER_REGEN_DISABLED“ then
self.in_combat = true
self.combat_start = GetTime()
counter = 0
-- Reset the OnUpdate counter
self:TakeSnapshot()
self:SetScript(“OnUpdate“, self.OnUpdate)
elseif event == “PLAYER_REGEN_ENABLED“ then
self.in_combat = false
self.combat_time = self.combat_time + GetTime() - self.combat_start
self:SetScript(“OnUpdate“, nil)
self:UpdateFrame()
elseif event == “PLAYER_LOGIN“ then
self:Initialize()
end
end
The different sections of this function are explainedin the following section.
COMBAT_LOG_EVENT_UNFILTERED
The
COMBAT_LOG_EVENT_UNFILTERED
event will happen the most often, so you
want to ensure that it can be processed quickly. You put it at the top of the
event handler and only pass it to the processing function when the event
originates from an entity in the player’s party.
PARTY_MEMBERS_CHANGED
When the composition of the player’s party changes, you need to scan and
update the petGUID mappings.Whenever the
PARTY_MEMBERS_CHANGED
event
fires, you loop through each of the party units and call the
UpdatePets()
method, passing in the unit. Then, if the player isn’t currently in combat, you
update the frame.You don’t force an update when the player is in combatjust
because you already know it’ll update when the
OnUpdate
triggers.
UNIT_PET
When a unit summons a pet, the
UNIT_PET
event will fire, with the first
argument being the
unitID
. As a result, you just call your
UpdatePets()
function, passing in the unitID.
PLAYER_REGEN_DISABLED
You’ll need some way to track whether or not the player is in combat. You
could use the
InCombatLockdown()
function, but instead this addon uses the
PLAYER_REGEN_DISABLED
event to set a flag on the frame. At the same time,
you also store the current time in the
combat_start
variable (so you can later
subtract it to get elapsed time). Then you take a snapshot to ensure you have
apoint for comparison, and set the
OnUpdate
script so it will start triggering.
How to reorder pdf pages in - 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 pages in a pdf reader; how to move pages around in pdf
How to reorder pdf pages in - 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
change pdf page order online; rearrange pdf pages online
410
Part III
Advanced Addon Techniques
PLAYER_REGEN_ENABLED
The
PLAYER_REGEN_ENABLED
eventwill fire when theplayer leaves combat, and
as a result the logic in this section is much the reverse of entering combat.
You turn the combat flag off, and update the total amount of combat time by
subtracting the current time from the start time. Next you clear the
OnUpdate
function and update the frame, which will show the total stats instead of the
rolling average.
Creating the Frame Display
As an initial example, the display for this addon will be series of text strings
that contain the damage and healing information. Eventually, you’ll want to
expand ittouse status bars insteadoftextstrings.Create your
CreateFrames()
function:
function CombatStatus:CreateFrames()
self:ClearAllPoints()
self:SetPoint(“TOP“, MinimapCluster, “BOTTOM“, 0, -15)
self:SetWidth(300)
self:SetHeight(150)
self.rows = {}
for i = 1, 10 do
local row = self:CreateFontString(nil, “OVERLAY“, i
“GameFontHighlight“)
row:SetText(“Blah“)
self.rows[i] = row
if i == 1 then
row:SetPoint(“TOPLEFT“, 0 ,0)
else
row:SetPoint(“TOPLEFT“, self.rows[i-1], “BOTTOMLEFT“, 0, 0)
end
end
end
The frame is anchored directly below the minimap cluster and consists of10
different font strings.
Updating the Frame Display
The actual calculations are accomplished in the
UpdateFrame()
method. Add
this methodtoyourfileanywhere belowthe
TakeSnapshot()
method, because
it uses the
units
table defined just before that function.
function CombatStatus:UpdateFrame(elapsed)
for idx, unit in ipairs(units) do
local row = self.rows[idx]
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 document; reorder pages in pdf
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 pdf acrobat; move pages in pdf acrobat
Chapter 21
Responding to the Combat Log and Threat Information
411
if UnitExists(unit) then
local guid = UnitGUID(unit)
if self.pet_guids[guid] then
guid = self.pet_guids[guid]
end
local dps, hps
if elapsed
and elapsed > 0 then
-- We are being called from the OnUpdate so we compare
-- against the snapshot rather than calculating the
-- total DPS and HPS
dps = (self.party_damage[guid] - self.snapshots[guid].damage) i
/ elapsed
hps = (self.party_heals[guid] - self.snapshots[guid].heals) i
/ elapsed
elseif self.combat_time > 0 then
dps = self.party_damage[guid] / self.combat_time
hps = self.party_heals[guid] / self.combat_time
else
dps = 0
hps = 0
end
-- Actually update the frame with the new values here
local name = UnitName(unit)
local dpstext = self:ShortNum(dps)
local hpstext = self:ShortNum(hps)
row:SetFormattedText(“[%s] DPS: %s, Heal %s“, name, dpstext, i
hpstext)
row:Show()
else
row:Hide()
end
end
end
The overall strategy here is to loop over each of the unitIDs and check to
see if the unit exists. If so, you fetch the GUID, translating it to a pet GUID if
necessary.Then youhavetwodifferentsets of calculations.If the elapsedvalue
it set, it indicates the amount of time that has passed since the last snapshot.
In this case, you divide the difference between the current damage and the
snapshot by theelapsedtime. Otherwise,youtakethetotal damageanddivide
by the total time in combat.
You use a utility function you’re going to write to convert the numeric DPS
into a shorter version. Finally, you set the text string to display the heal per
second and damage per second. Define the
ShortNum()
method:
function CombatStatus:ShortNum(num)
local large = num > 1000
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
reordering pages in pdf document; how to move pages in a pdf document
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 pages in pdf file; move pages in a pdf
412
Part III
Advanced Addon Techniques
return string.format(“%.2f%s“, large and (num / 1000) or num, i
large and “k“ or ““)
end
This function takes in a number and if it’s greater than 1000, converts it to
ashorter form. This function will turn the damage 3337 into 3.34k, making it
much easier to read and compare.
Future Additions
In its current form, CombatStatus is very primitive. Instead of showing status
bars (or some other, flashier way of displaying the data), it uses simple
formatted font strings. There are blank spaces left when units don’t exist and
it’s not customizable in any way. Think about a few enhancements you might
want for this basic addon, and considerreleasing your own updated version!
Summary
This chapter introduced the combat log event system, including how to
distinguish between the different combat events. You learned the different
prefixes and suffixes that make up different events, including the arguments
thatdifferbetween them.You created an addon that can track thedamage and
healing of your party both as a running average and total average. The next
chapter shows you how to create scroll frames for displaying your data.
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
move pages within pdf; how to move pages in pdf files
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
pdf reorder pages; reorder pages in a pdf
CH A P T E R
22
Creating Scroll Frames
When creating a custom user interface, you may have a need to display data
that is too large for a reasonably sized window. World of Warcraft allows you
to create frames that can scroll both horizontally and vertically, giving you
more flexibility in the display of your data. This chapter shows you how to
create two differenttypes of scroll frames that are usedthroughoutthe default
user interface.
A
ScrollFrame
is used to allow horizontal and vertical smooth scrolling of
data that is too large for the containing frame. In the default user interface,
the Quest Log uses a scroll frame when the quest description is too long for
the window (see Figure 22-1). This type of scroll frame allows for smooth
pixel-by-pixel scrolling of the contents.
Afaux scroll frame is,as the name suggests,a way to simulate a scroll frame
without actually using one. The Auction House uses this technique to display
alistof auctions, shown in Figure 22-2. Because each row of the listing has the
same size, only enough rows are created to show a single page of the listing
instead of creating one for every single item.
As the user scrolls through the listing, the rows are updated to display
different elements of the list. For certain applications this method is more
efficient than trying to create a set of frames for every single row of the listing.
The inner workings of a scroll frame are very complex, so suffice it to say
that the user interface first has to render the contents, and then render the
scroll frame to contain it. This can be very inefficient, and you should avoid
using scroll frames in tense situations, such as combat.
This chapter first shows you how to create actual scroll frames, and then
introduces the basics of creating
FauxScrollFrames
.
413
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 reverse page order in pdf; how to rearrange pdf pages reader
.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.
change pdf page order; reverse pdf page order online
414
Part III
Advanced Addon Techniques
Scroll frame
Scroll bar
Figure 22-1: Quest Log scroll frame not scrolled (left) and scrolled (right), showing more
of the quest text.
Figure 22-2: Auction House using a FauxScrollFrame
Using Scroll Frames
Ascroll frame comprises the scrolling frame itself (the frame actually doing
the visual clipping of its contents) and the scroll child (a frame that contains
the contents). The scroll child can be a frame, a button or any other frame
Chapter 22
Creating Scroll Frames 415
type.Although the scroll frame provides an API for scrolling horizontally and
vertically, it does not provide any scroll bars on its own.
You can experiment with scroll frames by creating a new addon skeleton
called
ScrollFrameTest
,so you have a place to put the test code for this
chapter. Create
ScrollFrameTest.toc
with the following contents:
## Interface: 30300
## Title: ScrollFrameTest
## Notes: Test addon for scroll frames
ScrollFrameTest.xml
ScrollFrameTest.lua
Next, create the basic frame definition within
ScrollFrameTest.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“>
<ScrollFrame name=“ScrollFrameTest“>
<Size x=“150“ y=“150“/>
<Anchors>
<Anchor point=“CENTER“/>
</Anchors>
<Layers>
<Layer level=“BACKGROUND“>
<Texture setAllPoints=“true“>
<Color r=“0.0“ g=“0.0“ b=“0.0“/>
</Texture>
</Layer>
</Layers>
</ScrollFrame>
</Ui>
This definition creates a 150x150 frame in the center of the screen with a
black background.
Adding a Scroll Child
Theactual contents of the frame aredefinedwithinthe
<ScrollChild>
element
when using XML, or set with the
SetScrollChild()
method when using Lua.
Add the following section to
ScrollFrameTest.xml
immediately after the
</Layers>
tag:
<ScrollChild>
<Frame>
<Size x=“250“ y=“250“/>
<Layers>
<Layer level=“ARTWORK“>
<Texture file=“Interface\Icons\Spell_Shadow_DemonicFortitude“>
416
Part III
Advanced Addon Techniques
<Size x=“100“ y=“100“/>
<Anchors>
<Anchor point=“CENTER“/>
</Anchors>
</Texture>
</Layer>
</Layers>
</Frame>
</ScrollChild>
The
<ScrollChild>
element should contain exactly one frame (or frame
derivative) that contains the contents of the scroll frame. This child frame can
be any size, but it will be visually clipped to the size of the
<ScrollFrame>
element. As a matter of fact, the horizontal and vertical scroll ranges are
defined by the size of this child frame.
Load the game and you should see an image in the center of your screen
similar to that shown in Figure 22-3.
Figure 22-3: ScrollFrameTest
Manipulating a ScrollFrame
Like any other specific type of frame, a
ScrollFrame
has different methods
and handler scripts available. For example,the followingmethods can be used
on scroll frames:
GetHorizontalScroll()
—Returns the current scroll value of the hori-
zontal scroll component.
GetVerticalScroll()
—Returns the current scroll value of the vertical
scroll component.
SetHorizontalScroll()
—Sets the scroll value of the horizontal scroll
component.
SetVerticalScroll()
—Sets the scroll valueof the vertical scroll compo-
nent.
GetHorizontalScrollRange()
—Returns the maximum scroll range for
the horizontal scroll component.
Chapter 22
Creating Scroll Frames 417
GetVerticalScrollRange()
—Returns the maximum scroll range for the
vertical scroll component.
UpdateScrollChildRect()
—Updates the virtual size of the scroll child.
This function should be called when the contents of the scroll frame are
changed.
You can use these methods to center the image, using the following scripts
in-game:
/run ScrollFrameTest:SetHorizontalScroll(-50)
/run ScrollFrameTest:SetVerticalScroll(50)
Note thatthe horizontal scroll requires a negative value to scroll the childto
the right, whereas vertical scroll takes a positivenumberto scroll the child up.
This is consistent with the way coordinates in the user interface work, where
(0,0) is the bottom-left corner of the screen.Figure 22-4 shows the frame when
adjusted using these commands.
Figure 22-4: ScrollFrameTest scrolled 50 pixels to the left and 50 pixels up.
Adding Scroll Bars
As you have seen, creating a scroll frame is simple, but isn’t very helpful to
your users ifthey haveto use slash commands to scroll the frame. This section
shows you an easy way to create a scroll bar using the
Slider
frame type.
Add the following to
ScrollFrameTest.xml
,after the
</Layers>
tag and
before the
<ScrollChild>
tag. The particular order is important if you are
validating your XML file, since the schema requires any sub-frames to be
defined before the scroll child.
<Frames>
<Slider name=“ScrollFrameTest_HSlider“ orientation=“HORIZONTAL“
minValue=“0“ maxValue=“100“ defaultValue=“0“ valueStep=“1“>
<Size x=“150“ y=“25“/>
<Anchors>
<Anchor point=“TOP“ relativePoint=“BOTTOM“ “ i
relativeTo=“ScrollFrameTest“/>
</Anchors>
418
Part III
Advanced Addon Techniques
<Scripts>
<OnValueChanged>
ScrollFrameTest:SetHorizontalScroll(-1 * self:GetValue())
</OnValueChanged>
</Scripts>
<ThumbTexture name=“$parentThumbTexture“
file=“Interface\Buttons\UI-ScrollBar-Knob“>
<Size x=“25“ y=“25“/>
</ThumbTexture>
</Slider>
<Slider name=“ScrollFrameTest_VSlider“ orientation=“VERTICAL“
minValue=“0“ maxValue=“100“ defaultValue=“0“ valueStep=“1“>
<Size x=“25“ y=“150“/>
<Anchors>
<Anchor point=“LEFT“ relativePoint=“RIGHT“
i
relativeTo=“ScrollFrameTest“/>
</Anchors>
<Scripts>
<OnValueChanged>
ScrollFrameTest:SetVerticalScroll(self:GetValue())
</OnValueChanged>
</Scripts>
<ThumbTexture name=“$parentThumbTexture“
file=“Interface\Buttons\UI-ScrollBar-Knob“>
<Size x=“25“ y=“25“/>
</ThumbTexture>
</Slider>
</Frames>
These two XML definitions create two sliders with a range between 0
and 100, because the child frame is exactly 100 pixels larger than the scroll
frame in either dimension. When the sliders are moved, the horizontal or
vertical scroll is updated on the scroll frame. These simple scroll bars use
the
UI-ScrollBar-Knob
graphic for the slider ‘‘thumb’’ graphic, and could be
extended to use the border and backgrounds from those scroll bars, as well.
Figure 22-5 shows the scroll frame operating in-game.
Figure 22-5: ScrollFrameTest scroll frame, with scroll bars.
Documents you may be interested
Documents you may be interested