Hi again,

I'm testing my luck in Stackoverflow to see if I can get more eyes and keep the conversation going:

http://stackoverflow.com/questions/25215103/building-a-tree-outliner-like-graphical-interface-in-pharo-smalltalk-using-moose

This community is very responsive but I feel I'm not understanding quickly/properly enough the main logic of tree-like browsers on Moose. So, any extra help is welcomed.

Cheers,

Offray


On 08/07/2014 03:28 PM, Offray Vladimir Luna Cárdenas wrote:
Hi Doru and Community :-),

In the screenshot at [1] you can see my explorations. I took the code
from treeWithChildrenByeLevel in the GLMBasicExamples and modified it
until I got this:

[1] http://www.enlightenment.org/ss/e-53e3dee6777744.68598023.jpg

So I have now a browser which shows a tree made of UbakyeNodes (a tree
like data structure I defined), but I would like not to show the Ubakye
Nodes, but the titles of each node (headers) and the contents (bodies)
of them when selected. With your help I have understood that I need to
pass the collection of all children (not just the headers of them), but
I don't know who to sellect something particular in that collection to
be shown on the browser, like headers of nodes in the #tree panel or
bodies in the #body panel.

I would like to change also the size of each panel to be more like the
shown in the screenshot, instead of the default one and be relative to
window size. Is this possible?

Thanks,

Offray

Below is the code, for easiness of reading:

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
"
Another exploration of Outliners provided by Glamorous Toolkit
and browsers. This code was obtained by running 'GLMBasicExamples open'
and then browsing until 'treeWithChildrenByLevel'. Some
code was modified to open explicitely the browser on the world
and starting to hack on it.
"

     | browser mainTree |

     mainTree := UbakyeNode new.
     mainTree becomeDefaultTree.

     browser := GLMTabulator new.
     browser
         column: #tree;
         column: [ :c |
                     c
                         row: #body;
                         row: #plugins ].
     (browser transmit)
         to: #tree;
         andShow: [ :a |
                     (a tree)
                         title: mainTree header;
                         children: [ :eachNode |
                                     eachNode children. ]    "Children
must return a collection" ].
     (browser transmit)
         to: #body;
         from: #tree;
         andShow: [ :a | a text title: 'Cuerpo | Body ' ].
     (browser transmit)
         to: #plugins;
         from: #tree port: #selectionPath;
         andShow: [ :a | a text title: 'Plugins | Extensiones' ].

     browser openOn: mainTree children.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


On 08/05/2014 12:19 AM, Tudor Girba wrote:
Hi,

You probably need this:

explorer transmit to: #tree; andShow: [:a |
                  a tree
                          display: headers;
*children: [:eachNode | eachNode
theMessageYouUseToGoToTheChildrenOfANode ]*].

A tree is a recursive structure, and to describe it you need:
- a way to construct the root elements. This is the result of applying
display:
to the input object. So, display: either takes a collection or a block
that will
return a collection when executed.
- a way to define the children for each node. This is the result of
applying
children:

You should also take a look at the examples from:
GLMBasicExamples open

Does this help now?

Cheers,
Doru





On Sun, Jul 27, 2014 at 4:59 PM, Offray Vladimir Luna Cárdenas
<[email protected] <mailto:[email protected]>> wrote:

     Hi,

     Answering to myself: I have solved the code that selects the
headers of the
     main tree. The key is to create a new collection containing only
node names.
     Here is the code:

     "*************************"
     | mainTree node1 node2 explorer headers  |

     mainTree := UbakyeNode
              header: 'Arbol raíz'
              body: ''.

     node1 := UbakyeNode
              header: 'Nodo 1'
              body:  'Texto 1'.

     node2 := UbakyeNode
              header: 'Nodo 2'
              body:  'Texto 2'.

     mainTree
              addNode: node1;
              addNode: node2.


     explorer := GLMTabulator new
                      title: (mainTree header).
     explorer column: #tree;
               column: #body.

     headers := (mainTree children)
              collect: [:node |  node header].


     explorer transmit to: #tree; andShow: [:a |
                      a tree
                              display: headers].

     explorer openOn: mainTree.

     "*************************"

     Now I need to make the children sellectable, and that all the
contents of
     the tree can be updated with a shortcut.

     I will keep you posted.

     Cheers,

     Offray


     On 07/26/2014 09:01 PM, Offray Vladimir Luna Cárdenas wrote:

         Hi again,

         I will be using this thread to update my advances and
questions about
         how to build an outliner in Pharo Smalltalk. If there is a
better method
         like starting a new thread for particular questions, or a
less narrative
         style, please let me know.

         The idea is to use the tools provided by Moose to build a
quick outliner
         that can be extended to suit my needs on academical writing.
This is
         kind of a strange approach in the sense that I'm not
following the
         tutorials with a predefined problems (make a game and so) but
