Subversion Repositories Kolibri OS

Rev

Rev 7086 | Rev 7160 | 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
{
60
	int padding_v = 5;
61
	int padding_h = 15;
62
	int right_margin = 12;
63
	int tx = x + padding_h;
6678 leency 64
	int ty = y + padding_v+1;
7031 leency 65
	int tw = strlen(text)*8;
6567 leency 66
	int h = padding_v + padding_v + 16; //16 font height
7031 leency 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;
6649 leency 194
	DrawRectangle(x-1, y-1, w+1, h+1, bg);
195
	DrawRectangle3D(x-2, y-2, w+3, h+3, 0xDDDddd, bg);
196
	DrawRectangle(x-3, y-3, w+5, h+5, system.color.work_graph);
197
	DrawRectangle3D(x-4, y-4, w+7, h+7, system.color.work_dark, system.color.work_light);
6193 leency 198
}
199
 
4686 leency 200
:void DrawProgressBar(dword st_x, st_y, st_w, st_h, col_fon, col_border, col_fill, col_text, progress_percent)
3114 leency 201
{
3225 leency 202
	int progress_w;
3114 leency 203
	static int fill_old;
204
 
3363 leency 205
	//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;}
206
	if (progress_percent<=0) || (progress_percent>=100) return;
3114 leency 207
 
208
	DrawRectangle(st_x, st_y, st_w,st_h, col_border);
209
	DrawRectangle3D(st_x+1, st_y+1, st_w-2,st_h-2, 0xFFFfff, 0xFFFfff);
3225 leency 210
 
211
	if (progress_percent>0) && (progress_percent<=100)
212
	{
213
		progress_w = st_w - 3 * progress_percent / 100;
214
		DrawBar(st_x+2, st_y+2, progress_w, st_h-3, col_fill);
215
		DrawBar(st_x+2+progress_w, st_y+2, st_w-progress_w-3, st_h-3, 0xFFFfff);
216
	}
3363 leency 217
}
218
 
219
:void DrawLink(dword x,y,font_type,btn_id, inscription)
220
{
221
	int w;
222
	WriteText(x,y,font_type,0x4E00E7,inscription);
7031 leency 223
	if (font_type==0x80) w = strlen(inscription)*6; else w = strlen(inscription)*8;
3363 leency 224
	DefineButton(x-1,y-1,w,10,btn_id+BT_HIDE,0);
225
	DrawBar(x,y+8,w,1,0x4E00E7);
226
}
227
 
