[Glamour] Building complex browsers

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

[Glamour] Building complex browsers

Damien Cassou
Hi,

I would like to create a code browser, where the top pane is a finder which adds a new pane when some clicks on a class name. The following code works fine except with interactions like:

1- select a class
2- select a selector of this class
3- select a class in the newly added pane

This tries to display the source code of the class selected in step 3 for the selector of step 2 (which is wrong because selector of step 2 is only defined in the class of step 1).

Can somebody help me please? The code is:

|extTabulator finder intTabulator|

intTabulator := GLMTabulator new column: #classes; column: #selectors; yourself.

intTabulator transmit to: #classes; andShow: [:a | a list title: 'classes'; display: [:class | class allSuperclasses]].
intTabulator transmit from: #classes; to: #selectors; andShow: [:a | a list title: 'selectors'; display: [:class | class selectors]].

finder := GLMFinder new.
finder custom: intTabulator.

"Makes the finder add an new pane when selecting a class"
intTabulator transmit from: #classes; toOutsidePort: #selection.

extTabulator := GLMTabulator new row: #finder; row: #source; yourself.
extTabulator transmit to: #finder; andShow: [:a | a custom: finder].

"Makes the internet tabulator exports the currently selected selector"
intTabulator transmit from: #selectors; toOutsidePort: #selector.

extTabulator transmit
from: #finder;
from: #finder port: #selector;
to: #source;
andShow: [:a | a text
display: [:class :selector | class name, '>>', selector, String cr,
((class includesSelector: selector)
ifTrue: ['ok']
ifFalse: ['ERROR: class does not have this selector!'])]].

extTabulator openOn: IdentitySet.

--
Damien Cassou
http://damiencassou.seasidehosting.st

"Lambdas are relegated to relative obscurity until Java makes them popular by not having them." James Iry


_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Reply | Threaded
Open this post in threaded view
|

Re: [Glamour] Building complex browsers

Tudor Girba-2
Hi,

I am not sure I like the whole setup of the browser :). Anyway, you would want to reset the #selector port every time you select a class. Add this:

intTabulator transmit from: #classes; toOutsidePort: #selector; transformed: [nil].

It is hackish, but this is because you want to reason outside of the intTabulator browser about something that is internal.

Cheers,
Doru


On 21 Jul 2011, at 08:03, Damien Cassou wrote:

> Hi,
>
> I would like to create a code browser, where the top pane is a finder which adds a new pane when some clicks on a class name. The following code works fine except with interactions like:
>
> 1- select a class
> 2- select a selector of this class
> 3- select a class in the newly added pane
>
> This tries to display the source code of the class selected in step 3 for the selector of step 2 (which is wrong because selector of step 2 is only defined in the class of step 1).
>
> Can somebody help me please? The code is:
>
> |extTabulator finder intTabulator|
>
> intTabulator := GLMTabulator new column: #classes; column: #selectors; yourself.
>
> intTabulator transmit to: #classes; andShow: [:a | a list title: 'classes'; display: [:class | class allSuperclasses]].
> intTabulator transmit from: #classes; to: #selectors; andShow: [:a | a list title: 'selectors'; display: [:class | class selectors]].
>
> finder := GLMFinder new.
> finder custom: intTabulator.
>
> "Makes the finder add an new pane when selecting a class"
> intTabulator transmit from: #classes; toOutsidePort: #selection.
>
> extTabulator := GLMTabulator new row: #finder; row: #source; yourself.
> extTabulator transmit to: #finder; andShow: [:a | a custom: finder].
>
> "Makes the internet tabulator exports the currently selected selector"
> intTabulator transmit from: #selectors; toOutsidePort: #selector.
>
> extTabulator transmit
> from: #finder;
> from: #finder port: #selector;
> to: #source;
> andShow: [:a | a text
> display: [:class :selector | class name, '>>', selector, String cr,
> ((class includesSelector: selector)
> ifTrue: ['ok']
> ifFalse: ['ERROR: class does not have this selector!'])]].
>
> extTabulator openOn: IdentitySet.
>
> --
> Damien Cassou
> http://damiencassou.seasidehosting.st
>
> "Lambdas are relegated to relative obscurity until Java makes them popular by not having them." James Iry
>
> _______________________________________________
> Moose-dev mailing list
> [hidden email]
> https://www.iam.unibe.ch/mailman/listinfo/moose-dev

--
www.tudorgirba.com

"There are no old things, there are only old ways of looking at them."




_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Reply | Threaded
Open this post in threaded view
|

Re: [Glamour] Building complex browsers

Damien Cassou
On Thu, Jul 21, 2011 at 9:03 AM, Tudor Girba <[hidden email]> wrote:
I am not sure I like the whole setup of the browser

Your solution worked perfectly. What setup would you propose to have similar browsing interactions?

--
Damien Cassou
http://damiencassou.seasidehosting.st

"Lambdas are relegated to relative obscurity until Java makes them popular by not having them." James Iry

_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Reply | Threaded
Open this post in threaded view
|

Re: [Glamour] Building complex browsers

Tudor Girba-2
I would have encapsulated class + selector from the intTabulator in a dedicated port. Like that you would be able to reason about one value.

So, the script could look like:


|extTabulator finder intTabulator|

intTabulator := GLMTabulator new row: #classes; row: #selectors; yourself.

intTabulator transmit to: #classes; andShow: [:a | a list title: 'classes'; display: [:class | class allSuperclasses]].
intTabulator transmit from: #classes; to: #selectors; andShow: [:a | a list title: 'selectors'; display: [:class | class selectors]].

"Makes the finder add an new pane when selecting a class"
intTabulator transmit from: #classes; toOutsidePort: #selection.

"Makes the internet tabulator exports the currently selected class and selector"
intTabulator transmit from: #classes; from: #selectors; toOutsidePort: #classSelector; transformed: [:class :selector | class -> selector ].

finder := GLMFinder new.
finder custom: intTabulator.

extTabulator := GLMTabulator new row: #finder; row: #source; yourself.
extTabulator transmit to: #finder; andShow: [:a | a custom: finder].

extTabulator transmit
                from: #finder port: #classSelector;
                to: #source;
                andShow: [:a |
                        a text display: [:classSelector | classSelector key name, '>>', classSelector value asString  ]].

extTabulator openOn: IdentitySet.


Cheers,
Doru


On 21 Jul 2011, at 09:37, Damien Cassou wrote:

> On Thu, Jul 21, 2011 at 9:03 AM, Tudor Girba <[hidden email]> wrote:
> I am not sure I like the whole setup of the browser
>
> Your solution worked perfectly. What setup would you propose to have similar browsing interactions?
>
> --
> Damien Cassou
> http://damiencassou.seasidehosting.st
>
> "Lambdas are relegated to relative obscurity until Java makes them popular by not having them." James Iry
> _______________________________________________
> Moose-dev mailing list
> [hidden email]
> https://www.iam.unibe.ch/mailman/listinfo/moose-dev

--
www.tudorgirba.com

"Beauty is where we see it."




_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev