CVS commit by mornfall: Optimize tree refreshing (in libkapture now) further. We nearly beat synaptic on install/deinstall marking performance now. :D.
M +20 -14 listtreewidget.cpp 1.27 M +1 -0 listtreewidget.h 1.17 --- kdenonbeta/kdedebian/kapture/libkapture/listtreewidget.cpp #1.26:1.27 @@ -50,13 +50,6 @@ ListTreeWidgetItem::~ListTreeWidgetItem void ListTreeWidgetItem::setItemParent () { - // std::cerr << "ListTreeWidgetItem::setItemParent ()" << std::endl; delete m_item; m_item = 0; - /* if (TreeDepNode::castNode (this)) { - std::cerr << "ListTreeWidgetDItem::setItemParent; parent = " << m_parent << std::endl; - } - if (TreeBranchNode::castNode (this)) { - std::cerr << "ListTreeWidgetSItem::setItemParent; parent = " << m_parent << std::endl; - } */ if (m_parent) { if (m_parent == m_list -> top ()) { @@ -71,9 +64,13 @@ void ListTreeWidgetItem::setItemParent ( std::cerr << "open node: " << path () << std::endl; m_item -> setOpen (m_list -> isOpen (path ())); - m_elem -> visit (this); + itemRefresh (); } } } /* }}} */ +void ListTreeWidgetItem::itemRefresh () +{ + m_elem -> visit (this); +} // detachItem - detach m_item from us (it is being deleted) {{{ // -------------------------------------------------------------------------- @@ -174,9 +171,4 @@ class callSetItemParent : public TreeVis void visitGenericNode (TreeNode *_n) { - // std::cerr << "visiting node: " << _n << std::endl; - /* if (TreeBranchNode::castNode (_n)) - std::cerr << "visiting branch: " << _n << std::endl; - if (TreeDepNode::castNode (_n)) - std::cerr << "visiting dep: " << _n << std::endl; */ ListTreeWidgetItem *n = dynamic_cast <ListTreeWidgetItem *> (_n); if (n) @@ -185,4 +177,17 @@ class callSetItemParent : public TreeVis }; /* }}} */ +// class callItemRefresh {{{ +// -------------------------------------------------------------------------- +class callItemRefresh : public TreeVisitor +{ + public: + void visitGenericNode (TreeNode *_n) + { + ListTreeWidgetItem *n = dynamic_cast <ListTreeWidgetItem *> (_n); + if (n) + n -> itemRefresh (); + }; +}; + /* }}} */ // rebuild - rebuild the tree from scatch {{{ // -------------------------------------------------------------------------- @@ -201,5 +206,6 @@ void ListTreeWidget::refresh () std::cerr << "ListTreeWidget::refresh ()" << std::endl; Tree::refresh (); - TreeVisitor *v = new callSetItemParent; + // XXX OPTIMIZE: following is redundant in case rebuild ran + TreeVisitor *v = new callItemRefresh; iterate (v); delete v; --- kdenonbeta/kdedebian/kapture/libkapture/listtreewidget.h #1.16:1.17 @@ -71,4 +71,5 @@ namespace kapture { ListTreeWidgetItem (ListTreeWidget *list, TreeNode *parent, CElemPtr e); void setItemParent (); + void itemRefresh (); void detachItem (); virtual ~ListTreeWidgetItem ();