[Aptitude-svn-commit] r3791 - in branches/aptitude-0.3/aptitude: .
src
Daniel Burrows
dburrows at costa.debian.org
Tue Aug 9 21:27:03 UTC 2005
Author: dburrows
Date: Tue Aug 9 21:26:58 2005
New Revision: 3791
Modified:
branches/aptitude-0.3/aptitude/ChangeLog
branches/aptitude-0.3/aptitude/src/solution_screen.cc
Log:
Write a first draft of a custom treeitem class for entries in a solution.
Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog (original)
+++ branches/aptitude-0.3/aptitude/ChangeLog Tue Aug 9 21:26:58 2005
@@ -1,5 +1,10 @@
2005-08-09 Daniel Burrows <dburrows at debian.org>
+ * src/solution_screen.cc:
+
+ Write a specialized treeitem class to represent the elements of
+ a solution.
+
* src/Makefile.am, src/solution_screen.cc, src/solution_screen.h, src/ui.cc:
Initial work towards a top-level solution examination screen.
Modified: branches/aptitude-0.3/aptitude/src/solution_screen.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/solution_screen.cc (original)
+++ branches/aptitude-0.3/aptitude/src/solution_screen.cc Tue Aug 9 21:26:58 2005
@@ -32,45 +32,35 @@
using namespace std;
-struct pkg_name_lt
+struct act_name_lt
{
public:
- bool operator()(const pkgCache::PkgIterator &p1,
- const pkgCache::PkgIterator &p2) const
+ bool operator()(const aptitude_resolver::action &v1,
+ const aptitude_resolver::action &v2) const
{
- return strcmp(p1.Name(), p2.Name()) < 0;
- }
-};
-
-struct ver_name_lt
-{
-public:
- bool operator()(const pkgCache::VerIterator &v1,
- const pkgCache::VerIterator &v2) const
- {
- return strcmp(v1.ParentPkg().Name(), v2.ParentPkg().Name()) < 0;
+ return strcmp(v1.ver.get_pkg().Name(), v2.ver.get_pkg().Name()) < 0;
}
};
/** Partition the set of all packages into several vectors,
* according to the action to be performed on each package.
*
- * \param remove_packages each package to be removed will be placed in this vector.
- * \param keep_packages each package which is being kept will be placed
+ * \param remove_actions each package to be removed will be placed in this vector.
+ * \param keep_actions each package which is being kept will be placed
* in this vector.
- * \param install_packages if a package is being newly installed,
+ * \param install_actions if a package is being newly installed,
* its target version will be placed in this vector.
- * \param downgrade_packages if a package is being downgraded,
+ * \param downgrade_actions if a package is being downgraded,
* its target version will be placed in this vector.
- * \param upgrade_packages if a package is being upgraded,
+ * \param upgrade_actions if a package is being upgraded,
* its target version will be placed in this vector.
*/
-void bin_packages(const aptitude_solution &sol,
- vector<pkgCache::PkgIterator> &remove_packages,
- vector<pkgCache::PkgIterator> &keep_packages,
- vector<pkgCache::VerIterator> &install_packages,
- vector<pkgCache::VerIterator> &downgrade_packages,
- vector<pkgCache::VerIterator> &upgrade_packages)
+void bin_actions(const aptitude_solution &sol,
+ vector<aptitude_resolver::action> &remove_actions,
+ vector<aptitude_resolver::action> &keep_actions,
+ vector<aptitude_resolver::action> &install_actions,
+ vector<aptitude_resolver::action> &downgrade_actions,
+ vector<aptitude_resolver::action> &upgrade_actions)
{
for(std::map<aptitude_resolver::package,
@@ -84,14 +74,14 @@
if(curver.end())
{
if(newver.end())
- keep_packages.push_back(pkg);
+ keep_actions.push_back(i->second);
else
- install_packages.push_back(newver);
+ install_actions.push_back(i->second);
}
else if(newver.end())
- remove_packages.push_back(pkg);
+ remove_actions.push_back(i->second);
else if(newver == curver)
- keep_packages.push_back(pkg);
+ keep_actions.push_back(i->second);
else
{
int cmp=_system->VS->CmpVersion(curver.VerStr(),
@@ -106,9 +96,9 @@
/** \todo indicate "sidegrades" separately? */
if(cmp<=0)
- upgrade_packages.push_back(newver);
+ upgrade_actions.push_back(i->second);
else if(cmp>0)
- downgrade_packages.push_back(newver);
+ downgrade_actions.push_back(i->second);
}
}
}
@@ -125,6 +115,7 @@
is_first = false;
else
rval += ", ";
+
if(vf.File().Archive())
rval += vf.File().Archive();
else
@@ -160,131 +151,191 @@
}
};
+class solution_item : public vs_treeitem
+{
+ aptitude_universe::version ver;
+public:
+ solution_item(const aptitude_resolver::action &act)
+ :ver(act.ver)
+ {
+ }
+
+ const wchar_t *tag()
+ {
+ return L"";
+ }
+
+ const wchar_t *label()
+ {
+ return L"";
+ }
+
+ void paint(vs_tree *win, int y, bool hierarchical, const style &st)
+ {
+ unsigned int basex = hierarchical ? 2*get_depth() : 0;
+ unsigned int width = win->getmaxx();
+
+ unsigned int x = 0;
+
+ win->move(y, 0);
+ while(x < width && x < basex)
+ {
+ win->addch(' ');
+ ++x;
+ }
+
+ win->apply_style(st+style_attrs_flip(A_BOLD));
+ const char *name = ver.get_pkg().Name();
+ while(x < width && *name)
+ {
+ win->addch(*name);
+ ++name;
+ ++x;
+ }
+
+ // Ensure that at least one space separates the two columns.
+ if(x < width)
+ {
+ win->addch(' ');
+ ++x;
+ }
+
+ win->apply_style(st);
+ string righttext;
+
+ pkgCache::VerIterator currver = ver.get_pkg().CurrentVer();
+
+ if(currver.end() || ver.get_ver().end() || currver == ver.get_ver())
+ {
+ pkgCache::VerIterator dispv = currver;
+
+ if(dispv.end())
+ dispv = ver.get_ver();
+
+ if(dispv.end())
+ righttext = "[UNINST]";
+ else
+ righttext = ssprintf("[%s (%s)]",
+ dispv.VerStr(), archives(dispv).c_str());
+ }
+ else
+ {
+ righttext = "[";
+
+ if(currver.end())
+ righttext += "UNINST";
+ else
+ {
+ righttext += currver.VerStr();
+ righttext += " ";
+ righttext += archives(currver);
+ }
+
+ righttext += " -> ";
+
+ if(ver.get_ver().end())
+ righttext += "UNINST";
+ else
+ {
+ righttext += ver.get_ver().VerStr();
+ righttext += " ";
+ righttext += archives(ver.get_ver());
+ }
+
+ righttext += "]";
+ }
+
+ unsigned int startx;
+ if(x+righttext.size() >= width)
+ startx = x;
+ else
+ startx = width-righttext.size();
+ while(x < startx)
+ {
+ win->addch(' ');
+ ++x;
+ }
+
+ win->addnstr(righttext, width-startx);
+ }
+};
+
vs_subtree_generic *make_solution_tree(const aptitude_solution &sol)
{
// Bin packages according to what will happen to them.
- vector<pkgCache::PkgIterator> remove_packages;
- vector<pkgCache::PkgIterator> keep_packages;
- vector<pkgCache::VerIterator> install_packages;
- vector<pkgCache::VerIterator> downgrade_packages;
- vector<pkgCache::VerIterator> upgrade_packages;
-
- bin_packages(sol, remove_packages, keep_packages, install_packages,
- downgrade_packages, upgrade_packages);
-
- sort(remove_packages.begin(), remove_packages.end(),
- pkg_name_lt());
- sort(keep_packages.begin(), keep_packages.end(),
- pkg_name_lt());
- sort(install_packages.begin(), install_packages.end(),
- ver_name_lt());
- sort(downgrade_packages.begin(), downgrade_packages.end(),
- ver_name_lt());
- sort(upgrade_packages.begin(), upgrade_packages.end(),
- ver_name_lt());
+ vector<aptitude_resolver::action> remove_actions;
+ vector<aptitude_resolver::action> keep_actions;
+ vector<aptitude_resolver::action> install_actions;
+ vector<aptitude_resolver::action> downgrade_actions;
+ vector<aptitude_resolver::action> upgrade_actions;
+
+ bin_actions(sol, remove_actions, keep_actions, install_actions,
+ downgrade_actions, upgrade_actions);
+
+ sort(remove_actions.begin(), remove_actions.end(),
+ act_name_lt());
+ sort(keep_actions.begin(), keep_actions.end(),
+ act_name_lt());
+ sort(install_actions.begin(), install_actions.end(),
+ act_name_lt());
+ sort(downgrade_actions.begin(), downgrade_actions.end(),
+ act_name_lt());
+ sort(upgrade_actions.begin(), upgrade_actions.end(),
+ act_name_lt());
vs_subtree_generic *root = new label_tree(L"");
- if(!remove_packages.empty())
+ if(!remove_actions.empty())
{
vs_subtree_generic *remove_tree = new label_tree(transcode(_("Remove the following packages:")));
- for(vector<pkgCache::PkgIterator>::const_iterator i = remove_packages.begin();
- i != remove_packages.end(); ++i)
- {
- assert(!i->CurrentVer().end());
-
- remove_tree->add_child(new vs_staticitem(transcode(i->Name()), L""));
- }
+ for(vector<aptitude_resolver::action>::const_iterator i = remove_actions.begin();
+ i != remove_actions.end(); ++i)
+ remove_tree->add_child(new solution_item(*i));
root->add_child(remove_tree);
}
- if(!keep_packages.empty())
+ if(!keep_actions.empty())
{
vs_subtree_generic *keep_tree = new label_tree(transcode(_("Keep the following packages at their current version:")));
- for(vector<pkgCache::PkgIterator>::const_iterator i = keep_packages.begin();
- i != keep_packages.end(); ++i)
- {
- wstring text;
-
- if(i->CurrentVer().end())
- text = swsprintf(L"%s [UNINST]", i->Name());
- else
- text = swsprintf(L"%s [%s (%s)]",
- i->Name(), i->CurrentVer().VerStr(),
- archives(i->CurrentVer()).c_str());
-
- keep_tree->add_child(new vs_staticitem(text, L""));
- }
+ for(vector<aptitude_resolver::action>::const_iterator i = keep_actions.begin();
+ i != keep_actions.end(); ++i)
+ keep_tree->add_child(new solution_item(*i));
root->add_child(keep_tree);
}
- if(!install_packages.empty())
+ if(!install_actions.empty())
{
vs_subtree_generic *install_tree = new label_tree(transcode(_("Install the following packages:")));
- for(vector<pkgCache::VerIterator>::const_iterator i = install_packages.begin();
- i != install_packages.end(); ++i)
- {
- pkgCache::PkgIterator p = i->ParentPkg();
-
- wstring text = swsprintf(L"%s [%s (%s)]",
- p.Name(), i->VerStr(),
- archives(*i).c_str());
-
- install_tree->add_child(new vs_staticitem(text, L""));
- }
+ for(vector<aptitude_resolver::action>::const_iterator i = install_actions.begin();
+ i != install_actions.end(); ++i)
+ install_tree->add_child(new solution_item(*i));
root->add_child(install_tree);
}
- if(!upgrade_packages.empty())
+ if(!upgrade_actions.empty())
{
vs_subtree_generic *upgrade_tree = new label_tree(transcode(_("Upgrade the following packages:")));
- for(vector<pkgCache::VerIterator>::const_iterator i = upgrade_packages.begin();
- i != upgrade_packages.end(); ++i)
- {
- pkgCache::PkgIterator p = i->ParentPkg();
- pkgCache::VerIterator currver = p.CurrentVer();
- pkgCache::VerIterator instver = (*apt_cache_file)[p].InstVerIter(*apt_cache_file);
-
- assert(!currver.end());
- assert(!instver.end());
-
- wstring text = swsprintf(L"%s [%s (%s) -> %s (%s)]",
- p.Name(),
- currver.VerStr(), archives(currver).c_str(),
- instver.VerStr(), archives(instver).c_str());
-
- upgrade_tree->add_child(new vs_staticitem(text, L""));
- }
+ for(vector<aptitude_resolver::action>::const_iterator i = upgrade_actions.begin();
+ i != upgrade_actions.end(); ++i)
+ upgrade_tree->add_child(new solution_item(*i));
root->add_child(upgrade_tree);
}
- if(!downgrade_packages.empty())
+ if(!downgrade_actions.empty())
{
vs_subtree_generic *downgrade_tree = new label_tree(transcode(_("Downgrade the following packages:")));
- for(vector<pkgCache::VerIterator>::const_iterator i = downgrade_packages.begin();
- i != downgrade_packages.end(); ++i)
- {
- pkgCache::PkgIterator p = i->ParentPkg();
- pkgCache::VerIterator currver = p.CurrentVer();
-
- assert(!currver.end());
-
- wstring text = swsprintf(L"%s [%s (%s) -> %s (%s)]",
- p.Name(),
- currver.VerStr(), archives(currver).c_str(),
- i->VerStr(), archives(*i).c_str());
-
- downgrade_tree->add_child(new vs_staticitem(text, L""));
- }
+ for(vector<aptitude_resolver::action>::const_iterator i = downgrade_actions.begin();
+ i != downgrade_actions.end(); ++i)
+ downgrade_tree->add_child(new solution_item(*i));
root->add_child(downgrade_tree);
}
More information about the Aptitude-svn-commit
mailing list