Subversion Repositories Kolibri OS

Rev

Rev 7495 | Rev 7500 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7495 Rev 7498
Line 1... Line 1...
1
//íå èä¸ò äàëüøå 98 ñòðîêè 
1
//íå èä¸ò äàëüøå 98 ñòðîêè 
2
//óäàëåíû íåèñïîëüçóåìûå ïåðåìåííûå
-
 
3
//ïðàâèëüíîå ñâîðà÷èâàíèå â çàãîëîâîê
-
 
4
 
-
 
5
//çà÷åì ñòðîêà 450?
-
 
6
//åñëè âûäåëèòü îáëàñòü ÿ÷ååê è ñäâèíóòü êóðñîð ââîäà ñ ïîìîùüþ êëàâèø, "ñëåäû" îñòàíóòüñÿ
2
//åñëè âûäåëèòü îáëàñòü ÿ÷ååê è ñäâèíóòü êóðñîð ââîäà ñ ïîìîùüþ êëàâèø, "ñëåäû" îñòàíóòüñÿ
7
//íåëüçÿ ïåðåìåùàòüñÿ ïî áóêâàì â ðåäàêòèðóåìîé ñòðîêå
3
//íåëüçÿ ïåðåìåùàòüñÿ ïî áóêâàì â ðåäàêòèðóåìîé ñòðîêå
Line 8... Line 4...
8
 
4
 
9
#include "func.h"
5
#include "func.h"
10
#include "parser.h"
6
#include "parser.h"
11
#include "calc.h"
7
#include "calc.h"
Line 12... Line 8...
12
#include "use_library.h"
8
#include "use_library.h"
Line 13... Line 9...
13
 
9
 
14
#define TABLE_VERSION "0.97"
10
#define TABLE_VERSION "0.98"
15
 
11
 
16
// ñòðîêè, êîòîðûå âûâîäèò ïðîãðàììà
12
// ñòðîêè, êîòîðûå âûâîäèò ïðîãðàììà
Line 24... Line 20...
24
const char er_format[] = "Error: bad format. ";
20
const char er_format[] = "Error: bad format. ";
25
const char msg_save[] = "File saved. ";
21
const char msg_save[] = "File saved. ";
26
const char msg_load[] = "File loaded. ";
22
const char msg_load[] = "File loaded. ";
27
const char msg_new[] = "Memory cleared. ";
23
const char msg_new[] = "Memory cleared. ";
Line 28... Line 24...
28
 
24
 
29
// ñâîé PID
-
 
30
Dword myPID = -1;
-
 
31
 
-
 
32
// íà÷àëüíûå ðàçìåðû
25
// initial window sizes
33
#define WND_W 550
26
#define WND_W 640
34
#define WND_H 400
27
#define WND_H 480
-
 
28
// new window size and coordinates
-
 
29
int wi;
35
// íîâûå ðàçìåðû è êîîðäèíàòû
30
int he;
36
int wi = WND_W, he = WND_H;
31
int cWidth;
Line 37... Line 32...
37
int win_x, win_y;
32
int cHeight;
38
 
33
 
39
// öâåòà ýëåìåíòîâ èíòåðôåéñà
34
// interface colors
40
#define GRID_COLOR 0xa0a0a0
35
#define GRID_COLOR 0xa0a0a0
41
#define TEXT_COLOR 0x000000
36
#define TEXT_COLOR 0x000000
42
#define CELL_COLOR 0xffffff
37
#define CELL_COLOR 0xffffff
43
#define SEL_CELL_COLOR 0xe0e0ff
38
#define SEL_CELL_COLOR 0xe0e0ff
44
#define FIXED_CELL_COLOR 0xe0e0ff
39
#define FIXED_CELL_COLOR 0xe0e0ff
-
 
40
#define SEL_FIXED_CELL_COLOR 0x758FC1
Line 45... Line 41...
45
#define SEL_FIXED_CELL_COLOR 0x758FC1
41
#define TEXT_SEL_FIXED_COLOR 0xffffff
46
#define TEXT_SEL_FIXED_COLOR 0xffffff
-
 
Line 47... Line 42...
47
 
42
#define PANEL_BG_COLOR 0xe4dfe1
48
#define SCROLL_BAR_WIDTH 16
43
 
49
#define SCROLL_BAR_HEIGHT 16
44
#define SCROLL_SIZE 16
50
 
45
 
51
// ID êíîïîê
46
// button IDs
52
#define FILENAME_BUTTON 0x10
47
#define FILENAME_BUTTON 0x10
Line 53... Line -...
53
#define SAVE_BUTTON 0x11
-
 
54
#define LOAD_BUTTON 0x12
-
 
55
#define NEW_BUTTON 0x13
-
 
56
#define DRAG_BUTTON 0x20
-
 
57
 
-
 
58
#define SCROLL_LEFT_BUTTON 0x21
-
 
59
#define SCROLL_RIGHT_BUTTON 0x22
-
 
60
#define SCROLL_UP_BUTTON 0x23
48
#define SAVE_BUTTON 0x11
61
#define SCROLL_DOWN_BUTTON 0x24
49
#define LOAD_BUTTON 0x12
62
#define SCROLL_WIDTH 0x25
50
#define NEW_BUTTON 0x13
63
#define SCROLL_HEIGHT 0x26
51
#define DRAG_BUTTON 0x20
64
 
52
 
Line 65... Line -...
65
#define COL_BUTTON 0x100
-
 
66
#define ROW_BUTTON (COL_BUTTON + 0x100)
53
#define COL_BUTTON 0x100
67
#define COL_HEAD_BUTTON (ROW_BUTTON + 0x100)
54
#define ROW_BUTTON (COL_BUTTON + 0x100)
68
#define ROW_HEAD_BUTTON (COL_HEAD_BUTTON + 0x100)
55
#define COL_HEAD_BUTTON (ROW_BUTTON + 0x100)
69
#define CELL_BUTTON (ROW_HEAD_BUTTON + 0x100)
56
#define ROW_HEAD_BUTTON (COL_HEAD_BUTTON + 0x100)
70
 
-
 
Line -... Line 57...
-
 
57
#define CELL_BUTTON (ROW_HEAD_BUTTON + 0x100)
71
 
58
 
72
// íèæíÿÿ ïàíåëü ñ êíîïêàìè è ïîëåì ââîäà
59
// bottom panel
-
 
60
#define MENU_PANEL_HEIGHT 40
-
 
61
Dword panel_y = 0;
Line 73... Line 62...
73
#define MENU_PANEL_HEIGHT 40
62
Dword mouse_dd;
74
Dword panel_y = 0;
63
 
75
Dword mouse_dd;
64
// editbox data
76
// äëÿ ïîëÿ ââîäà
65
char edit_text[256] = "";
Line 118... Line 107...
118
#define is_edit (cell_box.flags & ed_focus)
107
#define is_edit (cell_box.flags & ed_focus)
Line 119... Line 108...
119
 
108
 
120
// ðåäàêòèðîâàíèå èìåíè ôàéëà
109
// ðåäàêòèðîâàíèå èìåíè ôàéëà
121
bool fn_edit = 0;
110
bool fn_edit = 0;
122
char fname[256];
111
char fname[256];
Line 123... Line 112...
123
edit_box file_box = {0,9*8-5,WND_H - 16-32,0xffffff,0x6a9480,0,0x808080,0,255,(dword)&fname,(dword)&mouse_dd,0};
112
edit_box file_box = {98,9*8-5,WND_H - 16-32,0xffffff,0x6a9480,0,0x808080,0,255,(dword)&fname,(dword)&mouse_dd,0};
124
 
113
 
125
// èçìåíåíèå ðàçìåðîâ
114
// èçìåíåíèå ðàçìåðîâ
126
#define SIZE_X 1 // ñîñòîÿíèå
115
#define SIZE_X 1 // ñîñòîÿíèå
127
#define SIZE_Y 2
116
#define SIZE_Y 2
128
#define SIZE_SELECT 3
117
#define SIZE_SELECT 3
Line 129... Line -...
129
#define SIZE_DRAG 4
-
 
