Alexandre Bergel wrote:
Hi!

It is nice to see all the enhancements put in place :-)

  
So what I need is to be able to draw edges _only_ from Terminals to ConnectivityNodes (and "maybe" the reverse direction as well).  The models of the ROElements come from many different classes, and any conditional block to evaluate acceptance of a drop needs to take account of accessors being different between each class.  How is the best way for the Roassal architecture to provide this functionality?
    

You have initiated the support for drag and drop. We should continue.
I am a bit confused still. I have problem to exactly spot what is the behavior you wish to have.
  

If from the same location you download the "20120503" version, you will see the functionality of what I had previously working.  Click the <Open IEC CIM Browser> button, select an item and in the [Instance Model Full View] pane drag a new edge from a black circle (Terminals) to a green circle (ConnectivityNode).  That is my specific require.   The following discussion is just trying to think the feature more generally about the feature.

In "20120503" you can see how the rubberband definition is split into (EpcimTerminal>>addSubViewTo:) and (EpcimConnectivityNode>>addSubViewTo:) .  However that implementation was a bit too invasive by digging bits into the rendering loop.  I like better the way we've started implementing RORubebrBand, except this needs to allow for the user definition split between different parts of the codebase rather than requiring a single script like ROExample>>rubberband.  

However I'm not sure that there should be two classes RORubberbandDrag & RORubberbandDrop.  You have mentioned the similarity with standard drag&drop.  An application may want to have rubberband or drag&drop between more than one different pairs of elements or model classes, so perhaps keeping the source/target definition paired makes this easier to keep track of.  

Just some random ideas...
1a. RODragDrop  sourceModel: Terminal  targetModel: ConnectivityNode;  rubberBandShape: ROLine.
1b. RODragDrop  sourceModel: Terminal  targetModel: ConnectivityNode;  moveSource.
1c. RODragDrop  sourceModels: #(Terminal AnotherClass)  target: ConnectivityNode;  rubberBandShape: ROOrthoVerticalLineShape.
2. RODragDrop  modelDragAccessor: #uiDragFromTerminal    modelDropAccessor: #uiDropOnConnectivityNode:
3. RODragDrop  elementDragAccessor: [ :source | etc ]   elementDropAccessor: #uiDropOnConnectivityNode:  ; moveSource


cheers -ben
  
It might be useful (for me :) ) if you could download and have a look at the running project.  Browse to "http://files.openinworld.com/ENG8002" and then if you happen to have 7zip on you system, download   "20120922-moose47-LEETRICAL.7z"   at 19MB or otherwise download  "20120922- moose47-LEETRICAL.zip"   at 29MB.  Vanessa might also like a look.   
    

I am having a look at it. Looks good! Maybe you could add an info buttons, find, zoom ?

Cheers,
Alexandre


  
Alexandre Bergel wrote:
    
Hi Ben,

I think that the best to describe your situation is to provide a test that raise this MNU.
The test should use the scenario you would like to see working.
This will help us get our effort focused. 

Cheers,
Alexandre


On Oct 18, 2012, at 10:58 PM, Ben Coman 
<btc@openInWorld.com>
 wrote:

  

      
With the recent integration of RORubberBand, I have then gone to use it in my application.  What arises is that while the implementation works well within a single script in ROExample, it is not so well when the creation of elements is more spread out in different parts of the code, since these different parts do not have access to the same instance of RORubberBand.  So some further thoughts on rubberbanding for discussion...

1. Since the rubberband operation is between elements, perhaps this should not be stored inside individual ROElements but more globally in ROView.  That is, perhaps ROView would have its own interactions.

2. Currently to avoid the MNUs due to the target filter condition processing edges and elements with nil or unsuitable model, in (RORubebrBand>>initializeElement:) I used (candidateTarget getInteraction: self ifPresent:) where it is the 'self' that ensures that source/target elements being compared are applicable to a particular RORubberband.  It is that 'self' that is hard to distribute to elements that are created from different parts of the code.  Perhaps this mechanism could be replaced by tagging RORubberBand defined in different elements with a common symbol eg #rubberband1

Or tag the elements associated with a particular rubberbanding are just tagged the same as the RORubberBand instance stored in the ROView.

3. Perhaps not bother with trying to ensure no exceptions occur in the execution of the target filter condition, and just mask them out.  Rather than interrupting the program with a MNU, targets elements are simply excluded if the filter.

What are your thoughts?

cheers -ben
<RoassalMethodComparison.xls>_______________________________________________
Moose-dev mailing list

Moose-dev@iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev

    

        
  

      
<2012-10-20-BTC-iec61970cim-browser.png><2012-10-20-BTC-iec61970cim-Terminals&ConnectivyNodes.png>_______________________________________________
Moose-dev mailing list
Moose-dev@iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev