Hi, I'm affriad I won't be able to help you more until you provide a
quickstart. This might be a bug in wicket and quickstart would help me
reproduce the problem so that i could fix it.
-Matej
On Mon, Mar 17, 2008 at 5:09 PM, jeredm <[EMAIL PROTECTED]> wrote:
>
> I made the changes you suggested and the updateTree() call didn't refresh the
> tree. I had to add the call target.addComponent(tree) back in. Here is the
> latest:
>
>
> TreeNodeFactory factory = TreeNodeFactory.getObject();
> BaseTreeNode newNode = factory.buildReplaceNode(treePanel,
> StringUtil.truncateForList(newOption.getShortDesc(), 18), "QuestionOption",
> newOption, passArgs, "Exam_QuestionsOptionPanel", "swapPanel",
> TreeNodeState.NONE);
>
> // insert the tree node
>
> DefaultTreeModel model = (DefaultTreeModel)tree.getModelObject();
> model.insertNodeInto((DefaultMutableTreeNode)newNode,
> (DefaultMutableTreeNode)node.getParent(), node.getParent().getIndex(node) +
> 1);
> // removing as it does not refresh the tree...at least visually it is not
> working
> // tree.updateTree(target);
>
> // Adding back in to get the node to display in the tree
> target.addComponent(tree);
>
>
> I appreciate your help. I don't think I am going to be able to build a
> quickstart any soon as I am swamped with work right now. I think that a
> quickstart would be the way to go though. Let me know if you get any other
> ideas. Thanks again!
>
>
>
>
> Matej Knopp-2 wrote:
> >
> > Hi,
> >
> > you shouldn't do target.addComponent(tree). You shouldo only call
> > tree.upateTree() (or tree.updateTree(target), should do the same
> > thing). Also you could consider using DefaultTreeModel.insertNodeInto
> > instead of parent.addNode, as it automatically fires the listener for
> > you.
> >
> > Btw. I was thinking of some code I could actually run (so also the
> > page with tree and the prebuit tree). Thus if this answer doesn't help
> > your problem you can consider providing a quickstart project I can use
> > to reproduce it.
> >
> > -Matej
> >
> > On Sat, Mar 15, 2008 at 12:57 AM, jeredm <[EMAIL PROTECTED]>
> > wrote:
> >>
> >> Here is the code that pops up a modal for the user to enter a new option
> >> for
> >> a
> >> multiple choice question. When the modal returns I add the object it
> >> sends
> >> back to
> >> a node and then add the the node to the tree. Finally, I refresh the
> >> tree.
> >>
> >> The BaseTreeNode is an extended DefaultMutableTreeNode. The
> >> model on my link tree is a set of BaseTreeNodes...so
> >> tree = new MWLinkTree("tree", new
> >> DefaultTreeModel(rootBaseTreeNode)){...};
> >>
> >> I don't know if this will be much more help. Keep in mind that I had
> >> 875
> >> nodes that were
> >> in an expanded state during the tests. Thanks again for your help.
> >>
> >>
> >> MWAjaxSubmitLink newButton = new MWAjaxSubmitLink("newButton",
> >> indicatorImg,
> >> feedback){
> >> private static final long serialVersionUID = 1L;
> >>
> >> @Override
> >> protected void onSubmit(AjaxRequestTarget target, Form form) {
> >> ARGS.addParam("QuestionPk", option.getQuestionPk());
> >> modal.setContent(new
> >> Exam_QuestionsNewOptionPanel(modal.getContentId(),
> >> ARGS));
> >>
> >> modal.setWindowClosedCallback(new
> >> MWModalWindow.WindowClosedCallback(){
> >> private static final long serialVersionUID = 1L;
> >>
> >> public void onClose(AjaxRequestTarget target){
> >> QuestionOption newOption =
> >> (QuestionOption)ARGS.getParam("NewQuestionOption");
> >>
> >> // Check to see if the action was canceled
> >> if(newOption != null){
> >> PageData passArgs = new PageData();
> >> passArgs.addParam("QuestionOption", newOption);
> >>
> >> TreeNodeFactory factory = TreeNodeFactory.getObject();
> >> BaseTreeNode newNode = factory.buildReplaceNode(treePanel,
> >> StringUtil.truncateForList(newOption.getShortDesc(), 18),
> >> "QuestionOption",
> >> newOption, passArgs, "Exam_QuestionsOptionPanel", "swapPanel",
> >> TreeNodeState.NONE);
> >>
> >> // ADD NEW NODE HERE --------------------------------
> >> // the node is the selected node
> >> ((BaseTreeNode)node.getParent()).add(newNode);
> >>
> >> // REFRESH THE TREE HERE -----------------------------
> >>
> >> DefaultTreeModel model =
> >> (DefaultTreeModel)tree.getModelObject();
> >> int[] changes = new
> >> int[]{model.getIndexOfChild(newNode.getParent(), newNode)};
> >> model.nodesWereInserted((TreeNode)newNode.getParent(),
> >> changes);
> >>
> >> target.addComponent(tree);
> >> }
> >> }
> >> });
> >>
> >> modal.show(target);
> >>
> >>
> >> target.appendJavascript("document.getElementById('answerDesc').select()");
> >> target.addComponent(this.feedback);
> >> }
> >> };
> >> form.add(newButton);
> >>
> >>
> >>
> >> Matej Knopp-2 wrote:
> >> >
> >> > Sorry, I meant the updateTree method. Anyway, 23 seconds seems quite a
> >> > lot to me. Any chance you could submit a stripped down example I can
> >> > take a look at?
> >> >
> >> > -Matej
> >> >
> >> > On Fri, Mar 14, 2008 at 6:01 PM, jeredm <[EMAIL PROTECTED]>
> >> > wrote:
> >> >>
> >> >> I added the following code and it correctly refreshed the node:
> >> >>
> >> >> DefaultTreeModel model = (DefaultTreeModel)tree.getModelObject();
> >> >> int[] changes = new int[]{model.getIndexOfChild(parentNode,
> >> newNode)};
> >> >> model.nodesWereInserted((TreeNode)parentNode, changes);
> >> >>
> >> >> The time difference seemed close to invalidateAll().
> >> invalidateAll()
> >> >> took
> >> >> about 24 seconds while the new method took 23 seconds. It is likely
> >> >> that
> >> >> they are the same speed as I was counting in my head and only ran
> >> the
> >> >> test
> >> >> once. The test was with 875 nodes open in the tree...so that is
> >> about 1
> >> >> second for every 35 nodes. I think a typical user will have about
> >> 90
> >> >> nodes
> >> >> in the tree at the most and 30 on average, so between 2.5 and 1
> >> >> second(s) to
> >> >> wait for the node to display after clicking save. The speed I am
> >> seeing
> >> >> may
> >> >> just be the time it takes to render in the browser. If that is the
> >> >> case,
> >> >> then I am fine with it. I just want to make sure I am correctly
> >> >> updating
> >> >> the tree and not making it work harder than it needs to.
> >> >>
> >> >> I also tried tree.updateTree() after I added the node and found that
> >> it
> >> >> did
> >> >> not solve the refresh problem. When you said call update() on the
> >> model
> >> >> what function should I be calling (I don't see update in the API)?
> >> >>
> >> >> Thanks for your help!
> >> >>
> >> >>
> >> >>
> >> >>
> >> >> Matej Knopp-2 wrote:
> >> >> >
> >> >> > Make sure your tree model fires the appropriate events when your
> >> tree
> >> >> > is modified. The Tree implementation should properly update the
> >> >> > changed portions of tree (assuming you call the update() method).
> >> >> >
> >> >> > -Matej
> >> >> >
> >> >> > On Fri, Mar 14, 2008 at 1:27 AM, jeredm
> >> <[EMAIL PROTECTED]>
> >> >> > wrote:
> >> >> >>
> >> >> >> I have a LinkTree where am adding new nodes via AJAX where the
> >> node
> >> >> is
> >> >> >> not
> >> >> >> visually refreshing until I call myLinkTree.invalidateAll();.
> >> The
> >> >> >> problem
> >> >> >> is that the tree refresh takes too long when I have a bunch of
> >> nodes
> >> >> >> displayed. AbstractTree.invalidateAll() appears to "redraw" the
> >> >> whole
> >> >> >> tree,
> >> >> >> but I only need to "redraw" the single node (I may be wrong on
> >> this
> >> >> and
> >> >> >> it
> >> >> >> may be working exactly as I need it to, but it is slow).
> >> >> >>
> >> >> >> My basic setup is a tree on the left that dynamically swaps out
> >> >> panels
> >> >> >> via
> >> >> >> AJAX on the right based on the node selected. The tree itself
> >> only
> >> >> >> starts
> >> >> >> with the root and first children. All first children load their
> >> >> child
> >> >> >> nodes
> >> >> >> via an AJAX call on expand. These nodes will correctly refresh
> >> as
> >> >> the
> >> >> >> nodes
> >> >> >> are added and then the parent is expanded. I cannot collapse
> >> and
> >> >> >> re-expand
> >> >> >> the parent node in this case as expanding a node would cause the
> >> >> tree to
> >> >> >> close nodes the user has already opened. What I need is to be
> >> able
> >> >> to
> >> >> >> insert a node like so...
> >> >> >>
> >> >> >> - My Root
> >> >> >> |--First Child
> >> >> >> |-- First Grandchild
> >> >> >> |-- NEW NODE
> >> >> >> |-- Last Grandchild
> >> >> >>
> >> >> >> I need the First Grandchild and Last Grandchild to already be
> >> >> expanded
> >> >> >> and
> >> >> >> displaying before I add NEW NODE.
> >> >> >>
> >> >> >> --
> >> >> >> View this message in context:
> >> >> >>
> >> http://www.nabble.com/LinkTree-Node-Refresh-tp16041813p16041813.html
> >> >> >> Sent from the Wicket - User mailing list archive at Nabble.com.
> >> >> >>
> >> >> >>
> >> >> >>
> >> >> ---------------------------------------------------------------------
> >> >> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> >> >> For additional commands, e-mail: [EMAIL PROTECTED]
> >> >> >>
> >> >> >>
> >> >> >
> >> >> >
> >> >> >
> >> >> > --
> >> >> > Resizable and reorderable grid components.
> >> >> > http://www.inmethod.com
> >> >> >
> >> >> >
> >> ---------------------------------------------------------------------
> >> >> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> >> > For additional commands, e-mail: [EMAIL PROTECTED]
> >> >> >
> >> >> >
> >> >> >
> >> >>
> >> >> --
> >> >> View this message in context:
> >> >> http://www.nabble.com/LinkTree-Node-Refresh-tp16041813p16048613.html
> >> >>
> >> >>
> >> >> Sent from the Wicket - User mailing list archive at Nabble.com.
> >> >>
> >> >>
> >> >>
> >> ---------------------------------------------------------------------
> >> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> >> For additional commands, e-mail: [EMAIL PROTECTED]
> >> >>
> >> >>
> >> >
> >> >
> >> >
> >> > --
> >> > Resizable and reorderable grid components.
> >> > http://www.inmethod.com
> >> >
> >> > ---------------------------------------------------------------------
> >> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> > For additional commands, e-mail: [EMAIL PROTECTED]
> >> >
> >> >
> >> >
> >>
> >> --
> >> View this message in context:
> >> http://www.nabble.com/LinkTree-Node-Refresh-tp16041813p16062572.html
> >>
> >>
> >> Sent from the Wicket - User mailing list archive at Nabble.com.
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> For additional commands, e-mail: [EMAIL PROTECTED]
> >>
> >>
> >
> >
> >
> > --
> > Resizable and reorderable grid components.
> > http://www.inmethod.com
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/LinkTree-Node-Refresh-tp16041813p16095277.html
>
>
> Sent from the Wicket - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
--
Resizable and reorderable grid components.
http://www.inmethod.com
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]