130
int size_mouse_x, size_mouse_y, size_id, size_state = 0;
-
 
131
 
118
#define SIZE_DRAG 4
132
int window_is_dragged = 0; // ñåé÷àñ ïåðåòàñêèâàåòñÿ îêíî
119
int size_mouse_x, size_mouse_y, size_id, size_state = 0;
133
 
120
 
Line 134... Line 121...
134
// ðàñòàñêèâàíèå ÿ÷åéêè ïðè åå òàùåíèè çà ïðàâûé íèæíèé óãîë, ñ çàïîëíåíèåì ÿ÷ååê
121
// ðàñòàñêèâàíèå ÿ÷åéêè ïðè åå òàùåíèè çà ïðàâûé íèæíèé óãîë, ñ çàïîëíåíèåì ÿ÷ååê
Line 135... Line -...
135
int drag_x, drag_y;
-
 
136
int old_end_x, old_end_y;
-
 
137
 
122
int drag_x, drag_y;
138
void draw_window();
123
int old_end_x, old_end_y;
139
 
124
 
140
//edit_box ebox = {250,14,35,0xffffff,0x6f9480,0,0xAABBCC,0,248,0,2,20,20};
125
void draw_window();
141
 
126
 
142
void kos_DrawRegion(Word x, Word y,Word width, Word height, Dword color1, Word invert)
127
void kos_DrawRegion(Word x, Word y,Word width, Word height, Dword color1, Word invert)
143
{
128
{
Line 144... Line 129...
144
	kos_DrawLine(x,y,x+width-2,y,color1,invert);
129
	kos_DrawLine(x,y,x+width-2,y,color1,invert);
-
 
130
	kos_DrawLine(x,y+1,x,y+height-1,color1,invert);
-
 
131
	kos_DrawLine(x+width-1,y,x+width-1,y+height-2,color1,invert);
-
 
132
	kos_DrawLine(x+1,y+height-1,x+width-1,y+height-1,color1,invert);
-
 
133
}
-
 
134
 
-
 
135
void kos_DebugValue(char *str, int n)
-
 
136
{
145
	kos_DrawLine(x,y+1,x,y+height-1,color1,invert);
137
	char debuf[50];
-
 
138
	sprintf(debuf, "%S: %U\n", str, n);
-
 
139
	rtlDebugOutString(debuf);
-
 
140
}
-
 
141
 
-
 
142
void DrawScrolls()
-
 
143
{
-
 
144
	// HOR
-
 
145
	scroll_h.x = 0;
-
 
146
	scroll_h.y = he - SCROLL_SIZE;
-
 
147
	scroll_h.w = cWidth - SCROLL_SIZE;
-
 
148
	scroll_h.all_redraw = true;
-
 
149
	scroll_h.max_area = col_count;
-
 
150
	scroll_h.cur_area = nx-scroll_x-1;
-
 
151
	scroll_h.position = scroll_x-1;
-
 
152
	scrollbar_h_draw((DWORD)&scroll_h);
-
 
153
 
-
 
154
	// VER
-
 
155
	scroll_v.x = cWidth - SCROLL_SIZE - 1;
-
 
156
	scroll_v.y = 0;
-
 
157
	scroll_v.h = he - SCROLL_SIZE;
-
 
158
	scroll_v.all_redraw = true;
-
 
159
	scroll_v.max_area = row_count;
-
 
160
	scroll_v.cur_area = ny-scroll_y-1;
-
 
161
	scroll_v.position = scroll_y-1;
-
 
162
	scrollbar_v_draw((DWORD)&scroll_v);
-
 
163
}
-
 
164
 
-
 
165
void DrawSelectedFrame(int x, int y, int w, int h, DWORD col)
-
 
166
{
Line -... Line 167...
-
 
167
	kos_DrawBar(x,y,w,2,col);          // up
-
 
168
	kos_DrawBar(x,y,2,h,col);          // left
-
 
169
	kos_DrawBar(x,y+h-2,w-2-3,2,col);  // bottom
-
 
170
	kos_DrawBar(x+w-2,y, 2,h-2-3,col); // right
-
 
171
	kos_DrawBar(x+w-4,y+h-4,4,4,col);
-
 
172
}
-
 
173
 
146
	kos_DrawLine(x+width-1,y,x+width-1,y+height-2,color1,invert);
174
void kos_DeleteButton(int id)
147
	kos_DrawLine(x+1,y+height-1,x+width-1,y+height-1,color1,invert);
175
{
148
}
176
	kos_DefineButton(NULL, NULL, NULL, NULL, id+BT_DEL, NULL);
149
 
177
}
150
void start_edit(int x, int y)
178
 
Line 236... Line 264...
236
	if (sx0 != scroll_x || sy0 != scroll_y)
264
	if (sx0 != scroll_x || sy0 != scroll_y)
237
		sel_moved = 0;			// íàäî ïåðåðèñîâàòü âñå
265
		sel_moved = 0;			// íàäî ïåðåðèñîâàòü âñå
Line 238... Line 266...
238
 
266
 
Line 239... Line -...
239
}
-
 
240
 
267
}
241
// ñäâèíóòü âûäåëåíèå
268
 
