0.7 changes
[fapman] / packageview.cpp
index 3ff9002..f334694 100644 (file)
@@ -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 <http://www.gnu.org/licenses/>.
+    You should have received a copy of the GNU General Public License
+    along with Faster Application Manager.  If not, see <http://www.gnu.org/licenses/>.
 
-       (C) Heikki Holstila 2010
+    (C) Heikki Holstila 2010
 */
 
 #include "packageview.h"
 
 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 = static_cast<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<QPixmap>();
-       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<BlacklistSelect::blackList>( index.data(UserRoleBlacklisted).toInt() );
+
+    painter->save();
+    QRect r = option.rect;
+
+    QPixmap icon = index.data(Qt::DecorationRole).value<QPixmap>();
+    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<MainWindow*>(parent);
-       ui->setupUi(this);
+    iMainWindow = dynamic_cast<MainWindow*>(parent);
+    ui->setupUi(this);
 #ifdef Q_WS_MAEMO_5
-       this->setAttribute(Qt::WA_Maemo5StackedWindow);
-       this->setWindowFlags(Qt::Window);
-       this->setAttribute(Qt::WA_Maemo5AutoOrientation);
+    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
+    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
-       QAbstractKineticScroller* listscroller = ui->listWidget->property("kineticScroller").value<QAbstractKineticScroller*>();
-       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 );
-       }
+    QAbstractKineticScroller* listscroller = ui->listWidget->property("kineticScroller").value<QAbstractKineticScroller*>();
+    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
 }
 
 PackageView::~PackageView()
 {
-       delete iListCoverLabel; iListCoverLabel=0;
-       delete iKeyFilter; iKeyFilter=0;
-       delete iDimmer; iDimmer=0;
-       delete ui; ui=0;
+    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)
 {
-       if( iDimmer ) {
-               iDimmer->resize( this->size() );
-       }
+    if( iDimmer ) {
+        iDimmer->resize( this->size() );
+    }
 
-       iListCoverLabel->setGeometry( ui->listWidget->rect() );
-       QWidget::resizeEvent(event);
+    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<QString, Package*> 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<QString, Package*> 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; j<iSearchResults.count(); j++ )
-               {
-                       addListItem(iSearchResults.at(j), generateSortString( iSearchResults.at(j) ));
-               }
-       }
-
-       iListCoverLabel->hide();
-       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;
-       }
+    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<QString, Package*> 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<QString, Package*> 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; j<iSearchResults.count(); j++ )
+        {
+            addListItem(iSearchResults.at(j), generateSortString( iSearchResults.at(j) ));
+        }
+    }
+
+    iListCoverLabel->hide();
+    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, static_cast<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, static_cast<int>(pkg_->availablePackage()->blacklisted()) );
-               else
-                       p->setData(UserRoleBlacklisted, static_cast<int>(pkg_->blacklisted()) );
-
-               //qDebug() << pkg_->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<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, static_cast<int>(pkg_->availablePackage()->blacklisted()) );
+        else
+            p->setData(UserRoleBlacklisted, static_cast<int>(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)
@@ -579,341 +566,341 @@ void PackageView::changeEvent(QEvent *e)
 
 void PackageView::on_btn_Commit_clicked()
 {
-       QStringList pkgnames;
-
-       QHashIterator<QString, Package*> 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<QString, Package*> 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<QString, Package*> 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<QString, Package*> 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<QString, Package*> i( *iAptInterface->packagesInstalled() );
-       while (i.hasNext())
-       {
-               i.next();
-               i.value()->setMarkedForOperation(Package::PkgOpNone);
-       }
-       QHashIterator<QString, Package*> a( *iAptInterface->packagesAvailable() );
-       while (a.hasNext())
-       {
-               a.next();
-               a.value()->setMarkedForOperation(Package::PkgOpNone);
-       }
-       iAptInterface->setNumSelectedPackages(0);
+    QHashIterator<QString, Package*> i( *iAptInterface->packagesInstalled() );
+    while (i.hasNext())
+    {
+        i.next();
+        i.value()->setMarkedForOperation(Package::PkgOpNone);
+    }
+    QHashIterator<QString, Package*> 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<PackageListWidgetItem*>(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 += "<font size=\"-1\"><br><br>Conflicts: ";
-               t += confl.join(", ");
-               t += "</font>";
-               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<PackageListWidgetItem*>(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 += "<font size=\"-1\"><br><br>Conflicts: ";
+        t += confl.join(", ");
+        t += "</font>";
+        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("<font size=\"-2\"><b>" + s + "</b> package(s) marked<br>"
-                                          + "Showing: <b>" + statlabel + "</b><br>"
-                                          + "Filter: " + iCatFilterLabels.at(iSelectedCatFilter) + " - " + s2 + " package(s)</font>");
-
-       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("<font size=\"-2\"><b>" + s + "</b> package(s) marked<br>"
+                       + "Showing: <b>" + statlabel + "</b><br>"
+                       + "Filter: " + iCatFilterLabels.at(iSelectedCatFilter) + " - " + s2 + " package(s)</font>");
+
+    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();
-
-       if( s )
-               iSelectedCatFilter = f.selection();
-
-       if( iSelectedCatFilter == CatFilterAllMarked || iSelectedCatFilter == CatFilterBlacklisted ) {
-               ui->btn_StatusFilter->setEnabled(false);
-       } else {
-               ui->btn_StatusFilter->setEnabled(true);
-       }
-
-       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();
-               }
-       }
+    FilterSelect f("Category filter", this);
+    f.setList( iCatFilterLabels, iSelectedCatFilter );
+
+    bool s = f.exec();
+
+    if( s )
+        iSelectedCatFilter = f.selection();
+
+    if( iSelectedCatFilter == CatFilterAllMarked || iSelectedCatFilter == CatFilterBlacklisted ) {
+        ui->btn_StatusFilter->setEnabled(false);
+    } else {
+        ui->btn_StatusFilter->setEnabled(true);
+    }
+
+    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->openNetworkConnection();
+        if( oldfilter==Package::PkgStatInstalled && iSelectedStatFilter!=Package::PkgStatInstalled &&
+            iAptInterface->needListOrDateRefresh() )
+        {
+            iMainWindow->openNetworkConnection();
 
-                       iMainWindow->setNextOperation(MainWindow::OpOpenPkgView);
-                       iMainWindow->busyDialog(true,"Operation in progress","Reading the rest of the package lists");
+            iMainWindow->setNextOperation(MainWindow::OpOpenPkgView);
+            iMainWindow->busyDialog(true,"Operation in progress","Reading the rest of the package lists");
 
-                       if( iAptInterface->needRepoRefresh() && !iSettings->qsettings()->value("no_catalogs_autoupdate",false).toBool() )
-                               iAptInterface->addQueuedOperation(AAptInterface::ModeAptGetUpdate);
+            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);
-               }
-       }
+            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<Package*> packages;
-       iSearchResults.clear();
-
-       for( int i=0; i<(ui->listWidget->count()); i++ ) {
-               packages.append( dynamic_cast<PackageListWidgetItem*>( ui->listWidget->item(i) )->package() );
-       }
-
-       if( text.startsWith(":") ) {
-               for( int i=0; i<packages.count(); i++ ) {
-                       if( packages.at(i) ) {
-                               if( (iSearchPkgName && packages.at(i)->name().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; i<packages.count(); i++ ) {
-                       if( packages.at(i) ) {
-                               if( (iSearchPkgName && packages.at(i)->name().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<Package*> packages;
+    iSearchResults.clear();
+
+    for( int i=0; i<(ui->listWidget->count()); i++ ) {
+        packages.append( dynamic_cast<PackageListWidgetItem*>( ui->listWidget->item(i) )->package() );
+    }
+
+    if( text.startsWith(":") ) {
+        for( int i=0; i<packages.count(); i++ ) {
+            if( packages.at(i) ) {
+                if( (iSearchPkgName && packages.at(i)->name().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; i<packages.count(); i++ ) {
+            if( packages.at(i) ) {
+                if( (iSearchPkgName && packages.at(i)->name().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)
@@ -922,354 +909,354 @@ KeyEventGrabber::KeyEventGrabber(QObject* parent) : QObject(parent)
 
 bool KeyEventGrabber::eventFilter(QObject *obj, QEvent *event)
 {
-       if( event->type() == QEvent::KeyPress ) {
-               QString text = dynamic_cast<QKeyEvent*>(event)->text();
-               int key = dynamic_cast<QKeyEvent*>(event)->key();
-               if( (text.trimmed() != "" || text==" ") && key!=Qt::Key_Backspace ) {
-                       dynamic_cast<PackageView*>(this->parent())->on_actionSearch_triggered();
-                       dynamic_cast<PackageView*>(this->parent())->setSearchText( text );
-                       return true;
-               }
-       }
-       return QObject::eventFilter(obj, event);
+    if( event->type() == QEvent::KeyPress ) {
+        QString text = dynamic_cast<QKeyEvent*>(event)->text();
+        int key = dynamic_cast<QKeyEvent*>(event)->key();
+        if( (text.trimmed() != "" || text==" ") && key!=Qt::Key_Backspace ) {
+            dynamic_cast<PackageView*>(this->parent())->on_actionSearch_triggered();
+            dynamic_cast<PackageView*>(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; i<ui->listWidget->count(); i++ )
-       {
-               Package* pkg = dynamic_cast<PackageListWidgetItem*>(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; i<ui->listWidget->count(); i++ )
+    {
+        Package* pkg = dynamic_cast<PackageListWidgetItem*>(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;
-       }
-
-       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("<b>%1 successful</b><br>").arg(success);
-
-       if( wrongverList.count() > 0 ) {
-               msg += QString("%1 version mismatches (selected anyway):<br>").arg(wrongverList.count());
-               msg += "<font size=\"-1\">";
-               for( int i=0; i<wrongverList.count(); i++ ) {
-                       msg += wrongverList.at(i) + " ";
-               }
-               msg += "</font><br>";
-       }
-
-       if( wrongstatusList.count() > 0 ) {
-               msg += QString("%1 status mismatches (packages ignored):<br>").arg(wrongstatusList.count());
-               msg += "<font size=\"-1\">";
-               for( int i=0; i<wrongstatusList.count(); i++ ) {
-                       msg += wrongstatusList.at(i) + " ";
-               }
-               msg += "</font><br>";
-       }
-
-       if( unknownList.count() > 0 ) {
-               msg += QString("%1 unknown packages:<br>").arg(unknownList.count());
-               msg += "<font size=\"-1\">";
-               for( int i=0; i<unknownList.count(); i++ ) {
-                       msg += unknownList.at(i) + " ";
-               }
-               msg += "</font><br>";
-       }
-
-       if( errors>0 || (wrongstatusList.count()==0 && unknownList.count()==0) ) {
-               msg += QString("%1 errors<br>").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();
+    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("<b>%1 successful</b><br>").arg(success);
+
+    if( wrongverList.count() > 0 ) {
+        msg += QString("%1 version mismatches (selected anyway):<br>").arg(wrongverList.count());
+        msg += "<font size=\"-1\">";
+        for( int i=0; i<wrongverList.count(); i++ ) {
+            msg += wrongverList.at(i) + " ";
+        }
+        msg += "</font><br>";
+    }
+
+    if( wrongstatusList.count() > 0 ) {
+        msg += QString("%1 status mismatches (packages ignored):<br>").arg(wrongstatusList.count());
+        msg += "<font size=\"-1\">";
+        for( int i=0; i<wrongstatusList.count(); i++ ) {
+            msg += wrongstatusList.at(i) + " ";
+        }
+        msg += "</font><br>";
+    }
+
+    if( unknownList.count() > 0 ) {
+        msg += QString("%1 unknown packages:<br>").arg(unknownList.count());
+        msg += "<font size=\"-1\">";
+        for( int i=0; i<unknownList.count(); i++ ) {
+            msg += unknownList.at(i) + " ";
+        }
+        msg += "</font><br>";
+    }
+
+    if( errors>0 || (wrongstatusList.count()==0 && unknownList.count()==0) ) {
+        msg += QString("%1 errors<br>").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;
-
-       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<QString, Package*> 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<QString, Package*> 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<QString, Package*> 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<QString, Package*> 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; i<ui->listWidget->count(); i++ )
-       {
-               Package* pkg = dynamic_cast<PackageListWidgetItem*>(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; i<ui->listWidget->count(); i++ )
+    {
+        Package* pkg = dynamic_cast<PackageListWidgetItem*>(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<QString, Package*> 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) + "<br>"
-                                  "The list can be used to restore removed applications later." );
-       d.exec();
+    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<QString, Package*> 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) + "<br>"
+                   "The list can be used to restore removed applications later." );
+    d.exec();
 }