Corretti problemi di triplo click e aggiunda validazione dei nomi dei file

git-svn-id: svn://10.65.10.50/trunk@722 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1994-12-02 13:30:45 +00:00
parent 4265b6a9ac
commit 0a2e2fd909
20 changed files with 1182 additions and 1115 deletions

View File

@ -2,125 +2,129 @@
PAGE "IMPOSTAZIONE STAMPANTE" -1 -1 76 13 PAGE "IMPOSTAZIONE STAMPANTE" -1 -1 76 13
RADIOBUTTON MSK_1_TYPE 70 RADIOBUTTON MSK_1_TYPE 1 70
BEGIN BEGIN
PROMPT 1 1 "Stampa su..." PROMPT 1 1 "Stampa su..."
HELP "Selezionare il tipo dove direzionare la stampa" HELP "Selezionare il tipo dove direzionare la stampa"
ITEM "0|Stampante" ITEM "0|Stampante"
MESSAGE HIDE,MSK_1_FILENAME|RESET,MSK_1_FILENAME|SHOW,MSK_1_PRINTERS MESSAGE HIDE,MSK_1_FILENAME
MESSAGE ENABLE,MSK_1_PRINTERS MESSAGE SHOW,MSK_1_PRINTERS|ENABLE,MSK_1_PRINTERS
MESSAGE ENABLE,MSK_1_CODES MESSAGE ENABLE,MSK_1_CODES
MESSAGE ENABLE,MSK_1_SIZE MESSAGE ENABLE,MSK_1_SIZE
MESSAGE ENABLE,MSK_1_LINES MESSAGE ENABLE,MSK_1_LINES
MESSAGE ENABLE,DLG_SETPRINT MESSAGE ENABLE,DLG_SETPRINT
ITEM "2|Visualizzazione" ITEM "2|Visualizzazione"
MESSAGE HIDE,MSK_1_FILENAME|RESET,MSK_1_FILENAME MESSAGE HIDE,MSK_1_FILENAME
MESSAGE SHOW,MSK_1_PRINTERS|DISABLE,MSK_1_PRINTERS MESSAGE SHOW,MSK_1_PRINTERS|DISABLE,MSK_1_PRINTERS
MESSAGE DISABLE,MSK_1_CODES MESSAGE DISABLE,MSK_1_CODES
MESSAGE DISABLE,MSK_1_SIZE MESSAGE DISABLE,MSK_1_SIZE
MESSAGE DISABLE,MSK_1_LINES MESSAGE DISABLE,MSK_1_LINES
MESSAGE DISABLE,DLG_SETPRINT MESSAGE DISABLE,DLG_SETPRINT
ITEM "1|File su disco" ITEM "1|File su disco"
MESSAGE SHOW,MSK_1_FILENAME|HIDE,MSK_1_PRINTERS MESSAGE SHOW,MSK_1_FILENAME
MESSAGE ENABLE,MSK_1_CODES MESSAGE HIDE,MSK_1_PRINTERS
MESSAGE DISABLE,MSK_1_SIZE MESSAGE ENABLE,MSK_1_CODES
MESSAGE DISABLE,MSK_1_LINES MESSAGE DISABLE,MSK_1_SIZE
MESSAGE DISABLE,DLG_SETPRINT MESSAGE DISABLE,MSK_1_LINES
FLAGS "Z" MESSAGE DISABLE,DLG_SETPRINT
FLAGS "Z"
END END
LIST MSK_1_PRINTERS 50 LIST MSK_1_PRINTERS 50
BEGIN BEGIN
/* viene riempito a run-time con nomi letti da config */ /* viene riempito a run-time con nomi letti da config */
PROMPT 4 5 "Stampante " PROMPT 4 5 "Stampante "
HELP "Selezionare il tipo di stampante desiderata" HELP "Selezionare il tipo di stampante desiderata"
END END
STRING MSK_1_FILENAME 52 STRING MSK_1_FILENAME 52
BEGIN BEGIN
PROMPT 4 5 "Nome file " PROMPT 4 5 "Nome file "
HELP "Nome del file su cui direzionare la stampa" CHECKTYPE REQUIRED
VALIDATE FILENAME_FUNC
FLAGS "A"
HELP "Nome del file in cui memorizzare la stampa"
WARNING "E' necessario specificare un nome di file"
END END
LIST MSK_1_CODES 40 LIST MSK_1_CODES 40
BEGIN BEGIN
PROMPT 4 6 "Tipo stampa " PROMPT 4 6 "Tipo stampa "
/* pure */ HELP "Modalita' nelle quale si desidera la stampa"
HELP "Modalita' nelle quale si desidera la stampa"
END END
LIST MSK_1_SIZE 3 LIST MSK_1_SIZE 3
BEGIN BEGIN
PROMPT 31 6 "Carattere " PROMPT 31 6 "Carattere "
ITEM "7|7" ITEM "7|7"
ITEM "8|8" ITEM "8|8"
ITEM "10|10" ITEM "10|10"
ITEM "12|12" ITEM "12|12"
ITEM "15|15" ITEM "15|15"
ITEM "17|17" ITEM "17|17"
HELP "Dimensioni del carattere di stampa" HELP "Dimensioni del carattere di stampa"
END END
LIST MSK_1_LINES 3 LIST MSK_1_LINES 3
BEGIN BEGIN
PROMPT 52 6 "Linee/Inch " PROMPT 52 6 "Linee/Inch "
ITEM "4|4" ITEM "4|4"
ITEM "5|5" ITEM "5|5"
ITEM "6|6" ITEM "6|6"
ITEM "7|7" ITEM "7|7"
ITEM "8|8" ITEM "8|8"
ITEM "9|9" ITEM "9|9"
ITEM "10|10" ITEM "10|10"
HELP "Numero di linee per pollice" HELP "Numero di linee per pollice"
END END
LIST MSK_1_FONT 10 LIST MSK_1_FONT 10
BEGIN BEGIN
PROMPT 4 6 "Font " PROMPT 4 6 "Font "
HELP "Font di stampa su video o stampante" HELP "Font di stampa su video o stampante"
ITEM "1|Courier" ITEM "1|Courier"
FLAGS "D" FLAGS "D"
END END
NUMBER MSK_1_NPAGES 3 0 NUMBER MSK_1_NPAGES 3 0
BEGIN BEGIN
PROMPT 54 8 "N.o copie " PROMPT 54 8 "N.o copie "
HELP "Numero di copie da fare" HELP "Numero di copie da fare"
END END
BOOLEAN MSK_1_ISGRAPHICS BOOLEAN MSK_1_ISGRAPHICS
BEGIN BEGIN
PROMPT 4 8 "Stampa elementi grafici" PROMPT 4 8 "Stampa elementi grafici"
HELP "Indicare se stampare elementi grafici (linee, box, logo) quando la stampante lo consente" HELP "Indicare se stampare elementi grafici (linee, box, logo) quando la stampante lo consente"
END END
GROUPBOX DLG_NULL 74 4 GROUPBOX DLG_NULL 74 4
BEGIN BEGIN
PROMPT 1 9 "" PROMPT 1 9 ""
END END
BUTTON DLG_SETPRINT 9 2 BUTTON DLG_SETPRINT 9 2
BEGIN BEGIN
PROMPT -14 -2 "~Imposta" PROMPT -14 -2 "~Imposta"
HELP "Chiama l'Impostazione Stampante di Windows" HELP "Chiama l'Impostazione Stampante di Windows"
MESSAGE EXIT,DLG_SETPRINT MESSAGE EXIT,DLG_SETPRINT
END END
BUTTON DLG_SAVEREC 9 2 BUTTON DLG_SAVEREC 9 2
BEGIN BEGIN
PROMPT -24 -2 "~Registra" PROMPT -24 -2 "~Registra"
MESSAGE EXIT,K_INS MESSAGE EXIT,K_INS
END END
BUTTON DLG_OK 9 2 BUTTON DLG_OK 9 2
BEGIN BEGIN
PROMPT -34 -2 "" PROMPT -34 -2 ""
END END
BUTTON DLG_CANCEL 9 2 BUTTON DLG_CANCEL 9 2
BEGIN BEGIN
PROMPT -44 -2 "" PROMPT -44 -2 ""
END END
ENDPAGE ENDPAGE

