Aggiunta gestione oggetti esterni (GOLEM)
Corretto errore per cui la stampante non si ricordava il suo tipo. git-svn-id: svn://10.65.10.50/trunk@1362 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									ef90c9e7dd
								
							
						
					
					
						commit
						e694e08d1a
					
				
							
								
								
									
										39
									
								
								include/bagn006.uml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										39
									
								
								include/bagn006.uml
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,39 @@ | |||||||
|  | #include <bagn006.h> | ||||||
|  | 
 | ||||||
|  | PAGE "Caratteristiche oggetto" -1, -1, 66, 6 | ||||||
|  | 
 | ||||||
|  | STRING F_CLASSE 8 | ||||||
|  | BEGIN       | ||||||
|  | PROMPT 1 1 "Classe " | ||||||
|  | FLAGS "DU" | ||||||
|  | FIELD CLASSE | ||||||
|  | END        | ||||||
|  | 
 | ||||||
|  | NUMBER F_CODICE 8 | ||||||
|  | BEGIN       | ||||||
|  | PROMPT 48 1 "Codice " | ||||||
|  | FLAGS "D" | ||||||
|  | FIELD CHIAVE | ||||||
|  | END        | ||||||
|  | 
 | ||||||
|  | STRING F_DESC 50 | ||||||
|  | BEGIN       | ||||||
|  | PROMPT 1 3 "Descrizione " | ||||||
|  | CHECKTYPE REQUIRED | ||||||
|  | WARNING "E' necessaria una breve descrizione" | ||||||
|  | FIELD DESC | ||||||
|  | END        | ||||||
|  | 
 | ||||||
|  | BUTTON DLG_OK 10 2 | ||||||
|  | BEGIN | ||||||
|  | PROMPT -12 -1 "" | ||||||
|  | END | ||||||
|  | 
 | ||||||
|  | BUTTON DLG_CANCEL 10 2 | ||||||
|  | BEGIN | ||||||
|  | PROMPT -22 -1 "" | ||||||
|  | END | ||||||
|  | 
 | ||||||
|  | ENDPAGE | ||||||
|  | 
 | ||||||
|  | ENDMASK | ||||||
| @ -36,5 +36,8 @@ | |||||||
| #define CLASS_SHEET_FIELD               28 | #define CLASS_SHEET_FIELD               28 | ||||||
| #define CLASS_BROWSEFILE_FIELD          29 | #define CLASS_BROWSEFILE_FIELD          29 | ||||||
| 
 | 
 | ||||||
|  | #define CLASS_GOLEM  200 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| // @END
 | // @END
 | ||||||
| #endif // __CLASSES_H
 | #endif // __CLASSES_H
 | ||||||
