Subversion Repositories Kolibri OS

Rev

Rev 7218 | Rev 7225 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6198 leency 1
#ifndef INCLUDE_GUI_H
5598 pavelyakov 2
#define INCLUDE_GUI_H
3107 leency 3
 
5598 pavelyakov 4
#ifndef INCLUDE_KOLIBRI_H
5
#include "../lib/kolibri.h"
6
#endif
7
 
8
#ifndef INCLUDE_STRING_H
9
#include "../lib/strings.h"
10
#endif
11
 
6176 leency 12
#ifndef INCLUDE_RGB_H
13
#include "../lib/patterns/rgb.h"
14
#endif
15
 
7086 leency 16
#ifndef INCLUDE_MATH_H
17
#include "../lib/math.h"
18
#endif
19
 
4005 leency 20
:void DrawRectangle(dword x,y,w,h,color1)
3067 leency 21
{
3225 leency 22
	if (w<=0) || (h<=0) return;
23
	DrawBar(x,y,w,1,color1);
24
	DrawBar(x,y+h,w,1,color1);
25
	DrawBar(x,y,1,h,color1);
26
	DrawBar(x+w,y,1,h+1,color1);
3067 leency 27
}
28
 
5738 leency 29
:void DrawWideRectangle(dword x,y,w,h,boder,color1)
30
{
31
	if (w<=0) || (h<=0) return;
32
	DrawBar(x, y, w, boder, color1);
33
	DrawBar(x, y+h-boder, w, boder, color1);
34
	DrawBar(x, y+boder, boder, h-boder-boder, color1);
35
	DrawBar(x+w-boder, y+boder, boder, h-boder-boder, color1);
36
}
37
 
4005 leency 38
:void DrawRectangle3D(dword x,y,w,h,color1,color2)
3067 leency 39
{
3225 leency 40
	if (w<=0) || (h<=0) return;
41
	DrawBar(x,y,w+1,1,color1);
42
	DrawBar(x,y+1,1,h-1,color1);
43
	DrawBar(x+w,y+1,1,h,color2);
44
	DrawBar(x,y+h,w,1,color2);
3067 leency 45
}
46
 
4005 leency 47
:void DrawCaptButton(dword x,y,w,h,id,color_b, color_t,text)
3067 leency 48
{
6209 leency 49
	dword tx = -strlen(text)*8+w/2+x;
50
	dword ty = h/2-7+y;
51
 
4846 leency 52
	if (id>0) DefineButton(x,y,w,h,id,color_b);
6198 leency 53
	WriteText(tx+1,ty+1,0x90,MixColors(color_b,0,230),text);
54
	WriteText(tx,ty,0x90,color_t,text);
3067 leency 55
}
56
 
7031 leency 57
:int active_button_id = 0;
6631 leency 58
:int DrawStandartCaptButton(dword x, y, id, text)
6567 leency 59
{
7219 leency 60
	#define padding_v 5
61
	#define padding_h 15
62
	#define right_margin 12
63
	#define h padding_v + padding_v + 16 //16 font height
6567 leency 64
	int tx = x + padding_h;
6678 leency 65
	int ty = y + padding_v+1;
7031 leency 66
	int tw = strlen(text)*8;
67
	int w = tw + padding_h + padding_h;
6567 leency 68
 
7031 leency 69
 
6631 leency 70
	if (id>0) DefineButton(x,y,w,h,id,system.color.work_button);
7031 leency 71
 
6631 leency 72
	WriteText(tx+1,ty+1,0x90,MixColors(system.color.work_button,0,230),text);
73
	WriteText(tx,ty,0x90,system.color.work_button_text,text);
7031 leency 74
 
75
	if (active_button_id==id) {
76
		DrawBar(tx,ty+15,tw,1, MixColors(system.color.work_button,0,230));
77
		DrawBar(tx,ty+14,tw,1, system.color.work_button_text);
78
	}
79
 
6567 leency 80
	return w + right_margin;
81
}
82
 
