Menu

Freemind with Node Cloning

2007-09-26
2013-04-11
1 2 > >> (Page 1 of 2)
  • Krzysztof Kachel

    I'm working on node cloning (virtual nodes) in freemind. Node cloning is an ability to have the same nodes appear in 2 (or more) places.

    How it works?
    To do clone first you must copy some nodes an then use "Paste Clone" option from menu or pop up menu. This implementation has'nt any limitations, you can edit clones like normal nodes.

    There is the first compilation:
    http://pliki.rodos.com.pl/freemind/freemind_0_9_0b13_koprin_b3.zip

    Full source code is available here:
    http://pliki.rodos.com.pl/freemind/freemind_src_0_9_0b13_koprin_b3.zip

    What are you thinking about this?

     
    • Emerson C

      Emerson C - 2007-09-26

      It seems a very good idea, I ran into this problem already, for example, when more than a place used certain branch, so I had to use an arrow pointing to the other, which is not that clear as this cloning. We just need to make sure that the cloned node will be visually clear  that they are the same.

       
      • Krzysztof Kachel

        Hi Emerson,

        > We just need to make sure that the cloned node will be visually clear that they are the same.

        It's difficult to differentiate clone marks when there are many clone families, so I plan to implement showing arrows only on clone families selected by user.

         
    • Richard Ries

      Richard Ries - 2007-09-26

      From: Rich

      Hurray! Clones have been requested many times.

      I haven't tried the software yet, but I'd like to suggest that if a branch is cloned, ALL of the nodes and edges should be marked as clones, just to remind the user that modifying the branch will affect other branches.

      --Rich

       
    • Ken Robertson

      Ken Robertson - 2007-09-27

      G'day Kris,
      I like it.  I don't know how far you're proposing to develop this, but can I make a couple of comments?

      What's that icon, a sheep?  Cute, but perhaps a bit too cutesy for some purposes.  Could the clone indicator perhaps be a preference setting?  Other indicator options might be drop-shadow, a double bubble on on bubble nodes, or an underline on fork nodes.

      I notice that I can apply different formating to each clone, and add different children, is that intentional?

      It might be useful to have a filter to help locate where clones have been used so that mods to children might be maintained.
      --
      Regards
      Ken

       
      • Krzysztof Kachel

        Hi Ken,

        > I don't know how far you're proposing to develop this, but can I make a couple of comments?
        Yes, of course you can and everyone else is welcome :-)

        > What's that icon, a sheep? (...)
        Yes, and you may call it Dolly ;-)

        > I notice that I can apply different formating to each clone, and add different children, is that intentional?
        Some of it - yes and some - not ;-)

        > (...) add different children (...)
        I owe you an explanation of the overall idea.
        There are different approacheas to cloning possible and I decided to clone single nodes, not branches.
        And from that approach several consequences followed eg. different children.

        Have a look on this screenshot
        http://pliki.rodos.com.pl/freemind/cloning.png

        > (...) apply different formating to each clone (...)
        This is a work in progress and only text Cloning (plain and rich formatting) is implemented for now.
        I plan to implement cloning of the formating and attributes in the future.

        > It might be useful to have a filter to help locate
        > where clones have been used so that mods to children
        > might be maintained.

        Great idea - such filter would be very useful.

        My idea is to add a shortcut to jump between nodes of one group of clones

        Currently I'm working on it and on an option to unclone node.

         
        • Ken Robertson

          Ken Robertson - 2007-09-28

          G'day Kris
          > Yes, and you may call it Dolly ;-)
          Damn it - I should have recognised the accent, I was born in Scotland.  But you didn't comment about alternate clone indicators?

          > ... I decided to clone single nodes, not branches. 
          Um, could you do both?

          > I plan to implement cloning of the formatting and attributes in the future.
          I could live without formatting, but attributes would probably be quite fundamental to power usage.

          > ... shortcut to jump between nodes of one group of clones
          Yup, that'll be useful, particularly in larger maps.

          > I'm working on ... an option to unclone node.
          As in break the link? That'll probably be useful too.

          --
          Regards
          Ken

           
          • Krzysztof Kachel

            Hi Ken,

              > > ... I decided to clone single nodes, not branches. 
            > Um, could you do both?

            It's to late now. I had to choose an approach before I started to develop architecture of this feature.

             
    • Dimitry Polivaev

      Hello,

      I have tried to download the version, but the server was down.

      Dimitry

       
      • Krzysztof Kachel

        Hi Dimitry,

        This is strange because the server was up all the time - maybe there was a problem with our internet connection.
        Have you already succeded in downloading the version?

        I clean up the sources now so it will be more readable to you.

         
      • Krzysztof Kachel

        Hi Dimitry,

        I'm still cleaning up the sources and preparing UML diagrams.
        I will post new version as soon as it will be ready :-)

         
    • Ray Benjamin

      Ray Benjamin - 2007-09-28

      Hi,

      I haven't had a chance to try this yet, but am looking forward to it. I've also wanted cloning.

      This is a great example of what I've been saying here, that if you want a feature, you can check out the code and develop it yourself.

      Kris, I don't know what release this will be added to, but I'd like to get test cases for it while the code is still fresh in your mind. If you can find the time, please write out some simple test cases that cover the basic functionality of this feature. I'll add them to the test plan. If you can't, no worries, but if you can, it will probably result in better testing and more bugs caught.

      Thanks,
        Ray

       
      • Krzysztof Kachel

        Hi Ray Benjamin,

        > I'd like to get test cases for it while the code is still fresh in your mind.
        > If you can find the time, please write out some simple test cases
        > that cover the basic functionality of this feature.

        I don't know how to write test cases yet but I'm working on UML doc detailing this funcionality. Can you please show me some examples of test cases?

         
    • bruxy

      bruxy - 2007-10-15

      This is exactly what I was missing, but I came up to a different approach. Your great idea is sort of subset of it. I wanted to start coding about this concept, that's why I came here. But do not know where and if to start....

      By right mouse you can currently link nodes one to the other.
      To extend this concept, you can reate a parallel mind map(s). With that you can either:

        - "reflow" - right click to the selected node a center of the mindmap. You could use different links (colors) to create diffeernt parallel mind maps. This will create similar concept as visual thesaurus. There must be a simple way to get to the default though.

      - "append" - this would basically create clones exactly as you describe, only that it would be dynamic. I'd introduce an option to choose how many levels to choose.

      Example: I might have new ideas all over the place in my mind map. I can create a node "new ideas", then select all the new ideas and drop them to the new node with right mouse. I can then show a new mindmap with new ideas in the center or append all the new ideas under this node...

      One would have to be carefull about creating loops though.

      You should also have an option to hide the links, so the diagram does not become too messy. There should be some icon showing that there is a link though.

      Alternatively: this could be done not based on linking nodes but attributes. I would for example add an attribute "action" to some nodes, then I could create a node and dynamically list all nodes with that attribute. But this woudl only create one level, not a hierarchy. I like the linking better.

       
    • Krzysztof Kachel

      I'm still working on node cloning in FreeMind:)

      There is the second compilation.
      http://pliki.rodos.com.pl/freemind/freemind_0_9_0b13_koprin_b4.zip

      Full source code is available here:
      http://pliki.rodos.com.pl/freemind/freemind_src_0_9_0b13_koprin_b4.zip

      What's new?
      Now You can select one family of clones with ctrl key, cut them, and paste to
      other branch and the clones don't diappear.
      You can also cut one family of clones leaving one clone,
      paste them to other branch and you don't lose this one clone.

      This implantation has many modification in source and work faster.
      I cleaned up the sources so it is more readable.
      To compile source I must used Java 1.5.

       
      • Eric L.

        Eric L. - 2007-11-25

        Hi,

        I'm no developer so I can't assess the quality of your work, but I recognize that you've implemented something our users are asking for, and I think Dimitry is interested in integrating the feature once we've got 0.9.0 out of the door ;-)

        Just one thing: our policy is still to have FreeMind compile with Java 1.4.x; it's mainly due to MacOS users being stuck with a specific Java version or having to pay for an OS upgrade. Ask Chris for more details.

        Thanks, Eric

         
    • Krzysztof Kachel

      Hi Dimitry and everyone,

      I've finished cleaning up the sources and preparing UML diagrams.

      I've created some class and object diagrams in UML to ease the developers the task
      of implementing this functionality in Freemind 0.9.0 or 0.9.1
      Stereotype <<kris>> in this diagrams indicates places where something is changed.
      The blue indicates classes and objects that were added.
      http://pliki.rodos.com.pl/freemind/cloning/uml_diagrams.pdf

      It should be quite straightforward to merge my sources with yours.
      I've created a path. This path is suplemented by some files.

      You can grab it from here
      http://pliki.rodos.com.pl/freemind/cloning/cloning.src.zip

      The funcionality looks like this
      http://pliki.rodos.com.pl/freemind/cloning.png

      Here you can download compiled binary
      http://pliki.rodos.com.pl/freemind/cloning/freemind_0_9_0b16_with_cloning.zip

      I'm still working on cloning. I'm implementing some new things now:
      - unclone node
      - hide sheep icons
      - different formating to each clone...

      Also I would like to inform you that Node Cloning in FreeMind is the theme of my engineer's thesis :-D

       
      • Bernard Lang

        Bernard Lang - 2008-03-11

        Hi Krzysztof,

        May I be the first to congratulate you. Another key feature falls into place.

        I just downloaded and gave the tyres a good kicking for 10 minutes:

        Copy single paste Clone - WORKS
        Copy branch paste Clone - WORKS
        Editing Original/Clone - Works
        Undo - WORKS
        Sheep Icon survives all Icons --> trash
        Filter on Sheep Icon works

        Only things I wasn't sure of were:

        --Maybe deleteing the source should delete the clone (optionally). Currently deleting source leaves the clone in place. Maybe this is best, just not what I expected.

        --A jump to my clone function / hilite / whatever would be good as it could be lurking anywhere(maybe I missed something ?)

        --Is source the master and clone the slave or are they equal relatives?

        Thanks

        Bernard

         
        • Bernard Lang

          Bernard Lang - 2008-03-11

          Quick follow up,

          Not a bug (except for me) but when I run a node numbering script I'm working on I get double numbering:

          Before numbering (not clone):
          NODE A
          NODE B

          After numbering (not clone)
          1: NODE A
          2: NODE B

          Before numbering (clone):
          NODE A
          NODE A

          After numbering (clone):
          2: 1: NODE A
          2: 1: NODE A

          Gets worse after renumber:
          2: 1: 2: 1: NODE A
          2: 1: 2: 1: NODE A

          Ideally, I would like both numbered by the source node ref. Is there anyway in a script to detect if a node is a clone of another node / has clones. I want to be able to id the original.

          Could probably use create/mod date to differentiate the original, but I need to identify they are clones first & sheep doesn't indicate a clones relatives(?)

          Is there a node.getClones() or similar?

          Hope that makes sense...

          Bernard

           
        • Krzysztof Kachel

          Hi Bernard,

          Thank you for congratulations  and testing:D

          >Maybe deleteing the source should delete the clone (optionally). Currently deleting source leaves the clone in place. Maybe this is best, just not what I expected.
          This is best. You can delete 'source clone' and leave other clone.

          >A jump to my clone function / hilite / whatever would be good as it could be lurking anywhere(maybe I missed something ?)
          My idea is to add a shortcut to jump between nodes of one family of clones.

          >Is source the master and clone the slave or are they equal relatives?
          They are equal relatives.

           
          • Bernard Lang

            Bernard Lang - 2008-03-14

            Hi Krzysztof,

            >>This is best. You can delete 'source clone' and leave other clone.

            Fair enough.

            >My idea is to add a shortcut to jump between nodes of one family of clones.

            Great. I'm using inner link as workaround for now, but what you suggest would be best.

            >They are equal relatives

            OK. Is the fact that they are related exposed anywhere I can access it programatically? I think created date will probably id the original, just not sure how to id the other members of the family(?)

            Bernard

             
            • Krzysztof Kachel

              Hi Bernard,

              > I think created date will probably id the original, just not sure how to id the other members of the family(?)
              Since clones are equals there is no original. Period.
              All clones in the family share common CLONE_ID in mm file and one FamilyOfClones object when in the memory.

              Look at UML diagrams especially Objects Diagram:
              http://pliki.rodos.com.pl/freemind/cloning/uml_diagrams.pdf

              Clones are implemented in two classes:
              1) FamilyOfClones
              2) FamiliesOfClonesHashMap

              FamilyOfClones stores IDs of nodes which are clones from one family. It extends ArrayList.
              I add new node ID to this family by function add(MindMapNode node):

              public void add(MindMapNode node){   
                      ...
                      String id = node.getObjectId(controller);
                      if(!this.contains(id)){
                          this.add(id);
                          ...
                      }   
                  }

              Each node has a link to FamilyOfClones object and has three methods:
                  -    isClone()
                  -    setFOC(FamilyOfClones foc)
                  -    getFOC()

              When you edit some node, FreeMind checks if this is clone

                  node.isClone();

              if true, he gets FamilyOfClones object to which this node (ID) belongs

                  FamilyOfClones foc = ((NodeAdapter)node).getFOC();
                 
              and edits all nodes from this same Family

                  EditAction.setNode(foc.get(i).toString());
                  EditAction.setText(newText);
                 
                 
              OK, but where store all FamilyOfClones?
              I store them in FamiliesOfClonesHashMap which extends HashMap.

               
              • Bernard Lang

                Bernard Lang - 2008-03-18

                Thanks for the info Krzysztof,

                Appreciated...

                Bernard

                 
    • Ryan

      Ryan - 2008-03-14

      Thank you very much for your hard work, Krzysztof. I look forward to using cloning in FreeMind. Good lock with your thesis. :-)

      Regards,
      Ryan

       
    • Christian Foltin

      Hi,

      tried your contribution and I have some basic questions (perhaps, they are already asked, but anyway):
      * adding new nodes isn't reflected at the clones. Removal is. What is the idea?
      * what is the basic technical concept of your clones (in three sentences, not more, please).
      * can you live with the fact, that this can't be merged to 0.9.0 as we already have a feature freeze?

      Thanks,

      Chris

       
1 2 > >> (Page 1 of 2)

Log in to post a comment.