[Bf-taskforce25] Drag & Drop into 2.5

Ton Roosendaal ton at blender.org
Sun Jul 26 18:24:37 CEST 2009


Hi Elia,

I can't follow much your proposal... maybe it just names things 
differently.

This is how I've intended drag/drop to work in the 2.5 architecture:

- Drag items: are designated areas, defined with interface/ module. 
Something like
   uiDefDraggableItem() or so.
   Some buttons can already automatically generate this.
It can retrieve data for the draggable item similarly to 'rna paths' as 
in use for animation system.

- the UI code then handles mouse input for such items as regular 
buttons, so if you click-drag inside the 'button' it activates the 
drag.

- The dragging itself is an Operator, with a modal() call running on 
toplevel of queues.
   On drop, it makes sure context is properly set (to the region), and 
it creates a wmEvent, type "EVT_DROP", with customdata the rna path. 
(wmEvent will have proper mouse coord too)

- You then just need event handlers that catch the EVT_DROP event, 
which can again be coded in the current interface buttons as well, for 
specific and appropriate types.
Later you can add EVT_DROP handlers in any region, like for the Image 
window (drop image), or for 3d window (check boundbox/visible object, 
assign texture) etc.


-Ton-

------------------------------------------------------------------------
Ton Roosendaal  Blender Foundation   ton at blender.org    www.blender.org
Blender Institute   Entrepotdok 57A  1018AD Amsterdam   The Netherlands

On 23 Jul, 2009, at 14:45, Elia Sarti wrote:

>
> Brecht Van Lommel wrote, on 07/23/2009 02:28 PM:
>> Hi,
>>
>> On Thu, 2009-07-23 at 12:00 +0200, Elia Sarti wrote:
>>
>>> Yes but the problem is exactly this, that each operator in the end 
>>> gets
>>> own context. Maybe I'm missing something but there's need for the
>>> MOUSEDROP event to have both mouse_drag and mouse_drop data. The 
>>> problem
>>> is that these two types of data lie into two different space 
>>> contexts,
>>> unless we store this data at some higher level (like WM), which I'm 
>>> not
>>> sure is ok? This is the data retrieved from the CTX_data_drag_pointer
>>> and CTX_data_drop_pointer. We'll have to set them under C->wm. If 
>>> this
>>> is fine then there's no problem.
>>>
>>
>> I think the MOUSEDROP should not have to call CTX_data_drag_pointer.
>> That is done by the MOUSEDRAG operator, which then passes it on to the
>> windowmanager, which will give it to MOUSEDROP as customdata in the
>> event.
>>
>> Thinking of it further, I don't understand why CTX_data_drag_pointer 
>> and
>> CTX_data_drop_pointer are really needed. They can be computed in the
>> MOUSEDRAG/MOUSEDROP operator directly, unless there is some reason to
>> have that decoupled?
>>
>> Brecht
> Yes this is what I suggested as alternative solution in the first
> e-mail, but I was not sure it was ok? I mean MOUSEDRAG operator is 
> modal
> and when it gets MOUSEDROP it sets custom data for MOUSEDROP and pass 
> on
> the event which then arrives to the current space the cursor is in with
> the new custom data (which will contain the drag_pointer).
> If this is ok (and doable) then we can just do it this way I guess with
> no need for CTX_ calls. One reason to have them was to make things
> reusable. This way we could have one generic function that accepts
> context and then in every editor you have a specific operator that
> determines what's the data at x, y mouse coords for that specific 
> space.
> But I guess the generic code can just be a function that accepts two 
> RNA
> pointers.
> _______________________________________________
> Bf-taskforce25 mailing list
> Bf-taskforce25 at blender.org
> http://lists.blender.org/mailman/listinfo/bf-taskforce25
>



More information about the Bf-taskforce25 mailing list