summaryrefslogtreecommitdiff
path: root/src/pkg_item_with_subtree.h
diff options
context:
space:
mode:
authorDaniel Burrows <dburrows@debian.org>2005-10-01 23:40:49 +0000
committerDaniel Burrows <dburrows@debian.org>2005-10-01 23:40:49 +0000
commitdb949f313eb10b747a875067623b89c47ee2b81d (patch)
tree95891553696a84cc382aa9a92bacdc88950361e1 /src/pkg_item_with_subtree.h
parente5434a5aaf63b1602c81606824b94f0368e4aaa0 (diff)
downloadaptitude-db949f313eb10b747a875067623b89c47ee2b81d.tar.gz
[aptitude @ Import the Subversion repository into darcs.]
Diffstat (limited to 'src/pkg_item_with_subtree.h')
-rw-r--r--src/pkg_item_with_subtree.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/src/pkg_item_with_subtree.h b/src/pkg_item_with_subtree.h
new file mode 100644
index 00000000..baf26232
--- /dev/null
+++ b/src/pkg_item_with_subtree.h
@@ -0,0 +1,112 @@
+// pkg_item_with_subtree.h (this is -*-c++-*-)
+//
+// Copyright 1999-2002, 2005 Daniel Burrows
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; see the file COPYING. If not, write to
+// the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// A package item with an associated subtree. More useful than you might
+// think ;-)
+
+#ifndef PKG_ITEM_WITH_SUBTREE_H
+#define PKG_ITEM_WITH_SUBTREE_H
+
+#include "pkg_item.h"
+#include "pkg_columnizer.h"
+
+#include <vscreen/columnify.h>
+#include <vscreen/config/column_definition.h>
+#include <vscreen/transcode.h>
+#include <vscreen/vs_subtree.h>
+
+template<class child, class sorter=tag_sort_policy>
+class pkg_item_with_subtree:public vs_subtree<child, sorter>, public pkg_item
+{
+ class pkg_with_subtree_columnizer:public pkg_columnizer
+ {
+ bool expanded, hierarchical;
+ protected:
+ column_disposition setup_column(int type)
+ {
+ if(type==name)
+ {
+ std::wstring name=transcode(get_pkg().Name());
+
+ // Interesting question: would it be reasonable to use graphical
+ // characters here? What about Unicode graphical characters?
+ if(hierarchical)
+ return column_disposition(std::wstring(expanded?L"--\\ ":L"--- ")+name, get_basex());
+ else
+ {
+ return column_disposition(L"-> "+name, get_basex());
+ }
+ }
+ else
+ return pkg_columnizer::setup_column(type);
+ }
+
+ public:
+ pkg_with_subtree_columnizer(bool _expanded, bool _hierarchical,
+ const pkgCache::PkgIterator &_pkg,
+ const pkgCache::VerIterator &_visible_ver,
+ const column_definition_list &_columns, int _basex)
+ :pkg_columnizer(_pkg, _visible_ver, _columns, _basex),
+ expanded(_expanded), hierarchical(_hierarchical)
+ {}
+ };
+
+public:
+ pkg_item_with_subtree<child,sorter>(const pkgCache::PkgIterator &_package,
+ sigc::signal2<void, const pkgCache::PkgIterator &, const pkgCache::VerIterator &> *_sig,
+ bool _expanded=false):vs_subtree<child, sorter>(_expanded), pkg_item(_package, _sig) {}
+
+ virtual void paint(vs_tree *win, int y, bool hierarchical,
+ const style &st)
+ {
+ int basex=2*get_depth();
+ int width, height;
+
+ win->getmaxyx(height, width);
+ pkg_columnizer::setup_columns();
+
+ empty_column_parameters p;
+
+ std::wstring disp=pkg_with_subtree_columnizer(vs_subtree<child, sorter>::get_expanded(),
+ hierarchical,
+ get_package(),
+ visible_version(),
+ pkg_columnizer::get_columns(),
+ basex).layout_columns(width, p);
+ win->mvaddnstr(y, 0, disp, width);
+ }
+
+ bool dispatch_key(const key &k, vs_tree *owner)
+ {
+ if(vs_subtree<child, sorter>::dispatch_key(k, owner))
+ return true;
+ else
+ return pkg_item::dispatch_key(k, owner);
+ }
+
+ void dispatch_mouse(short id, int x, mmask_t bstate, vs_tree *owner)
+ {
+ pkg_item::dispatch_mouse(id, x, bstate, owner);
+ }
+};
+
+typedef pkg_item_with_subtree<vs_treeitem> pkg_item_with_generic_subtree;
+typedef pkg_item_with_subtree<pkg_tree_node> pkg_item_with_pkgnode_subtree;
+
+#endif