/*************************************************************************** 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 using namespace std; #define PS(x) _supported.contains(x)>0 KrResultTable::KrResultTable(TQWidget* parent) : TQWidget(parent), _numRows(1) { } KrResultTable::~KrResultTable() { } TQGridLayout* KrResultTable::initTable() { _grid = new TQGridLayout(this, _numRows, _numColumns); _grid->setColStretch(_numColumns-1, 1); // stretch last column // +++ Build and add table header +++ int column = 0; for( TQStringList::Iterator it=_tableHeaders.begin(); it!=_tableHeaders.end(); ++it ) { _label = new TQLabel(*it, this); _label->setMargin(5); _grid->addWidget(_label, 0, column); // Set font TQFont defFont = TDEGlobalSettings::generalFont(); defFont.setPointSize(defFont.pointSize()-1); defFont.setBold(true); _label->setFont(defFont); ++column; } return _grid; } void KrResultTable::adjustRow(TQGridLayout* grid) { TQLayoutIterator it = grid->iterator(); TQLayoutItem *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( TDEGlobalSettings::baseColor() ); ++it; ++col; } } // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- KrArchiverResultTable::KrArchiverResultTable(TQWidget* 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); Archiver* xz = new Archiver("xz", "http://www.tukaani.org/xz", PS("xz"), 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); addRow(xz, _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; delete xz; } KrArchiverResultTable::~KrArchiverResultTable() { } bool KrArchiverResultTable::addRow(SearchObject* search, TQGridLayout* grid) { Archiver* arch = dynamic_cast(search); // Name column _label = new KURLLabel(arch->getWebsite(), arch->getSearchName(), this); _label->setMargin(5); _label->setAlignment(TQt::AlignTop); grid->addWidget(_label, _numRows, 0); connect(_label, TQT_SIGNAL(leftClickedURL(const TQString&)), TQT_SLOT(website(const TQString&))); // Found column _label = new TQLabel( arch->getPath(), this ); _label->setMargin(5); grid->addWidget(_label, _numRows, 1); // Packing column _label = new TQLabel(this); _label->setMargin(5); _label->setAlignment( TQt::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 TQLabel(this); _label->setMargin(5); _label->setAlignment( TQt::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 TQLabel(arch->getNote(), this); _label->setMargin(5); _label->setAlignment( TQt::AlignTop | TQt::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 TQString& url) { (void) new KRun(url); } // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- KrToolResultTable::KrToolResultTable(TQWidget* parent) : KrResultTable(parent) { _supported = Krusader::supportedTools(); // get list of available tools TQValueVector 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, TQGridLayout* grid) { ApplicationGroup* appGroup = dynamic_cast(search); TQValueVector _apps = appGroup->getAppVec(); // Name column _label = new TQLabel(appGroup->getSearchName(), this); _label->setMargin(5); _label->setAlignment( TQt::AlignTop ); grid->addWidget(_label, _numRows, 0); // Tool column TQVBox* toolBox = new TQVBox(this); for( TQValueVector::Iterator it=_apps.begin(); it!=_apps.end(); it++ ) { KURLLabel* l = new KURLLabel( (*it)->getWebsite(), (*it)->getAppName(), toolBox); l->setAlignment(TQt::AlignLeft | TQt::AlignTop); l->setMargin(5); connect(l, TQT_SIGNAL(leftClickedURL(const TQString&)), TQT_SLOT(website(const TQString&))); } grid->addWidget(toolBox, _numRows, 1); // Found column TQVBox* vbox = new TQVBox(this); for( TQValueVector::Iterator it=_apps.begin(); it!=_apps.end(); it++ ) { _label = new TQLabel( (*it)->getPath(), vbox); _label->setMargin(5); _label->setAlignment( TQt::AlignTop ); } grid->addWidget(vbox, _numRows, 2); // Status column _label = new TQLabel(this); _label->setMargin(5); _label->setAlignment( TQt::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 TQString& url) { (void) new KRun(url); }