From cdb20ade835613a92c00a92bd3bbfba1b9ccc9c6 Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Sat, 27 Oct 2018 17:55:12 +0000 Subject: [PATCH] Table 0.98.9: - big fonts - use system colors - use @notify to show load/save file status - fixed: grid do not steal focus when scroll used - fixed: window restore after making it very small update Table icon and add it APP+ git-svn-id: svn://kolibrios.org@7504 a494cfbc-eb01-0410-851d-a64ba20cac60 --- data/common/icons32.png | Bin 39973 -> 40014 bytes data/common/settings/app_plus.ini | 1 + programs/other/table/calc.cpp | 5 +- programs/other/table/func.cpp | 4 +- programs/other/table/hello.cpp | 262 ++++++++++++++---------------- programs/other/table/kosSyst.cpp | 41 +++-- programs/other/table/kosSyst.h | 27 ++- 7 files changed, 179 insertions(+), 161 deletions(-) diff --git a/data/common/icons32.png b/data/common/icons32.png index 9b054344f7ff53787f8700dd76dd7836d0649f91..43c7352c21f2005f6e50a98505f85614fdb3420f 100644 GIT binary patch delta 37113 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 OU&k!%Ey~P2>Hh*4WV^%w delta 37046 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 diff --git a/data/common/settings/app_plus.ini b/data/common/settings/app_plus.ini index 6d0a2bb7b2..ee48424a55 100644 --- a/data/common/settings/app_plus.ini +++ b/data/common/settings/app_plus.ini @@ -21,6 +21,7 @@ Life=/kolibrios/demos/life2,13 Calc+=/kolibrios/utils/calcplus,4 TinyBasic=/kolibrios/develop/TinyBasic/TinyBasic,91 Notes=/sys/notes,117 +Table=/sys/table,28 FtpClient=/sys/network/ftpc,45 VncViewer=/sys/network/vncc,77 Timer=/sys/demos/timer,119 diff --git a/programs/other/table/calc.cpp b/programs/other/table/calc.cpp index eaae604933..9fabd24a61 100644 --- a/programs/other/table/calc.cpp +++ b/programs/other/table/calc.cpp @@ -6,8 +6,8 @@ #include "kosSyst.h" //#include "KosFile.h" -#define DEFAULT_CELL_W 80 -#define DEFAULT_CELL_H 19 +#define DEFAULT_CELL_W 82 +#define DEFAULT_CELL_H 21 extern DWORD col_count, row_count; extern char ***cells; @@ -157,6 +157,7 @@ void reinit() { cell_w[i] = DEFAULT_CELL_W; } + cell_w[0] = 30; //make row headers smaller for (i = 0; i < row_count; i++) { diff --git a/programs/other/table/func.cpp b/programs/other/table/func.cpp index 2ca8bd7109..4c1f9efa79 100644 --- a/programs/other/table/func.cpp +++ b/programs/other/table/func.cpp @@ -19,8 +19,8 @@ void kos_DrawCutTextSmall(Word x, Word y, int areaWidth, Dword textColour, char { if (textPtr) { int textLen = strlen(textPtr); - if (textLen*6 > areaWidth) textLen = areaWidth / 6; - kos_WriteTextToWindow(x,y,0,textColour,textPtr,textLen); + if (textLen*8 > areaWidth) textLen = areaWidth / 8; + kos_WriteTextToWindow(x,y,0x10,textColour,textPtr,textLen); } } diff --git a/programs/other/table/hello.cpp b/programs/other/table/hello.cpp index ea0245f4e3..8064ae138c 100644 --- a/programs/other/table/hello.cpp +++ b/programs/other/table/hello.cpp @@ -6,41 +6,40 @@ #include "calc.h" #include "use_library.h" -#define TABLE_VERSION "0.98.7" +#define TABLE_VERSION "0.98.9" -// строки, которые выводит программа +// strings const char *sFileSign = "KolibriTable File\n"; const char sFilename[] = "Filename:"; const char sSave[] = "Save"; const char sLoad[] = "Load"; const char sNew[] = "New"; -const char er_file_not_found[] = "Cannot open file. "; -const char er_format[] = "Error: bad format. "; -const char msg_save[] = "File saved. "; -const char msg_load[] = "File loaded. "; -const char msg_new[] = "Memory cleared. "; +const char er_file_not_found[] = "'Cannot open file' -E"; +const char er_format[] = "'Error: bad format' -E"; +const char msg_save[] = "'File saved' -O"; +const char msg_load[] = "'File loaded' -O"; +const char msg_new[] = "'Memory cleared' -I"; // initial window sizes -#define WND_W 640 -#define WND_H 480 +#define WND_W 718 +#define WND_H 514 // new window size and coordinates int cWidth; int cHeight; +kosSysColors sc; +// bottom panel +#define MENU_PANEL_HEIGHT 40 // interface colors #define GRID_COLOR 0xa0a0a0 #define TEXT_COLOR 0x000000 #define CELL_COLOR 0xffffff -#define SEL_CELL_COLOR 0xe0e0ff +#define CELL_COLOR_ACTIVE 0xe0e0ff #define HEADER_CELL_COLOR 0xE9E7E3 -#define SEL_HEADER_CELL_COLOR 0xC4C5BA //0xBBBBFF -#define PANEL_BG_COLOR 0xe4dfe1 - -#define SCROLL_SIZE 16 +#define HEADER_CELL_COLOR_ACTIVE 0xC4C5BA //0xBBBBFF // button IDs -#define FILENAME_BUTTON 0x10 #define SAVE_BUTTON 0x11 #define LOAD_BUTTON 0x12 #define NEW_BUTTON 0x13 @@ -52,25 +51,28 @@ int cHeight; #define ROW_HEAD_BUTTON (COL_HEAD_BUTTON + 0x100) #define CELL_BUTTON (ROW_HEAD_BUTTON + 0x100) -// bottom panel -#define MENU_PANEL_HEIGHT 40 -Dword panel_y = 0; - // editbox data -char edit_text[256] = ""; -edit_box cell_box = {0,9*8-5,WND_H - 16-32,0xffffff,0x6a9480,0,0x808080,0,255,(dword)&edit_text,0,0}; +char edit_text[256]; +edit_box cell_box = {0,9*8-6,WND_H - 16-32,0xffffff,0x94AECE,0,0x808080,0x10000000,255,(dword)&edit_text,0,0}; + +// scrolls +#define SCROLL_SIZE 16 scroll_bar scroll_v = { SCROLL_SIZE,200,398, NULL, SCROLL_SIZE,0,115,15,0,0xeeeeee,0xD2CED0,0x555555,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}; scroll_bar scroll_h = { 200,NULL,SCROLL_SIZE, NULL, SCROLL_SIZE,0,115,15,0,0xeeeeee,0xD2CED0,0x555555,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}; // ячейки - их параметры и текст -DWORD col_count = 100, row_count = 100; +DWORD col_count = 101, row_count = 101; DWORD *cell_w, *cell_h; char ***cells; struct GRID { int x,y,w,h; -} grid; + int firstx, firsty; // cell x:y in the top left corner +} grid = { + 0,0,NULL,NULL, + 1,1 +}; char ***values; // значения формул, если есть @@ -84,8 +86,6 @@ char ***buffer = NULL; DWORD buf_col, buf_row; DWORD buf_old_x, buf_old_y; -// это координаты ячейки, отображаемой в ЛВ угле -DWORD scroll_x = 1, scroll_y = 1; // это выделенная ячейка DWORD sel_x = 1, sel_y = 1; DWORD prev_x = 0, prev_y = 0; // предыдущая выделенная @@ -108,7 +108,7 @@ DWORD nx = 0, ny = 0; // редактирование имени файла bool fn_edit = 0; char fname[256]; -edit_box file_box = {98,9*8-5,WND_H - 16-32,0xffffff,0x6a9480,0,0x808080,0,255,(dword)&fname,0,0}; +edit_box file_box = {160,9*8+12,WND_H - 16-32,0xffffff,0x94AECE,0,0x808080,0x10000000,255,(dword)&fname,0,0}; // изменение размеров #define SIZE_X 1 // состояние @@ -141,8 +141,8 @@ void DrawScrolls() scroll_h.w = grid.w + SCROLL_SIZE + 1; scroll_h.all_redraw = true; scroll_h.max_area = col_count - 2; - scroll_h.cur_area = nx-scroll_x-1; - scroll_h.position = scroll_x-1; + scroll_h.cur_area = nx-grid.firstx-1; + scroll_h.position = grid.firstx-1; scrollbar_h_draw((DWORD)&scroll_h); // VER @@ -151,8 +151,8 @@ void DrawScrolls() scroll_v.h = grid.h + 1; scroll_v.all_redraw = true; scroll_v.max_area = row_count - 2; - scroll_v.cur_area = ny-scroll_y-1; - scroll_v.position = scroll_y-1; + scroll_v.cur_area = ny-grid.firsty-1; + scroll_v.position = grid.firsty-1; scrollbar_v_draw((DWORD)&scroll_v); } @@ -160,14 +160,14 @@ void DrawScrolls() void start_edit(int x, int y) { int ch = 0; - if (x < scroll_x || x > nx - 1) + if (x < grid.firstx || x > nx - 1) { - scroll_x = x; + grid.firstx = x; ch = 1; } - if (y < scroll_y || y > ny - 1) + if (y < grid.firsty || y > ny - 1) { - scroll_y = y; + grid.firsty = y; ch = 1; } if (ch) @@ -179,17 +179,17 @@ void start_edit(int x, int y) file_box.flags &= ~ed_focus; cell_box.flags |= ed_focus; - cell_box.left = cell_x[x] + 2; - cell_box.top = cell_y[y] + 2; - cell_box.width = cell_w[x] - 4; - //cell_box.height= cell_h[y]; + cell_box.left = cell_x[x] + 1; + cell_box.top = cell_y[y]; + cell_box.width = cell_w[x] - 2; memset((Byte*)edit_text, 0, sizeof(edit_text)); if (cells[x][y]) { strcpy(edit_text, cells[x][y]); edit_text[strlen(cells[x][y]) - 1] = '\0'; } - cell_box.pos = cell_box.offset = 0; + cell_box.pos = cell_box.size = strlen(edit_text); + cell_box.offset = 0; draw_window(); } @@ -224,25 +224,25 @@ void cancel_edit() void check_sel() { - DWORD sx0=scroll_x, sy0=scroll_y; + DWORD sx0=grid.firstx, sy0=grid.firsty; - if (sel_x >= nx - 1 /*&& sel_x < col_count - nx + scroll_x + 1*/) + if (sel_x >= nx - 1 /*&& sel_x < col_count - nx + grid.firstx + 1*/) //if (sel_x == nx) - scroll_x++; + grid.firstx++; //else - // scroll_x = sel_x; - if (sel_y >= ny - 1 /*&& sel_y < row_count - ny + scroll_y */) + // grid.firstx = sel_x; + if (sel_y >= ny - 1 /*&& sel_y < row_count - ny + grid.firsty */) //if (sel_y == ny) - scroll_y++; + grid.firsty++; //else - // scroll_y = sel_y; + // grid.firsty = sel_y; - if (sel_x < scroll_x) - scroll_x = sel_x; - if (sel_y < scroll_y) - scroll_y = sel_y; + if (sel_x < grid.firstx) + grid.firstx = sel_x; + if (sel_y < grid.firsty) + grid.firsty = sel_y; - if (sx0 != scroll_x || sy0 != scroll_y) + if (sx0 != grid.firstx || sy0 != grid.firsty) sel_moved = 0; // надо перерисовать все } @@ -279,14 +279,14 @@ void clear_cell_slow(int px, int py) { int i; int x0 = cell_w[0]; - for (i = scroll_x; i < px; i++) + for (i = grid.firstx; i < px; i++) { x0 += cell_w[i]; } int x1 = x0; x1 += cell_w[px]; int y0 = cell_h[0]; - for (i = scroll_y; i < py; i++) + for (i = grid.firsty; i < py; i++) { y0 += cell_h[i]; } @@ -316,8 +316,8 @@ void DrawCell(int x, int y, Dword w, Dword h, Dword id, Dword bg_color, char* te kos_DrawBar(x, y, w, h, bg_color); if (!small) { if (id) kos_DefineButton(x+5, y, w-10, h-1, id+BT_NODRAW,0); - if (header) kos_WriteTextToWindow( x + w/2 -strlen(text)*3, h/2-4+y, 0x80,TEXT_COLOR,text,0); //WriteTextCenter - else kos_DrawCutTextSmall(x+2, h/2-4+y, w-7, TEXT_COLOR, text); + if (header) kos_WriteTextToWindow( x + w/2 -strlen(text)*4, h/2-7+y, 0x90,TEXT_COLOR,text,0); //WriteTextCenter + else kos_DrawCutTextSmall(x+3, h/2-7+y, w-7, TEXT_COLOR, text); } } @@ -328,6 +328,8 @@ void draw_grid() DWORD bg_color; kos_DrawBar(0,0,cell_w[0],cell_h[0],HEADER_CELL_COLOR); // left top cell + //kos_DebugValue("sel_moved", sel_moved); + nx=ny=0; // очистить область около выделенной ячейки @@ -349,14 +351,14 @@ void draw_grid() for (i = 1; i < col_count && x-x0 < grid.w; i++) { cell_x[i] = -1; - if (i >= scroll_x) + if (i >= grid.firstx) { { - if (!sel_moved || (is_x_changed(i))) { - if (is_between(i,sel_x,sel_end_x)) bg_color = SEL_HEADER_CELL_COLOR; else bg_color = HEADER_CELL_COLOR; + //if (!sel_moved || (is_x_changed(i))) { + if (is_between(i,sel_x,sel_end_x)) bg_color = HEADER_CELL_COLOR_ACTIVE; else bg_color = HEADER_CELL_COLOR; kos_DrawBar(x-x0, 0, 1, grid.h, GRID_COLOR); DrawCell(x-x0+1, 0, cell_w[i]-1, cell_h[0], i+COL_HEAD_BUTTON, bg_color, cells[i][0], true); - } + //} cell_x[i] = x - x0; } } @@ -375,14 +377,14 @@ void draw_grid() for (i = 1; i < row_count && y-y0 < grid.h; i++) { cell_y[i] = -1; - if (i >= scroll_y) + if (i >= grid.firsty) { { - if (!sel_moved || (is_y_changed(i))) { - if (is_between(i,sel_y,sel_end_y)) bg_color = SEL_HEADER_CELL_COLOR; else bg_color = HEADER_CELL_COLOR; + //if (!sel_moved || (is_y_changed(i))) { + if (is_between(i,sel_y,sel_end_y)) bg_color = HEADER_CELL_COLOR_ACTIVE; else bg_color = HEADER_CELL_COLOR; kos_DrawBar(0, y-y0, grid.w, 1, GRID_COLOR); DrawCell(0, y-y0+1, cell_w[0], cell_h[i]-1, i+ROW_HEAD_BUTTON, bg_color, cells[0][i], true); - } + //} cell_y[i] = y - y0; } } @@ -396,10 +398,10 @@ void draw_grid() // cells itself y = cell_h[0]; - for (i = scroll_y; i < ny; i++) + for (i = grid.firsty; i < ny; i++) { x = cell_w[0]; - for (j = scroll_x; j < nx; j++) + for (j = grid.firstx; j < nx; j++) { if (i && j) //no need to draw headers one more { @@ -417,7 +419,7 @@ void draw_grid() drag_y = y + cell_h[i] - 4; } else { - bg_color = SEL_CELL_COLOR; // selected but not main + bg_color = CELL_COLOR_ACTIVE; // selected but not main } } @@ -432,7 +434,9 @@ void draw_grid() } DrawCell(x+1, y+1, cell_w[j]-1, cell_h[i]-1, 0, bg_color, text, false); - if (draw_frame_selection) DrawSelectedFrame(x+1,y, cell_w[j]-1, cell_h[i], TEXT_COLOR); + if (draw_frame_selection) { + DrawSelectedFrame(x+1,y, cell_w[j]-1, cell_h[i], TEXT_COLOR); + } else if (error) kos_DrawRegion(x+1, y+1, cell_w[j]-1, cell_h[i]-1, 0xff0000, 0); } x += cell_w[j]; @@ -455,7 +459,7 @@ void draw_size_grid() x0 = 0; for (i = 1; i < col_count && x - x0 + cell_w[i] < grid.w - 10; i++) { - if (i >= scroll_x) + if (i >= grid.firstx) { if (i >= size_id) kos_DrawLine(x - x0, 0, x - x0, grid.h, 0, 1); @@ -474,7 +478,7 @@ void draw_size_grid() y0 = 0; for (i = 1; i < col_count && y - y0 + cell_h[i] < grid.h - 10; i++) { - if (i >= scroll_y) + if (i >= grid.firsty) { if (i >= size_id) kos_DrawLine(0, y - y0, grid.w, y - y0, 0, 1); @@ -525,6 +529,8 @@ bool draw_and_define_window() kos_DefineAndDrawWindow(110,40,WND_W,WND_H,0x73,0x40FFFFFF,0,0,(Dword)"Table v" TABLE_VERSION); kos_WindowRedrawStatus(2); + kos_GetSystemColors(&sc); + sProcessInfo info; kos_ProcessInfo(&info, 0xFFFFFFFF); cWidth = info.processInfo.width - 9; @@ -537,8 +543,8 @@ bool draw_and_define_window() if (info.processInfo.status_window&0x04) return false; //draw nothing if window is rolled-up - if (grid.h < 100) { kos_ChangeWindow( -1, -1, -1, 180 ); return false; } - if (grid.w < 340) { kos_ChangeWindow( -1, -1, 350, -1 ); return false; } + if (cWidth < 430) { kos_ChangeWindow( -1, -1, 450, -1 ); return false; } + if (cHeight < 250) { kos_ChangeWindow( -1, -1, -1, 300 ); return false; } sel_moved = 0; @@ -547,28 +553,27 @@ bool draw_and_define_window() void draw_window() { + int panel_y = cHeight - MENU_PANEL_HEIGHT + 1; - if (sel_end_move) sel_moved = 0; + kos_DrawBar(0, panel_y, cWidth, MENU_PANEL_HEIGHT-1, sc.work); + kos_WriteTextToWindow(3 + 1, panel_y + 14, 0x90, sc.work_text, (char*)sFilename, 0); - panel_y = cHeight - MENU_PANEL_HEIGHT + 1; - - kos_DrawBar(0, panel_y, cWidth, MENU_PANEL_HEIGHT-1, PANEL_BG_COLOR); - kos_WriteTextToWindow(3 + 1, panel_y + 16, 0x80, 0x000000, (char*)sFilename, 0); - - file_box.top = panel_y + 12; + file_box.top = panel_y + 10; + #define BTX 230 + #define BTW 70 //save - kos_DefineButton(20 + 160, panel_y + 9, 60, 20, SAVE_BUTTON, 0xd0d0d0); - kos_WriteTextToWindow(22 + 160 + (60 - strlen(sSave) * 6) / 2, panel_y + 16, 0x80, 0x000000, (char*)sSave, 0); + kos_DefineButton(BTX + 25, file_box.top, BTW, 21, SAVE_BUTTON, sc.work); + kos_WriteTextToWindow(BTX + 25 + (BTW - strlen(sSave) * 8) / 2, panel_y + 14, 0x90, sc.work_text, (char*)sSave, 0); //load - kos_DefineButton(90 + 160, panel_y + 9, 60, 20, LOAD_BUTTON, 0xd0d0d0); - kos_WriteTextToWindow(92 + 160 + (60 - strlen(sLoad) * 6) / 2, panel_y + 16, 0x80, 0x000000, (char*)sLoad, 0); + kos_DefineButton(BTX + 25+BTW+5, file_box.top, BTW, 21, LOAD_BUTTON, sc.work); + kos_WriteTextToWindow(BTX + 25+BTW+5 + (BTW - strlen(sLoad) * 8) / 2, panel_y + 14, 0x90, sc.work_text, (char*)sLoad, 0); //new (clean) /* - kos_DefineButton(90 + 160 + 70, panel_y + 9, 60, 20, NEW_BUTTON, 0xd0d0d0); - kos_WriteTextToWindow(92 + 160 + 10 + 70, panel_y + 16, 0, 0x000000, (char*)sNew, strlen(sNew)); + kos_DefineButton(90 + 160 + 70, panel_y + 9, 60, 20, NEW_BUTTON, sc.work); + kos_WriteTextToWindow(92 + 160 + 10 + 70, panel_y + 16, 0, sc.work_text, (char*)sNew, strlen(sNew)); */ if ((void*)edit_box_draw != NULL) @@ -578,6 +583,7 @@ void draw_window() edit_box_draw((DWORD)&file_box); } + if (sel_end_move) sel_moved = 0; draw_grid(); sel_moved = 0; } @@ -585,42 +591,41 @@ void draw_window() void process_mouse() { Dword mouse_btn, ckeys, shift, ctrl; - int mouse_x, mouse_y, i, dx = 0, dy = 0; - bool window_is_dragged=false; - - edit_box_mouse((dword)&cell_box); - edit_box_mouse((dword)&file_box); int vert, hor; - kos_GetScrollInfo(vert, hor); - + kos_GetScrollInfo(vert, hor); if (vert != 0) { stop_edit(); - scroll_y += vert; - if (scroll_y<1) scroll_y=1; - if (scroll_y>row_count-25) scroll_y=row_count-25; + grid.firsty += vert; + if (grid.firsty<1) grid.firsty=1; + if (grid.firsty>row_count-25) grid.firsty=row_count-25; draw_grid(); return; } if (!sel_moved && !size_state) //do not handle scrollbars when user selects cells { - scrollbar_v_mouse((DWORD)&scroll_v); - if (scroll_v.position != scroll_y-1) + if (!scroll_h.delta2) scrollbar_v_mouse((DWORD)&scroll_v); + if (scroll_v.position != grid.firsty-1) { - scroll_y = scroll_v.position + 1; + grid.firsty = scroll_v.position + 1; draw_grid(); } - scrollbar_h_mouse((DWORD)&scroll_h); - if (scroll_h.position != scroll_x-1) + if (!scroll_v.delta2) scrollbar_h_mouse((DWORD)&scroll_h); + if (scroll_h.position != grid.firstx-1) { - scroll_x = scroll_h.position + 1; + grid.firstx = scroll_h.position + 1; draw_grid(); - } + } } + if (scroll_v.delta2 || scroll_h.delta2) return; + edit_box_mouse((dword)&cell_box); + edit_box_mouse((dword)&file_box); + + int mouse_x, mouse_y, i; kos_GetMouseState(mouse_btn, mouse_x, mouse_y); mouse_x -= 5; mouse_y -= kos_GetSkinHeight(); @@ -681,7 +686,7 @@ void process_mouse() size_state = SIZE_Y; } } - else // click on cell + else // click on cell if (mouse_x <= cell_x[nx - 1] && mouse_y <= cell_y[ny - 1]) { was_single_selection = sel_x == sel_end_x && sel_y == sel_end_y; @@ -733,7 +738,7 @@ void process_mouse() //sel_moved = (size_state == SIZE_SELECT && sel_x == sel_end_x && sel_y == sel_end_y && was_single_selection); size_state = 0; - draw_window(); // все сдвинулось - надо обновиться + draw_grid(); // все сдвинулось - надо обновиться return; } if (size_state == SIZE_X && mouse_x != size_mouse_x) @@ -831,10 +836,10 @@ void process_key() dy = 1; break; case 183: - dy = ny - scroll_y-1; + dy = ny - grid.firsty-1; break; case 184: - dy = - (ny - scroll_y); + dy = - (ny - grid.firsty); break; case 180: //home dx = -sel_x + 1; @@ -842,14 +847,14 @@ void process_key() draw_grid(); break; case 181: //end - dx = col_count - (nx - scroll_x) - 1 - sel_x; + dx = col_count - (nx - grid.firstx) - 1 - sel_x; dy = 0; draw_grid(); break; case 27: // escape cancel_edit(); break; - case 182: // delete + case 182: // delete { int i,j,n0,n1,k0,k1; n0 = min(sel_x, sel_end_x); @@ -870,11 +875,11 @@ void process_key() draw_grid(); break; } - case 0x0D: // enter + case 0x0D: // enter if (is_edit) { stop_edit(); - draw_window(); + draw_grid(); } break; case 22: // contol-v @@ -1052,18 +1057,10 @@ void process_key() } } - void process_button() { - Dword mouse_btn, ckeys, shift, ctrl; - int mouse_x, mouse_y, i, p, dx = 0, dy = 0; - Dword button; if (!kos_GetButtonID(button)) return; - - // sprintf(debuf, "button %U", button); - // rtlDebugOutString(debuf); - switch (button) { case 1: @@ -1071,43 +1068,30 @@ void process_button() case NEW_BUTTON: // clear the table reinit(); - draw_window(); - break; - - case FILENAME_BUTTON: - sel_moved = 1; - stop_edit(); - fn_edit = 1; - strcpy(edit_text, fname); - draw_window(); + draw_grid(); break; case SAVE_BUTTON: stop_edit(); - if (SaveFile(fname)) { - kos_DrawBar(320, panel_y + 16, cWidth - 320, 12, PANEL_BG_COLOR); - kos_WriteTextToWindow(320, panel_y + 16, 0x80, 0x000000, (char*)msg_save, 0); - } + if (SaveFile(fname)) kos_AppRun("/sys/@notify", (char*)msg_save); break; case LOAD_BUTTON: stop_edit(); int r = LoadFile(fname); - kos_DrawBar(320, panel_y + 16, cWidth - 320, 12, PANEL_BG_COLOR); char *result; - if (r > 0) - { + if (r > 0) { calculate_values(); sel_moved = 0; - draw_window(); + draw_grid(); result = (char*)msg_load; } else if (r == -1) result = (char*)er_file_not_found; else if (r == -2) result = (char*)er_format; - kos_WriteTextToWindow(320, panel_y + 16, 0x80, 0x000000, result, 0); + kos_AppRun("/sys/@notify", result); break; } - if (button >= COL_HEAD_BUTTON && button < ROW_HEAD_BUTTON) + if (button >= COL_HEAD_BUTTON && button < ROW_HEAD_BUTTON) { sel_end_x = sel_x = button - COL_HEAD_BUTTON; sel_y = 1; @@ -1116,7 +1100,7 @@ void process_button() draw_grid(); return; } - else if (button >= ROW_HEAD_BUTTON && button < CELL_BUTTON) + else if (button >= ROW_HEAD_BUTTON && button < CELL_BUTTON) { sel_end_y = sel_y = button - ROW_HEAD_BUTTON; sel_x = 1; @@ -1125,7 +1109,6 @@ void process_button() draw_grid(); return; } - } void kos_Main() @@ -1133,8 +1116,7 @@ void kos_Main() kos_InitHeap(); load_edit_box(); init(); - kos_SetMaskForEvents(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER); - + kos_SetMaskForEvents(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER); for (;;) { switch (kos_WaitForEvent()) diff --git a/programs/other/table/kosSyst.cpp b/programs/other/table/kosSyst.cpp index 5c37b846a1..f5aa7deaf4 100644 --- a/programs/other/table/kosSyst.cpp +++ b/programs/other/table/kosSyst.cpp @@ -806,28 +806,22 @@ void kos_DisplayNumberToWindow( } } - -// function 70 -Dword kos_FileSystemAccess( kosFileInfo *fileInfo ) +// 48.3: get system colors +bool kos_GetSystemColors( kosSysColors *sc ) { -// Dword result; - - // __asm{ - mov eax, 70 - mov ebx, fileInfo + mov eax, 48 + mov ebx, 3 + mov ecx, sc + mov edx, 40 int 0x40 -// mov result, eax } - // -// return result; } // function 63 void kos_DebugOutChar( char ccc ) { - // __asm{ mov eax, 63 mov ebx, 1 @@ -903,6 +897,7 @@ void kos_ChangeWindow( Dword x, Dword y, Dword sizeX, Dword sizeY ) } } +// 68.11: init heap void kos_InitHeap() { __asm{ @@ -912,6 +907,28 @@ void kos_InitHeap() } } +// function 70 +Dword kos_FileSystemAccess( kosFileInfo *fileInfo ) +{ + __asm{ + mov eax, 70 + mov ebx, fileInfo + int 0x40 + } +} + +// 70.7: run Kolibri application with param +int kos_AppRun(char* app_path, char* param) +{ + kosFileInfo fileInfo; + fileInfo.rwMode = 7; + fileInfo.OffsetLow = 0; + fileInfo.OffsetHigh = param; + fileInfo.dataCount = 0; + fileInfo.bufferPtr = 0; + strcpy(fileInfo.fileURL, app_path); + return kos_FileSystemAccess(&fileInfo); +} // diff --git a/programs/other/table/kosSyst.h b/programs/other/table/kosSyst.h index 8d390ffc1f..af8a48ac43 100644 --- a/programs/other/table/kosSyst.h +++ b/programs/other/table/kosSyst.h @@ -68,13 +68,27 @@ struct kosFileInfo { Dword rwMode; Dword OffsetLow; - Dword OffsetHigh; + char* OffsetHigh; Dword dataCount; Byte *bufferPtr; char fileURL[MAX_PATH]; }; +struct kosSysColors { + Dword nonset1; + Dword nonset2; + Dword work_dark; + Dword work_light; + Dword window_title; + Dword work; + Dword work_button; + Dword work_button_text; + Dword work_text; + Dword work_graph; +}; + + struct RGB { Byte b; @@ -228,8 +242,8 @@ void kos_DisplayNumberToWindow( eNumberBase nBase = nbDecimal, bool valueIsPointer = false ); -// function 58 -Dword kos_FileSystemAccess( kosFileInfo *fileInfo ); +// 48.3: get system colors +bool kos_GetSystemColors( kosSysColors *sc ); // function 63 void kos_DebugOutChar( char ccc ); // @@ -242,8 +256,11 @@ void kos_ChangeWindow( Dword x, Dword y, Dword sizeX, Dword sizeY ); bool kos_ApplicationMemoryResize( Dword targetSize ); // function 66 void kos_SetKeyboardDataMode( Dword mode ); - +// 68.11: init heap void kos_InitHeap(); - +// function 70 +Dword kos_FileSystemAccess( kosFileInfo *fileInfo ); +// 70.7: run Kolibri application with param +int kos_AppRun(char* app_path, char* param); // void kos_Main();