1 |
6 |
Kragenwar-3044 |
import "Turbine.UI"; |
2 |
|
Kragenwar-3044 |
|
3 |
|
Kragenwar-3044 |
SimpleDragBar = class(Turbine.UI.Window); |
4 |
|
Kragenwar-3044 |
|
5 |
|
Kragenwar-3044 |
function SimpleDragBar:Constructor(target, name) |
6 |
|
Kragenwar-3044 |
Turbine.UI.Window.Constructor(self); |
7 |
|
Kragenwar-3044 |
|
8 |
|
Kragenwar-3044 |
self.wndTarget = target; |
9 |
|
Kragenwar-3044 |
self.barOnTop = true; |
10 |
|
Kragenwar-3044 |
self.visible = false; |
11 |
|
Kragenwar-3044 |
self.draggable = false; |
12 |
|
Kragenwar-3044 |
self:SetBackColor(Turbine.UI.Color(.5, 0, 0, 0)); |
13 |
|
Kragenwar-3044 |
|
14 |
|
Kragenwar-3044 |
-- the drag label |
15 |
|
Kragenwar-3044 |
self.dragLabel = Turbine.UI.Label(); |
16 |
|
Kragenwar-3044 |
self.dragLabel:SetParent(self); |
17 |
|
Kragenwar-3044 |
self.dragLabel:SetForeColor(Turbine.UI.Color(1, 1, 1, 1)); |
18 |
|
Kragenwar-3044 |
self.dragLabel:SetOutlineColor(Turbine.UI.Color(1, 0, 0, 0)); |
19 |
|
Kragenwar-3044 |
self.dragLabel:SetFontStyle(Turbine.UI.FontStyle.Outline); |
20 |
|
Kragenwar-3044 |
self.dragLabel:SetFont(Turbine.UI.Lotro.Font.Verdana16); |
21 |
|
Kragenwar-3044 |
self.dragLabel:SetTextAlignment(Turbine.UI.ContentAlignment.TopCenter); |
22 |
|
Kragenwar-3044 |
self.dragLabel:SetPosition(1, 0); |
23 |
|
Kragenwar-3044 |
self.dragLabel:SetText(name); |
24 |
|
Kragenwar-3044 |
|
25 |
|
Kragenwar-3044 |
-- center |
26 |
|
Kragenwar-3044 |
self.center = Turbine.UI.Control(); |
27 |
|
Kragenwar-3044 |
self.center:SetParent(self); |
28 |
|
Kragenwar-3044 |
self.center:SetBackColor(Turbine.UI.Color(0, 0, 0, 0)); |
29 |
|
Kragenwar-3044 |
self.center:SetPosition(1, 24); |
30 |
|
Kragenwar-3044 |
|
31 |
|
Kragenwar-3044 |
-- listeners |
32 |
|
Kragenwar-3044 |
self.dragLabel.MouseDown = function(sender, args) |
33 |
|
Kragenwar-3044 |
if (args.Button == Turbine.UI.MouseButton.Left) then |
34 |
|
Kragenwar-3044 |
self.dragStartX = args.X; |
35 |
|
Kragenwar-3044 |
self.dragStartY = args.Y; |
36 |
|
Kragenwar-3044 |
self.dragging = true; |
37 |
|
Kragenwar-3044 |
if (type(self.wndTarget.DragStart) == "function") then |
38 |
|
Kragenwar-3044 |
self.wndTarget.DragStart(); |
39 |
|
Kragenwar-3044 |
end |
40 |
|
Kragenwar-3044 |
end |
41 |
|
Kragenwar-3044 |
end |
42 |
|
Kragenwar-3044 |
|
43 |
|
Kragenwar-3044 |
self.dragLabel.MouseMove = function(sender, args) |
44 |
|
Kragenwar-3044 |
if (self.dragging) then |
45 |
|
Kragenwar-3044 |
local left, top = self.wndTarget:GetPosition(); |
46 |
|
Kragenwar-3044 |
local width, height = self.wndTarget:GetSize(); |
47 |
|
Kragenwar-3044 |
local x = left + (args.X - self.dragStartX); |
48 |
|
Kragenwar-3044 |
local y = top + (args.Y - self.dragStartY); |
49 |
|
Kragenwar-3044 |
x, y = validatePosition(x, y, width, height); |
50 |
|
Kragenwar-3044 |
|
51 |
|
Kragenwar-3044 |
self.wndTarget:SetPosition(x, y); |
52 |
|
Kragenwar-3044 |
self:RecalculatePosition(); |
53 |
|
Kragenwar-3044 |
end |
54 |
|
Kragenwar-3044 |
end |
55 |
|
Kragenwar-3044 |
|
56 |
|
Kragenwar-3044 |
self.dragLabel.MouseUp = function(sender, args) |
57 |
|
Kragenwar-3044 |
if (args.Button == Turbine.UI.MouseButton.Left) then |
58 |
|
Kragenwar-3044 |
self.dragging = false; |
59 |
|
Kragenwar-3044 |
if (type(self.wndTarget.DragEnd) == "function") then |
60 |
|
Kragenwar-3044 |
self.wndTarget.DragEnd(); |
61 |
|
Kragenwar-3044 |
end |
62 |
|
Kragenwar-3044 |
end |
63 |
|
Kragenwar-3044 |
end |
64 |
|
Kragenwar-3044 |
|
65 |
|
Kragenwar-3044 |
-- refresh |
66 |
|
Kragenwar-3044 |
self:Refresh(); |
67 |
|
Kragenwar-3044 |
end |
68 |
|
Kragenwar-3044 |
|
69 |
|
Kragenwar-3044 |
function SimpleDragBar:SetBarOnTop(top) |
70 |
|
Kragenwar-3044 |
self.barOnTop = top; |
71 |
|
Kragenwar-3044 |
self.dragLabel:SetTextAlignment(top and Turbine.UI.ContentAlignment.TopCenter or Turbine.UI.ContentAlignment.BottomCenter); |
72 |
|
Kragenwar-3044 |
self:Refresh(); |
73 |
|
Kragenwar-3044 |
end |
74 |
|
Kragenwar-3044 |
|
75 |
|
Kragenwar-3044 |
function SimpleDragBar:SetAllowsDragging(allow) |
76 |
|
Kragenwar-3044 |
end |
77 |
|
Kragenwar-3044 |
|
78 |
|
Kragenwar-3044 |
function SimpleDragBar:SetAllowsHUDHiding(allow, show) |
79 |
|
Kragenwar-3044 |
end |
80 |
|
Kragenwar-3044 |
|
81 |
|
Kragenwar-3044 |
function SimpleDragBar:SetHUDVisible(visible) |
82 |
|
Kragenwar-3044 |
self.visible = visible; |
83 |
|
Kragenwar-3044 |
self.wndTarget:SetVisible(visible); |
84 |
|
Kragenwar-3044 |
self:SetVisible(visible and self.draggable or false); |
85 |
|
Kragenwar-3044 |
end |
86 |
|
Kragenwar-3044 |
|
87 |
|
Kragenwar-3044 |
function SimpleDragBar:SetDraggable(draggable) |
88 |
|
Kragenwar-3044 |
self.draggable = draggable; |
89 |
|
Kragenwar-3044 |
self:SetVisible(draggable and self.visible or false); |
90 |
|
Kragenwar-3044 |
end |
91 |
|
Kragenwar-3044 |
|
92 |
|
Kragenwar-3044 |
function SimpleDragBar:Refresh() |
93 |
|
Kragenwar-3044 |
self:RecalculateSize(); |
94 |
|
Kragenwar-3044 |
self:RecalculatePosition(); |
95 |
|
Kragenwar-3044 |
end |
96 |
|
Kragenwar-3044 |
|
97 |
|
Kragenwar-3044 |
function SimpleDragBar:RecalculateSize() |
98 |
|
Kragenwar-3044 |
local width, height = self.wndTarget:GetSize(); |
99 |
|
Kragenwar-3044 |
|
100 |
|
Kragenwar-3044 |
self:SetSize(width + 2, 25 + height); |
101 |
|
Kragenwar-3044 |
self.dragLabel:SetSize(width, 24); |
102 |
|
Kragenwar-3044 |
self.center:SetSize(width, height); |
103 |
|
Kragenwar-3044 |
end |
104 |
|
Kragenwar-3044 |
|
105 |
|
Kragenwar-3044 |
function SimpleDragBar:RecalculatePosition() |
106 |
|
Kragenwar-3044 |
local width, height = self.wndTarget:GetSize(); |
107 |
|
Kragenwar-3044 |
local x, y = self.wndTarget:GetPosition(); |
108 |
|
Kragenwar-3044 |
|
109 |
|
Kragenwar-3044 |
if (self.barOnTop) then |
110 |
|
Kragenwar-3044 |
self:SetPosition(x - 1, math.max(y - 24, 0)); |
111 |
|
Kragenwar-3044 |
self.dragLabel:SetPosition(1, 0); |
112 |
|
Kragenwar-3044 |
self.center:SetPosition(1, 24); |
113 |
|
Kragenwar-3044 |
else |
114 |
|
Kragenwar-3044 |
self:SetPosition(x - 1, math.min(y - 1, Turbine.UI.Display:GetHeight() - (25 + height))); |
115 |
|
Kragenwar-3044 |
self.dragLabel:SetPosition(1, height); |
116 |
|
Kragenwar-3044 |
self.center:SetPosition(1, 1); |
117 |
|
Kragenwar-3044 |
end |
118 |
|
Kragenwar-3044 |
end |