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();
+ BlacklistSelect::blackList blacklisted = static_cast<BlacklistSelect::blackList>( index.data(UserRoleBlacklisted).toInt() );
painter->save();
QRect r = option.rect;
statusicon = iIconPkgRemove;
}
- QString showVer = "";
+ QString showVer;
if( upgradeable && (statfilter==Package::PkgStatUpgradeable ||
(statfilter==Package::PkgStatUnknown && marked==Package::PkgOpInstallUpgrade) ||
(catfilter==PackageView::CatFilterAllMarked && marked==Package::PkgOpInstallUpgrade) ))
painter->drawText(r, Qt::AlignTop|Qt::AlignRight, showVer, &r);
ver_w = r.width();
} else if( blacklisted==BlacklistSelect::BlacklistThis ) {
- if( upgradeable && upg_version!="" ) {
+ if( upgradeable && !upg_version.isEmpty() ) {
showVer = upg_version;
} else {
showVer = version;
iSearchDescLong = false;
// fine-tune kinetic scrolling parameters
+#ifdef Q_WS_MAEMO_5
QAbstractKineticScroller* listscroller = ui->listWidget->property("kineticScroller").value<QAbstractKineticScroller*>();
if( listscroller )
{
// not good because it alse sets horizontal overshoot:
//listscroller->setOvershootPolicy( QAbstractKineticScroller::OvershootAlwaysOn );
}
+#endif
}
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()
void PackageView::resizeEvent(QResizeEvent* event)
{
+ if( iDimmer ) {
+ iDimmer->resize( this->size() );
+ }
+
iListCoverLabel->setGeometry( ui->listWidget->rect() );
QWidget::resizeEvent(event);
}
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() ) {
if( pkg_ != 0 )
{
QString name = pkg_->name();
- if( pkg_->maemoDisplayName()!="" )
+ if( !pkg_->maemoDisplayName().isEmpty() )
name = pkg_->maemoDisplayName();
p->setData(UserRoleName, name);
} else {
{
p->setData(UserRoleDescShort, pkg_->descShort());
p->setData(UserRoleVersion, pkg_->version());
- p->setData(UserRoleMarked, (int)pkg_->markedOperation());
+ 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(UserRoleCurrentCatFilter, iSelectedCatFilter);
if( pkg_->availablePackage() )
- p->setData(UserRoleBlacklisted, (int)pkg_->availablePackage()->blacklisted());
+ p->setData(UserRoleBlacklisted, static_cast<int>(pkg_->availablePackage()->blacklisted()) );
else
- p->setData(UserRoleBlacklisted, (int)pkg_->blacklisted());
+ p->setData(UserRoleBlacklisted, static_cast<int>(pkg_->blacklisted()) );
- //qDebug()<<pkg_->name();
+ //qDebug() << pkg_->name();
pkg_->convertIcon();
p->setData(Qt::DecorationRole, *pkg_->icon());
return;
}
-#ifdef Q_WS_MAEMO_5
if( iAptInterface->numSelectedPackages() == 0 )
{
resetWindow();
event->ignore();
}
}
-#else // for simulator
- resetWindow();
- event->accept();
-#endif
}
void PackageView::changeEvent(QEvent *e)
if( upg_pkg )
bl_u = upg_pkg->isBlacklisted();
- PackageSelector s(pkg, iAptInterface, this);
+ PackageSelector s(pkg, iAptInterface, iSettings, this);
s.exec();
+ Package::operation op = s.selectedOperation();
- pkg->setMarkedForOperation( s.selectedOperation() );
- item->setData(UserRoleMarked, (int)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 ) {
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();
+ }
}
}
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");
- if( iAptInterface->needRepoRefresh() )
+ if( iAptInterface->needRepoRefresh() && !iSettings->qsettings()->value("no_catalogs_autoupdate",false).toBool() )
iAptInterface->addQueuedOperation(AAptInterface::ModeAptGetUpdate);
iAptInterface->addQueuedOperation(AAptInterface::ModeReadPackages);
void PackageView::resetWindow()
{
- iMainWindow->resetIdlingTime();
-
iAptInterface->writeBlacklist();
ui->btn_StatusFilter->setEnabled(true);
- //iSelectedCatFilter = iDefaultCatFilter;
+ iSelectedCatFilter = iDefaultCatFilter;
//iSortOrder = SortAlpha;
iSortNoticeShown = false;
if( !ui->searchBar->isVisible() )
return;
- if( text=="" ) {
+ if( text.isEmpty() ) {
on_btn_searchClose_clicked();
return;
}
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("/root/.fapman/selections.list");
+ QFile f( filename );
if( f.open(QIODevice::ReadOnly | QIODevice::Text ) )
{
while(!f.atEnd()) {
unknownList << parts.at(0);
}
else if( pkgIn ) {
- wrongverList << parts.at(0);
+ wrongstatusList << parts.at(0);
}
else if( pkgAv ) {
- if( pkgAv->version() == parts.at(1) && !pkgAv->isInstalled() ) {
+ if( !pkgAv->isInstalled() )
+ {
pkgAv->setMarkedForOperation(Package::PkgOpInstallUpgrade);
success++;
+ if( pkgAv->version() != parts.at(1) ) {
+ wrongverList << parts.at(0);
+ }
} else {
- wrongverList << parts.at(0);
+ wrongstatusList << parts.at(0);
}
}
unknownList << parts.at(0);
}
else if( (pkgAv && !pkgIn) || (pkgIn && !pkgAv) ) {
- wrongverList << parts.at(0);
+ wrongstatusList << parts.at(0);
}
else if( pkgIn && pkgAv ) {
- if( pkgIn->version() == parts.at(1) && pkgIn->isInstalled() && pkgIn->isUpgradeable() ) {
+ if( pkgIn->isInstalled() && pkgIn->isUpgradeable() )
+ {
pkgIn->setMarkedForOperation(Package::PkgOpInstallUpgrade);
success++;
+ if( pkgIn->version() != parts.at(1) ) {
+ wrongverList << parts.at(0);
+ }
} else {
- wrongverList << parts.at(0);
+ wrongstatusList << parts.at(0);
}
}
unknownList << parts.at(0);
}
else if( pkgAv && !pkgIn ) {
- wrongverList << parts.at(0);
+ wrongstatusList << parts.at(0);
}
else if( pkgIn ) {
- if( pkgIn->version() == parts.at(1) && pkgIn->isInstalled() ) {
+ if( pkgIn->isInstalled() )
+ {
pkgIn->setMarkedForOperation(Package::PkgOpRemove);
success++;
+ if( pkgIn->version() != parts.at(1) ) {
+ wrongverList << parts.at(0);
+ }
} else {
- wrongverList << parts.at(0);
+ wrongstatusList << parts.at(0);
}
}
} else {
errors++;
}
- } else if( line!="" ){
+ } else if( !line.isEmpty() ){
errors++;
}
}
ConfirmDialog d(false, this);
QString msg;
msg += QString("<b>%1 successful</b><br>").arg(success);
+
if( wrongverList.count() > 0 ) {
- msg += QString("%1 wrong versions/changed statuses (not selected):<br>").arg(wrongverList.count());
+ 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\">";
}
msg += "</font><br>";
}
- if( errors>0 || (wrongverList.count()==0 && unknownList.count()==0) ) {
+
+ if( errors>0 || (wrongstatusList.count()==0 && unknownList.count()==0) ) {
msg += QString("%1 errors<br>").arg(errors);
}
- if( success==0 && wrongverList.count()==0 && unknownList.count()==0 )
+ if( success==0 && wrongstatusList.count()==0 && unknownList.count()==0 )
msg = "No stored selections";
QString title;
if( success > 0 )
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;
if( iAptInterface->numSelectedPackages() == 0 )
return;
- QFile f("/root/.fapman/selections.list");
+ 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) )
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();
+}