diff --git a/xvaga/xvaga.cpp b/xvaga/xvaga.cpp index 70a407720..91cba9ef9 100755 --- a/xvaga/xvaga.cpp +++ b/xvaga/xvaga.cpp @@ -41,12 +41,12 @@ // Funzione interna di utilita' MENU_ITEM* xvt_menu_duplicate_tree(const MENU_ITEM* m); -XVT_CONFIG* _config_ = NULL; wxWindow* _task_win = NULL; wxWindow* _mouse_trapper = NULL; RCT _startup_rect = { 0,0,0,0 }; -wxString* _startup_dir = NULL; +wxString _startup_dir; wxString _strDefaultStatbarText; +wxString _appl_name; static wxHashTable _nice_windows; static wxHashTable _nice_icons; @@ -56,6 +56,9 @@ static XVT_ERRMSG_HANDLER _error_handler = NULL; #define XVT_ASSERT(test) assert_box((test), __LINE__, __FILE__ ) +const wxString& _GetAppTitle() +{ return _appl_name; } + void assert_box(bool test, int line, const char * file) { if (!test) @@ -63,9 +66,9 @@ void assert_box(bool test, int line, const char * file) bool display = (_error_handler == NULL) || (_error_handler(SEV_FATAL, NULL) == FALSE); if (display) { - const wxString strMessage = wxString::Format("Sorry, the application passed some invalid parameters on line %d file %s.", line, file); - const wxString strCaption = "Emulated XVT Error "; - ::wxMessageBox(strMessage, strCaption, wxOK|wxICON_ERROR); + wxString strMessage; + strMessage.Printf("Sorry, the application passed some invalid parameters on line %d file %s.", line, file); + ::wxMessageBox(strMessage, _GetAppTitle(), wxOK|wxICON_ERROR); } } } @@ -110,7 +113,7 @@ wxRect NormalizeRCT(const RCT* prct) wxString GetResourceIni() { wxString strName; - strName = *_startup_dir; + strName = _startup_dir; strName += "/res/resource.ini"; return strName; } @@ -125,12 +128,12 @@ wxString GetResourceName(const char* type, int rid) wxString val; if (ini.Read(wxString::Format("%d", rid), &val)) { - strName = *_startup_dir; + strName = _startup_dir; strName += "/custom/"; strName += val; if (!wxFileExists(strName)) { - strName = *_startup_dir; + strName = _startup_dir; strName += "/res/"; strName += val; } @@ -1362,7 +1365,7 @@ void xvt_app_create(int argc, char **argv, unsigned long flags, #endif _task_win_handler = eh; - _config_ = config; + _appl_name = config->appl_name; const wxString title = config->taskwin_title; @@ -1450,7 +1453,7 @@ void xvt_app_create(int argc, char **argv, unsigned long flags, if (ret != 0) { // Simula main loop - xvt_app_process_pending_events(); + xvt_app_process_pending_events(); } a->ExitMainLoop(); // Non entrare nel main loop di wxWindows } @@ -1479,9 +1482,8 @@ void xvt_app_process_pending_events(void) if (a != NULL) { while (a->Pending()) - a->Dispatch(); - - a->Yield(true); + a->Dispatch(); + a->Yield(true); } } @@ -1536,14 +1538,12 @@ char* xvt_cb_get_data(CB_FORMAT cbfmt, char *name, long *sizep) BOOLEAN xvt_cb_has_format(CB_FORMAT fmt, char *name) { - BOOLEAN ok = fmt == CB_TEXT && wxTheClipboard->IsSupported(wxDF_TEXT); - return ok; + return (fmt == CB_TEXT) && wxTheClipboard->IsSupported(wxDF_TEXT); } BOOLEAN xvt_cb_open(BOOLEAN writing) { - wxTheClipboard->Open(); - return TRUE; + return wxTheClipboard->Open(); } BOOLEAN xvt_cb_put_data(CB_FORMAT cbfmt, char *name, long size, PICTURE pic) @@ -1737,16 +1737,6 @@ BOOLEAN xvt_dongle_sl_write_block(unsigned short reg, unsigned short size, const // Common dialogs /////////////////////////////////////////////////////////// -wxString _GetAppTitle() -{ - wxString strTitle; - if (_config_ != NULL) - strTitle = _config_->appl_name; - else - strTitle = "CAMPO"; - return strTitle; -} - COLOR xvt_dm_post_choose_color(WINDOW win, COLOR xc) { CAST_COLOR(xc, wc); @@ -1772,7 +1762,6 @@ COLOR xvt_dm_post_choose_color(WINDOW win, COLOR xc) return xc; } - class TwxCalendarDlg : public wxDialog { enum { ID_CAL = 1883 }; @@ -1790,7 +1779,7 @@ public: }; BEGIN_EVENT_TABLE(TwxCalendarDlg, wxDialog) - EVT_CALENDAR(wxID_ANY, TwxCalendarDlg::OnCalendar) + EVT_CALENDAR(wxID_ANY, TwxCalendarDlg::OnCalendar) END_EVENT_TABLE() void TwxCalendarDlg::OnCalendar(wxCalendarEvent& event) @@ -1874,7 +1863,7 @@ BOOLEAN xvt_dm_post_speech(const char* text, int priority, BOOLEAN async) return ok; } -ASK_RESPONSE xvt_dm_post_ask(const char* Btn1, const char*Btn2, const char* Btn3, const char* fmt) +ASK_RESPONSE xvt_dm_post_ask(const char* Btn1, const char* Btn2, const char* Btn3, const char* fmt) { int nFlags = wxCENTRE | wxICON_QUESTION | wxYES_NO; if (Btn3 == NULL) @@ -1886,12 +1875,11 @@ ASK_RESPONSE xvt_dm_post_ask(const char* Btn1, const char*Btn2, const char* Btn3 nFlags |= wxCANCEL; xvt_dm_post_speech(fmt, 3, TRUE); - const int answer = wxMessageBox(fmt, _GetAppTitle(), nFlags); - + const int answer = ::wxMessageBox(fmt, _GetAppTitle(), nFlags); switch(answer) { - case wxYES: xvt_dm_post_speech("si", 7, TRUE); break; - case wxNO : xvt_dm_post_speech("no", 7, TRUE); break; + case wxYES: xvt_dm_post_speech("si", 7, TRUE); break; + case wxNO : xvt_dm_post_speech("no", 7, TRUE); break; default : xvt_dm_post_speech("annulla", 7, TRUE); break; } @@ -1996,14 +1984,14 @@ BOOLEAN xvt_dm_post_font_sel(WINDOW win, XVT_FNTID font_id, PRINT_RCD *precp, un void xvt_dm_post_message(const char *fmt) { xvt_dm_post_speech(fmt, 2, TRUE); - wxMessageBox(fmt, _GetAppTitle(), wxOK | wxCENTRE | wxICON_INFORMATION); + ::wxMessageBox(fmt, _GetAppTitle(), wxOK | wxCENTRE | wxICON_INFORMATION); xvt_dm_post_speech("OK", 7, TRUE); } void xvt_dm_post_note(const char *fmt) { xvt_dm_post_speech(fmt, 2, TRUE); - wxMessageBox(fmt, _GetAppTitle(), wxOK | wxCENTRE | wxICON_EXCLAMATION); + ::wxMessageBox(fmt, _GetAppTitle(), wxOK | wxCENTRE | wxICON_EXCLAMATION); xvt_dm_post_speech("OK", 7, TRUE); } @@ -2018,7 +2006,7 @@ char* xvt_dm_post_string_prompt(const char* message, char* response, int respons void xvt_dm_post_warning(const char *fmt) { xvt_dm_post_speech(fmt, 1, TRUE); - wxMessageBox(fmt, _GetAppTitle(), wxOK | wxCENTRE | wxICON_EXCLAMATION); + ::wxMessageBox(fmt, _GetAppTitle(), wxOK | wxCENTRE | wxICON_EXCLAMATION); xvt_dm_post_speech("OK", 7, TRUE); } @@ -2320,6 +2308,47 @@ void xvt_dwin_draw_arc(WINDOW win, const RCT* r, int sx, int sy, int ex, int ey) } } +void xvt_dwin_draw_gradient_circular(WINDOW win, const RCT* r, COLOR col1, COLOR col2, const PNT* center) +{ + if (r != NULL) + { + CAST_DC(win, dc); + const wxRect rect = NormalizeRCT(r); + CAST_COLOR(col1, color1); + CAST_COLOR(col2, color2); + if (center != NULL) + dc.GradientFillConcentric(rect, color1, color2, wxPoint(center->h, center->v)); + else + dc.GradientFillConcentric(rect, color1, color2); + } +} + +void xvt_dwin_draw_gradient_linear(WINDOW win, const RCT* r, COLOR col1, COLOR col2, int angle) +{ + if (r != NULL) + { + CAST_DC(win, dc); + const wxRect rect = NormalizeRCT(r); + CAST_COLOR(col1, color1); + CAST_COLOR(col2, color2); + + angle %= 360; + if (angle < 0) + angle += 360; + wxDirection dir = wxDOWN; + switch (angle / 90) + { + case 0: dir = wxRIGHT; break; + case 1: dir = wxUP; break; + case 2: dir = wxLEFT; break; + default: dir = wxDOWN; break; + } + + dc.GradientFillLinear(rect, color1, color2, dir); + } +} + + void xvt_dwin_draw_icon(WINDOW win, int x, int y, int rid) { wxIcon* ico = ::GetIconResource(rid); @@ -3036,9 +3065,9 @@ BOOLEAN xvt_fsys_convert_str_to_fspec(const char *mbs, FILE_SPEC *fs) void xvt_fsys_get_default_dir(DIRECTORY *dirp) { - if (_startup_dir == NULL) - _startup_dir = new wxString(::wxGetCwd()); - xvt_fsys_convert_str_to_dir(*_startup_dir, dirp); + if (_startup_dir.IsEmpty()) + _startup_dir = ::wxGetCwd(); + xvt_fsys_convert_str_to_dir(_startup_dir, dirp); } BOOLEAN xvt_fsys_get_dir(DIRECTORY *dirp) @@ -3355,7 +3384,7 @@ XVT_IMAGE xvt_image_read(const char* filenamep) wxString name; if (isalpha(filenamep[0u])) { - name = *_startup_dir; + name = _startup_dir; name += "/"; } name += filenamep; @@ -3733,6 +3762,15 @@ BOOLEAN xvt_rect_set_pos(RCT *rctp, PNT pos) return ok; } +void xvt_rect_inflate(RCT *rctp, short ix, short iy) +{ + if (rctp != NULL) + { + rctp->left -= ix; rctp->right += ix; + rctp->top -= iy; rctp->bottom += iy; + } +} + /////////////////////////////////////////////////////////// // Resource management /////////////////////////////////////////////////////////// @@ -4741,7 +4779,15 @@ long xvt_vobj_get_attr(WINDOW win, long data) case ATTR_WIN_PM_DRAWABLE_TWIN: ret = TRUE; break; - default: SORRY_BOX(); break; + case ATTR_ICON_WIDTH: + ret = wxSystemSettings::GetMetric(wxSYS_ICON_X); + break; + case ATTR_ICON_HEIGHT: + ret = wxSystemSettings::GetMetric(wxSYS_ICON_Y); + break; + default: + SORRY_BOX(); + break; } return ret; } diff --git a/xvaga/xvintern.h b/xvaga/xvintern.h index c52f56100..14cf14a78 100755 --- a/xvaga/xvintern.h +++ b/xvaga/xvintern.h @@ -86,6 +86,6 @@ public: virtual ~TPrintDC(); }; -wxString _GetAppTitle(); +const wxString& _GetAppTitle(); #endif diff --git a/xvaga/xvt.h b/xvaga/xvt.h index f0752ae87..35d085b4c 100755 --- a/xvaga/xvt.h +++ b/xvaga/xvt.h @@ -95,6 +95,8 @@ XVTDLL BOOLEAN xvt_dongle_sl_write_block(unsigned short reg, unsigned short size XVTDLL void xvt_dwin_clear(WINDOW win, COLOR col); XVTDLL void xvt_dwin_draw_arc(WINDOW win, const RCT* r, int sx, int sy, int ex, int ey); XVTDLL void xvt_dwin_draw_icon(WINDOW win, int x, int y, int rid); +XVTDLL void xvt_dwin_draw_gradient_circular(WINDOW win, const RCT* r, COLOR col1, COLOR col2, const PNT* center); // Added by AGA +XVTDLL void xvt_dwin_draw_gradient_linear(WINDOW win, const RCT* r, COLOR col1, COLOR col2, int angle); // Added by AGA XVTDLL void xvt_dwin_draw_image_on_pdf(WINDOW win, const char* name, RCT* dest); // Added by AGA XVTDLL void xvt_dwin_draw_image(WINDOW win, XVT_IMAGE image, RCT* dest, RCT* source); XVTDLL void xvt_dwin_draw_oval(WINDOW Win, const RCT* r); @@ -262,6 +264,7 @@ XVTDLL void xvt_rect_offset(RCT *rctp, short dh, short dv); XVTDLL void xvt_rect_set(RCT *rctp, short left, short top, short right, short bottom); XVTDLL void xvt_rect_set_empty(RCT *rctp); XVTDLL BOOLEAN xvt_rect_set_pos(RCT *rctp, PNT pos); +XVTDLL void xvt_rect_inflate(RCT *rctp, short ix, short iy); XVTDLL void xvt_res_free_menu_tree(MENU_ITEM* tree); XVTDLL XVT_IMAGE xvt_res_get_image(int rid); diff --git a/xvaga/xvt_type.h b/xvaga/xvt_type.h index 807951a35..ff96a2259 100755 --- a/xvaga/xvt_type.h +++ b/xvaga/xvt_type.h @@ -450,12 +450,11 @@ CB_PICT, /* encapsulated picture */ CB_APPL /* app's own (must have name) */ } CB_FORMAT; -typedef struct s_xvt_config { - -short menu_bar_ID; /* task menubar ResID */ -short about_box_ID; /* default aboutbox ResID */ -char *base_appl_name; /* application's "filename" */ -char *appl_name; /* application's name */ -char *taskwin_title; /* title for task window */ - +typedef struct s_xvt_config +{ + short menu_bar_ID; /* task menubar ResID */ + short about_box_ID; /* default aboutbox ResID */ + const char* base_appl_name; /* application's "filename" */ + const char* appl_name; /* application's name */ + const char* taskwin_title; /* title for task window */ } XVT_CONFIG;