Patch level : 2.2
Files correlati : ba0 e ba8 Ricompilazione Demo : [ ] Commento : Reso derivabile il programma di stampa report generici. Attualmente viene usato da ve1400.cpp per la stampa dei report basati su documenti git-svn-id: svn://10.65.10.50/trunk@13420 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
f6c4a05cb3
commit
be76193ce8
@ -327,18 +327,17 @@ bool TExplorer_mask::stop_run(KEY k)
|
||||
if (ADVANCED_GRAPHICS)
|
||||
{
|
||||
const int divider = 8;
|
||||
WINDOW window[3];
|
||||
WINDOW window[3] = {
|
||||
win(),
|
||||
((TWindowed_field&)field(DLG_TREE)).win().win(),
|
||||
((TWindowed_field&)field(DLG_LIST)).win().win()
|
||||
};
|
||||
|
||||
XVT_IMAGE image[3];
|
||||
int i;
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
WINDOW w = NULL_WIN;
|
||||
switch (i)
|
||||
{
|
||||
case 1: w = ((TWindowed_field&)field(DLG_TREE)).win().win(); break;
|
||||
case 2: w = ((TWindowed_field&)field(DLG_LIST)).win().win(); break;
|
||||
default: w = win(); break;
|
||||
}
|
||||
WINDOW& w = window[i];
|
||||
RCT rct; xvt_vobj_get_client_rect(w, &rct);
|
||||
RCT irct = rct; irct.right /= divider; irct.bottom /= divider;
|
||||
XVT_IMAGE cap = xvt_image_capture(w, &rct);
|
||||
@ -357,7 +356,6 @@ bool TExplorer_mask::stop_run(KEY k)
|
||||
xvt_image_set_pixel(img, x, y, MAKE_COLOR(r, g, b));
|
||||
}
|
||||
}
|
||||
window[i] = w;
|
||||
image[i] = img;
|
||||
}
|
||||
for (i = 2; i >= 0; i--)
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include <reprint.h>
|
||||
|
||||
#include "ba8400.h"
|
||||
#include "ba8500.h"
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Utility
|
||||
@ -13,8 +14,14 @@
|
||||
|
||||
bool cod2app(const char* tok, TString& app)
|
||||
{
|
||||
if (isalpha(tok[0]) && isalpha(tok[1]) && atoi(tok+2) > 1000)
|
||||
if (tok != NULL && isalpha(tok[0]) && isalpha(tok[1]) && atoi(tok+2) > 1000)
|
||||
{
|
||||
TFilename f;
|
||||
f.strncpy(tok, 3);
|
||||
f.ext("exe");
|
||||
if (!f.custom_path())
|
||||
return false;
|
||||
|
||||
app.strncpy(tok, 3);
|
||||
app << " -" << char(tok[3]-1);
|
||||
return true;
|
||||
@ -76,16 +83,7 @@ bool rep2app(const char* name, TString& app, TString& desc)
|
||||
if (app.not_empty())
|
||||
return true;
|
||||
|
||||
TToken_string libraries(50, ',');
|
||||
get_xml_attr(stringona, "libraries", libraries);
|
||||
FOR_EACH_TOKEN(libraries, tok) if (strlen(tok) == 6)
|
||||
{
|
||||
if (cod2app(tok, app))
|
||||
return true;
|
||||
}
|
||||
|
||||
cod2app(report_name.name(), app);
|
||||
return true;
|
||||
return cod2app(report_name.name(), app);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -119,10 +117,10 @@ bool TKlarkKent_mask::on_field_event(TOperable_field& o, TField_event e, long jo
|
||||
{
|
||||
TFilename name = o.get();
|
||||
TString app, desc;
|
||||
const bool ok = rep2app(name, app, desc);
|
||||
rep2app(name, app, desc);
|
||||
set(F_FORM, desc);
|
||||
set(F_DOC, app);
|
||||
enable(DLG_PRINT, ok);
|
||||
enable(DLG_PRINT, desc.not_empty());
|
||||
}
|
||||
break;
|
||||
case DLG_EDIT:
|
||||
@ -144,11 +142,12 @@ bool TKlarkKent_mask::on_field_event(TOperable_field& o, TField_event e, long jo
|
||||
// TKlarkKent_app
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TKlarkKent_app : public TSkeleton_application
|
||||
TReport* TKlarkKent_app::create_report(const char* name) const
|
||||
{
|
||||
protected:
|
||||
virtual void main_loop();
|
||||
};
|
||||
TReport* r = new TReport;
|
||||
r->load(name);
|
||||
return r;
|
||||
}
|
||||
|
||||
void TKlarkKent_app::main_loop()
|
||||
{
|
||||
@ -161,6 +160,7 @@ void TKlarkKent_app::main_loop()
|
||||
bool can_repeat = false;
|
||||
do
|
||||
{
|
||||
TReport* report = NULL;
|
||||
TReport_book book;
|
||||
FOR_EACH_ARRAY_ROW(arr, r, row)
|
||||
{
|
||||
@ -180,8 +180,8 @@ void TKlarkKent_app::main_loop()
|
||||
}
|
||||
|
||||
TString appname, desc;
|
||||
rep2app(report_name, appname, desc);
|
||||
if (appname.not_empty())
|
||||
const bool custom_app = rep2app(report_name, appname, desc);
|
||||
if (custom_app)
|
||||
{
|
||||
appname << ' ' << report_name;
|
||||
TExternal_app app(appname);
|
||||
@ -189,23 +189,33 @@ void TKlarkKent_app::main_loop()
|
||||
}
|
||||
else
|
||||
{
|
||||
TReport rep;
|
||||
if (rep.load(report_name))
|
||||
if (report != NULL)
|
||||
delete report;
|
||||
report = create_report(report_name);
|
||||
if (report != NULL)
|
||||
{
|
||||
const bool ok = book.add(rep);
|
||||
const bool ok = book.add(*report);
|
||||
if (ok && arr.items() == 1) // Controlla se e' pensabile ripetere la stampa
|
||||
{
|
||||
TFilename msk = report_name;
|
||||
msk.ext("msk");
|
||||
can_repeat = msk.exist(); // Posso ripetere se ho una maschera collegata
|
||||
can_repeat = msk.custom_path(); // Posso ripetere se ho una maschera collegata
|
||||
}
|
||||
else
|
||||
can_repeat = false;
|
||||
}
|
||||
}
|
||||
} // ciclo sulla lista dei report da stampare
|
||||
|
||||
// L'anteprima funziona bene solo se non si distrugge il report corrente
|
||||
if (report != NULL)
|
||||
{
|
||||
if (book.pages() > 0)
|
||||
book.print_or_preview();
|
||||
delete report;
|
||||
report = NULL;
|
||||
}
|
||||
if (book.pages() > 0)
|
||||
book.print_or_preview();
|
||||
|
||||
} while (can_repeat);
|
||||
}
|
||||
|
||||
|
11
ba/ba8500.h
Executable file
11
ba/ba8500.h
Executable file
@ -0,0 +1,11 @@
|
||||
#ifndef __BA8500_H
|
||||
#define __BA8500_H
|
||||
|
||||
class TKlarkKent_app : public TSkeleton_application
|
||||
{
|
||||
protected:
|
||||
virtual TReport* create_report(const char* name) const;
|
||||
virtual void main_loop();
|
||||
};
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user