[Aptitude-svn-commit] r4138 - in branches/aptitude-0.3/aptitude: .
src
Daniel Burrows
dburrows at costa.debian.org
Tue Sep 20 20:49:40 UTC 2005
Author: dburrows
Date: Tue Sep 20 20:49:36 2005
New Revision: 4138
Modified:
branches/aptitude-0.3/aptitude/ChangeLog
branches/aptitude-0.3/aptitude/src/solution_screen.cc
Log:
Display a list of the alternatives to the currently selected action in a solution.
Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog (original)
+++ branches/aptitude-0.3/aptitude/ChangeLog Tue Sep 20 20:49:36 2005
@@ -1,5 +1,10 @@
2005-09-20 Daniel Burrows <dburrows at debian.org>
+ * src/solution_screen.cc:
+
+ Display a list of the possible resolutions of the dependency
+ corresponding to each action.
+
* src/solution_fragment.cc, src/solution_fragment.h:
Add a routine to display a description of a dependency that
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 Sep 20 20:49:36 2005
@@ -32,6 +32,8 @@
#include <generic/resolver_manager.h>
#include <generic/util.h>
+#include <sigc++/adaptors/bind.h>
+
#include <vscreen/config/keybindings.h>
#include <vscreen/config/style.h>
#include <vscreen/fragment.h>
@@ -212,10 +214,12 @@
wstring my_label;
public:
label_tree(wstring _label, bool _expanded = true,
- bool selectable = true)
+ bool selectable = true,
+ int depth = 0)
:vs_subtree_generic(_expanded), my_label(_label)
{
set_selectable(selectable);
+ set_depth(depth);
}
void paint(vs_tree *win, int y, bool hierarchical,
@@ -300,16 +304,23 @@
class solution_act_item : public solution_item
{
aptitude_universe::version ver;
+ aptitude_universe::dep d;
/** A callback to be invoked with a fragment-based description of
* this item.
*/
sigc::slot1<void, fragment *> set_short_description;
+ /** A callback to be invoked with the dependency corresponding to this item. */
+ sigc::slot1<void, aptitude_resolver_dep> set_active_dep;
public:
solution_act_item(const aptitude_solution::action &act,
- const sigc::slot1<void, fragment *> &_set_short_description)
- :ver(act.ver), set_short_description(_set_short_description)
+ const sigc::slot1<void, fragment *> &_set_short_description,
+ const sigc::slot1<void, aptitude_resolver_dep> &_set_active_dep)
+ :ver(act.ver),
+ d(act.d),
+ set_short_description(_set_short_description),
+ set_active_dep(_set_active_dep)
{
}
@@ -363,11 +374,15 @@
set_short_description(fragf(""));
else
set_short_description(text_fragment(apt_package_records->Lookup(real_ver.FileList()).ShortDesc()));
+
+ set_active_dep(d);
}
void unhighlighted(vs_tree *win)
{
set_short_description(fragf(""));
+
+ set_active_dep(aptitude_resolver_dep());
}
aptitude_universe::version get_ver() const
@@ -485,8 +500,9 @@
{
public:
solution_act_item_bare(const aptitude_solution::action &act,
- const sigc::slot1<void, fragment *> &set_short_description)
- :solution_act_item(act, set_short_description)
+ const sigc::slot1<void, fragment *> &set_short_description,
+ const sigc::slot1<void, aptitude_resolver_dep> &set_active_dep)
+ :solution_act_item(act, set_short_description, set_active_dep)
{
}
@@ -610,9 +626,12 @@
class solution_unresolved_item : public solution_item
{
aptitude_universe::dep d;
+
+ sigc::slot1<void, aptitude_resolver_dep> set_active_dep;
public:
- solution_unresolved_item(const aptitude_universe::dep &_d)
- :d(_d)
+ solution_unresolved_item(const aptitude_universe::dep &_d,
+ const sigc::slot1<void, aptitude_resolver_dep> &_set_active_dep)
+ :d(_d), set_active_dep(_set_active_dep)
{
}
@@ -628,6 +647,16 @@
return false;
}
+ void highlighted(vs_tree *win)
+ {
+ set_active_dep(d);
+ }
+
+ void unhighlighted(vs_tree *win)
+ {
+ set_active_dep(aptitude_resolver_dep());
+ }
+
void reject()
{
resman->harden_dep(d);
@@ -701,8 +730,50 @@
}
};
+vs_subtree_generic *make_dep_solvers_tree(const aptitude_resolver_dep &d)
+{
+ pkgCache::DepIterator real_dep = d.get_dep();
+ pkgCache::PrvIterator prv = d.get_prv();
+
+ vs_subtree_generic *root = new label_tree(L"", true, true, -1);
+
+ vs_staticitem *conflict_item = new vs_staticitem(conflict_text(real_dep, prv), L"");
+ root->add_child(conflict_item);
+
+ vs_subtree_generic *resolvers = new label_tree(transcode(_("The following actions will resolve this dependency:")), true, false);
+
+ root->add_child(resolvers);
+
+ for(aptitude_resolver_package::version_iterator
+ vi = d.get_source().get_package().versions_begin(); !vi.end(); ++vi)
+ if(*vi != d.get_source())
+ {
+ aptitude_solution::action act(*vi, d, true, 0);
+
+ resolvers->add_child(new solution_act_item(act,
+ sigc::slot1<void, fragment *>(),
+ sigc::slot1<void, aptitude_resolver_dep>()));
+ }
+
+ for(aptitude_resolver_dep::solver_iterator
+ si = d.solvers_begin(); !si.end(); ++si)
+ {
+ aptitude_solution::action act(*si, d, false, 0);
+
+ resolvers->add_child(new solution_act_item(act,
+ sigc::slot1<void, fragment *>(),
+ sigc::slot1<void, aptitude_resolver_dep>()));
+ }
+
+ if(d.get_dep()->Type == pkgCache::Dep::Recommends)
+ resolvers->add_child(new solution_unresolved_item(d, sigc::slot1<void, aptitude_resolver_dep>()));
+
+ return root;
+}
+
vs_subtree_generic *make_story_tree(const aptitude_solution &sol,
- const sigc::slot1<void, fragment *> &set_short_description)
+ const sigc::slot1<void, fragment *> &set_short_description,
+ const sigc::slot1<void, aptitude_resolver_dep> &set_active_dep)
{
vector<aptitude_solution::action> actions;
@@ -719,7 +790,7 @@
{
vs_subtree_generic *tree = new label_tree(dep_text(i->d.get_dep()), true, false);
- tree->add_child(new solution_act_item(*i, set_short_description));
+ tree->add_child(new solution_act_item(*i, set_short_description, set_active_dep));
root->add_child(tree);
}
@@ -727,7 +798,8 @@
}
vs_subtree_generic *make_solution_tree(const aptitude_solution &sol,
- const sigc::slot1<void, fragment *> &set_short_description)
+ const sigc::slot1<void, fragment *> &set_short_description,
+ const sigc::slot1<void, aptitude_resolver_dep> &set_active_dep)
{
// Bin packages according to what will happen to them.
vector<aptitude_solution::action> remove_actions;
@@ -758,7 +830,7 @@
for(vector<aptitude_solution::action>::const_iterator i = remove_actions.begin();
i != remove_actions.end(); ++i)
- remove_tree->add_child(new solution_act_item_bare(*i, set_short_description));
+ remove_tree->add_child(new solution_act_item_bare(*i, set_short_description, set_active_dep));
root->add_child(remove_tree);
}
@@ -769,7 +841,7 @@
for(vector<aptitude_solution::action>::const_iterator i = keep_actions.begin();
i != keep_actions.end(); ++i)
- keep_tree->add_child(new solution_act_item_bare(*i, set_short_description));
+ keep_tree->add_child(new solution_act_item_bare(*i, set_short_description, set_active_dep));
root->add_child(keep_tree);
}
@@ -780,7 +852,7 @@
for(vector<aptitude_solution::action>::const_iterator i = install_actions.begin();
i != install_actions.end(); ++i)
- install_tree->add_child(new solution_act_item_bare(*i, set_short_description));
+ install_tree->add_child(new solution_act_item_bare(*i, set_short_description, set_active_dep));
root->add_child(install_tree);
}
@@ -791,7 +863,7 @@
for(vector<aptitude_solution::action>::const_iterator i = upgrade_actions.begin();
i != upgrade_actions.end(); ++i)
- upgrade_tree->add_child(new solution_act_item_bare(*i, set_short_description));
+ upgrade_tree->add_child(new solution_act_item_bare(*i, set_short_description, set_active_dep));
root->add_child(upgrade_tree);
}
@@ -802,12 +874,11 @@
for(vector<aptitude_solution::action>::const_iterator i = downgrade_actions.begin();
i != downgrade_actions.end(); ++i)
- downgrade_tree->add_child(new solution_act_item_bare(*i, set_short_description));
+ downgrade_tree->add_child(new solution_act_item_bare(*i, set_short_description, set_active_dep));
root->add_child(downgrade_tree);
}
-
const imm::set<aptitude_universe::dep> &unresolved = sol.get_unresolved_soft_deps();
if(!unresolved.empty())
@@ -816,7 +887,7 @@
for(imm::set<aptitude_universe::dep>::const_iterator i = unresolved.begin();
i != unresolved.end(); ++i)
- unresolved_tree->add_child(new solution_unresolved_item(*i));
+ unresolved_tree->add_child(new solution_unresolved_item(*i, set_active_dep));
root->add_child(unresolved_tree);
}
@@ -832,6 +903,7 @@
vs_tree_ref story_tree;
sigc::slot1<void, fragment *> set_short_description;
+ sigc::slot1<void, aptitude_resolver_dep> set_active_dep;
void attach_apt_cache_signals()
{
@@ -871,10 +943,12 @@
}
protected:
- solution_examiner(const sigc::slot1<void, fragment *> &_set_short_description)
+ solution_examiner(const sigc::slot1<void, fragment *> &_set_short_description,
+ const sigc::slot1<void, aptitude_resolver_dep> &_set_active_dep)
: vs_multiplex(false),
solution_tree(vs_tree::create()), story_tree(vs_tree::create()),
- set_short_description(_set_short_description)
+ set_short_description(_set_short_description),
+ set_active_dep(_set_active_dep)
{
add_visible_widget(solution_tree, true);
add_visible_widget(story_tree, true);
@@ -900,9 +974,10 @@
return true;
}
public:
- static ref_ptr<solution_examiner> create(const sigc::slot1<void, fragment *> &set_short_description)
+ static ref_ptr<solution_examiner> create(const sigc::slot1<void, fragment *> &set_short_description,
+ const sigc::slot1<void, aptitude_resolver_dep> &set_active_dep)
{
- return new solution_examiner(set_short_description);
+ return new solution_examiner(set_short_description, set_active_dep);
}
void update()
@@ -947,8 +1022,8 @@
set_static_root(transcode(_("Internal error: unexpected null solution.")));
else
{
- solution_tree->set_root(make_solution_tree(sol, set_short_description));
- story_tree->set_root(make_story_tree(sol, set_short_description));
+ solution_tree->set_root(make_solution_tree(sol, set_short_description, set_active_dep));
+ story_tree->set_root(make_story_tree(sol, set_short_description, set_active_dep));
}
update_highlights();
@@ -956,15 +1031,31 @@
};
typedef ref_ptr<solution_examiner> solution_examiner_ref;
+static
+void update_dep_display(aptitude_resolver_dep d, vs_tree *tBare)
+{
+ vs_tree_ref t(tBare);
+
+ if(d.get_dep().end())
+ t->set_root(NULL);
+ else
+ t->set_root(make_dep_solvers_tree(d));
+}
+
vs_widget_ref make_solution_screen()
{
vs_table_ref rval = vs_table::create();
vs_label_ref l = vs_label::create(L"");
+ vs_tree_ref info_tree = vs_tree::create();
+
solution_examiner_ref examiner
= solution_examiner::create(sigc::mem_fun(l.unsafe_get_ref(),
- (void (vs_label::*) (fragment *)) &vs_label::set_text));
- vs_tree_ref info_tree = vs_tree::create();
+ (void (vs_label::*) (fragment *)) &vs_label::set_text),
+ sigc::bind(sigc::ptr_fun(update_dep_display),
+ info_tree.unsafe_get_ref()));
+
+
info_tree->connect_key("ShowHideDescription", &global_bindings,
sigc::mem_fun(info_tree.unsafe_get_ref(),
More information about the Aptitude-svn-commit
mailing list