00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef HK_REPORT
00012 #define HK_REPORT
00013 #include "hk_definitions.h"
00014 #include "hk_presentation.h"
00015 #include <list>
00016 #include <vector>
00017
00018
00019 #include <time.h>
00020 #include <map>
00021 using namespace std;
00022
00023 class hk_reportsection;
00024 class hk_reportdata;
00025 class hk_report;
00026 class hk_column;
00027
00028 class hk_reportprivate;
00029
00051 class hk_report :public hk_presentation
00052 {
00053 friend class hk_reportsectionpair;
00054 friend class hk_reportsection;
00055 public:
00056 hk_report(void);
00057 virtual ~hk_report(void);
00065 void set_filename(const hk_string&,bool registerchange=true);
00066 hk_string filename(void);
00072 void set_use_standard_storagepath(bool s=true);
00073 bool use_standard_storagepath(void);
00078 hk_string outputfile(void);
00079
00084 void set_begin(const hk_string&,bool registerchange=true);
00085 hk_string begin(void);
00090 void set_end(const hk_string&,bool registerchange=true);
00091 hk_string end(void);
00095 hk_reportsection* page_header(void);
00099 hk_reportsection* page_footer(void);
00103 hk_reportsection* report_header(void);
00107 hk_reportsection* report_footer(void);
00108
00113 hk_reportsection* datasection(void);
00114
00119 hk_reportsectionpair* new_sectionpair(bool registerchange=true);
00124 hk_reportsectionpair* new_sectionpair_at(unsigned int position,bool registerchange=true);
00130 bool move_sectionpair(unsigned int actualposition,int steps);
00131
00136 bool execute(void);
00137 virtual bool set_mode(enum_mode s);
00138
00144 void set_recodefunction(const hk_string& r,bool registerchange=true);
00145 recodefunctiontype* recodefunction(void);
00146 hk_string recodefunctionstring(void);
00147
00148 static void add_recodetype(const hk_string& name,recodefunctiontype* f);
00149 static list<hk_string>* recodelist(void);
00154 static list<hk_string>* fontencodinglist(void);
00155 static bool set_fontencoding(int );
00156 static bool set_fontencoding(const hk_string&);
00157 static hk_string fontencodingstring(void);
00158 static int fontencoding(void);
00159
00160 void new_page(void);
00161
00166 void set_pagedelimiter(const hk_string& d,bool registerchange=true);
00167 hk_string pagedelimiter(void);
00171 vector<hk_reportsectionpair*>* sectionpairs(void);
00176 virtual void set_multiplefiles(bool m=true,bool registerchange=true);
00177 bool multiplefiles(void);
00181 void set_fileextension(const hk_string& ext,bool registerchange=true);
00182 hk_string fileextension(void);
00186 void set_firstpagenumber(long int f,bool registerchange=true);
00187 long int firstpagenumber(void);
00193 void set_pagenamecolumn(const hk_string& c,bool registerchange=true);
00194 hk_string pagenamecolumn(void);
00198 void set_filebegin(const hk_string& b,bool registerchange=true);
00199 hk_string filebegin(void);
00203 void set_fileend(const hk_string& e,bool registerchange=true);
00204 hk_string fileend(void);
00212 void set_periodic(unsigned long when, const hk_string& what="",bool newpage=false,bool registerchange=true);
00213 unsigned long periodic_when(void);
00214 hk_string periodic_what(void);
00215 bool periodic_newpage(void);
00216
00220 ostream* outputstream(void);
00226 void set_masterreport(hk_report* m);
00227 hk_report* masterreport(void);
00228
00232 void rowcount(unsigned long);
00233 virtual hk_font font(void);
00240 long pagenumber(void);
00241 long absolutepagenumber(void);
00242 unsigned long rownumber(void);
00243
00244 virtual bool set_presentationdatasource(long n, bool registerchange=true);
00245
00246 virtual bool save_report(const hk_string& name="",bool ask=true);
00247 virtual bool load_report(const hk_string& name="");
00248 virtual void savedata(ostream& s);
00249 virtual void loaddata(const hk_string& definition);
00250
00255 hk_string default_reportdata(void);
00256 void set_default_reportdata(const hk_string& v,bool registerchange=true);
00260 hk_string default_beforereportdata(void);
00261 void set_default_beforereportdata(const hk_string& v,bool registerchange=true);
00265 hk_string default_afterreportdata(void);
00266 void set_default_afterreportdata(const hk_string& v,bool registerchange=true);
00267
00268 int default_reportprecision(void);
00269 void set_default_reportprecision(int, bool registerchange=true);
00270
00271 bool default_use_reportseparator(void);
00272 void set_default_use_reportseparator(bool, bool registerchange=true);
00273
00277 void set_default_reportdataconfigurefunction(const hk_string& f,bool registerchange=true);
00278 hk_string default_reportdataconfigurefunction(void);
00284 void set_default_reportsectionbegin(const hk_string& e,bool registerchange=true);
00285 hk_string default_reportsectionbegin(void);
00286
00292 void set_default_reportsectionend(const hk_string& e,bool registerchange=true);
00293 hk_string default_reportsectionend(void);
00299 void set_default_reportsectionbetweendata(const hk_string& b,bool registerchange=true);
00300 hk_string default_reportsectionbetweendata(void);
00306 void set_default_reportsectioncountfunction(const hk_string& f,bool registerchange=true);
00307 hk_string default_reportsectioncountfunction(void);
00308
00312 void set_topline(bool l=true,bool registerchange=true);
00313 bool topline(void);
00317 void set_bottomline(bool l=true,bool registerchange=true);
00318 bool bottomline(void);
00323 void set_leftline(bool l=true,bool registerchange=true);
00324 bool leftline(void);
00325
00329 void set_rightline(bool l=true,bool registerchange=true);
00330 bool rightline(void);
00334 void set_diagonalluro(bool l=true,bool registerchange=true);
00335 bool diagonalluro(void);
00339 void set_diagonalloru(bool l=true,bool registerchange=true);
00340 bool diagonalloru(void);
00345 void set_frame(bool l=true,bool registerchange=true);
00346
00350 void set_borders(unsigned int left=200,unsigned int right=200,unsigned int top=200,unsigned int bottom=300,bool registerchange=true);
00351 unsigned int border_left(void);
00352 unsigned int border_right(void);
00353 unsigned int border_top(void);
00354 unsigned int border_bottom(void);
00355 enum orientationtype{landscape,portrait};
00359 void set_orientation(orientationtype o=portrait,bool registerchange=true);
00360 orientationtype orientation(void);
00361 enum pageformattype {A0=0,A1=1,A2=2,A3=3,A4=4,A5=5,A6=6,A7=7,A8=8,A9=9,A10=10,letter=11,legal=12,executive=13,tabloid=14,userdefined=15}
00362 ;
00366 void set_pageformat(pageformattype t=A4,bool registerchange=true);
00370 void set_pageformat(unsigned int width ,unsigned int height,bool registerchange);
00371 pageformattype pageformat(void);
00375 unsigned int formatwidth(pageformattype t=A4) ;
00379 unsigned int formatheight(pageformattype t=A4);
00380 void set_reportconfigurefunction(const hk_string& f,bool registerchange);
00381
00382 void set_reporttype(const hk_string&,bool registerchange=true);
00383 hk_string reporttype(void);
00384
00385 static void add_reporttype(const hk_string& name,reporttypefunction* f);
00386 static list<hk_string>* reporttypelist(void);
00387
00388 void configure_page(void);
00389 void neutralize_definition(bool registerchange);
00393 void init_report(void);
00394 static void add_configurefunctiontype(const hk_string& name,report_configurefunction* f);
00395 static list<hk_string>* configurefunctionlist(void);
00396
00397 void remove_sectionpair(hk_reportsectionpair*,bool registerchange=true);
00398 list<hk_string>* neededfonts(void);
00399 list<hk_string>* usedfonts(void);
00403 static void set_printcommand(const hk_string& printcommand);
00404 static hk_string printcommand(void);
00405
00409 bool print_report(bool execute_before_printing=true);
00410
00411 unsigned int designwidth(void);
00412 unsigned int designheight(void);
00413 unsigned int horizontal2relativ(unsigned int h);
00414 unsigned int vertical2relativ(unsigned int v);
00415 unsigned int relativ2horizontal(unsigned int r);
00416 unsigned int relativ2vertical(unsigned int r);
00417 virtual void bulk_operation(enum_bulkoperation bulkoperation);
00418 static void setup_reportbasics(void);
00419 hk_reportdata* get_reportdatavisible(long nr);
00420 hk_reportdata* get_reportdatavisible(const hk_string& identifier);
00421
00422 void set_on_new_page_action(const hk_string&,bool registerchange=true);
00423 hk_string on_new_page_action(void);
00424 void stop_execution(void);
00425 bool execution_stopped(void);
00426
00427
00428 protected:
00429 void remove_section(hk_reportsection*);
00430 virtual hk_string replace(const hk_string& where);
00431 virtual bool datasource_disable(void);
00432 virtual bool before_columns_deleted(void);
00433
00437 virtual bool widget_specific_before_new_page(void);
00438
00442 virtual bool widget_specific_after_new_page(void);
00443
00444 virtual hk_reportsection* widget_specific_new_section(void);
00445 virtual void widget_specific_after_loadreport(void){}
00446 virtual void widget_specific_before_execute(void){}
00447 virtual void widget_specific_after_first_outstream_created(void){}
00448 virtual void widget_specific_before_last_outstream_closed(void){}
00449 virtual void widget_specific_after_execute(void){}
00450 void remove_all_sections(void);
00451
00452 bool p_multiplefiles;
00453 vector<hk_reportsectionpair*> p_sectionpairs;
00454
00455 hk_string p_default_data;
00456 hk_string p_default_beforedata;
00457 hk_string p_default_afterdata;
00458 hk_string p_default_dataconfigurefunction;
00459 virtual void sizetype_changed(void);
00460
00461 virtual bool action_on_new_page(void);
00462
00463 private:
00464 void init_section(hk_reportsection*);
00465 bool internal_execute();
00466 void new_outputstream(void);
00467 void set_pagenumber(long int f);
00468 void create_fontslists(void);
00469 bool is_newfont(const hk_string&);
00470 void search_sectionfonts(hk_reportsection*);
00471 hk_reportprivate* p_private;
00472
00473
00474 typedef map<hk_string,reporttypefunction*,less<hk_string> > reporttypelisttype ;
00475 static reporttypelisttype p_reporttypefunctions;
00476 static list<hk_string> p_reporttypelist;
00477
00478 typedef map<hk_string,recodefunctiontype*,less<hk_string> > recodefunctionlisttype ;
00479 static recodefunctionlisttype p_recodefunctions;
00480 static list<hk_string> p_recodelist;
00481 static list<hk_string> p_fontencodinglist;
00482
00483 typedef map<hk_string,report_configurefunction*,less<hk_string> > reportconfigurelisttype ;
00484 static reportconfigurelisttype p_reportconfigurefunctions;
00485 static list<hk_string> p_reportconfigurelist;
00486 static int p_fontencoding;
00487
00488 static int p_defaultfilenumber;
00489 static hk_string p_printcommand;
00490
00491 }
00492
00493
00494 ;
00495 #endif