View difference between Paste ID: 72Q728Jt and UmerzDUF
SHOW: | | - or go back to the newest paste.
1
local idleColor=256
2
local activatedColor=8192
3
local backgroundColor=32768
4
local textColor=1
5
local buttons={}
6
local monitor=nil
7
local debugMode=false
8
local monitorSide=nil
9
10
if fs.exists("event")==false then
11-
	shell.run("pastebin get UKPy4iiE event")
11+
	shell.run("pastebin get CGn8AsPe event")
12
end
13
os.loadAPI("event")
14
15
function addButton(x,y,width,height,text,toggle,relative,idleColor,activeColor,textColor)
16
	if monitor==nil then
17
		if debugMode==true then
18
			print("Monitor is not yet defined! Use setMonitorSide(side)")
19
		end
20
		return false,"Monitor is not yet defined! Use setMonitorSide(side)"
21
	elseif x==nil or y==nil or width==nil or height==nil or text==nil then
22
		if debugMode==true then
23
			print("Not all required arguments are specified.")
24
		end
25
		return false,"Not all required arguments are specified."
26
	else
27
		buttonID=#buttons+1
28
		if string.len(text)>width and relative~=true then
29
			text=string.sub(text,0,width)
30
		elseif string.len(text)>width*screenx then
31
			text=string.sub(text,0,width*screenx)
32
		end
33
		buttons[buttonID]={['x']=x,['y']=y,['width']=width,['height']=height,['text']=text,['active']=false,['toggle']=toggle,['relative']=relative,['activeColor']=activeColor,['idleColor']=idleColor,['textColor']=textColor,['visible']=true}
34
		drawAllButtons{}
35
		return buttonID
36
	end
37
end
38
39
function removeAllButtons()
40
	buttons={}
41
	drawAllButtons()
42
end
43
44
function removeButton(buttonID)
45
	if monitor==nil then
46
		if debugMode==true then
47
			print("Monitor is not yet defined! Use setMonitorSide(side)")
48
		end
49
		return false,"Monitor is not yet defined! Use setMonitorSide(side)"
50
	else
51
		if buttonID==nil then
52
			if debugMode==true then
53
				print("Not all required arguments are specified.")
54
			end
55
			return false,"Not all required arguments are specified."
56
		else
57
			if buttons[buttonID]==nil then
58
				if debugMode==true then
59
					print("That button ID does not correspond with a button!")
60
				end
61
				return false,"That button ID does not correspond with a button!"
62
			else
63
				buttons[buttonID]={"Removed"}
64
			end
65
		end	
66
	end
67
end
68
69
70
function drawAllButtons(tEvent)
71
	if monitor==nil then
72
		if debugMode==true then
73
			print("Monitor is not yet defined! Use setMonitorSide(side)")
74
		end
75
		return false,"Monitor is not yet defined! Use setMonitorSide(side)"
76
	else
77
		monitor.setBackgroundColor(backgroundColor)
78
		monitor.clear()
79
		for buttonID,buttonInfo in pairs(buttons) do
80
			if buttonInfo['visible']==true then
81
				local x=buttonInfo['x']
82
				local y=buttonInfo['y']
83
				local width=buttonInfo['width']
84
				local height=buttonInfo['height']
85
				if buttonInfo['relative']==true then
86
					x=math.floor(x*screenx+0.5)
87
					y=math.floor(y*screeny+0.5)
88
					width=math.floor(width*screenx+0.5)
89
					height=math.floor(height*screeny+0.5)
90
				end
91
				monitor.setCursorPos(x,y)
92
				if buttonInfo['active']==true then	
93
					if buttonInfo['activeColor']==nil then
94
						monitor.setBackgroundColor(activatedColor)
95
					else
96
						monitor.setBackgroundColor(buttonInfo['activeColor'])
97
					end
98
				else
99
					if buttonInfo['idleColor']==nil then
100
						monitor.setBackgroundColor(idleColor)
101
					else
102
						monitor.setBackgroundColor(buttonInfo['idleColor'])
