table 0.97: bugs fixed #0000004, partly #0000006 (CPU loading over 100500%, cells after row #99 can't be displayed, but can be scrolled)

git-svn-id: svn://kolibrios.org@2749 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2012-06-06 21:31:16 +00:00
parent 0b625a1233
commit 8fafe341ec

View File

@ -1,19 +1,9 @@
//своевременное реагирование на события мыши
//минимальные размеры окна
//убрана перерисовка заголовка окна там, где она не нужна
//убрано "заползание" панели снизу на границы окна
//исправлен баг из-за которого после действий мышкой удалялась кнопка закрытия окна
//зачем строка 450?
//если выделить область ячеек и сдвинуть курсор ввода с помощью клавиш, "следы" остануться
//нельзя перемещаться по буквам в редактируемой строке
#include "func.h" #include "func.h"
#include "parser.h" #include "parser.h"
#include "calc.h" #include "calc.h"
#include "use_library.h" #include "use_library.h"
#define TABLE_VERSION "0.96" #define TABLE_VERSION "0.97"
// ñòðîêè, êîòîðûå âûâîäèò ïðîãðàììà // ñòðîêè, êîòîðûå âûâîäèò ïðîãðàììà
const char *sFileSign = "KolibriTable File\n"; const char *sFileSign = "KolibriTable File\n";
@ -376,7 +366,10 @@ void draw_grid()
// åñòü êíîïêà ñòîáëöà è åùå êíîïêà èçìåíåíèÿ øèðèíû // åñòü êíîïêà ñòîáëöà è åùå êíîïêà èçìåíåíèÿ øèðèíû
if (x - x0 + col_width[i] <= wi - col_width[0]) if (x - x0 + col_width[i] <= wi - col_width[0])
{
//kos_DeleteButton(COL_HEAD_BUTTON+i);
kos_DefineButton(x-x0+5,0,cur_width - 10,row_height[0]-1,0x60000000+COL_HEAD_BUTTON+i,0); kos_DefineButton(x-x0+5,0,cur_width - 10,row_height[0]-1,0x60000000+COL_HEAD_BUTTON+i,0);
}
//kos_DefineButton(x-x0+col_width[i]-10,0,15,row_height[0]-1,0x60000000+COL_SIZE_BUTTON+i,0); //kos_DefineButton(x-x0+col_width[i]-10,0,15,row_height[0]-1,0x60000000+COL_SIZE_BUTTON+i,0);
col_left[i] = x - x0; col_left[i] = x - x0;
} }
@ -432,6 +425,7 @@ void draw_grid()
if (!sel_moved || (is_y_changed(i))) if (!sel_moved || (is_y_changed(i)))
kos_WriteTextToWindow(2+dx,y-y0+dy,0,text_color,cells[0][i],strlen(cells[0][i])); kos_WriteTextToWindow(2+dx,y-y0+dy,0,text_color,cells[0][i],strlen(cells[0][i]));
kos_DefineButton(0,y-y0+5,col_width[0]-1,row_height[i]-6,0x60000000+ROW_HEAD_BUTTON+i,0); kos_DefineButton(0,y-y0+5,col_width[0]-1,row_height[i]-6,0x60000000+ROW_HEAD_BUTTON+i,0);
//kos_DefineButton(0,y-y0+row_height[i]-5,col_width[0]-1,10,0x60000000+ROW_SIZE_BUTTON+i,0); //kos_DefineButton(0,y-y0+row_height[i]-5,col_width[0]-1,10,0x60000000+ROW_SIZE_BUTTON+i,0);
row_top[i] = y - y0; row_top[i] = y - y0;
@ -667,7 +661,6 @@ void draw_drag()
void draw_window() void draw_window()
{ {
int i;
double xx0=0.0, yy0=0.0; double xx0=0.0, yy0=0.0;
sProcessInfo info; sProcessInfo info;
void *p; void *p;
@ -678,7 +671,6 @@ void draw_window()
memset((Byte*)&info, 0, 1024); memset((Byte*)&info, 0, 1024);
kos_ProcessInfo(&info, 0xFFFFFFFF); kos_ProcessInfo(&info, 0xFFFFFFFF);
p = info.rawData + 42; // magic p = info.rawData + 42; // magic
wi = *(Dword *)(p); wi = *(Dword *)(p);
he = *(Dword *)((Byte *)p + 4); he = *(Dword *)((Byte *)p + 4);
@ -695,22 +687,17 @@ void draw_window()
he -= kos_GetSkinHeight() + MENU_PANEL_HEIGHT; // äîñòóïíàÿ âûñîòà îêíà he -= kos_GetSkinHeight() + MENU_PANEL_HEIGHT; // äîñòóïíàÿ âûñîòà îêíà
wi -= 10; wi -= 10;
//Leency{
// start redraw
if (window_drawall==true){ if (window_drawall==true){
kos_WindowRedrawStatus(1); kos_WindowRedrawStatus(1);
kos_DefineAndDrawWindow(10,40,WND_W,WND_H,0x33,0x40FFFFFF,0,0,(Dword)"Table v" TABLE_VERSION); kos_DefineAndDrawWindow(10,40,WND_W,WND_H,0x33,0x40FFFFFF,0,0,(Dword)"Table v" TABLE_VERSION);
kos_WindowRedrawStatus(2);
if (he + MENU_PANEL_HEIGHT <= 8) //если окно свёрнуто в заголовок if (info.rawData[70]&0x04) return; //íè÷åãî íå äåëàòü åñëè îêíî ñõëîïíóòî â çàãîëîâîê
{
kos_WindowRedrawStatus(2);
return;
}
if (he < 100) kos_ChangeWindow( -1, -1, -1, 180 ); if (he < 100) kos_ChangeWindow( -1, -1, -1, 180 );
if (wi < 340) kos_ChangeWindow( -1, -1, 350, -1 ); if (wi < 340) kos_ChangeWindow( -1, -1, 350, -1 );
}//}Leency }
// edit_box_draw((dword)&ebox); // edit_box_draw((dword)&ebox);
int y = he + kos_GetSkinHeight() - 10; int y = he + kos_GetSkinHeight() - 10;
@ -748,9 +735,6 @@ void draw_window()
*/ */
panel_y = y; panel_y = y;
//kos_DefineButton(0,0,WND_W,WND_H,0x60000002,0);
//if (is_edit) KEdit();
if ((void*)edit_box_draw != NULL) if ((void*)edit_box_draw != NULL)
{ {
if (is_edit) if (is_edit)
@ -759,8 +743,6 @@ void draw_window()
} }
draw_grid(); draw_grid();
// end redraw
kos_WindowRedrawStatus(2);
window_drawall=false; window_drawall=false;
sel_moved = 0; sel_moved = 0;
} }
@ -769,7 +751,7 @@ void draw_window()
void process_mouse() void process_mouse()
{ {
Dword mouse_btn, ckeys, shift, ctrl; Dword mouse_btn, ckeys, shift, ctrl;
int mouse_x, mouse_y, i, p, dx = 0, dy = 0; int mouse_x, mouse_y, i, dx = 0, dy = 0;
int redraw = 0; int redraw = 0;
Dword mySlot = kos_GetSlotByPID(myPID); Dword mySlot = kos_GetSlotByPID(myPID);
@ -785,10 +767,11 @@ void process_mouse()
//sprintf(debuf, "scroll %U %U", vert, hor); //sprintf(debuf, "scroll %U %U", vert, hor);
//rtlDebugOutString(debuf); //rtlDebugOutString(debuf);
if (vert != 0) //òðóú ïåðåðèñîâêà! if (vert != 0) //òðóú ïåðåðèñîâêà!
{ {
if (!((sel_end_y + vert) >= (row_count-1))) //çàãëóøêà
move_sel(sel_x, sel_y + vert); move_sel(sel_x, sel_y + vert);
//move_sel(sel_x + hor, sel_y);
return; return;
} }
@ -801,6 +784,7 @@ void process_mouse()
ckeys = kos_GetSpecialKeyState(); ckeys = kos_GetSpecialKeyState();
shift = ckeys & 0x3; shift = ckeys & 0x3;
if (mouse_y < 0 && mouse_btn) // ò.ê. ìûøêà íà çàãîëîâêå îêíà if (mouse_y < 0 && mouse_btn) // ò.ê. ìûøêà íà çàãîëîâêå îêíà
{ {
window_is_dragged = 1; window_is_dragged = 1;
@ -975,7 +959,7 @@ void process_mouse()
void process_key() void process_key()
{ {
Dword mouse_btn, ckeys, shift, ctrl; Dword mouse_btn, ckeys, shift, ctrl;
int mouse_x, mouse_y, i, p, dx = 0, dy = 0; int mouse_x, mouse_y, dx = 0, dy = 0;
// key pressed, read it // key pressed, read it
Byte keyCode; Byte keyCode;
@ -1074,19 +1058,6 @@ void process_key()
draw_window(); draw_window();
} }
break; break;
//case 0x08: // backspace
/*if (is_edit || fn_edit)
{
if (strlen(edit_text) != 0)
edit_text[strlen(edit_text) - 1] = '\0';
KEdit();
}
else if (cells[sel_x][sel_y])
{
start_edit(sel_x, sel_y);
}
*/
// break;
case 22: // contol-v case 22: // contol-v
{ {
if (ctrl) if (ctrl)
@ -1198,14 +1169,6 @@ void process_key()
} }
if (is_edit) if (is_edit)
edit_box_draw((dword)&cell_box); edit_box_draw((dword)&cell_box);
/*
if (strlen(edit_text)<256)
{
edit_text[strlen(edit_text)]=keyCode;
edit_text[strlen(edit_text) + 1]='\0';
KEdit();
}
*/
break; break;
} }
if (dx != 0) if (dx != 0)
@ -1257,7 +1220,11 @@ void process_key()
{ {
if (!shift) if (!shift)
{ {
if ((sel_end_x + dx) >= (col_count-1)) {dx=0;} //çàãëóøêà
else if ((sel_end_y + dy) >= (row_count-1)) {dy=0;}
else {
move_sel(sel_x + dx, sel_y + dy); move_sel(sel_x + dx, sel_y + dy);
}
} }
else else
{ {
@ -1453,10 +1420,10 @@ void kos_Main()
kos_InitHeap(); kos_InitHeap();
load_edit_box(); load_edit_box();
init(); init();
for (;;) for (;;)
{ {
switch (kos_CheckForEvent()) switch (kos_WaitForEvent(10))
{ {
case 0: case 0:
process_mouse(); process_mouse();