1// ==================
2// PRODUCTION MENU
3// ==================
4window production
5{
6	/** @todo Remove me */
7	{ } // empty properties to fix parsing problem with "image" token (behaviour or property?)
8
9	// ==================
10	// background
11	// ==================
12
13	image background
14	{
15		src		"background/base_bg"
16	}
17	cmpBaseHeader baseHeader {
18	}
19
20	// ==================
21	// tab
22	// ==================
23
24	panel tab_background {
25		pos		"24 96"
26		size	"986 56"
27		background	"ui/panel_tab"
28	}
29
30	/**
31	 * @brief function to show/hide storage capacity info
32	 * @todo show hangar capacity when aircraft is selected
33	 */
34	func prod_stores {
35		if ( *cvar:mn_itemtype ne "aircraft" ) {
36			*node:parent.infopanel.txt_prod_storage_caption@invis	= false
37			*node:parent.infopanel.txt_prod_storage@invis	= false
38		} else {
39			*node:parent.infopanel.txt_prod_storage_caption@invis	= true
40			*node:parent.infopanel.txt_prod_storage@invis	= true
41		}
42	}
43
44	tab market_navigation {
45		{
46			pos		"47 106"
47			size	"938 39"
48			cvar	*cvar:mn_itemtype
49			onChange {
50				cmd "prod_type <cvar:mn_itemtype>;"
51				call *node:root.prod_stores
52			}
53		}
54
55		option primary {
56			label	"_Primary"
57			value	"primary"
58		}
59		option secondary {
60			label	"_Secondary"
61			value	"secondary"
62		}
63		option description {
64			label	"_Heavy"
65			value	"heavy"
66		}
67		option misc {
68			label	"_Misc"
69			value	"misc"
70		}
71		option armour {
72			label	"_Armour"
73			value	"armour"
74		}
75		option craftitem {
76			label	"_Craft items"
77			value	"craftitem"
78		}
79		option aircraft {
80			label	"_Aircraft"
81			value	"aircraft"
82		}
83		option dummy {
84			label	"_Other"
85			value	"dummy"
86		}
87		option disassembly {
88			label	"_Disassembly"
89			value	"disassembly"
90		}
91	}
92
93	// ==================
94	// lists
95	// ==================
96
97	rows lines {
98		pos			"28 175"
99		size		"530 568"
100		color1		"0 0.08 0 1"
101		color2		"0 0.16 0 1"
102		lineheight	50
103	}
104
105	panel scroll_bg {
106		pos			"421 175"
107		size		"31 568"
108		bgcolor		"0 0 0 0.5"
109	}
110
111	panel verticalline {
112		pos		"451 175"
113		size	"4 565"
114		bgcolor	"0.03 0.42 0.03 1"
115	}
116
117	panel itemlist {
118		pos		"12 160"
119		size	"553 597"
120		background	"ui/panel_grey_green_large2"
121	}
122
123	// ==================
124	// info panel
125	// ==================
126
127	panel infopanel {
128		{
129			pos		"580 160"
130			size	"420 145"
131			background	"ui/panel_grey_green_large"
132		}
133
134		// ==================
135		// workers
136		// ==================
137
138		string txt_prod_workers_caption
139		{
140			string		"_Workers (ready/all):"
141			pos			"30 25"
142			size		"250 20"
143			font		"f_small"
144		}
145
146		string txt_prod_workers
147		{
148			string		*cvar:mn_production_workers
149			pos			"295 25"
150			size		"100 20"
151			contentalign	ALIGN_UR
152			font		"f_small"
153		}
154
155		// ==================
156		// workshop capacity
157		// ==================
158
159		string txt_prod_basecap_caption
160		{
161			string		"_Workshop capacity:"
162			pos			"30 50"
163			size		"250 20"
164			font		"f_small"
165		}
166
167		string txt_prod_basecap
168		{
169			string		*cvar:mn_production_basecap
170			pos			"295 50"
171			size		"100 20"
172			contentalign	ALIGN_UR
173			font		"f_small"
174		}
175
176		// ==================
177		// storage capacity
178		// ==================
179
180		string txt_prod_storage_caption
181		{
182			string		"_Storage capacity:"
183			pos			"30 75"
184			size		"250 20"
185			font		"f_small"
186		}
187
188		string txt_prod_storage
189		{
190			string		*cvar:mn_production_storage
191			pos			"295 75"
192			size		"100 20"
193			contentalign	ALIGN_UR
194			font		"f_small"
195		}
196
197		// ==================
198		// prod limit
199		// ==================
200
201		string txt_prod_limit_caption
202		{
203			string		"_Production limit:"
204			pos			"30 100"
205			size		"250 20"
206			font		"f_small"
207		}
208
209		string txt_prod_limit
210		{
211			string		*cvar:mn_production_limit
212			pos			"295 100"
213			size		"100 20"
214			contentalign	ALIGN_UR
215			font		"f_small"
216		}
217	}
218
219	// ==================
220	// list
221	// ==================
222
223	textlist prodlist
224	{
225		dataid		TEXT_PRODUCTION_LIST
226		color		"0 .78 0 1"
227		rows		"11"
228		lineheight	"50"
229		pos			"55 180"
230		size		"250 550"
231		longlines	LONGLINES_PRETTYCHOP
232		onClick		{
233			*node:root.prodlist_amount@lineselected = <node:this@lineselected>
234			*node:root.prodlist_queued@lineselected = <node:this@lineselected>
235			cmd "prodlist_click <lineselected>;"
236		}
237		onRClick	{
238			*node:root.prodlist_amount@lineselected = <node:this@lineselected>
239			*node:root.prodlist_queued@lineselected = <node:this@lineselected>
240			cmd "prodlist_rclick <lineselected>;"
241		}
242		onViewChange	{
243			*node:root.prodlist_scroll@fullsize = <fullsize>
244			*node:root.prodlist_scroll@current = <viewpos>
245			*node:root.prodlist_scroll@viewsize = <viewsize>
246			*node:root.prodlist_amount@viewpos = <viewpos>
247			*node:root.prodlist_queued@viewpos = <viewpos>
248		}
249	}
250
251	textlist prodlist_amount
252	{
253		dataid		TEXT_PRODUCTION_AMOUNT
254		color		"0 .78 0 1"
255		contentalign	ALIGN_CR
256		pos			"310 180"
257		rows		"11"
258		size		"60 550"
259		lineheight	"50"
260		onClick		{
261			*node:root.prodlist@lineselected = <node:this@lineselected>
262			*node:root.prodlist_queued@lineselected = <node:this@lineselected>
263			cmd "prodlist_click <lineselected>;"
264		}
265		onRClick	{
266			*node:root.prodlist@lineselected = <node:this@lineselected>
267			*node:root.prodlist_queued@lineselected = <node:this@lineselected>
268			cmd "prodlist_rclick <lineselected>;"
269		}
270		onViewChange	{
271			*node:root.prodlist_scroll@fullsize = <fullsize>
272			*node:root.prodlist_scroll@current = <viewpos>
273			*node:root.prodlist_scroll@viewsize = <viewsize>
274			*node:root.prodlist@viewpos = <viewpos>
275			*node:root.prodlist_queued@viewpos = <viewpos>
276		}
277	}
278
279	textlist prodlist_queued
280	{
281		dataid		TEXT_PRODUCTION_QUEUED
282		pos			"465 180"
283		size		"60 550"
284		color		"0 .78 0 1"
285		lineheight	"50"
286		rows		"11"
287		onClick		{
288			*node:root.prodlist@lineselected = <node:this@lineselected>
289			*node:root.prodlist_amount@lineselected = <node:this@lineselected>
290			cmd "prodlist_click <lineselected>;"
291		}
292		onRClick	{
293			*node:root.prodlist@lineselected = <node:this@lineselected>
294			*node:root.prodlist_queued@lineselected = <node:this@lineselected>
295			cmd "prodlist_rclick <lineselected>;"
296		}
297		onViewChange	{
298			*node:root.prodlist_scroll@fullsize = <fullsize>
299			*node:root.prodlist_scroll@current = <viewpos>
300			*node:root.prodlist_scroll@viewsize = <viewsize>
301			*node:root.prodlist_amount@viewpos = <viewpos>
302			*node:root.prodlist@viewpos = <viewpos>
303		}
304	}
305
306	vscrollbar prodlist_scroll {
307		image		"ui/scrollbar_v_green"
308		pos			"428 180"
309		height		"556"
310		current		0
311		viewsize	30
312		fullsize	30
313		onChange	{
314			*node:root.prodlist@viewpos = <current>
315			*node:root.prodlist_amount@viewpos = <current>
316			*node:root.prodlist_queued@viewpos = <current>
317		}
318	}
319
320	confunc prod_selectline {
321		*node:root.prodlist@lineselected = <1>
322		*node:root.prodlist_amount@lineselected = <1>
323		*node:root.prodlist_queued@lineselected = <1>
324	}
325	// ==================
326	// item
327	// ==================
328
329	panel itempanel {
330		{
331			pos		"580 310"
332			size	"420 447"
333			background	"ui/panel_grey_green_large"
334		}
335
336		item itemmodel
337		{
338			src			*cvar:mn_item
339			pos			"17 17"
340			size		"386 152"
341			angles		"0 180 90"
342			omega		"0 10 0"
343			autoscale	true
344		}
345
346	}
347
348	// ==================
349	// info
350	// @todo move it into the item panel
351	// ==================
352
353	string prod_amount {
354		string		*cvar:mn_production_amount
355		pos			"650 480"
356		size		"40 50"
357		color		"0 .78 0 1"
358		font		"f_small"
359		contentalign	ALIGN_CR
360	}
361
362	string label_1 {
363		string		"x1"
364		pos			"680 480"
365		size		"24 50"
366		color		"0 .78 0 1"
367		font		"f_small"
368		contentalign	ALIGN_CR
369	}
370
371	string label_10 {
372		string		"x10"
373		pos			"810 480"
374		size		"36 50"
375		color		"0 .78 0 1"
376		font		"f_small"
377		contentalign	ALIGN_CR
378	}
379
380	spinner_horiz prod_change {
381		tooltip		"_Change the production amount"
382		pos			"710 480"
383		inverted	true
384		min			1
385		current		*cvar:mn_production_amount
386		max			1000
387		delta		1
388		onChange	{ cmd "prod_change <lastdiff>;" }
389	}
390
391	spinner_horiz prod_change_10 {
392		tooltip		"_Change the production amount"
393		pos			"850 480"
394		inverted	true
395		min			1
396		current		*cvar:mn_production_amount
397		max			1000
398		delta		10
399		onChange	{ cmd "prod_change <lastdiff>;" }
400	}
401
402	button prod_new
403	{
404		string		"_Start this production"
405		background		"ui/button_green_small"
406		pos			"670 480"
407		size		"250 50"
408		font		"f_small"
409		color		"0 .78 0 1"
410		onClick		{ cmd "prod_inc;" }
411	}
412
413	button prod_stop
414	{
415		tooltip		"_Stop production"
416		icon		"icons/bordered_cross"
417		pos			"931 480"
418		size		"50 50"
419		padding		17
420		onClick		{ cmd "prod_stop;" }
421	}
422
423	button prod_up
424	{
425		tooltip		"_Increase priority"
426		icon		"icons/arrow_top"
427		pos			"615 400"
428		size		"16 16"
429		padding		"0"
430		onClick		{ cmd "prod_up;" }
431		onWheelUp	{ cmd "prod_up;" }
432		onWheelDown	{ cmd "prod_down;" }
433	}
434
435	button prod_down
436	{
437		tooltip		"_Decrease priority"
438		icon		"icons/arrow_bottom"
439		pos			"615 420"
440		size		"16 16"
441		padding		0
442		onClick		{ cmd "prod_down;" }
443		onWheelUp	{ cmd "prod_up;" }
444		onWheelDown	{ cmd "prod_down;" }
445	}
446
447	/**
448	 * @brief nothing is selected
449	 */
450	confunc prod_nothingselected
451	{
452		*node:root.prod_stop@invis = true
453		*node:root.prod_down@invis = true
454		*node:root.prod_up@invis = true
455		*node:root.prod_change@invis = true
456		*node:root.prod_change_10@invis = true
457		*node:root.prod_new@invis = true
458		*node:root.prod_amount@invis = true
459		*node:root.label_1@invis = true
460		*node:root.label_10@invis = true
461	}
462
463	/**
464	 * @brief an available production is selected
465	 */
466	confunc prod_availableselected
467	{
468		*node:root.prod_stop@invis = true
469		*node:root.prod_down@invis = true
470		*node:root.prod_up@invis = true
471		*node:root.prod_change@invis = true
472		*node:root.prod_change_10@invis = true
473		*node:root.prod_amount@invis = true
474		*node:root.prod_new@invis = false
475		*node:root.label_1@invis = true
476		*node:root.label_10@invis = true
477	}
478
479	/**
480	 * @brief a production task is selected
481	 */
482	confunc prod_taskselected
483	{
484		*node:root.prod_stop@invis = false
485		*node:root.prod_down@invis = false
486		*node:root.prod_up@invis = false
487		*node:root.prod_change@invis = false
488		*node:root.prod_change_10@invis = false
489		*node:root.prod_amount@invis = false
490		*node:root.prod_new@invis = true
491		*node:root.label_1@invis = false
492		*node:root.label_10@invis = false
493	}
494
495	// ==================
496	// item description
497	// ==================
498
499
500	panel requirement {
501		{
502			pos		"610 615"
503			size	"346 120"
504		}
505
506		string label {
507			pos "5 5"
508			size "336 20"
509			font	"f_verysmall"
510			string "_Requirements"
511		}
512
513		optiontree prodreq
514		{
515			cvar		*cvar:ui_prreq
516			dataid		OPTION_PRODUCTION_REQUIREMENTS
517			pos			"5 26"
518			size		"320 92"
519			font		"f_verysmall"
520			color		"0 .78 0 1"
521			selectcolor	"0 .78 0 1"
522			onViewChange	{
523				*node:parent.prodreq_scroll@fullsize = <fullsize>
524				*node:parent.prodreq_scroll@current = <viewpos>
525				*node:parent.prodreq_scroll@viewsize = <viewsize>
526			}
527		}
528
529		vscrollbar prodreq_scroll {
530			image		"ui/scrollbar_v_green"
531			pos			"326 26"
532			height		"92"
533			current		0
534			viewsize	6
535			fullsize	6
536			hidewhenunused true
537			onChange	{ *node:parent.prodreq@viewpos = <current> }
538		}
539	}
540
541	panel proddesc {
542		{
543			pos			"610 533"
544			size		"346 80"
545			layout		LAYOUT_BORDER
546		}
547
548		text description
549		{
550			dataid		TEXT_PRODUCTION_INFO
551			align		LAYOUTALIGN_MIDDLE
552			lineheight	20
553			tabwidth	260
554			rows		4
555			onChange
556			{
557				*node:root.proddesc.description_scroll@current = 0
558				*node:root.proddesc.description@viewpos = 0
559			}
560			onViewChange	{
561				*node:root.proddesc.description_scroll@fullsize = <fullsize>
562				*node:root.proddesc.description_scroll@current = <viewpos>
563				*node:root.proddesc.description_scroll@viewsize = <viewsize>
564			}
565		}
566
567		vscrollbar description_scroll {
568			image		"ui/scrollbar_v_green"
569			align		LAYOUTALIGN_RIGHT
570			current		0
571			viewsize	4
572			fullsize	4
573			hidewhenunused true
574			onChange	{ *node:root.proddesc.description@viewpos = <current> }
575		}
576	}
577
578	confunc show_requirements {
579		*cvar:parm = <1>
580
581		if ( *cvar:parm > 0 ) {
582			*node:root.requirement@invis = false
583			*node:root.proddesc@height = 80
584		} else {
585			*node:root.requirement@invis = true
586			*node:root.proddesc@height = 200
587		}
588		delete *cvar:parm
589	}
590
591	// ==================
592	// init function
593	// ==================
594
595	confunc amountsetter {
596		*cvar:tmp = "<1>"
597		if ( *cvar:tmp eq "disable" ) {
598			*node:root.prod_change@disabled = true
599			*node:root.prod_change_10@disabled = true
600		} else {
601			*node:root.prod_change@disabled = false
602			*node:root.prod_change_10@disabled = false
603		}
604		delete *cvar:tmp
605	}
606
607	func onWindowOpened
608	{
609		cmd "prod_init; prod_type *cvar:mn_itemtype;"
610		call *node:root.prod_stores
611		*cvar:ui_prreq = ""
612		*cvar:mn_lastsubmenu = "production"
613	}
614	func onWindowClosed
615	{
616		delete *cvar:ui_prreq
617		// call base init function because the amount of workers, scientists and
618		// so on can also change the button state in the base view
619		cmd "base_init;"
620	}
621}
622