|  | |||||||
| @ -109,7 +109,7 @@ void TConfig::_write_file() | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| void TConfig::_check_paragraph(const char* section) | void TConfig::set_paragraph(const char* section) | ||||||
| { | { | ||||||
|   if (section != NULL && section != _paragraph) |   if (section != NULL && section != _paragraph) | ||||||
|   { |   { | ||||||
| @ -145,7 +145,7 @@ TString& TConfig::get(const char* var, const char* section, int index, const cha | |||||||
|     v = s; |     v = s; | ||||||
|   }   |   }   | ||||||
|    |    | ||||||
|   _check_paragraph(section); |   set_paragraph(section); | ||||||
| 
 | 
 | ||||||
|   if (_data.is_key(v))  |   if (_data.is_key(v))  | ||||||
|     s = (TString&)_data[v]; |     s = (TString&)_data[v]; | ||||||
| @ -217,7 +217,7 @@ bool TConfig::set(const char* var, const char* value, const char* section, | |||||||
|   // se force == TRUE crea la variabile se non esiste; altrimenti
 |   // se force == TRUE crea la variabile se non esiste; altrimenti
 | ||||||
|   // da' errore; ritorna TRUE se la variabile c'era, FALSE diversamente
 |   // da' errore; ritorna TRUE se la variabile c'era, FALSE diversamente
 | ||||||
| 
 | 
 | ||||||
|   _check_paragraph(section); |   set_paragraph(section); | ||||||
|   TString vvar(var); if (index != -1) vvar << '(' << index << ')'; |   TString vvar(var); if (index != -1) vvar << '(' << index << ')'; | ||||||
| 
 | 
 | ||||||
|   bool itwas = _data.is_key(vvar); |   bool itwas = _data.is_key(vvar); | ||||||
| @ -241,7 +241,7 @@ bool TConfig::set(const char* var, long value, const char* section, | |||||||
| 
 | 
 | ||||||
| word TConfig::items(const char* var, const char* section) | word TConfig::items(const char* var, const char* section) | ||||||
| { | { | ||||||
|   _check_paragraph(section); |   set_paragraph(section); | ||||||
|   TString vvar(16); |   TString vvar(16); | ||||||
|   for (int cnt = 0; /* uncazzo */ ;cnt++) |   for (int cnt = 0; /* uncazzo */ ;cnt++) | ||||||
|   { |   { | ||||||
| @ -297,11 +297,21 @@ TConfig::TConfig(int which_config, const char* paragraph) | |||||||
|     _file << "config"; |     _file << "config"; | ||||||
|     if (!fexist(_file)) |     if (!fexist(_file)) | ||||||
|       make_dir(_file); |       make_dir(_file); | ||||||
|     _file << '/' << (which_config == CONFIG_USER ? user() : "print") << ".ini"; |      | ||||||
|  |     switch (which_config) | ||||||
|  |     {       | ||||||
|  |     case CONFIG_STAMPE: | ||||||
|  |       _file.add("print.ini"); break; | ||||||
|  |     default: | ||||||
|  |       _file << '/' << user() << ".ini"; break; | ||||||
|  |     }   | ||||||
|     break; |     break; | ||||||
|   case CONFIG_FCONV: |   case CONFIG_FCONV: | ||||||
|     _file = "fconv.ini"; |     _file = "fconv.ini"; | ||||||
|     break; |     break; | ||||||
|  |   case CONFIG_GOLEM: | ||||||
|  |     _file.add("golem.ini");  | ||||||
|  |     break; | ||||||
|   default: |   default: | ||||||
|     _file = "prassi.ini"; |     _file = "prassi.ini"; | ||||||
|     break; |     break; | ||||||
|  | |||||||
| @ -23,6 +23,8 @@ class ofstream; | |||||||
| #define CONFIG_USER     4 | #define CONFIG_USER     4 | ||||||
| // file parametri stampe
 | // file parametri stampe
 | ||||||
| #define CONFIG_STAMPE   5 | #define CONFIG_STAMPE   5 | ||||||
|  | // file parametri golem
 | ||||||
|  | #define CONFIG_GOLEM    6 | ||||||
| 
 | 
 | ||||||
| class TConfig : public TObject | class TConfig : public TObject | ||||||
| { | { | ||||||
| @ -31,10 +33,10 @@ class TConfig : public TObject | |||||||
|   bool          _dirty, _ispresent; |   bool          _dirty, _ispresent; | ||||||
|   TString       _paragraph; |   TString       _paragraph; | ||||||
| 
 | 
 | ||||||
|  | protected: | ||||||
|   bool _read_paragraph(); |   bool _read_paragraph(); | ||||||
|   void _write_paragraph(ofstream&); |   void _write_paragraph(ofstream&); | ||||||
|   void _write_file(); |   void _write_file(); | ||||||
|   void _check_paragraph(const char*); |  | ||||||
|   void init(const char *fn, const char* pa); |   void init(const char *fn, const char* pa); | ||||||
| 
 | 
 | ||||||
| public: | public: | ||||||
| @ -74,6 +76,10 @@ public: | |||||||
|   // non si risponde di eventuali "buchi" causati da set() errate 
 |   // non si risponde di eventuali "buchi" causati da set() errate 
 | ||||||
|   word items(const char* var, const char* section); |   word items(const char* var, const char* section); | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  |   // Setta il paragrafo corrente
 | ||||||
|  |   void set_paragraph(const char* par); | ||||||
|  | 
 | ||||||
|   // il paragrafo iniziale e' il modulo corrente salvo diversa indicazione
 |   // il paragrafo iniziale e' il modulo corrente salvo diversa indicazione
 | ||||||
|   TConfig(int which_config = CONFIG_GENERAL, const char* paragraph = NULL); |   TConfig(int which_config = CONFIG_GENERAL, const char* paragraph = NULL); | ||||||
|   TConfig(const char* file, const char* paragraph = NULL); |   TConfig(const char* file, const char* paragraph = NULL); | ||||||
|  | |||||||
| @ -563,9 +563,11 @@ TPush_button::TPush_button(short left, short top, short right, short bottom, | |||||||
|     capt = format("#%d", BMP_FINDREC); |     capt = format("#%d", BMP_FINDREC); | ||||||
|     break; |     break; | ||||||
|   case DLG_F9: |   case DLG_F9: | ||||||
|  |     if (*capt != '#') | ||||||
|       capt = format("#%d", BMP_SEARCH); |       capt = format("#%d", BMP_SEARCH); | ||||||
|     break; |     break; | ||||||
|   case DLG_LINK: |   case DLG_LINK: | ||||||
|  |     if (strcmp("~Collega", caption()) == 0) | ||||||
|       capt = format("#%d", BMP_LINK); |       capt = format("#%d", BMP_LINK); | ||||||
|     break; |     break; | ||||||
|   case DLG_EDIT: |   case DLG_EDIT: | ||||||
|  | |||||||
| @ -90,6 +90,10 @@ image BMP_LINK      "f:/p.due/bmp/link.bmp" | |||||||
| image BMP_PRINT     "f:/p.due/bmp/print.bmp" | image BMP_PRINT     "f:/p.due/bmp/print.bmp" | ||||||
| image BMP_SETPRINT  "f:/p.due/bmp/setprint.bmp" | image BMP_SETPRINT  "f:/p.due/bmp/setprint.bmp" | ||||||
| image BMP_RECALC    "f:/p.due/bmp/recalc.bmp" | image BMP_RECALC    "f:/p.due/bmp/recalc.bmp" | ||||||
|  | image BMP_BMP       "f:/p.due/bmp/bmp.bmp" | ||||||
|  | image BMP_XLS       "f:/p.due/bmp/xls.bmp" | ||||||
|  | image BMP_WAV       "f:/p.due/bmp/wav.bmp" | ||||||
|  | image BMP_DOC       "f:/p.due/bmp/doc.bmp" | ||||||
| 
 | 
 | ||||||
| #scan <xil.h> | #scan <xil.h> | ||||||
| #transparent $$$ | #transparent $$$ | ||||||
|  | |||||||
| @ -61,7 +61,7 @@ int TExternal_app::run(bool async, bool utente) | |||||||
|       if (!async) |       if (!async) | ||||||
|       {                             |       {                             | ||||||
|         TTemp_window tw(TASK_WIN); |         TTemp_window tw(TASK_WIN); | ||||||
|         tw.iconize(); |         if (utente) tw.iconize(); | ||||||
|          |          | ||||||
|         HTASK child = NULL; |         HTASK child = NULL; | ||||||
|         TASKENTRY te; te.dwSize = sizeof(TASKENTRY);  |         TASKENTRY te; te.dwSize = sizeof(TASKENTRY);  | ||||||
| @ -82,7 +82,7 @@ int TExternal_app::run(bool async, bool utente) | |||||||
|           xvt_app_process_pending_events(); |           xvt_app_process_pending_events(); | ||||||
|         } |         } | ||||||
|          |          | ||||||
|         tw.maximize(); |         if (utente) tw.maximize(); | ||||||
|       } |       } | ||||||
|       xvt_statbar_refresh(); |       xvt_statbar_refresh(); | ||||||
|     }   |     }   | ||||||
|  | |||||||
| @ -139,7 +139,6 @@ protected: | |||||||
|    |    | ||||||
|   void string_at(int x, int y, const char* s); |   void string_at(int x, int y, const char* s); | ||||||
|    |    | ||||||
|    |  | ||||||
| public: | public: | ||||||
| 
 | 
 | ||||||
|   // permissions
 |   // permissions
 | ||||||
| @ -555,7 +554,6 @@ class TForm_subsection : public TForm_item | |||||||
|   TString        _name; |   TString        _name; | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
| 
 |  | ||||||
|   virtual void print_on(ostream& out) const;  |   virtual void print_on(ostream& out) const;  | ||||||
| 
 | 
 | ||||||
| public: | public: | ||||||
|  | |||||||
							
								
								
									
										205
									
								
								include/golem.cpp
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										205
									
								
								include/golem.cpp
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,205 @@ | |||||||
|  | #include <config.h> | ||||||
|  | #include <execp.h>  | ||||||
|  | #include <golem.h>  | ||||||
|  | #include <mask.h>  | ||||||
|  | #include <prefix.h> | ||||||
|  | #include <relation.h> | ||||||
|  | #include <urldefid.h> | ||||||
|  | #include <utility.h> | ||||||
|  | 
 | ||||||
|  | #include <bagn006.h> | ||||||
|  | 
 | ||||||
|  | long TGolem::_count = 0; | ||||||
|  | TFilename* TGolem::_path = NULL; | ||||||
|  | TConfig* TGolem::_config = NULL; | ||||||
|  | TRelation* TGolem::_golem = NULL; | ||||||
|  | 
 | ||||||
|  | TGolem::TGolem(const char* cls, long id) | ||||||
|  | : _class(cls), _id(id) | ||||||
|  | {                    | ||||||
|  |   CHECK(_class.not_empty() && id >= 0, "Invalid Golem creation"); | ||||||
|  |   _class.upper(); | ||||||
|  | 
 | ||||||
|  |   if (_count == 0) | ||||||
|  |   {  | ||||||
|  |     CHECK(_path == NULL, "Golem construction count error"); | ||||||
|  |     _path = new TFilename; | ||||||
|  |     _config = new TConfig(CONFIG_GOLEM, _class); | ||||||
|  |     _golem = new TRelation(LF_GOLEM); | ||||||
|  |   } | ||||||
|  |   _count++; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | TGolem::~TGolem() | ||||||
|  | { | ||||||
|  |   _count--; | ||||||
|  |   if (_count == 0) | ||||||
|  |   { | ||||||
|  |     CHECK(_path != NULL, "Golem destruction count error"); | ||||||
|  |     delete _golem; _golem = NULL; | ||||||
|  |     delete _config; _config = NULL; | ||||||
|  |     delete _path; _path = NULL; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | TConfig& TGolem::config() const | ||||||
|  | { | ||||||
|  |   _config->set_paragraph(_class); | ||||||
|  |   return *_config; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | bool TGolem::ok() const | ||||||
|  | { | ||||||
|  |   return _id > 0 && fexist(path()); | ||||||
|  | }  | ||||||
|  | 
 | ||||||
|  | const char* TGolem::class_name() const | ||||||
|  | { | ||||||
|  |   *_path = "GOLEM_"; | ||||||
|  |   *_path << _class << "_CLASS"; | ||||||
|  |   return *_path; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | word TGolem::class_id() const | ||||||
|  | { | ||||||
|  |   return CLASS_GOLEM; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | short TGolem::icon() const | ||||||
|  | { | ||||||
|  |   const short id = config().get_int("Icon", NULL, -1, DLG_F9); | ||||||
|  |   return id; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const char* TGolem::ext() const | ||||||
|  | { | ||||||
|  |   return config().get("Extension", NULL, -1, _class.left(3)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | const TFilename& TGolem::path(bool test) const | ||||||
|  | { | ||||||
|  |   const char* e = ext(); | ||||||
|  |   *_path = firm2dir(-1);           // C:\PRASSI\DATI
 | ||||||
|  |   _path->add("golem");             // C:\PRASSI\DATI\GOLEM
 | ||||||
|  |   if (test && !fexist(*_path)) | ||||||
|  |     make_dir(*_path); | ||||||
|  |    | ||||||
|  |   _path->add(_class);              // C:\PRASSI\DATI\GOLEM\BITMAP
 | ||||||
|  |   if (test && !fexist(*_path)) | ||||||
|  |     make_dir(*_path); | ||||||
|  |    | ||||||
|  |   if (_id > 0) | ||||||
|  |   { | ||||||
|  |     _path->add(format("%ld", _id));// C:\PRASSI\DATI\GOLEM\BMP\883
 | ||||||
|  |     _path->ext(e);                 // C:\PRASSI\DATI\GOLEM\BMP\883.BMP
 | ||||||
|  |   }   | ||||||
|  |   return *_path; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int TGolem::compare(const TSortable& s) const | ||||||
|  | { | ||||||
|  |   if (s.class_id() != class_id()) | ||||||
|  |     return UNDEFINED; | ||||||
|  |   const TGolem& g = (const TGolem&)s;   | ||||||
|  |   return int(_id - g._id); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool TGolem::edit() | ||||||
|  | { | ||||||
|  |   const TFilename& p = path(); | ||||||
|  |   bool ok = fexist(p); | ||||||
|  |   if (ok) | ||||||
|  |   { | ||||||
|  |     TFilename e(config().get("Editor")); | ||||||
|  |     e << ' ' << p; | ||||||
|  |      | ||||||
|  |     TExternal_app app(e); | ||||||
|  |     ok = app.run(FALSE, FALSE) == 0; | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |   return ok;   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | long TGolem::new_id() const | ||||||
|  | {    | ||||||
|  |   long id = 0; | ||||||
|  |    | ||||||
|  |   TLocalisamfile& gol = _golem->lfile(); | ||||||
|  |   gol.zero(); | ||||||
|  |   gol.put("CLASSE", _class); | ||||||
|  |   gol.put("CHIAVE", "99999999"); | ||||||
|  |    | ||||||
|  |   const int err = gol.read(_isgteq); | ||||||
|  |   switch (err)  | ||||||
|  |   { | ||||||
|  |   case NOERR:                        | ||||||
|  |     id = 0; break; | ||||||
|  |   case _isemptyfile: | ||||||
|  |     id = 1; break; | ||||||
|  |   default:   | ||||||
|  |     if (gol.get("CLASSE") != _class) | ||||||
|  |       gol.prev();                      | ||||||
|  |     if (gol.get("CLASSE") == _class) | ||||||
|  |       id = gol.get_long("CHIAVE")+1; | ||||||
|  |     else | ||||||
|  |       id = 1; | ||||||
|  |     break;     | ||||||
|  |   } | ||||||
|  |   return id; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool TGolem::import() | ||||||
|  | { | ||||||
|  |   FILE_SPEC fs; | ||||||
|  |   const char* const e = ext();                              | ||||||
|  |   xvt_fsys_convert_str_to_dir(".", &fs.dir); | ||||||
|  |   strcpy(fs.type, e); | ||||||
|  |   sprintf(fs.name, "*.%s", e); | ||||||
|  |   strcpy(fs.creator, "GOLEM"); | ||||||
|  |    | ||||||
|  |   xvt_fsys_save_dir(); | ||||||
|  |   FL_STATUS ok = xvt_dm_post_file_open(&fs, "Selezionare il file ..."); | ||||||
|  |   xvt_fsys_restore_dir(); | ||||||
|  |   if (ok == FL_OK) | ||||||
|  |   {             | ||||||
|  |     TFilename from; | ||||||
|  |     xvt_fsys_convert_dir_to_str(&fs.dir, (char*)(const char*)from, 80); | ||||||
|  |     from.add(fs.name); from.ext(e); | ||||||
|  | 
 | ||||||
|  |     TMask msk("bagn006"); | ||||||
|  |     msk.set(F_CLASSE, _class); | ||||||
|  |     msk.set(F_CODICE, new_id()); | ||||||
|  |      | ||||||
|  |     bool correct = msk.run() == K_ENTER; | ||||||
|  |     if (correct) | ||||||
|  |     { | ||||||
|  |       _id = msk.get_long(F_CODICE); | ||||||
|  |       correct = fcopy(from, path(TRUE)); | ||||||
|  |       if (correct) | ||||||
|  |       { | ||||||
|  |         msk.autosave(_golem); | ||||||
|  |         int err =  _golem->write(); | ||||||
|  |         if (err == _isreinsert)  | ||||||
|  |           err = _golem->rewrite(); | ||||||
|  |         if (err != NOERR) | ||||||
|  |         { | ||||||
|  |           error_box("Errore nell'aggiornamento del file degli oggetti"); | ||||||
|  |           ok = FL_BAD;   | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |       else  | ||||||
|  |       {             | ||||||
|  |         error_box("Spazio su disco insufficiente per l'oggetto"); | ||||||
|  |         ok = FL_BAD;   | ||||||
|  |       }   | ||||||
|  |     } | ||||||
|  |     else ok = FL_CANCEL;   | ||||||
|  |      | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |   return ok == FL_OK; | ||||||
|  | } | ||||||
							
								
								
									
										53
									
								
								include/golem.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										53
									
								
								include/golem.h
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,53 @@ | |||||||
|  | #ifndef __GOLEM_H | ||||||
|  | #define __GOLEM_H | ||||||
|  | 
 | ||||||
|  | #ifndef __STRINGS_H | ||||||
|  | #include <strings.h> | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifndef __CONFIG_H | ||||||
|  | class TConfig; | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifndef __RELATION_H | ||||||
|  | class TRelation; | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | // Generic Object Linking & Embedding Mechanism
 | ||||||
|  | 
 | ||||||
|  | class TGolem : public TSortable | ||||||
|  | {      | ||||||
|  |   static long _count; | ||||||
|  |   static TConfig* _config;  | ||||||
|  |   static TFilename* _path; | ||||||
|  |   static TRelation* _golem; | ||||||
|  | 
 | ||||||
|  |   TString16 _class; | ||||||
|  |   long _id; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  |   const TFilename& path(bool test = FALSE) const; | ||||||
|  |   const char* ext() const; | ||||||
|  |   TConfig& config() const; | ||||||
|  |   long new_id() const; | ||||||
|  |    | ||||||
|  | protected:// TSortable
 | ||||||
|  |   virtual int compare(const TSortable& o) const; | ||||||
|  | 
 | ||||||
|  | public:   // TObject
 | ||||||
|  |   virtual const char* class_name() const; | ||||||
|  |   virtual word class_id() const; | ||||||
|  |   virtual bool ok() const; | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  |   virtual short icon() const; | ||||||
|  |   virtual bool edit(); | ||||||
|  |   virtual bool import(); | ||||||
|  |    | ||||||
|  |   long id() const { return _id; }  | ||||||
|  | 
 | ||||||
|  |   TGolem(const char* cls, long id); | ||||||
|  |   virtual ~TGolem(); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
| @ -50,7 +50,11 @@ | |||||||
| #define LF_DIPEND               45 | #define LF_DIPEND               45 | ||||||
| #define LF_DETH                 46 | #define LF_DETH                 46 | ||||||
| #define LF_PROF                 50 | #define LF_PROF                 50 | ||||||
|  | #define LF_DESLIN               51 | ||||||
|  | #define LF_CONTR                52 | ||||||
|  | #define LF_RCONT                53 | ||||||
| #define LF_FORMS                54 | #define LF_FORMS                54 | ||||||
|  | #define LF_GOLEM                55 | ||||||
| 
 | 
 | ||||||
| #define CNF_GENERAL 10000 | #define CNF_GENERAL 10000 | ||||||
| #define CNF_STUDIO  CNF_GENERAL + 1 | #define CNF_STUDIO  CNF_GENERAL + 1 | ||||||
|  | |||||||
| @ -3,6 +3,7 @@ | |||||||
| #include <applicat.h> | #include <applicat.h> | ||||||
| #include <defmask.h> | #include <defmask.h> | ||||||
| #include <execp.h> | #include <execp.h> | ||||||
|  | #include <golem.h> | ||||||
| #include <mailbox.h> | #include <mailbox.h> | ||||||
| #include <mask.h> | #include <mask.h> | ||||||
| #include <prefix.h>  | #include <prefix.h>  | ||||||
| @ -817,6 +818,7 @@ bool TMask_field::on_key(KEY key) | |||||||
|        |        | ||||||
|       HWND hwnd = (HWND)xvt_vobj_get_attr(TASK_WIN, ATTR_NATIVE_WINDOW); |       HWND hwnd = (HWND)xvt_vobj_get_attr(TASK_WIN, ATTR_NATIVE_WINDOW); | ||||||
|       WinHelp(hwnd, hlp, HELP_MULTIKEY, (DWORD)&mk); |       WinHelp(hwnd, hlp, HELP_MULTIKEY, (DWORD)&mk); | ||||||
|  |       set_focus(); | ||||||
|       break; |       break; | ||||||
|     } |     } | ||||||
| #endif   | #endif   | ||||||
| @ -1122,7 +1124,15 @@ void TBrowse::parse_input(TScanner& scanner) | |||||||
|   if (*s == '"')        // Constant string
 |   if (*s == '"')        // Constant string
 | ||||||
|   { |   { | ||||||
|     scanner.push(); |     scanner.push(); | ||||||
|     _inp_id.add(scanner.line()); |     TString& str = scanner.line(); | ||||||
|  |     _inp_id.add(str); | ||||||
|  | 
 | ||||||
|  |     if (_cursor->file().num() == LF_GOLEM)       // GOLEM 2 detected!
 | ||||||
|  |     {                | ||||||
|  |       str.strip("\""); | ||||||
|  |       _insert = "G"; | ||||||
|  |       _insert << str; | ||||||
|  |     } | ||||||
|   } |   } | ||||||
|   else            // Field on the mask
 |   else            // Field on the mask
 | ||||||
|   { |   { | ||||||
| @ -1239,26 +1249,15 @@ void TBrowse::parse_join(TScanner& scanner) | |||||||
| 
 | 
 | ||||||
| void TBrowse::parse_insert(TScanner& scanner) | void TBrowse::parse_insert(TScanner& scanner) | ||||||
| { | { | ||||||
|   const TString16 key(scanner.popkey()); |   const TString& key = scanner.popkey(); | ||||||
| 
 |   _insert.cut(0); | ||||||
|   if (key == "NO") _insert = ""; |   if (key != "NO") | ||||||
|   else |  | ||||||
|   { |   { | ||||||
|     if (key == "RU") |     _insert << key[0] << scanner.line(); | ||||||
|     { |  | ||||||
|       _insert = "R"; |  | ||||||
|       _insert << scanner.line(); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|       _insert = "M"; |  | ||||||
|       _insert << scanner.line(); |  | ||||||
|     } |  | ||||||
|     _insert.trim(); |     _insert.trim(); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| // Certified 100%
 | // Certified 100%
 | ||||||
| TMask_field& TBrowse::field(short n) const | TMask_field& TBrowse::field(short n) const | ||||||
| { return _fld->mask().field(n); } | { return _fld->mask().field(n); } | ||||||
| @ -1406,7 +1405,6 @@ void TBrowse::do_clear() | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| bool TBrowse::do_insert() | bool TBrowse::do_insert() | ||||||
| { | { | ||||||
|   bool ok = FALSE; |   bool ok = FALSE; | ||||||
| @ -1422,16 +1420,17 @@ bool TBrowse::do_insert() | |||||||
|       app = format("ba3 -3 %s %d", (const char*)nm, _cursor->file().num()); |       app = format("ba3 -3 %s %d", (const char*)nm, _cursor->file().num()); | ||||||
|     // Obbligatorio usare la format globale
 |     // Obbligatorio usare la format globale
 | ||||||
|   } |   } | ||||||
|  |   else if (_insert[0] == 'G') | ||||||
|  |   {  | ||||||
|  |     TGolem golem(&_insert[1], atol(field().get())); | ||||||
|  |     const bool ok = golem.edit(); | ||||||
|  |     return ok ? TRUE : error_box("Impossibile modificare l'oggetto"); | ||||||
|  |   } | ||||||
|   else |   else | ||||||
|   { |   { | ||||||
|     app = _insert.mid(1); |     app = &_insert[1]; | ||||||
|   } |   } | ||||||
|   /*
 | 
 | ||||||
|      #if XVT_OS == XVT_OS_WIN |  | ||||||
|      if (strnicmp(app, main_app().name(), 3) == 0) |  | ||||||
|      app.insert("a", 3); |  | ||||||
|      #endif |  | ||||||
|      */ |  | ||||||
|   TMailbox mail; |   TMailbox mail; | ||||||
|   TMessage msg(app, MSG_AI, ""); |   TMessage msg(app, MSG_AI, ""); | ||||||
|   mail.send(msg); |   mail.send(msg); | ||||||
| @ -1536,6 +1535,12 @@ KEY TBrowse::run() | |||||||
|   {    |   {    | ||||||
|     buttons = 1;      // Mette il bottone di gestione, a meno che ...   
 |     buttons = 1;      // Mette il bottone di gestione, a meno che ...   
 | ||||||
|      |      | ||||||
|  |     if (_insert[0] == 'G') | ||||||
|  |     { | ||||||
|  |       buttons |= 2; | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     {          | ||||||
|       const TString& maskname = _fld->mask().source_file(); |       const TString& maskname = _fld->mask().source_file(); | ||||||
|       if (maskname.compare("batb", 4, TRUE) == 0 && _fld->in_key(0)) |       if (maskname.compare("batb", 4, TRUE) == 0 && _fld->in_key(0)) | ||||||
|       { |       { | ||||||
| @ -1544,6 +1549,7 @@ KEY TBrowse::run() | |||||||
|           buttons = 0; |           buttons = 0; | ||||||
|       } |       } | ||||||
|     }   |     }   | ||||||
|  |   } | ||||||
|    |    | ||||||
|   TBrowse_sheet s(_cursor, _items, caption, _head, buttons, _fld, sib); |   TBrowse_sheet s(_cursor, _items, caption, _head, buttons, _fld, sib); | ||||||
|   k = s.run(); |   k = s.run(); | ||||||
| @ -1553,7 +1559,17 @@ KEY TBrowse::run() | |||||||
| switch (k) | switch (k) | ||||||
| { | { | ||||||
|  case K_INS:     |  case K_INS:     | ||||||
|  |   if (_insert[0] == 'G') | ||||||
|  |     field().set(format("%ld", selected+1)); | ||||||
|   k = do_insert() ? K_ENTER : K_ESC; |   k = do_insert() ? K_ENTER : K_ESC; | ||||||
|  |   break; | ||||||
|  |  case K_CTRL+'N': | ||||||
|  | { | ||||||
|  |   TGolem gol(&_insert[1], 0); | ||||||
|  |   if (gol.import()) | ||||||
|  |     field().set(format("%ld", gol.id())); | ||||||
|  | } | ||||||
|  | k = K_ENTER; | ||||||
| break; | break; | ||||||
|  case K_ENTER: |  case K_ENTER: | ||||||
|  *_cursor = selected; |  *_cursor = selected; | ||||||
| @ -1935,8 +1951,16 @@ void TEdit_field::create(WINDOW parent) | |||||||
|       flags &= ~CTL_FLAG_DISABLED; |       flags &= ~CTL_FLAG_DISABLED; | ||||||
|       flags |= CTL_FLAG_INVISIBLE; |       flags |= CTL_FLAG_INVISIBLE; | ||||||
|     }       |     }       | ||||||
|  |      | ||||||
|  |     TString16 ico("*");                       | ||||||
|  |     if (_browse && _browse->get_insert()[0] == 'G') | ||||||
|  |     {                         | ||||||
|  |       const char* g = _browse->get_insert(); | ||||||
|  |       TGolem golem(g+1, 0); | ||||||
|  |       ico.format("#%d", golem.icon()); | ||||||
|  |     } | ||||||
|     _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, ico, parent, flags, PTR_LONG(this), DLG_F9); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -983,10 +983,14 @@ void TPrinter::read_configuration(const char* parag) | |||||||
|   case 1:             // file
 |   case 1:             // file
 | ||||||
|     _printertype = fileprinter; |     _printertype = fileprinter; | ||||||
|     break; |     break; | ||||||
|   case 2:             // video
 |   case 4:             // video
 | ||||||
|     _printertype = screenvis; |     _printertype = screenvis; | ||||||
|     _curcode = 0; |     _curcode = 0; | ||||||
|     break; |     break; | ||||||
|  |   case 6:             // export
 | ||||||
|  |     _printertype = export; | ||||||
|  |     _curcode = 0; | ||||||
|  |     break; | ||||||
|   default: |   default: | ||||||
|     break;   |     break;   | ||||||
|   }                      |   }                      | ||||||
|  | |||||||
| @ -79,13 +79,13 @@ TSheet::TSheet(short x, short y, short dx, short dy, | |||||||
|   { |   { | ||||||
|     _visible_rows = rows()- head_on() - 3; |     _visible_rows = rows()- head_on() - 3; | ||||||
| 
 | 
 | ||||||
|     add_button(DLG_SELECT, "Selezione" ); |     add_button(DLG_SELECT, "Selezione", K_ENTER); | ||||||
|     if (_checkable)    add_button(DLG_USER,   "Tutti"); |     if (_checkable)    add_button(DLG_USER,   "Tutti"); | ||||||
|     if (buttons & 0x1) add_button(DLG_NEWREC, "Gestione"); |     if (buttons & 0x1) add_button(DLG_LINK,   "Gestione", K_INS); | ||||||
|     if (buttons & 0x2) add_button(DLG_NEWREC, "Nuovo"); |     if (buttons & 0x2) add_button(DLG_NEWREC, "~Nuovo", K_CTRL+'N'); | ||||||
|     if (buttons & 0x4) add_button(DLG_DELREC, "Elimina"); |     if (buttons & 0x4) add_button(DLG_DELREC, "Elimina", K_DEL); | ||||||
|     if (buttons & 0x8) add_button(DLG_QUIT,   "Fine"); |     if (buttons & 0x8) add_button(DLG_QUIT,   "Fine", K_ESC); | ||||||
|     else               add_button(DLG_CANCEL, "Annulla"); |     else               add_button(DLG_CANCEL, "Annulla", K_ESC); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -222,6 +222,7 @@ void TSheet::handler(WINDOW win, EVENT* ep) | |||||||
|   case E_CONTROL: |   case E_CONTROL: | ||||||
|     switch(ep->v.ctl.id) |     switch(ep->v.ctl.id) | ||||||
|     { |     { | ||||||
|  |       /*    
 | ||||||
|          case DLG_OK    : |          case DLG_OK    : | ||||||
|          case DLG_SELECT: |          case DLG_SELECT: | ||||||
|          dispatch_e_char(win, K_ENTER); break; |          dispatch_e_char(win, K_ENTER); break; | ||||||
| @ -229,9 +230,12 @@ void TSheet::handler(WINDOW win, EVENT* ep) | |||||||
|          case DLG_QUIT  : |          case DLG_QUIT  : | ||||||
|          dispatch_e_char(win, K_ESC); break; |          dispatch_e_char(win, K_ESC); break; | ||||||
|          case DLG_NEWREC: |          case DLG_NEWREC: | ||||||
|  |          dispatch_e_char(win, K_CTRL+'N'); break; | ||||||
|  |          case DLG_LINK: | ||||||
|          dispatch_e_char(win, K_INS); break; |          dispatch_e_char(win, K_INS); break; | ||||||
|          case DLG_DELREC: |          case DLG_DELREC: | ||||||
|          dispatch_e_char(win, K_DEL); break; |          dispatch_e_char(win, K_DEL); break; | ||||||
|  |          */       | ||||||
|     case DLG_USER: |     case DLG_USER: | ||||||
|       dispatch_e_char(win, one_checked() ? K_F2 : K_F3); break; |       dispatch_e_char(win, one_checked() ? K_F2 : K_F3); break; | ||||||
|     default: |     default: | ||||||
| @ -288,8 +292,12 @@ bool TSheet::on_key(KEY key) | |||||||
|       stop_run(key); |       stop_run(key); | ||||||
|     break; |     break; | ||||||
|   case K_INS: |   case K_INS: | ||||||
|     if (_buttonmask & 0x3) |     if (_buttonmask & 0x1) | ||||||
|       stop_run(K_INS); |       stop_run(key); | ||||||
|  |     break; | ||||||
|  |   case K_CTRL+'N': | ||||||
|  |     if (_buttonmask & 0x2) | ||||||
|  |       stop_run(key); | ||||||
|     break; |     break; | ||||||
|   case K_LHOME: |   case K_LHOME: | ||||||
|     select(0); |     select(0); | ||||||
| @ -885,7 +893,7 @@ KEY TBrowse_sheet::run() | |||||||
|    |    | ||||||
|   const KEY key = TCursor_sheet::run(); |   const KEY key = TCursor_sheet::run(); | ||||||
|    |    | ||||||
|   if (key == K_ESC || key == K_INS || key >= K_CTRL)                         |   if (key != K_ENTER)                         | ||||||
|   { |   { | ||||||
|     field().set(old);                      // Restore field status
 |     field().set(old);                      // Restore field status
 | ||||||
|     field().set_dirty(spork); |     field().set_dirty(spork); | ||||||
|  | |||||||
| @ -851,7 +851,8 @@ const char* TFilename::path() const | |||||||
| 
 | 
 | ||||||
| TFilename& TFilename::add(const char* n) | TFilename& TFilename::add(const char* n) | ||||||
| { | { | ||||||
|   if (not_empty()) *this << SLASH; |   if (not_empty() && is_not_slash(_str[len()-1])) | ||||||
|  |     *this << SLASH; | ||||||
|   *this << n; |   *this << n; | ||||||
|   return *this; |   return *this; | ||||||
| } | } | ||||||
|  | |||||||
| @ -56,6 +56,10 @@ | |||||||
| #define BMP_BOOK2     132 | #define BMP_BOOK2     132 | ||||||
| #define BMP_BOOK3     133 | #define BMP_BOOK3     133 | ||||||
| #define BMP_MODULE    134 | #define BMP_MODULE    134 | ||||||
|  | #define BMP_BMP       135 | ||||||
|  | #define BMP_WAV       136 | ||||||
|  | #define BMP_XLS       137 | ||||||
|  | #define BMP_DOC       138 | ||||||
| #define BMP_SAVERECDN 153 | #define BMP_SAVERECDN 153 | ||||||
| #define BMP_DELRECDN  154 | #define BMP_DELRECDN  154 | ||||||
| #define BMP_NEWRECDN  155 | #define BMP_NEWRECDN  155 | ||||||
|  | |||||||
| @ -809,6 +809,7 @@ WINDOW xvt_create_control(WIN_TYPE wt, | |||||||
| 
 | 
 | ||||||
|   if (win == NULL_WIN) |   if (win == NULL_WIN) | ||||||
|   {              |   {              | ||||||
|  | #if XVT_OS == XVT_OS_SCOUNIX   | ||||||
|     if (wt == WC_PUSHBUTTON) |     if (wt == WC_PUSHBUTTON) | ||||||
|     { |     { | ||||||
|       if (dy == 2) r.bottom -= ROWY; |       if (dy == 2) r.bottom -= ROWY; | ||||||
| @ -816,7 +817,7 @@ WINDOW xvt_create_control(WIN_TYPE wt, | |||||||
|       { wt = WC_TEXT;   r.right = r.left+CHARX; caption = "*"; } |       { wt = WC_TEXT;   r.right = r.left+CHARX; caption = "*"; } | ||||||
|       else if (*caption == '*') caption = ""; |       else if (*caption == '*') caption = ""; | ||||||
|     } |     } | ||||||
| 
 | #endif | ||||||
|     while (*caption == '@') caption += 2; |     while (*caption == '@') caption += 2; | ||||||
|     win = xvt_ctl_create(wt, &r, (char*)caption, parent, |     win = xvt_ctl_create(wt, &r, (char*)caption, parent, | ||||||
|                          flags, app_data, id); |                          flags, app_data, id); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user