View File

@ -598,7 +598,7 @@ TPush_button::TPush_button(short left, short top, short right, short bottom,
_accel *= CHARX; _accel *= CHARX;
_dx = (width - win_get_text_width(win(), (char*)caption(), -1)) >> 1; _dx = (width - win_get_text_width(win(), (char*)caption(), -1)) >> 1;
_dy = byte((height-CHARY)/2 + BASEY); _dy = byte((height-CHARY)/2 + BASEY - DEPTH);
} }
} }

View File

@ -59,6 +59,7 @@
n.ro campi lista di campi n.ro campi lista di campi
CHECK_FIELD esegue il check su di un altro campo CHECK_FIELD esegue il check su di un altro campo
campo campo
FILENAME_FUNC controlla se la stringa e' un nome di file
*/ */
#define EXPR_FUNC 0 2 #define EXPR_FUNC 0 2
@ -79,6 +80,7 @@
#define STRCALC_FUNC 15 #define STRCALC_FUNC 15
#define ONEREQ_FUNC 16 #define ONEREQ_FUNC 16
#define CHECK_FIELD 17 1 #define CHECK_FIELD 17 1
#define FILENAME_FUNC 18
#define VALEXPR VALIDATE EXPR_FUNC #define VALEXPR VALIDATE EXPR_FUNC
#define NUM_EXPR VALEXPR 0 #define NUM_EXPR VALEXPR 0

View File

@ -1,4 +1,4 @@
// $Id: mailbox.cpp,v 1.7 1994-11-10 14:16:39 alex Exp $ // $Id: mailbox.cpp,v 1.8 1994-12-02 13:30:03 guy Exp $
#include <stdlib.h> #include <stdlib.h>
#include <fstream.h> #include <fstream.h>
@ -16,12 +16,13 @@
#define DEF_MSGS_CAPACITY 50 #define DEF_MSGS_CAPACITY 50
#define MAX_TXT_LEN 200 #define MAX_TXT_LEN 200
TMessage::TMessage(const char* to, const char* sub, const char* text, TMessage::TMessage(const char* to, const char* sub,
const char* from) const char* text, const char* from)
{ {
_to = to; _subject = sub; _to = cmd2name(to);
_subject = sub;
_text = text; _text = text;
_from = (from == NULL || *from == '\0' ? main_app().name() : from); _from = (from == NULL || *from == '\0') ? main_app().name() : from;
_flags = 0x00; _number = -1; _flags = 0x00; _number = -1;
} }
@ -146,9 +147,7 @@ void TMailbox::send(TMessage& m)
ofstream fto(to_path, ios::app); ofstream fto(to_path, ios::app);
CHECK(fto.good(),"send: trouble opening mailbox file"); CHECK(fto.good(),"send: trouble opening mailbox file");
fto << m.from() << '\n' fto << m.from() << '\n' << m.subject() << '\n' << m.body() << '\n';
<< m.subject() << '\n'
<< m.body() << '\n';
fto.close(); fto.close();
} }

View File

@ -955,10 +955,11 @@ void TMask::reset(short fld_id)
for (int f = 0; f < fields(); f++) for (int f = 0; f < fields(); f++)
{ {
TMask_field& c = fld(f); TMask_field& c = fld(f);
c._flags.dirty = FALSE;
c.reset(); c.reset();
c.set_dirty(FALSE);
} }
} else field(fld_id).reset(); }
else field(fld_id).reset();
} }

View File

@ -16,9 +16,8 @@
// @T // @T
typedef bool (*MASK_HANDLER)(TMask& mask, KEY key); typedef bool (*MASK_HANDLER)(TMask& mask, KEY key);
enum TMaskmode { NO_MODE, MODE_INS , MODE_MOD , MODE_DEL , enum TMaskmode { NO_MODE, MODE_INS , MODE_MOD ,
MODE_VIS , MODE_QUERY, MODE_QUERYINS, MODE_VIS , MODE_QUERY, MODE_QUERYINS };
MODE_SEARCH };
// @END // @END
// @C // @C

View File

