diff --git a/xvaga/xvaga.cpp b/xvaga/xvaga.cpp index 51dc93b3c..cf9ccdea7 100755 --- a/xvaga/xvaga.cpp +++ b/xvaga/xvaga.cpp @@ -67,8 +67,6 @@ void xvt_sys_sorry_box(const char * file,int line) } } -#define CAST_WIN(win,w) XVT_ASSERT(win != NULL_WIN); wxWindow& w = *(wxWindow*)win - static bool RectIntersect(const wxRect &rect1, const wxRect &rect2) { if (rect1.GetRight() < rect2.GetLeft()) @@ -93,22 +91,33 @@ wxRect NormalizeRCT(const RCT* prct) return rct; } -wxString GetResourceName(const char* type, int rid) +wxString GetResourceIni() { wxString strName; strName = *_startup_dir; strName += "/res/resource.ini"; - wxFileConfig ini("", "", strName); + return strName; +} + +wxString GetResourceName(const char* type, int rid) +{ + wxFileConfig ini("", "", GetResourceIni()); - strName = "/"; strName += type; strName += "s"; + wxString strName = "/"; strName += type; strName += "s"; ini.SetPath(strName); wxString val; if (ini.Read(wxString::Format("%d", rid), &val)) { strName = *_startup_dir; - strName += "/res/"; + strName += "/custom/"; strName += val; + if (!wxFileExists(strName)) + { + strName = *_startup_dir; + strName += "/res/"; + strName += val; + } } else strName.Empty(); @@ -725,7 +734,7 @@ void TwxWindow::OnChar(wxKeyEvent& event) if (event.AltDown()) { e.v.chr.control = TRUE; - if (k >= 'a' && k <= 'z') + if (isalnum(k)) k = toupper(k); else { @@ -970,6 +979,7 @@ TwxWindow::~TwxWindow() _nice_windows.Delete((WINDOW)this); } +#define CAST_WIN(win,w) XVT_ASSERT(win != NULL_WIN); wxWindow& w = *(wxWindow*)win #define CAST_TWIN(win,w) XVT_ASSERT(win != NULL_WIN); TwxWindow& w = *(TwxWindow*)win; XVT_ASSERT(_task_win != &w); #define CAST_TDC(win,dc) XVT_ASSERT(win != NULL_WIN); TDC& dc = _dc_map.GetTDC((TwxWindow*)win); #define CAST_DC(win,dc) XVT_ASSERT(win != NULL_WIN); wxDC& dc = _dc_map.GetDC((TwxWindow*)win); @@ -1199,7 +1209,7 @@ void xvt_app_create(int argc, char **argv, unsigned long flags, style |= wxMAXIMIZE; _task_win = new TTaskWin(NULL, ICON_RSRC, title, pos, size, style); - _nice_windows.Put((long)_task_win, _task_win); + _nice_windows.Put((WINDOW)_task_win, _task_win); wxMenu* Menus[3]; wxString Title[3]; @@ -2346,17 +2356,18 @@ void xvt_dwin_set_std_cpen(WINDOW win, long flag) void xvt_dwin_draw_line(WINDOW win, PNT pnt) { - CAST_TDC(win, dc); + CAST_TDC(win, tdc); const wxPoint to(pnt.h, pnt.v); - if (dc._pnt != to) - dc.GetDC().DrawLine(dc._pnt, to); - dc.GetDC().DrawPoint(to); - dc._pnt = to; + wxDC& dc = tdc.GetDC(); + if (tdc._pnt != to) + dc.DrawLine(tdc._pnt, to); + dc.DrawPoint(to); + tdc._pnt = to; } void xvt_dwin_update(WINDOW win) { - CAST_TWIN(win, w); + CAST_WIN(win, w); w.Update(); } @@ -3310,14 +3321,12 @@ static void FillMenuItem(const wxString& strValue, MENU_ITEM* mi) MENU_ITEM* xvt_res_get_menu(int rid) { - wxString strName; - strName = *_startup_dir; - strName += "/res/resource.ini"; - wxFileConfig ini("", "", strName); + wxFileConfig ini("", "", GetResourceIni()); const int MAX_MENU = 16; MENU_ITEM* TheMenu = (MENU_ITEM*)xvt_mem_zalloc(sizeof(MENU_ITEM)*MAX_MENU); + wxString strName; if (rid >= 10000 && rid < 10100) { wxFileName::SplitPath(wxTheApp->argv[0], NULL, &strName, NULL); @@ -3506,12 +3515,14 @@ static void AddWinToList(SLIST list, WINDOW win) SLIST xvt_scr_list_wins() { SLIST list = xvt_slist_create(); + _nice_windows.BeginFind(); - for (wxNode *node = _nice_windows.Next(); node; node = _nice_windows.Next()) - { - WINDOW win = (WINDOW)node->GetData(); - AddWinToList(list, win); + for (wxNode* node = _nice_windows.Next(); node; node = _nice_windows.Next()) + { + wxObject* pWin = node->GetData(); + AddWinToList(list, (WINDOW)pWin); } + return list; } @@ -4122,15 +4133,6 @@ long xvt_vobj_get_attr(WINDOW win, long data) ret = (long)_error_handler; break; case ATTR_NATIVE_GRAPHIC_CONTEXT: -/* - if (_nice_windows.Get(win) != NULL) - { -#ifdef WIN32 - CAST_DC(win, dc); - ret = dc.GetHDC(); -#endif - } -*/ SORRY_BOX(); // Obsoleto e non piu' usato break; case ATTR_NATIVE_WINDOW: diff --git a/xvaga/xvt.h b/xvaga/xvt.h index ec24c0817..164fe809b 100755 --- a/xvaga/xvt.h +++ b/xvaga/xvt.h @@ -215,7 +215,8 @@ XVTDLL void xvt_palet_set_tolerance(XVT_PALETTE p, int t); XVTDLL void xvt_print_close(void); XVTDLL BOOLEAN xvt_print_close_page(PRINT_RCD *precp); XVTDLL PRINT_RCD* xvt_print_create(int *sizep); -XVTDLL PRINT_RCD* xvt_print_create_by_name(int* sizep, const char* name); +XVTDLL PRINT_RCD* xvt_print_create_by_name(int* sizep, const char* name); // Added by Aga +XVTDLL int xvt_print_get_name(PRINT_RCD *precp, char* name, int sz_s); // Added by Aga XVTDLL WINDOW xvt_print_create_win(PRINT_RCD *precp, char *title); XVTDLL void xvt_print_destroy(PRINT_RCD *precp); XVTDLL RCT* xvt_print_get_next_band(void); diff --git a/xvaga/xvtextra.cpp b/xvaga/xvtextra.cpp index c6e514899..0aa1eff3d 100755 --- a/xvaga/xvtextra.cpp +++ b/xvaga/xvtextra.cpp @@ -254,7 +254,6 @@ BOOLEAN xvt_dm_post_page_setup(PRINT_RCD* precp) TPRINT_RCD* rcd = (TPRINT_RCD*)precp; wxPageSetupData& pdd = dlg.GetPageSetupData(); - // pdd.EnablePrinter(false); // Vieta di cambiare stampante wxPrintData& data = pdd.GetPrintData(); #ifdef WIN32 @@ -289,12 +288,7 @@ long xvt_fmap_get_family_sizes(PRINT_RCD *precp, char *family, long *size_array, { #ifdef WIN32 TwxPrintOut* po = m_PrintoutCache.Get((TPRINT_RCD*)precp); - if (po->HasBadDriver()) - { - HDC hdc = ::GetDC(NULL); // Screen DC - size = OsWin32_EnumerateSizes((unsigned int)hdc, family, size_array, scalable, max_sizes); - } - else + if (!po->HasBadDriver()) size = OsWin32_EnumerateSizes(po->GetDC()->GetHDC(), family, size_array, scalable, max_sizes); #else size = OsLinux_EnumerateSizes(family, size_array, scalable, max_sizes); @@ -315,11 +309,7 @@ long xvt_fmap_get_families(PRINT_RCD *precp, char **family_array, long max_famil TwxPrintOut* po = m_PrintoutCache.Get((TPRINT_RCD*)precp); size = OsWin32_EnumerateFamilies(po->GetDC()->GetHDC(), family_array, max_families); if (size == 0) - { po->SetBadDriver(true); - HDC hdc = ::GetDC(NULL); // Screen DC - size = OsWin32_EnumerateFamilies((unsigned int)hdc, family_array, max_families); - } #else size = OsLinux_EnumerateFamilies(family_array, max_families); #endif @@ -447,6 +437,36 @@ BOOLEAN xvt_print_is_valid(PRINT_RCD* precp) return ok; } +int xvt_print_get_name(PRINT_RCD* precp, char* name, int sz_s) +{ +#ifdef WIN32 + wxString n = ((const char*)precp) + 4; + if (n.Length() > 30) + { + SLIST plist = xvt_print_list_devices(); + for (SLIST_ELT pitem = xvt_slist_get_first(plist); + pitem != NULL; pitem = xvt_slist_get_next(plist, pitem)) + { + const wxString pname = xvt_slist_get(plist, pitem, NULL); + if (pname.StartsWith(n)) + { + n = pname; + break; + } + } + xvt_slist_destroy(plist); + } + if (name != NULL && sz_s > 0) + { + strncpy(name, n, sz_s); + name[sz_s-1] = '\0'; + } + return n.Length(); +#else + return 0; // TBI +#endif +} + BOOLEAN xvt_print_open(void) { return m_po == NULL; @@ -498,13 +518,14 @@ BOOLEAN xvt_print_start_thread(BOOLEAN(*print_fcn)(long), long data) DestroyAbortWindow(); #ifdef WIN32 + // Stampa un line feed aggiuntivo nella stampa su generica solo testo in Win 98 int w, h; m_po->GetPPIPrinter(&w, &h); - if (h == 6) + if (h == 6) // Solo Win 98 torna 6 pixel per pollice = 1 pixel per riga { wxDC* dc = m_po->GetDC(); dc->StartPage(); - OsWin32_SpoolRow("\n\n", 1, dc->GetHDC()); + OsWin32_SpoolRow("\n\n", 1, dc->GetHDC()); // Probabilmente basta "\n" (visto che poi specifichiamo 1) ma non ci fidiamo dc->EndPage(); } #endif