summaryrefslogtreecommitdiffstats
path: root/krusader/Konfigurator/krresulttable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'krusader/Konfigurator/krresulttable.cpp')
-rw-r--r--krusader/Konfigurator/krresulttable.cpp377
1 files changed, 377 insertions, 0 deletions
diff --git a/krusader/Konfigurator/krresulttable.cpp b/krusader/Konfigurator/krresulttable.cpp
new file mode 100644
index 0000000..3e18e2c
--- /dev/null
+++ b/krusader/Konfigurator/krresulttable.cpp
@@ -0,0 +1,377 @@
+/***************************************************************************
+ krresulttable.cpp
+ -------------------
+ copyright : (C) 2005 by Dirk Eschler & Krusader Krew
+ e-mail : krusader@users.sourceforge.net
+ web site : http://krusader.sourceforge.net
+ ---------------------------------------------------------------------------
+ Description
+ ***************************************************************************
+
+ A
+
+ db dD d8888b. db db .d8888. .d8b. d8888b. d88888b d8888b.
+ 88 ,8P' 88 `8D 88 88 88' YP d8' `8b 88 `8D 88' 88 `8D
+ 88,8P 88oobY' 88 88 `8bo. 88ooo88 88 88 88ooooo 88oobY'
+ 88`8b 88`8b 88 88 `Y8b. 88~~~88 88 88 88~~~~~ 88`8b
+ 88 `88. 88 `88. 88b d88 db 8D 88 88 88 .8D 88. 88 `88.
+ YP YD 88 YD ~Y8888P' `8888Y' YP YP Y8888D' Y88888P 88 YD
+
+ S o u r c e F i l e
+
+ ***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "krresulttable.h"
+#include <iostream>
+using namespace std;
+
+#define PS(x) _supported.contains(x)>0
+
+KrResultTable::KrResultTable(QWidget* parent)
+ : QWidget(parent),
+ _numRows(1)
+{
+}
+
+KrResultTable::~KrResultTable()
+{
+}
+
+
+QGridLayout* KrResultTable::initTable()
+{
+ _grid = new QGridLayout(this, _numRows, _numColumns);
+ _grid->setColStretch(_numColumns-1, 1); // stretch last column
+
+ // +++ Build and add table header +++
+ int column = 0;
+ for( QStringList::Iterator it=_tableHeaders.begin(); it!=_tableHeaders.end(); ++it )
+ {
+ _label = new QLabel(*it, this);
+ _label->setMargin(5);
+ _grid->addWidget(_label, 0, column);
+
+ // Set font
+ QFont defFont = KGlobalSettings::generalFont();
+ defFont.setPointSize(defFont.pointSize()-1);
+ defFont.setBold(true);
+ _label->setFont(defFont);
+
+ ++column;
+ }
+
+ return _grid;
+}
+
+
+void KrResultTable::adjustRow(QGridLayout* grid)
+{
+ QLayoutIterator it = grid->iterator();
+ QLayoutItem *child;
+ int col = 0;
+
+ while( (child = it.current()) != 0 )
+ {
+ // Add some space between columns
+ child->widget()->setMinimumWidth( child->widget()->sizeHint().width() + 15 );
+
+ // Paint uneven rows in alternate color
+ if( ((col/_numColumns)%2) )
+ child->widget()->setPaletteBackgroundColor( KGlobalSettings::baseColor() );
+
+ ++it;
+ ++col;
+ }
+}
+
+// -----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
+
+KrArchiverResultTable::KrArchiverResultTable(QWidget* parent)
+ : KrResultTable(parent)
+{
+ _supported = KRarcHandler::supportedPackers(); // get list of available packers
+
+ Archiver* tar = new Archiver("tar", "http://www.gnu.org", PS("tar"), true, true);
+ Archiver* gzip = new Archiver("gzip", "http://www.gnu.org", PS("gzip"), true, true);
+ Archiver* bzip2 = new Archiver("bzip2", "http://www.gnu.org", PS("bzip2"), true, true);
+ Archiver* lha = new Archiver("lha", "http://www.gnu.org", PS("lha"), true, true);
+ Archiver* zip = new Archiver("zip", "http://www.info-zip.org", PS("zip"), true, false);
+ Archiver* unzip = new Archiver("unzip", "http://www.info-zip.org", PS("unzip"), false, true);
+ Archiver* arj = new Archiver("arj", "http://www.arjsoftware.com", PS("arj"), true, true);
+ Archiver* unarj = new Archiver("unarj", "http://www.arjsoftware.com", PS("unarj"), false, true);
+ Archiver* unace = new Archiver("unace", "http://www.winace.com", PS("unace"), false, true);
+ Archiver* rar = new Archiver("rar", "http://www.rarsoft.com", PS("rar"), true, true);
+ Archiver* unrar = new Archiver("unrar", "http://www.rarsoft.com", PS("unrar"), false, true);
+ Archiver* rpm = new Archiver("rpm", "http://www.gnu.org", PS("rpm"), false, true);
+ Archiver* dpkg = new Archiver("dpkg", "http://www.dpkg.org", PS("dpkg"), false, true);
+ Archiver* _7z = new Archiver("7z", "http://www.7-zip.org", PS("7z"), true, true);
+
+ // Special case: arj can unpack, but unarj is prefered
+ if(PS("arj") && PS("unarj"))
+ arj->setIsUnpacker(false);
+ if(PS("arj") && !PS("unarj"))
+ unarj->setNote( i18n("unarj not found, but arj found, which will be used for unpacking") );
+ // Special case: rar can unpack, but unrar is prefered
+ if(PS("rar") && PS("unrar"))
+ rar->setIsUnpacker(false);
+ // Special case: rpm needs cpio for unpacking
+ if(PS("rpm") && !PS("cpio"))
+ rpm->setNote( i18n("rpm found, but cpio not found which is required for unpacking") );
+
+ _tableHeaders.append( i18n("Name") );
+ _tableHeaders.append( i18n("Found") );
+ _tableHeaders.append( i18n("Packing") );
+ _tableHeaders.append( i18n("Unpacking") );
+ _tableHeaders.append( i18n("Note") );
+ _numColumns = _tableHeaders.size();
+
+ _grid = initTable();
+
+ addRow(tar, _grid);
+ addRow(gzip, _grid);
+ addRow(bzip2, _grid);
+ addRow(lha, _grid);
+ addRow(zip, _grid);
+ addRow(unzip, _grid);
+ addRow(arj, _grid);
+ addRow(unarj, _grid);
+ addRow(unace, _grid);
+ addRow(rar, _grid);
+ addRow(unrar, _grid);
+ addRow(rpm, _grid);
+ addRow(dpkg, _grid);
+ addRow(_7z, _grid);
+
+ delete tar;
+ delete gzip;
+ delete bzip2;
+ delete lha;
+ delete zip;
+ delete unzip;
+ delete arj;
+ delete unarj;
+ delete unace;
+ delete rar;
+ delete unrar;
+ delete rpm;
+ delete dpkg;
+ delete _7z;
+}
+
+KrArchiverResultTable::~KrArchiverResultTable()
+{
+}
+
+
+bool KrArchiverResultTable::addRow(SearchObject* search, QGridLayout* grid)
+{
+ Archiver* arch = dynamic_cast<Archiver*>(search);
+
+ // Name column
+ _label = new KURLLabel(arch->getWebsite(), arch->getSearchName(), this);
+ _label->setMargin(5);
+ _label->setAlignment(Qt::AlignTop);
+ grid->addWidget(_label, _numRows, 0);
+ connect(_label, SIGNAL(leftClickedURL(const QString&)),
+ SLOT(website(const QString&)));
+
+ // Found column
+ _label = new QLabel( arch->getPath(), this );
+ _label->setMargin(5);
+ grid->addWidget(_label, _numRows, 1);
+
+ // Packing column
+ _label = new QLabel(this);
+ _label->setMargin(5);
+ _label->setAlignment( Qt::AlignTop );
+ if( arch->getIsPacker() && arch->getFound() ) {
+ _label->setText( i18n("enabled") );
+ _label->setPaletteForegroundColor("darkgreen");
+ } else if( arch->getIsPacker() && !arch->getFound() ) {
+ _label->setText( i18n("disabled") );
+ _label->setPaletteForegroundColor("red");
+ } else
+ _label->setText( "" );
+ grid->addWidget(_label, _numRows, 2);
+
+ // Unpacking column
+ _label = new QLabel(this);
+ _label->setMargin(5);
+ _label->setAlignment( Qt::AlignTop );
+ if( arch->getIsUnpacker() && arch->getFound() ) {
+ _label->setText( i18n("enabled") );
+ _label->setPaletteForegroundColor("darkgreen");
+ } else if( arch->getIsUnpacker() && !arch->getFound() ) {
+ _label->setText( i18n("disabled") );
+ _label->setPaletteForegroundColor("red");
+ } else
+ _label->setText( "" );
+ grid->addWidget(_label, _numRows, 3);
+
+ // Note column
+ _label = new QLabel(arch->getNote(), this);
+ _label->setMargin(5);
+ _label->setAlignment( Qt::AlignTop | Qt::WordBreak ); // wrap words
+ grid->addWidget(_label, _numRows, 4);
+
+ // Apply shared design elements
+ adjustRow(_grid);
+
+ // Ensure the last column takes more space
+ _label->setMinimumWidth(300);
+
+ ++_numRows;
+ return true;
+}
+
+
+void KrArchiverResultTable::website(const QString& url)
+{
+ (void) new KRun(url);
+}
+
+// -----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
+
+KrToolResultTable::KrToolResultTable(QWidget* parent)
+ : KrResultTable(parent)
+{
+ _supported = Krusader::supportedTools(); // get list of available tools
+
+ QValueVector<Application*> vecDiff, vecMail, vecRename, vecChecksum;
+ Application* kdiff3 = new Application("kdiff3", "http://kdiff3.sourceforge.net/", KrServices::cmdExist("kdiff3"));
+ Application* kompare = new Application("kompare", "http://www.caffeinated.me.uk/kompare/", KrServices::cmdExist("kompare"));
+ Application* xxdiff = new Application("xxdiff", "http://xxdiff.sourceforge.net/", KrServices::cmdExist("xxdiff"));
+ Application* kmail = new Application("kmail", "http://kmail.kde.org/", KrServices::cmdExist("kmail"));
+ Application* krename = new Application("krename", "http://www.krename.net/", KrServices::cmdExist("krename"));
+ Application* md5sum = new Application("md5sum", "http://www.gnu.org/software/textutils/textutils.html", KrServices::cmdExist("md5sum"));
+ Application* md5deep = new Application("md5deep", "http://md5deep.sourceforge.net/", KrServices::cmdExist("md5deep"));
+ Application* sha1deep = new Application("sha1deep", "http://md5deep.sourceforge.net/", KrServices::cmdExist("sha1deep"));
+ Application* sha256deep = new Application("sha256deep", "http://md5deep.sourceforge.net/", KrServices::cmdExist("sha256deep"));
+ Application* tigerdeep = new Application("tigerdeep", "http://md5deep.sourceforge.net/", KrServices::cmdExist("tigerdeep"));
+ Application* whirlpooldeep = new Application("whirlpooldeep", "http://md5deep.sourceforge.net/", KrServices::cmdExist("whirlpooldeep"));
+ Application* cfv = new Application("cfv", "http://cfv.sourceforge.net/", KrServices::cmdExist("cfv"));
+
+ vecDiff.push_back(kdiff3);
+ vecDiff.push_back(kompare);
+ vecDiff.push_back(xxdiff);
+ vecMail.push_back(kmail);
+ vecRename.push_back(krename);
+ vecChecksum.push_back(md5sum);
+ vecChecksum.push_back(md5deep);
+ vecChecksum.push_back(sha1deep);
+ vecChecksum.push_back(sha256deep);
+ vecChecksum.push_back(tigerdeep);
+ vecChecksum.push_back(whirlpooldeep);
+ vecChecksum.push_back(cfv);
+
+ ApplicationGroup* diff = new ApplicationGroup( i18n("diff utility"), PS("DIFF"), vecDiff);
+ ApplicationGroup* mail = new ApplicationGroup( i18n("email client"), PS("MAIL"), vecMail);
+ ApplicationGroup* rename = new ApplicationGroup( i18n("batch renamer"), PS("RENAME"), vecRename);
+ ApplicationGroup* checksum = new ApplicationGroup( i18n("checksum utility"), PS("MD5"), vecChecksum);
+
+ _tableHeaders.append( i18n("Group") );
+ _tableHeaders.append( i18n("Tool") );
+ _tableHeaders.append( i18n("Found") );
+ _tableHeaders.append( i18n("Status") );
+ _numColumns = _tableHeaders.size();
+
+ _grid = initTable();
+
+ addRow(diff, _grid);
+ addRow(mail, _grid);
+ addRow(rename, _grid);
+ addRow(checksum, _grid);
+
+ delete kmail;
+ delete kompare;
+ delete kdiff3;
+ delete xxdiff;
+ delete krename;
+ delete md5sum;
+ delete md5deep;
+ delete sha1deep;
+ delete sha256deep;
+ delete tigerdeep;
+ delete whirlpooldeep;
+ delete cfv;
+
+ delete diff;
+ delete mail;
+ delete rename;
+ delete checksum;
+}
+
+KrToolResultTable::~KrToolResultTable()
+{
+}
+
+
+bool KrToolResultTable::addRow(SearchObject* search, QGridLayout* grid)
+{
+ ApplicationGroup* appGroup = dynamic_cast<ApplicationGroup*>(search);
+ QValueVector<Application*> _apps = appGroup->getAppVec();
+
+ // Name column
+ _label = new QLabel(appGroup->getSearchName(), this);
+ _label->setMargin(5);
+ _label->setAlignment( Qt::AlignTop );
+ grid->addWidget(_label, _numRows, 0);
+
+ // Tool column
+ QVBox* toolBox = new QVBox(this);
+ for( QValueVector<Application*>::Iterator it=_apps.begin(); it!=_apps.end(); it++ )
+ {
+ KURLLabel* l = new KURLLabel( (*it)->getWebsite(), (*it)->getAppName(), toolBox);
+ l->setAlignment(Qt::AlignLeft | Qt::AlignTop);
+ l->setMargin(5);
+ connect(l, SIGNAL(leftClickedURL(const QString&)),
+ SLOT(website(const QString&)));
+ }
+ grid->addWidget(toolBox, _numRows, 1);
+
+ // Found column
+ QVBox* vbox = new QVBox(this);
+ for( QValueVector<Application*>::Iterator it=_apps.begin(); it!=_apps.end(); it++ )
+ {
+ _label = new QLabel( (*it)->getPath(), vbox);
+ _label->setMargin(5);
+ _label->setAlignment( Qt::AlignTop );
+ }
+ grid->addWidget(vbox, _numRows, 2);
+
+ // Status column
+ _label = new QLabel(this);
+ _label->setMargin(5);
+ _label->setAlignment( Qt::AlignTop );
+ if( appGroup->getFoundGroup() ) {
+ _label->setText( i18n("enabled") );
+ _label->setPaletteForegroundColor("darkgreen");
+ } else {
+ _label->setText( i18n("disabled") );
+ _label->setPaletteForegroundColor("red");
+ }
+ grid->addWidget(_label, _numRows, 3);
+
+ // Apply shared design elements
+ adjustRow(_grid);
+
+ // Ensure the last column takes more space
+ _label->setMinimumWidth(300);
+
+ ++_numRows;
+ return true;
+}
+
+void KrToolResultTable::website(const QString& url)
+{
+ (void) new KRun(url);
+}