Disk ARchive  2.3.11
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Defines
user_interaction.hpp
Go to the documentation of this file.
00001 /*********************************************************************/
00002 // dar - disk archive - a backup/restoration program
00003 // Copyright (C) 2002-2052 Denis Corbin
00004 //
00005 // This program is free software; you can redistribute it and/or
00006 // modify it under the terms of the GNU General Public License
00007 // as published by the Free Software Foundation; either version 2
00008 // of the License, or (at your option) any later version.
00009 //
00010 // This program is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 // GNU General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU General Public License
00016 // along with this program; if not, write to the Free Software
00017 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00018 //
00019 // to contact the author : dar.linux@free.fr
00020 /*********************************************************************/
00021 // $Id: user_interaction.hpp,v 1.18.2.3 2009/04/07 08:45:29 edrusb Rel $
00022 //
00023 /*********************************************************************/
00024 
00033 
00034 
00036 // IMPORTANT : THIS FILE MUST ALWAYS BE INCLUDE AFTER infinint.hpp   //
00037 //             (and infinint.hpp must be included too, always)       //
00039 #include "infinint.hpp"
00041 
00042 
00043 
00044 #ifndef USER_INTERACTION_HPP
00045 #define USER_INTERACTION_HPP
00046 
00047 #include "../my_config.h"
00048 
00049 #include <string>
00050 #include "erreurs.hpp"
00051 #include "integers.hpp"
00052 
00053 namespace libdar
00054 {
00055 
00057 
00091     class user_interaction
00092     {
00093     public:
00094 
00096         user_interaction();
00097         virtual ~user_interaction() {};
00098 
00100 
00104         virtual void pause(const std::string & message)
00105             {
00106                 if(!pause2(message))
00107                     throw Euser_abort(message);
00108             };
00109 
00111 
00118         virtual bool pause2(const std::string & message)
00119         { throw Elibcall("user_interaction::pause2", "user_interaction::pause() or pause2() must be overwritten !"); };
00120 
00121 
00127         void warning(const std::string & message);
00128 
00130 
00134         virtual std::string get_string(const std::string & message, bool echo) = 0;
00135 
00142 
00154         virtual void listing(const std::string & flag,
00155                              const std::string & perm,
00156                              const std::string & uid,
00157                              const std::string & gid,
00158                              const std::string & size,
00159                              const std::string & date,
00160                              const std::string & filename,
00161                              bool is_dir,
00162                              bool has_children);
00163 
00164 
00165 
00172 
00177         virtual void dar_manager_show_files(const std::string & filename,
00178                                           bool available_data,
00179                                           bool available_ea);
00180 
00181 
00188 
00193         virtual void dar_manager_contents(U_I number,
00194                                          const std::string & chemin,
00195                                          const std::string & archive_name);
00196 
00203 
00210         virtual void dar_manager_statistics(U_I number,
00211                                             const infinint & data_count,
00212                                             const infinint & total_data,
00213                                             const infinint & ea_count,
00214                                             const infinint & total_ea);
00215 
00222 
00227         virtual void dar_manager_show_version(U_I number,
00228                                               const std::string & data_date,
00229                                               const std::string & ea_date);
00230 
00232 
00240         void printf(const char *format, ...);
00241 
00245 
00247         bool get_use_listing() const { return use_listing; };
00249         bool get_use_dar_manager_show_files() const { return use_dar_manager_show_files; };
00251         bool get_use_dar_manager_contents() const { return use_dar_manager_contents; };
00253         bool get_use_dar_manager_statistics() const { return use_dar_manager_statistics; };
00255         bool get_use_dar_manager_show_version() const { return use_dar_manager_show_version; };
00256 
00257 
00259 
00265         virtual user_interaction *clone() const = 0;
00266 
00268 
00273         void warning_with_more(U_I num) { at_once = num; count = 0; };
00274 
00275     protected:
00276 
00278 
00283         void set_use_listing(bool val) { use_listing = val; };
00284 
00286         void set_use_dar_manager_show_files(bool val) { use_dar_manager_show_files = val; };
00287 
00289         void set_use_dar_manager_contents(bool val) { use_dar_manager_contents = val; };
00290 
00292         void set_use_dar_manager_statistics(bool val) { use_dar_manager_statistics = val; };
00293 
00295         void set_use_dar_manager_show_version(bool val) { use_dar_manager_show_version = val; };
00296 
00298 
00301         virtual void inherited_warning(const std::string & message) = 0;
00302 
00303     private:
00304         bool use_listing;
00305         bool use_dar_manager_show_files;
00306         bool use_dar_manager_contents;
00307         bool use_dar_manager_statistics;
00308         bool use_dar_manager_show_version;
00309         U_I at_once, count;
00310 
00311     };
00312 
00313 
00315 
00319     class user_interaction_callback : public user_interaction
00320     {
00321     public:
00322 
00324 
00334         user_interaction_callback(void (*x_warning_callback)(const std::string &x, void *context),
00335                                   bool (*x_answer_callback)(const std::string &x, void *context),
00336                                   std::string (*x_string_callback)(const std::string &x, bool echo, void *context),
00337                                   void *context_value);
00338 
00340         void pause(const std::string & message);
00342         std::string get_string(const std::string & message, bool echo);
00343 
00345         void listing(const std::string & flag,
00346                      const std::string & perm,
00347                      const std::string & uid,
00348                      const std::string & gid,
00349                      const std::string & size,
00350                      const std::string & date,
00351                      const std::string & filename,
00352                      bool is_dir,
00353                      bool has_children);
00354 
00356         void dar_manager_show_files(const std::string & filename,
00357                                   bool available_data,
00358                                   bool available_ea);
00359 
00361         void dar_manager_contents(U_I number,
00362                                  const std::string & chemin,
00363                                  const std::string & archive_name);
00364 
00366         void dar_manager_statistics(U_I number,
00367                                     const infinint & data_count,
00368                                     const infinint & total_data,
00369                                     const infinint & ea_count,
00370                                     const infinint & total_ea);
00371 
00373         void dar_manager_show_version(U_I number,
00374                                       const std::string & data_date,
00375                                       const std::string & ea_date);
00376 
00378 
00382         void set_listing_callback(void (*callback)(const std::string & flag,
00383                                                    const std::string & perm,
00384                                                    const std::string & uid,
00385                                                    const std::string & gid,
00386                                                    const std::string & size,
00387                                                    const std::string & date,
00388                                                    const std::string & filename,
00389                                                    bool is_dir,
00390                                                    bool has_children,
00391                                                    void *context))
00392         {
00393             tar_listing_callback = callback;
00394             set_use_listing(true); // this is to inform libdar to use listing()
00395         };
00396 
00397             // You can set a dar_manager_show_files callback thanks to this method
00398 
00399         void set_dar_manager_show_files_callback(void (*callback)(const std::string & filename,
00400                                                                   bool available_data,
00401                                                                   bool available_ea,
00402                                                                   void *context))
00403         {
00404             dar_manager_show_files_callback = callback;
00405             set_use_dar_manager_show_files(true); // this is to inform libdar to use the dar_manager_show_files() method
00406         };
00407 
00408         void set_dar_manager_contents_callback(void (*callback)(U_I number,
00409                                                                 const std::string & chemin,
00410                                                                 const std::string & archive_name,
00411                                                                 void *context))
00412         {
00413             dar_manager_contents_callback = callback;
00414             set_use_dar_manager_contents(true); // this is to inform libdar to use the dar_manager_contents() method
00415         };
00416 
00417         void set_dar_manager_statistics_callback(void (*callback)(U_I number,
00418                                                                   const infinint & data_count,
00419                                                                   const infinint & total_data,
00420                                                                   const infinint & ea_count,
00421                                                                   const infinint & total_ea,
00422                                                                   void *context))
00423         {
00424             dar_manager_statistics_callback = callback;
00425             set_use_dar_manager_statistics(true); // this is to inform libdar to use the dar_manager_statistics() method
00426         };
00427 
00428         void set_dar_manager_show_version_callback(void (*callback)(U_I number,
00429                                                                     const std::string & data_date,
00430                                                                     const std::string & ea_date,
00431                                                                     void *context))
00432         {
00433             dar_manager_show_version_callback = callback;
00434             set_use_dar_manager_show_version(true);  // this is to inform libdar to use the dar_manager_show_version() method
00435         };
00436 
00437 
00439         virtual user_interaction *clone() const;
00440 
00441     protected:
00443         void inherited_warning(const std::string & message);
00444 
00445     private:
00446         void (*warning_callback)(const std::string & x, void *context);  // pointer to function
00447         bool (*answer_callback)(const std::string & x, void *context);   // pointer to function
00448         std::string (*string_callback)(const std::string & x, bool echo, void *context); // pointer to function
00449         void (*tar_listing_callback)(const std::string & flags,
00450                                      const std::string & perm,
00451                                      const std::string & uid,
00452                                      const std::string & gid,
00453                                      const std::string & size,
00454                                      const std::string & date,
00455                                      const std::string & filename,
00456                                      bool is_dir,
00457                                      bool has_children,
00458                                      void *context);
00459         void (*dar_manager_show_files_callback)(const std::string & filename,
00460                                               bool available_data,
00461                                               bool available_ea,
00462                                                 void *context);
00463         void (*dar_manager_contents_callback)(U_I number,
00464                                              const std::string & chemin,
00465                                              const std::string & archive_name,
00466                                               void *context);
00467         void (*dar_manager_statistics_callback)(U_I number,
00468                                                 const infinint & data_count,
00469                                                 const infinint & total_data,
00470                                                 const infinint & ea_count,
00471                                                 const infinint & total_ea,
00472                                                 void *context);
00473         void (*dar_manager_show_version_callback)(U_I number,
00474                                                   const std::string & data_date,
00475                                                   const std::string & ea_date,
00476                                                   void *context);
00477 
00478         void *context_val;
00479     };
00480 
00481 } // end of namespace
00482 
00483 #endif
00484 
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Defines