41 #define YUILogComponent "ncurses-pkg"
44 #include "NCPkgMenuDeps.h"
45 #include "NCPackageSelector.h"
47 #define CHECK_BOX "[ ] "
48 #define NO_CHECK_BOX " "
56 NCPkgMenuDeps::NCPkgMenuDeps (YWidget *parent, std::string label,
NCPackageSelector *pkger )
57 : NCMenuButton( parent, label)
63 NCPkgMenuDeps::~NCPkgMenuDeps()
68 void NCPkgMenuDeps::setSelected( YMenuItem *item,
bool selected)
70 std::string oldLabel = item->label();
73 if ( item == cleanDepsOnRemove || item == allowVendorChange )
76 std::string newLabel = oldLabel.replace(1,1,1, selected ? sel :
' ');
78 item->setLabel( newLabel);
81 void NCPkgMenuDeps::createLayout()
84 autoCheckDeps =
new YMenuItem( CHECK_BOX + _(
"&Automatic Dependency Check" ) );
85 items.push_back( autoCheckDeps );
86 setSelected( autoCheckDeps, pkg->AutoCheck() );
88 checkNow =
new YMenuItem( NO_CHECK_BOX + _(
"&Check Dependencies Now" ) );
89 items.push_back( checkNow );
91 verifySystemOpt =
new YMenuItem( CHECK_BOX + _(
"&System Verification Mode" ) );
92 items.push_back( verifySystemOpt );
93 setSelected( verifySystemOpt, pkg->VerifySystem() );
95 verifySystem =
new YMenuItem( NO_CHECK_BOX + _(
"&Verify System Now" ) );
96 items.push_back( verifySystem );
98 installAlreadyRecommendedOpt =
new YMenuItem( CHECK_BOX + _(
"&Install Recommended Packages for Already Installed Packages" ) );
99 items.push_back( installAlreadyRecommendedOpt );
100 setSelected( installAlreadyRecommendedOpt, pkg->InstallRecommended() );
102 cleanDepsOnRemove =
new YMenuItem( CHECK_BOX + _(
"&Cleanup when Deleting Packages (Temporary Change)" ));
103 items.push_back ( cleanDepsOnRemove );
104 setSelected( cleanDepsOnRemove, pkg->isCleanDepsOnRemove() );
106 allowVendorChange =
new YMenuItem( CHECK_BOX + _(
"&Allow Vendor Change (Temporary Change)" ) );
107 items.push_back ( allowVendorChange );
108 setSelected( allowVendorChange, pkg->isAllowVendorChange() );
110 testCase =
new YMenuItem( NO_CHECK_BOX + _(
"&Generate Dependency Solver Testcase" ) );
111 items.push_back( testCase );
116 bool NCPkgMenuDeps::handleEvent(
const NCursesEvent & event)
118 if (!event.selection)
121 if (event.selection == checkNow )
122 return checkDependencies();
123 else if (event.selection == autoCheckDeps)
124 return setAutoCheck();
125 else if (event.selection == verifySystem)
127 else if (event.selection == verifySystemOpt )
128 return setVerifySystem();
129 else if (event.selection == cleanDepsOnRemove )
130 return setCleanDepsOnRemove();
131 else if (event.selection == installAlreadyRecommendedOpt )
132 return setInstallAlreadyRecommended();
133 else if (event.selection == allowVendorChange )
134 return setAllowVendorChange();
135 else if (event.selection == testCase)
136 return generateTestcase();
140 bool NCPkgMenuDeps::checkDependencies()
142 NCPopupInfo * info =
new NCPopupInfo( wpos( (NCurses::lines()-5)/2, (NCurses::cols()-35)/2 ),
"",
143 _(
"All package dependencies are OK." ),
145 info->setPreferredSize( 35, 5 );
149 if ( pkg->DepsPopup() )
151 yuiMilestone() <<
"Checking dependencies" << endl;
152 pkg->checkNow ( &ok );
157 info->showInfoPopup();
158 YDialog::deleteTopmostDialog();
168 bool NCPkgMenuDeps::generateTestcase()
170 std::string testCaseDir =
"/var/log/YaST2/solverTestcase";
172 yuiMilestone() <<
"Generating solver test case START" << endl;
173 bool success = zypp::getZYpp()->resolver()->createSolverTestcase( testCaseDir );
174 yuiMilestone() <<
"Generating solver test case END" << endl;
178 NCPopupInfo * info =
new NCPopupInfo( wpos( (NCurses::lines()-8)/2, (NCurses::cols()-40)/2 ),
180 _(
"Dependency resolver test case written to " ) +
"<br>"
183 info->setPreferredSize( 40, 8 );
184 info->showInfoPopup( );
186 YDialog::deleteTopmostDialog();
192 bool NCPkgMenuDeps::setAutoCheck()
194 pkg->setAutoCheck( !pkg->AutoCheck() );
195 setSelected( autoCheckDeps, pkg->AutoCheck() );
200 bool NCPkgMenuDeps::setVerifySystem()
202 pkg->setVerifySystem( !pkg->VerifySystem() );
203 setSelected( verifySystemOpt, pkg->VerifySystem() );
208 bool NCPkgMenuDeps::setCleanDepsOnRemove()
210 pkg->setCleanDepsOnRemove( !pkg->isCleanDepsOnRemove() );
211 setSelected( cleanDepsOnRemove, pkg->isCleanDepsOnRemove() );
216 bool NCPkgMenuDeps::setInstallAlreadyRecommended()
218 pkg->setInstallAlreadyRecommended( !pkg->InstallRecommended() );
219 setSelected( installAlreadyRecommendedOpt, pkg->InstallRecommended() );
225 bool NCPkgMenuDeps::setAllowVendorChange()
227 pkg->setAllowVendorChange( !pkg->isAllowVendorChange() );
228 setSelected( allowVendorChange, pkg->isAllowVendorChange() );
233 bool NCPkgMenuDeps::verify()
237 yuiMilestone() <<
"Verifying system" << endl;
241 pkg->systemVerification( &ok );
247 _(
"Automatic Changes"),
249 _(
"To fulfill the dependencies of already installed packages following"),
251 _(
"packages have been automatically selected for installation:")
253 NCursesEvent input = autoChangePopup->showInfoPopup();
255 if ( input == NCursesEvent::cancel )
260 if ( ok && input == NCursesEvent::button )
263 NCPopupInfo * info =
new NCPopupInfo( wpos( (NCurses::lines()-5)/2, (NCurses::cols()-30)/2 ),
265 _(
"System dependencies verify OK." ),
268 info->setPreferredSize( 35, 5 );
269 info->showInfoPopup();
270 YDialog::deleteTopmostDialog();
273 YDialog::deleteTopmostDialog();
278 setSelected( verifySystemOpt,
true );
static const std::string OKLabel()