You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
283 lines
11 KiB
283 lines
11 KiB
/***************************************************************************
|
|
report.cpp - Report document class
|
|
-------------------
|
|
begin : fri aug 13 15:29:46 CEST 2004
|
|
|
|
copyright : (C) 2004 Emiliano Gulmini
|
|
email : emi_barbarossa@yahoo.it
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
// QT
|
|
#include <tqstring.h>
|
|
#include <tqfile.h>
|
|
|
|
// KDE
|
|
#include <klistview.h>
|
|
#include <kmessagebox.h>
|
|
#include <kuser.h>
|
|
|
|
// local
|
|
#include "report.h"
|
|
#include "configurationclasses.h"
|
|
|
|
void Report::createReportFile()
|
|
{
|
|
TQString xmlFileName = m_docPath + ".xml",
|
|
cssFileName = m_docPath + ".css";
|
|
|
|
// Generates a report file
|
|
// a) Open the file
|
|
TQFile report(xmlFileName);
|
|
if (!report.open( IO_WriteOnly ))
|
|
{
|
|
KMessageBox::error(0, i18n("<qt>Cannot open the file <b>%1</b>.</qt>").arg(xmlFileName));
|
|
return ;
|
|
}
|
|
|
|
// b) Write the header of the XML file
|
|
|
|
TQDateTime datetime = TQDateTime::currentDateTime(Qt::LocalTime);
|
|
TQString dateString = datetime.toString(Qt::LocalDate);
|
|
KUser user;
|
|
TQString columnTextFour,
|
|
columnReplaceWith;
|
|
if(!m_isSearchFlag)
|
|
{
|
|
columnTextFour = i18n("Replaced Strings");
|
|
columnReplaceWith = i18n("Replace with");
|
|
}
|
|
else
|
|
{
|
|
columnTextFour = i18n("Total number occurrences");
|
|
columnReplaceWith = i18n("-");
|
|
}
|
|
|
|
TQString css = cssFileName.mid(cssFileName.findRev("/")+1,cssFileName.length()-(cssFileName.findRev("/")+1));
|
|
TQTextStream oTStream( &report );
|
|
oTStream << "<?xml version=\"1.0\"?>\n"
|
|
"<?xml-stylesheet href=\""+css+"\" type=\"text/css\"?>"
|
|
"<report>\n"
|
|
" <title> "+i18n("KFileReplace Report")+" </title>\n"
|
|
" <createdby>"+user.fullName()+"("+user.loginName()+")"+"</createdby>\n"
|
|
" <date>"+dateString+"</date>\n"
|
|
"<hr/>\n"
|
|
" <table>\n"
|
|
" <tablecaption> "+i18n("Searching/Replacing Strings Table")+" </tablecaption>\n"
|
|
" <header>\n"
|
|
" <row>\n"
|
|
" <searchfor class=\"header\">"+i18n("Search for")+"</searchfor>\n";
|
|
|
|
if(!m_isSearchFlag)
|
|
oTStream<< " <replacewith class=\"header\" >"+columnReplaceWith+"</replacewith>\n";
|
|
|
|
oTStream<< " </row>\n"
|
|
" </header>\n";
|
|
// c) Write the strings list
|
|
TQListViewItem *lviCurItem,
|
|
*lviFirst;
|
|
|
|
lviCurItem = lviFirst = m_stringsView->firstChild();
|
|
|
|
if(lviCurItem == 0)
|
|
return ;
|
|
|
|
TQString rowType="a1";
|
|
|
|
do
|
|
{ TQString rowTag = "<row >\n"
|
|
" <searchfor class=\""+rowType+"\"><![CDATA["+lviCurItem->text(0)+"]]></searchfor>\n"
|
|
" <replacewith class=\""+rowType+"\"><![CDATA["+lviCurItem->text(1)+"]]></replacewith>\n"
|
|
"</row>\n";
|
|
|
|
oTStream << rowTag;
|
|
|
|
rowType = ((rowType == "a1") ? "a2" : "a1");
|
|
|
|
lviCurItem = lviCurItem->nextSibling();
|
|
} while(lviCurItem && lviCurItem != lviFirst);
|
|
|
|
oTStream<< "</table>\n";
|
|
|
|
oTStream<< "<whiteline/>\n"
|
|
" <table>\n"
|
|
" <tablecaption> "+i18n("Results Table")+ " </tablecaption>"
|
|
" <header>\n"
|
|
" <row>\n"
|
|
" <name class=\"header\">"+i18n("Name")+"</name>\n"
|
|
" <folder class=\"header\">"+i18n("Folder")+"</folder>\n";
|
|
if(m_isSearchFlag)
|
|
{
|
|
oTStream<< " <oldsize class=\"header\">"+i18n("Size")+"</oldsize>\n";
|
|
}
|
|
else
|
|
{
|
|
oTStream<< " <oldsize class=\"header\">"+i18n("Old Size")+"</oldsize>\n"
|
|
" <newsize class=\"header\">"+i18n("New Size")+"</newsize>\n";
|
|
}
|
|
oTStream<< " <replacedstrings class=\"header\" >"+columnTextFour+"</replacedstrings>\n"
|
|
" <owneruser class=\"header\">"+i18n("Owner User")+"</owneruser>\n"
|
|
" <ownergroup class=\"header\">"+i18n("Owner Group")+"</ownergroup>\n"
|
|
" </row>\n"
|
|
" </header>\n";
|
|
|
|
// d) Write the result list
|
|
|
|
lviCurItem = lviFirst = m_resultsView->firstChild();
|
|
|
|
if(lviCurItem == 0)
|
|
return ;
|
|
|
|
unsigned int totalOccurrences = 0;
|
|
|
|
rowType="a1";
|
|
|
|
do
|
|
{ TQString rowTag = " <row >\n"
|
|
" <name class=\""+rowType+"\"><![CDATA["+lviCurItem->text(0)+"]]></name>\n"
|
|
" <folder class=\""+rowType+"\"><![CDATA["+lviCurItem->text(1)+"]]></folder>\n";
|
|
if(m_isSearchFlag)
|
|
{
|
|
rowTag += " <oldsize class=\""+rowType+"\"><![CDATA["+lviCurItem->text(2)+"]]></oldsize>\n"
|
|
" <replacedstrings class=\""+rowType+"\"><![CDATA["+lviCurItem->text(3)+"]]></replacedstrings>\n"
|
|
" <owneruser class=\""+rowType+"\"><![CDATA["+lviCurItem->text(4)+"]]></owneruser>\n"
|
|
" <ownergroup class=\""+rowType+"\"><![CDATA["+lviCurItem->text(5)+"]]></ownergroup>\n"
|
|
" </row>\n";
|
|
}
|
|
else
|
|
{
|
|
rowTag += " <oldsize class=\""+rowType+"\"><![CDATA["+lviCurItem->text(2)+"]]></oldsize>\n"
|
|
" <newsize class=\""+rowType+"\"><![CDATA["+lviCurItem->text(3)+"]]></newsize>\n"
|
|
" <replacedstrings class=\""+rowType+"\"><![CDATA["+lviCurItem->text(4)+"]]></replacedstrings>\n"
|
|
" <owneruser class=\""+rowType+"\"><![CDATA["+lviCurItem->text(5)+"]]></owneruser>\n"
|
|
" <ownergroup class=\""+rowType+"\"><![CDATA["+lviCurItem->text(6)+"]]></ownergroup>\n"
|
|
" </row>\n";
|
|
}
|
|
|
|
oTStream << rowTag;
|
|
|
|
rowType = ((rowType == "a1") ? "a2" : "a1");
|
|
|
|
if(m_isSearchFlag)
|
|
totalOccurrences += lviCurItem->text(3).toInt();
|
|
else
|
|
totalOccurrences += lviCurItem->text(4).toInt();
|
|
|
|
lviCurItem = lviCurItem->nextSibling();
|
|
} while(lviCurItem && lviCurItem != lviFirst);
|
|
|
|
|
|
// e) Write the end of the file
|
|
|
|
oTStream<< " </table>\n"
|
|
"<totaloccurrences>"
|
|
<< totalOccurrences
|
|
<< "</totaloccurrences>\n"
|
|
"</report>\n";
|
|
|
|
report.close();
|
|
}
|
|
|
|
void Report::createStyleSheet()
|
|
{
|
|
TQString cssFileName = m_docPath +".css";
|
|
TQFile styleSheet(cssFileName);
|
|
if (!styleSheet.open( IO_WriteOnly ))
|
|
{
|
|
KMessageBox::error(0, i18n("<qt>Cannot open the file <b>%1</b>.</qt>").arg(cssFileName));
|
|
return ;
|
|
}
|
|
|
|
TQTextStream oTStream( &styleSheet );
|
|
|
|
TQString css = "title { display:block;font:40px bold sans-serif; }\n\n"
|
|
"createdby:before { content :\""+i18n("Created by")+": \"; }\n"
|
|
"createdby { display:inline; }\n\n"
|
|
"date:before { content :\"-"+i18n("date")+": \"; }\n"
|
|
"date { display:inline; }\n\n"
|
|
"totaloccurrences:before { content :\""+i18n("Total occurrences")+": \"; }\n"
|
|
"totaloccurrences { display:block;text-align:right; font-weight:bold;margin-top:5px;margin-right:5px;}\n"
|
|
"tablecaption {display:table-caption;font:20px bold sans-serif;}\n\n"
|
|
"hr {display:block;background:black;height:1px;margin:5px 0px 5px;}\n"
|
|
"whiteline {display:block;height:16px;}\n\n"
|
|
"searchfor {\n"
|
|
" display:table-cell;\n"
|
|
" border:1px solid black;\n"
|
|
" padding:0 7px 0; }\n\n";
|
|
|
|
if(!m_isSearchFlag)
|
|
{
|
|
css += "replacewith {\n"
|
|
" display:table-cell;\n"
|
|
" border:1px solid black;\n"
|
|
" padding:0 7px 0; }\n\n";
|
|
}
|
|
|
|
css += "folder {\n"
|
|
" display:table-cell;\n"
|
|
" border:1px solid black;\n"
|
|
" padding:0 7px 0; }\n\n"
|
|
"header { display: table-header-group; }\n\n"
|
|
"name {\n"
|
|
" display:table-cell;\n"
|
|
" border:1px solid black;\n"
|
|
" padding:0 7px 0; }\n\n"
|
|
"newsize {\n"
|
|
" display:table-cell;\n"
|
|
" border:1px solid black;\n"
|
|
" padding:0 7px 0;\n"
|
|
" text-align:right; }\n\n"
|
|
"oldsize {\n"
|
|
" display:table-cell;\n"
|
|
" border:1px solid black;\n"
|
|
" padding:0 7px 0;\n"
|
|
" text-align:right; }\n\n"
|
|
"ownergroup {\n"
|
|
" display:table-cell;\n"
|
|
" border:1px solid black;\n"
|
|
" padding:0 7px 0; }\n\n"
|
|
"owneruser {\n"
|
|
" display:table-cell;\n"
|
|
" border:1px solid black;\n"
|
|
" padding:0 7px 0; }\n\n"
|
|
"replacedstrings {\n"
|
|
" text-align:right;\n"
|
|
" display:table-cell;\n"
|
|
" border:1px solid black;\n"
|
|
" padding:0 7px 0; }\n\n"
|
|
"*[class~=header] {\n"
|
|
" background : lightgray;\n"
|
|
" text-align : center; }\n\n"
|
|
"row { display : table-row; }\n\n"
|
|
"table {\n"
|
|
" display:table;\n"
|
|
" border-collapse: collapse; }\n\n"
|
|
"*[class~=a1] {\n"
|
|
" background-color:aliceblue;\n"
|
|
" font-weight : bold;font-size:15px; }\n\n"
|
|
"*[class~=a2] {\n"
|
|
" background-color:khaki;\n"
|
|
" font-weight : bold;\n"
|
|
" font-size:15px; }\n\n";
|
|
|
|
oTStream << css;
|
|
|
|
styleSheet.close();
|
|
}
|
|
|
|
void Report::createDocument(const TQString& docPath)
|
|
{
|
|
m_docPath = docPath;
|
|
|
|
createStyleSheet();
|
|
createReportFile();
|
|
}
|
|
|