diff options
Diffstat (limited to 'kfilereplace/report.cpp')
-rw-r--r-- | kfilereplace/report.cpp | 282 |
1 files changed, 282 insertions, 0 deletions
diff --git a/kfilereplace/report.cpp b/kfilereplace/report.cpp new file mode 100644 index 00000000..cae0dfe4 --- /dev/null +++ b/kfilereplace/report.cpp @@ -0,0 +1,282 @@ +/*************************************************************************** + 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 <qstring.h> +#include <qfile.h> + +// KDE +#include <klistview.h> +#include <kmessagebox.h> +#include <kuser.h> + +// local +#include "report.h" +#include "configurationclasses.h" + +void Report::createReportFile() +{ + QString xmlFileName = m_docPath + ".xml", + cssFileName = m_docPath + ".css"; + + // Generates a report file + // a) Open the file + QFile 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 + + QDateTime datetime = QDateTime::currentDateTime(Qt::LocalTime); + QString dateString = datetime.toString(Qt::LocalDate); + KUser user; + QString columnTextFour, + columnReplaceWith; + if(!m_isSearchFlag) + { + columnTextFour = i18n("Replaced Strings"); + columnReplaceWith = i18n("Replace with"); + } + else + { + columnTextFour = i18n("Total number occurrences"); + columnReplaceWith = i18n("-"); + } + + QString css = cssFileName.mid(cssFileName.findRev("/")+1,cssFileName.length()-(cssFileName.findRev("/")+1)); + QTextStream 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 + QListViewItem *lviCurItem, + *lviFirst; + + lviCurItem = lviFirst = m_stringsView->firstChild(); + + if(lviCurItem == 0) + return ; + + QString rowType="a1"; + + do + { QString 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 + { QString 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() +{ + QString cssFileName = m_docPath +".css"; + QFile styleSheet(cssFileName); + if (!styleSheet.open( IO_WriteOnly )) + { + KMessageBox::error(0, i18n("<qt>Cannot open the file <b>%1</b>.</qt>").arg(cssFileName)); + return ; + } + + QTextStream oTStream( &styleSheet ); + + QString 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 QString& docPath) +{ + m_docPath = docPath; + + createStyleSheet(); + createReportFile(); +} + |