242
void move_sel(DWORD new_x, DWORD new_y)
269
void move_selection(DWORD new_x, DWORD new_y)
243
{
270
{
244
	sel_moved = 1;
271
	sel_moved = 1;
245
	stop_edit();
272
	stop_edit();
Line 268... Line 295...
268
 
295
 
Line 269... Line 296...
269
	if (blue_border) kos_DrawRegion(x0-1, y0-1, sx+3, sy+3, 0x94aece, 0);
296
	if (blue_border) kos_DrawRegion(x0-1, y0-1, sx+3, sy+3, 0x94aece, 0);
Line 270... Line 297...
270
 
297
 
Line 271... Line 298...
271
	// ñåðûé ïðÿìîóãîëüíèê
298
	// ñåðûé ïðÿìîóãîëüíèê
Line 272... Line 299...
272
 
299
 
273
	kos_DrawBar(x0 + 1, y0 + 1, sx - 1, sy - 1, 0xe4dfe1);
300
	kos_DrawBar(x0 + 1, y0 + 1, sx - 1, sy - 1, PANEL_BG_COLOR);
Line 317... Line 344...
317
#define is_y_changed(v) ((v) == sel_y || (v) == prev_y)
344
#define is_y_changed(v) ((v) == sel_y || (v) == prev_y)
Line 318... Line 345...
318
 
345
 
319
void draw_grid()
346
void draw_grid()
320
{
347
{
321
	int i,j;
348
	int i,j;
322
	long x0 = 0, y0 = 0, x = 0, y = 0, dx, popravka;
349
	long x0 = 0, y0 = 0, x = 0, y = 0, dx;
-
 
350
	DWORD text_color;
323
	DWORD text_color;
351
	DWORD bg_color;
Line 324... Line 352...
324
	//int lx, ly;
352
	//int lx, ly;
325
 
353
 
Line 335... Line 363...
335
		clear_cell_slow(prev_x, prev_y);
363
		clear_cell_slow(prev_x, prev_y);
336
	}
364
	}
337
	else
365
	else
338
	{
366
	{
339
		// î÷èñòèòü âñþ îáëàñòü ÿ÷ååê
367
		// î÷èñòèòü âñþ îáëàñòü ÿ÷ååê
340
		//kos_DrawBar(col_width[0]+1, row_height[0]+1, wi - SCROLL_BAR_WIDTH-col_width[0]-1, he - SCROLL_BAR_HEIGHT-row_height[0]-1, 0xffffff);
368
		//kos_DrawBar(col_width[0]+1, row_height[0]+1, wi - SCROLL_SIZE-col_width[0]-1, he - SCROLL_SIZE-row_height[0]-1, 0xffffff);
341
	}
369
	}
Line 342... Line 370...
342
 
370
 
343
	col_left[0] = 0;
371
	col_left[0] = 0;
344
	// ÿ÷åéêè - çàãîëîâêè ñòîëáöîâ + âåðòèêàëüíûå ëèíèè
372
	// ÿ÷åéêè - çàãîëîâêè ñòîëáöîâ + âåðòèêàëüíûå ëèíèè
Line 348... Line 376...
348
	{
376
	{
349
		col_left[i] = -1;
377
		col_left[i] = -1;
350
		if (i >= scroll_x)
378
		if (i >= scroll_x)
351
		{
379
		{
352
			{				
380
			{				
353
				if (!sel_moved || is_x_changed(i)) 
381
				if (!sel_moved || is_x_changed(i)) {
354
					kos_DrawLine(x-x0, 0, x-x0, row_height[0], GRID_COLOR, 0);
382
					kos_DrawLine(x-x0, 0, x-x0, row_height[0], GRID_COLOR, 0);
-
 
383
				}
355
			// è çàãîëîâîê ÿ÷åéêè ïî õ
384
				// è çàãîëîâîê ÿ÷åéêè ïî õ
356
				text_color = TEXT_COLOR;
385
				text_color = TEXT_COLOR;
357
				dx = (col_width[i]-6)/2;
386
				dx = (col_width[i]-6)/2;
358
				int dy = (row_height[0] - 8) / 2 + 1;
387
				int dy = (row_height[0] - 8) / 2 + 1;
359
				int cur_width = col_width[i] - 1;
388
				int cur_width = col_width[i] - 1;
360
				if (cur_width + x - x0 > wi - SCROLL_BAR_WIDTH)
389
				if (cur_width + x - x0 > wi - SCROLL_SIZE)
361
					cur_width = wi - SCROLL_BAR_WIDTH - x + x0;
390
					cur_width = wi - SCROLL_SIZE - x + x0 -1;
362
				if (!sel_moved || (is_x_changed(i))) 
391
				if (!sel_moved || (is_x_changed(i))) {
363
					if (is_between(i,sel_x,sel_end_x))	
392
					if (is_between(i,sel_x,sel_end_x))	
364
					{
393
					{
365
						kos_DrawBar(x - x0 + 1,0,cur_width,row_height[0],SEL_FIXED_CELL_COLOR); //0x0000CC
394
						bg_color = SEL_FIXED_CELL_COLOR; 
366
						text_color = TEXT_SEL_FIXED_COLOR;
395
						text_color = TEXT_SEL_FIXED_COLOR;
367
					}
396
					}
368
					else
397
					else
369
					{
398
					{
370
						kos_DrawBar(x - x0 + 1,0,cur_width,row_height[0],FIXED_CELL_COLOR);
399
						bg_color = FIXED_CELL_COLOR;
371
						text_color = TEXT_COLOR;
400
						text_color = TEXT_COLOR;
372
					}
401
					}
-
 
402
					kos_DrawBar(x - x0 + 1,0,cur_width,row_height[0],bg_color);
373
				if (!sel_moved || (is_x_changed(i))) kos_WriteTextToWindow(x-x0+2+dx,dy,0,text_color,cells[i][0],strlen(cells[i][0]));
403
					kos_WriteTextToWindow(x-x0+2+dx,dy,0,text_color,cells[i][0],strlen(cells[i][0]));	
374
 
404
				}
375
				// åñòü êíîïêà ñòîáëöà è åùå êíîïêà èçìåíåíèÿ øèðèíû 
405
				// åñòü êíîïêà ñòîáëöà è åùå êíîïêà èçìåíåíèÿ øèðèíû 
376
				if (x - x0 + col_width[i] <= wi - col_width[0])
406
				if (x - x0 + col_width[i] <= wi - col_width[0])
377
				{
407
				{
378
					//kos_DeleteButton(COL_HEAD_BUTTON+i);
408
					kos_DeleteButton(COL_HEAD_BUTTON+i);
379
					kos_DefineButton(x-x0+5,0,cur_width - 10,row_height[0]-1,0x60000000+COL_HEAD_BUTTON+i,0);
409
					kos_DefineButton(x-x0+5,0,cur_width - 10,row_height[0]-1,BT_NODRAW+COL_HEAD_BUTTON+i,0);
380
				}
410
				}
381
				//kos_DefineButton(x-x0+col_width[i]-10,0,15,row_height[0]-1,0x60000000+COL_SIZE_BUTTON+i,0);
411
				//kos_DefineButton(x-x0+col_width[i]-10,0,15,row_height[0]-1,BT_NODRAW+COL_SIZE_BUTTON+i,0);
382
				col_left[i] = x - x0;
412
				col_left[i] = x - x0;
383
			}
413
			}
384
			if (x - x0 > wi - col_width[0])
414
			if (x - x0 > wi - col_width[0])
385
			{
415
			{
386
				x += col_width[i];
416
				x += col_width[i];
Line 404... Line 434...
404
 
434
 
405
	// ÿ÷åéêè - çàãîëîâêè ñòðîê + ãîðèçîíò. ëèíèè
435
	// ÿ÷åéêè - çàãîëîâêè ñòðîê + ãîðèçîíò. ëèíèè
406
	y = row_height[0];
436
	y = row_height[0];
407
	ny = 1;
437
	ny = 1;
408
	row_top[0] = 0;
438
	row_top[0] = 0;
409
	for (i = 1; i < row_count && y - y0 < he - 10; i++)
439
	for (i = 1; i < row_count && y - y0 < he - SCROLL_SIZE; i++)
410
	{
440
	{
411
		row_top[i] = -1;
441
		row_top[i] = -1;
412
		if (i >= scroll_y)
442
		if (i >= scroll_y)
413
		{
443
		{
414
			{
444
			{
415
				if (!sel_moved || (is_y_changed(i))) 
445
				if (!sel_moved || (is_y_changed(i))) 
416
					kos_DrawLine(0, y - y0, wi - SCROLL_BAR_WIDTH, y - y0, GRID_COLOR, 0);
446
					kos_DrawLine(0, y - y0, wi - SCROLL_SIZE - 1, y - y0, GRID_COLOR, 0);
417
				// è çàãîëîâîê ÿ÷åéêè ïî y
447
				// è çàãîëîâîê ÿ÷åéêè ïî y
418
				text_color = TEXT_COLOR;
448
				text_color = TEXT_COLOR;
419
				dx = (col_width[0]-6 * strlen(cells[0][i]))/2;	// optimize this, change strlen
449
				dx = (col_width[0]-6 * strlen(cells[0][i]))/2;	// optimize this, change strlen
420
				int dy = (row_height[i] - 8) / 2 + 1;
450
				int dy = (row_height[i] - 8) / 2 + 1;
Line 431... Line 461...
431
					}
461
					}
Line 432... Line 462...
432
 
462
 
433
				if (!sel_moved || (is_y_changed(i)))
463
				if (!sel_moved || (is_y_changed(i)))
Line 434... Line -...
434
					kos_WriteTextToWindow(2+dx,y-y0+dy,0,text_color,cells[0][i],strlen(cells[0][i]));
-
 
-
 
464
					kos_WriteTextToWindow(2+dx,y-y0+dy,0,text_color,cells[0][i],strlen(cells[0][i]));
435
 
465
 
436
				
466
				kos_DeleteButton(ROW_HEAD_BUTTON+i);
437
				kos_DefineButton(0,y-y0+5,col_width[0]-1,row_height[i]-6,0x60000000+ROW_HEAD_BUTTON+i,0);
467
				kos_DefineButton(0,y-y0+5,col_width[0]-1,row_height[i]-6,BT_NODRAW+ROW_HEAD_BUTTON+i,0);
438
				//kos_DefineButton(0,y-y0+row_height[i]-5,col_width[0]-1,10,0x60000000+ROW_SIZE_BUTTON+i,0);
468
				//kos_DefineButton(0,y-y0+row_height[i]-5,col_width[0]-1,10,BT_NODRAW+ROW_SIZE_BUTTON+i,0);
439
				row_top[i] = y - y0;
469
				row_top[i] = y - y0;
440
			}
470
			}
441
		}
471
		}
Line 450... Line 480...
450
	kos_DefineButton(0,0,0,0,0x80000000+ROW_HEAD_BUTTON+ny-1,0);
480
	kos_DefineButton(0,0,0,0,0x80000000+ROW_HEAD_BUTTON+ny-1,0);
Line 451... Line 481...
451
 
481
 
452
	for (j = i + 1; j < row_count; j++)
482
	for (j = i + 1; j < row_count; j++)
453
		row_top[j] = he;
483
		row_top[j] = he;
454
	if (!sel_moved || (is_y_changed(ny))) 
484
	if (!sel_moved || (is_y_changed(ny))) 
Line 455... Line 485...
455
		kos_DrawLine(0, y - y0, wi - SCROLL_BAR_WIDTH, y - y0, GRID_COLOR, 0);
485
		kos_DrawLine(0, y - y0, wi - SCROLL_SIZE, y - y0, GRID_COLOR, 0);
456
 
486
 
457
	if (!sel_moved || (is_x_changed(0) && is_y_changed(0)))
487
	if (!sel_moved || (is_x_changed(0) && is_y_changed(0)))
Line 458... Line 488...
458
		kos_DrawBar(0,0,col_width[0],row_height[0],FIXED_CELL_COLOR); 
488
		kos_DrawBar(0,0,col_width[0],row_height[0],FIXED_CELL_COLOR); 
459
	// Ë ÿ÷åéêà
489
	// Ë ÿ÷åéêà
Line 460... Line -...
460
 
-
 
461
	//sprintf(debuf, "%U, %U; %U, %U", x0, y0, nx, ny);
-
 
462
	//rtlDebugOutString(debuf);
-
 
463
 
-
 
464
//	popravka = (y - y0 < he - 10);
-
 
465
	//sprintf(debuf, "%U, %U", scroll_y, ny);
490
 
Line 466... Line 491...
466
	//rtlDebugOutString(debuf);
491
	//sprintf(debuf, "%U, %U; %U, %U", x0, y0, nx, ny);
467
 
492
	//rtlDebugOutString(debuf);
468
	
493
 
469
	// ñàìè ÿ÷åéêè
494
	// ñàìè ÿ÷åéêè
470
 
495
 
471
	y = row_height[0];
496
	y = row_height[0];
472
	for (i = scroll_y; i < ny; i++)
497
	for (i = scroll_y; i < ny; i++)
473
	{
498
	{
474
		x = col_width[0];
499
		x = col_width[0];
475
		if (!sel_moved)
500
		if (!sel_moved)
Line 489... Line 514...
489
				if (is_between(j,sel_x,sel_end_x) && is_between(i, sel_y, sel_end_y)	// (j,i) - âûäåëåíà
514
				if (is_between(j,sel_x,sel_end_x) && is_between(i, sel_y, sel_end_y)	// (j,i) - âûäåëåíà
490
					&& ((!sel_moved) || (is_x_changed(j) && is_y_changed(i))))			// è åå íóæíî íàðèñîâàòü
515
				&& ((!sel_moved) || (is_x_changed(j) && is_y_changed(i))))			// è åå íóæíî íàðèñîâàòü
491
				{
516
				{
492
					if (i == sel_y && j == sel_x)		// ðàìêà
517
					if (i == sel_y && j == sel_x) // ðàìêà
493
					{
518
					{
494
						kos_DrawBar(x,y,col_width[j],2,TEXT_COLOR);	// up
-
 
495
						kos_DrawBar(x,y,2,row_height[i],TEXT_COLOR);	// left
-
 
496
						kos_DrawBar(x,y+row_height[i]-2,col_width[j]-2-3,2,TEXT_COLOR);				// bottom
-
 
497
						kos_DrawBar(x+col_width[j]-2,y, 2,row_height[i]-2-3,TEXT_COLOR);				// right
-
 
498
 
-
 
499
						kos_DrawBar(x+col_width[j]-4,y+row_height[i]-4,4,4,TEXT_COLOR);
519
						DrawSelectedFrame(x+1,y, col_width[j]-1, row_height[j], TEXT_COLOR);
500
						//kos_DefineButton(x+col_width[j]-2,y+row_height[i]-2,4,4,0x60000000+DRAG_BUTTON,0x000000);
-
 
501
						drag_x = x + col_width[j] - 4;
520
						drag_x = x + col_width[j] - 4;
502
						drag_y = y + row_height[i] - 4;
521
						drag_y = y + row_height[i] - 4;
503
					}
522
					}
504
					else
523
					else
505
						kos_DrawBar(x + 1,y + 1,col_width[j] - 2,row_height[i] - 2,SEL_CELL_COLOR);	//	âûäåëåíà íî íå îñíîâíàÿ(ñåðàÿ)
524
						kos_DrawBar(x + 1,y + 1,col_width[j] - 2,row_height[i] - 2,SEL_CELL_COLOR);	//	âûäåëåíà íî íå îñíîâíàÿ(ñåðàÿ)
Line 506... Line 525...
506
 
525
 
507
				}
526
				}
Line 508... Line 527...
508
				//kos_DefineButton(x,y,col_width[j]-1,row_height[i]-1,0x60000000+CELL_BUTTON+((i << 8) + j),0);
527
				//kos_DefineButton(x,y,col_width[j]-1,row_height[i]-1,BT_NODRAW+CELL_BUTTON+((i << 8) + j),0);
509
 
528
 
510
				char *text;
529
				char *text;
511
				if (values[j][i] && values[j][i][0] == '#')
530
				if (values[j][i] && values[j][i][0] == '#')
Line 530... Line 549...
530
			x += col_width[j];
549
			x += col_width[j];
531
		} 
550
		} 
532
		y += row_height[i];
551
		y += row_height[i];
533
	}
552
	}
Line 534... Line 553...
534
 
553
 
535
	// Scrolls: 
-
 
536
	// horizontal
-
 
537
 
-
 
538
	//if (!sel_moved) kos_DrawBar(0, he - SCROLL_BAR_HEIGHT, wi - SCROLL_BAR_WIDTH, SCROLL_BAR_HEIGHT, FIXED_CELL_COLOR);
-
 
539
	//if (!sel_moved) kos_DrawBar(scroll_x * wi / col_count, he - SCROLL_BAR_HEIGHT, wi / col_count, SCROLL_BAR_HEIGHT, SEL_FIXED_CELL_COLOR);
-
 
540
	if (!sel_moved)
-
 
541
	{
-
 
542
		// ãîðèçîíòàëü
-
 
543
		kos_DrawBar(17, he - SCROLL_BAR_HEIGHT, wi - SCROLL_BAR_WIDTH - 32, SCROLL_BAR_HEIGHT, 0xced0d0);
-
 
544
		// ñèíèå ëèíèè
-
 
545
		kos_DrawRegion(0, he - SCROLL_BAR_HEIGHT, wi - SCROLL_BAR_WIDTH, SCROLL_BAR_HEIGHT+1, 0x94aece, 0);
-
 
546
		// ëåâàÿ êíîïêà
-
 
547
		draw_custom_button(1, he - SCROLL_BAR_HEIGHT + 1, 14, 14, 1);
-
 
548
		kos_WriteTextToWindow(6, he - SCROLL_BAR_HEIGHT + 5, 0, 0, "\x1B", 1);
-
 
549
		// ïðàâàÿ
-
 
550
		draw_custom_button(wi - SCROLL_BAR_WIDTH * 2 + 1, he - SCROLL_BAR_HEIGHT + 1, 14, 14, 1);
-
 
551
		kos_WriteTextToWindow(wi - SCROLL_BAR_WIDTH * 2 + 6, he - SCROLL_BAR_HEIGHT + 5, 0, 0, "\x1A", 1);
-
 
552
		// ïîëçóíîê
-
 
553
		int tmp_w = (nx - scroll_x) * (wi - SCROLL_BAR_WIDTH - 2 * 14 - 14) / (col_count + 1);
-
 
554
		if (tmp_w < 16)
-
 
555
			tmp_w = 16;
-
 
556
		draw_custom_button(17 + (scroll_x - 1) * (wi - SCROLL_BAR_WIDTH - 2 * 14 - 14) / (col_count + 1), he - SCROLL_BAR_HEIGHT + 1, 
-
 
557
			tmp_w, 14, 1);
-
 
558
 
-
 
559
#define sw(x,y) y,x
-
 
560
// íå ïèíàéòå ìåíÿ çà ýòî, áûëî ëåíü ïåðåñòàâëÿòü ðóêàìè...
-
 
561
 
-
 
562
		// âåðòèêàëü
-
 
563
		kos_DrawBar(sw(17, wi - SCROLL_BAR_WIDTH), sw(he - SCROLL_BAR_HEIGHT - 33, SCROLL_BAR_WIDTH), 0xced0d0);
-
 
564
		// ñèíèå ëèíèè
-
 
565
		kos_DrawRegion(sw(0, wi - SCROLL_BAR_WIDTH), sw(he - SCROLL_BAR_HEIGHT, SCROLL_BAR_WIDTH+1), 0x94aece, 0); // up
-
 
566
 
-
 
567
		// âåðõíÿÿ êíîïêà
-
 
568
		draw_custom_button(sw(1, wi - SCROLL_BAR_WIDTH + 1), 14, 14, 1);
-
 
569
		kos_WriteTextToWindow(sw(5, wi - SCROLL_BAR_WIDTH + 6), 0, 0, "\x18", 1);
-
 
570
		// íèæíÿÿ
-
 
571
		draw_custom_button(sw(he - SCROLL_BAR_HEIGHT * 2 + 1, wi - SCROLL_BAR_WIDTH + 1), 14, 14, 1);
-
 
572
		//draw_custom_button(sw(he - SCROLL_BAR_HEIGHT * 2 + 1, wi - SCROLL_BAR_WIDTH + 1), 14, 14, 1);
-
 
573
		kos_WriteTextToWindow(sw(he - SCROLL_BAR_HEIGHT * 2 + 5, wi - SCROLL_BAR_WIDTH + 6), 0, 0, "\x19", 1);
-
 
574
		// ïîëçóíîê
-
 
575
		int tmp_h = (ny - scroll_y) * (he - SCROLL_BAR_HEIGHT - 2 * 14 - 14) / (row_count + 1);
-
 
576
		if (tmp_h < 16)
-
 
577
			tmp_h = 16;
-
 
578
		draw_custom_button(sw(17 + (scroll_y - 1) * (he - SCROLL_BAR_HEIGHT - 2 * 14 - 14) / (row_count + 1), wi - SCROLL_BAR_WIDTH + 1), 
-
 
579
			sw(tmp_h, 14), 1);
-
 
580
	}
-
 
581
#define NO_DRAW 0x60000000
-
 
582
	kos_DefineButton(1, he - SCROLL_BAR_HEIGHT + 1, 14, 14, NO_DRAW + SCROLL_LEFT_BUTTON,0);
-
 
583
	kos_DefineButton(wi - SCROLL_BAR_WIDTH * 2 + 2, he - SCROLL_BAR_HEIGHT + 1, 14, 14, NO_DRAW + SCROLL_RIGHT_BUTTON,0);
-
 
584
	kos_DefineButton(17, he - SCROLL_BAR_HEIGHT + 1,  (wi - SCROLL_BAR_WIDTH - 2 * 14), 14, NO_DRAW + SCROLL_WIDTH,0);
-
 
585
 
-
 
586
	kos_DefineButton(sw(1, wi - SCROLL_BAR_WIDTH + 1), 14, 14, NO_DRAW + SCROLL_UP_BUTTON,0);
-
 
587
	kos_DefineButton(sw(he - SCROLL_BAR_HEIGHT * 2 + 2, wi - SCROLL_BAR_WIDTH + 1), 14, 14, NO_DRAW + SCROLL_DOWN_BUTTON,0);
-
 
588
	kos_DefineButton(sw(17, wi - SCROLL_BAR_WIDTH + 1),  sw((he - SCROLL_BAR_HEIGHT - 2 * 14), 14), NO_DRAW + SCROLL_HEIGHT,0);
-
 
589
 
554
	DrawScrolls();
Line 590... Line 555...
590
}
555
}
591
 
556
 
592
// î÷åíü áûñòðîå ðèñîâàíèå ñåòêè, â ïðîöåññå èçìåíåíèÿ ðàçìåðîâ ÿ÷ååê
557
// î÷åíü áûñòðîå ðèñîâàíèå ñåòêè, â ïðîöåññå èçìåíåíèÿ ðàçìåðîâ ÿ÷ååê
Line 667... Line 632...
667
	kos_DrawLine(x0, y1, x1, y1, DCOLOR, DINVERT);
632
	kos_DrawLine(x0, y1, x1, y1, DCOLOR, DINVERT);
668
}
633
}
Line 669... Line 634...
669
 
634
 
670
void draw_window()
635
void draw_window()
671
{
-
 
672
	double xx0=0.0, yy0=0.0;
-
 
673
	sProcessInfo info;
-
 
Line 674... Line 636...
674
	void *p;
636
{
675
 
637
 
Line 676... Line -...
676
	if (sel_end_move)
-
 
677
		sel_moved = 0;
-
 
678
 
-
 
679
	memset((Byte*)&info, 0, 1024);
-
 
680
 
-
 
681
	kos_ProcessInfo(&info, 0xFFFFFFFF);
-
 
682
	p = info.rawData + 42;			// magic
-
 
683
	wi = *(Dword *)(p);
-
 
684
	he = *(Dword *)((Byte *)p + 4);
-
 
685
	win_x = *(Dword *)((Byte *)p - 8);
-
 
686
	win_y = *(Dword *)((Byte *)p - 4);
-
 
687
 
-
 
688
	myPID = *(Dword*)((Byte *)p - 12);
-
 
689
 
-
 
690
	if (wi == 0) 
-
 
691
		wi = WND_W;
-
 
692
	if (he == 0)
-
 
693
		he = WND_H;
-
 
694
 
-
 
695
	he -= kos_GetSkinHeight() + MENU_PANEL_HEIGHT; // äîñòóïíàÿ âûñîòà îêíà
638
	if (sel_end_move)
696
	wi -= 10;
639
		sel_moved = 0;
697
 
640
 
698
	if (window_drawall==true){
641
	if (window_drawall==true){
Line -... Line 642...
-
 
642
		kos_WindowRedrawStatus(1);
-
 
643
		kos_DefineAndDrawWindow(110,40,WND_W,WND_H,0x73,0x40FFFFFF,0,0,(Dword)"Table v" TABLE_VERSION);
-
 
644
		kos_WindowRedrawStatus(2); 
-
 
645
 
-
 
646
		sProcessInfo info;
-
 
647
		kos_ProcessInfo(&info, 0xFFFFFFFF);
-
 
648
		wi = info.processInfo.width - 9 - 1;
-
 
649
		he = info.processInfo.height - kos_GetSkinHeight() - MENU_PANEL_HEIGHT;
699
		kos_WindowRedrawStatus(1);
650
 
Line 700... Line 651...
700
		kos_DefineAndDrawWindow(10,40,WND_W,WND_H,0x73,0x40FFFFFF,0,0,(Dword)"Table v" TABLE_VERSION);
651
		cWidth = info.processInfo.width - 9;
701
		kos_WindowRedrawStatus(2); 
652
		cHeight = info.processInfo.height - kos_GetSkinHeight() - 4;
Line 702... Line 653...
702
 
653
 
Line 703... Line -...
703
		if (info.rawData[70]&0x04) return; //íè÷åãî íå äåëàòü åñëè îêíî ñõëîïíóòî â çàãîëîâîê
-
 
704
 
654
		if (info.processInfo.status_window&0x04) return; //draw nothing if window rolled-up
Line 705... Line 655...
705
		if (he < 100) kos_ChangeWindow( -1, -1, -1, 180 );
655
 
706
		if (wi < 340) kos_ChangeWindow( -1, -1, 350, -1 );
656
		if (he < 100) kos_ChangeWindow( -1, -1, -1, 180 );
707
 
657
		if (wi < 340) kos_ChangeWindow( -1, -1, 350, -1 );
708
	}
658
 
709
 
659
	}
710
//	edit_box_draw((dword)&ebox);
660
 
Line 711... Line -...
711
	int y = he + kos_GetSkinHeight() - 10;
-
 
712
 
-
 
713
	if (!sel_moved)
-
 
714
	{
-
 
715
		kos_DrawBar(wi-15,he - kos_GetSkinHeight() +7,16,16,0xe4dfe1);
-
 
716
		kos_DrawBar(0,he - kos_GetSkinHeight() + 23,wi + 1,MENU_PANEL_HEIGHT-5,0xe4dfe1);
-
 
717
		kos_WriteTextToWindow(3 + 1, y + 3, 0x80 , 0x000000, (char*)sFilename, strlen(sFilename));	
-
 
718
	}
661
	panel_y = cHeight - MENU_PANEL_HEIGHT;
719
 
-
 
720
	//DWORD fn_line_color = fn_edit ? 0x000000 : 0xc0c0c0;
-
 
Line 721... Line 662...
721
	//kos_DrawRegion(61, y - 2, 102, 18, fn_line_color, 0);
662
 
722
 
663
	if (!sel_moved)
723
	// äàëüøå editbox width = 100
664
	{
Line 724... Line 665...
724
 
665
		kos_DrawBar(cWidth-SCROLL_SIZE, panel_y - SCROLL_SIZE, SCROLL_SIZE, SCROLL_SIZE, PANEL_BG_COLOR);
725
	// border around edit box
666
		kos_DrawBar(0, panel_y, cWidth, MENU_PANEL_HEIGHT, PANEL_BG_COLOR);
726
	file_box.left = 64;
667
		kos_WriteTextToWindow(3 + 1, panel_y + 16, 0x80, 0x000000, (char*)sFilename, 0);	
Line 727... Line 668...
727
	file_box.top = y - 1;
668
	}
728
	file_box.width = 98;
669
 
729
	//editbox_h = 18;
670
	file_box.top = panel_y + 12;
730
 
671
 
731
	// ñîõðàíèòü
672
	// ñîõðàíèòü
732
	kos_DefineButton(20 + 160, y - 5, 60, 20, SAVE_BUTTON, 0xd0d0d0);
-
 
Line 733... Line 673...
733
	kos_WriteTextToWindow(22 + 160 + (60 - strlen(sSave) * 6) / 2, y + 2, 0x80, 0x000000, (char*)sSave, 0);
673
	kos_DefineButton(20 + 160, panel_y + 9, 60, 20, SAVE_BUTTON, 0xd0d0d0);
734
 
674
	kos_WriteTextToWindow(22 + 160 + (60 - strlen(sSave) * 6) / 2, panel_y + 16, 0x80, 0x000000, (char*)sSave, 0);
735
	// çàãðóçèòü
675
 
736
	kos_DefineButton(90 + 160, y - 5, 60, 20, LOAD_BUTTON, 0xd0d0d0);
676
	// çàãðóçèòü
Line 753... Line 693...
753
	draw_grid();
693
	draw_grid();
754
	window_drawall=false;
694
	window_drawall=false;
755
	sel_moved = 0;
695
	sel_moved = 0;
756
}
696
}
Line 757... Line -...
757
 
-
 
758
 
697
 
759
void process_mouse()
698
void process_mouse()
760
{
699
{
761
	Dword mouse_btn, ckeys, shift, ctrl;
700
	Dword mouse_btn, ckeys, shift, ctrl;
762
	int mouse_x, mouse_y, i, dx = 0, dy = 0;
701
	int mouse_x, mouse_y, i, dx = 0, dy = 0;
Line 763... Line -...
763
	int redraw = 0;
-
 
764
	
-
 
765
	Dword mySlot = kos_GetSlotByPID(myPID);
-
 
766
	if (kos_GetActiveSlot() != mySlot)
-
 
767
		return;
702
	int redraw = 0;
768
 
703
	
Line 769... Line 704...
769
	edit_box_mouse((dword)&cell_box);
704
	edit_box_mouse((dword)&cell_box);
770
	edit_box_mouse((dword)&file_box);
705
	edit_box_mouse((dword)&file_box);
Line 771... Line 706...
771
 
706
 
772
	int vert, hor;
707
	int vert, hor;
Line 773... Line -...
773
	kos_GetScrollInfo(vert, hor);
-
 
774
 
708
	kos_GetScrollInfo(vert, hor);
775
	//sprintf(debuf, "scroll %U %U", vert, hor);
709
 
-
 
710
	//sprintf(debuf, "scroll %U %U", vert, hor);
-
 
711
	//rtlDebugOutString(debuf);
-
 
712
		
776
	//rtlDebugOutString(debuf);
713
	if (vert != 0)
777
 
714
	{
778
		
715
		stop_edit();
779
	if (vert != 0) //òðóú ïåðåðèñîâêà!
716
		scroll_y += vert;
Line -... Line 717...
-
 
717
		if (scroll_y<1) scroll_y=1;
-
 
718
		if (scroll_y>row_count-25) scroll_y=row_count-25;
-
 
719
		draw_grid();
-
 
720
		return;
-
 
721
	}
-
 
722
 
-
 
723
	scrollbar_v_mouse((DWORD)&scroll_v);
-
 
724
	if (scroll_v.position != scroll_y-1)
-
 
725
	{
-
 
726
		scroll_y = scroll_v.position + 1;
-
 
727
		draw_grid();
-
 
728
	}
-
 
729
 
-
 
730
	scrollbar_h_mouse((DWORD)&scroll_h);
780
	{
731
	if (scroll_h.position != scroll_x-1)
781
		if (!((sel_end_y + vert) >= (row_count-1))) //çàãëóøêà
732
	{
782
		move_sel(sel_x, sel_y + vert);
733
		scroll_x = scroll_h.position + 1;
Line 783... Line 734...
783
		return;
734
		draw_grid();
Line 784... Line 735...
784
	}
735
	}
785
	
736
 
Line 786... Line -...
786
	kos_GetMouseState(mouse_btn, mouse_x, mouse_y);
-
 
787
	mouse_x -= 5;
-
 
788
	mouse_y -= kos_GetSkinHeight();
-
 
789
 
-
 
790
	mouse_btn &= 0x0001;
-
 
791
 
-
 
792
	ckeys = kos_GetSpecialKeyState();
-
 
793
	shift = ckeys & 0x3;
-
 
794
 
-
 
795
 
-
 
796
	if (mouse_y < 0 && mouse_btn)	// ò.ê. ìûøêà íà çàãîëîâêå îêíà
-
 
797
	{
-
 
798
		window_is_dragged = 1;
-
 
799
		return;
-
 
800
	}
737
	kos_GetMouseState(mouse_btn, mouse_x, mouse_y);
801
	if (window_is_dragged)
738
	mouse_x -= 5;
802
	{
739
	mouse_y -= kos_GetSkinHeight();
803
		if (mouse_btn)
740
 
804
			return;
741
	mouse_btn &= 0x0001;
Line 871... Line 808...
871
			}
808
			}
872
			if (kx != -1 && ky != -1)
809
			if (kx != -1 && ky != -1)
873
			{
810
			{
874
				if (!shift) 
811
				if (!shift) 
875
				{
812
				{
876
					move_sel(kx, ky);
813
					move_selection(kx, ky);
877
					//return;
814
					//return;
878
				}
815
				}
879
				else
816
				else
880
				{
817
				{
881
					sel_end_x = kx;
818
					sel_end_x = kx;
Line 1026... Line 963...
1026
			break;
963
			break;
1027
		*/
964
		*/
1028
		case 180: //home
965
		case 180: //home
1029
			dx = -sel_x + 1;
966
			dx = -sel_x + 1;
1030
			dy = 0;
967
			dy = 0;
1031
			draw_grid(); //draw_window(); 
968
			draw_grid();
1032
			break;
969
			break;
1033
		case 181: //end
970
		case 181: //end
1034
			dx = col_count - (nx - scroll_x) - 1 - sel_x;
971
			dx = col_count - (nx - scroll_x) - 1 - sel_x;
1035
			dy = 0;
972
			dy = 0;
1036
			draw_grid(); //draw_window();
973
			draw_grid();
1037
			break;
974
			break;
1038
		case 27:		// escape
975
		case 27:		// escape
1039
			cancel_edit();
976
			cancel_edit();
1040
			break;
977
			break;
1041
		case 182:			// delete
978
		case 182:			// delete
Line 1068... Line 1005...
1068
			break;
1005
			break;
1069
		case 22:	// contol-v
1006
		case 22:	// contol-v
1070
			{
1007
			{
1071
				if (ctrl)
1008
				if (ctrl)
1072
				{
1009
				{
1073
					//rtlDebugOutString("control-v!");
-
 
1074
					int i, j, x0, y0;
1010
					int i, j, x0, y0;
1075
					x0 = min(sel_x, sel_end_x);
1011
					x0 = min(sel_x, sel_end_x);
1076
					y0 = min(sel_y, sel_end_y);
1012
					y0 = min(sel_y, sel_end_y);
1077
					int delta_x = x0 - buf_old_x;
1013
					int delta_x = x0 - buf_old_x;
1078
					int delta_y = y0 - buf_old_y;
1014
					int delta_y = y0 - buf_old_y;
Line 1096... Line 1032...
1096
							else
1032
							else
1097
								cells[i + x0][j + y0] = NULL;
1033
								cells[i + x0][j + y0] = NULL;
1098
						}
1034
						}
Line 1099... Line 1035...
1099
 
1035
 
1100
					calculate_values();
1036
					calculate_values();
1101
					draw_window();
1037
					draw_grid();
1102
					break;
1038
					break;
1103
				}
1039
				}
1104
			}
1040
			}
1105
			case 24:	// control-x
1041
			case 24:	// control-x
Line 1145... Line 1081...
1145
								buffer[i][j] = NULL;
1081
								buffer[i][j] = NULL;
1146
						}
1082
						}
1147
					}
1083
					}
1148
					if (keyCode == 24) 
1084
					if (keyCode == 24) 
1149
						calculate_values();
1085
						calculate_values();
1150
					draw_window();
1086
					draw_grid();
1151
					break;
1087
					break;
1152
				}
