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>()
335 addPatchFilterView();
343 if ( ! zyppPool().empty<zypp::Pattern>() || testMode() )
346 YUI_CHECK_NEW( _patternList );
347 _filters->addPage( _(
"Patter&ns" ), _patternList,
"patterns" );
349 connect( _patternList, SIGNAL( statusChanged() ),
350 this, SLOT ( autoResolveDependencies() ) );
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() ),
398 this, SLOT ( autoResolveDependencies() ) );
400 connect(
this, SIGNAL( refresh() ),
401 _langList, SLOT ( updateItemStates() ) );
409 YUI_CHECK_NEW( _repoFilterView );
410 _filters->addPage( _(
"&Repositories" ), _repoFilterView,
"repos" );
413 connect(_repoFilterView, SIGNAL(filterStart()),
this, SLOT(updateRepositoryUpgradeLabel()));
414 connect(
this, SIGNAL(refresh()),
this, SLOT(updateRepositoryUpgradeLabel()));
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 ) ),
508 this, SLOT( slotRepoUpgradeLabelLinkClicked( QString ) ) );
510 connect(_repoUpgradingLabel, SIGNAL( linkActivated( QString ) ),
511 this, SLOT( slotRepoUpgradeLabelLinkClicked( QString ) ) );
513 updateRepositoryUpgradeLabel();
516 YUI_CHECK_NEW( _pkgList );
518 connect( _pkgList, SIGNAL( statusChanged() ),
519 this, SLOT ( autoResolveDependencies() ) );
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);
724 #if ENABLE_SOURCE_RPMS 725 _pkgMenu->addSeparator();
727 _pkgMenu->addAction(_pkgList->actionInstallSourceRpm);
728 _pkgMenu->addAction(_pkgList->actionDontInstallSourceRpm);
731 _pkgMenu->addSeparator();
732 QMenu * submenu = _pkgList->addAllInListSubMenu( _pkgMenu );
733 YUI_CHECK_NEW( submenu );
735 #if ENABLE_SOURCE_RPMS 736 submenu->addSeparator();
738 _pkgMenu->addAction(_pkgList->actionInstallListSourceRpms);
739 _pkgMenu->addAction(_pkgList->actionDontInstallListSourceRpms);
746 submenu =
new QMenu( _pkgMenu );
747 YUI_CHECK_NEW( submenu );
752 action = _pkgMenu->addMenu( submenu );
753 action->setText(_(
"All Packages" ));
755 submenu->addAction( _(
"Update if newer version available" ),
756 this, SLOT( globalUpdatePkg() ) );
758 submenu->addAction( _(
"Update unconditionally" ),
759 this, SLOT( globalUpdatePkgForce() ) );
769 _patchMenu =
new QMenu( _menuBar );
770 YUI_CHECK_NEW( _patchMenu );
771 action = _menuBar->addMenu( _patchMenu );
772 action->setText(_(
"&Patch" ));
774 _patchMenu->addAction(_patchList->actionSetCurrentInstall);
775 _patchMenu->addAction(_patchList->actionSetCurrentDontInstall);
776 _patchMenu->addAction(_patchList->actionSetCurrentKeepInstalled);
778 #if ENABLE_DELETING_PATCHES 779 _patchMenu->addAction(_patchList->actionSetCurrentDelete);
781 _patchMenu->addAction(_patchList->actionSetCurrentUpdate);
782 _patchMenu->addAction(_patchList->actionSetCurrentUpdateForce);
783 _patchMenu->addAction(_patchList->actionSetCurrentTaboo);
785 _patchMenu->addSeparator();
786 _patchList->addAllInListSubMenu( _patchMenu );
794 if ( repoMgrEnabled() )
796 _configMenu =
new QMenu( _menuBar );
797 YUI_CHECK_NEW( _configMenu );
798 action = _menuBar->addMenu( _configMenu );
799 action->setText(_(
"Confi&guration" ));
800 _configMenu->addAction( _(
"&Repositories..." ),
this, SLOT( repoManager() ), Qt::CTRL + Qt::Key_R );
801 _configMenu->addAction( _(
"&Online Update..." ),
this, SLOT( onlineUpdateConfiguration() ), Qt::CTRL + Qt::Key_O );
808 _dependencyMenu =
new QMenu( _menuBar );
809 YUI_CHECK_NEW( _dependencyMenu );
810 action = _menuBar->addMenu( _dependencyMenu );
811 action->setText(_(
"&Dependencies" ));
813 _dependencyMenu->addAction( _(
"&Check Now" ),
this, SLOT( manualResolvePackageDependencies() ) );
815 _autoDependenciesAction =
new QAction( _(
"&Autocheck" ),
this );
816 _autoDependenciesAction->setCheckable(
true );
817 _dependencyMenu->addAction( _autoDependenciesAction );
819 _installRecommendedAction = _dependencyMenu->addAction(
820 _(
"Install &Recommended Packages"),
821 this, SLOT (pkgInstallRecommendedChanged(
bool)));
822 _installRecommendedAction->setCheckable(
true );
829 _optionsMenu =
new QMenu( _menuBar );
830 YUI_CHECK_NEW( _optionsMenu );
831 action = _menuBar->addMenu( _optionsMenu );
833 action->setText(_(
"&Options" ));
836 _showDevelAction = _optionsMenu->addAction( _(
"Show -de&vel Packages" ),
837 this, SLOT( pkgExcludeDevelChanged(
bool ) ), Qt::Key_F7 );
838 _showDevelAction->setCheckable(
true);
840 _excludeDevelPkgs =
new YQPkgObjList::ExcludeRule( _pkgList, QRegExp(
".*(\\d+bit)?-devel(-\\d+bit)?$" ), _pkgList->nameCol() );
841 YUI_CHECK_NEW( _excludeDevelPkgs );
842 _excludeDevelPkgs->enable(
false );
845 _showDebugAction = _optionsMenu->addAction( _(
"Show -&debuginfo/-debugsource Packages" ),
846 this, SLOT( pkgExcludeDebugChanged(
bool ) ), Qt::Key_F8 );
847 _showDebugAction->setCheckable(
true);
848 _excludeDebugInfoPkgs =
new YQPkgObjList::ExcludeRule( _pkgList, QRegExp(
".*(-\\d+bit)?-(debuginfo|debugsource)(-32bit)?$" ), _pkgList->nameCol() );
849 YUI_CHECK_NEW( _excludeDebugInfoPkgs );
850 _excludeDebugInfoPkgs->enable(
false );
853 _verifySystemModeAction = _optionsMenu->addAction( _(
"&System Verification Mode" ),
854 this, SLOT( pkgVerifySytemModeChanged(
bool ) ) );
855 _verifySystemModeAction->setCheckable(
true);
858 _cleanDepsOnRemoveAction = _optionsMenu->addAction( _(
"&Cleanup when deleting packages" ),
859 this, SLOT( pkgCleanDepsOnRemoveChanged(
bool ) ) );
860 _cleanDepsOnRemoveAction->setCheckable(
true);
862 _allowVendorChangeAction = _optionsMenu->addAction( _(
"&Allow vendor change" ),
863 this, SLOT( pkgAllowVendorChangeChanged(
bool ) ) );
864 _allowVendorChangeAction->setCheckable(
true);
872 _extrasMenu =
new QMenu( _menuBar );
873 YUI_CHECK_NEW( _extrasMenu );
874 action = _menuBar->addMenu( _extrasMenu );
875 action->setText(_(
"E&xtras" ));
877 _extrasMenu->addAction( _(
"Show &Products" ),
this, SLOT( showProducts() ) );
878 _extrasMenu->addAction( _(
"Show P&ackage Changes" ),
this, SLOT( showAutoPkgList() ), Qt::CTRL + Qt::Key_A );
879 _extrasMenu->addAction( _(
"Show &History" ),
this, SLOT( showHistory() ) );
881 _extrasMenu->addSeparator();
883 #if BRAINDEAD_LIB_NAMING_SCHEME 887 _extrasMenu->addAction( _(
"Install All Matching -&devel Packages" ),
this, SLOT( installDevelPkgs() ) );
891 _extrasMenu->addAction( _(
"Install All Matching -de&buginfo Packages" ),
this, SLOT( installDebugInfoPkgs() ) );
894 _extrasMenu->addAction( _(
"Install All Matching -debug&source Packages" ),
this, SLOT( installDebugSourcePkgs() ) );
896 _extrasMenu->addAction( _(
"Install All Matching &Recommended Packages" ),
897 this, SLOT( installRecommendedPkgs() ) );
899 _extrasMenu->addSeparator();
901 if ( _pkgConflictDialog )
902 _extrasMenu->addAction( _(
"Generate Dependency Resolver &Test Case" ),
903 _pkgConflictDialog, SLOT( askCreateSolverTestCase() ) );
905 if ( _actionResetIgnoredDependencyProblems )
906 _extrasMenu->addAction(_actionResetIgnoredDependencyProblems);
910 _extrasMenu->addAction(_patchList->actionShowRawPatchInfo);
918 _helpMenu =
new QMenu( _menuBar );
919 YUI_CHECK_NEW( _helpMenu );
920 _menuBar->addSeparator();
921 action = _menuBar->addMenu( _helpMenu );
922 action->setText(_(
"&Help" ));
928 _helpMenu->addAction( _(
"&Overview" ),
this, SLOT( help() ), Qt::Key_F1 );
931 _helpMenu->addAction( _(
"&Symbols" ),
this, SLOT( symbolHelp() ), Qt::SHIFT + Qt::Key_F1 );
934 _helpMenu->addAction( _(
"&Keys" ),
this, SLOT( keyboardHelp() ) );
941 bool hasUpdateSignal )
943 if ( ! filter )
return;
944 if ( ! pkgList )
return;
948 connect( _filters, SIGNAL( currentChanged(QWidget *) ),
949 filter, SLOT ( filterIfVisible() ) );
952 connect(
this, SIGNAL( refresh() ),
953 filter, SLOT ( filterIfVisible() ) );
955 connect( filter, SIGNAL( filterStart() ),
956 pkgList, SLOT ( clear() ) );
958 connect( filter, SIGNAL( filterStart() ),
959 this, SLOT ( busyCursor() ) );
961 connect( filter, SIGNAL( filterMatch( ZyppSel, ZyppPkg ) ),
962 pkgList, SLOT ( addPkgItem ( ZyppSel, ZyppPkg ) ) );
964 connect( filter, SIGNAL( filterFinished() ),
965 pkgList, SLOT ( resort() ) );
967 connect( filter, SIGNAL( filterFinished() ),
968 pkgList, SLOT ( selectSomething() ) );
970 connect( filter, SIGNAL( filterFinished() ),
971 pkgList, SLOT ( logExcludeStatistics() ) );
973 connect( filter, SIGNAL( filterFinished() ),
974 pkgList, SLOT ( setFocus() ) );
976 connect( filter, SIGNAL( filterFinished() ),
977 this, SLOT ( normalCursor() ) );
980 if ( hasUpdateSignal && _filters->diskUsageList() )
982 connect( filter, SIGNAL( updatePackages() ),
983 pkgList, SLOT ( updateItemStates() ) );
985 if ( _filters->diskUsageList() )
987 connect( filter, SIGNAL( updatePackages() ),
988 _filters->diskUsageList(), SLOT ( updateDiskUsage() ) );
997 connectFilter( _updateProblemFilterView, _pkgList,
false );
998 connectFilter( _patternList, _pkgList );
999 connectFilter( _langList, _pkgList );
1000 connectFilter( _repoFilterView, _pkgList,
false );
1001 connectFilter( _serviceFilterView, _pkgList,
false );
1002 connectFilter( _packageKitGroupsFilterView, _pkgList,
false );
1003 connectFilter( _rpmGroupTagsFilterView, _pkgList,
false );
1004 connectFilter( _statusFilterView, _pkgList,
false );
1005 connectFilter( _searchFilterView, _pkgList,
false );
1010 if ( _searchFilterView && _pkgList )
1012 connect( _searchFilterView, SIGNAL( message(
const QString & ) ),
1013 _pkgList, SLOT ( message(
const QString & ) ) );
1016 if ( _repoFilterView && _pkgList )
1018 connect( _repoFilterView, SIGNAL( filterNearMatch ( ZyppSel, ZyppPkg ) ),
1019 _pkgList, SLOT ( addPkgItemDimmed ( ZyppSel, ZyppPkg ) ) );
1022 if ( _serviceFilterView && _pkgList )
1024 connect( _serviceFilterView, SIGNAL( filterNearMatch ( ZyppSel, ZyppPkg ) ),
1025 _pkgList, SLOT ( addPkgItemDimmed ( ZyppSel, ZyppPkg ) ) );
1028 if ( _pkgList && _filters->diskUsageList() )
1031 connect( _pkgList, SIGNAL( statusChanged() ),
1032 _filters->diskUsageList(), SLOT ( updateDiskUsage() ) );
1043 if ( _pkgConflictDialog )
1047 connect( _pkgConflictDialog, SIGNAL( updatePackages() ),
1048 _pkgList, SLOT ( updateItemStates() ) );
1053 connect( _pkgConflictDialog, SIGNAL( updatePackages() ),
1054 _patternList, SLOT ( updateItemStates() ) );
1058 if ( _filters->diskUsageList() )
1060 connect( _pkgConflictDialog, SIGNAL( updatePackages() ),
1061 _filters->diskUsageList(), SLOT ( updateDiskUsage() ) );
1070 if ( _pkgVersionsView && _pkgList )
1072 connect( _pkgVersionsView, SIGNAL( candidateChanged( ZyppObj ) ),
1073 _pkgList, SLOT ( updateItemData() ) );
1075 connect( _pkgVersionsView, SIGNAL( statusChanged() ),
1076 _pkgList, SLOT ( updateItemData() ) );
1084 QShortcut * accel =
new QShortcut( Qt::Key_F2,
this, SLOT( hotkeyInsertPatchFilterView() ) );
1085 YUI_CHECK_NEW( accel );
1091 if ( _pkgMenu && _pkgList )
1093 connect( _pkgMenu, SIGNAL( aboutToShow() ),
1094 _pkgList, SLOT ( updateActions() ) );
1097 if ( _patchMenu && _patchList )
1099 connect( _patchMenu, SIGNAL( aboutToShow() ),
1100 _patchList, SLOT ( updateActions() ) );
1108 if ( _autoDependenciesAction && ! _autoDependenciesAction->isChecked() )
1111 resolveDependencies();
1118 if ( ! _pkgConflictDialog )
1120 yuiError() <<
"No package conflict dialog existing" << std::endl;
1121 return QDialog::Accepted;
1125 int result = _pkgConflictDialog->solveAndShowConflicts();
1128 #if DEPENDENCY_FEEDBACK_IF_OK 1130 if ( result == QDialog::Accepted )
1132 QMessageBox::information(
this,
"",
1133 _(
"All package dependencies are OK." ),
1145 if ( ! _patchFilterView )
1148 YUI_CHECK_NEW( _patchFilterView );
1149 _filters->addPage( _(
"P&atches" ), _patchFilterView,
"patches" );
1151 _patchList = _patchFilterView->patchList();
1152 YUI_CHECK_PTR( _patchList );
1162 if ( ! _patchFilterView )
1164 yuiMilestone() <<
"Activating patches filter view" << std::endl;
1166 addPatchFilterView();
1169 _filters->showPage( _patchFilterView );
1171 _patchList->filter();
1175 _filters->showPage( _patchFilterView );
1183 if ( _pkgList && _patchList )
1185 connectFilter( _patchList, _pkgList );
1187 connect( _patchList, SIGNAL( filterMatch (
const QString &,
const QString &, FSize ) ),
1188 _pkgList, SLOT ( addPassiveItem(
const QString &,
const QString &, FSize ) ) );
1190 connect( _patchList, SIGNAL( statusChanged() ),
1191 this, SLOT ( autoResolveDependencies() ) );
1193 if ( _pkgConflictDialog )
1195 connect( _pkgConflictDialog,SIGNAL( updatePackages() ),
1196 _patchList, SLOT ( updateItemStates() ) );
1199 connect(
this, SIGNAL( refresh() ),
1200 _patchList, SLOT ( updateItemStates() ) );
1209 QString filename = YQApplication::askForSaveFileName( QString( DEFAULT_EXPORT_FILE_NAME ),
1210 QString(
"*.xml;;*" ),
1211 _(
"Save Package List" ) );
1213 if ( ! filename.isEmpty() )
1215 zypp::syscontent::Writer writer;
1216 const zypp::ResPool & pool = zypp::getZYpp()->pool();
1220 for_each( pool.begin(), pool.end(),
1221 boost::bind( &zypp::syscontent::Writer::addIf,
1222 boost::ref( writer ),
1234 std::ofstream exportFile( toUTF8( filename ).c_str() );
1235 exportFile.exceptions( std::ios_base::badbit | std::ios_base::failbit );
1236 exportFile << writer;
1238 yuiMilestone() <<
"Package list exported to " << filename << std::endl;
1240 catch ( std::exception & exception )
1242 yuiWarning() <<
"Error exporting package list to " << filename << std::endl;
1246 QFile::remove(filename);
1249 QMessageBox::warning(
this,
1251 _(
"Error exporting package list to %1" ).arg( filename ),
1252 QMessageBox::Ok | QMessageBox::Default,
1263 QString filename = QFileDialog::getOpenFileName(
this, _(
"Load Package List" ), DEFAULT_EXPORT_FILE_NAME,
1267 if ( ! filename.isEmpty() )
1269 yuiMilestone() <<
"Importing package list from " << filename << std::endl;
1273 std::ifstream importFile( toUTF8( filename ).c_str() );
1274 zypp::syscontent::Reader reader( importFile );
1280 typedef zypp::syscontent::Reader::Entry ZyppReaderEntry;
1281 typedef std::pair<string, ZyppReaderEntry> ImportMapPair;
1283 map<string, ZyppReaderEntry> importPkg;
1284 map<string, ZyppReaderEntry> importPatterns;
1286 for ( zypp::syscontent::Reader::const_iterator it = reader.begin();
1290 string kind = it->kind();
1292 if ( kind ==
"package" ) importPkg.insert ( ImportMapPair( it->name(), *it ) );
1293 else if ( kind ==
"pattern" ) importPatterns.insert( ImportMapPair( it->name(), *it ) );
1296 yuiDebug() <<
"Found " << importPkg.size()
1297 <<
" packages and " << importPatterns.size()
1298 <<
" patterns in " << filename
1306 for ( ZyppPoolIterator it = zyppPatternsBegin();
1307 it != zyppPatternsEnd();
1310 ZyppSel selectable = *it;
1311 importSelectable( *it, importPatterns.find( selectable->name() ) != importPatterns.end(),
"pattern" );
1314 for ( ZyppPoolIterator it = zyppPkgBegin();
1318 ZyppSel selectable = *it;
1319 importSelectable( *it, importPkg.find( selectable->name() ) != importPkg.end(),
"package" );
1329 if ( _statusFilterView )
1333 _filters->showPage( _statusFilterView );
1334 _statusFilterView->filter();
1338 catch (
const zypp::Exception & exception )
1340 yuiWarning() <<
"Error reading package list from " << filename << std::endl;
1343 QMessageBox::warning(
this,
1345 _(
"Error loading package list from %1" ).arg( filename ),
1346 QMessageBox::Ok | QMessageBox::Default,
1347 QMessageBox::NoButton,
1348 QMessageBox::NoButton );
1359 ZyppStatus oldStatus = selectable->status();
1360 ZyppStatus newStatus = oldStatus;
1368 switch ( oldStatus )
1372 case S_KeepInstalled:
1376 newStatus = oldStatus;
1381 newStatus = S_KeepInstalled;
1382 yuiDebug() <<
"Keeping " << kind <<
" " << selectable->name() << std::endl;
1388 if ( selectable->hasCandidateObj() )
1390 newStatus = S_Install;
1391 yuiDebug() <<
"Adding " << kind <<
" " << selectable->name() << std::endl;
1395 yuiDebug() <<
"Can't add " << kind <<
" " << selectable->name()
1396 <<
": No candidate" << std::endl;
1407 switch ( oldStatus )
1411 case S_KeepInstalled:
1416 yuiDebug() <<
"Deleting " << kind <<
" " << selectable->name() << std::endl;
1423 newStatus = oldStatus;
1428 if ( oldStatus != newStatus )
1429 selectable->setStatus( newStatus );
1439 int count = _pkgList->globalSetPkgStatus( S_Update, force,
1441 yuiMilestone() << count <<
" pkgs found for update" << std::endl;
1443 if ( count >= GLOBAL_UPDATE_CONFIRMATION_THRESHOLD )
1445 if ( QMessageBox::question(
this,
"",
1447 _(
"%1 packages will be updated" ).arg( count ),
1448 _(
"&Continue" ), _(
"C&ancel" ),
1457 (void) _pkgList->globalSetPkgStatus( S_Update, force,
1460 if ( _statusFilterView )
1462 _filters->showPage( _statusFilterView );
1463 _statusFilterView->clear();
1464 _statusFilterView->showTransactions();
1465 _statusFilterView->filter();
1472 zypp::ResPool::repository_iterator it;
1473 _repoUpgradeLabel->setText(
"");
1474 _repoUpgradingLabel->setText(
"");
1478 for ( it = zypp::getZYpp()->pool().knownRepositoriesBegin();
1479 it != zypp::getZYpp()->pool().knownRepositoriesEnd();
1482 zypp::Repository repo(*it);
1485 if ( zypp::getZYpp()->resolver()->upgradingRepo(repo) )
1487 _repoUpgradingLabel->setText(_repoUpgradingLabel->text() + _(
"<p><small><a href=\"repoupgraderemove:///%1\">Cancel switching</a> system packages to versions in repository %2</small></p>")
1488 .arg(fromUTF8(repo.alias().c_str()))
1489 .arg(fromUTF8(repo.name().c_str()))
1494 for ( it = zypp::getZYpp()->pool().knownRepositoriesBegin();
1495 it != zypp::getZYpp()->pool().knownRepositoriesEnd();
1498 zypp::Repository repo(*it);
1502 if ( ! zypp::getZYpp()->resolver()->upgradingRepo(repo) &&
1503 ! repo.isSystemRepo() &&
1504 _repoFilterView->selectedRepo() == repo )
1506 _repoUpgradeLabel->setText(_repoUpgradeLabel->text() + _(
"<p><a href=\"repoupgradeadd:///%1\">Switch system packages</a> to the versions in this repository (%2)</p>")
1507 .arg(fromUTF8(repo.alias().c_str()))
1508 .arg(fromUTF8(repo.name().c_str()))
1512 _repoUpgradeLabel->setVisible(!_repoUpgradeLabel->text().isEmpty() &&
1513 _repoFilterView->isVisible() );
1514 _repoUpgradingLabel->setVisible(!_repoUpgradingLabel->text().isEmpty());
1520 yuiDebug() <<
"link " << link <<
" clicked on label" << std::endl;
1523 if (url.scheme() ==
"repoupgradeadd")
1525 yuiDebug() <<
"looking for repo " << url.path() << std::endl;
1526 std::string alias(url.path().remove(0,1).toStdString());
1527 zypp::Repository repo(zypp::getZYpp()->pool().reposFind(alias));
1528 yuiDebug() << repo << std::endl;
1530 if ( repo != zypp::Repository::noRepository )
1531 zypp::getZYpp()->resolver()->addUpgradeRepo(repo);
1533 else if (url.scheme() ==
"repoupgraderemove")
1535 std::string alias(url.path().remove(0,1).toStdString());
1536 zypp::Repository repo(zypp::getZYpp()->pool().reposFind(alias));
1538 if ( repo != zypp::Repository::noRepository )
1539 zypp::getZYpp()->resolver()->removeUpgradeRepo(repo);
1542 yuiDebug() <<
"unknown link operation " << url.scheme() << std::endl;
1544 resolveDependencies();
1564 installSubPkgs(
"-devel" );
1571 installSubPkgs(
"-debuginfo" );
1578 installSubPkgs(
"-debugsource" );
1585 zypp::getZYpp()->resolver()->setIgnoreAlreadyRecommended(
false );
1586 resolveDependencies();
1588 if ( _filters && _statusFilterView )
1590 _filters->showPage( _statusFilterView );
1591 _statusFilterView->filter();
1595 _(
"Added Subpackages:" ),
1598 YQPkgChangesDialog::FilterAutomatic,
1599 YQPkgChangesDialog::OptionNone );
1606 if ( _optionsMenu && _pkgList )
1608 if ( _excludeDebugInfoPkgs )
1609 _excludeDebugInfoPkgs->enable( ! on );
1611 _pkgList->applyExcludeRules();
1617 YQPackageSelector::pkgExcludeDevelChanged(
bool on )
1619 if ( _optionsMenu && _pkgList )
1621 if ( _excludeDevelPkgs )
1622 _excludeDevelPkgs->enable( ! on );
1624 _pkgList->applyExcludeRules();
1630 YQPackageSelector::pkgVerifySytemModeChanged(
bool on )
1632 zypp::getZYpp()->resolver()->setSystemVerification( on );
1636 YQPackageSelector::pkgInstallRecommendedChanged(
bool on )
1638 zypp::getZYpp()->resolver()->setOnlyRequires( !on );
1639 resolveDependencies();
1643 YQPackageSelector::pkgCleanDepsOnRemoveChanged(
bool on )
1645 zypp::getZYpp()->resolver()->setCleandepsOnRemove( on );
1646 resolveDependencies();
1651 YQPackageSelector::pkgAllowVendorChangeChanged(
bool on )
1653 zypp::getZYpp()->resolver()->setAllowVendorChange( on );
1654 resolveDependencies();
1664 QMap<QString, ZyppSel> subPkgs;
1666 for ( ZyppPoolIterator it = zyppPkgBegin();
1670 QString name = (*it)->name().c_str();
1672 if ( name.endsWith( suffix ) || name.endsWith( suffix +
"-32bit" ) )
1674 subPkgs[ name ] = *it;
1676 yuiDebug() <<
"Found subpackage: " << name << std::endl;
1683 for ( ZyppPoolIterator it = zyppPkgBegin();
1687 QString name = (*it)->name().c_str();
1689 if ( subPkgs.contains( name + suffix ) )
1691 QString subPkgName( name + suffix );
1692 ZyppSel subPkg = subPkgs[ subPkgName ];
1694 switch ( (*it)->status() )
1702 yuiMilestone() <<
"Ignoring unwanted subpackage " << subPkgName << std::endl;
1707 case S_KeepInstalled:
1711 if ( ! subPkg->installedObj() )
1713 subPkg->setStatus( S_Install );
1714 yuiMilestone() <<
"Installing subpackage " << subPkgName << std::endl;
1724 if ( ! subPkg->installedObj() )
1726 subPkg->setStatus( S_Install );
1727 yuiMilestone() <<
"Installing subpackage " << subPkgName << std::endl;
1731 subPkg->setStatus( S_Update );
1732 yuiMilestone() <<
"Updating subpackage " << subPkgName << std::endl;
1743 if ( _filters && _statusFilterView )
1745 _filters->showPage( _statusFilterView );
1746 _statusFilterView->filter();
1750 _(
"Added Subpackages:" ),
1751 QRegExp(
".*" + suffix +
"$" ),
1754 YQPkgChangesDialog::FilterAutomatic,
1755 YQPkgChangesDialog::OptionNone );
1761 QString settingsName =
"YQPackageSelector";
1762 if ( onlineUpdateMode() ) settingsName =
"YQOnlineUpdate";
1763 if ( updateMode() ) settingsName =
"YQSystemUpdate";
1765 QSettings settings( QSettings::UserScope, SETTINGS_DIR, settingsName );
1767 _showDevelAction->setChecked(settings.value(
"Options/showDevelPackages",
true).toBool());
1768 pkgExcludeDevelChanged(_showDevelAction->isChecked());
1770 _showDebugAction->setChecked(settings.value(
"Options/showDebugPackages",
true).toBool());
1771 pkgExcludeDebugChanged(_showDebugAction->isChecked());
1773 loadCommonSettings();
1777 YQPackageSelector::loadCommonSettings()
1779 map<string, string> sysconfig = zypp::base::sysconfig::read(PATH_TO_YAST_SYSCONFIG);
1781 bool auto_check = AUTO_CHECK_DEPENDENCIES_DEFAULT;
1782 auto it = sysconfig.find(OPTION_AUTO_CHECK);
1783 if (it != sysconfig.end())
1785 auto_check = it->second ==
"yes";
1787 _autoDependenciesAction->setChecked(auto_check);
1789 bool verify_system = zypp::getZYpp()->resolver()->systemVerification();
1790 it = sysconfig.find(OPTION_VERIFY);
1791 if (it != sysconfig.end())
1793 verify_system = it->second ==
"yes";
1795 _verifySystemModeAction->setChecked(verify_system);
1796 pkgVerifySytemModeChanged(verify_system);
1798 bool install_recommended = ! zypp::getZYpp()->resolver()->onlyRequires();
1799 it = sysconfig.find(OPTION_RECOMMENDED);
1800 if (it != sysconfig.end())
1802 install_recommended = it->second ==
"yes";
1804 _installRecommendedAction->setChecked(install_recommended);
1805 pkgInstallRecommendedChanged(install_recommended);
1807 bool allow_vendor_change = zypp::getZYpp()->resolver()->allowVendorChange();
1808 _allowVendorChangeAction->setChecked(allow_vendor_change);
1809 pkgAllowVendorChangeChanged(allow_vendor_change);
1811 bool clean_deps_on_remove = zypp::getZYpp()->resolver()->cleandepsOnRemove();
1812 _cleanDepsOnRemoveAction->setChecked(clean_deps_on_remove);
1813 pkgCleanDepsOnRemoveChanged(clean_deps_on_remove);
1819 QString settingsName =
"YQPackageSelector";
1820 if ( onlineUpdateMode() ) settingsName =
"YQOnlineUpdate";
1821 if ( updateMode() ) settingsName =
"YQSystemUpdate";
1823 QSettings settings( QSettings::UserScope, SETTINGS_DIR, settingsName );
1825 settings.setValue(
"Options/showDevelPackages", _showDevelAction->isChecked() );
1826 settings.setValue(
"Options/showDebugPackages", _showDebugAction->isChecked() );
1828 saveCommonSettings();
1832 YQPackageSelector::saveCommonSettings()
1836 zypp::base::sysconfig::writeStringVal(
1837 PATH_TO_YAST_SYSCONFIG,
1839 ( _autoDependenciesAction->isChecked() ?
"yes" :
"no"),
1840 "Automatic dependency checking");
1841 zypp::base::sysconfig::writeStringVal(
1842 PATH_TO_YAST_SYSCONFIG,
1844 (_verifySystemModeAction->isChecked() ?
"yes" :
"no"),
1845 "System verification mode");
1846 zypp::base::sysconfig::writeStringVal(
1847 PATH_TO_YAST_SYSCONFIG,
1849 (_installRecommendedAction->isChecked() ?
"yes" :
"no"),
1850 "Install recommended packages");
1852 catch(
const std::exception &e )
1854 yuiError() <<
"Writing " << PATH_TO_YAST_SYSCONFIG <<
" failed" << std::endl;
1860 YQUI::ui()->busyCursor();
1865 YQUI::ui()->normalCursor();
1869 #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.
void normalCursor()
Show the standard cursor (arrow)
Filter view for PackageKit groups.
static bool any_service()
Is any enabled libzypp service present?
static int countEnabledRepositories()
Returns the number of enabled repositories.
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.
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'.
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 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.