libyui-ncurses-pkg  2.43.4.1
 All Classes Functions
NCPkgMenuDeps.cc
1 /****************************************************************************
2 |
3 | Copyright (c) [2002-2011] Novell, Inc.
4 | All Rights Reserved.
5 |
6 | This program is free software; you can redistribute it and/or
7 | modify it under the terms of version 2 of the GNU General Public License as
8 | published by the Free Software Foundation.
9 |
10 | This program is distributed in the hope that it will be useful,
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | GNU General Public License for more details.
14 |
15 | You should have received a copy of the GNU General Public License
16 | along with this program; if not, contact Novell, Inc.
17 |
18 | To contact Novell about this file by physical or electronic mail,
19 | you may find current contact information at www.novell.com
20 |
21 |***************************************************************************/
22 
23 
24 /*---------------------------------------------------------------------\
25 | |
26 | __ __ ____ _____ ____ |
27 | \ \ / /_ _/ ___|_ _|___ \ |
28 | \ V / _` \___ \ | | __) | |
29 | | | (_| |___) || | / __/ |
30 | |_|\__,_|____/ |_| |_____| |
31 | |
32 | core system |
33 | (C) SuSE GmbH |
34 \----------------------------------------------------------------------/
35 
36  File: NCPkgMenuDeps.cc
37 
38  Author: Hedgehog Painter <kmachalkova@suse.cz>
39 
40 /-*/
41 #define YUILogComponent "ncurses-pkg"
42 #include <YUILog.h>
43 
44 #include "NCPkgMenuDeps.h"
45 #include "NCPackageSelector.h"
46 
47 #define CHECK_BOX "[ ] "
48 #define NO_CHECK_BOX " "
49 
50 using std::endl;
51 
52 /*
53  Textdomain "ncurses-pkg"
54 */
55 
56 NCPkgMenuDeps::NCPkgMenuDeps (YWidget *parent, std::string label, NCPackageSelector *pkger )
57  : NCMenuButton( parent, label)
58  , pkg (pkger)
59 {
60  createLayout();
61 }
62 
63 NCPkgMenuDeps::~NCPkgMenuDeps()
64 {
65 
66 }
67 
68 void NCPkgMenuDeps::setSelected( YMenuItem *item, bool selected)
69 {
70  std::string oldLabel = item->label();
71  char sel = 'x';
72 
73  if ( item == cleanDepsOnRemove || item == allowVendorChange )
74  sel = '+';
75 
76  std::string newLabel = oldLabel.replace(1,1,1, selected ? sel : ' ');
77 
78  item->setLabel( newLabel);
79 }
80 
81 void NCPkgMenuDeps::createLayout()
82 {
83 
84  autoCheckDeps = new YMenuItem( CHECK_BOX + _( "&Automatic Dependency Check" ) );
85  items.push_back( autoCheckDeps );
86  setSelected( autoCheckDeps, pkg->AutoCheck() );
87 
88  checkNow = new YMenuItem( NO_CHECK_BOX + _( "&Check Dependencies Now" ) );
89  items.push_back( checkNow );
90 
91  verifySystemOpt = new YMenuItem( CHECK_BOX + _( "&System Verification Mode" ) );
92  items.push_back( verifySystemOpt );
93  setSelected( verifySystemOpt, pkg->VerifySystem() );
94 
95  verifySystem = new YMenuItem( NO_CHECK_BOX + _( "&Verify System Now" ) );
96  items.push_back( verifySystem );
97 
98  installAlreadyRecommendedOpt = new YMenuItem( CHECK_BOX + _( "&Install Recommended Packages for Already Installed Packages" ) );
99  items.push_back( installAlreadyRecommendedOpt );
100  setSelected( installAlreadyRecommendedOpt, pkg->InstallRecommended() );
101 
102  cleanDepsOnRemove = new YMenuItem( CHECK_BOX + _( "&Cleanup when Deleting Packages (Temporary Change)" ));
103  items.push_back ( cleanDepsOnRemove );
104  setSelected( cleanDepsOnRemove, pkg->isCleanDepsOnRemove() );
105 
106  allowVendorChange = new YMenuItem( CHECK_BOX + _( "&Allow Vendor Change (Temporary Change)" ) );
107  items.push_back ( allowVendorChange );
108  setSelected( allowVendorChange, pkg->isAllowVendorChange() );
109 
110  testCase = new YMenuItem( NO_CHECK_BOX + _( "&Generate Dependency Solver Testcase" ) );
111  items.push_back( testCase );
112 
113  addItems( items );
114 }
115 
116 bool NCPkgMenuDeps::handleEvent( const NCursesEvent & event)
117 {
118  if (!event.selection)
119  return false;
120 
121  if (event.selection == checkNow )
122  return checkDependencies();
123  else if (event.selection == autoCheckDeps)
124  return setAutoCheck();
125  else if (event.selection == verifySystem)
126  return verify();
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();
137  return true;
138 }
139 
140 bool NCPkgMenuDeps::checkDependencies()
141 {
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 );
146 
147  bool ok = false;
148 
149  if ( pkg->DepsPopup() )
150  {
151  yuiMilestone() << "Checking dependencies" << endl;
152  pkg->checkNow ( &ok );
153  }
154 
155  if ( ok )
156  {
157  info->showInfoPopup();
158  YDialog::deleteTopmostDialog();
159  }
160 
161  // update the package list and the disk space info
162  pkg->updatePackageList();
163  pkg->showDiskSpace();
164 
165  return true;
166 }
167 
168 bool NCPkgMenuDeps::generateTestcase()
169 {
170  std::string testCaseDir = "/var/log/YaST2/solverTestcase";
171 
172  yuiMilestone() << "Generating solver test case START" << endl;
173  bool success = zypp::getZYpp()->resolver()->createSolverTestcase( testCaseDir );
174  yuiMilestone() << "Generating solver test case END" << endl;
175 
176  if ( success )
177  {
178  NCPopupInfo * info = new NCPopupInfo( wpos( (NCurses::lines()-8)/2, (NCurses::cols()-40)/2 ),
179  "",
180  _( "Dependency resolver test case written to " ) + "<br>"
181  + testCaseDir
182  );
183  info->setPreferredSize( 40, 8 );
184  info->showInfoPopup( );
185 
186  YDialog::deleteTopmostDialog();
187  }
188  return success;
189 
190 }
191 
192 bool NCPkgMenuDeps::setAutoCheck()
193 {
194  pkg->setAutoCheck( !pkg->AutoCheck() );
195  setSelected( autoCheckDeps, pkg->AutoCheck() );
196 
197  return true;
198 }
199 
200 bool NCPkgMenuDeps::setVerifySystem()
201 {
202  pkg->setVerifySystem( !pkg->VerifySystem() );
203  setSelected( verifySystemOpt, pkg->VerifySystem() );
204 
205  return true;
206 }
207 
208 bool NCPkgMenuDeps::setCleanDepsOnRemove()
209 {
210  pkg->setCleanDepsOnRemove( !pkg->isCleanDepsOnRemove() );
211  setSelected( cleanDepsOnRemove, pkg->isCleanDepsOnRemove() );
212 
213  return true;
214 }
215 
216 bool NCPkgMenuDeps::setInstallAlreadyRecommended()
217 {
218  pkg->setInstallAlreadyRecommended( !pkg->InstallRecommended() );
219  setSelected( installAlreadyRecommendedOpt, pkg->InstallRecommended() );
220 
221  return true;
222 }
223 
224 
225 bool NCPkgMenuDeps::setAllowVendorChange()
226 {
227  pkg->setAllowVendorChange( !pkg->isAllowVendorChange() );
228  setSelected( allowVendorChange, pkg->isAllowVendorChange() );
229 
230  return true;
231 }
232 
233 bool NCPkgMenuDeps::verify()
234 {
235  bool ok = false;
236 
237  yuiMilestone() << "Verifying system" << endl;
238 
239  pkg->saveState();
240  //call the solver (with S_Verify it displays no popup)
241  pkg->systemVerification( &ok );
242 
243  //display the popup with automatic changes
244  NCPkgPopupTable * autoChangePopup = new NCPkgPopupTable( wpos( 3, 8 ), pkg );
245  NCursesEvent input = autoChangePopup->showInfoPopup();
246 
247  if ( input == NCursesEvent::cancel )
248  {
249  // user clicked on Cancel
250  pkg->restoreState();
251  }
252  if ( ok && input == NCursesEvent::button )
253  {
254  // dependencies OK, no automatic changes/the user has accepted the changes
255  NCPopupInfo * info = new NCPopupInfo( wpos( (NCurses::lines()-5)/2, (NCurses::cols()-30)/2 ),
256  "",
257  _( "System dependencies verify OK." ),
259  );
260  info->setPreferredSize( 35, 5 );
261  info->showInfoPopup();
262  YDialog::deleteTopmostDialog();
263  }
264 
265  YDialog::deleteTopmostDialog(); // delete NCPopupInfo dialog
266 
267  pkg->updatePackageList();
268  pkg->showDiskSpace();
269  // the verify call sets the option verify to true
270  setSelected( verifySystemOpt, true );
271  return true;
272 }