diff --git a/ba/ba0100.cpp b/ba/ba0100.cpp index 8b97103a0..f2df0f2f2 100755 --- a/ba/ba0100.cpp +++ b/ba/ba0100.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -1630,51 +1631,88 @@ HIDDEN int dir_sort(const TObject** d1, const TObject** d2) return xvt_str_compare_ignoring_case(s1, s2); } -HIDDEN bool study_handler(TMask_field& f, KEY k) +class TStudy_mask : public TAutomask { - bool ok = true; - if (f.to_check(k)) +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); +public: + TStudy_mask(); +}; + +bool TStudy_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) { - TFilename path(f.get()); - path.add("com"); - path.add("dir.gen"); - if (!path.exist() || path.find(' ') >= 0) - ok = f.error_box("%s %s", (const char*)f.get(), TR("non e' uno studio valido!")); - } else - if (k == K_F9) - { - TFilename str = firm2dir(-1); - for (int i = str.len()-2; i > 0; i--) + case DLG_FINDREC: + if (e == fe_button) + send_key(K_F9, DLG_USER, &o); + break; + case DLG_USER: + if (e == fe_modify || e == fe_close) { - if (str[i] == '\\' || str[i] == '/') - { - str.cut(i); - break; - } + TFilename path(o.get()); + path.add("com"); + path.add("dir.gen"); + if (!path.exist() || path.find(' ') >= 0) + return error_box("%s %s", (const char*)o.get(), TR("non e' uno studio valido!")); } - str.add("*"); - SLIST dirs = xvt_fsys_list_files(DIR_TYPE, str.get_buffer(), true); - - TFilename dirgen; - TArray_sheet sht(-1, -1, 78, 16, TR("Scelta studio"), HR("Studio@76")); - for (SLIST_ELT e = xvt_slist_get_first(dirs); e; e = xvt_slist_get_next(dirs, e)) - { - const char* f = xvt_slist_get(dirs, e, NULL); - dirgen = f; - if (dirgen.find(' ') < 0) + if (e == fe_button) + { + TFilename str = firm2dir(-1); + for (int i = str.len()-2; i > 0; i--) { - dirgen.add("com/dir.gen"); - if (dirgen.exist()) - sht.add(f); + if (str[i] == '\\' || str[i] == '/') + { + str.cut(i); + break; + } } - } - xvt_slist_destroy(dirs); + str.add("*"); + SLIST dirs = xvt_fsys_list_files(DIR_TYPE, str, true); - sht.rows_array().TArray::sort(dir_sort); - if (sht.run() == K_ENTER) - f.set(sht.row(-1)); // -1 = selected row + TFilename dirgen; + TArray_sheet sht(-1, -1, 78, 20, TR("Scelta studio"), HR("Studio@72|Ditte")); + for (SLIST_ELT e = xvt_slist_get_first(dirs); e; e = xvt_slist_get_next(dirs, e)) + { + const char* f = xvt_slist_get(dirs, e, NULL); + dirgen = f; + if (dirgen.find(' ') < 0) // Scarta gli studi contenenti spazi + { + dirgen.add("com/dir.gen"); + if (dirgen.exist()) + { + TToken_string row = f; + str = f; str.add("?????A"); + SLIST firms = xvt_fsys_list_files(DIR_TYPE, str, true); + row.add(xvt_slist_count(firms)); + xvt_slist_destroy(firms); + sht.add(row); + } + } + } + xvt_slist_destroy(dirs); + + sht.rows_array().TArray::sort(dir_sort); + if (sht.run() == K_ENTER) + o.set(sht.row(-1)); // -1 = selected row + } + break; + default: + break; } - return ok; + return true; +} + +TStudy_mask::TStudy_mask() : TAutomask(TR("Scelta studio"), 1, 60, 3) +{ + add_button_tool(DLG_OK, "", TOOL_OK); + add_button_tool(DLG_FINDREC, TR("Ricerca"), TOOL_FINDREC); + add_button_tool(DLG_NULL, "", 0); + add_button_tool(DLG_HELP, TR("Help"), TOOL_HELP); + add_button_tool(DLG_NULL, "", 0); + add_button_tool(DLG_CANCEL, "", TOOL_CANCEL); + add_string(DLG_USER, 0, "", 1, 1, 260, "B", 56); + set_handlers(); } bool TMenu_application::choose_study() @@ -1682,12 +1720,7 @@ bool TMenu_application::choose_study() // Disbilita le voci di personalizzazione enable_options_menu(false); - TMask m(TR("Scelta studio"), 1, 62, 4); - m.add_button(DLG_OK, 0, "", -12, -1, 10, 2); - m.add_button(DLG_CANCEL, 0, "", -22, -1, 10, 2); - m.add_string(DLG_USER, 0, PR("Studio "), 1, 1, 50, "B"); - m.set_handler(DLG_USER, study_handler); - m.set(DLG_USER, prefix().get_studio()); + TStudy_mask m; bool ok = m.run() == K_ENTER; if (ok) { diff --git a/ba/ba0103.cpp b/ba/ba0103.cpp index 264ac7779..78b48349e 100755 --- a/ba/ba0103.cpp +++ b/ba/ba0103.cpp @@ -10,6 +10,7 @@ #include #include #include +#include enum { DLG_TREE = 101, DLG_LOOK = 102, DLG_MAIN = 103 }; @@ -293,8 +294,48 @@ void TBook_window::erode_antipa() void TBook_window::set_logo(const char* logo) { _logo.load(logo); - if (_logo.ok() && can_be_transparent(_logo)) - _logo.convert_transparent_color(NORMAL_BACK_COLOR); + if (is_power_station()) + { + const short w = _logo.width(); + const short h = _logo.height(); + const short h2 = h/4; + + XVT_IMAGE big = xvt_image_create(XVT_IMAGE_RGB, w, h+h2, 0); + for (short y = 0; y < h; y++) + { + for (short x = 0; x < w; x++) + { + const COLOR rgb = _logo.get_pixel(x, y); + xvt_image_set_pixel(big, x, y, rgb); + } + } + for (short y = 0; y < h2; y++) + { + const double weight = 0.5+double(y)/double(2*h2); + const short sy = h-y*h/h2-1; + for (short x = 0; x < w; x++) + { + const short sx = x-2*y; + COLOR col = MASK_LIGHT_COLOR; + if (sx >= 0) + { + COLOR rgb = xvt_image_get_pixel(big, sx, sy); + const int r = XVT_COLOR_GET_RED(rgb); + const int g = XVT_COLOR_GET_GREEN(rgb); + const int b = XVT_COLOR_GET_BLUE(rgb); + if (r != g || g != b) + col = blend_colors(col, rgb, weight); + } + xvt_image_set_pixel(big, x, y+h, col); + } + } + _logo.set(big); + } + else + { + if (_logo.ok() && can_be_transparent(_logo)) + _logo.convert_transparent_color(NORMAL_BACK_COLOR); + } } TBook_window::TBook_window(int x, int y, int dx, int dy,