diff --git a/src/f9/f90300.cpp b/src/f9/f90300.cpp index 5d8d4dc8a..1a9c07cbe 100644 --- a/src/f9/f90300.cpp +++ b/src/f9/f90300.cpp @@ -1,6 +1,76 @@ #include "f90.h" #include "applicat.h" #include "automask.h" +#include "f90300a.h" +#include "urldefid.h" +#include "utility.h" +#include +#include + +#define INI_ESTENSIONI "DOCUMENTI_EXT" + +#define F_ADDRGROUP 101 +#define F_ADDRESS 102 +#define F_DIRECTORY 103 + +/////////////////////////////////////////////////////////////////////////////// +// TGestione_doc_cartacei_f9_msk +/////////////////////////////////////////////////////////////////////////////// +#define TAutomask TMask + +class TImport_msk : public TAutomask +{ + friend class TGestione_doc_cartacei_f9_msk; + + static bool addr_handler(TMask_field& field, KEY key); + static bool dir_handler(TMask_field& field, KEY key); + static bool ok_handler(TMask_field& field, KEY key); + +#ifndef TAutomask + bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; +#endif +public: + TImport_msk(); +}; + +bool TImport_msk::addr_handler(TMask_field& field, KEY key) +{ + if (field.dirty() && key != K_TAB) + field.set(""); + return true; +} + +bool TImport_msk::dir_handler(TMask_field& field, KEY key) +{ + if(field.dirty() && key != K_TAB) + field.set(""); + return true; +} + +bool TImport_msk::ok_handler(TMask_field& field, KEY key) +{ + field.mask().send_key(K_ENTER, DLG_OK); + return true; +} + +TImport_msk::TImport_msk() : TAutomask("Apri...", 0, 78, 10) +{ + add_button_tool(DLG_OK, "Conferma", TOOL_OK); + add_button_tool(DLG_NULL, "", 0); + add_button_tool(DLG_QUIT, "Esci", TOOL_QUIT); + + add_groupbox(F_ADDRGROUP, 0, "", 1, 0, 76, 6, ""); + add_static( DLG_NULL, 0, "@BInserire percorso file.", 2, 1); + add_string( F_ADDRESS, 0, "Apri: ", 2, 2, 255, "B", 64).set_selector('F', EMPTY_STRING); + add_static( DLG_NULL, 0, "@BOppure, inserire percorso cartella per inserimento multiplo.", 2, 3); + add_string( F_DIRECTORY, 0, "Apri da:", 2, 4, 255, "B", 64).set_selector('D', EMPTY_STRING); + + TMask::set_handler(F_ADDRESS, addr_handler); + TMask::set_handler(F_DIRECTORY, dir_handler); +} + +#undef TAutomask + /////////////////////////////////////////////////////////////////////////////// // TGestione_doc_cartacei_f9_msk @@ -8,9 +78,21 @@ class TGestione_doc_cartacei_f9_msk : public TAutomask { + std::unique_ptr _import_msk; + std::unique_ptr> _extensions; + bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; + + void fill(); /* todo */ + static TToken_string& get_valid_extensions(); /* */ + void load_dir(const TString& dir); /* Carica i file della cartella specificata, controllandone l'estensione. */ + void load_extensions(); /* Lazy initialization for _extensions. */ + void load_file(const TFilename& file); /* Carica singolo file. */ + void open_import_win(); /* Esegue la maschera di importazione files (Lazy initilization). */ + bool verify_extension(const TFilename& file); /* Verifica che l'estensione del file sia valida. */ + public: - TGestione_doc_cartacei_f9_msk() : TAutomask("f90300a") { } + TGestione_doc_cartacei_f9_msk() : TAutomask("f90300a") { } }; bool TGestione_doc_cartacei_f9_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) @@ -18,32 +100,113 @@ bool TGestione_doc_cartacei_f9_msk::on_field_event(TOperable_field& o, TField_ev if(e == se_query_add || e == se_query_del || e == se_query_modify) return false; - switch(o.dlg()) - { - default: - break; - } + if (o.dlg() == B_IMPORT && e == fe_button) + open_import_win(); + return true; } +void TGestione_doc_cartacei_f9_msk::fill() +{ + // todo +} + +TToken_string& TGestione_doc_cartacei_f9_msk::get_valid_extensions() +{ + static TToken_string ext(ini_get_string(CONFIG_DITTA, "F9", "DOCUMENTI_EXT"), ','); + if (ext.items() == 0) + { + ext = ".pdf, .doc, .docx, .xls, .xlsx, .jpg, .jpeg, .png"; + ini_set_string(CONFIG_DITTA, "F9", INI_ESTENSIONI, ext); + } + ext.replace(" ", ""); + return ext; +} + +void TGestione_doc_cartacei_f9_msk::load_dir(const TString& dir) +{ + TFilename path(dir); + TString_array flist; + //bool* lookup_t = new bool[flist.items()]; + path.add("*.*"); // Qualsiasi file con estensione, controllo dopo. + list_files(path, flist); + FOR_EACH_ARRAY_ROW(flist, nr, file) + { + TFilename f(*file); + if (verify_extension(f)) + load_file(f); + } +} + +void TGestione_doc_cartacei_f9_msk::load_extensions() +{ + if (_extensions == nullptr) + { + _extensions = std::make_unique>(); + TToken_string& ext = get_valid_extensions(); + for (int i = 0; i < ext.items(); ++i) + { + TString e = ext.get(i); + if (!e.empty()) + { + if (e.starts_with(".")) + e.ltrim(1); + _extensions->insert(std::string(e)); + } + } + } +} + +void TGestione_doc_cartacei_f9_msk::load_file(const TFilename& file) +{ + // todo +} + +void TGestione_doc_cartacei_f9_msk::open_import_win() +{ + if(_import_msk == nullptr) + _import_msk = make_unique(); + while(_import_msk->run() == K_ENTER) + { + const TString& file = _import_msk->get(F_ADDRESS); + const TString& dir = _import_msk->get(F_DIRECTORY); + if(file.empty()) + load_dir(dir); + else + { + TFilename f(file); + if (verify_extension(f)) + load_file(f); + else + warning_box("Questo file e' in un formato non accettato."); + } + } +} + +bool TGestione_doc_cartacei_f9_msk::verify_extension(const TFilename& file) +{ + load_extensions(); + return _extensions->find(file.ext()) != _extensions->end(); +} + + + + /////////////////////////////////////////////////////////////////////////////// // TGestione_doc_cartacei_f9_app /////////////////////////////////////////////////////////////////////////////// class TGestione_doc_cartacei_f9_app : public TSkeleton_application { - void main_loop() override; -public: - TGestione_doc_cartacei_f9_app() = default; + void main_loop() override + { + TGestione_doc_cartacei_f9_msk msk; + while (msk.run() == K_ENTER) + { } + } }; -void TGestione_doc_cartacei_f9_app::main_loop() -{ - TGestione_doc_cartacei_f9_msk msk; - while(msk.run() == K_ENTER) - { } -} int f90300(const int argc, char* argv[]) diff --git a/src/f9/f90300a.uml b/src/f9/f90300a.uml index c221d8891..3950fea19 100644 --- a/src/f9/f90300a.uml +++ b/src/f9/f90300a.uml @@ -5,7 +5,7 @@ TOOLBAR "topbar" 0 0 0 2 BUTTON B_IMPORT 2 2 BEGIN PROMPT 1 1 "Impo~rta" - PICTURE TOOL_SAVEREC + PICTURE TOOL_IMPORT END BUTTON B_DELETE 2 2