103
					end
104
				end
105
				for i=0,height-1 do
106
					monitor.setCursorPos(x,y+i)
107
					for i=1,width do
108
						monitor.write(" ")
109
					end
110
				end
111
				if buttonInfo['textColor']==nil then
112
					monitor.setTextColor(textColor)
113
				else
114
					monitor.setTextColor(buttonInfo['textColor'])
115
				end
116
				stringX=x+(width/2-string.len(buttonInfo['text'])/2)
117
				stringY=y+(math.floor(height)/2)
118
				monitor.setCursorPos(stringX,stringY)
119
				monitor.write(buttonInfo['text'])
120
			end
121
		end	
122
	end
123
	if tEvent==true then return end
124
	event.trigger("onButtonsDrawn",true)
125
end
126
127
function getButtonInfo(buttonID)
128
	if monitor==nil then
129
		if debugMode==true then
130
			print("Monitor is not yet defined! Use setMonitorSide(side)")
131
		end
132
		return false,"Monitor is not yet defined! Use setMonitorSide(side)"
133
	else
134
		if buttonID==nil then
135
			if debugMode==true then
136
				print("Not all required arguments are specified.")
137
			end
138
			return false,"Not all required arguments are specified."
139
		else
140
			if buttons[buttonID]==nil then
141
				if debugMode==true then
142
					print("That button ID does not correspond with a button!")
143
				end
144
				return false,"That button ID does not correspond with a button!"
145
			else
146
				if debugMode==true then
147
					for infoID,info in pairs(buttons[buttonID]) do
148
						if type(info)=="boolean" then
149
							if info==false then
150
								info="false"
151
							else
152
								info="true"
153
							end
154
						elseif type(info)=="function" then
155
							info="function"
156
						end
157
							print(infoID.."	:"..info)
158
						
159
					end
160
				end
161
				return buttons[buttonID]
162
			end
163
		end	
164
	end
165
end
166
167
function setButtonInfo(buttonID,infoID,info)
168
	if monitor==nil then
169
		if debugMode==true then
170
			print("Monitor is not yet defined! Use setMonitorSide(side)")
171
		end
172
		return false,"Monitor is not yet defined! Use setMonitorSide(side)"
173
	else
174
		if buttonID==nil then
175
			if debugMode==true then
176
				print("Not all required arguments are specified.")
177
			end
178
			return false,"Not all required arguments are specified."
179
		else
180
			if buttons[buttonID]==nil then
181
				if debugMode==true then
182
					print("That button ID does not correspond with a button!")
183
				end
184
				return false,"That button ID does not correspond with a button!"
185
			else
186
				buttons[buttonID][infoID]=info
187
			end
188
		end	
189
	end
190
end
191
192
function setVisible(buttonID,bool)
193
	if monitor==nil then
194
		if debugMode==true then
195
			print("Monitor is not yet defined! Use setMonitorSide(side)")
196
		end
197
		return false,"Monitor is not yet defined! Use setMonitorSide(side)"
198
	else
199
		if buttonID==nil then
200
			if debugMode==true then
201
				print("Not all required arguments are specified.")
202
			end
203
			return false,"Not all required arguments are specified."
204
		else
205
			if buttons[buttonID]==nil then
206
				if debugMode==true then
207
					print("That button ID does not correspond with a button!")
208
				end
209
				return false,"That button ID does not correspond with a button!"
210
			else
211
				buttons[buttonID]['visible']=bool
212
			end
213
		end	
214
	end
215
	--drawAllButtons()
216
end
217
218
function run(side,clickX,clickY)
219
	for buttonID,buttonInfo in pairs(buttons) do
220
		local x=buttonInfo['x']
221
		local y=buttonInfo['y']
222
		local width=buttonInfo['width']
223
		local height=buttonInfo['height']
224
		if buttonInfo['relative']==true then
225
			x=math.floor(x*screenx+0.5)
226
			y=math.floor(y*screeny+0.5)
227
			width=math.floor(width*screenx+0.5)