1088
				}
1153
			}
1089
			}
1154
		case 06:		// control-f
1090
		case 06:		// control-f
1155
			{
1091
			{
1156
				display_formulas = !display_formulas;
1092
				display_formulas = !display_formulas;
1157
				draw_grid(); //draw_window();
1093
				draw_grid();
1158
				break;
1094
				break;
1159
			}
1095
			}
1160
		default:
1096
		default:		
1161
			
-
 
1162
			if (!is_edit && !(file_box.flags & ed_focus))
1097
			if (!is_edit && !(file_box.flags & ed_focus))
1163
			{
1098
			{
1164
				start_edit(sel_x, sel_y);
1099
				start_edit(sel_x, sel_y);
1165
				if (keyCode == 8)
1100
				if (keyCode == 8)
1166
				{
1101
				{
Line 1229... Line 1164...
1229
		if (!shift)
1164
		if (!shift)
1230
		{
1165
		{
1231
			if ((sel_end_x + dx) >= (col_count-1)) {dx=0;} //çàãëóøêà
1166
			if ((sel_end_x + dx) >= (col_count-1)) {dx=0;} //çàãëóøêà
1232
			else if ((sel_end_y + dy) >= (row_count-1)) {dy=0;}
1167
			else if ((sel_end_y + dy) >= (row_count-1)) {dy=0;}
1233
			else {
1168
			else {
1234
			move_sel(sel_x + dx, sel_y + dy);
1169
			move_selection(sel_x + dx, sel_y + dy);
1235
			}
1170
			}
1236
		}
1171
		}
1237
		else
1172
		else
1238
		{
1173
		{
1239
			sel_moved = 0;
1174
			sel_moved = 0;
Line 1249... Line 1184...
1249
	Dword mouse_btn, ckeys, shift, ctrl;
1184
	Dword mouse_btn, ckeys, shift, ctrl;
1250
	int mouse_x, mouse_y, i, p, dx = 0, dy = 0;
1185
	int mouse_x, mouse_y, i, p, dx = 0, dy = 0;
1251
	int redraw = 0;
1186
	int redraw = 0;
Line 1252... Line 1187...
1252
 
1187
 
1253
	Dword button;
1188
	Dword button;
Line 1254... Line -...
1254
	kos_GetButtonID(button);
-
 
1255
 
1189
	if (!kos_GetButtonID(button)) return;
1256
	/*
1190
 
1257
	sprintf(debuf, "button %U", button);
-
 
Line 1258... Line 1191...
1258
	rtlDebugOutString(debuf);
1191
	// sprintf(debuf, "button %U", button);
1259
	//*/
1192
	// rtlDebugOutString(debuf);
1260
 
1193
 
1261
	switch (button)
1194
	switch (button)
Line 1262... Line -...
1262
	{
-
 
1263
	case 1:
-
 
1264
		kos_ExitApp();
-
 
1265
 
-
 
1266
	case SCROLL_LEFT_BUTTON:
-
 
1267
		//rtlDebugOutString("scroll left btn");
-
 
1268
		stop_edit();
-
 
1269
		scroll_x--;
-
 
1270
		if (scroll_x <= 0)
-
 
1271
			scroll_x = 1;
-
 
1272
		sel_moved = 0;
-
 
1273
		/*if (sel_x > nx - 1)
-
 
1274
		{
-
 
1275
			nx - 1;
-
 
1276
			sel_end_x = sel_x;
-
 
1277
		}*/
-
 
1278
		draw_window();
-
 
1279
		return;
-
 
1280
 
-
 
1281
	case SCROLL_RIGHT_BUTTON:
-
 
1282
		//rtlDebugOutString("scroll right btn");
-
 
1283
		stop_edit();
-
 
1284
		scroll_x++;
-
 
1285
		if (scroll_x >= col_count - 1)
-
 
1286
			scroll_x = col_count - 1;
-
 
1287
		sel_moved = 0;/*
-
 
1288
		if (sel_x < scroll_x)
-
 
1289
		{
-
 
1290
			sel_x = scroll_x;
-
 
1291
			sel_end_x = sel_x;
-
 
1292
		}*/
-
 
1293
		draw_window();
-
 
1294
		return;
-
 
1295
 
-
 
1296
	case SCROLL_WIDTH:
-
 
1297
		{
-
 
1298
			//rtlDebugOutString("scroll width btn");
-
 
1299
			stop_edit();
-
 
1300
			kos_GetMouseState(mouse_btn, mouse_x, mouse_y);
-
 
1301
			mouse_x -= 5;
-
 
1302
			mouse_y -= kos_GetSkinHeight();
-
 
1303
 
-
 
1304
			// âñåãî: wi - SCROLL_BAR_WIDTH - 2 * 14
-
 
1305
 
-
 
1306
			int tmp_w = (nx - scroll_x) * (wi - SCROLL_BAR_WIDTH - 3 * 14) / (col_count + 1);
-
 
1307
			if (tmp_w < 16)
-
 
1308
				tmp_w = 16;
-
 
1309
			scroll_x = (mouse_x - 14 - tmp_w / 2) * (col_count + 1) / (wi - SCROLL_BAR_WIDTH - 3 * 14) + 1;
-
 
1310
			if (scroll_x <= 0)
-
 
1311
				scroll_x = 1;
-
 
1312
			else if (scroll_x >= col_count - 1)
-
 
1313
				scroll_x = col_count - 1;
-
 
1314
			sel_moved = 0;
-
 
1315
			draw_window();
-
 
1316
			return;
-
 
1317
		}
-
 
1318
 
-
 
1319
	case SCROLL_UP_BUTTON:
-
 
1320
		stop_edit();
-
 
1321
		scroll_y--;
-
 
1322
		if (scroll_y <= 0)
-
 
1323
			scroll_y = 1;
-
 
1324
		sel_moved = 0;
-
 
1325
		//draw_window();
-
 
1326
		draw_grid();
-
 
1327
		/*
-
 
1328
		if (sel_y > ny - 1)
-
 
1329
		{
-
 
1330
			sel_y = ny - 1;
-
 
1331
			sel_end_y = sel_y;
-
 
1332
		}*/
-
 
1333
		return;
-
 
1334
 
-
 
1335
	case SCROLL_DOWN_BUTTON:
-
 
1336
		stop_edit();
-
 
1337
		scroll_y++;
-
 
1338
		if (scroll_y >= row_count - 1)
-
 
1339
			scroll_y = row_count - 1;
-
 
1340
		sel_moved = 0;/*
-
 
1341
		if (sel_y < scroll_y)
-
 
1342
		{
-
 
1343
			sel_y = scroll_y;
-
 
1344
			sel_end_y = sel_y;
-
 
1345
		}*/
-
 
1346
		draw_grid();
-
 
1347
		return;
-
 
1348
 
-
 
1349
	case SCROLL_HEIGHT:
-
 
1350
		{
-
 
1351
			stop_edit();
-
 
1352
			kos_GetMouseState(mouse_btn, mouse_x, mouse_y);
-
 
1353
			mouse_x -= 5;
-
 
1354
			mouse_y -= kos_GetSkinHeight();
-
 
1355
			int tmp_h = (ny - scroll_y) * (he - SCROLL_BAR_HEIGHT - 2 * 14) / row_count;
-
 
1356
			if (tmp_h < 16)
-
 
1357
				tmp_h = 16;
-
 
1358
			scroll_y = (mouse_y - 2 * 14) * (row_count + 1) / (he - SCROLL_BAR_HEIGHT - 3 * 14) + 1;
-
 
1359
			if (scroll_y <= 0)
-
 
1360
				scroll_y = 1;
-
 
1361
			else if (scroll_y >= row_count - 1)
-
 
1362
				scroll_y = row_count - 1;
-
 
1363
			sel_moved = 0;
-
 
1364
			draw_grid();
1195
	{
1365
			return;
1196
	case 1:
1366
		}
1197
		kos_ExitApp();
1367
 
1198
 
Line 1378... Line 1209...
1378
		draw_window();
1209
		draw_window();
1379
		break;
1210
		break;
Line 1380... Line 1211...
1380
 
1211
 
1381
	case SAVE_BUTTON:
1212
	case SAVE_BUTTON:
1382
		stop_edit();
-
 
1383
		kos_DrawBar(320, panel_y, wi - 320 - 10, 10, 0xe4dfe1);
1213
		stop_edit();
-
 
1214
		if (SaveFile(fname)) {
1384
		if (SaveFile(fname))
1215
			kos_DrawBar(320, panel_y + 16, cWidth - 320, 12, PANEL_BG_COLOR);
-
 
1216
			kos_WriteTextToWindow(320, panel_y + 16, 0x80, 0x000000, (char*)msg_save, 0);			
1385
			kos_WriteTextToWindow(320, panel_y, 0, 0x000000, (char*)msg_save, strlen(msg_save));
1217
		}
Line 1386... Line 1218...
1386
		break;
1218
		break;
1387
 
1219
 
1388
	case LOAD_BUTTON:
1220
	case LOAD_BUTTON:
1389
		stop_edit();
1221
		stop_edit();
-
 
1222
		int r = LoadFile(fname);
1390
		int r = LoadFile(fname);
1223
		kos_DrawBar(320, panel_y + 16, cWidth - 320, 12, PANEL_BG_COLOR);
1391
		kos_DrawBar(320, panel_y, wi - 320 - 10, 10, 0xe4dfe1);
1224
		char *result;
1392
		if (r > 0)
1225
		if (r > 0)
1393
		{
1226
		{
1394
			calculate_values();
1227
			calculate_values();
1395
			sel_moved = 0;
1228
			sel_moved = 0;
1396
			draw_window();
1229
			draw_window();
1397
			kos_WriteTextToWindow(320, panel_y,0,0x000000,(char*)msg_load, strlen(msg_load));
-
 
1398
		}
1230
			result = (char*)msg_load;
1399
		else if (r == -1)
1231
		}
1400
			kos_WriteTextToWindow(320, panel_y,0,0x000000,(char*)er_file_not_found,strlen(er_file_not_found));
1232
		else if (r == -1) result = (char*)er_file_not_found;
1401
		else if (r == -2)
1233
		else if (r == -2) result = (char*)er_format;
1402
			kos_WriteTextToWindow(320, panel_y,0,0x000000,(char*)er_format,strlen(er_format));
1234
		kos_WriteTextToWindow(320, panel_y + 16, 0x80, 0x000000, result, 0);
1403
		break;
1235
		break;
1404
	}
1236
	}
1405
	if (button >= COL_HEAD_BUTTON && button < ROW_HEAD_BUTTON)
1237
	if (button >= COL_HEAD_BUTTON && button < ROW_HEAD_BUTTON)
1406
	{
1238
	{
1407
		sel_end_x = sel_x = button - COL_HEAD_BUTTON;
1239
		sel_end_x = sel_x = button - COL_HEAD_BUTTON;
1408
		sel_y = 1;
1240
		sel_y = 1;
1409
		sel_end_y = row_count - 1;
1241
		sel_end_y = row_count - 1;
1410
		stop_edit();
1242
		stop_edit();
1411
		draw_window();
1243
		draw_grid();
1412
		return;
1244
		return;
1413
	}
1245
	}
1414
	else if (button >= ROW_HEAD_BUTTON && button < CELL_BUTTON)
1246
	else if (button >= ROW_HEAD_BUTTON && button < CELL_BUTTON)
1415
	{
1247
	{
1416
		sel_end_y = sel_y = button - ROW_HEAD_BUTTON;
1248
		sel_end_y = sel_y = button - ROW_HEAD_BUTTON;
1417
		sel_x = 1;
1249
		sel_x = 1;
1418
		sel_end_x = col_count - 1;
1250
		sel_end_x = col_count - 1;
1419
		stop_edit();
1251
		stop_edit();
1420
		draw_window();
1252
		draw_grid();
Line 1421... Line 1253...
1421
		return;
1253
		return;
Line 1422... Line 1254...
1422
	}
1254
	}
1423
 
1255
 
1424
}
1256
}
1425
 
1257
 
1426
void kos_Main()
1258
void kos_Main()
-
 
1259
{
Line 1427... Line 1260...
1427
{
1260
	kos_InitHeap();
1428
	kos_InitHeap();
1261
	load_edit_box();
1429
	load_edit_box();
1262
	init();
1430
	init();
1263
	kos_SetMaskForEvents(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER);
1431
	
1264
	
1432
	for (;;)
1265
	for (;;)
1433
	{
1266
	{
1434
		switch (kos_WaitForEvent())
-
 
1435
		{
-
 
1436
		case 6:
-
 
1437
			process_mouse();
1267
		switch (kos_WaitForEvent())
1438
			break;
1268
		{
1439
		case 1:
1269
		case EM_MOUSE_EVENT:
1440
			window_drawall=true;
1270
			process_mouse();
-
 
1271
			break;
1441
			draw_window();
1272
 
1442
			break;
1273
		case EM_KEY_PRESS:
1443
		case 2:
1274
			process_key();
-
 
1275
			break;
-
 
1276
 
-
 
1277
		case EM_BUTTON_CLICK:
-
 
1278
			process_button();
-
 
1279
			break;
1444
			process_key();
1280
		
1445
			break;
1281
		case EM_WINDOW_REDRAW:
1446
		case 3:
1282
			window_drawall=true;