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_BROWSEFILE_FIELD          29
 | 
			
		||||
 | 
			
		||||
#define CLASS_GOLEM  200
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// @END
 | 
			
		||||
#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)
 | 
			
		||||
  {
 | 
			
		||||
@ -145,7 +145,7 @@ TString& TConfig::get(const char* var, const char* section, int index, const cha
 | 
			
		||||
    v = s;
 | 
			
		||||
  }  
 | 
			
		||||
  
 | 
			
		||||
  _check_paragraph(section);
 | 
			
		||||
  set_paragraph(section);
 | 
			
		||||
 | 
			
		||||
  if (_data.is_key(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
 | 
			
		||||
  // 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 << ')';
 | 
			
		||||
 | 
			
		||||
  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)
 | 
			
		||||
{
 | 
			
		||||
  _check_paragraph(section);
 | 
			
		||||
  set_paragraph(section);
 | 
			
		||||
  TString vvar(16);
 | 
			
		||||
  for (int cnt = 0; /* uncazzo */ ;cnt++)
 | 
			
		||||
  {
 | 
			
		||||
@ -297,11 +297,21 @@ TConfig::TConfig(int which_config, const char* paragraph)
 | 
			
		||||
    _file << "config";
 | 
			
		||||
    if (!fexist(_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;
 | 
			
		||||
  case CONFIG_FCONV:
 | 
			
		||||
    _file = "fconv.ini";
 | 
			
		||||
    break;
 | 
			
		||||
  case CONFIG_GOLEM:
 | 
			
		||||
    _file.add("golem.ini"); 
 | 
			
		||||
    break;
 | 
			
		||||
  default:
 | 
			
		||||
    _file = "prassi.ini";
 | 
			
		||||
    break;
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,8 @@ class ofstream;
 | 
			
		||||
#define CONFIG_USER     4
 | 
			
		||||
// file parametri stampe
 | 
			
		||||
#define CONFIG_STAMPE   5
 | 
			
		||||
// file parametri golem
 | 
			
		||||
#define CONFIG_GOLEM    6
 | 
			
		||||
 | 
			
		||||
class TConfig : public TObject
 | 
			
		||||
{
 | 
			
		||||
@ -31,10 +33,10 @@ class TConfig : public TObject
 | 
			
		||||
  bool          _dirty, _ispresent;
 | 
			
		||||
  TString       _paragraph;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
  bool _read_paragraph();
 | 
			
		||||
  void _write_paragraph(ofstream&);
 | 
			
		||||
  void _write_file();
 | 
			
		||||
  void _check_paragraph(const char*);
 | 
			
		||||
  void init(const char *fn, const char* pa);
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
@ -74,6 +76,10 @@ public:
 | 
			
		||||
  // non si risponde di eventuali "buchi" causati da set() errate 
 | 
			
		||||
  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
 | 
			
		||||
  TConfig(int which_config = CONFIG_GENERAL, 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);
 | 
			
		||||
    break;
 | 
			
		||||
  case DLG_F9:
 | 
			
		||||
    if (*capt != '#')
 | 
			
		||||
      capt = format("#%d", BMP_SEARCH);
 | 
			
		||||
    break;
 | 
			
		||||
  case DLG_LINK:
 | 
			
		||||
    if (strcmp("~Collega", caption()) == 0)
 | 
			
		||||
      capt = format("#%d", BMP_LINK);
 | 
			
		||||
    break;
 | 
			
		||||
  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_SETPRINT  "f:/p.due/bmp/setprint.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>
 | 
			
		||||
#transparent $$$
 | 
			
		||||
 | 
			
		||||
@ -61,7 +61,7 @@ int TExternal_app::run(bool async, bool utente)
 | 
			
		||||
      if (!async)
 | 
			
		||||
      {                            
 | 
			
		||||
        TTemp_window tw(TASK_WIN);
 | 
			
		||||
        tw.iconize();
 | 
			
		||||
        if (utente) tw.iconize();
 | 
			
		||||
        
 | 
			
		||||
        HTASK child = NULL;
 | 
			
		||||
        TASKENTRY te; te.dwSize = sizeof(TASKENTRY); 
 | 
			
		||||
@ -82,7 +82,7 @@ int TExternal_app::run(bool async, bool utente)
 | 
			
		||||
          xvt_app_process_pending_events();
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        tw.maximize();
 | 
			
		||||
        if (utente) tw.maximize();
 | 
			
		||||
      }
 | 
			
		||||
      xvt_statbar_refresh();
 | 
			
		||||
    }  
 | 
			
		||||
 | 
			
		||||
@ -139,7 +139,6 @@ protected:
 | 
			
		||||
  
 | 
			
		||||
  void string_at(int x, int y, const char* s);
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
  // permissions
 | 
			
		||||
@ -555,7 +554,6 @@ class TForm_subsection : public TForm_item
 | 
			
		||||
  TString        _name;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
 | 
			
		||||
  virtual void print_on(ostream& out) const; 
 | 
			
		||||
 | 
			
		||||
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_DETH                 46
 | 
			
		||||
#define LF_PROF                 50
 | 
			
		||||
#define LF_DESLIN               51
 | 
			
		||||
#define LF_CONTR                52
 | 
			
		||||
#define LF_RCONT                53
 | 
			
		||||
#define LF_FORMS                54
 | 
			
		||||
#define LF_GOLEM                55
 | 
			
		||||
 | 
			
		||||
#define CNF_GENERAL 10000
 | 
			
		||||
#define CNF_STUDIO  CNF_GENERAL + 1
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,7 @@
 | 
			
		||||
#include <applicat.h>
 | 
			
		||||
#include <defmask.h>
 | 
			
		||||
#include <execp.h>
 | 
			
		||||
#include <golem.h>
 | 
			
		||||
#include <mailbox.h>
 | 
			
		||||
#include <mask.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);
 | 
			
		||||
      WinHelp(hwnd, hlp, HELP_MULTIKEY, (DWORD)&mk);
 | 
			
		||||
      set_focus();
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
#endif  
 | 
			
		||||
@ -1122,7 +1124,15 @@ void TBrowse::parse_input(TScanner& scanner)
 | 
			
		||||
  if (*s == '"')        // Constant string
 | 
			
		||||
  {
 | 
			
		||||
    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
 | 
			
		||||
  {
 | 
			
		||||
@ -1239,26 +1249,15 @@ void TBrowse::parse_join(TScanner& scanner)
 | 
			
		||||
 | 
			
		||||
void TBrowse::parse_insert(TScanner& scanner)
 | 
			
		||||
{
 | 
			
		||||
  const TString16 key(scanner.popkey());
 | 
			
		||||
 | 
			
		||||
  if (key == "NO") _insert = "";
 | 
			
		||||
  else
 | 
			
		||||
  const TString& key = scanner.popkey();
 | 
			
		||||
  _insert.cut(0);
 | 
			
		||||
  if (key != "NO")
 | 
			
		||||
  {
 | 
			
		||||
    if (key == "RU")
 | 
			
		||||
    {
 | 
			
		||||
      _insert = "R";
 | 
			
		||||
      _insert << scanner.line();
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      _insert = "M";
 | 
			
		||||
      _insert << scanner.line();
 | 
			
		||||
    }
 | 
			
		||||
    _insert << key[0] << scanner.line();
 | 
			
		||||
    _insert.trim();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Certified 100%
 | 
			
		||||
TMask_field& TBrowse::field(short n) const
 | 
			
		||||
{ return _fld->mask().field(n); }
 | 
			
		||||
@ -1406,7 +1405,6 @@ void TBrowse::do_clear()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool TBrowse::do_insert()
 | 
			
		||||
{
 | 
			
		||||
  bool ok = FALSE;
 | 
			
		||||
@ -1422,16 +1420,17 @@ bool TBrowse::do_insert()
 | 
			
		||||
      app = format("ba3 -3 %s %d", (const char*)nm, _cursor->file().num());
 | 
			
		||||
    // 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
 | 
			
		||||
  {
 | 
			
		||||
    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;
 | 
			
		||||
  TMessage msg(app, MSG_AI, "");
 | 
			
		||||
  mail.send(msg);
 | 
			
		||||
@ -1536,6 +1535,12 @@ KEY TBrowse::run()
 | 
			
		||||
  {   
 | 
			
		||||
    buttons = 1;      // Mette il bottone di gestione, a meno che ...   
 | 
			
		||||
    
 | 
			
		||||
    if (_insert[0] == 'G')
 | 
			
		||||
    {
 | 
			
		||||
      buttons |= 2;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {         
 | 
			
		||||
      const TString& maskname = _fld->mask().source_file();
 | 
			
		||||
      if (maskname.compare("batb", 4, TRUE) == 0 && _fld->in_key(0))
 | 
			
		||||
      {
 | 
			
		||||
@ -1544,6 +1549,7 @@ KEY TBrowse::run()
 | 
			
		||||
          buttons = 0;
 | 
			
		||||
      }
 | 
			
		||||
    }  
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  TBrowse_sheet s(_cursor, _items, caption, _head, buttons, _fld, sib);
 | 
			
		||||
  k = s.run();
 | 
			
		||||
@ -1553,7 +1559,17 @@ KEY TBrowse::run()
 | 
			
		||||
switch (k)
 | 
			
		||||
{
 | 
			
		||||
 case K_INS:    
 | 
			
		||||
  if (_insert[0] == 'G')
 | 
			
		||||
    field().set(format("%ld", selected+1));
 | 
			
		||||
  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;
 | 
			
		||||
 case K_ENTER:
 | 
			
		||||
 *_cursor = selected;
 | 
			
		||||
@ -1935,8 +1951,16 @@ void TEdit_field::create(WINDOW parent)
 | 
			
		||||
      flags &= ~CTL_FLAG_DISABLED;
 | 
			
		||||
      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,
 | 
			
		||||
                                    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
 | 
			
		||||
    _printertype = fileprinter;
 | 
			
		||||
    break;
 | 
			
		||||
  case 2:             // video
 | 
			
		||||
  case 4:             // video
 | 
			
		||||
    _printertype = screenvis;
 | 
			
		||||
    _curcode = 0;
 | 
			
		||||
    break;
 | 
			
		||||
  case 6:             // export
 | 
			
		||||
    _printertype = export;
 | 
			
		||||
    _curcode = 0;
 | 
			
		||||
    break;
 | 
			
		||||
  default:
 | 
			
		||||
    break;  
 | 
			
		||||
  }                     
 | 
			
		||||
 | 
			
		||||
@ -79,13 +79,13 @@ TSheet::TSheet(short x, short y, short dx, short dy,
 | 
			
		||||
  {
 | 
			
		||||
    _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 (buttons & 0x1) add_button(DLG_NEWREC, "Gestione");
 | 
			
		||||
    if (buttons & 0x2) add_button(DLG_NEWREC, "Nuovo");
 | 
			
		||||
    if (buttons & 0x4) add_button(DLG_DELREC, "Elimina");
 | 
			
		||||
    if (buttons & 0x8) add_button(DLG_QUIT,   "Fine");
 | 
			
		||||
    else               add_button(DLG_CANCEL, "Annulla");
 | 
			
		||||
    if (buttons & 0x1) add_button(DLG_LINK,   "Gestione", K_INS);
 | 
			
		||||
    if (buttons & 0x2) add_button(DLG_NEWREC, "~Nuovo", K_CTRL+'N');
 | 
			
		||||
    if (buttons & 0x4) add_button(DLG_DELREC, "Elimina", K_DEL);
 | 
			
		||||
    if (buttons & 0x8) add_button(DLG_QUIT,   "Fine", K_ESC);
 | 
			
		||||
    else               add_button(DLG_CANCEL, "Annulla", K_ESC);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -222,6 +222,7 @@ void TSheet::handler(WINDOW win, EVENT* ep)
 | 
			
		||||
  case E_CONTROL:
 | 
			
		||||
    switch(ep->v.ctl.id)
 | 
			
		||||
    {
 | 
			
		||||
      /*    
 | 
			
		||||
         case DLG_OK    :
 | 
			
		||||
         case DLG_SELECT:
 | 
			
		||||
         dispatch_e_char(win, K_ENTER); break;
 | 
			
		||||
@ -229,9 +230,12 @@ void TSheet::handler(WINDOW win, EVENT* ep)
 | 
			
		||||
         case DLG_QUIT  :
 | 
			
		||||
         dispatch_e_char(win, K_ESC); break;
 | 
			
		||||
         case DLG_NEWREC:
 | 
			
		||||
         dispatch_e_char(win, K_CTRL+'N'); break;
 | 
			
		||||
         case DLG_LINK:
 | 
			
		||||
         dispatch_e_char(win, K_INS); break;
 | 
			
		||||
         case DLG_DELREC:
 | 
			
		||||
         dispatch_e_char(win, K_DEL); break;
 | 
			
		||||
         */      
 | 
			
		||||
    case DLG_USER:
 | 
			
		||||
      dispatch_e_char(win, one_checked() ? K_F2 : K_F3); break;
 | 
			
		||||
    default:
 | 
			
		||||
@ -288,8 +292,12 @@ bool TSheet::on_key(KEY key)
 | 
			
		||||
      stop_run(key);
 | 
			
		||||
    break;
 | 
			
		||||
  case K_INS:
 | 
			
		||||
    if (_buttonmask & 0x3)
 | 
			
		||||
      stop_run(K_INS);
 | 
			
		||||
    if (_buttonmask & 0x1)
 | 
			
		||||
      stop_run(key);
 | 
			
		||||
    break;
 | 
			
		||||
  case K_CTRL+'N':
 | 
			
		||||
    if (_buttonmask & 0x2)
 | 
			
		||||
      stop_run(key);
 | 
			
		||||
    break;
 | 
			
		||||
  case K_LHOME:
 | 
			
		||||
    select(0);
 | 
			
		||||
@ -885,7 +893,7 @@ KEY TBrowse_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_dirty(spork);
 | 
			
		||||
 | 
			
		||||
@ -851,7 +851,8 @@ const char* TFilename::path() const
 | 
			
		||||
 | 
			
		||||
TFilename& TFilename::add(const char* n)
 | 
			
		||||
{
 | 
			
		||||
  if (not_empty()) *this << SLASH;
 | 
			
		||||
  if (not_empty() && is_not_slash(_str[len()-1]))
 | 
			
		||||
    *this << SLASH;
 | 
			
		||||
  *this << n;
 | 
			
		||||
  return *this;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -56,6 +56,10 @@
 | 
			
		||||
#define BMP_BOOK2     132
 | 
			
		||||
#define BMP_BOOK3     133
 | 
			
		||||
#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_DELRECDN  154
 | 
			
		||||
#define BMP_NEWRECDN  155
 | 
			
		||||
 | 
			
		||||
@ -809,6 +809,7 @@ WINDOW xvt_create_control(WIN_TYPE wt,
 | 
			
		||||
 | 
			
		||||
  if (win == NULL_WIN)
 | 
			
		||||
  {             
 | 
			
		||||
#if XVT_OS == XVT_OS_SCOUNIX  
 | 
			
		||||
    if (wt == WC_PUSHBUTTON)
 | 
			
		||||
    {
 | 
			
		||||
      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 = "*"; }
 | 
			
		||||
      else if (*caption == '*') caption = "";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
    while (*caption == '@') caption += 2;
 | 
			
		||||
    win = xvt_ctl_create(wt, &r, (char*)caption, parent,
 | 
			
		||||
                         flags, app_data, id);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user