c# pdf viewer open source : How to reorder pdf pages SDK application API wpf html winforms sharepoint World%20of%20Warcraft%20Programming%20(2nd%20Edition)24-part1821

Chapter 11
Exploring the World of Warcraft API 199
If (during the loop) you encounter an item that you’ve already addedto the
table, you simply incrementtheitem’s count in thetableentry that has already
been stored.
Sorting the Player’s Inventory
To ensure the inventory is displayed in a consistent order, you will sort them
by name. Addthe following function definition somewhere before the update
function:
local function itemNameSort(a, b)
return a.name < b.name
end
This function simply takes in two tables that are being compared, and
compares thenames of theitems. Now youcan use the function by adding the
following to
BagBuddy_Update()
,at the end of the function:
local sortTbl = {}
for link, entry in pairs(items) do
table.insert(sortTbl, entry)
end
table.sort(sortTbl, itemNameSort)
This code simply loops over all of the stored items, and adds each entry to
anew temporary table. Then you call
table.sort()
,passing in your sorting
function to do the heavy lifting.
Displaying the Inventory
Now that you have a sorted list of inventory items, you can write some
code to display them in the BagBuddy frame. Add the following to
BagBuddy_Update()
,after the sorting and before the end of the function:
-- Now update the BagBuddyFrame with the listed items (in order)
for i = 1, 24 do
local button = BagBuddy.items[i]
local entry = sortTbl[i]
if entry then
-- There is an item in this slot
button.icon:SetTexture(entry.texture)
if entry.count > 1 then
button.count:SetText(entry.count)
button.count:Show()
else
button.count:Hide()
end
if entry.quality > 1 then
button.glow:SetVertexColor(GetItemQualityColor(entry.quality))
How to reorder pdf pages - re-order PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Customizing Page Order of PDF Document in C# Project
move pages in pdf acrobat; move pdf pages in preview
How to reorder pdf pages - 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 rearrange pdf pages reader; reorder pages in pdf online
200
Part II
Programming in World of Warcraft
button.glow:Show()
else
button.glow:Hide()
end
button:Show()
else
button:Hide()
end
end
Because you already know you have 24 buttons in the frame, simply loop
over each of them. You also have a listof items that are sorted in order, soyou
know that the first item in the list should be displayed in the first button.
Alothappens on each iteration of the loop.First you check to see if thereis a
corresponding item in the list.Ifthere isn’tyoujusthidethe button.Otherwise
you first set the item’s icon texture. If there are multiple items with the same
item number, you update the item count font string. Finally, you check the
quality of the item. If the quality is greater than one (that is, the itemis green,
blue, purple, or higher), you shade the glow texture to the appropriate color,
obtained with the
GetItemQualityColor()
function.
This function takes in a quality index, and returns the red, green, and blue
color components (between
0.0
and
1.0
). These can then be passed into any
of the functions that accept colors in that form, such as the texture method
SetVertexColor()
.The different quality indices are listed in Table 11-7.
Table 11-7: Item Quality Indices
INDEX
DESCRIPTION
COLOR
EXAMPLE ITEM
0
Poor
Grey
Broken I.W.I.N. Button
1
Common
White
Archmage Vargoth’s Staff
2
Uncommon
Green
X-52 Rocket Helmet
3
Rare or Superior
Blue
Onyxia Scale Cloak
4
Epic
Purple
Talisman of Ephemeral Power
5
Legendary
Orange
Fragment of Val’anyr
6
Artifact or Heirloom
Light Yellow
Bloodied Arcanite Reaper
Testing the Update Function
You haven’t set anything up to call the function, but you can call it manually
by running the following code in-game:
/run BagBuddy_Update()
Figure 11-1 shows BagBuddy after running the update function. The items
are all sorted by name, and multiple items are combined into a single virtual
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; how to rearrange pages in pdf using 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 change page order in pdf acrobat; change page order pdf reader
Chapter 11
Exploring the World of Warcraft API 201
stack.Any itemthat is higher than common qualityglows toshow the familiar
rarity colors (this will be hard to see in the figure). The frame shows only the
first 24 items, or less if you don’t have that many items in your inventory.
Figure 11-1: BagBuddy showing a sorted inventory
Finding the Right API Functions
The most difficult part when starting to work with the World of Warcraft API
is finding the right function or event (which you’ll learn about in Chapter 13).
Although we would love to provide a simple guide that tells you what
functions and events to use for any situation, the API consists of more than
1,900 functions and530 events.Any guide would beincredibly large, andnear
impossible to write. Instead we hope to give you a set of guidelines that you
can use to find the right functions.
Exploring the API Categories
This book contains a chapterthatlists anumberofdifferentcategories, andthe
functions that belong to the given group.This is a good place to start if you’re
looking tobetterunderstandaportionoftheAPI.Beawarethatmanyfunctions
are listed in multiple categories. The same reference is available (and kept
up-to-date) online at
http://wowprogramming.com/docs/api
categories
.
Although it does not always contain an updated list of available func-
tions, the World of Warcraft API listing at WoWWiki (
http://wowwiki
.com/World
of
Warcraft
API
)lists functions by various categories as well.
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
pdf rearrange pages online; change pdf page order preview
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;
change page order in pdf online; how to reverse pages in pdf
202
Part II
Programming in World of Warcraft
Examining the FrameXML Code
A useful question whenever you are trying to accomplish something in a
custom addon is to ask:
‘‘Does the default userinterface do this?’’
If so, then somewhere in the code for the default UI is the technique used
to accomplish the task; it’s just a matter of finding it. For example, you might
want to display the player’s haste rating and percentage effect somewhere
in your addon. A quick look at the API categories doesn’t reveal anything
immediately so you instead look at the default user interface.
That information is displayed on the character panel in the stats section
at the bottom. To find out where that panel is defined, you can do a bit
of investigative work. Start by running the
/framestack
command that was
introduced in Chapter 9. From the information you get there, it appears that
PaperDollFrame
and
CharacterFrame
are both good candidates. Conveniently
enough, these frames are defined in files by the same name in the FrameXML
code.
Opening
CharacterFrame.xml
shows you the definition of the different
tabs, so it appears that that’s the outmost frame that contains the sub-
frames. The
CharacterAttributesFrame
in
PaperDollFrame.xml
, however,
looks like a good candidate. Now that you’ve found the frame, you can open
PaperDollFrame.lua
to look around.
At the top of the file you see a number of global constants defined. Looking
for one having to do with haste, you find the following constants:
CR_HASTE_MELEE = 18;
CR_HASTE_RANGED = 19;
CR_HASTE_SPELL = 20;
When haste was first introduced in the game, there were different versions
for melee, ranged, and spell. In Wrath of the Lich King they were all combined
intoa singlehaste rating.Pick the meleeversionandsearchforthat throughout
the whole file.
The only instance in the file is in the following line of code, in the aptly
named
PaperDollFrame_SetAttackSpeed()
function:
statFrame.tooltip2 = format(CR_HASTE_RATING_TOOLTIP, i
GetCombatRating(CR_HASTE_MELEE), GetCombatRatingBonus(CR_HASTE_MELEE));
Now you can test these two functions to see if they work for your needs.
Run the following code in-game:
/run print(GetCombatRating(CR_HASTE_MELEE))
/run print(GetCombatRatingBonus(CT_HASTE_MELEE))
You will find that although the returns from
GetCombatRating()
are the
same, you may have different results for the actual percent bonus. This bonus
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
rearrange pages in pdf online; reorder pdf pages in preview
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 reorder pdf pages in reader; reorder pages in pdf preview
Chapter 11
Exploring the World of Warcraft API 203
could depend on any number of factors, and you’ll want to take that into
consideration when using it in your addon.
Looking at Another Addon
If you can’t find a place in the default user interface that does what you want,
but know that other addons somehow accomplish it, you can always look at
the other addon. When doing this, keep in mind that the code we write as
authors is not completely open for copying. When in doubt, you may find it
useful to contact theauthor to see howhe’s done something and ask ifyoucan
use a similar method in your own addon.
Of course, sometimes it’s just a simple as finding the right function, which
you can then just use directly in your own addon.
Asking for Help!
Each situation will be slightly unique, so it’s always useful to ask for help
when working on your own addon. A number of websites, forums, and chat
rooms support addon development for World of Warcraft (see Appendix D
for more information). When asking for help, we suggest the following:
When initially presenting your problem, try to explain what you are
trying to accomplish instead of how you are trying to accomplish it.
This gives the people who are helping you a chance to understand the
problem without getting caught up in a specific way of doing it. This can
sometimes reveal a much nicer solution to the problem.
Provide as much code as possible and indicate the areas that are having
problems.Posting 10 lines of code out of a 300-line function makes it very
difficultto see what is happening. Youcan post large bits of code on sites
like
http://pastey.net
and
http://pastebin.com
.
If you are getting an error, give the specific error text, and post the code
involved in the error.
Be patient! Not everyone is always waiting around to pounce on a new
question.Youshouldcontinuetoexploreinyourown time,andhopefully
someone will be able to helpyou.
Summary
This chapter introduced you to APIs in the general sense, and gave you
a specific example of how to use the item and container API to access
information about the player’s containers and items. Understanding the way
these functions interact with the game is essential to creating effective addons
that accomplish a variety of goals.
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
rearrange pdf pages in preview; rearrange pages in pdf file
.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.
pdf change page order online; how to move pages within a pdf document
204
Part II
Programming in World of Warcraft
The Code
BagBuddy.lua
function BagBuddy_OnLoad(self)
SetPortraitToTexture(self.portrait, i
“Interface\\Icons\\INV_Misc_EngGizmos_30“)
-- Create the item slots
self.items = {}
for idx = 1, 24 do
local item = CreateFrame(“Button“, “BagBuddy_Item“ .. idx, i
self, “BagBuddyItemTemplate“)
self.items[idx] = item
if idx == 1 then
item:SetPoint(“TOPLEFT“, 40, -73)
elseif idx == 7 or idx == 13 or idx == 19 then
item:SetPoint(“TOPLEFT“, self.items[idx-6], i
“BOTTOMLEFT“, 0, -7)
else
item:SetPoint(“TOPLEFT“, self.items[idx-1], i
“TOPRIGHT“, 12, 0)
end
end
end
local function itemNameSort(a, b)
return a.name < b.name
end
function BagBuddy_Update()
local items = {}
-- Scan through the bag slots, looking for items
for bag = 0, NUM_BAG_SLOTS do
for slot = 0, GetContainerNumSlots(bag) do
local texture, count, locked, quality, readable, i
lootable, link = GetContainerItemInfo(bag, slot)
if texture then
-- If found, grab the item number and store other data
local itemNum = tonumber(link:match(“|Hitem:(%d+):“))
if not items[itemNum] then
items[itemNum] = {
texture = texture,
count = count,
quality = quality,
name = GetItemInfo(link),
link = link,
}
else
Chapter 11
Exploring the World of Warcraft API 205
-- The item already exists in our table, update count
items[itemNum].count = items[itemNum].count + count
end
end
end
end
local sortTbl = {}
for link, entry in pairs(items) do
table.insert(sortTbl, entry)
end
table.sort(sortTbl, itemNameSort)
-- Now update the BagBuddyFrame with the listed items (in order)
for i = 1, 24 do
local button = BagBuddy.items[i]
local entry = sortTbl[i]
if entry then
-- There is an item in this slot
button.icon:SetTexture(entry.texture)
if entry.count > 1 then
button.count:SetText(entry.count)
button.count:Show()
else
button.count:Hide()
end
if entry.quality > 1 then
button.glow:SetVertexColor( i
GetItemQualityColor(entry.quality))
button.glow:Show()
else
button.glow:Hide()
end
button:Show()
else
button:Hide()
end
end
end
CH A P T E R
12
Interacting with Widgets
You’ve already created the base frame for BagBuddy, and added graphics,
text, and item buttons created using templates. However, other than the
highlight texture on the item buttons, the frames are entirely static and you
can’t really interact with them. In this chapter you learn about different types
of frames, such as buttons, status bars, and edit boxes. Once you’ve created
new frames, youlearn how to add dynamic behavior to them.
Each different type of frame widget in World of Warcraft has certain scripts
that can be settorespondtochanges.Forexample,a button can setan
OnClick
script to run code when the button is clicked, or
OnEnter
to do something
when themousemoves over the button. Othermore complex widgets, such as
editboxes, allow you to respond to different types of key presses.
This chapter is meant as an introduction to interacting with widgets; for
a full listing of the available frame scripts and methods, please refer to the
Widget Reference in Chapter 29.
Making BagBuddy’s Buttons Interactive
The most often used widget (other than the basic frame type) is a
Button
.
Buttons are used all over the default user interface to accomplish different
types of tasks:
Player, target, and other unit frames
Action buttons
Buff and debuff icons
207
208
Part II
Programming in World of Warcraft
Dropdown (selection) menus
Menu buttons
In BagBuddy you will use buttons for the rarity filters and the close button
in the top-right corner of the frame, in addition to the already created item
buttons. Let’s start exploring interactive widgets by setting
OnEnter
and
OnLeave
scripts for the item buttons.
Setting Frame Scripts via XML
You can add a frame script to an XML definition by adding a
<Scripts>
tag with one or more script definitions inside. Add the following code to
thedefinition of
BagBuddyItemTemplate
,after the
</Layers>
tag butbefore the
<NormalTexture>
tag:
<Scripts>
<OnEnter>
print(“Mouse has entered“, self:GetName())
</OnEnter>
<OnLeave>
print(“Mouse has left“, self:GetName())
</OnLeave>
</Scripts>
If you load up the game, you should be able to run your mouse over any of
the itembuttons, and thegamewill display a message for each of the different
scripts. The output may look similar to the following:
Mouse has entered BagBuddy_Item6
Mouse has left BagBuddy_Item6
Mouse has entered BagBuddy_Item20
Mouse has left BagBuddy_Item20
This is one of two ways to set frame scripts using XML. For each type of
script, you simply write code that is then compiled to a function and run in
response to that widget event. Each different type of script handler is passed
certain arguments; you can see that the variable
self
is used here, which isn’t
explicitly defined.
The
OnEnter
and
OnLeave
scripts are passed two different arguments:
self
—The button that the mouse has just entered.
motion
—A Boolean flag indicating if the event was caused by the mouse
moving over the frame. When this value is false, the frame being
shown while the mouse is already over its position may have caused
the event.
Documents you may be interested
Documents you may be interested