@ -1,4 +1,4 @@
// $Id: maskfld.cpp,v 1.56 1994-12-02 13:07:39 alex Exp $ // $Id: maskfld.cpp,v 1.57 1994-12-02 13:30:09 guy Exp $
#include <xvt.h> #include <xvt.h>
#include <applicat.h> #include <applicat.h>
@ -1348,7 +1348,7 @@ bool TBrowse::do_insert()
#endif #endif
TMailbox mail; TMailbox mail;
TMessage msg(cmd2name(app), MSG_AI, ""); TMessage msg(app, MSG_AI, "");
mail.send(msg); mail.send(msg);
TExternal_app a(app); TExternal_app a(app);
@ -1497,10 +1497,13 @@ switch (k)
default: default:
if (k >= K_CTRL) if (k >= K_CTRL)
{ {
const TMask& m = _fld->mask();
const short id = siblings.get_int((k - K_CTRL) << 1); const short id = siblings.get_int((k - K_CTRL) << 1);
TEdit_field& ef = (TEdit_field&)_fld->mask().field(id); TEdit_field& ef = m.efield(id);
ef.set_focus(); ef.set_focus();
ef.send_key(k = K_F9, 0); k = K_F9;
if (m.is_running())
ef.send_key(k, 0);
} }
break; break;
} }
@ -1552,10 +1555,7 @@ bool TBrowse::check(CheckTime t)
bool TBrowse::empty_check() bool TBrowse::empty_check()
{ {
const TMaskmode mode = (TMaskmode)field().mask().mode(); if ( field().mask().query_mode() || _fld->check_type() == CHECK_NONE ||
const bool no_check = mode == MODE_SEARCH || field().mask().query_mode();
if ( no_check || _fld->check_type() == CHECK_NONE ||
_fld->check_type() == CHECK_NORMAL) _fld->check_type() == CHECK_NORMAL)
return TRUE; return TRUE;
else else
@ -1870,7 +1870,7 @@ void TEdit_field::create(WINDOW parent)
flags |= CTL_FLAG_INVISIBLE; flags |= CTL_FLAG_INVISIBLE;
} }
_buttonwin = xvt_create_control(WC_PUSHBUTTON, _x+_width+delta, _y, _buttonwin = xvt_create_control(WC_PUSHBUTTON, _x+_width+delta, _y,
2, 1, "*", parent, flags, PTR_LONG(this), DLG_F9); 2, 1, "*", parent, flags, PTR_LONG(this), DLG_F9);
} }
} }
@ -2060,12 +2060,15 @@ bool TEdit_field::on_key(KEY key)
case K_F9: case K_F9:
if (check_enabled()) if (check_enabled())
{ {
enable_check(FALSE);
if (dirty()) set(get()); if (dirty()) set(get());
KEY k = K_ESC; KEY k = K_ESC;
if (_browse) k = _browse->run(); if (_browse) k = _browse->run();
else if (_sheet) k = _sheet->run(); else
else beep(); if (_sheet) k = _sheet->run();
if (mask().is_running() && k != K_F9) set_focus(); else beep();
if (k != K_F9) set_focus();
enable_check(TRUE);
if (k == K_ENTER) if (k == K_ENTER)
{ {
set_dirty(); set_dirty();

View File

@ -480,21 +480,7 @@ break;
case XIE_BUTTON: case XIE_BUTTON:
if (xiev->v.xi_obj->type == XIT_CELL) if (xiev->v.xi_obj->type == XIT_CELL)
{ {
if (_edit_field) dispatch_e_char(win(), K_F9);
{
const char* val = xi_get_text(xiev->v.xi_obj, NULL, -1);
_edit_field->set(val); // Update current cell
_check_enabled = FALSE; // Disable checks
if (!_row_dirty) notify(_cur_row, K_SPACE);
if (_edit_field->on_key(K_F9)) // Show search sheet
{
mask2str(_cur_row); // Update row
_row_dirty = TRUE;
}
set_front_window(win()); // It seems necessary to make xi_set_focus work properly
xi_set_focus(xiev->v.xi_obj); // Restore focus to cell
_check_enabled = TRUE; // Enable checks
}
} else } else
if (xiev->v.xi_obj->type == XIT_LIST) if (xiev->v.xi_obj->type == XIT_LIST)
insert(-1); insert(-1);
@ -655,32 +641,40 @@ break;
case K_F8: case K_F8:
case K_F9: case K_F9:
case K_F11: case K_F11:
{ if (_check_enabled)
_check_enabled = FALSE; // Disable checks
if (!_row_dirty) notify(_cur_row, K_SPACE);
if (_edit_field->on_key(k))
{ {
mask2str(_cur_row); _check_enabled = FALSE; // Disable checks
_row_dirty = TRUE; if (!_row_dirty) notify(_cur_row, K_SPACE);
if (_edit_field->on_key(k))
{
mask2str(_cur_row);
_row_dirty = TRUE;
}
else
if (k == K_F9)
{
_edit_field = &_mask.fld(_mask.focus_field());
const short foca = _edit_field->dlg();
const int col = (foca - FIRST_FIELD) % 100 +1;
if (col > 0 && col != _cur_col)
{
_cur_col = col;
dispatch_e_char(win(), K_F9);
}
}
set_focus_cell(_cur_row, _cur_col);
_check_enabled = TRUE; // Enable checks
} }
set_focus_cell(_cur_row, _cur_col);
_check_enabled = TRUE; // Enable checks
}
break; break;
case K_PREV: case K_PREV:
case K_NEXT: case K_NEXT:
{ if (xi_move_focus(_itf))
const bool ok = (bool)xi_move_focus(_itf); dispatch_e_char(parent(), k);
if (ok) dispatch_e_char(parent(), k);
}
break; break;
case K_ESC: case K_ESC:
{
xi_set_focus(_itf); xi_set_focus(_itf);
dispatch_e_char(parent(), K_ESC); dispatch_e_char(parent(), K_ESC);
}
break; break;
case K_CTRL+K_PREV: case K_CTRL+K_PREV:
xi_scroll(_list, XI_SCROLL_PGUP); xi_scroll(_list, XI_SCROLL_PGUP);
break; break;
@ -1087,6 +1081,7 @@ TSheet_field::~TSheet_field()
void TSheet_field::reset() void TSheet_field::reset()
{ {
_sheet->destroy(); _sheet->destroy();
_sheet->mask().reset();
} }
// Certified 100% // Certified 100%

View File

@ -1,6 +1,4 @@
#include <stdlib.h> #include <stdlib.h>
#include <xvt.h>
#include <urldefid.h>
#if XVT_OS==XVT_OS_SCOUNIX #if XVT_OS==XVT_OS_SCOUNIX
#include <unistd.h> #include <unistd.h>
@ -10,18 +8,20 @@
#include <stdio.h> #include <stdio.h>
#endif #endif
#include <strstream.h>
#include <xvt.h>
#define STYLE_NUM 4 #define STYLE_NUM 4
#include <applicat.h>
#include <execp.h>
#include <extcdecl.h>
#include <mask.h> #include <mask.h>
#include <urldefid.h>
#include <utility.h> #include <utility.h>
#include <viswin.h> #include <viswin.h>
#include <extcdecl.h>
#include <applicat.h>
#include <printer.h>
#include <execp.h>
#include <bagn001a.h> #include <bagn001a.h>
#include <strstream.h>
struct PrDesc struct PrDesc
{ {
@ -1158,12 +1158,24 @@ void TPrinter::set()
TToken_string pn1 (50), pn2 (100); TToken_string pn1 (50), pn2 (100);
int i; int i;
if (_printerfile.empty())
{
_printerfile.tempdir();
#if XVT_OS == XVT_OS_SCOUNIX
_printerfile << '/';
#else
_printerfile << '\\';
#endif
}
TFilename defile("printer.def"); TFilename defile("printer.def");
#if XVT_OS == XVT_OS_SCOUNIX #if XVT_OS == XVT_OS_SCOUNIX
defile << format (".%d", getuid ()); defile << format (".%d", getuid ());
#endif #endif
mask.set_workfile(defile); mask.set_workfile(defile);
mask.set(MSK_1_FILENAME, _printerfile);
mask.set(MSK_1_NPAGES, _ncopies);
#if XVT_OS != XVT_OS_WIN #if XVT_OS != XVT_OS_WIN
@ -1199,9 +1211,6 @@ void TPrinter::set()
mask.set(MSK_1_PRINTERS, format("%d", _curprn)); mask.set(MSK_1_PRINTERS, format("%d", _curprn));
mask.set(MSK_1_CODES, format("%d", _curcode)); mask.set(MSK_1_CODES, format("%d", _curcode));
mask.set(MSK_1_FILENAME, _printerfile);
mask.set(MSK_1_NPAGES, _ncopies);
KEY k; KEY k;
if ((k = mask.run()) == K_ESC) if ((k = mask.run()) == K_ESC)
@ -1236,7 +1245,6 @@ void TPrinter::set()
} }
break; break;
case 1: // file case 1: // file
_printertype = fileprinter; _printertype = fileprinter;
_printerfile = mask.get (MSK_1_FILENAME); _printerfile = mask.get (MSK_1_FILENAME);
_curcode = atoi (mask.get (MSK_1_CODES)); _curcode = atoi (mask.get (MSK_1_CODES));
@ -1267,8 +1275,6 @@ void TPrinter::set()
mask.set(MSK_1_SIZE, _ch_size); mask.set(MSK_1_SIZE, _ch_size);
mask.set(MSK_1_LINES, _lines_per_inch); mask.set(MSK_1_LINES, _lines_per_inch);
mask.set(MSK_1_NPAGES, _ncopies);
if (_printertype == fileprinter) if (_printertype == fileprinter)
mask.set (MSK_1_TYPE, "1"); mask.set (MSK_1_TYPE, "1");
else if (_printertype == screenvis) else if (_printertype == screenvis)
@ -1502,9 +1508,6 @@ genera_dischetti ()
{ {
int r; int r;
warning_box ("Questa procedura richiede %2d dischetti",
_volume);
for (int i = 0; i < _tmp_files.items (); i++) for (int i = 0; i < _tmp_files.items (); i++)
{ {
// Avvisa l'utente di inserire un dischetto // Avvisa l'utente di inserire un dischetto

View File

@ -112,15 +112,13 @@ real & real::operator += (const real & b)
real & real::operator += (double a) real & real::operator += (double a)
{ {
__tmp_real = *this; adddfd (ptr (), ptr (), a);
adddfd (ptr (), __tmp_real.ptr (), a);
return *this; return *this;
} }
real & real::operator -= (const real & b) real & real::operator -= (const real & b)
{ {
__tmp_real = *this; dsub (ptr (), ptr (), b.ptr ());
dsub (ptr (), __tmp_real.ptr (), b.ptr ());
return *this; return *this;
} }
@ -235,7 +233,7 @@ char *real ::literals () const
TFixed_string risultato (__string, 80); TFixed_string risultato (__string, 80);
risultato.cut (0); risultato.cut (0);
TString16 centinaia; TString80 centinaia;
for (int migliaia = 0;; migliaia++) for (int migliaia = 0;; migliaia++)
{ {
@ -436,7 +434,7 @@ real & real ::ceil (int prec)
dint (&integer, ptr ()); // Extract the integer part dint (&integer, ptr ()); // Extract the integer part
if (disgt (ptr (), &integer)) // If positive ... if (disgt (ptr (), &integer)) // If positive ...
addid (ptr (), &integer, 1); // add 1 addid (ptr (), &integer, 1); // ... add 1
else else
dcpy(ptr(), &integer); // If negative dcpy(ptr(), &integer); // If negative

View File

@ -14,10 +14,6 @@
#include <stdtypes.h> #include <stdtypes.h>
#endif #endif
#ifndef __OBJECT_H
#include <object.h>
#endif
#ifndef __ARRAY_H #ifndef __ARRAY_H
#include <array.h> #include <array.h>
#endif #endif

View File

@ -1,4 +1,4 @@
// $Id: relapp.cpp,v 1.35 1994-11-30 09:04:01 guy Exp $ // $Id: relapp.cpp,v 1.36 1994-12-02 13:30:27 guy Exp $
#include <mailbox.h> #include <mailbox.h>
#include <sheet.h> #include <sheet.h>
#include <urldefid.h> #include <urldefid.h>
@ -648,6 +648,7 @@ bool TRelation_application::save(bool check_dirty)
switch(err) switch(err)
{ {
case NOERR: case NOERR:
_recins = get_relation()->lfile().recno();
break; break;
case _isreinsert: case _isreinsert:
warning_box("Esiste gia' un documento con la stessa chiave"); warning_box("Esiste gia' un documento con la stessa chiave");
@ -718,7 +719,7 @@ bool TRelation_application::remove()
bool TRelation_application::main_loop() bool TRelation_application::main_loop()
{ {
long recins = -1; _recins = -1;
query_mode(); query_mode();
_mask->open_modal(); _mask->open_modal();
@ -753,13 +754,8 @@ bool TRelation_application::main_loop()
k = K_QUIT; k = K_QUIT;
break; break;
case K_QUIT: case K_QUIT:
if (save(TRUE)) if (!save(TRUE))
{ k = K_ENTER;
if (_mask->edit_mode() &&
(_autoins_caller.not_empty() || _lnflag))
recins = file().recno();
}
else k = K_ENTER;
break; break;
case K_ENTER: case K_ENTER:
if (find(0)) modify_mode(); if (find(0)) modify_mode();
@ -768,9 +764,8 @@ bool TRelation_application::main_loop()
case K_SAVE: case K_SAVE:
if (save(FALSE)) if (save(FALSE))
{ {
if (_autoins_caller.not_empty() || _lnflag) if (_autoins_caller.not_empty())
{ {
recins = file().recno();
k = K_QUIT; k = K_QUIT;
} }
else else
@ -835,9 +830,9 @@ bool TRelation_application::main_loop()
_mask->set_mode(NO_MODE); _mask->set_mode(NO_MODE);
if (recins > 0 && _autoins_caller.not_empty()) if (autoins_caller().not_empty() && _recins >= 0)
{ {
TMessage msg(_autoins_caller, _lnflag ? MSG_LN : MSG_AI, format("%ld", recins)); TMessage msg(autoins_caller(), _lnflag ? MSG_LN : MSG_AI, format("%ld", _recins));
msg.send(); msg.send();
} }
@ -901,16 +896,15 @@ bool TRelation_application::filter()
_lnflag = TRUE; _lnflag = TRUE;
const char* v = body.get(); const char* v = body.get();
TString80 s;
const int max = _mask->fields(); for (int i = 0; v != NULL && i < _mask->fields(); i++)
for (int i = 0; i < max && v != NULL; i++)
{ {
TMask_field& f = _mask->fld(i); TMask_field& f = _mask->fld(i);
if (f.active() && f.dlg() > 0 && f.in_key(key)) if (f.active() && f.dlg() > 0 && f.in_key(key))
{ {
const TString s(v); s = v;
_fixed.add(format("%d=%s", f.dlg(), (const char*) s)); _fixed.add(format("%d=%s", f.dlg(), (const char*)s));
v = body.get(); v = body.get();
} }
} }

View File

@ -22,7 +22,9 @@ class TRelation_application : public TApplication
TRecnotype _first, _last; TRecnotype _first, _last;
int _search_id; int _search_id;
TString _autoins_caller; TString16 _autoins_caller;
long _recins;
bool _lnflag; bool _lnflag;
TToken_string _fixed; TToken_string _fixed;

View File

@ -1,4 +1,4 @@
// $Id: relation.cpp,v 1.24 1994-11-18 17:01:26 guy Exp $ // $Id: relation.cpp,v 1.25 1994-12-02 13:30:30 guy Exp $
// relation.cpp // relation.cpp
// fv 12/8/93 // fv 12/8/93
// relation class for isam files // relation class for isam files
@ -98,13 +98,13 @@ TRelationdef::TRelationdef(const TRelation* rel, int idx_file, byte key,
s = r.left(eq); // Parte a sinistra dell' = s = r.left(eq); // Parte a sinistra dell' =
#ifdef DBG #ifdef DBG
TString80 n(s); const char* n = s;
const int p = n.find('['); const int p = s.find('[');
if (p > 0) n.cut(p); if (p > 0) n = s.left(p);
if (rel->file(_num).curr().exist(n) == FALSE) if (rel->file(_num).curr().exist(n) == FALSE)
{ {
error_box("'%s' non e' un campo del file %d", yesnofatal_box("Errore di JOIN: '%s' non e' un campo del file %d",
(const char*)n, rel->file(_num).num()); n, rel->file(_num).num());
continue; continue;
} }
#endif #endif
@ -115,8 +115,9 @@ TRelationdef::TRelationdef(const TRelation* rel, int idx_file, byte key,
eq++; eq++;
} }
const TString80 xx(s); // const TString80 xx(s);
_fields.add(new TFieldref(xx,0)); // _fields.add(new TFieldref(xx,0));
_fields.add(new TFieldref(s,0));
_exprs.add(new TExpression(r.mid(eq+1), _strexpr)); _exprs.add(new TExpression(r.mid(eq+1), _strexpr));
} }
@ -1103,10 +1104,10 @@ int name2log(const char* name)
if (name && *name) if (name && *name)
{ {
if (isdigit(*name)) if (isdigit(*name) || *name == '-')
{ {
log = atoi(name); log = atoi(name);
if (strchr(name, '@')) log = -log; if (strchr(name, '@')) log = -log;
} }
else else
{ {

View File

@ -2,7 +2,6 @@
#include <applicat.h> #include <applicat.h>
#include <colors.h> #include <colors.h>
#include <relation.h> #include <relation.h>
#include <printer.h>
#include <sheet.h> #include <sheet.h>
#include <urldefid.h> #include <urldefid.h>
#include <utility.h> #include <utility.h>
@ -35,7 +34,12 @@ TSheet::TSheet(short x, short y, short dx, short dy,
_checkable = _size[0] = 1; _checkable = _size[0] = 1;
else else
_size[_columns] = l > 0 ? l : item.len(); _size[_columns] = l > 0 ? l : item.len();
} else _size[_columns] = item.len(); }
else
{
_size[_columns] = item.len();
_type[_columns] = '\0';
}
item.trim(); item.trim();
new_head.add(item); new_head.add(item);
@ -309,15 +313,27 @@ bool TSheet::on_key(KEY key)
if (_checkable && _check_enabled && items() > 0) if (_checkable && _check_enabled && items() > 0)
{ {
bool ok = TRUE; bool force = FALSE;
switch(key) switch(key)
{ {
case K_SPACE: _checked.not(selected()); break; case K_SPACE:
case K_F2 : uncheck(-1); break; _checked.not(selected());
case K_F3 : check(-1); break; set_opaque_text(TRUE);
default : ok = FALSE; break; update_row(selected());
} set_opaque_text(FALSE);
if (ok) force_update(); break;
case K_F2:
uncheck(-1);
force = TRUE;
break;
case K_F3:
check(-1);
force = TRUE;
break;
default:
break;
}
if (force) force_update();
} }
return TScroll_window::on_key(key); return TScroll_window::on_key(key);
} }

View File

@ -585,6 +585,48 @@ const char* TFilename::path() const
return spark; return spark;
} }
bool TFilename::ok() const
{
const int l = len();
int len = 0; // lunghezza ultima sottostringa
bool ext = FALSE; // trovata estensione
for (int c = 0; c < l; c++)
{
switch(_str[c])
{
#if XVT_OS != XVT_OS_SCOUNIX
case ':':
if (c != 1 || !isalpha(_str[0])) return FALSE; // Nome disco errato
len = 0;
break;
case '\\':
#endif
case '/':
if (ext) return FALSE; // Slash dopo estensione
if (len > 8) return FALSE; // Nome troppo lungo
if (!isalnum(_str[++c])) return FALSE;
len = 1;
break;
case '.':
if (len == 0 || ext) return FALSE; // Nome nullo o Doppia estensione
ext = TRUE;
len = 0;
c++;
default:
if (isalnum(_str[c])) len++;
else return FALSE;
break;
}
}
if (ext && len > 3)
return FALSE;
return len > 0 && len < 9;
}
// Certified 70% // Certified 70%
const TFilename& TFilename::tempdir() const TFilename& TFilename::tempdir()
{ {

View File

@ -80,12 +80,13 @@ public:
const TString& sub(int from, int to = -1) const; // Ritorna la stringa da FROM a TO (escluso) const TString& sub(int from, int to = -1) const; // Ritorna la stringa da FROM a TO (escluso)
const TString& right(int count) const; // Ritorna l'oggetto TString composto dai count caratteri da destra const TString& right(int count) const; // Ritorna l'oggetto TString composto dai count caratteri da destra
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// @DES Modifying methods // @DES Modifying methods
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// @FPUB // @FPUB
TString& fill(char c, int n = -1); // Riempie con n caratteri c
TString& fill(char c, int n = -1); // Riempie con n caratteri c
TString& spaces(int n = -1) { return fill(' ', n); } TString& spaces(int n = -1) { return fill(' ', n); }
TString& overwrite(const char* s, int pos = 0); // Sovrascrive la stringa s dalla posizione pos TString& overwrite(const char* s, int pos = 0); // Sovrascrive la stringa s dalla posizione pos
TString& insert(const char* s, int pos = 0); // Inserisce la stringa s dalla posizione pos TString& insert(const char* s, int pos = 0); // Inserisce la stringa s dalla posizione pos
@ -108,12 +109,13 @@ public:
TString& upper(); // Mette la stringa in maiuscolo TString& upper(); // Mette la stringa in maiuscolo
TString& lower(); // Mette la stringa in minuscolo TString& lower(); // Mette la stringa in minuscolo
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// @DES Standard operators // @DES Standard operators
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// @FPUB // @FPUB
const TString& operator =(const TString& s) { return set(s._str); }
const TString& operator =(const TString& s) { return set(s._str); }
const TString& operator =(const char* s) { return set(s); } const TString& operator =(const char* s) { return set(s); }
TString& operator <<(const char*); TString& operator <<(const char*);
@ -205,9 +207,11 @@ public:
TFilename(const char* n = "") : TString80(n) {} TFilename(const char* n = "") : TString80(n) {}
TFilename(const TString& n) : TString80(n) {} TFilename(const TString& n) : TString80(n) {}
// assegnazione tra TFile e stringa
const TString& operator =(const char* s) { return set(s); } const TString& operator =(const char* s) { return set(s); }
const TString& operator =(const TString& s) { return set((const char*)s); } const TString& operator =(const TString& s) { return set((const char*)s); }
// assegnazione tra TFile e stringa
virtual bool ok() const; // Controlla il formato del nome del file
const char* ext() const; // Ritorna l'estensione const char* ext() const; // Ritorna l'estensione
void ext(const char*); // Imposta come estensione la stringa puntata da char* void ext(const char*); // Imposta come estensione la stringa puntata da char*

View File

@ -436,7 +436,7 @@ HIDDEN bool _fixlen_val(TEdit_field& f, KEY)
} }
HIDDEN bool _mtcheck_val(TEdit_field& f, KEY) HIDDEN bool _mtcheck_val(TEdit_field& f, KEY)
{ {
const int month = atoi(f.get()); const int month = atoi(f.get());
if (month < 1 || month > 13) return FALSE; if (month < 1 || month > 13) return FALSE;
@ -549,12 +549,11 @@ HIDDEN bool _onereq_val(TEdit_field& f, KEY k)
const TMask& m = f.mask(); const TMask& m = f.mask();
if (m.mode() == MODE_QUERY) return TRUE; if (m.mode() == MODE_QUERY) return TRUE;
const int nparms = get_val_param_num(); const int nparms = get_val_param_num();
TString s;
for (int i = 0; i < nparms ; i++) for (int i = 0; i < nparms ; i++)
{ {
s = m.get(atoi(get_val_param(i))); const char* s = m.get(atoi(get_val_param(i)));
if (s.not_empty()) return TRUE; if (*s) return TRUE;
} }
return FALSE; return FALSE;
} }
@ -572,7 +571,13 @@ HIDDEN bool _chkfld_val(TEdit_field& f, KEY k)
return TRUE; return TRUE;
} }
#define MAX_FUNC 18 HIDDEN bool _filename_val(TEdit_field& f, KEY)
{
const TFilename fn(f.get());
return fn.ok();
}
#define MAX_FUNC 19
HIDDEN VAL_FUNC _global_val_func[MAX_FUNC] = HIDDEN VAL_FUNC _global_val_func[MAX_FUNC] =
{ {
@ -593,7 +598,8 @@ HIDDEN VAL_FUNC _global_val_func[MAX_FUNC] =
_numcalc_val, _numcalc_val,
_strcalc_val, _strcalc_val,
_onereq_val, _onereq_val,
_chkfld_val _chkfld_val,
_filename_val
}; };
bool validate(int fn, TEdit_field& f, KEY k, const TArray& parms) bool validate(int fn, TEdit_field& f, KEY k, const TArray& parms)

View File

@ -8,8 +8,6 @@
#include <urldefid.h> #include <urldefid.h>
#include <utility.h> #include <utility.h>
#include <viswin.h> #include <viswin.h>
#include <xvtility.h>
#include <colors.h>
#ifndef __PRINTER_H #ifndef __PRINTER_H
typedef void (*LINKHANDLER) (int, const char *); typedef void (*LINKHANDLER) (int, const char *);
@ -1784,24 +1782,26 @@ default:
bool TViswin::call_editor () bool TViswin::call_editor ()
{ {
TConfig cnf (CONFIG_GENERAL, "Link"); TConfig cnf (CONFIG_GENERAL, "Link");
TString editor (cnf.get ("txt")); const TFilename editor (cnf.get ("txt"));
bool ok = FALSE; bool ok = FALSE;
if (!editor.empty ()) if (!editor.empty ())
{ {
TString newfilename; TFilename newfilename; newfilename.tempdir();
FILE_SPEC fs;
static FILE_SPEC fs; str_to_dir((char*)(const char*)newfilename, &fs.dir);
get_default_dir(&fs.dir);
strcpy (fs.type, "txt"); strcpy (fs.type, "txt");
strcpy (fs.name, "");
save_dir (); save_dir ();
if (save_file_dlg (&fs, "Salva il file con il nome:") == FL_OK) if (save_file_dlg (&fs, "Salva il file con il nome:") == FL_OK)
{ {
restore_dir (); restore_dir ();
char path[256]; char path[256];
dir_to_str (&fs.dir, path, sizeof (path)); dir_to_str (&fs.dir, path, sizeof (path));
newfilename << path << '/' << fs.name; newfilename = path;
newfilename << '/' << fs.name;
TPoint p1, p2; TPoint p1, p2;
if (_isselection) if (_isselection)
@ -1819,8 +1819,7 @@ bool TViswin::call_editor ()
ok = TRUE; ok = TRUE;
} }
} }
else restore_dir ();
restore_dir ();
} }
else else
warning_box ("Nessun editor specificato nei parametri studio"); warning_box ("Nessun editor specificato nei parametri studio");

View File

@ -342,7 +342,7 @@ void beep()
class TEvent_manager class TEvent_manager
{ {
enum { MAX = 16 }; enum { MAX = 2 };
WINDOW _w[MAX]; WINDOW _w[MAX];
EVENT _e[MAX]; EVENT _e[MAX];
int _begin, _end; int _begin, _end;
@ -360,8 +360,11 @@ void TEvent_manager::push(WINDOW w, const EVENT& e)
CHECK(w, "You shouldn't send events to NULL_WIN!"); CHECK(w, "You shouldn't send events to NULL_WIN!");
_w[_end] = w; _w[_end] = w;
_e[_end] = e; _e[_end] = e;
_end = (++_end) % MAX; const int next = (_end+1) % MAX;
CHECKD(_end != _begin, "Too many events queued: max. ", MAX); if (next == _begin)
error_box("Hey %s, clicca piu' piano!", (const char*)main_app().user());
else
_end = next;
} }
void TEvent_manager::pop() void TEvent_manager::pop()