From 7cfd6812038e5fbe4ffe08e9db3534d1e3d52fa9 Mon Sep 17 00:00:00 2001 From: guy Date: Wed, 10 Jun 1998 14:25:36 +0000 Subject: [PATCH] automask.* Supporto automask all'interno degli spreadsheet default.url Aggiunto bottone elabora defmask.h Aggiunto DLG_ELABORA urldefid.h Aggiunto BMP_ELABORA dongle.cpp Corretta procedura di connessione a chiave o server expr.* Corretti operatori di conversione a TString, real e bool form.cpp Modificata indentazione isamrpc.cpp Aggiunto riconoscimento stringa localhost netsock.cpp Aggiunto riconoscimento stringa localhost relation.cpp Usato operatore as_string delle espresioni strings.cpp Migliorato assegnamento git-svn-id: svn://10.65.10.50/trunk@6735 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- include/automask.cpp | 56 ++++++++++++++++++++++++++++++++++---------- include/automask.h | 2 ++ include/default.url | 1 + include/defmask.h | 2 +- include/dongle.cpp | 2 +- include/expr.cpp | 7 ++---- include/expr.h | 14 +++++------ include/form.cpp | 2 +- include/isamrpc.cpp | 2 +- include/netsock.cpp | 22 ++++++++--------- include/relation.cpp | 10 ++++---- include/strings.cpp | 16 +++++++++---- include/urldefid.h | 1 + include/varrec.cpp | 3 ++- 14 files changed, 92 insertions(+), 48 deletions(-) diff --git a/include/automask.cpp b/include/automask.cpp index d27e791c1..c971d7b64 100755 --- a/include/automask.cpp +++ b/include/automask.cpp @@ -23,26 +23,27 @@ bool TAutomask::error_box(const char* fmt, ...) return FALSE; } -bool TAutomask::universal_handler(TMask_field& f, KEY key) +TField_event TAutomask::key2event(TMask_field& f, KEY key) const { - TAutomask& wm = (TAutomask&)f.mask(); - TOperable_field& of = (TOperable_field&)f; TField_event fe = fe_null; - long jolly = key; switch (key) { case K_TAB: - if (wm.is_running() || wm.get_sheet() != NULL) { - if (f.focusdirty() && f.is_edit()) - fe = fe_modify; + const TMask& wm = f.mask(); + if (wm.is_running() || wm.get_sheet() != NULL) + { + if (f.focusdirty() && f.is_edit()) + fe = fe_modify; + } + else + fe = fe_init; } - else - fe = fe_init; break; case K_SPACE: if (!f.is_edit()) { + const TMask& wm = f.mask(); if (wm.is_running()) { if (f.is_kind_of(CLASS_BUTTON_FIELD)) @@ -65,9 +66,29 @@ bool TAutomask::universal_handler(TMask_field& f, KEY key) fe = fe_null; break; } - return fe == fe_null ? TRUE : wm.on_field_event(of, fe, jolly); + return fe; } +bool TAutomask::universal_handler(TMask_field& f, KEY key) +{ + TOperable_field& of = (TOperable_field&)f; + TAutomask& am = (TAutomask&)of.mask(); + TField_event fe = am.key2event(of, key); + return fe == fe_null ? TRUE : am.on_field_event(of, fe, 0); +} + +bool TAutomask::insheet_universal_handler(TMask_field& f, KEY key) +{ + TMask& m = f.mask(); + TSheet_field& s = *m.get_sheet(); + TAutomask& am = (TAutomask&)s.mask(); + + TOperable_field& of = (TOperable_field&)f; + TField_event fe = am.key2event(of, key); + return fe == fe_null ? TRUE : am.on_field_event(of, fe, m.number()); +} + + bool TAutomask::universal_notifier(TSheet_field& s, int row, KEY key) { TAutomask& wm = (TAutomask&)s.mask(); @@ -111,11 +132,22 @@ void TAutomask::set_handlers() { f.set_handler(universal_handler); if (f.is_sheet()) + { ((TSheet_field&)f).set_notify(universal_notifier); - } - } + + TMask& m = ((TSheet_field&)f).sheet_mask(); + for (int j = m.fields()-1; j >= 0; j--) + { + TMask_field& g = m.fld(j); + if (g.is_operable()) + g.set_handler(insheet_universal_handler); + } + } + } + } } + TAutomask::TAutomask(const char* name, int num) : TMask(name, num) { diff --git a/include/automask.h b/include/automask.h index 3ebf91352..c2e6c0a26 100755 --- a/include/automask.h +++ b/include/automask.h @@ -14,10 +14,12 @@ class TAutomask : public TMask { private: static bool universal_handler(TMask_field& f, KEY k); + static bool insheet_universal_handler(TMask_field& f, KEY k); static bool universal_notifier(TSheet_field& f, int row, KEY k); protected: void set_handlers(); + TField_event key2event(TMask_field& f, KEY key) const; public: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly) pure; diff --git a/include/default.url b/include/default.url index f8dddae14..5dfcbf331 100755 --- a/include/default.url +++ b/include/default.url @@ -148,6 +148,7 @@ image BMP_LINK QRESDIR"link.bmp" image BMP_PRINT QRESDIR"print.bmp" image BMP_SETPRINT QRESDIR"setprint.bmp" image BMP_RECALC QRESDIR"recalc.bmp" +image BMP_ELABORA QRESDIR"elabora.bmp" image BMP_OLE QRESDIR"ole.bmp" image BMP_LENTE QRESDIR"lente.bmp" image BMP_FAX QRESDIR"fax.bmp" diff --git a/include/defmask.h b/include/defmask.h index a6538f9b6..d935230e7 100755 --- a/include/defmask.h +++ b/include/defmask.h @@ -28,7 +28,7 @@ #define DLG_PRINT 24 /* TAG del bottone Stampa */ #define DLG_SETPRINT 25 /* TAG del bottone Imposta Stampa */ #define DLG_RECALC 26 /* TAG del bottone Ricalcola */ -#define DLG_ELAB 27 /* TAG del bottone */ +#define DLG_ELABORA 27 /* TAG del bottone */ #define DLG_FAX 28 /* TAG del bottone */ #define DLG_EMAIL 29 /* TAG del bottone */ #define DLG_USER 100 /* TAG del primo controllo definito dall'utente */ diff --git a/include/dongle.cpp b/include/dongle.cpp index d542cdc98..e2929c9f3 100755 --- a/include/dongle.cpp +++ b/include/dongle.cpp @@ -460,7 +460,7 @@ bool TDongle::login(bool test_all_keys) TDongleHardware hw = _hardware; if (hw == _dongle_unknown) { - if (can_try_server() == 3) + if (os_dongle_server_running()) { hw = _dongle_network; } diff --git a/include/expr.cpp b/include/expr.cpp index f530a9adf..ead834276 100755 --- a/include/expr.cpp +++ b/include/expr.cpp @@ -266,7 +266,6 @@ void TExpression::evaluate_user_func(int index, int nparms, TEval_stack& stack, } void TExpression::setvar(const char* varname, const real& val) - { if (_var.getnum(varname) != val) { @@ -277,7 +276,6 @@ void TExpression::setvar(const char* varname, const real& val) void TExpression::setvar(int varnum, const real& val) - { if (_var.getnum(varnum) != val) { @@ -436,7 +434,7 @@ void TExpression::eval() } break; case _match: - { + { const TString & s2 = evalstack.pop_string(); const TString & s1 = evalstack.pop_string(); evalstack.push(real((s1.match(s2)) ? 1.0 : 0.0)); @@ -582,8 +580,7 @@ void TExpression::eval() break; case _len: { - TString s1(evalstack.pop_string()); - + TString& s1 = evalstack.pop_string(); evalstack.push(real(s1.len())); } break; diff --git a/include/expr.h b/include/expr.h index 1200dd554..c314c2189 100755 --- a/include/expr.h +++ b/include/expr.h @@ -78,11 +78,11 @@ enum TCodesym { // @doc INTERNAL - // @class TValue | Classe per la definizione dei valori che possono essere assunti - // dai termini di una espressione o il valore dell'espressione stessa - // - // @base public | TObject - class TValue : public TObject +// @class TValue | Classe per la definizione dei valori che possono essere assunti +// dai termini di una espressione o il valore dell'espressione stessa +// +// @base public | TObject +class TValue : public TObject // @author:(INTERNAL) Sandro { @@ -110,8 +110,8 @@ public: const real& number() const { return _r; } // @cmember Ritorna il valore come stringa - const char* string() const - { return (const char*) _s;} + const TString& string() const + { return _s;} // @cmember Setta il valore passato come real void set(const real& val) { _r = val; _s = val.string(); _t = _numexpr; } diff --git a/include/form.cpp b/include/form.cpp index fc366af7c..e6998ec63 100755 --- a/include/form.cpp +++ b/include/form.cpp @@ -758,7 +758,7 @@ bool TForm_item::do_message(int num) TToken_string& messaggio = message(num); if (messaggio.empty_items()) return FALSE; - TToken_string msg(16, ','); + TToken_string msg(80, ','); for (const char* m = messaggio.get(0); m; m = messaggio.get()) { msg = m; diff --git a/include/isamrpc.cpp b/include/isamrpc.cpp index ebbf6f262..db4920c20 100755 --- a/include/isamrpc.cpp +++ b/include/isamrpc.cpp @@ -222,7 +222,7 @@ bool rpc_UserLogin(const char* server, const char* user, return FALSE; } - const bool local = server == NULL || *server == '\0'; + const bool local = server == NULL || *server == '\0' || stricmp(server, "localhost") == 0; TString name(40); if (local) name = "locale"; diff --git a/include/netsock.cpp b/include/netsock.cpp index 74491fba9..d35b7d460 100755 --- a/include/netsock.cpp +++ b/include/netsock.cpp @@ -517,7 +517,7 @@ TConnection* TSocketClient::OnQueryConnection(const char* service, if (cur_socket == NULL) { TString strServer = server; - if (strServer.empty()) + if (strServer.empty() || stricmp(strServer, "localhost") == 0) strServer = "127.0.0.1"; cur_socket = new skstream(strServer, (skstream::service)atoi(service)); @@ -540,7 +540,7 @@ BOOL TSocketClient::Execute(DWORD id, const char* cmd) if (ok) { const int buflen = strlen(cmd)+1; - cur_socket->sync(); + cur_socket->sync(); cur_socket->write(cmd, buflen); cur_socket->flush(); ok = cur_socket->good(); @@ -561,15 +561,15 @@ BOOL TSocketClient::Request(DWORD id, const char* cmd) ok = Execute(id, cmd); if (ok) { - m_dwSize = 0; - cur_socket->read((char*)&m_dwSize, sizeof(m_dwSize)); - ok = m_dwSize > 0; - if (ok) - { - m_pData = new BYTE[m_dwSize]; - cur_socket->read(m_pData, (int)m_dwSize); - ok = cur_socket->good(); - } + m_dwSize = 0; + cur_socket->read((char*)&m_dwSize, sizeof(m_dwSize)); + ok = m_dwSize > 0; + if (ok) + { + m_pData = new BYTE[m_dwSize]; + cur_socket->read(m_pData, (int)m_dwSize); + ok = cur_socket->good(); + } } semaphore = FALSE; diff --git a/include/relation.cpp b/include/relation.cpp index f1cba891f..f0065ca2a 100755 --- a/include/relation.cpp +++ b/include/relation.cpp @@ -228,7 +228,7 @@ const char* TRelationdef::evaluate_expr(int j, const TLocalisamfile& to) expr.setvar(k, to.get(name)); } - const char* val = expr; + const char* val = expr.as_string(); if (*val == '\0' && _altexprs.objptr(j)) { @@ -238,7 +238,7 @@ const char* TRelationdef::evaluate_expr(int j, const TLocalisamfile& to) name = altexpr.varname(k); name.upper(); altexpr.setvar(k, to.get(name)); } - val = altexpr; + val = altexpr.as_string(); } return val; @@ -588,8 +588,10 @@ int TRelation::position_rels( // Le altre funzioni sul record procedono normalmente { - _errors = NOERR; + TString expr; // Stringa di lavoro per la valutazione delle espressioni + _errors = NOERR; + // workhorse: position files for each active relation for (int i = first; i < _reldefs.items(); i++) { @@ -609,7 +611,7 @@ int TRelation::position_rels( // build record for (int j = 0 ; j < rd._fields.items(); j++) // for each field { - TString expr (rd.evaluate_expr(j, to)); + expr = rd.evaluate_expr(j, to); TFieldref& s = (TFieldref&) rd._fields[j]; if (from.is_sorted() && from.curr().type(s.name()) ==_alfafld) expr.rpad(s.len(from.curr()),'~'); diff --git a/include/strings.cpp b/include/strings.cpp index e7e2f001a..b3f2f9b71 100755 --- a/include/strings.cpp +++ b/include/strings.cpp @@ -134,10 +134,18 @@ TString& TString::set( // @rdesc Ritorna l'indirizzo della stringa inizializzata { - if (s == NULL) s = ""; - const int sz = *s ? strlen(s) : 15; - if (sz > size()) resize(sz, FALSE); - strcpy(_str, s); + if (s && *s) + { + const int sz = strlen(s); + if (sz > size()) resize(sz, FALSE); + strcpy(_str, s); + } + else + { + if (size() == 0) + resize(15, FALSE); + *_str = '\0'; + } return *this; } diff --git a/include/urldefid.h b/include/urldefid.h index e278d56bd..fd11cce7e 100755 --- a/include/urldefid.h +++ b/include/urldefid.h @@ -52,6 +52,7 @@ #define BMP_LINK 117 #define BMP_PRINT 118 #define BMP_RECALC 119 +#define BMP_ELABORA 120 #define BMP_FIRSTREC 121 #define BMP_PREVREC 122 #define BMP_STOPREC 123 diff --git a/include/varrec.cpp b/include/varrec.cpp index af81e7a3b..d798f3f2f 100755 --- a/include/varrec.cpp +++ b/include/varrec.cpp @@ -20,7 +20,8 @@ TVariable_field::TVariable_field( if (expr && *expr) { _e = new TExpression(expr, type); - if (TFixed_string(expr).find('-') == -1) _put_string = new TToken_string(expr, '+'); + if (TFixed_string(expr).find('-') < 0) + _put_string = new TToken_string(expr, '+'); } }