3991 leency 228
:void PutShadow(dword x,y,w,h,skinned,strength)
3363 leency 229
{
230
	proc_info wForm;
231
	dword shadow_buf, skin_height;
232
	shadow_buf = mem_Alloc(w*h*3);
233
 	GetProcessInfo(#wForm, SelfInfo);
3991 leency 234
	CopyScreen(shadow_buf, 5*skinned+x+wForm.left, GetSkinHeight()*skinned+y+wForm.top, w, h);
3363 leency 235
	ShadowImage(shadow_buf, w, h, strength);
236
	_PutImage(x,y,w,h,shadow_buf);
237
	mem_Free(shadow_buf);
238
}
239
 
3991 leency 240
:void DrawPopup(dword x,y,w,h,skinned, col_work,col_border)
241
{
242
	DrawRectangle(x,y,w,h,col_border);
3992 leency 243
	DrawBar(x+1,y+1,w-1,1,0xFFFfff);
4029 leency 244
	DrawBar(x+1,y+2,1,h-2,0xFFFfff);
3992 leency 245
	if (col_work!=-1) DrawBar(x+2,y+2,w-2,h-2,col_work);
3991 leency 246
	DrawPopupShadow(x,y,w,h-1,skinned);
247
}
248
 
5499 leency 249
:void DrawPopupShadow(dword x,y,w,h,skinned)
250
{
251
	PutShadow(w+x+1,y,1,h+2,skinned,2);
252
	PutShadow(w+x+2,y+1,1,h+2,skinned,1);
253
	PutShadow(x,y+h+2,w+2,1,skinned,2);
254
	PutShadow(x+1,y+h+3,w+1,1,skinned,1);
255
}
256
 
3363 leency 257
:void GrayScaleImage(dword color_image, w, h)
258
{
5761 leency 259
	dword i,gray,to,rr,gg,bb;
260
	to = w*h*3 + color_image;
261
	for (i = color_image; i < to; i+=3)
3363 leency 262
	{
5761 leency 263
		rr = DSBYTE[i];
264
		gg = DSBYTE[i+1];
265
		bb = DSBYTE[i+2];
3363 leency 266
		gray = rr*rr;
267
		gray += gg*gg;
268
		gray += bb*bb;
269
		gray = sqrt(gray) / 3;
5761 leency 270
		DSBYTE[i] = DSBYTE[i+1] = DSBYTE[i+2] = gray;
3363 leency 271
	}
272
}
273
 
274
:void ShadowImage(dword color_image, w, h, strength)
275
{
276
	dword col, to;
277
	strength = 10 - strength;
278
	to = w*h*3 + color_image;
279
	for ( ; color_image < to; color_image++)
280
	{
281
		col = strength * DSBYTE[color_image] / 10;
282
		DSBYTE[color_image] = col;
283
	}
5598 pavelyakov 284
}
285
 
5962 leency 286
:void WriteTextLines(dword x,y,byte fontType, dword color, text_pointer, line_h)
287
{
288
	dword next_word_pointer = strchr(text_pointer, '\n');
289
	if (next_word_pointer) WriteTextLines(dword x, y+line_h, byte fontType, dword color, next_word_pointer+2, line_h);
290
	ESBYTE[next_word_pointer] = NULL;
291
	WriteText(dword x, y, byte fontType, dword color, text_pointer);
292
	ESBYTE[next_word_pointer] = '\n';
293
}
294
 
6631 leency 295
/*
296
We have a long text and need to show it in block.
297
Normal line break '\n' must be applied.
298
Long lines should be breaked by word.
299
TODO: scroll
300
*/
6651 leency 301
:int DrawTextViewArea(int x,y,w,h, dword buf_start, bg_col, text_col)
6631 leency 302
{
303
	dword write_start;
304
	dword buf_end;
6651 leency 305
	int line_h = 15;
6631 leency 306
	int label_length_max;
307
	int write_length;
308
	bool end_found;
309
 
310
	write_start = buf_start;
311
	buf_end = strlen(buf_start) + buf_start;
312
	label_length_max  = w / 8; // 8 big font char width
313
 
314
	loop()
315
	{
316
		if (bg_col!=-1) DrawBar(x, y, w+1, line_h, bg_col);
317
		end_found = false;
318
		write_length = strchr(write_start, '\n') - write_start; //search normal line break
319
		if (write_length > label_length_max) || (write_length<=0) //check its position: exceeds maximum line length or not found
320
		{
321
			if (buf_end - write_start < label_length_max) //check does current line the last
322
			{
323
				write_length = buf_end - write_start;
324
				end_found = true;
325
			}
326
			else
327
			{
328
				for (write_length=label_length_max; write_length>0; write_length--) { //search for white space to make the line break
329
					if (ESBYTE[write_start+write_length] == ' ') {
330
						end_found = true;
331
						break;
332
					}
333
				}
334
			}
335
			if (end_found != true) write_length = label_length_max; //no white space, so we write label_length_max
336
		}
337
		ESI = write_length; //set text length attribute for WriteText()
6662 leency 338
		WriteText(x, y, 0x10, text_col, write_start);
6631 leency 339
		// if (editpos >= write_start-buf_start) && (editpos <= write_start-buf_start + write_length) {
340
		// 	WriteTextB(-write_start+buf_start+editpos * 8 + x - 5 +1, y, 0x90, 0xFF0000, "|");
341
		// }
342
		write_start += write_length + 1;
343
		y += line_h;
344
		if (write_start >= buf_end) break;
345
	}
346
	if (bg_col!=-1) DrawBar(x,y,w+1,h-y+line_h-4,bg_col);
347
	return y+line_h;
348
}
349
 
350
 
6197 leency 351
//this function increase falue and return it
352
//useful for list of controls which goes one after one
353
struct incn
354
{
355
	dword n;
356
	dword inc(dword _addition);
357
};
358
 
359
dword incn::inc(dword _addition)
360
{
361
	n+=_addition;
362
	return n;
363
}
364
 
6264 leency 365
 
366
/*=========================================================
367
==
368
==                   TABS
369
==
370
/========================================================*/
371
 
372
#define TAB_PADDING 25
373
#define TAB_HEIGHT 25
374
 
6271 leency 375
:struct _tabs
6264 leency 376
{
377
	int active_tab;
378
	void draw();
379
	int click();
380
} tabs;
381
 
6271 leency 382
:void _tabs::draw(dword x,y, but_id, text)
6264 leency 383
{
384
	dword col_bg, col_text;
385
	dword w=strlen(text)*8+TAB_PADDING, h=TAB_HEIGHT;
386
	y -= h;
387
 
388
	if (but_id==active_tab)
389
	{
390
		col_bg=system.color.work_button;
391
		col_text=system.color.work_button_text;
392
	}
393
	else
394
	{
395
		col_bg=system.color.work;
396
		col_text=system.color.work_text;
397
	}
398
	DrawCaptButton(x,y, w-1,h+1, but_id, col_bg, col_text, text);
399
}
400
 
6271 leency 401
:int _tabs::click(int N)
6264 leency 402
{
403
	if (N==active_tab) return false;
404
	active_tab = N;
405
	return true;
406
}
407
 
7086 leency 408
/*=========================================================
409
==
410
==                   MORE LESS BOX
411
==
412
/========================================================*/
6264 leency 413
 
7086 leency 414
struct more_less_box
415
{
416
	signed x,y;
417
	unsigned value, min, max;
418
	unsigned bt_id_more, bt_id_less;
419
	dword text;
7089 leency 420
	bool click();
7086 leency 421
	void draw();
422
};
6264 leency 423
 
7089 leency 424
bool more_less_box::click(unsigned id)
7086 leency 425
{
7089 leency 426
	if (id==bt_id_less) { value = math.max(value-1, min); draw(); return 1; }
427
	if (id==bt_id_more) { value = math.min(value+1, max); draw(); return 1; }
428
	return 0;
7086 leency 429
}
430
 
431
void more_less_box::draw()
432
{
433
	#define VALUE_FIELD_W 34
434
	#define SIZE 18
435
	dword value_text = itoa(value);
436
 
437
	DrawRectangle(x, y, VALUE_FIELD_W+1, SIZE, system.color.work_graph);
438
	DrawRectangle3D(x+1, y+1, VALUE_FIELD_W-2, SIZE-2, 0xDDDddd, 0xffffff);
439
	DrawBar(x+2, y+2, VALUE_FIELD_W-3, SIZE-3, 0xffffff);
440
	WriteText( -strlen(value_text)+3*8 + x+6, SIZE / 2 + y -6, 0x90, 0x333333, value_text);
441
 
442
	DrawCaptButton(VALUE_FIELD_W + x + 1,    y, SIZE, SIZE, bt_id_more, system.color.work_button, system.color.work_button_text, "+");
443
	DrawCaptButton(VALUE_FIELD_W + x + SIZE, y, SIZE, SIZE, bt_id_less, system.color.work_button, system.color.work_button_text, "-");
444
	EDI = system.color.work;
445
	WriteText(x+VALUE_FIELD_W+SIZE+SIZE+10, SIZE / 2 + y -7, 0xD0, system.color.work_text, text);
446
	DrawRectangle3D(x-1,y-1,VALUE_FIELD_W+SIZE+SIZE+2,SIZE+2,system.color.work_dark,system.color.work_light);
447
}
448
 
449
 
450
 
451
 
5598 pavelyakov 452
#endif