X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=packageview.cpp;h=a4439d554d7ea84632251536a01f12a08e314152;hb=HEAD;hp=857cac62cf5e92159afae07792f21390e42309fc;hpb=172a6626f6f1cd6445fc575e2d614a1821596900;p=fapman diff --git a/packageview.cpp b/packageview.cpp index 857cac6..a4439d5 100644 --- a/packageview.cpp +++ b/packageview.cpp @@ -1,20 +1,20 @@ /* - This file is part of Faster Application Manager. + This file is part of Faster Application Manager. - Faster Application Manager 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 3 of the License, or - (at your option) any later version. + Faster Application Manager 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 3 of the License, or + (at your option) any later version. - Faster Application Manager is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + Faster Application Manager is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with Faster Application Manager. If not, see . + You should have received a copy of the GNU General Public License + along with Faster Application Manager. If not, see . - (C) Heikki Holstila 2010 + (C) Heikki Holstila 2010 */ #include "packageview.h" @@ -34,523 +34,535 @@ PackageListWidgetItem::PackageListWidgetItem(Package* p_, QString name_) : QListWidgetItem(name_) { - iPackage = p_; + iPackage = p_; } void ListItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { - //QTime t; - //t.start(); - - QString name = index.data(UserRoleName).toString(); - QString version = index.data(UserRoleVersion).toString(); - QString desc = index.data(UserRoleDescShort).toString(); - Package::operation marked = (Package::operation) index.data(UserRoleMarked).toInt(); - bool installed = index.data(UserRoleInstalled).toBool(); - bool upgradeable = index.data(UserRoleUpgradeable).toBool(); - int statfilter = index.data(UserRoleCurrentStatFilter).toInt(); - int catfilter = index.data(UserRoleCurrentCatFilter).toInt(); - QString upg_version = index.data(UserRoleAvailVersion).toString(); - BlacklistSelect::blackList blacklisted = (BlacklistSelect::blackList) index.data(UserRoleBlacklisted).toInt(); - - painter->save(); - QRect r = option.rect; - - QLinearGradient gradientBase(r.topLeft(), r.bottomLeft()); - QColor base = option.palette.color(QPalette::Window); - QColor base2 = base; - int r1=base.red()+15; - int g1=base.green()+15; - int b1=base.blue()+15; - if( r1>255 ) r1=255; - if( g1>255 ) g1=255; - if( b1>255 ) b1=255; - int r2=base2.red()-20; - int g2=base2.green()-20; - int b2=base2.blue()-20; - if( r2<0 ) r2=0; - if( g2<0 ) g2=0; - if( b2<0 ) b2=0; - base.setRgb( r1, g1, b1 ); - base2.setRgb( r2, g2, b2 ); - gradientBase.setColorAt(0, base); - gradientBase.setColorAt(1, base2); - - painter->fillRect(r, gradientBase); - painter->drawLine(QPoint(r.left(),r.bottom()), QPoint(r.right(),r.bottom())); - - QPixmap icon = index.data(Qt::DecorationRole).value(); - if( icon.isNull() ) { - // use default icon - painter->drawPixmap( r.left(), r.top()+4, 48, 48, iDefaultIcon ); - } else { - painter->drawPixmap( r.left(), r.top()+4, 48, 48, icon ); - } - - QPixmap statusicon; - if( marked == Package::PkgOpNone ) - { - if( installed && upgradeable ) - statusicon = iIconPkgNoOpInstalledUpgradeable; - else if( installed ) - statusicon = iIconPkgNoOpInstalled; - else if( !installed ) - statusicon = iIconPkgNoOpNotInstalled; - } else if( marked == Package::PkgOpInstallUpgrade ) { - if( upgradeable ) - statusicon = iIconPkgUpgrade; - else - statusicon = iIconPkgInstall; - } else if( marked == Package::PkgOpRemove ) { - statusicon = iIconPkgRemove; - } - - QString showVer; - if( upgradeable && (statfilter==Package::PkgStatUpgradeable || - (statfilter==Package::PkgStatUnknown && marked==Package::PkgOpInstallUpgrade) || - (catfilter==PackageView::CatFilterAllMarked && marked==Package::PkgOpInstallUpgrade) )) - { - showVer = upg_version; - } else { - showVer = version; - } - - int ver_w = 0; - if( QApplication::desktop()->width() > QApplication::desktop()->height() ) - { - r = option.rect; - r.setRight( r.right()-statusicon.width()-4 ); - - if( catfilter != PackageView::CatFilterBlacklisted ) { - painter->drawText(r, Qt::AlignTop|Qt::AlignRight, showVer, &r); - ver_w = r.width(); - } else if( blacklisted==BlacklistSelect::BlacklistThis ) { - if( upgradeable && !upg_version.isEmpty() ) { - showVer = upg_version; - } else { - showVer = version; - } - painter->drawText(r, Qt::AlignTop|Qt::AlignRight, showVer, &r); - ver_w = r.width(); - } - } - - r = option.rect; - r.setRight( r.right()-statusicon.width()-4-ver_w ); //does not work as it should? - QFont f = painter->font(); - f.setBold(true); - painter->setFont(f); - painter->drawText(r.left()+iDefaultIcon.width()+2, r.top(), r.width(), r.height(), Qt::AlignTop|Qt::AlignLeft, name, &r); - f.setBold(false); - painter->setFont(f); - - f.setPointSize( f.pointSize()-4 ); - painter->setFont(f); - r = option.rect; - painter->drawText(r.left()+iDefaultIcon.width()+2, r.top(), r.width(), r.height(), Qt::AlignBottom|Qt::AlignLeft, desc, &r); - - r = option.rect; - painter->drawPixmap(r.right()-statusicon.width()-2, r.top()+4, 24, 24, statusicon); - - painter->restore(); - - //if( t.elapsed()>=100 ) - //qDebug() << name << t.elapsed(); + //QTime t; + //t.start(); + + QString name = index.data(UserRoleName).toString(); + QString version = index.data(UserRoleVersion).toString(); + QString desc = index.data(UserRoleDescShort).toString(); + Package::operation marked = (Package::operation) index.data(UserRoleMarked).toInt(); + bool installed = index.data(UserRoleInstalled).toBool(); + bool upgradeable = index.data(UserRoleUpgradeable).toBool(); + int statfilter = index.data(UserRoleCurrentStatFilter).toInt(); + int catfilter = index.data(UserRoleCurrentCatFilter).toInt(); + QString upg_version = index.data(UserRoleAvailVersion).toString(); + BlacklistSelect::blackList blacklisted = static_cast( index.data(UserRoleBlacklisted).toInt() ); + + painter->save(); + QRect r = option.rect; + + /* + // does nothing at the moment because items aren't actually "selected" on the list in the qt sense... + if(option.state & QStyle::State_Selected) + { + r = option.rect; +#ifdef Q_WS_MAEMO_5 + painter->drawImage(r, QImage("/etc/hildon/theme/images/TouchListBackgroundPressed.png")); +#else + painter->fillRect(r, option.palette.highlight().color()); +#endif + } + */ + + QPixmap icon = index.data(Qt::DecorationRole).value(); + if( icon.isNull() ) { + // use default icon + painter->drawPixmap( r.left()+6, r.top()+10, 48, 48, iDefaultIcon ); + } else { + painter->drawPixmap( r.left()+6, r.top()+10, 48, 48, icon ); + } + + QPixmap statusicon; + if( marked == Package::PkgOpNone ) + { + if( installed && upgradeable ) + statusicon = iIconPkgNoOpInstalledUpgradeable; + else if( installed ) + statusicon = iIconPkgNoOpInstalled; + else if( !installed ) + statusicon = iIconPkgNoOpNotInstalled; + } else if( marked == Package::PkgOpInstallUpgrade ) { + if( upgradeable ) + statusicon = iIconPkgUpgrade; + else + statusicon = iIconPkgInstall; + } else if( marked == Package::PkgOpRemove ) { + statusicon = iIconPkgRemove; + } + + QString showVer; + if( upgradeable && (statfilter==Package::PkgStatUpgradeable || + (statfilter==Package::PkgStatUnknown && marked==Package::PkgOpInstallUpgrade) || + (catfilter==PackageView::CatFilterAllMarked && marked==Package::PkgOpInstallUpgrade) )) + { + showVer = upg_version; + } else { + showVer = version; + } + + int ver_w = 0; + if( QApplication::desktop()->width() > QApplication::desktop()->height() ) + { + r = option.rect; + r.setTop( r.top()+6 ); + r.setRight( r.right()-statusicon.width()-6 ); + + if( catfilter != PackageView::CatFilterBlacklisted ) { + painter->drawText(r, Qt::AlignTop|Qt::AlignRight, showVer, &r); + ver_w = r.width(); + } else if( blacklisted==BlacklistSelect::BlacklistThis ) { + if( upgradeable && !upg_version.isEmpty() ) { + showVer = upg_version; + } else { + showVer = version; + } + painter->drawText(r, Qt::AlignTop|Qt::AlignRight, showVer, &r); + ver_w = r.width(); + } + } + + r = option.rect; + r.setRight( r.right()-statusicon.width()-4-ver_w ); //does not work as it should? + QFont f = painter->font(); + painter->setFont(f); + painter->drawText(r.left()+iDefaultIcon.width()+2, r.top()+5, r.width(), r.height(), Qt::AlignTop|Qt::AlignLeft, name, &r); + + f.setPointSize( f.pointSize()-4 ); + painter->setFont(f); + r = option.rect; + QColor gray; + gray = QColor(156, 154, 156); + painter->save(); + f.setPointSize(13); + painter->setFont(f); + painter->setPen(gray); + r.setBottom(r.bottom()-10); + painter->drawText(r.left()+iDefaultIcon.width()+2, r.top(), r.width(), r.height(), Qt::AlignBottom|Qt::AlignLeft, desc, &r); + painter->restore(); + + r = option.rect; + painter->drawPixmap(r.right()-statusicon.width()-2, r.top()+10, 24, 24, statusicon); + + painter->restore(); + + //if( t.elapsed()>=100 ) + //qDebug() << name << t.elapsed(); } void ListItemDelegate::loadIcons() { - iDefaultIcon = QPixmap(":/icons/icons/appdefault.png"); - iIconPkgInstall = QPixmap(":/icons/icons/pkg_install.png"); - iIconPkgUpgrade = QPixmap(":/icons/icons/pkg_upgrade.png"); - iIconPkgRemove = QPixmap(":/icons/icons/pkg_remove.png"); - iIconPkgNoOpInstalled = QPixmap(":/icons/icons/pkg_nop_installed.png"); - iIconPkgNoOpNotInstalled = QPixmap(":/icons/icons/pkg_nop_notinstalled.png"); - iIconPkgNoOpInstalledUpgradeable = QPixmap(":/icons/icons/pkg_nop_instupgr.png"); +#ifdef Q_WS_MAEMO_5 + iDefaultIcon = QPixmap("/usr/share/icons/hicolor/64x64/hildon/tasklaunch_default_application.png"); +#else + iDefaultIcon = QPixmap(":/icons/icons/appdefault.png"); +#endif + iIconPkgInstall = QPixmap(":/icons/icons/pkg_install.png"); + iIconPkgUpgrade = QPixmap(":/icons/icons/pkg_upgrade.png"); + iIconPkgRemove = QPixmap(":/icons/icons/pkg_remove.png"); + iIconPkgNoOpInstalled = QPixmap(":/icons/icons/pkg_nop_installed.png"); + iIconPkgNoOpNotInstalled = QPixmap(":/icons/icons/pkg_nop_notinstalled.png"); + iIconPkgNoOpInstalledUpgradeable = QPixmap(":/icons/icons/pkg_nop_instupgr.png"); } QSize ListItemDelegate::sizeHint(const QStyleOptionViewItem&, const QModelIndex&) const { - return QSize(400, 58); + return QSize(400, 70); } PackageView::PackageView(QWidget *parent) : QMainWindow(parent), ui(new Ui::PackageView) { - iMainWindow = dynamic_cast(parent); - ui->setupUi(this); + iMainWindow = dynamic_cast(parent); + ui->setupUi(this); +#ifdef Q_WS_MAEMO_5 + this->setAttribute(Qt::WA_Maemo5StackedWindow); + this->setWindowFlags(Qt::Window); + this->setAttribute(Qt::WA_Maemo5AutoOrientation); +#endif + iSettings = 0; + iAptInterface = 0; + + connect(QApplication::desktop(), SIGNAL(resized(int)), this, SLOT(orientationChanged())); + + iCatFilterLabels + << tr("All marked packages") // a special case + << tr("All user categories") + << tr("\tDesktop") + << tr("\tEducation") + << tr("\tGames") + << tr("\tGraphics") + << tr("\tInternet & Networking") + << tr("\tLocation & Navigation") + << tr("\tMultimedia") + << tr("\tOffice") + << tr("\tOther") + << tr("\tProgramming") + << tr("\tScience") + << tr("\tSystem") + << tr("\tUtilities") + << tr("All packages (ADVANCED)") + << tr("Blacklisted packages"); // a special case + + iCatFilterStrings + << "" + << "user/" + << "user/desktop" + << "user/education" + << "user/games" + << "user/graphics" + << "user/network" + << "user/navigation" + << "user/multimedia" + << "user/office" + << "user/other" + << "user/development" + << "user/science" + << "user/system" + << "user/utilities" + << "" + << ""; + + iDefaultCatFilter = CatFilterAllUser; + iSelectedCatFilter = iDefaultCatFilter; + + iStatFilterLabels + << tr("All") + << tr("Not installed") + << tr("Upgradeable") + << tr("Installed"); + + iSelectedStatFilter = Package::PkgStatUnknown; + iSortOrder = SortAlpha; + + iDimmer = new dimmer(this); + + ui->searchBar->hide(); + + iListCoverLabel = new QLabel(ui->listWidget); + iListCoverLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + iListCoverLabel->setAlignment(Qt::AlignCenter); + + iKeyFilter = new KeyEventGrabber(this); + ui->listWidget->installEventFilter(iKeyFilter); + + iSortNoticeShown = false; + + iSearchPkgName = true; + iSearchDisplayName = true; + iSearchDescShort = true; + iSearchDescLong = false; + + // fine-tune kinetic scrolling parameters #ifdef Q_WS_MAEMO_5 - this->setAttribute(Qt::WA_Maemo5StackedWindow); - this->setWindowFlags(Qt::Window); - this->setAttribute(Qt::WA_Maemo5AutoOrientation); + QAbstractKineticScroller* listscroller = ui->listWidget->property("kineticScroller").value(); + if( listscroller ) + { + //qDebug() << listscroller->dragInertia() << listscroller->decelerationFactor() + // << listscroller->minimumVelocity() << listscroller->maximumVelocity(); + listscroller->setDecelerationFactor(0.75); // default is 0.85 + listscroller->setDragInertia(0.60); // default is 0.85 + listscroller->setMaximumVelocity(1800); // default is 3500 + + // not good because it alse sets horizontal overshoot: + //listscroller->setOvershootPolicy( QAbstractKineticScroller::OvershootAlwaysOn ); + } #endif - iSettings = 0; - iAptInterface = 0; - - connect(QApplication::desktop(), SIGNAL(resized(int)), this, SLOT(orientationChanged())); - - iCatFilterLabels - << tr("All marked packages") // a special case - << tr("All user categories") - << tr("\tDesktop") - << tr("\tEducation") - << tr("\tGames") - << tr("\tGraphics") - << tr("\tInternet & Networking") - << tr("\tLocation & Navigation") - << tr("\tMultimedia") - << tr("\tOffice") - << tr("\tOther") - << tr("\tProgramming") - << tr("\tScience") - << tr("\tSystem") - << tr("\tUtilities") - << tr("All packages (ADVANCED)") - << tr("Blacklisted packages"); // a special case - - iCatFilterStrings - << "" - << "user/" - << "user/desktop" - << "user/education" - << "user/games" - << "user/graphics" - << "user/network" - << "user/navigation" - << "user/multimedia" - << "user/office" - << "user/other" - << "user/development" - << "user/science" - << "user/system" - << "user/utilities" - << "" - << ""; - - iDefaultCatFilter = CatFilterAllUser; - iSelectedCatFilter = iDefaultCatFilter; - - iStatFilterLabels - << tr("All") - << tr("Not installed") - << tr("Upgradeable") - << tr("Installed"); - - iSelectedStatFilter = Package::PkgStatUnknown; - iSortOrder = SortAlpha; - - iDimmer = new dimmer(this); - - ui->searchBar->hide(); - - iListCoverLabel = new QLabel(ui->listWidget); - iListCoverLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - iListCoverLabel->setAlignment(Qt::AlignCenter); - - iKeyFilter = new KeyEventGrabber(this); - ui->listWidget->installEventFilter(iKeyFilter); - - iSortNoticeShown = false; - - iSearchPkgName = true; - iSearchDisplayName = true; - iSearchDescShort = true; - iSearchDescLong = false; - - // fine-tune kinetic scrolling parameters - QAbstractKineticScroller* listscroller = ui->listWidget->property("kineticScroller").value(); - if( listscroller ) - { - //qDebug() << listscroller->dragInertia() << listscroller->decelerationFactor() - // << listscroller->minimumVelocity() << listscroller->maximumVelocity(); - listscroller->setDecelerationFactor(0.75); // default is 0.85 - listscroller->setDragInertia(0.60); // default is 0.85 - listscroller->setMaximumVelocity(1800); // default is 3500 - - // not good because it alse sets horizontal overshoot: - //listscroller->setOvershootPolicy( QAbstractKineticScroller::OvershootAlwaysOn ); - } } PackageView::~PackageView() { - delete iListCoverLabel; - delete iKeyFilter; - delete iDimmer; - delete ui; + delete iListCoverLabel; iListCoverLabel=0; + delete iKeyFilter; iKeyFilter=0; + delete iDimmer; iDimmer=0; + delete ui; ui=0; } void PackageView::orientationChanged() { - ui->listWidget->scroll(1,1); // this causes all items to be repainted - iListCoverLabel->setGeometry( ui->listWidget->rect() ); + ui->listWidget->scroll(1,1); // this causes all items to be repainted + iListCoverLabel->setGeometry( ui->listWidget->rect() ); } void PackageView::resizeEvent(QResizeEvent* event) { - iListCoverLabel->setGeometry( ui->listWidget->rect() ); - QWidget::resizeEvent(event); + if( iDimmer ) { + iDimmer->resize( this->size() ); + } + + iListCoverLabel->setGeometry( ui->listWidget->rect() ); + QWidget::resizeEvent(event); } bool PackageView::doFilterCategory(Package* pkg) { - if( pkg->section()=="user/hidden" && iSelectedStatFilter!=Package::PkgStatInstalled && iSelectedStatFilter!=Package::PkgStatUnknown ) - return false; - if( pkg->section()=="user/hidden" && !pkg->isInstalled() ) - return false; - - Package* upg_pkg = pkg->availablePackage(); - - if( iSelectedStatFilter==Package::PkgStatUpgradeable && iSelectedCatFilter!=CatFilterBlacklisted && - pkg->isUpgradeable() && upg_pkg && upg_pkg->isBlacklisted() ) - return false; - - if( pkg->isBlacklisted() || (upg_pkg && upg_pkg->isBlacklisted()) ) - { - if( iSelectedCatFilter == CatFilterBlacklisted ) - return true; - if( pkg->isInstalled() && (iSelectedStatFilter==Package::PkgStatInstalled || iSelectedStatFilter==Package::PkgStatUnknown) ) - return true; - if( pkg->isBlacklisted() && iSelectedCatFilter != CatFilterBlacklisted ) - return false; - } else if( !pkg->isBlacklisted() && iSelectedCatFilter == CatFilterBlacklisted ) - return false; - - if( iSelectedCatFilter==CatFilterAllMarked ) { - if( pkg->isMarkedForOperation() ) - return true; - else - return false; - } - if( pkg->section().startsWith( iCatFilterStrings.at(iSelectedCatFilter) ) ) - return true; - - return false; + if( pkg->section()=="user/hidden" && iSelectedStatFilter!=Package::PkgStatInstalled && iSelectedStatFilter!=Package::PkgStatUnknown ) + return false; + if( pkg->section()=="user/hidden" && !pkg->isInstalled() ) + return false; + + Package* upg_pkg = pkg->availablePackage(); + + if( iSelectedStatFilter==Package::PkgStatUpgradeable && iSelectedCatFilter!=CatFilterBlacklisted && + pkg->isUpgradeable() && upg_pkg && upg_pkg->isBlacklisted() ) + return false; + + if( pkg->isBlacklisted() || (upg_pkg && upg_pkg->isBlacklisted()) ) + { + if( iSelectedCatFilter == CatFilterBlacklisted ) + return true; + if( pkg->isInstalled() && (iSelectedStatFilter==Package::PkgStatInstalled || iSelectedStatFilter==Package::PkgStatUnknown) ) + return true; + if( pkg->isBlacklisted() && iSelectedCatFilter != CatFilterBlacklisted ) + return false; + } else if( !pkg->isBlacklisted() && iSelectedCatFilter == CatFilterBlacklisted ) + return false; + + if( iSelectedCatFilter==CatFilterAllMarked ) { + if( pkg->isMarkedForOperation() ) + return true; + else + return false; + } + if( pkg->section().startsWith( iCatFilterStrings.at(iSelectedCatFilter) ) ) + return true; + + return false; } QString PackageView::generateSortString(Package* pkg) { - QString sortstr; - - if( iSortOrder==SortAlpha ) { - sortstr = pkg->displayName(); - } - else if( iSortOrder==SortDateDesc ) { - Package* upg = 0; - if( pkg->isUpgradeable() ) - upg = pkg->availablePackage(); - - if( (!upg && pkg->date().isValid()) || iSelectedStatFilter==Package::PkgStatInstalled ) - sortstr = pkg->date().toString("yyyy-MM-dd hh:mm:ss"); - else if( upg && upg->date().isValid() ) { - sortstr = upg->date().toString("yyyy-MM-dd hh:mm:ss"); - } else { - sortstr = ""; - iPackagesEmptySort++; - } - } - else if( iSortOrder==SortSizeDesc ) { - if( pkg->isInstalled() ) - sortstr = QString("%1").arg(pkg->installedSize()*1024, 12 ); - else - sortstr = QString("%1").arg(pkg->size(), 12 ); - } - - //qDebug() << sortstr; - - return sortstr; + QString sortstr; + + if( iSortOrder==SortAlpha ) { + sortstr = pkg->displayName(); + } + else if( iSortOrder==SortDateDesc ) { + Package* upg = 0; + if( pkg->isUpgradeable() ) + upg = pkg->availablePackage(); + + if( (!upg && pkg->date().isValid()) || iSelectedStatFilter==Package::PkgStatInstalled ) + sortstr = pkg->date().toString("yyyy-MM-dd hh:mm:ss"); + else if( upg && upg->date().isValid() ) { + sortstr = upg->date().toString("yyyy-MM-dd hh:mm:ss"); + } else { + sortstr = ""; + iPackagesEmptySort++; + } + } + else if( iSortOrder==SortSizeDesc ) { + if( pkg->isInstalled() ) + sortstr = QString("%1").arg(pkg->installedSize()*1024, 12 ); + else + sortstr = QString("%1").arg(pkg->size(), 12 ); + } + + //qDebug() << sortstr; + + return sortstr; } void PackageView::openWin() { - ui->listWidget->clear(); - ui->listWidget->setSortingEnabled(true); - iPackagesEmptySort = 0; - - if( !isVisible() ) { - iMainWindow->busyDialog(false); - iListCoverLabel->setText("Loading..."); - iListCoverLabel->setAutoFillBackground(true); - iListCoverLabel->show(); - show(); - QApplication::processEvents(); - } - - if( iSortOrder==SortDateDesc || iSortOrder==SortSizeDesc ) - ui->listWidget->sortItems(Qt::DescendingOrder); - else - ui->listWidget->sortItems(Qt::AscendingOrder); - - delete ui->listWidget->itemDelegate(); - ListItemDelegate* delegate = new ListItemDelegate(ui->listWidget); - delegate->loadIcons(); - ui->listWidget->setItemDelegate( delegate ); - - if( !ui->searchBar->isVisible() ) - { - if( iSelectedStatFilter == Package::PkgStatNotInstalled || iSelectedStatFilter == Package::PkgStatUnknown || - iSelectedCatFilter == CatFilterAllMarked || iSelectedCatFilter == CatFilterBlacklisted ) - { - QHashIterator i( *iAptInterface->packagesAvailable() ); - while (i.hasNext()) - { - i.next(); - Package* inst = iAptInterface->packagesInstalled()->value(i.value()->name(),0); - if( doFilterCategory(i.value()) && !inst ) - addListItem(i.value(), generateSortString(i.value())); - } - } - if( iSelectedStatFilter == Package::PkgStatInstalled || iSelectedStatFilter == Package::PkgStatUpgradeable || - iSelectedStatFilter == Package::PkgStatUnknown || iSelectedCatFilter == CatFilterAllMarked || - iSelectedCatFilter == CatFilterBlacklisted ) - { - QHashIterator i( *iAptInterface->packagesInstalled() ); - while (i.hasNext()) - { - i.next(); - if( iSelectedStatFilter == Package::PkgStatUpgradeable && iSelectedCatFilter != CatFilterBlacklisted ) { - if( i.value()->isUpgradeable() && doFilterCategory(i.value()) ) - addListItem(i.value(), generateSortString(i.value())); - } else { - if( doFilterCategory(i.value()) ) - addListItem(i.value(), generateSortString(i.value())); - } - } - } - } else { - for( int j=0; jhide(); - iListCoverLabel->setAutoFillBackground(false); - - updateLabel(); - - if( iSelectedStatFilter==Package::PkgStatUpgradeable && ui->listWidget->count()>0 && - iSelectedCatFilter != CatFilterAllMarked && iSelectedCatFilter != CatFilterBlacklisted ) - { - ui->actionUpgrade_all->setVisible(true); - } else { - ui->actionUpgrade_all->setVisible(false); - } - - if( iSelectedCatFilter == CatFilterBlacklisted && ui->listWidget->count()>0 ) { - ui->actionRestore_all->setVisible(true); - } else { - ui->actionRestore_all->setVisible(false); - } - - show(); - - if( !ui->searchBar->isVisible() ) { - ui->listWidget->setFocusPolicy(Qt::StrongFocus); - ui->listWidget->setFocus(); - } else { - ui->listWidget->setFocusPolicy(Qt::NoFocus); - ui->lineEdit->setFocus(); - } - - if( ui->listWidget->count() == 0 ) - { - iListCoverLabel->setGeometry( ui->listWidget->rect() ); - iListCoverLabel->setText("No packages"); - iListCoverLabel->show(); - } - - if( ui->listWidget->count()>1 && iPackagesEmptySort == ui->listWidget->count() && !iSortNoticeShown ) { - ConfirmDialog d(false, this); - QString msg = "No shown packages currently have the required information for sorting by this criterion. The list is unsorted."; - if( iSortOrder == SortDateDesc && !iSettings->qsettings()->value("fetch_dates",false).toBool() ) - msg += " You can enable date fetching in the options menu."; - d.setText("Notice", msg); - d.exec(); - iSortNoticeShown = true; - } + ui->listWidget->clear(); + ui->listWidget->setSortingEnabled(true); + iPackagesEmptySort = 0; + + if( !isVisible() ) { + iMainWindow->busyDialog(false); + iListCoverLabel->setText("Loading..."); + iListCoverLabel->setAutoFillBackground(true); + iListCoverLabel->show(); + show(); + QApplication::processEvents(); + } + + if( iSortOrder==SortDateDesc || iSortOrder==SortSizeDesc ) + ui->listWidget->sortItems(Qt::DescendingOrder); + else + ui->listWidget->sortItems(Qt::AscendingOrder); + + delete ui->listWidget->itemDelegate(); + ListItemDelegate* delegate = new ListItemDelegate(ui->listWidget); + delegate->loadIcons(); + ui->listWidget->setItemDelegate( delegate ); + + if( !ui->searchBar->isVisible() ) + { + if( iSelectedStatFilter == Package::PkgStatNotInstalled || iSelectedStatFilter == Package::PkgStatUnknown || + iSelectedCatFilter == CatFilterAllMarked || iSelectedCatFilter == CatFilterBlacklisted ) + { + QHashIterator i( *iAptInterface->packagesAvailable() ); + while (i.hasNext()) + { + i.next(); + Package* inst = iAptInterface->packagesInstalled()->value(i.value()->name(),0); + if( doFilterCategory(i.value()) && !inst ) + addListItem(i.value(), generateSortString(i.value())); + } + } + if( iSelectedStatFilter == Package::PkgStatInstalled || iSelectedStatFilter == Package::PkgStatUpgradeable || + iSelectedStatFilter == Package::PkgStatUnknown || iSelectedCatFilter == CatFilterAllMarked || + iSelectedCatFilter == CatFilterBlacklisted ) + { + QHashIterator i( *iAptInterface->packagesInstalled() ); + while (i.hasNext()) + { + i.next(); + if( iSelectedStatFilter == Package::PkgStatUpgradeable && iSelectedCatFilter != CatFilterBlacklisted ) { + if( i.value()->isUpgradeable() && doFilterCategory(i.value()) ) + addListItem(i.value(), generateSortString(i.value())); + } else { + if( doFilterCategory(i.value()) ) + addListItem(i.value(), generateSortString(i.value())); + } + } + } + } else { + for( int j=0; jhide(); + iListCoverLabel->setAutoFillBackground(false); + + updateLabel(); + + if( iSelectedStatFilter==Package::PkgStatUpgradeable && ui->listWidget->count()>0 && + iSelectedCatFilter != CatFilterAllMarked && iSelectedCatFilter != CatFilterBlacklisted ) + { + ui->actionUpgrade_all->setVisible(true); + } else { + ui->actionUpgrade_all->setVisible(false); + } + + if( iSelectedCatFilter == CatFilterBlacklisted && ui->listWidget->count()>0 ) { + ui->actionRestore_all->setVisible(true); + } else { + ui->actionRestore_all->setVisible(false); + } + + if( iSelectedStatFilter==Package::PkgStatInstalled ) { + ui->actionStore_list->setVisible(true); + } else { + ui->actionStore_list->setVisible(false); + } + + show(); + + if( !ui->searchBar->isVisible() ) { + ui->listWidget->setFocusPolicy(Qt::StrongFocus); + ui->listWidget->setFocus(); + } else { + ui->listWidget->setFocusPolicy(Qt::NoFocus); + ui->lineEdit->setFocus(); + } + + if( ui->listWidget->count() == 0 ) + { + iListCoverLabel->setGeometry( ui->listWidget->rect() ); + iListCoverLabel->setText("No packages"); + iListCoverLabel->show(); + } + + if( ui->listWidget->count()>1 && iPackagesEmptySort == ui->listWidget->count() && !iSortNoticeShown ) { + ConfirmDialog d(false, this); + QString msg = "No shown packages currently have the required information for sorting by this criterion. The list is unsorted."; + if( iSortOrder == SortDateDesc && !iSettings->qsettings()->value("fetch_dates",false).toBool() ) + msg += " You can enable date fetching in the options menu."; + d.setText("Notice", msg); + d.exec(); + iSortNoticeShown = true; + } } void PackageView::enableMenu() { - ui->menuMenu->setEnabled(true); + ui->menuMenu->setEnabled(true); } void PackageView::disableMenu() { - ui->menuMenu->setEnabled(false); + ui->menuMenu->setEnabled(false); } void PackageView::addListItem(Package* pkg_, QString listname_) { - PackageListWidgetItem* p = new PackageListWidgetItem( pkg_, listname_ ); - - if( pkg_ != 0 ) - { - QString name = pkg_->name(); - if( !pkg_->maemoDisplayName().isEmpty() ) - name = pkg_->maemoDisplayName(); - p->setData(UserRoleName, name); - } else { - p->setData(UserRoleName, listname_); - } - - if( pkg_ != 0 ) - { - p->setData(UserRoleDescShort, pkg_->descShort()); - p->setData(UserRoleVersion, pkg_->version()); - p->setData(UserRoleMarked, (int)pkg_->markedOperation()); - p->setData(UserRoleInstalled, pkg_->isInstalled()); - p->setData(UserRoleUpgradeable, pkg_->isUpgradeable()); - p->setData(UserRoleAvailVersion, pkg_->upgradeableVersion()); - p->setData(UserRoleCurrentStatFilter, iSelectedStatFilter); - p->setData(UserRoleCurrentCatFilter, iSelectedCatFilter); - - if( pkg_->availablePackage() ) - p->setData(UserRoleBlacklisted, (int)pkg_->availablePackage()->blacklisted()); - else - p->setData(UserRoleBlacklisted, (int)pkg_->blacklisted()); - - //qDebug()<name(); - - pkg_->convertIcon(); - p->setData(Qt::DecorationRole, *pkg_->icon()); - } - ui->listWidget->addItem( p ); + PackageListWidgetItem* p = new PackageListWidgetItem( pkg_, listname_ ); + + if( pkg_ != 0 ) + { + QString name = pkg_->name(); + if( !pkg_->maemoDisplayName().isEmpty() ) + name = pkg_->maemoDisplayName(); + p->setData(UserRoleName, name); + } else { + p->setData(UserRoleName, listname_); + } + + if( pkg_ != 0 ) + { + p->setData(UserRoleDescShort, pkg_->descShort()); + p->setData(UserRoleVersion, pkg_->version()); + p->setData(UserRoleMarked, static_cast(pkg_->markedOperation()) ); + p->setData(UserRoleInstalled, pkg_->isInstalled()); + p->setData(UserRoleUpgradeable, pkg_->isUpgradeable()); + p->setData(UserRoleAvailVersion, pkg_->upgradeableVersion()); + p->setData(UserRoleCurrentStatFilter, iSelectedStatFilter); + p->setData(UserRoleCurrentCatFilter, iSelectedCatFilter); + + if( pkg_->availablePackage() ) + p->setData(UserRoleBlacklisted, static_cast(pkg_->availablePackage()->blacklisted()) ); + else + p->setData(UserRoleBlacklisted, static_cast(pkg_->blacklisted()) ); + + //qDebug() << pkg_->name(); + + pkg_->convertIcon(); + p->setData(Qt::DecorationRole, *pkg_->icon()); + } + ui->listWidget->addItem( p ); } void PackageView::closeEvent(QCloseEvent *event) { - if( !iAptInterface ) { - resetWindow(); - event->accept(); - } - - if( iDimmer->busy() ) - { - iAptInterface->cancel(); - event->ignore(); - return; - } - - if( iAptInterface->numSelectedPackages() == 0 ) - { - resetWindow(); - event->accept(); - } else { - QString c; - c.setNum( iAptInterface->numSelectedPackages() ); - ConfirmDialog d(true, this); - d.setText("Returning to main menu", QString("Clear %1 package selection(s) and lose all the pending changes?").arg(iAptInterface->numSelectedPackages())); - if( d.exec() ) { - resetWindow(); - event->accept(); - } else { - event->ignore(); - } - } + if( !iAptInterface ) { + resetWindow(); + event->accept(); + } + + if( iDimmer->busy() ) + { + iAptInterface->cancel(); + event->ignore(); + return; + } + + if( iAptInterface->numSelectedPackages() == 0 ) + { + resetWindow(); + event->accept(); + } else { + QString c; + c.setNum( iAptInterface->numSelectedPackages() ); + ConfirmDialog d(true, this); + d.setText("Returning to main menu", QString("Clear %1 package selection(s) and lose all the pending changes?").arg(iAptInterface->numSelectedPackages())); + if( d.exec() ) { + resetWindow(); + event->accept(); + } else { + event->ignore(); + } + } } void PackageView::changeEvent(QEvent *e) @@ -567,331 +579,341 @@ void PackageView::changeEvent(QEvent *e) void PackageView::on_btn_Commit_clicked() { - QStringList pkgnames; - - QHashIterator i( *iAptInterface->packagesAvailable() ); - while (i.hasNext()) - { - i.next(); - - if( i.value()->markedOperation() == Package::PkgOpInstallUpgrade ) - pkgnames << i.value()->name(); - if( i.value()->markedOperation() == Package::PkgOpRemove ) { - qDebug() << "warning: trying to add package marked from the wrong list"; - //pkgnames << i.value()->name() + "-"; - } - } - - QHashIterator r( *iAptInterface->packagesInstalled() ); - while (r.hasNext()) - { - r.next(); - - if( r.value()->markedOperation() == Package::PkgOpInstallUpgrade ) - pkgnames << r.value()->name(); - if( r.value()->markedOperation() == Package::PkgOpRemove ) - pkgnames << r.value()->name() + "-"; - } - - iMainWindow->busyDialog(true, "Operation in progress", "Reading dependencies"); - - iAptInterface->setProcessPackages(pkgnames); - iAptInterface->addQueuedOperation(AAptInterface::ModeAptGetSimulate); - iAptInterface->run(iDimmer); + QStringList pkgnames; + + QHashIterator i( *iAptInterface->packagesAvailable() ); + while (i.hasNext()) + { + i.next(); + + if( i.value()->markedOperation() == Package::PkgOpInstallUpgrade ) + pkgnames << i.value()->name(); + if( i.value()->markedOperation() == Package::PkgOpRemove ) { + qDebug() << "warning: trying to add package marked from the wrong list"; + //pkgnames << i.value()->name() + "-"; + } + } + + QHashIterator r( *iAptInterface->packagesInstalled() ); + while (r.hasNext()) + { + r.next(); + + if( r.value()->markedOperation() == Package::PkgOpInstallUpgrade ) + pkgnames << r.value()->name(); + if( r.value()->markedOperation() == Package::PkgOpRemove ) + pkgnames << r.value()->name() + "-"; + } + + iMainWindow->busyDialog(true, "Operation in progress", "Reading dependencies"); + + iAptInterface->setProcessPackages(pkgnames); + iAptInterface->addQueuedOperation(AAptInterface::ModeAptGetSimulate); + iAptInterface->run(iDimmer); } void PackageView::on_actionClear_selections_triggered() { - QString c; - c.setNum( iAptInterface->numSelectedPackages() ); - ConfirmDialog d(true, this); - d.setText(tr("Confirmation"), tr("Clear ") + c + tr(" package selection(s) and lose all the pending changes?")); - if( d.exec() ) - { - clearSelections(); - openWin(); - } + QString c; + c.setNum( iAptInterface->numSelectedPackages() ); + ConfirmDialog d(true, this); + d.setText(tr("Confirmation"), tr("Clear ") + c + tr(" package selection(s) and lose all the pending changes?")); + if( d.exec() ) + { + clearSelections(); + openWin(); + } } void PackageView::clearSelections() { - QHashIterator i( *iAptInterface->packagesInstalled() ); - while (i.hasNext()) - { - i.next(); - i.value()->setMarkedForOperation(Package::PkgOpNone); - } - QHashIterator a( *iAptInterface->packagesAvailable() ); - while (a.hasNext()) - { - a.next(); - a.value()->setMarkedForOperation(Package::PkgOpNone); - } - iAptInterface->setNumSelectedPackages(0); + QHashIterator i( *iAptInterface->packagesInstalled() ); + while (i.hasNext()) + { + i.next(); + i.value()->setMarkedForOperation(Package::PkgOpNone); + } + QHashIterator a( *iAptInterface->packagesAvailable() ); + while (a.hasNext()) + { + a.next(); + a.value()->setMarkedForOperation(Package::PkgOpNone); + } + iAptInterface->setNumSelectedPackages(0); } void PackageView::on_listWidget_itemClicked(QListWidgetItem* item) { - Package* pkg = dynamic_cast(item)->package(); - if( !pkg ) - return; - - bool bl = pkg->isBlacklisted(); - bool bl_u = false; - - Package* upg_pkg = pkg->availablePackage(); - if( upg_pkg ) - bl_u = upg_pkg->isBlacklisted(); - - PackageSelector s(pkg, iAptInterface, iSettings, this); - s.exec(); - Package::operation op = s.selectedOperation(); - - QStringList confl = pkg->checkConflicts_RichText(); - if( confl.count() > 0 && op != Package::PkgOpNone ) { - ConfirmDialog d(true, this); - QString t = "Package " + pkg->name() + " conflicts with another installed or marked package. Mark anyway?"; - t += "