7031 leency 83
:void ActiveButtonSwitch(int min, max)
84
{
85
	active_button_id++;
86
	if (active_button_id>max) || (active_button_id
87
}
88
 
4846 leency 89
:void WriteTextCenter(dword x,y,w,color_t,text)
90
{
91
	WriteText(-strlen(text)*6+w/2+x+1,y,0x80,color_t,text);
92
}
93
 
5519 leency 94
:void DrawCircle(int x, y, r, color)
3067 leency 95
{
96
	int i;
97
	float px=0, py=r, ii = r * 3.1415926 * 2;
98
	FOR (i = 0; i < ii; i++)
99
	{
5519 leency 100
        PutPixel(px + x, y - py, color);
3067 leency 101
        px = py / r + px;
102
        py = -px / r + py;
103
	}
3076 leency 104
}
3106 leency 105
 
6271 leency 106
:unsigned char checkbox_flag[507] = {
6197 leency 107
	0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC,
108
	0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4,
109
	0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xDC, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04,
110
	0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC,
111
	0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xDC,
112
	0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xBC, 0x04,
113
	0xFC, 0xBC, 0x04, 0xFC, 0xBC, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC,
114
	0xB4, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8,
115
	0x04, 0xFC, 0xBC, 0x04, 0xFC, 0xBC, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xB4, 0x04, 0xF9, 0x98, 0x04,
116
	0xFC, 0xF2, 0xD2, 0xFC, 0xF2, 0xD2, 0xFA, 0xA5, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xD4, 0x04, 0xFC,
117
	0xB4, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xB4,
118
	0x04, 0xF9, 0x98, 0x04, 0xFF, 0xFF, 0xFF, 0xFD, 0xFD, 0xF6, 0xFC, 0xF9, 0xAF, 0xF9, 0x98, 0x04,
119
	0xFC, 0xB4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xF2, 0xD2, 0xFC, 0xF2, 0xD2, 0xF9,
120
	0x98, 0x04, 0xFC, 0xB4, 0x04, 0xF9, 0x98, 0x04, 0xFF, 0xFF, 0xFF, 0xFD, 0xFD, 0xF6, 0xF7, 0xE0,
121
	0x95, 0xBC, 0x64, 0x04, 0xF9, 0x98, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xD4, 0x04, 0xF9, 0x98, 0x04,
122
	0xFD, 0xFD, 0xF6, 0xFF, 0xFF, 0xFF, 0xFC, 0xDC, 0x2C, 0xF9, 0x98, 0x04, 0xFF, 0xFF, 0xFF, 0xFD,
123
	0xFD, 0xF6, 0xF7, 0xE0, 0x95, 0xBC, 0x64, 0x04, 0xF9, 0x98, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xA9,
124
	0x04, 0xFC, 0xD4, 0x04, 0xF9, 0x98, 0x04, 0xF7, 0xE0, 0x95, 0xFD, 0xFD, 0xF6, 0xFF, 0xFF, 0xFF,
125
	0xFF, 0xFF, 0xFF, 0xFD, 0xFD, 0xF6, 0xF7, 0xE0, 0x95, 0xBC, 0x64, 0x04, 0xF9, 0x98, 0x04, 0xFA,
126
	0x9F, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xD4, 0x04, 0xF9, 0x98, 0x04, 0xBC, 0x64,
127
	0x04, 0xF7, 0xE0, 0x95, 0xFD, 0xFD, 0xF6, 0xFD, 0xFD, 0xF6, 0xF7, 0xE0, 0x95, 0xBC, 0x64, 0x04,
128
	0xF9, 0x98, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC,
129
	0xC8, 0x04, 0xFA, 0xA5, 0x04, 0xF9, 0x98, 0x04, 0xBC, 0x64, 0x04, 0xF7, 0xE0, 0x95, 0xF7, 0xE0,
130
	0x95, 0xBC, 0x64, 0x04, 0xF9, 0x98, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04,
131
	0xFC, 0xA9, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xA9, 0x04, 0xFA, 0x9F, 0x04, 0xF9,
132
	0x98, 0x04, 0xBC, 0x64, 0x04, 0xBC, 0x64, 0x04, 0xF9, 0x98, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xA9,
133
	0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFA, 0x9F, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xC8, 0x04,
134
	0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFA, 0x9F, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xFA,
135
	0x9F, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFA, 0x9F, 0x04, 0xFA, 0x9F,
136
	0x04, 0xF9, 0x98, 0x04, 0xFC, 0xB4, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04,
137
	0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9,
138
	0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04
139
};
140
 
6176 leency 141
:void CheckBox(dword x,y,bt_id, text, is_checked)
3106 leency 142
{
6176 leency 143
	byte w=14, h=14;
6197 leency 144
	DefineButton(x-1, y-1, strlen(text)*8 + w + 17, h+2, bt_id+BT_HIDE+BT_NOFRAME, 0);
6278 leency 145
	EDI = system.color.work;
146
	WriteText(x+w+8, h / 2 + y -7, 0xD0, system.color.work_text, text);
6176 leency 147
	DrawRectangle(x, y, w, h, system.color.work_graph);
5477 leency 148
	if (is_checked == 0)
3106 leency 149
	{
5477 leency 150
		DrawRectangle3D(x+1, y+1, w-2, h-2, 0xDDDddd, 0xffffff);
151
		DrawBar(x+2, y+2, w-3, h-3, 0xffffff);
152
	}
153
	else if (is_checked == 1)
154
	{
6176 leency 155
		DrawWideRectangle(x+1, y+1, w-1, h-1, 2, 0xffffff);
6197 leency 156
		_PutImage(x+1, y+1, 13, 13, #checkbox_flag);
3106 leency 157
	}
5477 leency 158
	else if (is_checked == 2) //not active
3106 leency 159
	{
6176 leency 160
		DrawWideRectangle(x+1, y+1, w-1, h-1, 2, 0xffffff);
5526 leency 161
		DrawBar(x+3, y+3, w-5, h-5, 0x888888);
5477 leency 162
	}
6191 leency 163
	DrawRectangle3D(x-1,y-1,w+2,h+2,system.color.work_dark,system.color.work_light);
3114 leency 164
}
165
 
6176 leency 166
:void MoreLessBox(dword x,y, bt_id_more, bt_id_less, value, text)
5477 leency 167
{
6198 leency 168
	#define VALUE_FIELD_W 34
6176 leency 169
	#define SIZE 18
6198 leency 170
	dword value_text = itoa(value);
5542 leency 171
 
6931 leency 172
	DrawRectangle(x, y, VALUE_FIELD_W+1, SIZE, system.color.work_graph);
6176 leency 173
	DrawRectangle3D(x+1, y+1, VALUE_FIELD_W-2, SIZE-2, 0xDDDddd, 0xffffff);
174
	DrawBar(x+2, y+2, VALUE_FIELD_W-3, SIZE-3, 0xffffff);
6649 leency 175
	WriteText( -strlen(value_text)+3*8 + x+6, SIZE / 2 + y -6, 0x90, 0x333333, value_text);
5477 leency 176
 
6931 leency 177
	DrawCaptButton(VALUE_FIELD_W + x + 1,    y, SIZE, SIZE, bt_id_more, system.color.work_button, system.color.work_button_text, "+");
6191 leency 178
	DrawCaptButton(VALUE_FIELD_W + x + SIZE, y, SIZE, SIZE, bt_id_less, system.color.work_button, system.color.work_button_text, "-");
6278 leency 179
	EDI = system.color.work;
180
	WriteText(x+VALUE_FIELD_W+SIZE+SIZE+10, SIZE / 2 + y -7, 0xD0, system.color.work_text, text);
6191 leency 181
	DrawRectangle3D(x-1,y-1,VALUE_FIELD_W+SIZE+SIZE+2,SIZE+2,system.color.work_dark,system.color.work_light);
5477 leency 182
}
183
 
6278 leency 184
:void DrawEditBox(dword edit_box_pointer)
6193 leency 185
{
6278 leency 186
	dword x,y,w,h,bg;
6193 leency 187
	ESI = edit_box_pointer;
188
	x = ESI.edit_box.left;
189
	y = ESI.edit_box.top;
190
	w = ESI.edit_box.width+1;
6278 leency 191
	if (ESI.edit_box.flags & 100000000000b) bg = 0xCACACA; else bg = 0xFFFfff;
6678 leency 192
	edit_box_draw  stdcall (edit_box_pointer);
6708 leency 193
	h = 22;
7218 leency 194
	DrawRectangle3D(x-1, y-1, w+1, h+1, 0xE7E7E7, bg);
195
	DrawRectangle(x-2, y-2, w+3, h+3, system.color.work_graph);
196
	DrawRectangle3D(x-3, y-3, w+5, h+5, system.color.work_dark, system.color.work_light);
6193 leency 197
}
198
 
4686 leency 199
:void DrawProgressBar(dword st_x, st_y, st_w, st_h, col_fon, col_border, col_fill, col_text, progress_percent)
3114 leency 200
{
3225 leency 201
	int progress_w;
3114 leency 202
	static int fill_old;
203
 
3363 leency 204
	//if (progress_percent<=0) {DrawBar(st_x,st_y, st_x + st_w + fill_old + 15,st_h+1, col_fon); fill_old=0; return;}
205
	if (progress_percent<=0) || (progress_percent>=100) return;
3114 leency 206
 
207
	DrawRectangle(st_x, st_y, st_w,st_h, col_border);
208
	DrawRectangle3D(st_x+1, st_y+1, st_w-2,st_h-2, 0xFFFfff, 0xFFFfff);
3225 leency 209
 
210
	if (progress_percent>0) && (progress_percent<=100)
211
	{
212
		progress_w = st_w - 3 * progress_percent / 100;
213
		DrawBar(st_x+2, st_y+2, progress_w, st_h-3, col_fill);
214
		DrawBar(st_x+2+progress_w, st_y+2, st_w-progress_w-3, st_h-3, 0xFFFfff);
215
	}
3363 leency 216
}
217
 
218
:void DrawLink(dword x,y,font_type,btn_id, inscription)
219
{
220
	int w;
221
	WriteText(x,y,font_type,0x4E00E7,inscription);
7031 leency 222
	if (font_type==0x80) w = strlen(inscription)*6; else w = strlen(inscription)*8;
3363 leency 223
	DefineButton(x-1,y-1,w,10,btn_id+BT_HIDE,0);
224
	DrawBar(x,y+8,w,1,0x4E00E7);
225
}
226
 
3991 leency 227
:void PutShadow(dword x,y,w,h,skinned,strength)
3363 leency 228
{
229
	proc_info wForm;
230
	dword shadow_buf, skin_height;
231
	shadow_buf = mem_Alloc(w*h*3);
232
 	GetProcessInfo(#wForm, SelfInfo);
3991 leency 233
	CopyScreen(shadow_buf, 5*skinned+x+wForm.left, GetSkinHeight()*skinned+y+wForm.top, w, h);
3363 leency 234
	ShadowImage(shadow_buf, w, h, strength);
235
	_PutImage(x,y,w,h,shadow_buf);
236
	mem_Free(shadow_buf);
237
}
238
 
3991 leency 239
:void DrawPopup(dword x,y,w,h,skinned, col_work,col_border)
240
{
241
	DrawRectangle(x,y,w,h,col_border);
3992 leency 242
	DrawBar(x+1,y+1,w-1,1,0xFFFfff);
4029 leency 243
	DrawBar(x+1,y+2,1,h-2,0xFFFfff);
3992 leency 244
	if (col_work!=-1) DrawBar(x+2,y+2,w-2,h-2,col_work);
3991 leency 245
	DrawPopupShadow(x,y,w,h-1,skinned);
246
}
247
 
5499 leency 248
:void DrawPopupShadow(dword x,y,w,h,skinned)
249
{
250
	PutShadow(w+x+1,y,1,h+2,skinned,2);
251
	PutShadow(w+x+2,y+1,1,h+2,skinned,1);
252
	PutShadow(x,y+h+2,w+2,1,skinned,2);
253
	PutShadow(x+1,y+h+3,w+1,1,skinned,1);
254
}
255
 
3363 leency 256
:void GrayScaleImage(dword color_image, w, h)
257
{
5761 leency 258
	dword i,gray,to,rr,gg,bb;
259
	to = w*h*3 + color_image;
260
	for (i = color_image; i < to; i+=3)
3363 leency 261
	{
5761 leency 262
		rr = DSBYTE[i];
263
		gg = DSBYTE[i+1];
264
		bb = DSBYTE[i+2];
3363 leency 265
		gray = rr*rr;
266
		gray += gg*gg;
267
		gray += bb*bb;
268
		gray = sqrt(gray) / 3;
5761 leency 269
		DSBYTE[i] = DSBYTE[i+1] = DSBYTE[i+2] = gray;
3363 leency 270
	}
271
}
272
 
273
:void ShadowImage(dword color_image, w, h, strength)
274
{
275
	dword col, to;
276
	strength = 10 - strength;
277
	to = w*h*3 + color_image;
278
	for ( ; color_image < to; color_image++)
279
	{
280
		col = strength * DSBYTE[color_image] / 10;
281
		DSBYTE[color_image] = col;
282
	}
5598 pavelyakov 283
}
284
 
5962 leency 285
:void WriteTextLines(dword x,y,byte fontType, dword color, text_pointer, line_h)
286
{
287
	dword next_word_pointer = strchr(text_pointer, '\n');
288
	if (next_word_pointer) WriteTextLines(dword x, y+line_h, byte fontType, dword color, next_word_pointer+2, line_h);
289
	ESBYTE[next_word_pointer] = NULL;
290
	WriteText(dword x, y, byte fontType, dword color, text_pointer);
291
	ESBYTE[next_word_pointer] = '\n';
292
}
293
 
6631 leency 294
/*
295
We have a long text and need to show it in block.
296
Normal line break '\n' must be applied.
297
Long lines should be breaked by word.
298
TODO: scroll
299
*/
6651 leency 300
:int DrawTextViewArea(int x,y,w,h, dword buf_start, bg_col, text_col)
6631 leency 301
{
302
	dword write_start;
303
	dword buf_end;
6651 leency 304
	int line_h = 15;
6631 leency 305
	int label_length_max;
306
	int write_length;
307
	bool end_found;
308
 
309
	write_start = buf_start;
310
	buf_end = strlen(buf_start) + buf_start;
311
	label_length_max  = w / 8; // 8 big font char width
312
 
313
	loop()
314
	{
315
		if (bg_col!=-1) DrawBar(x, y, w+1, line_h, bg_col);
316
		end_found = false;
317
		write_length = strchr(write_start, '\n') - write_start; //search normal line break
318
		if (write_length > label_length_max) || (write_length<=0) //check its position: exceeds maximum line length or not found
319
		{
320
			if (buf_end - write_start < label_length_max) //check does current line the last
321
			{
322
				write_length = buf_end - write_start;
323
				end_found = true;
324
			}
325
			else
326
			{
327
				for (write_length=label_length_max; write_length>0; write_length--) { //search for white space to make the line break
328
					if (ESBYTE[write_start+write_length] == ' ') {
329
						end_found = true;
330
						break;
331
					}
332
				}
333
			}
334
			if (end_found != true) write_length = label_length_max; //no white space, so we write label_length_max
335
		}
336
		ESI = write_length; //set text length attribute for WriteText()
6662 leency 337
		WriteText(x, y, 0x10, text_col, write_start);
6631 leency 338
		// if (editpos >= write_start-buf_start) && (editpos <= write_start-buf_start + write_length) {
339
		// 	WriteTextB(-write_start+buf_start+editpos * 8 + x - 5 +1, y, 0x90, 0xFF0000, "|");
340
		// }
341
		write_start += write_length + 1;
342
		y += line_h;
343
		if (write_start >= buf_end) break;
344
	}
345
	if (bg_col!=-1) DrawBar(x,y,w+1,h-y+line_h-4,bg_col);
346
	return y+line_h;
347
}
348
 
349
 
6197 leency 350
//this function increase falue and return it
351
//useful for list of controls which goes one after one
7160 leency 352
:struct incn
6197 leency 353
{
354
	dword n;
355
	dword inc(dword _addition);
356
};
357
 
7160 leency 358
:dword incn::inc(dword _addition)
6197 leency 359
{
360
	n+=_addition;
361
	return n;
362
}
363
 
6264 leency 364
 
365
/*=========================================================
366
==
367
==                   TABS
368
==
369
/========================================================*/
370
 
371
#define TAB_PADDING 25
372
#define TAB_HEIGHT 25
373
 
6271 leency 374
:struct _tabs
6264 leency 375
{
376
	int active_tab;
377
	void draw();
378
	int click();
379
} tabs;
380
 
6271 leency 381
:void _tabs::draw(dword x,y, but_id, text)
6264 leency 382
{
383
	dword col_bg, col_text;
384
	dword w=strlen(text)*8+TAB_PADDING, h=TAB_HEIGHT;
385
	y -= h;
386
 
387
	if (but_id==active_tab)
388
	{
389
		col_bg=system.color.work_button;
390
		col_text=system.color.work_button_text;
391
	}
392
	else
393
	{
394
		col_bg=system.color.work;
395
		col_text=system.color.work_text;
396
	}
397
	DrawCaptButton(x,y, w-1,h+1, but_id, col_bg, col_text, text);
398
}
399
 
6271 leency 400
:int _tabs::click(int N)
6264 leency 401
{
402
	if (N==active_tab) return false;
403
	active_tab = N;
404
	return true;
405
}
406
 
7086 leency 407
/*=========================================================
408
==
409
==                   MORE LESS BOX
410
==
411
/========================================================*/
6264 leency 412
 
7160 leency 413
:struct more_less_box
7086 leency 414
{
415
	signed x,y;
416
	unsigned value, min, max;
417
	unsigned bt_id_more, bt_id_less;
418
	dword text;
7089 leency 419
	bool click();
7086 leency 420
	void draw();
421
};
6264 leency 422
 
7160 leency 423
:bool more_less_box::click(unsigned id)
7086 leency 424
{
7089 leency 425
	if (id==bt_id_less) { value = math.max(value-1, min); draw(); return 1; }
426
	if (id==bt_id_more) { value = math.min(value+1, max); draw(); return 1; }
427
	return 0;
7086 leency 428
}
429
 
7160 leency 430
:void more_less_box::draw()
7086 leency 431
{
432
	#define VALUE_FIELD_W 34
433
	#define SIZE 18
434
	dword value_text = itoa(value);
435
 
436
	DrawRectangle(x, y, VALUE_FIELD_W+1, SIZE, system.color.work_graph);
437
	DrawRectangle3D(x+1, y+1, VALUE_FIELD_W-2, SIZE-2, 0xDDDddd, 0xffffff);
438
	DrawBar(x+2, y+2, VALUE_FIELD_W-3, SIZE-3, 0xffffff);
439
	WriteText( -strlen(value_text)+3*8 + x+6, SIZE / 2 + y -6, 0x90, 0x333333, value_text);
440
 
441
	DrawCaptButton(VALUE_FIELD_W + x + 1,    y, SIZE, SIZE, bt_id_more, system.color.work_button, system.color.work_button_text, "+");
442
	DrawCaptButton(VALUE_FIELD_W + x + SIZE, y, SIZE, SIZE, bt_id_less, system.color.work_button, system.color.work_button_text, "-");
443
	EDI = system.color.work;
444
	WriteText(x+VALUE_FIELD_W+SIZE+SIZE+10, SIZE / 2 + y -7, 0xD0, system.color.work_text, text);
445
	DrawRectangle3D(x-1,y-1,VALUE_FIELD_W+SIZE+SIZE+2,SIZE+2,system.color.work_dark,system.color.work_light);
446
}
447
 
448
 
449
 
450
 
5598 pavelyakov 451
#endif