Author: gs
Date: Wed Jun 4 12:18:45 2008
New Revision: 48053
URL: http://svn.opensuse.org/viewcvs/yast?rev=48053&view=rev
Log:
Improve dependency popup: show solution details (NCRichText),
only add NCSpacing if there's enough space
Modified:
trunk/ncurses-pkg/package/yast2-ncurses-pkg.changes
trunk/ncurses-pkg/src/NCPkgPopupDeps.cc
trunk/ncurses-pkg/src/NCPkgPopupDeps.h
Modified: trunk/ncurses-pkg/package/yast2-ncurses-pkg.changes
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ncurses-pkg/package/yast2-ncurses-pkg.changes?rev=48053&r1=48052&r2=48053&view=diff
==============================================================================
--- trunk/ncurses-pkg/package/yast2-ncurses-pkg.changes (original)
+++ trunk/ncurses-pkg/package/yast2-ncurses-pkg.changes Wed Jun 4 12:18:45 2008
@@ -1,4 +1,10 @@
-------------------------------------------------------------------
+Wed Jun 4 12:13:54 CEST 2008 - gs@suse.de
+
+- Improve dependency popup: show solution details (NCRichText),
+ only add NCSpacing if there's enough space
+
+-------------------------------------------------------------------
Thu May 29 10:12:08 CEST 2008 - gs@suse.de
- Show the status of a language pattern and make installation
Modified: trunk/ncurses-pkg/src/NCPkgPopupDeps.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ncurses-pkg/src/NCPkgPopupDeps.cc?rev=48053&r1=48052&r2=48053&view=diff
==============================================================================
--- trunk/ncurses-pkg/src/NCPkgPopupDeps.cc (original)
+++ trunk/ncurses-pkg/src/NCPkgPopupDeps.cc Wed Jun 4 12:18:45 2008
@@ -44,7 +44,7 @@
typedef NCProblemSelectionBox Self;
NCProblemSelectionBox (const Self &); // prohibit copying
Self & operator= (const Self &); // prohibit assignment
-
+
NCPkgPopupDeps * depsPopup; // to notify about changes
protected:
@@ -66,7 +66,8 @@
Self & operator= (const Self &); // prohibit assignment
NCPkgPopupDeps * depsPopup;
-
+ std::map detailsMap;
+
protected:
virtual NCursesEvent wHandleInput( wint_t ch );
@@ -77,6 +78,7 @@
, depsPopup (aDepsPopup) {}
virtual ~NCSolutionSelectionBox () {}
+ void saveDetails( YItem * item, string details ) { detailsMap[item] = details; }
};
using namespace std;
@@ -96,6 +98,7 @@
, solutionw( 0 )
, head( 0 )
, details( 0 )
+ , solDetails( 0 )
, packager( pkger )
, problemw( 0 )
@@ -129,38 +132,53 @@
// vertical split is the (only) child of the dialog
NCLayoutBox * vSplit = new NCLayoutBox( this, YD_VERT );
- // FIXME
- // opt.vWeight.setValue( 40 );
-
vSplit->setNotify( true );
new NCSpacing( vSplit, YD_VERT, false, 1 );
- head = new NCLabel( vSplit, "", true, false ); // isHeading = true
+ head = new NCLabel( vSplit, "", true ); // isHeading = true
- new NCSpacing( vSplit, YD_VERT, false, 1 );
+ // only add spacings if there's enough space
+ if ( this->preferredHeight() > 25 )
+ new NCSpacing( vSplit, YD_VERT, false, 1 );
+
+ NCAlignment * left = new NCAlignment( vSplit, YAlignBegin, YAlignUnchanged );
+ left->setWeight(YD_VERT, 30 );
- // add the list containing packages with unresolved dependencies
- problemw = new NCProblemSelectionBox( vSplit, _("&Problems"), this);
+ // the list containing the problems (the unresolved package dependencies)
+ problemw = new NCProblemSelectionBox( left, _("&Problems"), this);
problemw->setStretchable( YD_HORIZ, true );
- new NCSpacing( vSplit, YD_VERT, false, 1 );
+ NCAlignment * left1 = new NCAlignment( vSplit, YAlignBegin, YAlignUnchanged );
+ left1->setWeight(YD_VERT, 10 );
- NCAlignment * left = new NCAlignment( vSplit, YAlignBegin, YAlignUnchanged );
+ // show the details of the problem
+ details = new NCLabel ( left1, "", false, true ); // heading = false,
+ details->setStretchable( YD_HORIZ, true ); // outputField = true
- // heading = false, outputField = true
- details = new NCLabel ( left,"", false, true );
-
- new NCSpacing( vSplit, YD_VERT, false, 1 ); // stretchable = true
+ if ( this->preferredHeight() > 25 )
+ new NCSpacing( vSplit, YD_VERT, false, 0.5 ); // stretchable = false
- // add the package list containing the dependencies
- solutionw = new NCSolutionSelectionBox ( vSplit, _("Possible &Solutions"), this);
+ NCAlignment * left2 = new NCAlignment( vSplit, YAlignBegin, YAlignUnchanged );
+ left2->setWeight( YD_VERT, 30 );
+
+ // the list containing the solutions of a dependency problem
+ solutionw = new NCSolutionSelectionBox ( left2, _("Possible &Solutions"), this);
+
+ if ( this->preferredHeight() > 25 )
+ new NCSpacing( vSplit, YD_VERT, false, 1 );
+
+ NCAlignment * left3 = new NCAlignment( vSplit, YAlignBegin, YAlignUnchanged );
+ left3->setWeight( YD_VERT, 30 );
+
+ // show the details of the solution
+ solDetails = new NCRichText ( left3, "", true ); // plain text mode = true
- new NCSpacing( vSplit, YD_VERT, false, 1 ); // stretchable = false
+ if ( this->preferredHeight() > 25 )
+ new NCSpacing( vSplit, YD_VERT, false, 1 ); // stretchable = false
NCLayoutBox * hSplit = new NCLayoutBox( vSplit, YD_HORIZ );
-
-
+
// add the solve button
solveButton = new NCPushButton( hSplit, NCPkgStrings::SolveLabel() );
solveButton->setFunctionKey( 10 );
@@ -170,8 +188,9 @@
// add the cancel button
cancelButton = new NCPushButton( hSplit, NCPkgStrings::CancelLabel() );
cancelButton->setFunctionKey( 9 );
-
- new NCSpacing( vSplit, YD_VERT, false, 1 ); // stretchable = false
+
+ if ( this->preferredHeight() > 25 )
+ new NCSpacing( vSplit, YD_VERT, false, 0.5 ); // stretchable = false
}
///////////////////////////////////////////////////////////////////
@@ -260,15 +279,15 @@
e = rproblems.end (),
i;
int idx;
- yuiMilestone() << "PROBLEMS" << endl;
+
for (i = b, idx = 0; i != e; ++i, ++idx)
{
- yuiMilestone() << "PROB " << (*i)->description () << endl;
- yuiMilestone() << ": " << (*i)->details () << endl;
+ yuiMilestone() << "Problem: " << (*i)->description () << endl;
+ yuiMilestone() << "Details: " << (*i)->details () << endl;
// no solution yet
problems.push_back (make_pair (*i, zypp::ProblemSolution_Ptr ()));
- //problemw->itemAdded ((*i)->description (), idx, false /*selected*/);
+
problemw->addItem( (*i)->description(), false ); // selected: false
}
@@ -298,14 +317,34 @@
bb = solutions.begin (),
ee = solutions.end (),
ii;
+
+ bool showDetails = true;;
+ string description;
+
for (ii = bb; ii != ee; ++ii) {
- yuiMilestone() << " SOL " << (*ii)->description () << endl;
- yuiMilestone() << " : " << (*ii)->details () << endl;
+ yuiMilestone() << "Solution: " << (*ii)->description () << endl;
+ yuiMilestone() << "Details: " << (*ii)->details () << endl;
+ yuiMilestone() << "User decision: " << user_solution << endl;
- solutionw->addItem( new YItem ( (*ii)->description(), // label
- (user_solution == *ii) ) ); // selected
+ description = (*ii)->description();
- yuiMilestone() << "usr: " << user_solution << " cur: " << *ii << endl;
+ if ( !((*ii)->details().empty()) )
+ // hint for the user: more information below
+ description += _(" see below");
+
+ if ( showDetails )
+ {
+ showSolutionDetails( (*ii)->details() ); // show details of 1. solution
+ showDetails = false;
+ }
+
+ YItem *newItem = new YItem ( description, // text
+ (user_solution == *ii) ); // selected ?
+
+ solutionw->addItem( newItem );
+ solutionw->saveDetails( newItem, (*ii)->details() );
+
+ yuiDebug() << "Solution: " << (*ii) << endl; // Complete info
}
solutionw->doneMultipleChanges();
@@ -470,6 +509,21 @@
problems[prob_num] = make_pair (problem, sol);
}
+void NCPkgPopupDeps::showSolutionDetails( string details )
+{
+ string text;
+ if ( details.empty() )
+ // hint for the user: there isn't any additional information
+ // (for the currently selected solution of a dependency problem)
+ text = _("No further solution details available");
+ else
+ text = details;
+
+ if ( solDetails )
+ solDetails->setText( text );
+
+}
+
///////////////////////////////////////////////////////////////////
//
//
@@ -519,7 +573,7 @@
NCursesEvent NCSolutionSelectionBox::wHandleInput( wint_t key )
{
NCursesEvent ret = NCMultiSelectionBox::wHandleInput( key );
-
+
switch ( key )
{
case KEY_SPACE:
@@ -536,6 +590,13 @@
}
break;
}
+ case KEY_UP:
+ case KEY_DOWN: {
+ // show details
+ depsPopup->showSolutionDetails( detailsMap[currentItem()] );
+ break;
+ }
+
default: {
break;
}
Modified: trunk/ncurses-pkg/src/NCPkgPopupDeps.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ncurses-pkg/src/NCPkgPopupDeps.h?rev=48053&r1=48052&r2=48053&view=diff
==============================================================================
--- trunk/ncurses-pkg/src/NCPkgPopupDeps.h (original)
+++ trunk/ncurses-pkg/src/NCPkgPopupDeps.h Wed Jun 4 12:18:45 2008
@@ -34,7 +34,8 @@
class NCSelectionBox;
class NCMultiSelectionBox;
class NCPackageSelector;
-class NCInputField;
+class NCRichText;
+class NCSolutionSelectionBox;
namespace PkgDep {
class ErrorResult;
@@ -72,11 +73,12 @@
NCPushButton * cancelButton;
NCPushButton * solveButton;
- NCMultiSelectionBox * solutionw; // resolver problem solutions
+ NCSolutionSelectionBox * solutionw; // resolver problem solutions
NCLabel * head; // the headline
NCLabel *details; // problem details
+ NCRichText *solDetails; // solution details
NCPackageSelector * packager; // connection to the package selector
@@ -107,6 +109,8 @@
bool showSolutions( int index );
// for the currently selected problem, choose this solution
void setSolution (int index);
+ // show details
+ void showSolutionDetails( string details );
};
///////////////////////////////////////////////////////////////////
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org