Author: dmacvicar Date: Fri Oct 23 17:55:32 2009 New Revision: 59185 URL: http://svn.opensuse.org/viewcvs/yast?rev=59185&view=rev Log: allow solver repository upgrade requests from the user interface (bnc#548551) Yast doesnt recognize priority of repositories Modified: trunk/qt-pkg/src/CMakeLists.txt trunk/qt-pkg/src/YQPackageSelector.cc trunk/qt-pkg/src/YQPackageSelector.h trunk/qt-pkg/src/YQPkgRepoFilterView.cc trunk/qt-pkg/src/YQPkgRepoFilterView.h trunk/qt-pkg/src/YQPkgRepoList.cc trunk/qt-pkg/yast2-qt-pkg.spec.in Modified: trunk/qt-pkg/src/CMakeLists.txt URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt-pkg/src/CMakeLists.txt?rev=59185&r1=59184&r2=59185&view=diff ============================================================================== --- trunk/qt-pkg/src/CMakeLists.txt (original) +++ trunk/qt-pkg/src/CMakeLists.txt Fri Oct 23 17:55:32 2009 @@ -10,6 +10,7 @@ -DQTLIBDIR=\\\"${LIB_INSTALL_DIR}\\\" -DHELPIMAGEDIR=\\\"${CMAKE_INSTALL_PREFIX}/share/YaST2/images\\\" -DPREFIX=\\\"${CMAKE_INSTALL_PREFIX}\\\" + -DSHOW_SINGLE_PRODUCT ) SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format-nonliteral -fmessage-length=0" ) Modified: trunk/qt-pkg/src/YQPackageSelector.cc URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt-pkg/src/YQPackageSelector.cc?rev=59185&r1=59184&r2=59185&view=diff ============================================================================== --- trunk/qt-pkg/src/YQPackageSelector.cc (original) +++ trunk/qt-pkg/src/YQPackageSelector.cc Fri Oct 23 17:55:32 2009 @@ -57,6 +57,7 @@ #include "QY2LayoutUtils.h" +#include "YQZypp.h" #include "YQPackageSelector.h" #include "YQPkgChangeLogView.h" #include "YQPkgChangesDialog.h" @@ -368,8 +369,12 @@ _repoFilterView = new YQPkgRepoFilterView( parent ); YUI_CHECK_NEW( _repoFilterView ); _filters->addPage( _( "&Repositories" ), _repoFilterView, "repos" ); - - + // hide and show the upgrade label when tabs change, or when the user + // selects repositories + connect(_repoFilterView, SIGNAL(filterStart()), this, SLOT(updateRepositoryUpgradeLabel())); + connect(this, SIGNAL(refresh()), this, SLOT(updateRepositoryUpgradeLabel())); + connect(_filters, SIGNAL(currentChanged(QWidget *)), this, SLOT(updateRepositoryUpgradeLabel())); + // // Package search view // @@ -421,6 +426,34 @@ void YQPackageSelector::layoutPkgList( QWidget *parent ) { + // this is made visible when activating the repository + // filter + QWidget *_notificationsContainer = new QWidget(parent); + QVBoxLayout *layout = new QVBoxLayout(_notificationsContainer); + + _repoUpgradingLabel = new QLabel(_notificationsContainer); + _repoUpgradingLabel->setTextFormat(Qt::RichText); + _repoUpgradingLabel->setWordWrap(true); + _repoUpgradingLabel->setVisible(false); + + _repoUpgradeLabel = new QLabel(_notificationsContainer); + _repoUpgradeLabel->setTextFormat(Qt::RichText); + _repoUpgradeLabel->setStyleSheet("background-color: "+ QApplication::palette().color(QPalette::ToolTipBase).name() + "; border: 1px solid black;"); + _repoUpgradeLabel->setWordWrap(true); + _repoUpgradeLabel->setVisible(false); + + layout->addWidget(_repoUpgradingLabel); + layout->addWidget(_repoUpgradeLabel); + + // if the user clicks on a link on the label, we have to check + // which repository upgrade job to add or remove, for that + // we will encode the links as repoupgradeadd://alias and + // repoupgraderemove:://alias + connect(_repoUpgradeLabel, SIGNAL(linkActivated(const QString &)), this, SLOT(slotRepoUpgradeLabelLinkClicked(const QString &))); + connect(_repoUpgradingLabel, SIGNAL(linkActivated(const QString &)), this, SLOT(slotRepoUpgradeLabelLinkClicked(const QString &))); + + updateRepositoryUpgradeLabel(); + _pkgList= new YQPkgList( parent ); YUI_CHECK_NEW( _pkgList ); @@ -428,7 +461,6 @@ this, SLOT ( autoResolveDependencies() ) ); } - void YQPackageSelector::layoutDetailsViews( QWidget *parent ) { @@ -1340,6 +1372,78 @@ } } +void +YQPackageSelector::updateRepositoryUpgradeLabel() +{ + zypp::ResPool::repository_iterator it; + _repoUpgradeLabel->setText(""); + _repoUpgradingLabel->setText(""); + + // we iterate twice to show first the repo upgrades that + // can be cancelled, and then the repo that can be added + for ( it = zypp::getZYpp()->pool().knownRepositoriesBegin(); + it != zypp::getZYpp()->pool().knownRepositoriesEnd(); + ++it ) + { + zypp::Repository repo(*it); + // add the option to cancel the upgrade job against this + // repository if there is a job for it + if ( zypp::getZYpp()->resolver()->upgradingRepo(repo) ) + { + _repoUpgradingLabel->setText(_repoUpgradingLabel->text() + _("<p><small>Cancel switching</a> system packages to versions in repository %2</small></p>").arg(repo.alias().c_str()).arg(repo.name().c_str())); + } + } + + for ( it = zypp::getZYpp()->pool().knownRepositoriesBegin(); + it != zypp::getZYpp()->pool().knownRepositoriesEnd(); + ++it ) + { + zypp::Repository repo(*it); + // add the option to upgrade to this repo packages if it is not the system + // repository and there is no upgrade job in the solver for it + // and the repo is the one selected right now + if ( ! zypp::getZYpp()->resolver()->upgradingRepo(repo) && + ! repo.isSystemRepo() && + _repoFilterView->selectedRepo() == repo ) + { + _repoUpgradeLabel->setText(_repoUpgradeLabel->text() + _("<p>Switch system packages</a> to the versions in this repository (%2)</p>").arg(repo.alias().c_str()).arg(repo.name().c_str())); + } + } + _repoUpgradeLabel->setVisible(!_repoUpgradeLabel->text().isEmpty() && + _repoFilterView->isVisible() ); + _repoUpgradingLabel->setVisible(!_repoUpgradingLabel->text().isEmpty()); +} + +void +YQPackageSelector::slotRepoUpgradeLabelLinkClicked(const QString &link) +{ + yuiDebug() << "link " << link << " clicked on label" << endl; + + QUrl url(link); + if (url.scheme() == "repoupgradeadd") + { + yuiDebug() << "looking for repo " << url.path() << endl; + std::string alias(url.path().remove(0,1).toStdString()); + zypp::Repository repo(zypp::getZYpp()->pool().reposFind(alias)); + yuiDebug() << repo << endl; + + if ( repo != zypp::Repository::noRepository ) + zypp::getZYpp()->resolver()->addUpgradeRepo(repo); + } + else if (url.scheme() == "repoupgraderemove") + { + std::string alias(url.path().remove(0,1).toStdString()); + zypp::Repository repo(zypp::getZYpp()->pool().reposFind(alias)); + + if ( repo != zypp::Repository::noRepository ) + zypp::getZYpp()->resolver()->removeUpgradeRepo(repo); + } + else + yuiDebug() << "unknown link operation " << url.scheme() << endl; + + resolveDependencies(); + emit refresh(); +} void YQPackageSelector::showProducts() Modified: trunk/qt-pkg/src/YQPackageSelector.h URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt-pkg/src/YQPackageSelector.h?rev=59185&r1=59184&r2=59185&view=diff ============================================================================== --- trunk/qt-pkg/src/YQPackageSelector.h (original) +++ trunk/qt-pkg/src/YQPackageSelector.h Fri Oct 23 17:55:32 2009 @@ -147,6 +147,10 @@ **/ void keyboardHelp(); + /** + * hides or shows the repository upgrade message + */ + void updateRepositoryUpgradeLabel(); signals: @@ -196,6 +200,11 @@ **/ void showProducts(); + /** + * a link in the repo upgrade label was clicked + */ + void slotRepoUpgradeLabelLinkClicked(const QString &link); + public: /** * returns the full path for an icon of a given size @@ -305,6 +314,9 @@ YQPkgDependenciesView * _pkgDependenciesView; YQPkgDescriptionView * _pkgDescriptionView; YQPkgFileListView * _pkgFileListView; + QLabel * _repoUpgradeLabel; + QLabel * _repoUpgradingLabel; + QWidget * _notificationsContainer; YQPkgRepoFilterView * _repoFilterView; YQPkgLangList * _langList; YQPkgList * _pkgList; Modified: trunk/qt-pkg/src/YQPkgRepoFilterView.cc URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt-pkg/src/YQPkgRepoFilterView.cc?rev=59185&r1=59184&r2=59185&view=diff ============================================================================== --- trunk/qt-pkg/src/YQPkgRepoFilterView.cc (original) +++ trunk/qt-pkg/src/YQPkgRepoFilterView.cc Fri Oct 23 17:55:32 2009 @@ -87,6 +87,14 @@ // NOP } +ZyppRepo +YQPkgRepoFilterView::selectedRepo() const +{ + YQPkgRepoListItem *selection = _repoList->selection(); + if ( selection && selection->zyppRepo() ) + return selection->zyppRepo(); + return zypp::Repository::noRepository; +} QWidget * YQPkgRepoFilterView::layoutSecondaryFilters( QWidget * parent ) Modified: trunk/qt-pkg/src/YQPkgRepoFilterView.h URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt-pkg/src/YQPkgRepoFilterView.h?rev=59185&r1=59184&r2=59185&view=diff ============================================================================== --- trunk/qt-pkg/src/YQPkgRepoFilterView.h (original) +++ trunk/qt-pkg/src/YQPkgRepoFilterView.h Fri Oct 23 17:55:32 2009 @@ -47,6 +47,10 @@ **/ virtual ~YQPkgRepoFilterView(); + /** + * Current selected repository, or if nothing is selected + */ + zypp::Repository selectedRepo() const; signals: @@ -75,7 +79,6 @@ **/ void filterFinished(); - public slots: /** @@ -109,7 +112,6 @@ void primaryFilterNearMatch( ZyppSel selectable, ZyppPkg pkg ); - protected: /** Modified: trunk/qt-pkg/src/YQPkgRepoList.cc URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt-pkg/src/YQPkgRepoList.cc?rev=59185&r1=59184&r2=59185&view=diff ============================================================================== --- trunk/qt-pkg/src/YQPkgRepoList.cc (original) +++ trunk/qt-pkg/src/YQPkgRepoList.cc Fri Oct 23 17:55:32 2009 @@ -190,25 +190,20 @@ if ( nameCol() >= 0 ) { string name = repo.info().name(); - -#if SHOW_SINGLE_PRODUCT - ZyppProduct product = singleProduct( _zyppRepo ); - - if ( product ) // only if the repository provides exactly one product - { // (which is the most common case) - name = product->summary(); - } -#endif - if ( ! name.empty() ) { setText( nameCol(), fromUTF8( name )); } - } std::string infoToolTip; infoToolTip += ("<b>" + repo.info().name() + "</b>"); + + ZyppProduct product = singleProduct( _zyppRepo ); + if ( product ) + { + infoToolTip += ("<p>" + product->summary() + "</p>"); + } if ( ! repo.info().baseUrlsEmpty() ) { Modified: trunk/qt-pkg/yast2-qt-pkg.spec.in URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt-pkg/yast2-qt-pkg.spec.in?rev=59185&r1=59184&r2=59185&view=diff ============================================================================== --- trunk/qt-pkg/yast2-qt-pkg.spec.in (original) +++ trunk/qt-pkg/yast2-qt-pkg.spec.in Fri Oct 23 17:55:32 2009 @@ -11,7 +11,7 @@ BuildRequires: yast2-devtools >= 2.16.3 Requires: yast2-qt >= 2.17.13 BuildRequires: yast2-qt-devel >= 2.17.13 -BuildRequires: libzypp-devel >= 6.19.0 +BuildRequires: libzypp-devel >= 6.19.3 BuildRequires: yast2-libyui-devel >= 2.17.14 Requires: libzypp >= 6.19.0 Requires: yast2-libyui >= 2.17.14 -- To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org For additional commands, e-mail: yast-commit+help@opensuse.org