Conflicts: "; - t += confl.join(", "); - t += "
"; - d.setText("Conflicting packages", t); - if( !d.exec() ) - op = Package::PkgOpNone; - } - - if( pkg->isPinned() && op != Package::PkgOpNone ) { - ConfirmDialog d(true, this); - d.setText("Warning","Package has been pinned in apt preferences. Operation might not go as expected. Mark anyway?"); - if( !d.exec() ) - op = Package::PkgOpNone; - } - - pkg->setMarkedForOperation( op ); - item->setData( UserRoleMarked, (int)op ); - updateLabel(); - - if( pkg->isBlacklisted() != bl ) { - openWin(); - } - else if( upg_pkg && upg_pkg->isBlacklisted() != bl_u ) { - openWin(); - } + Package* pkg = dynamic_cast(item)->package(); + if( !pkg ) + return; + + bool bl = pkg->isBlacklisted(); + bool bl_u = false; + + Package* upg_pkg = pkg->availablePackage(); + if( upg_pkg ) + bl_u = upg_pkg->isBlacklisted(); + + PackageSelector s(pkg, iAptInterface, iSettings, iMainWindow, this); + s.exec(); + Package::operation op = s.selectedOperation(); + + QStringList confl = pkg->checkConflicts_RichText(); + if( confl.count() > 0 && op != Package::PkgOpNone ) { + ConfirmDialog d(true, this); + QString t = "Package " + pkg->name() + " conflicts with another installed or marked package. Mark anyway?"; + t += "

