Yes, Glamour is cool.

But two issues (can you solve them? :) )
1. the source list is not updated, the dragged method is still visible in
the
old protocol until you change the selected protocol item
2. (critical) the image hangs if you drop the methods list item in the
methods list.




2014-10-05 11:56 GMT+02:00 Esteban Lorenzano <[email protected]>:

> lazy Yury
>
>
> browser := GLMTabulator new
> row: [ :row |
> row
> column: #protocols;
> column: #methods ];
> row: #code;
> yourself.
> browser transmit
> to: #protocols;
> andShow: [ :a|
> a list
> allowDropOnItem: [:draggedObject :targetItem :list | true ];
> dropOnItem: [:draggedObject :targetItem :list |
> browser entity organization
> classify: draggedObject
> under: targetItem name.
> list update.
> true ];
> display: [ :class | class organization protocols ]; format: #name ].
> browser transmit
> from: #protocols;
> to: #methods;
> andShow: [ :a|
> a list
> allowItemDrag: [:item :list | true ];
> display: [ :protocol | protocol methods ] ].
> browser transmit
> from: #methods;
> to: #code;
> andShow: [ :a |
> a smalltalkCode
> smalltalkClass: [ browser entity ];
> display: [ :method | (browser entity>>method) sourceCode ] ].
>
> browser openOn: Morph
>
> On 05 Oct 2014, at 10:08, Yuriy Tymchuk <[email protected]> wrote:
>
> Yes, but as I’ve mentioned earlier, I’m interested in drag-n-drop
> recategorization. I don’t know if it’s doable with glamour.
>
> Uko
>
> On 04 Oct 2014, at 15:58, Esteban Lorenzano <[email protected]> wrote:
>
> and this is same with glamour:
>
> browser := GLMTabulator new
> row: [ :row |
> row
> column: #protocols;
> column: #methods ];
> row: #code;
> yourself.
> browser transmit
> to: #protocols;
> andShow: [ :a| a list display: [ :class | class organization protocols ];
> format: #name ].
> browser transmit
> from: #protocols;
> to: #methods;
> andShow: [ :a| a list display: [ :protocol | protocol methods ] ].
> browser transmit
> from: #methods;
> to: #code;
> andShow: [ :a |
> a smalltalkCode
> smalltalkClass: [ browser entity ];
> display: [ :method | (browser entity>>method) sourceCode ] ].
>
> browser openOn: Morph.
>
> Of course spec is capable of doing that.
> But glamour is designed with transitions and scripting in mind (thinking
> specially on browsers), while spec is designed for components and
> composition.
>
> Esteban
>
> On 04 Oct 2014, at 15:35, Nicolai Hess <[email protected]> wrote:
>
>
> 2014-10-03 13:26 GMT+02:00 Esteban Lorenzano <[email protected]>:
>
>>
>> On 03 Oct 2014, at 13:14, Nicolai Hess <[email protected]> wrote:
>>
>>
>> Am 03.10.2014 12:34 schrieb "Yuriy Tymchuk" <[email protected]>:
>> >
>> > Hi.
>> >
>> > I want to make something like a browser on a single class. I.e. just
>> use 2 last lists out if 4 in standard browser.
>> >
>> > Is there already something like that? If not, should I use existing
>> widgets, or implement my own using spec?
>> >
>> > Cheers!
>> > Uko
>> >
>> > Sent from my iPhone
>>
>> I think that is pretty easy with some spec models.
>> Maybe there is already an example
>>
>> yes, but a few models means a few classes :)
>> in a single class, it will e a lot easier glamour (which btw, is
>> specially designed for that: to make browsers).
>>
>
> You can work with ready made models like ListModel/TextModel and just need
> one class for sticking them
> together. Here some code, evaluateable from workspace, that shows how we
> can build a "simple browser" with spec models:
> This is just the simple skeleton, for more details it would be a bit confusing
> doing all this
> in one workspace "script" :)
>
> class:=Morph.
> method:=class>>#openInWorld.
>
> composed:= DynamicComposableModel new.
> composed instantiateModels: #(code TextModel protocols ListModel methods
> ListModel).
> composed code text:method sourceCode.
> composed protocols items: class protocols.
> composed methods items: class selectors.
> composed code aboutToStyle:true.
> composed code behavior:class.
> composed title: class asString.
> composed code acceptBlock:[:text |
>     class compile:text notifying:nil.
>     ].
> composed protocols whenSelectedItemChanged:[:item |
>     composed methods items:( class selectorsInProtocol: item)
>     ].
> composed methods  whenSelectedItemChanged:[:item |
>     item ifNotNil:[
>     method:=class methodDict at:item.
>    composed code text:method sourceCode]
>     ].
> composed openWithSpecLayout:(
> SpecLayout composed
> newColumn:[:c | c
>      newRow:[:r | r
>         add: #protocols;
>         add: #methods
>         ];
>     add: #code];
> yourself).
>
>
>>
>> Esteban
>>
>> Hilaire asked for a simple Method editor and
>> i wrote a simple example build with DynamicComposableModel, search the
>> Mailingliste.
>>
>>
>
>
>

Reply via email to