trying to
         start with a real (in the sense of closer) problem (making an
outliner)
         and to see which knowledge I need to solve this necessity. In
that sense
         is more like the Freire's alphabetization of adults in Brazil.

         So, the things I have done so far was to search for a good
model to
         start with. Something already done that can be used as
scaffolding for
         my outliner. The Help System seems like a good start for an
outliner (in
         fact it is already one), so I have taken the Help-Core system
and start
         to use it as a base for my project.

         After that I have used the Moose browsers to build a simple
interface,
         as seen here:


http://mutabit.com/offray/__static/blog/output/galleries/__objetos/ubakye-browser.jpg


<http://mutabit.com/offray/static/blog/output/galleries/objetos/ubakye-browser.jpg>



         The part I want to deal with is this:

         ===============

         explorer := GLMTabulator new
                           title: (mainTree header).
         explorer column: #tree;
                       column: #body.

         explorer transmit to: #tree; andShow: [:a |
                   a tree
                       display: mainTree children ].

         explorer openOn: mainTree.

         ===============

         So, instead of "display: mainTree children" I need something
that takes
         the get names (headers) of the two nodes and the contents in
the right
         panel. For that I think that I need to learn some iterators.
I have
         already a "header" method for the nodes. Any clue would be
appreciated
         and I will keep you posted on my advances.

         Cheers,

         Offray


         On 07/21/2014 12:58 PM, Offray Vladimir Luna Cárdenas wrote:

             Hi Damien,

             Thanks for your answer. Comments below.

             On 07/21/2014 11:09 AM, Damien Cassou wrote:

                 On Sat, Jul 19, 2014 at 2:47 AM, Offray Vladimir Luna
Cárdenas
                 <[email protected] <mailto:[email protected]>> wrote:

                     The first idea that comes to mind is using STON
for storage
                     nodes and
                     tree
                     information, so I can interchange it with the
flatland files
                     world
                     and keep
                     it readable. Sounds that reasonable?



                 without more information, it is hard to stay. Try
with STON and
                 change
                 if that does not work :-). We have XML and JSON
generators as well.



             This is a kind of raw preview of I'm talking about:


http://www.enlightenment.org/__ss/e-53cd4f36f021e9.68569046.__jpg

<http://www.enlightenment.org/ss/e-53cd4f36f021e9.68569046.jpg>

             Of course in this case, it is just a Help browser with a
Playground
             window over it, but I would like to have something like
Playgrounds
             inside the help browser. I was trying to build a custom
browser with
             Glamour, but seems that Help Browser already has the
machinery I'm
             looking for.

             So my first question is how to use the Help Browser class
as a template
             for my outliner class? And can I put a Playground where
the plain text
             is located right now?


                     The second thing I would like to do is to add
pandoc's
                     markdown inside
                     comments, but I don't like the syntax of comments in
                     Smalltalk because
                     single quotes are fairly easy to find in light
markup
                     language like
                     markdown. Is difficult to change it to create
something more
                     like
                     python
                     (with """) or Lua (with -[]- )?



                 There is only one syntax for comments in Pharo.
Instead of Markdown,
                 you might want to have a look at Pillar which is
implemented in
                 Pharo
                 and can generate Markdown (and html, and pdf) :
                 https://github.com/pillar-__markup/pillar-documentation/
                 <https://github.com/pillar-markup/pillar-documentation/>



             I have seen Pillar. Seems really interesting, but Pandocs
markdown
             support academic citation in several formats and I have
already long
             docs wrote on that format integrated in my workflow from
Zotero and even
             there is a growing community working on Scholarly
Markdown[1][2] so I
             would like to stick with it as much as I can for my own
writing.
             That being said. I would like also a better integration
between
             Smalltalk outliners and all the academic publication work
flow,
             including working better with pandoc as a external library.

             [1] https://github.com/scholmd/__scholmd/wiki
             <https://github.com/scholmd/scholmd/wiki>
             [2]

http://blog.martinfenner.org/__2013/06/29/metadata-in-__scholarly-markdown/


<http://blog.martinfenner.org/2013/06/29/metadata-in-scholarly-markdown/>
             [3]

http://programminghistorian.__org/lessons/sustainable-__authorship-in-plain-text-__using-pandoc-and-markdown


<http://programminghistorian.org/lessons/sustainable-authorship-in-plain-text-using-pandoc-and-markdown>




             Thanks again, this conversation with people in the
community is very
             valuable to me,

             Offray







     _________________________________________________
     Moose-dev mailing list
     [email protected] <mailto:[email protected]>
     https://www.iam.unibe.ch/__mailman/listinfo/moose-dev
     <https://www.iam.unibe.ch/mailman/listinfo/moose-dev>




--
www.tudorgirba.com <http://www.tudorgirba.com>

"Every thing has its own flow"






Reply via email to