228
			height=math.floor(height*screeny+0.5)
229
		end
230
		if debugMode==true then
231
			print("Pos:"..x..","..y)
232
		end
233
		if clickX>=x and clickX<=x+width and clickY>=y and clickY<=y+height and buttonInfo['visible']==true then
234
			if debugMode==true then
235
				print("Clicked :"..buttonID)
236
			end
237
			if buttonInfo['toggle']==true then
238
				buttonInfo['active']=not buttonInfo['active']
239
				drawAllButtons()
240
				if buttonInfo['active']==true then
241
					event.trigger("onButtonClick",buttonID,true)
242
				else
243
					event.trigger("onButtonClick",buttonID,false)
244
				end
245
			else
246
				buttonInfo['active']=true
247
				drawAllButtons()
248
				event.trigger("onButtonClick",buttonID)
249
				sleep(0)
250
				if buttonInfo~=nil then
251
					buttonInfo['active']=false
252
				end	
253
				drawAllButtons()
254
			end
255
			
256
		end
257
	end	
258
end
259
event.addHandler("monitor_touch",run)
260
event.addHandler("mouse_click",run)
261
262
function resised(side)
263
	if side==monitorSide then
264
		setMonitorSide(side)
265
		drawAllButtons()
266
	end
267
end
268
event.addHandler("monitor_resize",resised)
269
270
--[[
271
function updateButtonPositions()
272
	for buttonID,buttonInfo in pairs(buttons) do
273
		if buttonInfo['relative']==true then
274
			x=
275
			y=
276
			width=
277
			height=
278
			x=math.floor(x*screenx+0.5)
279
			y=math.floor(y*screeny+0.5)
280
			width=math.floor(width*screenx+0.5)
281
			height=math.floor(height*screeny+0.5)
282
		end		
283
	end
284
end
285
]]
286
287
function setMonitorSide(side)
288
	if side==nil then
289
		if debugMode==true then
290
			print("Not all required arguments are specified.")
291
		end
292
		return false,"Not all required arguments are specified."
293
	else
294
		monitor=peripheral.wrap(side)
295
		screenx,screeny=monitor.getSize()
296
		monitorSide=side
297
	end
298
end
299
300
function setMonitor(peripheral)
301
	if peripheral==nil then
302
		if debugMode==true then
303
			print("Not all required arguments are specified.")
304
		end
305
		return false,"Not all required arguments are specified."
306
	else
307
		monitor=peripheral
308
		screenx,screeny=monitor.getSize()
309
		monitorSide=peripheral
310
	end
311
end
312
313
function setDebugMode(bool)
314
	if bool==nil then
315
		if debugMode==true then
316
			print("Not all required arguments are specified.")
317
		end
318
		return false,"Not all required arguments are specified."
319
	else
320
		debugMode=bool
321
	end
322
end
323
324
function setIdleColor(color)
325
	if color==nil then
326
		if debugMode==true then
327
			print("Not all required arguments are specified.")
328
		end
329
		return false,"Not all required arguments are specified."
330
	else
331
		idleColor=color
332
		drawAllButtons()
333
	end
334
end
335
336
function setActiveColor(color)
337
	if color==nil then
338
		if debugMode==true then
339
			print("Not all required arguments are specified.")
340
		end
341
		return false,"Not all required arguments are specified."
342
	else
343
		activatedColor=color
344
		drawAllButtons()
345
	end
346
end
347
348
function setBackgroundColor(color)
349
	if color==nil then
350
		if debugMode==true then
351
			print("Not all required arguments are specified.")
352
		end
353
		return false,"Not all required arguments are specified."
354
	else
355
		backgroundColor=color
356
		drawAllButtons()
357
	end
358
end
359
360
function setTextColor(color)
361
	if color==nil then
362
		if debugMode==true then
363
			print("Not all required arguments are specified.")
364
		end
365
		return false,"Not all required arguments are specified."
366
	else
367
		textColor=color
368
		drawAllButtons()
369
	end
370
end