diff --git a/xvaga/oswin32.cpp b/xvaga/oswin32.cpp index 54ec7c590..6cd4faf6c 100755 --- a/xvaga/oswin32.cpp +++ b/xvaga/oswin32.cpp @@ -1068,10 +1068,29 @@ bool OsWin32_IsWindowsServer() void OsWin32_NumberFormat(char* str, int size) { + static char decsep = '\0', thosep = '\0'; + + char buf[80] = ""; + if (!decsep) + { + ::GetNumberFormat(LOCALE_USER_DEFAULT, 0, "1936.27", NULL, buf, sizeof(buf)); + decsep = buf[strlen(buf)-3]; + thosep = buf[1] == '9' ? '\0' : buf[1]; + } + if (str && *str) { - char buf[80] = ""; - ::GetNumberFormat(LOCALE_USER_DEFAULT, 0, str, NULL, buf, sizeof(buf)); + int j = 0; + for (int i = 0; str[i]; i++) + { + switch (str[i]) + { + case '.': buf[j++] = decsep; break; + case ',': break; // Ignore thousand separator + default : buf[j++] = str[i]; break; + } + } + buf[j] = '\0'; wxStrncpy(str, buf, size); } } diff --git a/xvaga/xvaga.cpp b/xvaga/xvaga.cpp index c67572827..8242eb204 100755 --- a/xvaga/xvaga.cpp +++ b/xvaga/xvaga.cpp @@ -980,9 +980,14 @@ static FL_STATUS xvt_dm_post_file_ask(FILE_SPEC *fsp, const char *msg, int flags wxString path = fsp->dir.path; wxString name = MakeFileName(fsp->name, fsp->type); wxString extension = fsp->type; - wxString mask = MakeFileName("*", fsp->type); + wxString wild; + if (!extension.IsEmpty() && extension != "*") + wild << "File " << extension << " (*." << extension << ")|*." << extension << "|"; + if (flags & wxFD_OPEN) + wild << "Tutti i file (*.*)|*.*|"; + wild << '|'; - wxString selectedname = wxFileSelector(msg, path, name, extension , mask, flags); + wxString selectedname = wxFileSelector(msg, path, name, extension , wild, flags); if (selectedname.IsEmpty()) return FL_CANCEL; xvt_fsys_convert_str_to_fspec(selectedname, fsp); @@ -994,13 +999,13 @@ static FL_STATUS xvt_dm_post_file_ask(FILE_SPEC *fsp, const char *msg, int flags FL_STATUS xvt_dm_post_file_open(FILE_SPEC *fsp, const char *msg) { - const int flags = wxOPEN | wxFILE_MUST_EXIST; + const int flags = wxFD_OPEN | wxFD_FILE_MUST_EXIST; return xvt_dm_post_file_ask(fsp, msg, flags); } FL_STATUS xvt_dm_post_file_save(FILE_SPEC *fsp, const char *msg) { - const int flags = wxSAVE | wxOVERWRITE_PROMPT; + const int flags = wxFD_SAVE | wxFD_OVERWRITE_PROMPT; return xvt_dm_post_file_ask(fsp, msg, flags); } @@ -2175,15 +2180,18 @@ BOOLEAN xvt_fsys_convert_fspec_to_str(const FILE_SPEC *fs, char *path, int sz_pa BOOLEAN xvt_fsys_convert_str_to_fspec(const char *mbs, FILE_SPEC *fs) { BOOLEAN ok = FALSE; - if (mbs && *mbs && fs != NULL) + if (fs != NULL) { memset(fs, 0, sizeof(FILE_SPEC)); - char volume[_MAX_DRIVE], path[_MAX_PATH]; - xvt_fsys_parse_pathname(mbs, volume, path, fs->name, fs->type, NULL); - wxStrcpy(fs->dir.path, volume); - wxStrcat(fs->dir.path, path); wxStrcpy(fs->creator, "CAMPO"); - ok = fs->name[0] != '\0'; + if (mbs && *mbs) + { + char volume[_MAX_DRIVE], path[_MAX_PATH]; + xvt_fsys_parse_pathname(mbs, volume, path, fs->name, fs->type, NULL); + wxStrcpy(fs->dir.path, volume); + wxStrcat(fs->dir.path, path); + ok = fs->name[0] != '\0'; + } } return ok; } @@ -2960,7 +2968,7 @@ BOOLEAN xvt_rect_intersect(RCT *drctp, const RCT *rctp1, const RCT *rctp2) return yes; } -BOOLEAN xvt_rect_is_empty(const RCT *rct) +BOOLEAN xvt_rect_is_empty(const RCT* rct) { return rct == NULL || (rct->left==rct->right && rct->top==rct->bottom); } @@ -2990,6 +2998,12 @@ void xvt_rect_set_empty(RCT *rctp) rctp->bottom = rctp->top; } +void xvt_rect_set_null(RCT* rctp) +{ + XVT_ASSERT(rctp != NULL); + memset(rctp, 0, sizeof(RCT)); +} + BOOLEAN xvt_rect_set_pos(RCT *rctp, PNT pos) { BOOLEAN ok = rctp != NULL; @@ -4315,9 +4329,20 @@ long xvt_vobj_get_data(WINDOW win) RCT* xvt_vobj_get_outer_rect(WINDOW win, RCT *rctp) { - CAST_WIN(win, w); - const wxRect rct = w.GetRect(); - xvt_rect_set(rctp, rct.x, rct.y, rct.GetRight(), rct.GetBottom()); + if (win != NULL_WIN) + { + if (win == SCREEN_WIN) + xvt_rect_set(rctp, 0, 0, wxSystemSettings::GetMetric(wxSYS_SCREEN_X), wxSystemSettings::GetMetric(wxSYS_SCREEN_Y)); + else + { + CAST_WIN(win, w); + const wxRect rct = w.GetRect(); + xvt_rect_set(rctp, rct.x, rct.y, rct.GetRight(), rct.GetBottom()); + } + } + else + xvt_rect_set_null(rctp); + return rctp; } diff --git a/xvaga/xvt.h b/xvaga/xvt.h index a53d2cc0b..1424ccffb 100755 --- a/xvaga/xvt.h +++ b/xvaga/xvt.h @@ -293,6 +293,7 @@ XVTDLL BOOLEAN xvt_rect_is_empty(const RCT *rctp); 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 void xvt_rect_set_null(RCT* rctp); XVTDLL BOOLEAN xvt_rect_set_pos(RCT *rctp, PNT pos); XVTDLL void xvt_rect_inflate(RCT *rctp, short ix, short iy); diff --git a/xvaga/xvtextra.cpp b/xvaga/xvtextra.cpp index 5180936b8..d685239b5 100755 --- a/xvaga/xvtextra.cpp +++ b/xvaga/xvtextra.cpp @@ -1381,6 +1381,9 @@ bool TEsigner::Init(bool bLoad) return ok = false; xvt_sys_get_profile_string(strConfig, "fd", "Cert_"+m_strUser, "", str, sizeof(str)); + if (*str == '\0') // Se non trova l'utente corrente di riprova con Guest + xvt_sys_get_profile_string(strConfig, "fd", "Cert_Guest", "", str, sizeof(str)); + wxStringTokenizer strDllCert(str, ","); m_strDllFile = strDllCert.GetNextToken(); m_strDllFile.MakeLower(); m_strCertificate = strDllCert.GetNextToken(); @@ -1394,7 +1397,11 @@ bool TEsigner::Init(bool bLoad) m_strTSApwd = strDllCert.GetNextToken(); m_strPolicy = strDllCert.GetNextToken(); m_strTSAcoding = strDllCert.GetNextToken(); + if (m_strTSAcoding.IsEmpty()) + m_strTSAcoding = wxT("binary"); + + if (m_strTSAuri.IsEmpty()) { wxString msg; msg << "Mancano i parametri per la marcatura temporale" @@ -1442,18 +1449,18 @@ bool TEsigner::Sign(const wxString& strInput, wxString& strOutput) if ((m_strPin.IsEmpty() || m_strDllFile.IsEmpty()) && !Init(true)) return false; - const char* ext = strInput.EndsWith(".pdf") ? ".pdf" : ""; + const char* ext = strInput.Lower().EndsWith(".pdf") ? ".pdf.p7m" : ""; if (strOutput.IsEmpty()) - strOutput = strInput.BeforeFirst('.') + ".p7m.pdf"; + strOutput = strInput + ".p7m"; + ::wxRemoveFile(strOutput); // Altrimenti la fantastica dll s'incazza come una biscia - wxString strFile = strOutput; - strFile = strFile.BeforeLast('.'); + const wxString strFile = strOutput.BeforeFirst('.'); int res = 0; - if (m_strDllFile.EndsWith(".dll")) + if (m_strDllFile.Lower().EndsWith(".dll")) { - if (m_bMark && !m_strTSAcoding.IsEmpty()) // Firma con marcatura temporale + if (m_bMark && !m_strTSAuri.IsEmpty()) // Firma con marcatura temporale { res = _SignPDF("S", "T", // "S"ignature with "T"oken or smartcard (char*)(const char*)strInput, (char*)(const char*)strFile, @@ -1474,11 +1481,24 @@ bool TEsigner::Sign(const wxString& strInput, wxString& strOutput) } else { - res = _SignPDF("S", "P", // "S"ignature with "P"fx file - (char*)(const char*)strInput, (char*)(const char*)strFile, - NULL, (char*)ext, NULL, NULL, (char*)(const char*)m_strDllFile, NULL, - (char*)(const char*)m_strPin, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL); + if (m_bMark && !m_strTSAuri.IsEmpty()) // Firma con marcatura temporale + { + res = _SignPDF("S", "P", // "S"ignature with "P"fx file + (char*)(const char*)strInput, (char*)(const char*)strFile, + NULL, (char*)ext, NULL, NULL, (char*)(const char*)m_strDllFile, NULL, + (char*)(const char*)m_strPin, NULL, NULL, + (char*)(const char*)m_strTSAuri, (char*)(const char*)m_strTSAuser, + (char*)(const char*)m_strTSApwd, (char*)(const char*)m_strPolicy, + (char*)(const char*)m_strTSAcoding, NULL); + } + else + { + res = _SignPDF("S", "P", // "S"ignature with "P"fx file + (char*)(const char*)strInput, (char*)(const char*)strFile, + NULL, (char*)ext, NULL, NULL, (char*)(const char*)m_strDllFile, NULL, + (char*)(const char*)m_strPin, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL); + } } if (res == 0) diff --git a/xvaga/xvtpdf.cpp b/xvaga/xvtpdf.cpp index 9f190d48d..a93a1ebfb 100755 --- a/xvaga/xvtpdf.cpp +++ b/xvaga/xvtpdf.cpp @@ -919,8 +919,8 @@ void TwxPDFDC::SetPen( const wxPen& pen ) wxString strScope = m_PDFlib->PDF_get_parameter(m_p, "scope", 0); if (strScope != "document") { - double dWidth = m_pen.GetWidth(); - if (dWidth <= 0) dWidth = 1; + const int nWidth = m_pen.GetWidth(); + const double dWidth = nWidth <= 0 ? 1 : nWidth; m_PDFlib->PDF_setlinewidth(m_p, dWidth); if (solid) m_PDFlib->PDF_setdash(m_p, 0, 0); diff --git a/xvaga/xvtwin.cpp b/xvaga/xvtwin.cpp index 5ed4ca550..180726505 100755 --- a/xvaga/xvtwin.cpp +++ b/xvaga/xvtwin.cpp @@ -580,7 +580,7 @@ void TwxWindow::OnChar(wxKeyEvent& evt) case WXK_NUMPAD9: evt.Skip(); return; - case WXK_NUMPAD_DECIMAL: // Arriva solo dalla 3.6.3 in poi + case WXK_NUMPAD_DECIMAL: // Arriva solo dalla 2.6.3 in poi case WXK_DECIMAL: // ??? Arriva sia '.' sia WXK_DECIMAL=340 if (nSkipNextDotKey == 0) {