Conflicts: "; + t += confl.join(", "); + t += "
"; + d.setText("Conflicting packages", t); + if( !d.exec() ) + op = Package::PkgOpNone; + } + + if( pkg->isPinned() && op != Package::PkgOpNone ) { + ConfirmDialog d(true, this); + d.setText("Warning","Package has been pinned in apt preferences. Operation might not go as expected. Mark anyway?"); + if( !d.exec() ) + op = Package::PkgOpNone; + } + + pkg->setMarkedForOperation( op ); + item->setData( UserRoleMarked, (int)op ); + updateLabel(); + + if( pkg->isBlacklisted() != bl ) { + openWin(); + } + else if( upg_pkg && upg_pkg->isBlacklisted() != bl_u ) { + openWin(); + } } void PackageView::updateLabel() { - QString s; - s.setNum( iAptInterface->numSelectedPackages() ); - QString s2; - s2.setNum( ui->listWidget->count() ); - QString statlabel = iStatFilterLabels.at(iSelectedStatFilter); - if( iSelectedCatFilter == CatFilterAllMarked || iSelectedCatFilter == CatFilterBlacklisted ) - statlabel = "All"; - ui->label->setText("" + s + " package(s) marked
" - + "Showing: " + statlabel + "
" - + "Filter: " + iCatFilterLabels.at(iSelectedCatFilter) + " - " + s2 + " package(s)
"); - - if( iAptInterface->numSelectedPackages()==0 ) { - ui->btn_Commit->setEnabled(false); - ui->actionClear_selections->setVisible(false); - ui->actionSave_selections->setVisible(false); - } else { - ui->btn_Commit->setEnabled(true); - ui->actionClear_selections->setVisible(true); - ui->actionSave_selections->setVisible(true); - } + QString s; + s.setNum( iAptInterface->numSelectedPackages() ); + QString s2; + s2.setNum( ui->listWidget->count() ); + QString statlabel = iStatFilterLabels.at(iSelectedStatFilter); + if( iSelectedCatFilter == CatFilterAllMarked || iSelectedCatFilter == CatFilterBlacklisted ) + statlabel = "All"; + ui->label->setText("" + s + " package(s) marked
" + + "Showing: " + statlabel + "
" + + "Filter: " + iCatFilterLabels.at(iSelectedCatFilter) + " - " + s2 + " package(s)
"); + + if( iAptInterface->numSelectedPackages()==0 ) { + ui->btn_Commit->setEnabled(false); + ui->actionClear_selections->setVisible(false); + ui->actionSave_selections->setVisible(false); + } else { + ui->btn_Commit->setEnabled(true); + ui->actionClear_selections->setVisible(true); + ui->actionSave_selections->setVisible(true); + } } void PackageView::on_btn_CategoryFilter_clicked() { - FilterSelect f("Category filter", this); - f.setList( iCatFilterLabels, iSelectedCatFilter ); - - bool s = f.exec(); + FilterSelect f("Category filter", this); + f.setList( iCatFilterLabels, iSelectedCatFilter ); - if( s ) - iSelectedCatFilter = f.selection(); + bool s = f.exec(); - if( iSelectedCatFilter == CatFilterAllMarked || iSelectedCatFilter == CatFilterBlacklisted ) { - ui->btn_StatusFilter->setEnabled(false); - } else { - ui->btn_StatusFilter->setEnabled(true); - } + if( s ) + iSelectedCatFilter = f.selection(); - if( s ) { - iListCoverLabel->setText("Loading..."); - iListCoverLabel->setAutoFillBackground(true); - iListCoverLabel->show(); - QApplication::processEvents(); - iSortNoticeShown = false; + if( iSelectedCatFilter == CatFilterAllMarked || iSelectedCatFilter == CatFilterBlacklisted ) { + ui->btn_StatusFilter->setEnabled(false); + } else { + ui->btn_StatusFilter->setEnabled(true); + } - openWin(); - } + if( s ) { + iListCoverLabel->setText("Loading..."); + iListCoverLabel->setAutoFillBackground(true); + iListCoverLabel->show(); + QApplication::processEvents(); + iSortNoticeShown = false; + + openWin(); + + if( iSelectedCatFilter==CatFilterBlacklisted && iAptInterface->needListOrDateRefresh() ) + { + ConfirmDialog d(false, this); + d.setText("Notice","Since you don't have all package lists currently loaded, not all blacklisted " + "packages are necessarily shown"); + d.exec(); + } + } } void PackageView::setStatFilter(Package::packageStatus f_) { - iSelectedStatFilter = f_; + iSelectedStatFilter = f_; } void PackageView::on_btn_StatusFilter_clicked() { - FilterSelect f("Status filter", this); - f.setList( iStatFilterLabels, iSelectedStatFilter ); + FilterSelect f("Status filter", this); + f.setList( iStatFilterLabels, iSelectedStatFilter ); - int oldfilter = iSelectedStatFilter; + int oldfilter = iSelectedStatFilter; - bool s = f.exec(); + bool s = f.exec(); - if( s ) { - iSelectedStatFilter = (Package::packageStatus)f.selection(); + if( s ) { + iSelectedStatFilter = (Package::packageStatus)f.selection(); - iListCoverLabel->setText("Loading..."); - iListCoverLabel->setAutoFillBackground(true); - iListCoverLabel->show(); - QApplication::processEvents(); - iSortNoticeShown = false; + iListCoverLabel->setText("Loading..."); + iListCoverLabel->setAutoFillBackground(true); + iListCoverLabel->show(); + QApplication::processEvents(); + iSortNoticeShown = false; - openWin(); + openWin(); - if( oldfilter==Package::PkgStatInstalled && iSelectedStatFilter!=Package::PkgStatInstalled && - iAptInterface->needListOrDateRefresh() ) - { - iMainWindow->setNextOperation(MainWindow::OpOpenPkgView); - iMainWindow->busyDialog(true,"Operation in progress","Reading the rest of the package lists"); + if( oldfilter==Package::PkgStatInstalled && iSelectedStatFilter!=Package::PkgStatInstalled && + iAptInterface->needListOrDateRefresh() ) + { + iMainWindow->openNetworkConnection(); - if( iAptInterface->needRepoRefresh() && !iSettings->qsettings()->value("no_catalogs_autoupdate",false).toBool() ) - iAptInterface->addQueuedOperation(AAptInterface::ModeAptGetUpdate); + iMainWindow->setNextOperation(MainWindow::OpOpenPkgView); + iMainWindow->busyDialog(true,"Operation in progress","Reading the rest of the package lists"); - iAptInterface->addQueuedOperation(AAptInterface::ModeReadPackages); - iAptInterface->addQueuedOperation(AAptInterface::ModeFetchDates); - iAptInterface->run(iDimmer); - } - } + if( iAptInterface->needRepoRefresh() && !iSettings->qsettings()->value("no_catalogs_autoupdate",false).toBool() ) + iAptInterface->addQueuedOperation(AAptInterface::ModeAptGetUpdate); + + iAptInterface->addQueuedOperation(AAptInterface::ModeReadPackages); + iAptInterface->addQueuedOperation(AAptInterface::ModeFetchDates); + iAptInterface->run(iDimmer); + } + } } void PackageView::resetWindow() { - iAptInterface->writeBlacklist(); + iAptInterface->writeBlacklist(); - ui->btn_StatusFilter->setEnabled(true); - iSelectedCatFilter = iDefaultCatFilter; - //iSortOrder = SortAlpha; - iSortNoticeShown = false; + ui->btn_StatusFilter->setEnabled(true); + iSelectedCatFilter = iDefaultCatFilter; + //iSortOrder = SortAlpha; + iSortNoticeShown = false; - clearSelections(); - clearSearch(); + clearSelections(); + clearSearch(); } void PackageView::on_actionHelp_triggered() { - Help h(this); - h.exec(); + Help h(this); + h.exec(); } void PackageView::on_btn_searchClose_clicked() { - clearSearch(); + clearSearch(); - iListCoverLabel->setText("Loading..."); - iListCoverLabel->setAutoFillBackground(true); - iListCoverLabel->show(); - QApplication::processEvents(); + iListCoverLabel->setText("Loading..."); + iListCoverLabel->setAutoFillBackground(true); + iListCoverLabel->show(); + QApplication::processEvents(); - openWin(); + openWin(); } void PackageView::clearSearch() { - ui->lineEdit->clear(); - ui->searchBar->hide(); - ui->toolBar->show(); - ui->listWidget->setFocusPolicy(Qt::StrongFocus); + ui->lineEdit->clear(); + ui->searchBar->hide(); + ui->toolBar->show(); + ui->listWidget->setFocusPolicy(Qt::StrongFocus); - iSearchResults.clear(); + iSearchResults.clear(); } void PackageView::on_actionSearch_triggered() { - if( ui->searchBar->isVisible() ) - return; - - ui->listWidget->setFocusPolicy(Qt::NoFocus); - ui->searchLabel->setText( QString("%1 results").arg(ui->listWidget->count()) ); - ui->toolBar->hide(); - ui->searchBar->show(); - ui->lineEdit->setFocus(); - iPrevSearchText = ""; + if( ui->searchBar->isVisible() ) + return; + + ui->listWidget->setFocusPolicy(Qt::NoFocus); + ui->searchLabel->setText( QString("%1 results").arg(ui->listWidget->count()) ); + ui->toolBar->hide(); + ui->searchBar->show(); + ui->lineEdit->setFocus(); + iPrevSearchText = ""; } void PackageView::on_lineEdit_textEdited(QString text) { - if( !ui->searchBar->isVisible() ) - return; - - if( text.isEmpty() ) { - on_btn_searchClose_clicked(); - return; - } - - if( iPrevSearchText.length() > text.length() ) - { - iListCoverLabel->setText("Loading..."); - iListCoverLabel->setAutoFillBackground(true); - iListCoverLabel->show(); - QApplication::processEvents(); - - ui->searchBar->hide(); - openWin(); - ui->searchBar->show(); - ui->toolBar->hide(); // ensure it stays hidden - ui->lineEdit->setFocus(); - } - - iPrevSearchText = text; - - QList packages; - iSearchResults.clear(); - - for( int i=0; i<(ui->listWidget->count()); i++ ) { - packages.append( dynamic_cast( ui->listWidget->item(i) )->package() ); - } - - if( text.startsWith(":") ) { - for( int i=0; iname().startsWith(text.mid(1), Qt::CaseInsensitive)) || - (iSearchDisplayName && packages.at(i)->displayName().startsWith(text.mid(1), Qt::CaseInsensitive)) || - (iSearchDescShort && packages.at(i)->descShort().startsWith(text.mid(1), Qt::CaseInsensitive)) || - (iSearchDescLong && packages.at(i)->descLong().startsWith(text.mid(1), Qt::CaseInsensitive)) ) - { - iSearchResults.append( packages.at(i) ); - } - } - } - } else { - for( int i=0; iname().contains(text, Qt::CaseInsensitive)) || - (iSearchDisplayName && packages.at(i)->displayName().contains(text, Qt::CaseInsensitive)) || - (iSearchDescShort && packages.at(i)->descShort().contains(text, Qt::CaseInsensitive)) || - (iSearchDescLong && packages.at(i)->descLong().contains(text, Qt::CaseInsensitive)) ) - { - iSearchResults.append( packages.at(i) ); - } - } - } - } - - ui->searchLabel->setText( QString("%1 results").arg( iSearchResults.count()) ); - - openWin(); + if( !ui->searchBar->isVisible() ) + return; + + if( text.isEmpty() ) { + on_btn_searchClose_clicked(); + return; + } + + if( iPrevSearchText.length() > text.length() ) + { + iListCoverLabel->setText("Loading..."); + iListCoverLabel->setAutoFillBackground(true); + iListCoverLabel->show(); + QApplication::processEvents(); + + ui->searchBar->hide(); + openWin(); + ui->searchBar->show(); + ui->toolBar->hide(); // ensure it stays hidden + ui->lineEdit->setFocus(); + } + + iPrevSearchText = text; + + QList packages; + iSearchResults.clear(); + + for( int i=0; i<(ui->listWidget->count()); i++ ) { + packages.append( dynamic_cast( ui->listWidget->item(i) )->package() ); + } + + if( text.startsWith(":") ) { + for( int i=0; iname().startsWith(text.mid(1), Qt::CaseInsensitive)) || + (iSearchDisplayName && packages.at(i)->displayName().startsWith(text.mid(1), Qt::CaseInsensitive)) || + (iSearchDescShort && packages.at(i)->descShort().startsWith(text.mid(1), Qt::CaseInsensitive)) || + (iSearchDescLong && packages.at(i)->descLong().startsWith(text.mid(1), Qt::CaseInsensitive)) ) + { + iSearchResults.append( packages.at(i) ); + } + } + } + } else { + for( int i=0; iname().contains(text, Qt::CaseInsensitive)) || + (iSearchDisplayName && packages.at(i)->displayName().contains(text, Qt::CaseInsensitive)) || + (iSearchDescShort && packages.at(i)->descShort().contains(text, Qt::CaseInsensitive)) || + (iSearchDescLong && packages.at(i)->descLong().contains(text, Qt::CaseInsensitive)) ) + { + iSearchResults.append( packages.at(i) ); + } + } + } + } + + ui->searchLabel->setText( QString("%1 results").arg( iSearchResults.count()) ); + + openWin(); } void PackageView::setSearchText(QString text) { - ui->lineEdit->setText(text); - on_lineEdit_textEdited(text); + ui->lineEdit->setText(text); + on_lineEdit_textEdited(text); } KeyEventGrabber::KeyEventGrabber(QObject* parent) : QObject(parent) @@ -900,269 +922,354 @@ KeyEventGrabber::KeyEventGrabber(QObject* parent) : QObject(parent) bool KeyEventGrabber::eventFilter(QObject *obj, QEvent *event) { - if( event->type() == QEvent::KeyPress ) { - QString text = dynamic_cast(event)->text(); - int key = dynamic_cast(event)->key(); - if( (text.trimmed() != "" || text==" ") && key!=Qt::Key_Backspace ) { - dynamic_cast(this->parent())->on_actionSearch_triggered(); - dynamic_cast(this->parent())->setSearchText( text ); - return true; - } - } - return QObject::eventFilter(obj, event); + if( event->type() == QEvent::KeyPress ) { + QString text = dynamic_cast(event)->text(); + int key = dynamic_cast(event)->key(); + if( (text.trimmed() != "" || text==" ") && key!=Qt::Key_Backspace ) { + dynamic_cast(this->parent())->on_actionSearch_triggered(); + dynamic_cast(this->parent())->setSearchText( text ); + return true; + } + } + return QObject::eventFilter(obj, event); } void PackageView::on_pushButton_searchOptions_clicked() { - SearchOptions s(this); - s.setSelections(iSearchPkgName, iSearchDisplayName, iSearchDescShort, iSearchDescLong); - if( s.exec() ) - { - iSearchPkgName = s.searchPkgName(); - iSearchDisplayName = s.searchDisplayName(); - iSearchDescShort = s.searchDescShort(); - iSearchDescLong = s.searchDescLong(); - - iPrevSearchText += " "; - on_lineEdit_textEdited( ui->lineEdit->text() ); - } + SearchOptions s(this); + s.setSelections(iSearchPkgName, iSearchDisplayName, iSearchDescShort, iSearchDescLong); + if( s.exec() ) + { + iSearchPkgName = s.searchPkgName(); + iSearchDisplayName = s.searchDisplayName(); + iSearchDescShort = s.searchDescShort(); + iSearchDescLong = s.searchDescLong(); + + iPrevSearchText += " "; + on_lineEdit_textEdited( ui->lineEdit->text() ); + } } void PackageView::setSearchOptions(bool pkgname, bool dispname, bool dshort, bool dlong) { - iSearchPkgName = pkgname; - iSearchDisplayName = dispname; - iSearchDescShort = dshort; - iSearchDescLong = dlong; + iSearchPkgName = pkgname; + iSearchDisplayName = dispname; + iSearchDescShort = dshort; + iSearchDescLong = dlong; } void PackageView::on_actionUpgrade_all_triggered() { - for( int i=0; ilistWidget->count(); i++ ) - { - Package* pkg = dynamic_cast(ui->listWidget->item(i))->package(); - if( pkg && pkg->isUpgradeable() ) { - pkg->setMarkedForOperation( Package::PkgOpInstallUpgrade ); - ui->listWidget->item(i)->setData(UserRoleMarked, (int)Package::PkgOpInstallUpgrade); - } - } - updateLabel(); + for( int i=0; ilistWidget->count(); i++ ) + { + Package* pkg = dynamic_cast(ui->listWidget->item(i))->package(); + if( pkg && pkg->isUpgradeable() ) { + pkg->setMarkedForOperation( Package::PkgOpInstallUpgrade ); + ui->listWidget->item(i)->setData(UserRoleMarked, (int)Package::PkgOpInstallUpgrade); + } + } + updateLabel(); } void PackageView::on_actionView_log_triggered() { - QByteArray log = iAptInterface->readLogFile(); - LogView l(log, this); - l.exec(); + QByteArray log = iAptInterface->readLogFile(); + LogView l(log, this); + l.exec(); } void PackageView::on_btn_Sort_clicked() { - SortSelector s(iSortOrder, this); - if( s.exec() ) { - iSortOrder = s.selectedOperation(); - iSortNoticeShown = false; - openWin(); - } + SortSelector s(iSortOrder, this); + if( s.exec() ) { + iSortOrder = s.selectedOperation(); + iSortNoticeShown = false; + openWin(); + } } void PackageView::on_actionLoad_selections_triggered() { - if( iAptInterface->numSelectedPackages() > 0 ) { - ConfirmDialog d(true, this); - d.setText("Confirmation", "Proceed loading selections? All current selections will be cleared."); - if( !d.exec() ) - return; - } - - clearSelections(); - - QStringList unknownList; - QStringList wrongverList; - int success=0; - int errors=0; - - QFile f("/root/.fapman/selections.list"); - if( f.open(QIODevice::ReadOnly | QIODevice::Text ) ) - { - while(!f.atEnd()) { - QString line = f.readLine().trimmed(); - QStringList parts = line.split(' '); - if( parts.count()==3 ) { - Package* pkgAv = iAptInterface->packagesAvailable()->value(parts.at(0),0); - Package* pkgIn = iAptInterface->packagesInstalled()->value(parts.at(0),0); - if( parts.at(2)=="install" ) { - if( !pkgAv && !pkgIn ) { - unknownList << parts.at(0); - } - else if( pkgIn ) { - wrongverList << parts.at(0); - } - else if( pkgAv ) { - if( pkgAv->version() == parts.at(1) && !pkgAv->isInstalled() ) { - pkgAv->setMarkedForOperation(Package::PkgOpInstallUpgrade); - success++; - } else { - wrongverList << parts.at(0); - } - } - - } else if( parts.at(2)=="upgrade" ) { - if( !pkgAv && !pkgIn ) { - unknownList << parts.at(0); - } - else if( (pkgAv && !pkgIn) || (pkgIn && !pkgAv) ) { - wrongverList << parts.at(0); - } - else if( pkgIn && pkgAv ) { - if( pkgIn->version() == parts.at(1) && pkgIn->isInstalled() && pkgIn->isUpgradeable() ) { - pkgIn->setMarkedForOperation(Package::PkgOpInstallUpgrade); - success++; - } else { - wrongverList << parts.at(0); - } - } - - } else if( parts.at(2)=="remove" ) { - if( !pkgAv && !pkgIn ) { - unknownList << parts.at(0); - } - else if( pkgAv && !pkgIn ) { - wrongverList << parts.at(0); - } - else if( pkgIn ) { - if( pkgIn->version() == parts.at(1) && pkgIn->isInstalled() ) { - pkgIn->setMarkedForOperation(Package::PkgOpRemove); - success++; - } else { - wrongverList << parts.at(0); - } - } - } else { - errors++; - } - } else if( !line.isEmpty() ){ - errors++; - } - } - f.close(); - } - - ConfirmDialog d(false, this); - QString msg; - msg += QString("%1 successful
").arg(success); - if( wrongverList.count() > 0 ) { - msg += QString("%1 wrong versions/changed statuses (not selected):
").arg(wrongverList.count()); - msg += ""; - for( int i=0; i 0 ) { - msg += QString("%1 unknown packages:
").arg(unknownList.count()); - msg += ""; - for( int i=0; i0 || (wrongverList.count()==0 && unknownList.count()==0) ) { - msg += QString("%1 errors
").arg(errors); - } - if( success==0 && wrongverList.count()==0 && unknownList.count()==0 ) - msg = "No stored selections"; - QString title; - if( success > 0 ) - title = "Selections loaded"; - else - title = "No selections loaded"; - d.setText(title, msg); - d.exec(); - - if( success > 0 ) { - ui->btn_StatusFilter->setEnabled(false); - iSelectedCatFilter = CatFilterAllMarked; - } - openWin(); + if( iAptInterface->numSelectedPackages() > 0 ) { + ConfirmDialog d(true, this); + d.setText("Confirmation", "Proceed loading selections? All current selections will be cleared."); + if( !d.exec() ) + return; + } + + QString filename = QFileDialog::getOpenFileName(this, "Open selections list", KDefaultUserOpenSaveDir, "Selection lists (*.slist)"); + if( filename.isNull() || filename.isEmpty() ) + return; + + clearSelections(); + + QStringList unknownList; + QStringList wrongverList; + QStringList wrongstatusList; + int success=0; + int errors=0; + + QFile f( filename ); + if( f.open(QIODevice::ReadOnly | QIODevice::Text ) ) + { + while(!f.atEnd()) { + QString line = f.readLine().trimmed(); + QStringList parts = line.split(' '); + if( parts.count()==3 ) { + Package* pkgAv = iAptInterface->packagesAvailable()->value(parts.at(0),0); + Package* pkgIn = iAptInterface->packagesInstalled()->value(parts.at(0),0); + if( parts.at(2)=="install" ) { + if( !pkgAv && !pkgIn ) { + unknownList << parts.at(0); + } + else if( pkgIn ) { + wrongstatusList << parts.at(0); + } + else if( pkgAv ) { + if( !pkgAv->isInstalled() ) + { + pkgAv->setMarkedForOperation(Package::PkgOpInstallUpgrade); + success++; + if( pkgAv->version() != parts.at(1) ) { + wrongverList << parts.at(0); + } + } else { + wrongstatusList << parts.at(0); + } + } + + } else if( parts.at(2)=="upgrade" ) { + if( !pkgAv && !pkgIn ) { + unknownList << parts.at(0); + } + else if( (pkgAv && !pkgIn) || (pkgIn && !pkgAv) ) { + wrongstatusList << parts.at(0); + } + else if( pkgIn && pkgAv ) { + if( pkgIn->isInstalled() && pkgIn->isUpgradeable() ) + { + pkgIn->setMarkedForOperation(Package::PkgOpInstallUpgrade); + success++; + if( pkgIn->version() != parts.at(1) ) { + wrongverList << parts.at(0); + } + } else { + wrongstatusList << parts.at(0); + } + } + + } else if( parts.at(2)=="remove" ) { + if( !pkgAv && !pkgIn ) { + unknownList << parts.at(0); + } + else if( pkgAv && !pkgIn ) { + wrongstatusList << parts.at(0); + } + else if( pkgIn ) { + if( pkgIn->isInstalled() ) + { + pkgIn->setMarkedForOperation(Package::PkgOpRemove); + success++; + if( pkgIn->version() != parts.at(1) ) { + wrongverList << parts.at(0); + } + } else { + wrongstatusList << parts.at(0); + } + } + } else { + errors++; + } + } else if( !line.isEmpty() ){ + errors++; + } + } + f.close(); + } + + ConfirmDialog d(false, this); + QString msg; + msg += QString("%1 successful
").arg(success); + + if( wrongverList.count() > 0 ) { + msg += QString("%1 version mismatches (selected anyway):
").arg(wrongverList.count()); + msg += ""; + for( int i=0; i 0 ) { + msg += QString("%1 status mismatches (packages ignored):
").arg(wrongstatusList.count()); + msg += ""; + for( int i=0; i 0 ) { + msg += QString("%1 unknown packages:
").arg(unknownList.count()); + msg += ""; + for( int i=0; i0 || (wrongstatusList.count()==0 && unknownList.count()==0) ) { + msg += QString("%1 errors
").arg(errors); + } + if( success==0 && wrongstatusList.count()==0 && unknownList.count()==0 ) + msg = "No stored selections"; + QString title; + if( success > 0 ) + title = "Selections loaded"; + else + title = "No selections loaded"; + d.setText(title, msg); + d.exec(); + + if( unknownList.count()>0 && iAptInterface->needListOrDateRefresh() ) + { + ConfirmDialog f(false, this); + f.setText("About Unknown packages","You encountered unknown packages. You might want to try " + "loading the selections again after loading the full package lists (by selecting install or upgrade view)"); + f.exec(); + } + + if( success > 0 ) { + ui->btn_StatusFilter->setEnabled(false); + iSelectedCatFilter = CatFilterAllMarked; + } + openWin(); } void PackageView::on_actionSave_selections_triggered() { - if( iAptInterface->numSelectedPackages() == 0 ) - return; - - QFile f("/root/.fapman/selections.list"); - bool fail = false; - int count = 0; - if( f.open(QIODevice::WriteOnly | QIODevice::Text) ) - { - QTextStream out(&f); - - QHashIterator i( *iAptInterface->packagesAvailable() ); - while (i.hasNext()) - { - i.next(); - - if( i.value()->markedOperation() == Package::PkgOpInstallUpgrade ) { - out << i.value()->name() << " " << i.value()->version() << " install\n"; - count++; - } - if( i.value()->markedOperation() == Package::PkgOpRemove ) - qDebug() << "Warning: package is marked for removal in the wrong list"; - } - - QHashIterator r( *iAptInterface->packagesInstalled() ); - while (r.hasNext()) - { - r.next(); - - if( r.value()->markedOperation() == Package::PkgOpInstallUpgrade ) { - out << r.value()->name() << " " << r.value()->version() << " upgrade\n"; - count++; - } - if( r.value()->markedOperation() == Package::PkgOpRemove ) { - out << r.value()->name() << " " << r.value()->version() << " remove\n"; - count++; - } - } - - f.close(); - } else { - fail = true; - } - - ConfirmDialog d(false, this); - if( fail ) - d.setText( "Error", "Failed to write package selections" ); - else - d.setText( "Selections stored", QString("Stored %1 selections").arg(count) ); - d.exec(); + if( iAptInterface->numSelectedPackages() == 0 ) + return; + + QString filename = QFileDialog::getSaveFileName(this, "Save selections to...", KDefaultUserOpenSaveDir, "Selection lists (*.slist)"); + if( filename.isNull() || filename.isEmpty() ) + return; + + if( !filename.endsWith(".slist") ) + filename.append(".slist"); + + QFile f( filename ); + bool fail = false; + int count = 0; + if( f.open(QIODevice::WriteOnly | QIODevice::Text) ) + { + QTextStream out(&f); + + QHashIterator i( *iAptInterface->packagesAvailable() ); + while (i.hasNext()) + { + i.next(); + + if( i.value()->markedOperation() == Package::PkgOpInstallUpgrade ) { + out << i.value()->name() << " " << i.value()->version() << " install\n"; + count++; + } + if( i.value()->markedOperation() == Package::PkgOpRemove ) + qDebug() << "Warning: package is marked for removal in the wrong list"; + } + + QHashIterator r( *iAptInterface->packagesInstalled() ); + while (r.hasNext()) + { + r.next(); + + if( r.value()->markedOperation() == Package::PkgOpInstallUpgrade ) { + out << r.value()->name() << " " << r.value()->version() << " upgrade\n"; + count++; + } + if( r.value()->markedOperation() == Package::PkgOpRemove ) { + out << r.value()->name() << " " << r.value()->version() << " remove\n"; + count++; + } + } + + f.close(); + } else { + fail = true; + } + + ConfirmDialog d(false, this); + if( fail ) + d.setText( "Error", "Failed to write package selections" ); + else + d.setText( "Selections stored", QString("Stored %1 selections").arg(count) ); + d.exec(); } void PackageView::on_actionRestore_all_triggered() { - ConfirmDialog d(true, this); - d.setText("Confirmation","Restore all shown blacklisted packages?"); - if( !d.exec() ) - return; - - for( int i=0; ilistWidget->count(); i++ ) - { - Package* pkg = dynamic_cast(ui->listWidget->item(i))->package(); - Package* p1 = iAptInterface->packagesInstalled()->value(pkg->name(),0); - Package* p2 = iAptInterface->packagesAvailable()->value(pkg->name(),0); - if( p1 && p1->isBlacklisted() ) { - BlacklistSelect::blackList old = p1->blacklisted(); - p1->setBlacklisted(BlacklistSelect::BlacklistNone); - iAptInterface->removeFromBlacklist(p1, old); - } - if( p2 && p2->isBlacklisted() ) { - BlacklistSelect::blackList old = p2->blacklisted(); - p2->setBlacklisted(BlacklistSelect::BlacklistNone); - iAptInterface->removeFromBlacklist(p2, old); - } - } - iAptInterface->writeBlacklist(); - openWin(); + ConfirmDialog d(true, this); + d.setText("Confirmation","Restore all shown blacklisted packages?"); + if( !d.exec() ) + return; + + for( int i=0; ilistWidget->count(); i++ ) + { + Package* pkg = dynamic_cast(ui->listWidget->item(i))->package(); + Package* p1 = iAptInterface->packagesInstalled()->value(pkg->name(),0); + Package* p2 = iAptInterface->packagesAvailable()->value(pkg->name(),0); + if( p1 && p1->isBlacklisted() ) { + BlacklistSelect::blackList old = p1->blacklisted(); + p1->setBlacklisted(BlacklistSelect::BlacklistNone); + iAptInterface->removeFromBlacklist(p1, old); + } + if( p2 && p2->isBlacklisted() ) { + BlacklistSelect::blackList old = p2->blacklisted(); + p2->setBlacklisted(BlacklistSelect::BlacklistNone); + iAptInterface->removeFromBlacklist(p2, old); + } + } + iAptInterface->writeBlacklist(); + openWin(); +} + +void PackageView::on_actionStore_list_triggered() +{ + QString filename = QFileDialog::getSaveFileName(this, "Save application list to...", KDefaultUserOpenSaveDir, "Selection lists (*.slist)"); + if( filename.isNull() || filename.isEmpty() ) + return; + + if( !filename.endsWith(".slist") ) + filename.append(".slist"); + + QFile f( filename ); + bool fail = false; + int count = 0; + if( f.open(QIODevice::WriteOnly | QIODevice::Text) ) + { + QTextStream out(&f); + + QHashIterator r( *iAptInterface->packagesInstalled() ); + while (r.hasNext()) + { + r.next(); + + if( r.value()->isInstalled() && r.value()->section().startsWith("user/") ) { + out << r.value()->name() << " " << r.value()->version() << " install\n"; + count++; + } + } + + f.close(); + } else { + fail = true; + } + + ConfirmDialog d(false, this); + if( fail ) + d.setText( "Error", "Failed to write application list" ); + else + d.setText( "List stored", QString("Stored %1 selections.").arg(count) + "
" + "The list can be used to restore removed applications later." ); + d.exec(); }