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 56 #include <boost/bind.hpp> 58 #include <QHBoxLayout> 59 #include <QVBoxLayout> 62 #include <QApplication> 65 #include <QFileDialog> 69 #include <QMessageBox> 70 #include <QPushButton> 77 #define YUILogComponent "qt-pkg" 80 #include "QY2LayoutUtils.h" 83 #include "YQPackageSelector.h" 84 #include "YQPkgChangeLogView.h" 85 #include "YQPkgChangesDialog.h" 86 #include "YQPkgConflictDialog.h" 87 #include "YQPkgConflictList.h" 88 #include "YQPkgDependenciesView.h" 89 #include "YQPkgDescriptionView.h" 90 #include "YQPkgDiskUsageList.h" 91 #include "YQPkgDiskUsageWarningDialog.h" 92 #include "YQPkgFileListView.h" 93 #include "YQPkgFilterTab.h" 94 #include "YQPkgHistoryDialog.h" 95 #include "YQPkgLangList.h" 96 #include "YQPkgList.h" 97 #include "YQPkgPackageKitGroupsFilterView.h" 98 #include "YQPkgPatchFilterView.h" 99 #include "YQPkgPatchList.h" 100 #include "YQPkgPatternList.h" 101 #include "YQPkgProductDialog.h" 102 #include "YQPkgRepoFilterView.h" 103 #include "YQPkgRepoList.h" 104 #include "YQPkgRpmGroupTagsFilterView.h" 105 #include "YQPkgSearchFilterView.h" 106 #include "YQPkgStatusFilterView.h" 107 #include "YQPkgTechnicalDetailsView.h" 108 #include "YQPkgTextDialog.h" 109 #include "YQPkgUpdateProblemFilterView.h" 110 #include "YQPkgVersionsView.h" 112 #include "zypp/SysContent.h" 113 #include "zypp/base/String.h" 114 #include "zypp/base/Sysconfig.h" 116 #include "QY2ComboTabWidget.h" 117 #include "YQDialog.h" 118 #include "YQApplication.h" 131 #define DEFAULT_EXPORT_FILE_NAME "user-packages.xml" 132 #define FAST_SOLVER 1 134 #define SETTINGS_DIR "YaST2" 135 #define PATH_TO_YAST_SYSCONFIG "/etc/sysconfig/yast2" 136 #define OPTION_VERIFY "PKGMGR_VERIFY_SYSTEM" 137 #define OPTION_AUTO_CHECK "PKGMGR_AUTO_CHECK" 138 #define OPTION_RECOMMENDED "PKGMGR_RECOMMENDED" 141 YQPackageSelector::YQPackageSelector( YWidget * parent,
145 _showChangesDialog =
true;
146 _autoDependenciesAction = 0;
150 _packageKitGroupsFilterView = 0;
151 _patchFilterView = 0;
154 _pkgChangeLogView = 0;
155 _pkgDependenciesView = 0;
156 _pkgDescriptionView = 0;
157 _pkgFileListView = 0;
159 _pkgTechnicalDetailsView = 0;
160 _pkgVersionsView = 0;
162 _rpmGroupTagsFilterView = 0;
163 _searchFilterView = 0;
164 _statusFilterView = 0;
165 _updateProblemFilterView = 0;
166 _excludeDevelPkgs = 0;
167 _excludeDebugInfoPkgs = 0;
169 yuiMilestone() <<
"This is libyui-qt-pkg " << VERSION << std::endl;
171 if ( onlineUpdateMode() ) yuiMilestone() <<
"Online update mode" << std::endl;
172 if ( updateMode() ) yuiMilestone() <<
"Update mode" << std::endl;
180 _filters->loadSettings();
181 bool pagesRestored = _filters->tabCount() > 0;
186 if ( ! pagesRestored )
188 yuiDebug() <<
"No page configuration saved, using fallbacks" << std::endl;
194 if ( _searchFilterView ) _filters->showPage( _searchFilterView );
196 if ( ! searchMode() && ! summaryMode()
197 && _patternList ) _filters->showPage( _patternList );
198 else if ( _rpmGroupTagsFilterView ) _filters->showPage( _rpmGroupTagsFilterView );
200 if ( _statusFilterView ) _filters->showPage( _statusFilterView );
208 if ( _patchFilterView && onlineUpdateMode() )
210 if ( _patchFilterView && _patchList )
212 _filters->showPage( _patchFilterView );
213 _patchList->filter();
216 else if ( _repoFilterView && repoMode() )
220 _filters->showPage( _repoFilterView );
221 _repoFilterView->filter();
224 else if ( _updateProblemFilterView )
226 _filters->showPage( _updateProblemFilterView );
227 _updateProblemFilterView->filter();
229 else if ( searchMode() && _searchFilterView )
231 _filters->showPage( _searchFilterView );
232 _searchFilterView->filter();
233 QTimer::singleShot( 0, _searchFilterView, SLOT( setFocus() ) );
235 else if ( summaryMode() && _statusFilterView )
237 _filters->showPage( _statusFilterView );
238 _statusFilterView->filter();
239 _pkgList->selectNextItem();
241 else if ( _patternList )
243 _filters->showPage( _patternList );
244 _patternList->filter();
248 if ( _filters->diskUsageList() )
249 _filters->diskUsageList()->updateDiskUsage();
251 yuiMilestone() <<
"PackageSelector init done" << std::endl;
254 #if CHECK_DEPENDENCIES_ON_STARTUP 260 QTimer::singleShot( 0,
this, SLOT( resolveDependencies() ) );
272 #define PREFIX "/usr/" 273 return zypp::str::form(
"%s/share/icons/hicolor/%dx%d/apps/%s.png",
274 PREFIX, size, size, name.c_str() );
279 YQPackageSelector::basicLayout()
281 QVBoxLayout *layout =
new QVBoxLayout();
283 layout->setContentsMargins( MARGIN,
287 layout->setSpacing( SPACING_BELOW_MENU_BAR );
288 layoutMenuBar(
this );
290 QString settingsName =
"YQPackageSelector";
292 if ( onlineUpdateMode() ) settingsName =
"YQOnlineUpdate";
293 if ( updateMode() ) settingsName =
"YQSystemUpdate";
296 YUI_CHECK_NEW( _filters );
298 layout->addWidget( _filters );
299 layoutFilters(
this );
300 layoutRightPane( _filters->rightPane() );
305 YQPackageSelector::layoutFilters( QWidget *parent )
317 YUI_CHECK_NEW( _updateProblemFilterView );
318 _filters->addPage( _(
"&Update Problems" ), _updateProblemFilterView,
"update_problems" );
327 if ( onlineUpdateMode()
328 #
if ALWAYS_SHOW_PATCHES_VIEW_IF_PATCHES_AVAILABLE
329 || ! zyppPool().empty<zypp::Patch>()
333 addPatchFilterView();
341 if ( ! zyppPool().empty<zypp::Pattern>() || testMode() )
344 YUI_CHECK_NEW( _patternList );
345 _filters->addPage( _(
"Patter&ns" ), _patternList,
"patterns" );
347 connect( _patternList, SIGNAL( statusChanged() ),
348 this, SLOT ( autoResolveDependencies() ) );
350 connect(
this, SIGNAL( refresh() ),
351 _patternList, SLOT ( updateItemStates() ) );
353 if ( _pkgConflictDialog )
355 connect( _pkgConflictDialog, SIGNAL( updatePackages() ),
356 _patternList, SLOT ( updateItemStates() ) );
366 YUI_CHECK_NEW( _packageKitGroupsFilterView );
367 _filters->addPage( _(
"Package &Groups" ), _packageKitGroupsFilterView,
"package_groups" );
369 connect(
this, SIGNAL( loadData() ),
370 _packageKitGroupsFilterView, SLOT ( filter() ) );
378 YUI_CHECK_NEW( _rpmGroupTagsFilterView );
379 _filters->addPage( _(
"&RPM Groups" ), _rpmGroupTagsFilterView,
"rpm_groups" );
381 connect(
this, SIGNAL( loadData() ),
382 _rpmGroupTagsFilterView, SLOT ( filter() ) );
390 YUI_CHECK_NEW( _langList );
392 _filters->addPage( _(
"&Languages" ), _langList,
"languages" );
393 _langList->setSizePolicy( QSizePolicy( QSizePolicy::Ignored, QSizePolicy::Ignored ) );
395 connect( _langList, SIGNAL( statusChanged() ),
396 this, SLOT ( autoResolveDependencies() ) );
398 connect(
this, SIGNAL( refresh() ),
399 _langList, SLOT ( updateItemStates() ) );
407 YUI_CHECK_NEW( _repoFilterView );
408 _filters->addPage( _(
"&Repositories" ), _repoFilterView,
"repos" );
411 connect(_repoFilterView, SIGNAL(filterStart()),
this, SLOT(updateRepositoryUpgradeLabel()));
412 connect(
this, SIGNAL(refresh()),
this, SLOT(updateRepositoryUpgradeLabel()));
421 YUI_CHECK_NEW( _searchFilterView );
422 _filters->addPage( _(
"S&earch" ), _searchFilterView,
"search" );
429 _filters->addPage( _(
"&Keywords" ),
new QLabel(
"Keywords\nfilter\n\nfor future use",
this ),
"keywords" );
437 YUI_CHECK_NEW( _statusFilterView );
438 _filters->addPage( _(
"&Installation Summary" ), _statusFilterView,
"inst_summary" );
442 YQPackageSelector::~YQPackageSelector()
448 YQPackageSelector::layoutRightPane( QWidget *parent )
450 QVBoxLayout *layout =
new QVBoxLayout( parent );
451 YUI_CHECK_NEW( layout );
452 layout->setContentsMargins( SPLITTER_HALF_SPACING,
457 QSplitter * splitter =
new QSplitter( Qt::Vertical, parent );
458 YUI_CHECK_NEW( splitter );
459 layout->addWidget(splitter);
461 layoutPkgList( splitter );
462 layoutDetailsViews( splitter );
463 layoutButtons( parent );
470 YQPackageSelector::layoutPkgList( QWidget *parent )
474 QWidget *_notificationsContainer =
new QWidget(parent);
475 QVBoxLayout *layout =
new QVBoxLayout(_notificationsContainer);
477 _repoUpgradingLabel =
new QLabel(_notificationsContainer);
478 _repoUpgradingLabel->setTextFormat(Qt::RichText);
479 _repoUpgradingLabel->setWordWrap(
true);
480 _repoUpgradingLabel->setVisible(
false);
482 _repoUpgradeLabel =
new QLabel(_notificationsContainer);
483 _repoUpgradeLabel->setTextFormat(Qt::RichText);
484 _repoUpgradeLabel->setWordWrap(
true);
485 _repoUpgradeLabel->setVisible(
false);
486 _repoUpgradeLabel->setObjectName(
"RepoUpgradeLabel");
488 layout->addWidget(_repoUpgradingLabel);
489 layout->addWidget(_repoUpgradeLabel);
495 connect( _repoUpgradeLabel, SIGNAL( linkActivated ( QString ) ),
496 this, SLOT( slotRepoUpgradeLabelLinkClicked( QString ) ) );
498 connect(_repoUpgradingLabel, SIGNAL( linkActivated( QString ) ),
499 this, SLOT( slotRepoUpgradeLabelLinkClicked( QString ) ) );
501 updateRepositoryUpgradeLabel();
504 YUI_CHECK_NEW( _pkgList );
506 connect( _pkgList, SIGNAL( statusChanged() ),
507 this, SLOT ( autoResolveDependencies() ) );
511 YQPackageSelector::layoutDetailsViews( QWidget *parent )
516 _detailsViews =
new QTabWidget( parent );
517 YUI_CHECK_NEW( _detailsViews );
524 YUI_CHECK_NEW( _pkgDescriptionView );
526 _detailsViews->addTab( _pkgDescriptionView, _(
"D&escription" ) );
527 _detailsViews->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
529 connect( _pkgList, SIGNAL( currentItemChanged ( ZyppSel ) ),
530 _pkgDescriptionView, SLOT ( showDetailsIfVisible( ZyppSel ) ) );
537 YUI_CHECK_NEW( _pkgTechnicalDetailsView );
539 _detailsViews->addTab( _pkgTechnicalDetailsView, _(
"&Technical Data" ) );
541 connect( _pkgList, SIGNAL( currentItemChanged ( ZyppSel ) ),
542 _pkgTechnicalDetailsView, SLOT ( showDetailsIfVisible( ZyppSel ) ) );
550 YUI_CHECK_NEW( _pkgDependenciesView );
552 _detailsViews->addTab( _pkgDependenciesView, _(
"Dependencies" ) );
553 _detailsViews->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
555 connect( _pkgList, SIGNAL( currentItemChanged ( ZyppSel ) ),
556 _pkgDependenciesView, SLOT ( showDetailsIfVisible( ZyppSel ) ) );
565 YUI_CHECK_NEW( _pkgVersionsView );
567 _detailsViews->addTab( _pkgVersionsView, _(
"&Versions" ) );
569 connect( _pkgList, SIGNAL( currentItemChanged ( ZyppSel ) ),
570 _pkgVersionsView, SLOT ( showDetailsIfVisible( ZyppSel ) ) );
572 connect( _pkgList, SIGNAL( statusChanged() ),
573 _pkgVersionsView, SIGNAL( statusChanged() ) );
580 if ( haveInstalledPkgs )
583 YUI_CHECK_NEW( _pkgFileListView );
585 _detailsViews->addTab( _pkgFileListView, _(
"File List" ) );
586 _detailsViews->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
588 connect( _pkgList, SIGNAL( currentItemChanged ( ZyppSel ) ),
589 _pkgFileListView, SLOT ( showDetailsIfVisible( ZyppSel ) ) );
597 if ( haveInstalledPkgs )
600 YUI_CHECK_NEW( _pkgChangeLogView );
602 _detailsViews->addTab( _pkgChangeLogView, _(
"Change Log" ) );
603 _detailsViews->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
605 connect( _pkgList, SIGNAL( currentItemChanged ( ZyppSel ) ),
606 _pkgChangeLogView, SLOT ( showDetailsIfVisible( ZyppSel ) ) );
612 YQPackageSelector::layoutButtons( QWidget *parent )
614 QWidget * button_box =
new QWidget( parent );
615 YUI_CHECK_NEW( button_box );
616 parent->layout()->addWidget( button_box );
618 QHBoxLayout * layout =
new QHBoxLayout( button_box );
619 YUI_CHECK_NEW( layout );
621 button_box->setLayout( layout );
622 layout->setContentsMargins( 2,
627 layout->addStretch();
629 QPushButton * cancel_button =
new QPushButton( _(
"&Cancel" ), button_box );
630 YUI_CHECK_NEW( cancel_button );
631 layout->addWidget(cancel_button);
633 cancel_button->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) );
635 connect( cancel_button, SIGNAL( clicked() ),
636 this, SLOT ( reject() ) );
639 QPushButton * accept_button =
new QPushButton( _(
"&Accept" ), button_box );
640 YUI_CHECK_NEW( accept_button );
641 layout->addWidget(accept_button);
642 accept_button->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) );
644 connect( accept_button, SIGNAL( clicked() ),
645 this, SLOT ( accept() ) );
647 button_box->setFixedHeight( button_box->sizeHint().height() );
652 YQPackageSelector::layoutMenuBar( QWidget *parent )
654 _menuBar =
new QMenuBar( parent );
655 YUI_CHECK_NEW( _menuBar );
656 parent->layout()->addWidget(_menuBar);
679 _fileMenu =
new QMenu( _menuBar );
680 YUI_CHECK_NEW( _fileMenu );
681 QAction * action = _menuBar->addMenu( _fileMenu );
682 action->setText( _(
"&File" ));
684 _fileMenu->addAction( _(
"&Import..." ),
this, SLOT( pkgImport() ) );
685 _fileMenu->addAction( _(
"&Export..." ),
this, SLOT( pkgExport() ) );
687 _fileMenu->addSeparator();
689 _fileMenu->addAction( _(
"E&xit -- Discard Changes" ),
this, SLOT( reject() ) );
690 _fileMenu->addAction( _(
"&Quit -- Save Changes" ),
this, SLOT( accept() ) );
699 _pkgMenu =
new QMenu( _menuBar );
700 YUI_CHECK_NEW( _pkgMenu );
701 action = _menuBar->addMenu( _pkgMenu );
702 action->setText(_(
"&Package" ));
704 _pkgMenu->addAction(_pkgList->actionSetCurrentInstall);
705 _pkgMenu->addAction(_pkgList->actionSetCurrentDontInstall);
706 _pkgMenu->addAction(_pkgList->actionSetCurrentKeepInstalled);
707 _pkgMenu->addAction(_pkgList->actionSetCurrentDelete);
708 _pkgMenu->addAction(_pkgList->actionSetCurrentUpdate);
709 _pkgMenu->addAction(_pkgList->actionSetCurrentUpdateForce);
710 _pkgMenu->addAction(_pkgList->actionSetCurrentTaboo);
711 _pkgMenu->addAction(_pkgList->actionShowCurrentSolverInfo);
713 #if ENABLE_SOURCE_RPMS 714 _pkgMenu->addSeparator();
716 _pkgMenu->addAction(_pkgList->actionInstallSourceRpm);
717 _pkgMenu->addAction(_pkgList->actionDontInstallSourceRpm);
720 _pkgMenu->addSeparator();
721 QMenu * submenu = _pkgList->addAllInListSubMenu( _pkgMenu );
722 YUI_CHECK_NEW( submenu );
724 #if ENABLE_SOURCE_RPMS 725 submenu->addSeparator();
727 _pkgMenu->addAction(_pkgList->actionInstallListSourceRpms);
728 _pkgMenu->addAction(_pkgList->actionDontInstallListSourceRpms);
735 submenu =
new QMenu( _pkgMenu );
736 YUI_CHECK_NEW( submenu );
741 action = _pkgMenu->addMenu( submenu );
742 action->setText(_(
"All Packages" ));
744 submenu->addAction( _(
"Update if newer version available" ),
745 this, SLOT( globalUpdatePkg() ) );
747 submenu->addAction( _(
"Update unconditionally" ),
748 this, SLOT( globalUpdatePkgForce() ) );
758 _patchMenu =
new QMenu( _menuBar );
759 YUI_CHECK_NEW( _patchMenu );
760 action = _menuBar->addMenu( _patchMenu );
761 action->setText(_(
"&Patch" ));
763 _patchMenu->addAction(_patchList->actionSetCurrentInstall);
764 _patchMenu->addAction(_patchList->actionSetCurrentDontInstall);
765 _patchMenu->addAction(_patchList->actionSetCurrentKeepInstalled);
767 #if ENABLE_DELETING_PATCHES 768 _patchMenu->addAction(_patchList->actionSetCurrentDelete);
770 _patchMenu->addAction(_patchList->actionSetCurrentUpdate);
771 _patchMenu->addAction(_patchList->actionSetCurrentUpdateForce);
772 _patchMenu->addAction(_patchList->actionSetCurrentTaboo);
774 _patchMenu->addSeparator();
775 _patchList->addAllInListSubMenu( _patchMenu );
783 if ( repoMgrEnabled() )
785 _configMenu =
new QMenu( _menuBar );
786 YUI_CHECK_NEW( _configMenu );
787 action = _menuBar->addMenu( _configMenu );
788 action->setText(_(
"Confi&guration" ));
789 _configMenu->addAction( _(
"&Repositories..." ),
this, SLOT( repoManager() ), Qt::CTRL + Qt::Key_R );
790 _configMenu->addAction( _(
"&Online Update..." ),
this, SLOT( onlineUpdateConfiguration() ), Qt::CTRL + Qt::Key_O );
797 _dependencyMenu =
new QMenu( _menuBar );
798 YUI_CHECK_NEW( _dependencyMenu );
799 action = _menuBar->addMenu( _dependencyMenu );
800 action->setText(_(
"&Dependencies" ));
802 _dependencyMenu->addAction( _(
"&Check Now" ),
this, SLOT( manualResolvePackageDependencies() ) );
804 _autoDependenciesAction =
new QAction( _(
"&Autocheck" ),
this );
805 _autoDependenciesAction->setCheckable(
true );
806 _dependencyMenu->addAction( _autoDependenciesAction );
808 _installRecommendedAction = _dependencyMenu->addAction(
809 _(
"Install &Recommended Packages"),
810 this, SLOT (pkgInstallRecommendedChanged(
bool)));
811 _installRecommendedAction->setCheckable(
true );
818 _optionsMenu =
new QMenu( _menuBar );
819 YUI_CHECK_NEW( _optionsMenu );
820 action = _menuBar->addMenu( _optionsMenu );
822 action->setText(_(
"&Options" ));
825 _showDevelAction = _optionsMenu->addAction( _(
"Show -de&vel Packages" ),
826 this, SLOT( pkgExcludeDevelChanged(
bool ) ), Qt::Key_F7 );
827 _showDevelAction->setCheckable(
true);
829 _excludeDevelPkgs =
new YQPkgObjList::ExcludeRule( _pkgList, QRegExp(
".*(\\d+bit)?-devel(-\\d+bit)?$" ), _pkgList->nameCol() );
830 YUI_CHECK_NEW( _excludeDevelPkgs );
831 _excludeDevelPkgs->enable(
false );
834 _showDebugAction = _optionsMenu->addAction( _(
"Show -&debuginfo/-debugsource Packages" ),
835 this, SLOT( pkgExcludeDebugChanged(
bool ) ), Qt::Key_F8 );
836 _showDebugAction->setCheckable(
true);
837 _excludeDebugInfoPkgs =
new YQPkgObjList::ExcludeRule( _pkgList, QRegExp(
".*(-\\d+bit)?-(debuginfo|debugsource)(-32bit)?$" ), _pkgList->nameCol() );
838 YUI_CHECK_NEW( _excludeDebugInfoPkgs );
839 _excludeDebugInfoPkgs->enable(
false );
842 _verifySystemModeAction = _optionsMenu->addAction( _(
"&System Verification Mode" ),
843 this, SLOT( pkgVerifySytemModeChanged(
bool ) ) );
844 _verifySystemModeAction->setCheckable(
true);
847 _cleanDepsOnRemoveAction = _optionsMenu->addAction( _(
"&Cleanup when deleting packages" ),
848 this, SLOT( pkgCleanDepsOnRemoveChanged(
bool ) ) );
849 _cleanDepsOnRemoveAction->setCheckable(
true);
851 _allowVendorChangeAction = _optionsMenu->addAction( _(
"&Allow vendor change" ),
852 this, SLOT( pkgAllowVendorChangeChanged(
bool ) ) );
853 _allowVendorChangeAction->setCheckable(
true);
861 _extrasMenu =
new QMenu( _menuBar );
862 YUI_CHECK_NEW( _extrasMenu );
863 action = _menuBar->addMenu( _extrasMenu );
864 action->setText(_(
"E&xtras" ));
866 _extrasMenu->addAction( _(
"Show &Products" ),
this, SLOT( showProducts() ) );
867 _extrasMenu->addAction( _(
"Show P&ackage Changes" ),
this, SLOT( showAutoPkgList() ), Qt::CTRL + Qt::Key_A );
868 _extrasMenu->addAction( _(
"Show &History" ),
this, SLOT( showHistory() ) );
870 _extrasMenu->addSeparator();
872 #if BRAINDEAD_LIB_NAMING_SCHEME 876 _extrasMenu->addAction( _(
"Install All Matching -&devel Packages" ),
this, SLOT( installDevelPkgs() ) );
880 _extrasMenu->addAction( _(
"Install All Matching -de&buginfo Packages" ),
this, SLOT( installDebugInfoPkgs() ) );
883 _extrasMenu->addAction( _(
"Install All Matching -debug&source Packages" ),
this, SLOT( installDebugSourcePkgs() ) );
885 _extrasMenu->addAction( _(
"Install All Matching &Recommended Packages" ),
886 this, SLOT( installRecommendedPkgs() ) );
888 _extrasMenu->addSeparator();
890 if ( _pkgConflictDialog )
891 _extrasMenu->addAction( _(
"Generate Dependency Resolver &Test Case" ),
892 _pkgConflictDialog, SLOT( askCreateSolverTestCase() ) );
894 if ( _actionResetIgnoredDependencyProblems )
895 _extrasMenu->addAction(_actionResetIgnoredDependencyProblems);
899 _extrasMenu->addAction(_patchList->actionShowRawPatchInfo);
907 _helpMenu =
new QMenu( _menuBar );
908 YUI_CHECK_NEW( _helpMenu );
909 _menuBar->addSeparator();
910 action = _menuBar->addMenu( _helpMenu );
911 action->setText(_(
"&Help" ));
917 _helpMenu->addAction( _(
"&Overview" ),
this, SLOT( help() ), Qt::Key_F1 );
920 _helpMenu->addAction( _(
"&Symbols" ),
this, SLOT( symbolHelp() ), Qt::SHIFT + Qt::Key_F1 );
923 _helpMenu->addAction( _(
"&Keys" ),
this, SLOT( keyboardHelp() ) );
930 bool hasUpdateSignal )
932 if ( ! filter )
return;
933 if ( ! pkgList )
return;
937 connect( _filters, SIGNAL( currentChanged(QWidget *) ),
938 filter, SLOT ( filterIfVisible() ) );
941 connect(
this, SIGNAL( refresh() ),
942 filter, SLOT ( filterIfVisible() ) );
944 connect( filter, SIGNAL( filterStart() ),
945 pkgList, SLOT ( clear() ) );
947 connect( filter, SIGNAL( filterMatch( ZyppSel, ZyppPkg ) ),
948 pkgList, SLOT ( addPkgItem ( ZyppSel, ZyppPkg ) ) );
950 connect( filter, SIGNAL( filterFinished() ),
951 pkgList, SLOT ( resort() ) );
953 connect( filter, SIGNAL( filterFinished() ),
954 pkgList, SLOT ( selectSomething() ) );
956 connect( filter, SIGNAL( filterFinished() ),
957 pkgList, SLOT ( logExcludeStatistics() ) );
959 connect( filter, SIGNAL( filterFinished() ),
960 pkgList, SLOT ( setFocus() ) );
963 if ( hasUpdateSignal && _filters->diskUsageList() )
965 connect( filter, SIGNAL( updatePackages() ),
966 pkgList, SLOT ( updateItemStates() ) );
968 if ( _filters->diskUsageList() )
970 connect( filter, SIGNAL( updatePackages() ),
971 _filters->diskUsageList(), SLOT ( updateDiskUsage() ) );
980 connectFilter( _updateProblemFilterView, _pkgList,
false );
981 connectFilter( _patternList, _pkgList );
982 connectFilter( _langList, _pkgList );
983 connectFilter( _repoFilterView, _pkgList,
false );
984 connectFilter( _packageKitGroupsFilterView, _pkgList,
false );
985 connectFilter( _rpmGroupTagsFilterView, _pkgList,
false );
986 connectFilter( _statusFilterView, _pkgList,
false );
987 connectFilter( _searchFilterView, _pkgList,
false );
992 if ( _searchFilterView && _pkgList )
994 connect( _searchFilterView, SIGNAL( message(
const QString & ) ),
995 _pkgList, SLOT ( message(
const QString & ) ) );
998 if ( _repoFilterView && _pkgList )
1000 connect( _repoFilterView, SIGNAL( filterNearMatch ( ZyppSel, ZyppPkg ) ),
1001 _pkgList, SLOT ( addPkgItemDimmed ( ZyppSel, ZyppPkg ) ) );
1004 if ( _pkgList && _filters->diskUsageList() )
1007 connect( _pkgList, SIGNAL( statusChanged() ),
1008 _filters->diskUsageList(), SLOT ( updateDiskUsage() ) );
1019 if ( _pkgConflictDialog )
1023 connect( _pkgConflictDialog, SIGNAL( updatePackages() ),
1024 _pkgList, SLOT ( updateItemStates() ) );
1029 connect( _pkgConflictDialog, SIGNAL( updatePackages() ),
1030 _patternList, SLOT ( updateItemStates() ) );
1034 if ( _filters->diskUsageList() )
1036 connect( _pkgConflictDialog, SIGNAL( updatePackages() ),
1037 _filters->diskUsageList(), SLOT ( updateDiskUsage() ) );
1046 if ( _pkgVersionsView && _pkgList )
1048 connect( _pkgVersionsView, SIGNAL( candidateChanged( ZyppObj ) ),
1049 _pkgList, SLOT ( updateItemData() ) );
1051 connect( _pkgVersionsView, SIGNAL( statusChanged() ),
1052 _pkgList, SLOT ( updateItemData() ) );
1060 QShortcut * accel =
new QShortcut( Qt::Key_F2,
this, SLOT( hotkeyInsertPatchFilterView() ) );
1061 YUI_CHECK_NEW( accel );
1067 if ( _pkgMenu && _pkgList )
1069 connect( _pkgMenu, SIGNAL( aboutToShow() ),
1070 _pkgList, SLOT ( updateActions() ) );
1073 if ( _patchMenu && _patchList )
1075 connect( _patchMenu, SIGNAL( aboutToShow() ),
1076 _patchList, SLOT ( updateActions() ) );
1084 if ( _autoDependenciesAction && ! _autoDependenciesAction->isChecked() )
1087 resolveDependencies();
1094 if ( ! _pkgConflictDialog )
1096 yuiError() <<
"No package conflict dialog existing" << std::endl;
1097 return QDialog::Accepted;
1100 YQUI::ui()->busyCursor();
1101 int result = _pkgConflictDialog->solveAndShowConflicts();
1102 YQUI::ui()->normalCursor();
1104 #if DEPENDENCY_FEEDBACK_IF_OK 1106 if ( result == QDialog::Accepted )
1108 QMessageBox::information(
this,
"",
1109 _(
"All package dependencies are OK." ),
1121 if ( ! _patchFilterView )
1124 YUI_CHECK_NEW( _patchFilterView );
1125 _filters->addPage( _(
"P&atches" ), _patchFilterView,
"patches" );
1127 _patchList = _patchFilterView->patchList();
1128 YUI_CHECK_PTR( _patchList );
1138 if ( ! _patchFilterView )
1140 yuiMilestone() <<
"Activating patches filter view" << std::endl;
1142 addPatchFilterView();
1145 _filters->showPage( _patchFilterView );
1147 _patchList->filter();
1151 _filters->showPage( _patchFilterView );
1159 if ( _pkgList && _patchList )
1161 connectFilter( _patchList, _pkgList );
1163 connect( _patchList, SIGNAL( filterMatch (
const QString &,
const QString &, FSize ) ),
1164 _pkgList, SLOT ( addPassiveItem(
const QString &,
const QString &, FSize ) ) );
1166 connect( _patchList, SIGNAL( statusChanged() ),
1167 this, SLOT ( autoResolveDependencies() ) );
1169 if ( _pkgConflictDialog )
1171 connect( _pkgConflictDialog,SIGNAL( updatePackages() ),
1172 _patchList, SLOT ( updateItemStates() ) );
1175 connect(
this, SIGNAL( refresh() ),
1176 _patchList, SLOT ( updateItemStates() ) );
1185 QString filename = YQApplication::askForSaveFileName( QString( DEFAULT_EXPORT_FILE_NAME ),
1186 QString(
"*.xml;;*" ),
1187 _(
"Save Package List" ) );
1189 if ( ! filename.isEmpty() )
1191 zypp::syscontent::Writer writer;
1192 const zypp::ResPool & pool = zypp::getZYpp()->pool();
1196 for_each( pool.begin(), pool.end(),
1197 boost::bind( &zypp::syscontent::Writer::addIf,
1198 boost::ref( writer ),
1210 std::ofstream exportFile( toUTF8( filename ).c_str() );
1211 exportFile.exceptions( std::ios_base::badbit | std::ios_base::failbit );
1212 exportFile << writer;
1214 yuiMilestone() <<
"Package list exported to " << filename << std::endl;
1216 catch ( std::exception & exception )
1218 yuiWarning() <<
"Error exporting package list to " << filename << std::endl;
1222 QFile::remove(filename);
1225 QMessageBox::warning(
this,
1227 _(
"Error exporting package list to %1" ).arg( filename ),
1228 QMessageBox::Ok | QMessageBox::Default,
1239 QString filename = QFileDialog::getOpenFileName(
this, _(
"Load Package List" ), DEFAULT_EXPORT_FILE_NAME,
1243 if ( ! filename.isEmpty() )
1245 yuiMilestone() <<
"Importing package list from " << filename << std::endl;
1249 std::ifstream importFile( toUTF8( filename ).c_str() );
1250 zypp::syscontent::Reader reader( importFile );
1256 typedef zypp::syscontent::Reader::Entry ZyppReaderEntry;
1257 typedef std::pair<string, ZyppReaderEntry> ImportMapPair;
1259 map<string, ZyppReaderEntry> importPkg;
1260 map<string, ZyppReaderEntry> importPatterns;
1262 for ( zypp::syscontent::Reader::const_iterator it = reader.begin();
1266 string kind = it->kind();
1268 if ( kind ==
"package" ) importPkg.insert ( ImportMapPair( it->name(), *it ) );
1269 else if ( kind ==
"pattern" ) importPatterns.insert( ImportMapPair( it->name(), *it ) );
1272 yuiDebug() <<
"Found " << importPkg.size()
1273 <<
" packages and " << importPatterns.size()
1274 <<
" patterns in " << filename
1282 for ( ZyppPoolIterator it = zyppPatternsBegin();
1283 it != zyppPatternsEnd();
1286 ZyppSel selectable = *it;
1287 importSelectable( *it, importPatterns.find( selectable->name() ) != importPatterns.end(),
"pattern" );
1290 for ( ZyppPoolIterator it = zyppPkgBegin();
1294 ZyppSel selectable = *it;
1295 importSelectable( *it, importPkg.find( selectable->name() ) != importPkg.end(),
"package" );
1305 if ( _statusFilterView )
1309 _filters->showPage( _statusFilterView );
1310 _statusFilterView->filter();
1314 catch (
const zypp::Exception & exception )
1316 yuiWarning() <<
"Error reading package list from " << filename << std::endl;
1319 QMessageBox::warning(
this,
1321 _(
"Error loading package list from %1" ).arg( filename ),
1322 QMessageBox::Ok | QMessageBox::Default,
1323 QMessageBox::NoButton,
1324 QMessageBox::NoButton );
1335 ZyppStatus oldStatus = selectable->status();
1336 ZyppStatus newStatus = oldStatus;
1344 switch ( oldStatus )
1348 case S_KeepInstalled:
1352 newStatus = oldStatus;
1357 newStatus = S_KeepInstalled;
1358 yuiDebug() <<
"Keeping " << kind <<
" " << selectable->name() << std::endl;
1364 if ( selectable->hasCandidateObj() )
1366 newStatus = S_Install;
1367 yuiDebug() <<
"Adding " << kind <<
" " << selectable->name() << std::endl;
1371 yuiDebug() <<
"Can't add " << kind <<
" " << selectable->name()
1372 <<
": No candidate" << std::endl;
1383 switch ( oldStatus )
1387 case S_KeepInstalled:
1392 yuiDebug() <<
"Deleting " << kind <<
" " << selectable->name() << std::endl;
1399 newStatus = oldStatus;
1404 if ( oldStatus != newStatus )
1405 selectable->setStatus( newStatus );
1415 int count = _pkgList->globalSetPkgStatus( S_Update, force,
1417 yuiMilestone() << count <<
" pkgs found for update" << std::endl;
1419 if ( count >= GLOBAL_UPDATE_CONFIRMATION_THRESHOLD )
1421 if ( QMessageBox::question(
this,
"",
1423 _(
"%1 packages will be updated" ).arg( count ),
1424 _(
"&Continue" ), _(
"C&ancel" ),
1433 (void) _pkgList->globalSetPkgStatus( S_Update, force,
1436 if ( _statusFilterView )
1438 _filters->showPage( _statusFilterView );
1439 _statusFilterView->clear();
1440 _statusFilterView->showTransactions();
1441 _statusFilterView->filter();
1448 zypp::ResPool::repository_iterator it;
1449 _repoUpgradeLabel->setText(
"");
1450 _repoUpgradingLabel->setText(
"");
1454 for ( it = zypp::getZYpp()->pool().knownRepositoriesBegin();
1455 it != zypp::getZYpp()->pool().knownRepositoriesEnd();
1458 zypp::Repository repo(*it);
1461 if ( zypp::getZYpp()->resolver()->upgradingRepo(repo) )
1463 _repoUpgradingLabel->setText(_repoUpgradingLabel->text() + _(
"<p><small><a href=\"repoupgraderemove:///%1\">Cancel switching</a> system packages to versions in repository %2</small></p>")
1464 .arg(fromUTF8(repo.alias().c_str()))
1465 .arg(fromUTF8(repo.name().c_str()))
1470 for ( it = zypp::getZYpp()->pool().knownRepositoriesBegin();
1471 it != zypp::getZYpp()->pool().knownRepositoriesEnd();
1474 zypp::Repository repo(*it);
1478 if ( ! zypp::getZYpp()->resolver()->upgradingRepo(repo) &&
1479 ! repo.isSystemRepo() &&
1480 _repoFilterView->selectedRepo() == repo )
1482 _repoUpgradeLabel->setText(_repoUpgradeLabel->text() + _(
"<p><a href=\"repoupgradeadd:///%1\">Switch system packages</a> to the versions in this repository (%2)</p>")
1483 .arg(fromUTF8(repo.alias().c_str()))
1484 .arg(fromUTF8(repo.name().c_str()))
1488 _repoUpgradeLabel->setVisible(!_repoUpgradeLabel->text().isEmpty() &&
1489 _repoFilterView->isVisible() );
1490 _repoUpgradingLabel->setVisible(!_repoUpgradingLabel->text().isEmpty());
1496 yuiDebug() <<
"link " << link <<
" clicked on label" << std::endl;
1499 if (url.scheme() ==
"repoupgradeadd")
1501 yuiDebug() <<
"looking for repo " << url.path() << std::endl;
1502 std::string alias(url.path().remove(0,1).toStdString());
1503 zypp::Repository repo(zypp::getZYpp()->pool().reposFind(alias));
1504 yuiDebug() << repo << std::endl;
1506 if ( repo != zypp::Repository::noRepository )
1507 zypp::getZYpp()->resolver()->addUpgradeRepo(repo);
1509 else if (url.scheme() ==
"repoupgraderemove")
1511 std::string alias(url.path().remove(0,1).toStdString());
1512 zypp::Repository repo(zypp::getZYpp()->pool().reposFind(alias));
1514 if ( repo != zypp::Repository::noRepository )
1515 zypp::getZYpp()->resolver()->removeUpgradeRepo(repo);
1518 yuiDebug() <<
"unknown link operation " << url.scheme() << std::endl;
1520 resolveDependencies();
1540 installSubPkgs(
"-devel" );
1547 installSubPkgs(
"-debuginfo" );
1554 installSubPkgs(
"-debugsource" );
1561 zypp::getZYpp()->resolver()->setIgnoreAlreadyRecommended(
false );
1562 resolveDependencies();
1564 if ( _filters && _statusFilterView )
1566 _filters->showPage( _statusFilterView );
1567 _statusFilterView->filter();
1571 _(
"Added Subpackages:" ),
1574 YQPkgChangesDialog::FilterAutomatic,
1575 YQPkgChangesDialog::OptionNone );
1582 if ( _optionsMenu && _pkgList )
1584 if ( _excludeDebugInfoPkgs )
1585 _excludeDebugInfoPkgs->enable( ! on );
1587 _pkgList->applyExcludeRules();
1593 YQPackageSelector::pkgExcludeDevelChanged(
bool on )
1595 if ( _optionsMenu && _pkgList )
1597 if ( _excludeDevelPkgs )
1598 _excludeDevelPkgs->enable( ! on );
1600 _pkgList->applyExcludeRules();
1606 YQPackageSelector::pkgVerifySytemModeChanged(
bool on )
1608 zypp::getZYpp()->resolver()->setSystemVerification( on );
1612 YQPackageSelector::pkgInstallRecommendedChanged(
bool on )
1614 zypp::getZYpp()->resolver()->setOnlyRequires( !on );
1615 resolveDependencies();
1619 YQPackageSelector::pkgCleanDepsOnRemoveChanged(
bool on )
1621 zypp::getZYpp()->resolver()->setCleandepsOnRemove( on );
1622 resolveDependencies();
1627 YQPackageSelector::pkgAllowVendorChangeChanged(
bool on )
1629 zypp::getZYpp()->resolver()->setAllowVendorChange( on );
1630 resolveDependencies();
1640 QMap<QString, ZyppSel> subPkgs;
1642 for ( ZyppPoolIterator it = zyppPkgBegin();
1646 QString name = (*it)->name().c_str();
1648 if ( name.endsWith( suffix ) || name.endsWith( suffix +
"-32bit" ) )
1650 subPkgs[ name ] = *it;
1652 yuiDebug() <<
"Found subpackage: " << name << std::endl;
1659 for ( ZyppPoolIterator it = zyppPkgBegin();
1663 QString name = (*it)->name().c_str();
1665 if ( subPkgs.contains( name + suffix ) )
1667 QString subPkgName( name + suffix );
1668 ZyppSel subPkg = subPkgs[ subPkgName ];
1670 switch ( (*it)->status() )
1678 yuiMilestone() <<
"Ignoring unwanted subpackage " << subPkgName << std::endl;
1683 case S_KeepInstalled:
1687 if ( ! subPkg->installedObj() )
1689 subPkg->setStatus( S_Install );
1690 yuiMilestone() <<
"Installing subpackage " << subPkgName << std::endl;
1700 if ( ! subPkg->installedObj() )
1702 subPkg->setStatus( S_Install );
1703 yuiMilestone() <<
"Installing subpackage " << subPkgName << std::endl;
1707 subPkg->setStatus( S_Update );
1708 yuiMilestone() <<
"Updating subpackage " << subPkgName << std::endl;
1719 if ( _filters && _statusFilterView )
1721 _filters->showPage( _statusFilterView );
1722 _statusFilterView->filter();
1726 _(
"Added Subpackages:" ),
1727 QRegExp(
".*" + suffix +
"$" ),
1730 YQPkgChangesDialog::FilterAutomatic,
1731 YQPkgChangesDialog::OptionNone );
1737 QString settingsName =
"YQPackageSelector";
1738 if ( onlineUpdateMode() ) settingsName =
"YQOnlineUpdate";
1739 if ( updateMode() ) settingsName =
"YQSystemUpdate";
1741 QSettings settings( QSettings::UserScope, SETTINGS_DIR, settingsName );
1743 _showDevelAction->setChecked(settings.value(
"Options/showDevelPackages",
true).toBool());
1744 pkgExcludeDevelChanged(_showDevelAction->isChecked());
1746 _showDebugAction->setChecked(settings.value(
"Options/showDebugPackages",
true).toBool());
1747 pkgExcludeDebugChanged(_showDebugAction->isChecked());
1749 loadCommonSettings();
1753 YQPackageSelector::loadCommonSettings()
1755 map<string, string> sysconfig = zypp::base::sysconfig::read(PATH_TO_YAST_SYSCONFIG);
1757 bool auto_check = AUTO_CHECK_DEPENDENCIES_DEFAULT;
1758 auto it = sysconfig.find(OPTION_AUTO_CHECK);
1759 if (it != sysconfig.end())
1761 auto_check = it->second ==
"yes";
1763 _autoDependenciesAction->setChecked(auto_check);
1765 bool verify_system = zypp::getZYpp()->resolver()->systemVerification();
1766 it = sysconfig.find(OPTION_VERIFY);
1767 if (it != sysconfig.end())
1769 verify_system = it->second ==
"yes";
1771 _verifySystemModeAction->setChecked(verify_system);
1772 pkgVerifySytemModeChanged(verify_system);
1774 bool install_recommended = ! zypp::getZYpp()->resolver()->onlyRequires();
1775 it = sysconfig.find(OPTION_RECOMMENDED);
1776 if (it != sysconfig.end())
1778 install_recommended = it->second ==
"yes";
1780 _installRecommendedAction->setChecked(install_recommended);
1781 pkgInstallRecommendedChanged(install_recommended);
1783 bool allow_vendor_change = zypp::getZYpp()->resolver()->allowVendorChange();
1784 _allowVendorChangeAction->setChecked(allow_vendor_change);
1785 pkgAllowVendorChangeChanged(allow_vendor_change);
1787 bool clean_deps_on_remove = zypp::getZYpp()->resolver()->cleandepsOnRemove();
1788 _cleanDepsOnRemoveAction->setChecked(clean_deps_on_remove);
1789 pkgCleanDepsOnRemoveChanged(clean_deps_on_remove);
1795 QString settingsName =
"YQPackageSelector";
1796 if ( onlineUpdateMode() ) settingsName =
"YQOnlineUpdate";
1797 if ( updateMode() ) settingsName =
"YQSystemUpdate";
1799 QSettings settings( QSettings::UserScope, SETTINGS_DIR, settingsName );
1801 settings.setValue(
"Options/showDevelPackages", _showDevelAction->isChecked() );
1802 settings.setValue(
"Options/showDebugPackages", _showDebugAction->isChecked() );
1804 saveCommonSettings();
1808 YQPackageSelector::saveCommonSettings()
1812 zypp::base::sysconfig::writeStringVal(
1813 PATH_TO_YAST_SYSCONFIG,
1815 ( _autoDependenciesAction->isChecked() ?
"yes" :
"no"),
1816 "Automatic dependency checking");
1817 zypp::base::sysconfig::writeStringVal(
1818 PATH_TO_YAST_SYSCONFIG,
1820 (_verifySystemModeAction->isChecked() ?
"yes" :
"no"),
1821 "System verification mode");
1822 zypp::base::sysconfig::writeStringVal(
1823 PATH_TO_YAST_SYSCONFIG,
1825 (_installRecommendedAction->isChecked() ?
"yes" :
"no"),
1826 "Install recommended packages");
1828 catch(
const std::exception &e )
1830 yuiError() <<
"Writing " << PATH_TO_YAST_SYSCONFIG <<
" failed" << std::endl;
1834 #include "YQPackageSelector.moc" Display the description of a ZyppObj derived object along with its name and summary.
void addPatchFilterView()
Add the "Patches" filter view, if it is not already there.
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.
Filter view for PackageKit groups.
static int countEnabledRepositories()
Returns the number of enabled repositories.
void showProducts()
Show all products in a popup dialog.
Filter view for packages that made problems during update.
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
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.
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
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 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 pkgExport()
Export all current selection/package states.
Filter view for packages that made problems during update.
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 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'.
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 installDebugSourcePkgs()
Install available -debugsource packages for packages that are installed or marked for installation...
Abstract base class for package selectors.
static void showProductDialog(QWidget *parent=0)
Static convenience method: Post a dialog with all products.
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 pkgImport()
Import selection/package states.
void pkgExcludeDebugChanged(bool on)
Enable or disable the package exclude rules (show or suppress -debuginfo or -devel packages) accordin...
Display a pkg's file list.