43 #define CHECK_DEPENDENCIES_ON_STARTUP 1 44 #define DEPENDENCY_FEEDBACK_IF_OK 1 45 #define AUTO_CHECK_DEPENDENCIES_DEFAULT true 46 #define ALWAYS_SHOW_PATCHES_VIEW_IF_PATCHES_AVAILABLE 0 47 #define GLOBAL_UPDATE_CONFIRMATION_THRESHOLD 20 48 #define ENABLE_SOURCE_RPMS 0 49 #define BRAINDEAD_LIB_NAMING_SCHEME 1 50 #define MARGIN 6 // around the widget 51 #define SPACING_BELOW_MENU_BAR 4 52 #define SPLITTER_HALF_SPACING 4 57 #include <boost/bind.hpp> 59 #include <QHBoxLayout> 60 #include <QVBoxLayout> 63 #include <QApplication> 66 #include <QFileDialog> 70 #include <QMessageBox> 71 #include <QPushButton> 78 #define YUILogComponent "qt-pkg" 81 #include "QY2LayoutUtils.h" 84 #include "YQPackageSelector.h" 85 #include "YQPkgChangeLogView.h" 86 #include "YQPkgChangesDialog.h" 87 #include "YQPkgConflictDialog.h" 88 #include "YQPkgConflictList.h" 89 #include "YQPkgDependenciesView.h" 90 #include "YQPkgDescriptionView.h" 91 #include "YQPkgDiskUsageList.h" 92 #include "YQPkgDiskUsageWarningDialog.h" 93 #include "YQPkgFileListView.h" 94 #include "YQPkgFilterTab.h" 95 #include "YQPkgHistoryDialog.h" 96 #include "YQPkgLangList.h" 97 #include "YQPkgList.h" 98 #include "YQPkgPackageKitGroupsFilterView.h" 99 #include "YQPkgPatchFilterView.h" 100 #include "YQPkgPatchList.h" 101 #include "YQPkgPatternList.h" 102 #include "YQPkgProductDialog.h" 103 #include "YQPkgRepoFilterView.h" 104 #include "YQPkgRepoList.h" 105 #include "YQPkgRpmGroupTagsFilterView.h" 106 #include "YQPkgSearchFilterView.h" 107 #include "YQPkgServiceFilterView.h" 108 #include "YQPkgStatusFilterView.h" 109 #include "YQPkgTechnicalDetailsView.h" 110 #include "YQPkgTextDialog.h" 111 #include "YQPkgUpdateProblemFilterView.h" 112 #include "YQPkgVersionsView.h" 114 #include "zypp/SysContent.h" 115 #include "zypp/base/String.h" 116 #include "zypp/base/Sysconfig.h" 118 #include "QY2ComboTabWidget.h" 119 #include "YQDialog.h" 120 #include "YQApplication.h" 133 #define DEFAULT_EXPORT_FILE_NAME "user-packages.xml" 134 #define FAST_SOLVER 1 136 #define SETTINGS_DIR "YaST2" 137 #define PATH_TO_YAST_SYSCONFIG "/etc/sysconfig/yast2" 138 #define OPTION_VERIFY "PKGMGR_VERIFY_SYSTEM" 139 #define OPTION_AUTO_CHECK "PKGMGR_AUTO_CHECK" 140 #define OPTION_RECOMMENDED "PKGMGR_RECOMMENDED" 142 YQPackageSelector::YQPackageSelector( YWidget * parent,
146 _showChangesDialog =
true;
147 _autoDependenciesAction = 0;
151 _packageKitGroupsFilterView = 0;
152 _patchFilterView = 0;
155 _pkgChangeLogView = 0;
156 _pkgDependenciesView = 0;
157 _pkgDescriptionView = 0;
158 _pkgFileListView = 0;
160 _pkgTechnicalDetailsView = 0;
161 _pkgVersionsView = 0;
163 _serviceFilterView = 0;
164 _rpmGroupTagsFilterView = 0;
165 _searchFilterView = 0;
166 _statusFilterView = 0;
167 _updateProblemFilterView = 0;
168 _excludeDevelPkgs = 0;
169 _excludeDebugInfoPkgs = 0;
171 yuiMilestone() <<
"This is libyui-qt-pkg " << VERSION << std::endl;
173 if ( onlineUpdateMode() ) yuiMilestone() <<
"Online update mode" << std::endl;
174 if ( updateMode() ) yuiMilestone() <<
"Update mode" << std::endl;
182 _filters->loadSettings();
183 bool pagesRestored = _filters->tabCount() > 0;
188 if ( ! pagesRestored )
190 yuiDebug() <<
"No page configuration saved, using fallbacks" << std::endl;
196 if ( _searchFilterView ) _filters->showPage( _searchFilterView );
198 if ( ! searchMode() && ! summaryMode()
199 && _patternList ) _filters->showPage( _patternList );
200 else if ( _rpmGroupTagsFilterView ) _filters->showPage( _rpmGroupTagsFilterView );
202 if ( _statusFilterView ) _filters->showPage( _statusFilterView );
210 if ( _patchFilterView && onlineUpdateMode() )
212 if ( _patchFilterView && _patchList )
214 _filters->showPage( _patchFilterView );
215 _patchList->filter();
218 else if ( _repoFilterView && repoMode() )
222 _filters->showPage( _repoFilterView );
223 _repoFilterView->filter();
226 else if ( _updateProblemFilterView )
228 _filters->showPage( _updateProblemFilterView );
229 _updateProblemFilterView->filter();
231 else if ( searchMode() && _searchFilterView )
233 _filters->showPage( _searchFilterView );
234 _searchFilterView->filter();
235 QTimer::singleShot( 0, _searchFilterView, SLOT( setFocus() ) );
237 else if ( summaryMode() && _statusFilterView )
239 _filters->showPage( _statusFilterView );
240 _statusFilterView->filter();
241 _pkgList->selectNextItem();
243 else if ( _patternList )
245 _filters->showPage( _patternList );
246 _patternList->filter();
250 if ( _filters->diskUsageList() )
251 _filters->diskUsageList()->updateDiskUsage();
253 yuiMilestone() <<
"PackageSelector init done" << std::endl;
256 #if CHECK_DEPENDENCIES_ON_STARTUP 262 QTimer::singleShot( 0,
this, SLOT( resolveDependencies() ) );
274 #define PREFIX "/usr/" 275 return zypp::str::form(
"%s/share/icons/hicolor/%dx%d/apps/%s.png",
276 PREFIX, size, size, name.c_str() );
281 YQPackageSelector::basicLayout()
283 QVBoxLayout *layout =
new QVBoxLayout();
285 layout->setContentsMargins( MARGIN,
289 layout->setSpacing( SPACING_BELOW_MENU_BAR );
290 layoutMenuBar(
this );
292 QString settingsName =
"YQPackageSelector";
294 if ( onlineUpdateMode() ) settingsName =
"YQOnlineUpdate";
295 if ( updateMode() ) settingsName =
"YQSystemUpdate";
298 YUI_CHECK_NEW( _filters );
300 layout->addWidget( _filters );
301 layoutFilters(
this );
302 layoutRightPane( _filters->
rightPane() );
307 YQPackageSelector::layoutFilters( QWidget *parent )
319 YUI_CHECK_NEW( _updateProblemFilterView );
320 _filters->
addPage( _(
"&Update Problems" ), _updateProblemFilterView,
"update_problems" );
329 if ( onlineUpdateMode()
330 #
if ALWAYS_SHOW_PATCHES_VIEW_IF_PATCHES_AVAILABLE
331 || ! zyppPool().empty<zypp::Patch>()
343 if ( ! zyppPool().empty<zypp::Pattern>() || testMode() )
346 YUI_CHECK_NEW( _patternList );
347 _filters->
addPage( _(
"Patter&ns" ), _patternList,
"patterns" );
349 connect( _patternList, SIGNAL( statusChanged() ),
352 connect(
this, SIGNAL(
refresh() ),
353 _patternList, SLOT ( updateItemStates() ) );
355 if ( _pkgConflictDialog )
357 connect( _pkgConflictDialog, SIGNAL( updatePackages() ),
358 _patternList, SLOT ( updateItemStates() ) );
368 YUI_CHECK_NEW( _packageKitGroupsFilterView );
369 _filters->
addPage( _(
"Package &Groups" ), _packageKitGroupsFilterView,
"package_groups" );
371 connect(
this, SIGNAL(
loadData() ),
372 _packageKitGroupsFilterView, SLOT ( filter() ) );
380 YUI_CHECK_NEW( _rpmGroupTagsFilterView );
381 _filters->
addPage( _(
"&RPM Groups" ), _rpmGroupTagsFilterView,
"rpm_groups" );
383 connect(
this, SIGNAL(
loadData() ),
384 _rpmGroupTagsFilterView, SLOT ( filter() ) );
392 YUI_CHECK_NEW( _langList );
394 _filters->
addPage( _(
"&Languages" ), _langList,
"languages" );
395 _langList->setSizePolicy( QSizePolicy( QSizePolicy::Ignored, QSizePolicy::Ignored ) );
397 connect( _langList, SIGNAL( statusChanged() ),
400 connect(
this, SIGNAL(
refresh() ),
401 _langList, SLOT ( updateItemStates() ) );
409 YUI_CHECK_NEW( _repoFilterView );
410 _filters->
addPage( _(
"&Repositories" ), _repoFilterView,
"repos" );
422 YUI_CHECK_NEW( _serviceFilterView );
425 _filters->
addPage( _(
"&Services" ), _serviceFilterView,
"services" );
433 YUI_CHECK_NEW( _searchFilterView );
434 _filters->
addPage( _(
"S&earch" ), _searchFilterView,
"search" );
441 _filters->
addPage( _(
"&Keywords" ),
new QLabel(
"Keywords\nfilter\n\nfor future use",
this ),
"keywords" );
449 YUI_CHECK_NEW( _statusFilterView );
450 _filters->
addPage( _(
"&Installation Summary" ), _statusFilterView,
"inst_summary" );
454 YQPackageSelector::~YQPackageSelector()
460 YQPackageSelector::layoutRightPane( QWidget *parent )
462 QVBoxLayout *layout =
new QVBoxLayout( parent );
463 YUI_CHECK_NEW( layout );
464 layout->setContentsMargins( SPLITTER_HALF_SPACING,
469 QSplitter * splitter =
new QSplitter( Qt::Vertical, parent );
470 YUI_CHECK_NEW( splitter );
471 layout->addWidget(splitter);
473 layoutPkgList( splitter );
474 layoutDetailsViews( splitter );
475 layoutButtons( parent );
482 YQPackageSelector::layoutPkgList( QWidget *parent )
486 QWidget *_notificationsContainer =
new QWidget(parent);
487 QVBoxLayout *layout =
new QVBoxLayout(_notificationsContainer);
489 _repoUpgradingLabel =
new QLabel(_notificationsContainer);
490 _repoUpgradingLabel->setTextFormat(Qt::RichText);
491 _repoUpgradingLabel->setWordWrap(
true);
492 _repoUpgradingLabel->setVisible(
false);
494 _repoUpgradeLabel =
new QLabel(_notificationsContainer);
495 _repoUpgradeLabel->setTextFormat(Qt::RichText);
496 _repoUpgradeLabel->setWordWrap(
true);
497 _repoUpgradeLabel->setVisible(
false);
498 _repoUpgradeLabel->setObjectName(
"RepoUpgradeLabel");
500 layout->addWidget(_repoUpgradingLabel);
501 layout->addWidget(_repoUpgradeLabel);
507 connect( _repoUpgradeLabel, SIGNAL( linkActivated ( QString ) ),
510 connect(_repoUpgradingLabel, SIGNAL( linkActivated( QString ) ),
516 YUI_CHECK_NEW( _pkgList );
518 connect( _pkgList, SIGNAL( statusChanged() ),
523 YQPackageSelector::layoutDetailsViews( QWidget *parent )
528 _detailsViews =
new QTabWidget( parent );
529 YUI_CHECK_NEW( _detailsViews );
536 YUI_CHECK_NEW( _pkgDescriptionView );
538 _detailsViews->addTab( _pkgDescriptionView, _(
"D&escription" ) );
539 _detailsViews->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
541 connect( _pkgList, SIGNAL( currentItemChanged ( ZyppSel ) ),
542 _pkgDescriptionView, SLOT ( showDetailsIfVisible( ZyppSel ) ) );
549 YUI_CHECK_NEW( _pkgTechnicalDetailsView );
551 _detailsViews->addTab( _pkgTechnicalDetailsView, _(
"&Technical Data" ) );
553 connect( _pkgList, SIGNAL( currentItemChanged ( ZyppSel ) ),
554 _pkgTechnicalDetailsView, SLOT ( showDetailsIfVisible( ZyppSel ) ) );
562 YUI_CHECK_NEW( _pkgDependenciesView );
564 _detailsViews->addTab( _pkgDependenciesView, _(
"Dependencies" ) );
565 _detailsViews->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
567 connect( _pkgList, SIGNAL( currentItemChanged ( ZyppSel ) ),
568 _pkgDependenciesView, SLOT ( showDetailsIfVisible( ZyppSel ) ) );
577 YUI_CHECK_NEW( _pkgVersionsView );
579 _detailsViews->addTab( _pkgVersionsView, _(
"&Versions" ) );
581 connect( _pkgList, SIGNAL( currentItemChanged ( ZyppSel ) ),
582 _pkgVersionsView, SLOT ( showDetailsIfVisible( ZyppSel ) ) );
584 connect( _pkgList, SIGNAL( statusChanged() ),
585 _pkgVersionsView, SIGNAL( statusChanged() ) );
592 if ( haveInstalledPkgs )
595 YUI_CHECK_NEW( _pkgFileListView );
597 _detailsViews->addTab( _pkgFileListView, _(
"File List" ) );
598 _detailsViews->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
600 connect( _pkgList, SIGNAL( currentItemChanged ( ZyppSel ) ),
601 _pkgFileListView, SLOT ( showDetailsIfVisible( ZyppSel ) ) );
609 if ( haveInstalledPkgs )
612 YUI_CHECK_NEW( _pkgChangeLogView );
614 _detailsViews->addTab( _pkgChangeLogView, _(
"Change Log" ) );
615 _detailsViews->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
617 connect( _pkgList, SIGNAL( currentItemChanged ( ZyppSel ) ),
618 _pkgChangeLogView, SLOT ( showDetailsIfVisible( ZyppSel ) ) );
624 YQPackageSelector::layoutButtons( QWidget *parent )
626 QWidget * button_box =
new QWidget( parent );
627 YUI_CHECK_NEW( button_box );
628 parent->layout()->addWidget( button_box );
630 QHBoxLayout * layout =
new QHBoxLayout( button_box );
631 YUI_CHECK_NEW( layout );
633 button_box->setLayout( layout );
634 layout->setContentsMargins( 2,
639 layout->addStretch();
641 QPushButton * cancel_button =
new QPushButton( _(
"&Cancel" ), button_box );
642 YUI_CHECK_NEW( cancel_button );
643 layout->addWidget(cancel_button);
645 cancel_button->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) );
647 connect( cancel_button, SIGNAL( clicked() ),
648 this, SLOT (
reject() ) );
651 QPushButton * accept_button =
new QPushButton( _(
"&Accept" ), button_box );
652 YUI_CHECK_NEW( accept_button );
653 layout->addWidget(accept_button);
654 accept_button->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) );
656 connect( accept_button, SIGNAL( clicked() ),
657 this, SLOT (
accept() ) );
659 button_box->setFixedHeight( button_box->sizeHint().height() );
664 YQPackageSelector::layoutMenuBar( QWidget *parent )
666 _menuBar =
new QMenuBar( parent );
667 YUI_CHECK_NEW( _menuBar );
668 parent->layout()->addWidget(_menuBar);
691 _fileMenu =
new QMenu( _menuBar );
692 YUI_CHECK_NEW( _fileMenu );
693 QAction * action = _menuBar->addMenu( _fileMenu );
694 action->setText( _(
"&File" ));
696 _fileMenu->addAction( _(
"&Import..." ),
this, SLOT(
pkgImport() ) );
697 _fileMenu->addAction( _(
"&Export..." ),
this, SLOT(
pkgExport() ) );
699 _fileMenu->addSeparator();
701 _fileMenu->addAction( _(
"E&xit -- Discard Changes" ),
this, SLOT(
reject() ) );
702 _fileMenu->addAction( _(
"&Quit -- Save Changes" ),
this, SLOT(
accept() ) );
711 _pkgMenu =
new QMenu( _menuBar );
712 YUI_CHECK_NEW( _pkgMenu );
713 action = _menuBar->addMenu( _pkgMenu );
714 action->setText(_(
"&Package" ));
716 _pkgMenu->addAction(_pkgList->actionSetCurrentInstall);
717 _pkgMenu->addAction(_pkgList->actionSetCurrentDontInstall);
718 _pkgMenu->addAction(_pkgList->actionSetCurrentKeepInstalled);
719 _pkgMenu->addAction(_pkgList->actionSetCurrentDelete);
720 _pkgMenu->addAction(_pkgList->actionSetCurrentUpdate);
721 _pkgMenu->addAction(_pkgList->actionSetCurrentUpdateForce);
722 _pkgMenu->addAction(_pkgList->actionSetCurrentTaboo);
723 _pkgMenu->addAction(_pkgList->actionShowCurrentSolverInfo);
725 #if ENABLE_SOURCE_RPMS 726 _pkgMenu->addSeparator();
728 _pkgMenu->addAction(_pkgList->actionInstallSourceRpm);
729 _pkgMenu->addAction(_pkgList->actionDontInstallSourceRpm);
732 _pkgMenu->addSeparator();
734 YUI_CHECK_NEW( submenu );
736 #if ENABLE_SOURCE_RPMS 737 submenu->addSeparator();
739 _pkgMenu->addAction(_pkgList->actionInstallListSourceRpms);
740 _pkgMenu->addAction(_pkgList->actionDontInstallListSourceRpms);
747 submenu =
new QMenu( _pkgMenu );
748 YUI_CHECK_NEW( submenu );
753 action = _pkgMenu->addMenu( submenu );
754 action->setText(_(
"All Packages" ));
756 submenu->addAction( _(
"Update if newer version available" ),
759 submenu->addAction( _(
"Update unconditionally" ),
770 _patchMenu =
new QMenu( _menuBar );
771 YUI_CHECK_NEW( _patchMenu );
772 action = _menuBar->addMenu( _patchMenu );
773 action->setText(_(
"&Patch" ));
775 _patchMenu->addAction(_patchList->actionSetCurrentInstall);
776 _patchMenu->addAction(_patchList->actionSetCurrentDontInstall);
777 _patchMenu->addAction(_patchList->actionSetCurrentKeepInstalled);
779 #if ENABLE_DELETING_PATCHES 780 _patchMenu->addAction(_patchList->actionSetCurrentDelete);
782 _patchMenu->addAction(_patchList->actionSetCurrentUpdate);
783 _patchMenu->addAction(_patchList->actionSetCurrentUpdateForce);
784 _patchMenu->addAction(_patchList->actionSetCurrentTaboo);
786 _patchMenu->addSeparator();
795 if ( repoMgrEnabled() )
797 _configMenu =
new QMenu( _menuBar );
798 YUI_CHECK_NEW( _configMenu );
799 action = _menuBar->addMenu( _configMenu );
800 action->setText(_(
"Confi&guration" ));
801 _configMenu->addAction( _(
"&Repositories..." ),
this, SLOT(
repoManager() ), Qt::CTRL + Qt::Key_R );
809 _dependencyMenu =
new QMenu( _menuBar );
810 YUI_CHECK_NEW( _dependencyMenu );
811 action = _menuBar->addMenu( _dependencyMenu );
812 action->setText(_(
"&Dependencies" ));
816 _autoDependenciesAction =
new QAction( _(
"&Autocheck" ),
this );
817 _autoDependenciesAction->setCheckable(
true );
818 _dependencyMenu->addAction( _autoDependenciesAction );
820 _installRecommendedAction = _dependencyMenu->addAction(
821 _(
"Install &Recommended Packages"),
822 this, SLOT (pkgInstallRecommendedChanged(
bool)));
823 _installRecommendedAction->setCheckable(
true );
830 _optionsMenu =
new QMenu( _menuBar );
831 YUI_CHECK_NEW( _optionsMenu );
832 action = _menuBar->addMenu( _optionsMenu );
834 action->setText(_(
"&Options" ));
837 _showDevelAction = _optionsMenu->addAction( _(
"Show -de&vel Packages" ),
838 this, SLOT( pkgExcludeDevelChanged(
bool ) ), Qt::Key_F7 );
839 _showDevelAction->setCheckable(
true);
841 _excludeDevelPkgs =
new YQPkgObjList::ExcludeRule( _pkgList, QRegExp(
".*(\\d+bit)?-devel(-\\d+bit)?$" ), _pkgList->nameCol() );
842 YUI_CHECK_NEW( _excludeDevelPkgs );
843 _excludeDevelPkgs->
enable(
false );
846 _showDebugAction = _optionsMenu->addAction( _(
"Show -&debuginfo/-debugsource Packages" ),
848 _showDebugAction->setCheckable(
true);
849 _excludeDebugInfoPkgs =
new YQPkgObjList::ExcludeRule( _pkgList, QRegExp(
".*(-\\d+bit)?-(debuginfo|debugsource)(-32bit)?$" ), _pkgList->nameCol() );
850 YUI_CHECK_NEW( _excludeDebugInfoPkgs );
851 _excludeDebugInfoPkgs->
enable(
false );
854 _verifySystemModeAction = _optionsMenu->addAction( _(
"&System Verification Mode" ),
855 this, SLOT( pkgVerifySytemModeChanged(
bool ) ) );
856 _verifySystemModeAction->setCheckable(
true);
859 _cleanDepsOnRemoveAction = _optionsMenu->addAction( _(
"&Cleanup when deleting packages" ),
860 this, SLOT( pkgCleanDepsOnRemoveChanged(
bool ) ) );
861 _cleanDepsOnRemoveAction->setCheckable(
true);
863 _allowVendorChangeAction = _optionsMenu->addAction( _(
"&Allow vendor change" ),
864 this, SLOT( pkgAllowVendorChangeChanged(
bool ) ) );
865 _allowVendorChangeAction->setCheckable(
true);
873 _extrasMenu =
new QMenu( _menuBar );
874 YUI_CHECK_NEW( _extrasMenu );
875 action = _menuBar->addMenu( _extrasMenu );
876 action->setText(_(
"E&xtras" ));
878 _extrasMenu->addAction( _(
"Show &Products" ),
this, SLOT(
showProducts() ) );
879 _extrasMenu->addAction( _(
"Show P&ackage Changes" ),
this, SLOT(
showAutoPkgList() ), Qt::CTRL + Qt::Key_A );
880 _extrasMenu->addAction( _(
"Show &History" ),
this, SLOT(
showHistory() ) );
882 _extrasMenu->addSeparator();
884 #if BRAINDEAD_LIB_NAMING_SCHEME 888 _extrasMenu->addAction( _(
"Install All Matching -&devel Packages" ),
this, SLOT(
installDevelPkgs() ) );
892 _extrasMenu->addAction( _(
"Install All Matching -de&buginfo Packages" ),
this, SLOT(
installDebugInfoPkgs() ) );
895 _extrasMenu->addAction( _(
"Install All Matching -debug&source Packages" ),
this, SLOT(
installDebugSourcePkgs() ) );
897 _extrasMenu->addAction( _(
"Install All Matching &Recommended Packages" ),
900 _extrasMenu->addSeparator();
902 if ( _pkgConflictDialog )
903 _extrasMenu->addAction( _(
"Generate Dependency Resolver &Test Case" ),
904 _pkgConflictDialog, SLOT( askCreateSolverTestCase() ) );
906 if ( _actionResetIgnoredDependencyProblems )
907 _extrasMenu->addAction(_actionResetIgnoredDependencyProblems);
911 _extrasMenu->addAction(_patchList->actionShowRawPatchInfo);
919 _helpMenu =
new QMenu( _menuBar );
920 YUI_CHECK_NEW( _helpMenu );
921 _menuBar->addSeparator();
922 action = _menuBar->addMenu( _helpMenu );
923 action->setText(_(
"&Help" ));
929 _helpMenu->addAction( _(
"&Overview" ),
this, SLOT(
help() ), Qt::Key_F1 );
932 _helpMenu->addAction( _(
"&Symbols" ),
this, SLOT(
symbolHelp() ), Qt::SHIFT + Qt::Key_F1 );
935 _helpMenu->addAction( _(
"&Keys" ),
this, SLOT(
keyboardHelp() ) );
942 bool hasUpdateSignal )
944 if ( ! filter )
return;
945 if ( ! pkgList )
return;
949 connect( _filters, SIGNAL( currentChanged(QWidget *) ),
950 filter, SLOT ( filterIfVisible() ) );
953 connect(
this, SIGNAL(
refresh() ),
954 filter, SLOT ( filterIfVisible() ) );
956 connect( filter, SIGNAL( filterStart() ),
957 pkgList, SLOT ( clear() ) );
959 connect( filter, SIGNAL( filterStart() ),
962 connect( filter, SIGNAL( filterMatch( ZyppSel, ZyppPkg ) ),
963 pkgList, SLOT ( addPkgItem ( ZyppSel, ZyppPkg ) ) );
965 connect( filter, SIGNAL( filterFinished() ),
966 pkgList, SLOT ( resort() ) );
968 connect( filter, SIGNAL( filterFinished() ),
969 pkgList, SLOT ( selectSomething() ) );
971 connect( filter, SIGNAL( filterFinished() ),
972 pkgList, SLOT ( logExcludeStatistics() ) );
974 connect( filter, SIGNAL( filterFinished() ),
975 pkgList, SLOT ( setFocus() ) );
977 connect( filter, SIGNAL( filterFinished() ),
983 connect( filter, SIGNAL( updatePackages() ),
984 pkgList, SLOT ( updateItemStates() ) );
988 connect( filter, SIGNAL( updatePackages() ),
1003 connectFilter( _packageKitGroupsFilterView, _pkgList,
false );
1011 if ( _searchFilterView && _pkgList )
1013 connect( _searchFilterView, SIGNAL( message(
const QString & ) ),
1014 _pkgList, SLOT ( message(
const QString & ) ) );
1017 if ( _repoFilterView && _pkgList )
1019 connect( _repoFilterView, SIGNAL( filterNearMatch ( ZyppSel, ZyppPkg ) ),
1020 _pkgList, SLOT ( addPkgItemDimmed ( ZyppSel, ZyppPkg ) ) );
1023 if ( _serviceFilterView && _pkgList )
1025 connect( _serviceFilterView, SIGNAL( filterNearMatch ( ZyppSel, ZyppPkg ) ),
1026 _pkgList, SLOT ( addPkgItemDimmed ( ZyppSel, ZyppPkg ) ) );
1032 connect( _pkgList, SIGNAL( statusChanged() ),
1044 if ( _pkgConflictDialog )
1048 connect( _pkgConflictDialog, SIGNAL( updatePackages() ),
1049 _pkgList, SLOT ( updateItemStates() ) );
1054 connect( _pkgConflictDialog, SIGNAL( updatePackages() ),
1055 _patternList, SLOT ( updateItemStates() ) );
1061 connect( _pkgConflictDialog, SIGNAL( updatePackages() ),
1071 if ( _pkgVersionsView && _pkgList )
1073 connect( _pkgVersionsView, SIGNAL( candidateChanged( ZyppObj ) ),
1074 _pkgList, SLOT ( updateItemData() ) );
1076 connect( _pkgVersionsView, SIGNAL( statusChanged() ),
1077 _pkgList, SLOT ( updateItemData() ) );
1086 YUI_CHECK_NEW( accel );
1092 if ( _pkgMenu && _pkgList )
1094 connect( _pkgMenu, SIGNAL( aboutToShow() ),
1095 _pkgList, SLOT ( updateActions() ) );
1098 if ( _patchMenu && _patchList )
1100 connect( _patchMenu, SIGNAL( aboutToShow() ),
1101 _patchList, SLOT ( updateActions() ) );
1109 if ( _autoDependenciesAction && ! _autoDependenciesAction->isChecked() )
1119 if ( ! _pkgConflictDialog )
1121 yuiError() <<
"No package conflict dialog existing" << std::endl;
1122 return QDialog::Accepted;
1129 #if DEPENDENCY_FEEDBACK_IF_OK 1131 if ( result == QDialog::Accepted )
1133 QMessageBox::information(
this,
"",
1134 _(
"All package dependencies are OK." ),
1146 if ( ! _patchFilterView )
1149 YUI_CHECK_NEW( _patchFilterView );
1150 _filters->
addPage( _(
"P&atches" ), _patchFilterView,
"patches" );
1152 _patchList = _patchFilterView->
patchList();
1153 YUI_CHECK_PTR( _patchList );
1163 if ( ! _patchFilterView )
1165 yuiMilestone() <<
"Activating patches filter view" << std::endl;
1170 _filters->
showPage( _patchFilterView );
1176 _filters->
showPage( _patchFilterView );
1184 if ( _pkgList && _patchList )
1188 connect( _patchList, SIGNAL( filterMatch (
const QString &,
const QString &, FSize ) ),
1189 _pkgList, SLOT ( addPassiveItem(
const QString &,
const QString &, FSize ) ) );
1191 connect( _patchList, SIGNAL( statusChanged() ),
1194 if ( _pkgConflictDialog )
1196 connect( _pkgConflictDialog,SIGNAL( updatePackages() ),
1197 _patchList, SLOT ( updateItemStates() ) );
1200 connect(
this, SIGNAL(
refresh() ),
1201 _patchList, SLOT ( updateItemStates() ) );
1210 QString filename = YQApplication::askForSaveFileName( QString( DEFAULT_EXPORT_FILE_NAME ),
1211 QString(
"*.xml;;*" ),
1212 _(
"Save Package List" ) );
1214 if ( ! filename.isEmpty() )
1216 zypp::syscontent::Writer writer;
1217 const zypp::ResPool & pool = zypp::getZYpp()->pool();
1221 for_each( pool.begin(), pool.end(),
1222 boost::bind( &zypp::syscontent::Writer::addIf,
1223 boost::ref( writer ),
1235 std::ofstream exportFile( toUTF8( filename ).c_str() );
1236 exportFile.exceptions( std::ios_base::badbit | std::ios_base::failbit );
1237 exportFile << writer;
1239 yuiMilestone() <<
"Package list exported to " << filename << std::endl;
1241 catch ( std::exception & exception )
1243 yuiWarning() <<
"Error exporting package list to " << filename << std::endl;
1247 QFile::remove(filename);
1250 QMessageBox::warning(
this,
1252 _(
"Error exporting package list to %1" ).arg( filename ),
1253 QMessageBox::Ok | QMessageBox::Default,
1264 QString filename = QFileDialog::getOpenFileName(
this, _(
"Load Package List" ), DEFAULT_EXPORT_FILE_NAME,
1268 if ( ! filename.isEmpty() )
1270 yuiMilestone() <<
"Importing package list from " << filename << std::endl;
1274 std::ifstream importFile( toUTF8( filename ).c_str() );
1275 zypp::syscontent::Reader reader( importFile );
1281 typedef zypp::syscontent::Reader::Entry ZyppReaderEntry;
1282 typedef std::pair<string, ZyppReaderEntry> ImportMapPair;
1284 map<string, ZyppReaderEntry> importPkg;
1285 map<string, ZyppReaderEntry> importPatterns;
1287 for ( zypp::syscontent::Reader::const_iterator it = reader.begin();
1291 string kind = it->kind();
1293 if ( kind ==
"package" ) importPkg.insert ( ImportMapPair( it->name(), *it ) );
1294 else if ( kind ==
"pattern" ) importPatterns.insert( ImportMapPair( it->name(), *it ) );
1297 yuiDebug() <<
"Found " << importPkg.size()
1298 <<
" packages and " << importPatterns.size()
1299 <<
" patterns in " << filename
1307 for ( ZyppPoolIterator it = zyppPatternsBegin();
1308 it != zyppPatternsEnd();
1311 ZyppSel selectable = *it;
1312 importSelectable( *it, importPatterns.find( selectable->name() ) != importPatterns.end(),
"pattern" );
1315 for ( ZyppPoolIterator it = zyppPkgBegin();
1319 ZyppSel selectable = *it;
1320 importSelectable( *it, importPkg.find( selectable->name() ) != importPkg.end(),
"package" );
1330 if ( _statusFilterView )
1334 _filters->
showPage( _statusFilterView );
1335 _statusFilterView->
filter();
1339 catch (
const zypp::Exception & exception )
1341 yuiWarning() <<
"Error reading package list from " << filename << std::endl;
1344 QMessageBox::warning(
this,
1346 _(
"Error loading package list from %1" ).arg( filename ),
1347 QMessageBox::Ok | QMessageBox::Default,
1348 QMessageBox::NoButton,
1349 QMessageBox::NoButton );
1360 ZyppStatus oldStatus = selectable->status();
1361 ZyppStatus newStatus = oldStatus;
1369 switch ( oldStatus )
1373 case S_KeepInstalled:
1377 newStatus = oldStatus;
1382 newStatus = S_KeepInstalled;
1383 yuiDebug() <<
"Keeping " << kind <<
" " << selectable->name() << std::endl;
1389 if ( selectable->hasCandidateObj() )
1391 newStatus = S_Install;
1392 yuiDebug() <<
"Adding " << kind <<
" " << selectable->name() << std::endl;
1396 yuiDebug() <<
"Can't add " << kind <<
" " << selectable->name()
1397 <<
": No candidate" << std::endl;
1408 switch ( oldStatus )
1412 case S_KeepInstalled:
1417 yuiDebug() <<
"Deleting " << kind <<
" " << selectable->name() << std::endl;
1424 newStatus = oldStatus;
1429 if ( oldStatus != newStatus )
1430 selectable->setStatus( newStatus );
1442 yuiMilestone() << count <<
" pkgs found for update" << std::endl;
1444 if ( count >= GLOBAL_UPDATE_CONFIRMATION_THRESHOLD )
1446 if ( QMessageBox::question(
this,
"",
1448 _(
"%1 packages will be updated" ).arg( count ),
1449 _(
"&Continue" ), _(
"C&ancel" ),
1461 if ( _statusFilterView )
1463 _filters->
showPage( _statusFilterView );
1464 _statusFilterView->
clear();
1466 _statusFilterView->
filter();
1473 zypp::ResPool::repository_iterator it;
1474 _repoUpgradeLabel->setText(
"");
1475 _repoUpgradingLabel->setText(
"");
1479 for ( it = zypp::getZYpp()->pool().knownRepositoriesBegin();
1480 it != zypp::getZYpp()->pool().knownRepositoriesEnd();
1483 zypp::Repository repo(*it);
1486 if ( zypp::getZYpp()->resolver()->upgradingRepo(repo) )
1488 _repoUpgradingLabel->setText(_repoUpgradingLabel->text() + _(
"<p><small><a href=\"repoupgraderemove:///%1\">Cancel switching</a> system packages to versions in repository %2</small></p>")
1489 .arg(fromUTF8(repo.alias().c_str()))
1490 .arg(fromUTF8(repo.name().c_str()))
1495 for ( it = zypp::getZYpp()->pool().knownRepositoriesBegin();
1496 it != zypp::getZYpp()->pool().knownRepositoriesEnd();
1499 zypp::Repository repo(*it);
1503 if ( ! zypp::getZYpp()->resolver()->upgradingRepo(repo) &&
1504 ! repo.isSystemRepo() &&
1507 _repoUpgradeLabel->setText(_repoUpgradeLabel->text() + _(
"<p><a href=\"repoupgradeadd:///%1\">Switch system packages</a> to the versions in this repository (%2)</p>")
1508 .arg(fromUTF8(repo.alias().c_str()))
1509 .arg(fromUTF8(repo.name().c_str()))
1513 _repoUpgradeLabel->setVisible(!_repoUpgradeLabel->text().isEmpty() &&
1514 _repoFilterView->isVisible() );
1515 _repoUpgradingLabel->setVisible(!_repoUpgradingLabel->text().isEmpty());
1521 yuiDebug() <<
"link " << link <<
" clicked on label" << std::endl;
1524 if (url.scheme() ==
"repoupgradeadd")
1526 yuiDebug() <<
"looking for repo " << url.path() << std::endl;
1527 std::string alias(url.path().remove(0,1).toStdString());
1528 zypp::Repository repo(zypp::getZYpp()->pool().reposFind(alias));
1529 yuiDebug() << repo << std::endl;
1531 if ( repo != zypp::Repository::noRepository )
1532 zypp::getZYpp()->resolver()->addUpgradeRepo(repo);
1534 else if (url.scheme() ==
"repoupgraderemove")
1536 std::string alias(url.path().remove(0,1).toStdString());
1537 zypp::Repository repo(zypp::getZYpp()->pool().reposFind(alias));
1539 if ( repo != zypp::Repository::noRepository )
1540 zypp::getZYpp()->resolver()->removeUpgradeRepo(repo);
1543 yuiDebug() <<
"unknown link operation " << url.scheme() << std::endl;
1586 zypp::getZYpp()->resolver()->setIgnoreAlreadyRecommended(
false );
1589 if ( _filters && _statusFilterView )
1591 _filters->
showPage( _statusFilterView );
1592 _statusFilterView->
filter();
1596 _(
"Added Subpackages:" ),
1599 YQPkgChangesDialog::FilterAutomatic,
1600 YQPkgChangesDialog::OptionNone );
1607 if ( _optionsMenu && _pkgList )
1609 if ( _excludeDebugInfoPkgs )
1610 _excludeDebugInfoPkgs->
enable( ! on );
1618 YQPackageSelector::pkgExcludeDevelChanged(
bool on )
1620 if ( _optionsMenu && _pkgList )
1622 if ( _excludeDevelPkgs )
1623 _excludeDevelPkgs->
enable( ! on );
1631 YQPackageSelector::pkgVerifySytemModeChanged(
bool on )
1633 zypp::getZYpp()->resolver()->setSystemVerification( on );
1637 YQPackageSelector::pkgInstallRecommendedChanged(
bool on )
1639 zypp::getZYpp()->resolver()->setOnlyRequires( !on );
1644 YQPackageSelector::pkgCleanDepsOnRemoveChanged(
bool on )
1646 zypp::getZYpp()->resolver()->setCleandepsOnRemove( on );
1652 YQPackageSelector::pkgAllowVendorChangeChanged(
bool on )
1654 zypp::getZYpp()->resolver()->setAllowVendorChange( on );
1665 QMap<QString, ZyppSel> subPkgs;
1667 for ( ZyppPoolIterator it = zyppPkgBegin();
1671 QString name = (*it)->name().c_str();
1673 if ( name.endsWith( suffix ) || name.endsWith( suffix +
"-32bit" ) )
1675 subPkgs[ name ] = *it;
1677 yuiDebug() <<
"Found subpackage: " << name << std::endl;
1684 for ( ZyppPoolIterator it = zyppPkgBegin();
1688 QString name = (*it)->name().c_str();
1690 if ( subPkgs.contains( name + suffix ) )
1692 QString subPkgName( name + suffix );
1693 ZyppSel subPkg = subPkgs[ subPkgName ];
1695 switch ( (*it)->status() )
1703 yuiMilestone() <<
"Ignoring unwanted subpackage " << subPkgName << std::endl;
1708 case S_KeepInstalled:
1712 if ( ! subPkg->installedObj() )
1714 subPkg->setStatus( S_Install );
1715 yuiMilestone() <<
"Installing subpackage " << subPkgName << std::endl;
1725 if ( ! subPkg->installedObj() )
1727 subPkg->setStatus( S_Install );
1728 yuiMilestone() <<
"Installing subpackage " << subPkgName << std::endl;
1732 subPkg->setStatus( S_Update );
1733 yuiMilestone() <<
"Updating subpackage " << subPkgName << std::endl;
1744 if ( _filters && _statusFilterView )
1746 _filters->
showPage( _statusFilterView );
1747 _statusFilterView->
filter();
1751 _(
"Added Subpackages:" ),
1752 QRegExp(
".*" + suffix +
"$" ),
1755 YQPkgChangesDialog::FilterAutomatic,
1756 YQPkgChangesDialog::OptionNone );
1762 QString settingsName =
"YQPackageSelector";
1763 if ( onlineUpdateMode() ) settingsName =
"YQOnlineUpdate";
1764 if ( updateMode() ) settingsName =
"YQSystemUpdate";
1766 QSettings settings( QSettings::UserScope, SETTINGS_DIR, settingsName );
1768 _showDevelAction->setChecked(settings.value(
"Options/showDevelPackages",
true).toBool());
1769 pkgExcludeDevelChanged(_showDevelAction->isChecked());
1771 _showDebugAction->setChecked(settings.value(
"Options/showDebugPackages",
true).toBool());
1774 loadCommonSettings();
1778 YQPackageSelector::loadCommonSettings()
1780 map<string, string> sysconfig = zypp::base::sysconfig::read(PATH_TO_YAST_SYSCONFIG);
1782 bool auto_check = AUTO_CHECK_DEPENDENCIES_DEFAULT;
1783 auto it = sysconfig.find(OPTION_AUTO_CHECK);
1784 if (it != sysconfig.end())
1786 auto_check = it->second ==
"yes";
1788 _autoDependenciesAction->setChecked(auto_check);
1790 bool verify_system = zypp::getZYpp()->resolver()->systemVerification();
1791 it = sysconfig.find(OPTION_VERIFY);
1792 if (it != sysconfig.end())
1794 verify_system = it->second ==
"yes";
1796 _verifySystemModeAction->setChecked(verify_system);
1797 pkgVerifySytemModeChanged(verify_system);
1799 bool install_recommended = ! zypp::getZYpp()->resolver()->onlyRequires();
1800 it = sysconfig.find(OPTION_RECOMMENDED);
1801 if (it != sysconfig.end())
1803 install_recommended = it->second ==
"yes";
1805 _installRecommendedAction->setChecked(install_recommended);
1806 pkgInstallRecommendedChanged(install_recommended);
1808 bool allow_vendor_change = zypp::getZYpp()->resolver()->allowVendorChange();
1809 _allowVendorChangeAction->setChecked(allow_vendor_change);
1810 pkgAllowVendorChangeChanged(allow_vendor_change);
1812 bool clean_deps_on_remove = zypp::getZYpp()->resolver()->cleandepsOnRemove();
1813 _cleanDepsOnRemoveAction->setChecked(clean_deps_on_remove);
1814 pkgCleanDepsOnRemoveChanged(clean_deps_on_remove);
1820 QString settingsName =
"YQPackageSelector";
1821 if ( onlineUpdateMode() ) settingsName =
"YQOnlineUpdate";
1822 if ( updateMode() ) settingsName =
"YQSystemUpdate";
1824 QSettings settings( QSettings::UserScope, SETTINGS_DIR, settingsName );
1826 settings.setValue(
"Options/showDevelPackages", _showDevelAction->isChecked() );
1827 settings.setValue(
"Options/showDebugPackages", _showDebugAction->isChecked() );
1829 saveCommonSettings();
1833 YQPackageSelector::saveCommonSettings()
1837 zypp::base::sysconfig::writeStringVal(
1838 PATH_TO_YAST_SYSCONFIG,
1840 ( _autoDependenciesAction->isChecked() ?
"yes" :
"no"),
1841 "Automatic dependency checking");
1842 zypp::base::sysconfig::writeStringVal(
1843 PATH_TO_YAST_SYSCONFIG,
1845 (_verifySystemModeAction->isChecked() ?
"yes" :
"no"),
1846 "System verification mode");
1847 zypp::base::sysconfig::writeStringVal(
1848 PATH_TO_YAST_SYSCONFIG,
1850 (_installRecommendedAction->isChecked() ?
"yes" :
"no"),
1851 "Install recommended packages");
1853 catch(
const std::exception &e )
1855 yuiError() <<
"Writing " << PATH_TO_YAST_SYSCONFIG <<
" failed" << std::endl;
1861 YQUI::ui()->busyCursor();
1866 YQUI::ui()->normalCursor();
1870 #include "YQPackageSelector.moc" Display the description of a ZyppObj derived object along with its name and summary.
void onlineUpdateConfiguration()
Close processing and request start of the online update configuration.
void addPatchFilterView()
Add the "Patches" filter view, if it is not already there.
void showPage(QWidget *page)
Show a page.
int globalSetPkgStatus(ZyppStatus newStatus, bool force, bool countOnly)
Set the status of all packages in the pool to a new value.
void loadData()
Emitted once (!) when the dialog is about to be shown, when all widgets are created and all signal/sl...
void globalUpdatePkg()
Set the status of all installed packages (all in the pool, not only those currently displayed in the ...
void connectFilter(QWidget *filter, QWidget *pkgList, bool hasUpdateSignal=true)
Connect a filter view that provides the usual signals with a package list.
void addPage(const QString &pageLabel, QWidget *pageContent, const QString &internalName)
Add a page with a user-visible "pageLabel", a widget with the page content and an internal name (or I...
void normalCursor()
Show the standard cursor (arrow)
zypp::Repository selectedRepo() const
Current selected repository, or if nothing is selected.
Filter view for PackageKit groups.
static bool any_service()
Is any enabled libzypp service present?
static int countEnabledRepositories()
Returns the number of enabled repositories.
YQPkgPatchList * patchList() const
Returns this view's selections list.
void showProducts()
Show all products in a popup dialog.
void busyCursor()
Show the busy cursor (clock)
Filter view for packages that made problems during update.
void filter()
Filter according to the view's rules and current selection.
Widget for "tabbed browsing" in packages:
static bool haveInstalledPkgs()
Returns 'true' if there are any installed packages.
void importSelectable(ZyppSel selectable, bool isWanted, const char *kind)
Import one selectable: Set its status according to 'isWanted' based on its old status.
void updateRepositoryUpgradeLabel()
hides or shows the repository upgrade message
YQPkgDiskUsageList * diskUsageList() const
Return the disk usage list widget or 0 if there is none.
QWidget * rightPane() const
Return the right pane.
void currentChanged(QWidget *newPageContent)
Emitted when the current page changes.
void saveSettings()
saves settings of the checkboxes in the option menu
int manualResolvePackageDependencies()
Resolve package dependencies manually.
void keyboardHelp()
Display online help about magic keys.
void enable(bool enable=true)
Enable or disable this exclude rule.
void accept()
Close processing and accept changes.
Display a list of zypp::Patch objects and ( below ) details about the currently selected patch...
void slotRepoUpgradeLabelLinkClicked(const QString &link)
a link in the repo upgrade label was clicked
void repoManager()
Close processing and request start of the repository manager.
Display a pkg's file list.
static std::string iconPath(const std::string &name, int size)
returns the full path for an icon of a given size
Display a list of zypp::Package objects.
Display a list of zypp::Pattern objects.
Filter view for searching within packages.
void symbolHelp()
Display online help about symbols (package status icons).
void installDebugInfoPkgs()
Install available -debuginfo packages for packages that are installed or marked for installation...
void connectPatchList()
Connect the patch list.
Display technical details (very much like 'rpm -qi') for a ZYPP object - the installed instance...
void clear()
Clears the tree-widgets content, resets the optimal column width values.
void pkgExport()
Export all current selection/package states.
void applyExcludeRules()
Apply all exclude rules of this list to all items, including those that are currently excluded...
Filter view for packages that made problems during update.
void help()
Display (generic) online help.
Package version selector: Display a list of available versions from all the different installation so...
void autoResolveDependencies()
Automatically resolve package dependencies if desired (if the "auto check" checkbox is on)...
static bool haveProblematicPackages()
Check if there are any problematic packages at all, i.e.
void addMenus()
Add pulldown menus to the menu bar.
Display a list of zypp::Selection objects.
void clear()
Reset all check boxes (set them all to "off")
void installDevelPkgs()
Install any -devel package for packages that are installed or marked for installation.
void loadSettings()
loads settings for the checkboxes in the option menu
static void showHistoryDialog(QWidget *parent=0)
Static convenience method: Post a History dialog for pkg 'pkgName'.
A widget to display a libzypp servic filter view.
static bool showChangesDialog(QWidget *parent, const QString &message, const QString &acceptButtonLabel, const QString &rejectButtonLabel=QString::null, Filters f=FilterAutomatic, Options o=OptionAutoAcceptIfEmpty)
Static convenience method: Post a changes dialog with text 'message', a list of changed packages and ...
void showTransactions()
Set up the check boxes so all pending transactions are displayed.
void refresh()
Emitted when the internal data base might have changed and a refresh of all displayed data might be n...
virtual QMenu * addAllInListSubMenu(QMenu *menu)
Add a submenu "All in this list..." to 'menu'.
void installDebugSourcePkgs()
Install available -debugsource packages for packages that are installed or marked for installation...
virtual QMenu * addAllInListSubMenu(QMenu *menu)
Add a submenu "All in this list..." to 'menu'.
Abstract base class for package selectors.
static void showProductDialog(QWidget *parent=0)
Static convenience method: Post a dialog with all products.
void filter()
Filter according to the view's rules and current selection.
void hotkeyInsertPatchFilterView()
Add the "Patches" filter view upon hotkey (F2).
void installSubPkgs(const QString &suffix)
Install any subpackage that ends with 'suffix' for packages that are installed or marked for installa...
void installRecommendedPkgs()
Install recommended packages for packages that are installed.
void makeConnections()
Establish Qt signal / slot connections.
Display technical details ( very much like 'rpm -qi' ) for a zypp::Package object - the installed ins...
void showHistory()
Show dialog for pkgmgr history.
void showAutoPkgList()
Display a list of automatically selected packages (excluding packages contained in any selections tha...
void pkgImport()
Import selection/package states.
bool reject()
Close processing and abandon changes.
int resolveDependencies()
Resolve dependencies (unconditionally) for all resolvables.
void pkgExcludeDebugChanged(bool on)
Enable or disable the package exclude rules (show or suppress -debuginfo or -devel packages) accordin...
int solveAndShowConflicts()
Run the package dependency solver for the current package set and open the conflict dialog if there a...
void globalUpdatePkgForce()
Set the status of all installed packages (all in the pool, not only those currently displayed in the ...
Display a pkg's file list.