Home » Eclipse Projects » GEF » EditDomain and CTRL problem
EditDomain and CTRL problem [message #84758] |
Mon, 23 June 2003 08:37  |
Eclipse User |
|
|
|
Originally posted by: scheglov_ke.nlmk.ru
I use CTRL for special handling of mouse event, plus
I draw some figures different, when CTRL is pressed. All
works, but recently I noticed strange behavior. When I click
with CTRL pressed on figure on my layer, I don't receive then
keyDown/keyUp until I move mouse on any edit part. It seams, that
layer lost focus or something like this. How can I avoid this?
Here is how I handle keyDown/keyUp and one mouse event:
public void keyDown(KeyEvent keyEvent, EditPartViewer viewer) {
m_StateMask = keyEvent.stateMask;
if (keyEvent.keyCode == SWT.ESC) {
DesignerEditor editor = (DesignerEditor) getEditorPart();
List selection = editor.getGraphicalViewer().getSelectedEditParts();
if (selection.size() > 0) {
EditPart edit = (EditPart) selection.get(0);
if (edit.getParent() != null)
editor.getGraphicalViewer().select(edit.getParent());
}
return;
}
if (keyEvent.keyCode == SWT.CTRL) {
m_StateMask |= SWT.CTRL;
redraw();
return;
}
super.keyDown(keyEvent, viewer);
}
public void keyUp(KeyEvent keyEvent, EditPartViewer viewer) {
m_StateMask = keyEvent.stateMask;
if (keyEvent.keyCode == SWT.CTRL) {
m_StateMask &= ~SWT.CTRL;
redraw();
return;
}
super.keyUp(keyEvent, viewer);
}
private void redraw() {
DesignerEditor editor = (DesignerEditor) getEditorPart();
editor.getGraphicalViewer().getControl().redraw();
}
public void mouseDown(MouseEvent mouseEvent, EditPartViewer viewer) {
m_StateMask = mouseEvent.stateMask;
mouseEvent.stateMask &= ~SWT.CTRL;
super.mouseDown(mouseEvent, viewer);
}
And here is code, where I create layer, after clicking on which I don't
receive keyboard events:
protected void configureGraphicalViewer() {
super.configureGraphicalViewer();
GraphicalViewer viewer = getGraphicalViewer();
FreeformGraphicalRootEditPart rootEditPart = new FreeformGraphicalRootEditPart() {
protected void createLayers(LayeredPane layeredPane) {
super.createLayers(layeredPane);
layeredPane.add(new FreeformLayer(), DesignerEditDomain.LAYER_CLICKABLE);
}
};
//
viewer.setRootEditPart(rootEditPart);
viewer.setEditPartFactory(new GraphicalPartFactory());
FigureCanvas canvas = (FigureCanvas) viewer.getControl();
canvas.setBackground(ColorConstants.gray);
(canvas).setScrollBarVisibility(FigureCanvas.ALWAYS);
//
viewer.setKeyHandler(new GraphicalViewerKeyHandler(viewer).setParent(getCommonKeyHand ler()));
ContextMenuProvider provider = new DesignerContextMenuProvider(viewer, getActionRegistry());
viewer.setContextMenu(provider);
}
--
SY, Konstantin.
|
|
|
Re: EditDomain and CTRL problem [message #84951 is a reply to message #84758] |
Tue, 24 June 2003 05:59   |
Eclipse User |
|
|
|
Originally posted by: scheglov_ke.nlmk.ru
Konstantin Scheglov <scheglov_ke@nlmk.ru> wrote:
Ok, problem is not in CTRL.
I want to handle mouse click on figure, created on additional
layer. I can do this. But I want prevent GEF from handling this
mouse click, so I call event.consume(). And after this GEF thinks,
that all events should be handled only by this figure. :-(
How can I prevent this?
> I use CTRL for special handling of mouse event, plus
> I draw some figures different, when CTRL is pressed. All
> works, but recently I noticed strange behavior. When I click
> with CTRL pressed on figure on my layer, I don't receive then
> keyDown/keyUp until I move mouse on any edit part. It seams, that
> layer lost focus or something like this. How can I avoid this?
> Here is how I handle keyDown/keyUp and one mouse event:
> public void keyDown(KeyEvent keyEvent, EditPartViewer viewer) {
> m_StateMask = keyEvent.stateMask;
> if (keyEvent.keyCode == SWT.ESC) {
> DesignerEditor editor = (DesignerEditor) getEditorPart();
> List selection = editor.getGraphicalViewer().getSelectedEditParts();
> if (selection.size() > 0) {
> EditPart edit = (EditPart) selection.get(0);
> if (edit.getParent() != null)
> editor.getGraphicalViewer().select(edit.getParent());
> }
> return;
> }
> if (keyEvent.keyCode == SWT.CTRL) {
> m_StateMask |= SWT.CTRL;
> redraw();
> return;
> }
> super.keyDown(keyEvent, viewer);
> }
> public void keyUp(KeyEvent keyEvent, EditPartViewer viewer) {
> m_StateMask = keyEvent.stateMask;
> if (keyEvent.keyCode == SWT.CTRL) {
> m_StateMask &= ~SWT.CTRL;
> redraw();
> return;
> }
> super.keyUp(keyEvent, viewer);
> }
> private void redraw() {
> DesignerEditor editor = (DesignerEditor) getEditorPart();
> editor.getGraphicalViewer().getControl().redraw();
> }
> public void mouseDown(MouseEvent mouseEvent, EditPartViewer viewer) {
> m_StateMask = mouseEvent.stateMask;
> mouseEvent.stateMask &= ~SWT.CTRL;
> super.mouseDown(mouseEvent, viewer);
> }
> And here is code, where I create layer, after clicking on which I don't
> receive keyboard events:
> protected void configureGraphicalViewer() {
> super.configureGraphicalViewer();
> GraphicalViewer viewer = getGraphicalViewer();
> FreeformGraphicalRootEditPart rootEditPart = new FreeformGraphicalRootEditPart() {
> protected void createLayers(LayeredPane layeredPane) {
> super.createLayers(layeredPane);
> layeredPane.add(new FreeformLayer(), DesignerEditDomain.LAYER_CLICKABLE);
> }
> };
> //
> viewer.setRootEditPart(rootEditPart);
> viewer.setEditPartFactory(new GraphicalPartFactory());
> FigureCanvas canvas = (FigureCanvas) viewer.getControl();
> canvas.setBackground(ColorConstants.gray);
> (canvas).setScrollBarVisibility(FigureCanvas.ALWAYS);
> //
> viewer.setKeyHandler(new GraphicalViewerKeyHandler(viewer).setParent(getCommonKeyHand ler()));
> ContextMenuProvider provider = new DesignerContextMenuProvider(viewer, getActionRegistry());
> viewer.setContextMenu(provider);
> }
> --
> SY, Konstantin.
--
SY, Konstantin.
|
|
|
Re: EditDomain and CTRL problem [message #84966 is a reply to message #84951] |
Tue, 24 June 2003 07:56   |
Eclipse User |
|
|
|
Originally posted by: none.us.ibm.com
"Konstantin Scheglov" <scheglov_ke@nlmk.ru> wrote in message
news:Dy#wOdjODHA.3608@fairy.ao.nlmk...
> Konstantin Scheglov <scheglov_ke@nlmk.ru> wrote:
>
> Ok, problem is not in CTRL.
> I want to handle mouse click on figure, created on additional
> layer. I can do this. But I want prevent GEF from handling this
> mouse click, so I call event.consume(). And after this GEF thinks,
> that all events should be handled only by this figure. :-(
This is by design. Otherwise, your figure wouldn't receive the mouse up.
Once mouse up is received, the mouse capture is released.
> How can I prevent this?
>
> > I use CTRL for special handling of mouse event, plus
> > I draw some figures different, when CTRL is pressed. All
> > works, but recently I noticed strange behavior. When I click
> > with CTRL pressed on figure on my layer, I don't receive then
> > keyDown/keyUp until I move mouse on any edit part. It seams, that
> > layer lost focus or something like this. How can I avoid this?
> > Here is how I handle keyDown/keyUp and one mouse event:
> > public void keyDown(KeyEvent keyEvent, EditPartViewer viewer) {
> > m_StateMask = keyEvent.stateMask;
> > if (keyEvent.keyCode == SWT.ESC) {
> > DesignerEditor editor = (DesignerEditor) getEditorPart();
> > List selection = editor.getGraphicalViewer().getSelectedEditParts();
> > if (selection.size() > 0) {
> > EditPart edit = (EditPart) selection.get(0);
> > if (edit.getParent() != null)
> > editor.getGraphicalViewer().select(edit.getParent());
> > }
> > return;
> > }
> > if (keyEvent.keyCode == SWT.CTRL) {
> > m_StateMask |= SWT.CTRL;
> > redraw();
> > return;
> > }
> > super.keyDown(keyEvent, viewer);
> > }
> > public void keyUp(KeyEvent keyEvent, EditPartViewer viewer) {
> > m_StateMask = keyEvent.stateMask;
> > if (keyEvent.keyCode == SWT.CTRL) {
> > m_StateMask &= ~SWT.CTRL;
> > redraw();
> > return;
> > }
> > super.keyUp(keyEvent, viewer);
> > }
> > private void redraw() {
> > DesignerEditor editor = (DesignerEditor) getEditorPart();
> > editor.getGraphicalViewer().getControl().redraw();
> > }
> > public void mouseDown(MouseEvent mouseEvent, EditPartViewer viewer) {
> > m_StateMask = mouseEvent.stateMask;
> > mouseEvent.stateMask &= ~SWT.CTRL;
> > super.mouseDown(mouseEvent, viewer);
> > }
>
> > And here is code, where I create layer, after clicking on which I
don't
> > receive keyboard events:
> > protected void configureGraphicalViewer() {
> > super.configureGraphicalViewer();
> > GraphicalViewer viewer = getGraphicalViewer();
> > FreeformGraphicalRootEditPart rootEditPart = new
FreeformGraphicalRootEditPart() {
> > protected void createLayers(LayeredPane layeredPane) {
> > super.createLayers(layeredPane);
> > layeredPane.add(new FreeformLayer(),
DesignerEditDomain.LAYER_CLICKABLE);
> > }
> > };
> > //
> > viewer.setRootEditPart(rootEditPart);
> > viewer.setEditPartFactory(new GraphicalPartFactory());
> > FigureCanvas canvas = (FigureCanvas) viewer.getControl();
> > canvas.setBackground(ColorConstants.gray);
> > (canvas).setScrollBarVisibility(FigureCanvas.ALWAYS);
> > //
> > viewer.setKeyHandler(new
GraphicalViewerKeyHandler(viewer).setParent(getCommonKeyHand ler()));
> > ContextMenuProvider provider = new DesignerContextMenuProvider(viewer,
getActionRegistry());
> > viewer.setContextMenu(provider);
> > }
>
>
>
> > --
> > SY, Konstantin.
>
> --
> SY, Konstantin.
|
|
|
Re: EditDomain and CTRL problem [message #85130 is a reply to message #84966] |
Wed, 25 June 2003 05:17   |
Eclipse User |
|
|
|
Originally posted by: scheglov_ke.nlmk.ru
Randy Hudson <none@us.ibm.com> wrote:
>> I want to handle mouse click on figure, created on additional
>> layer. I can do this. But I want prevent GEF from handling this
>> mouse click, so I call event.consume(). And after this GEF thinks,
>> that all events should be handled only by this figure. :-(
> This is by design. Otherwise, your figure wouldn't receive the mouse up.
> Once mouse up is received, the mouse capture is released.
Yes, but I move figure, when mouse pressed on it.
Can I tell GEF, that I don't need mouse anymore, and it can pass
mouse and keyboard events to EditPart's?
>> How can I prevent this?
>>
>> > I use CTRL for special handling of mouse event, plus
>> > I draw some figures different, when CTRL is pressed. All
>> > works, but recently I noticed strange behavior. When I click
>> > with CTRL pressed on figure on my layer, I don't receive then
>> > keyDown/keyUp until I move mouse on any edit part. It seams, that
>> > layer lost focus or something like this. How can I avoid this?
>> > Here is how I handle keyDown/keyUp and one mouse event:
>> > public void keyDown(KeyEvent keyEvent, EditPartViewer viewer) {
>> > m_StateMask = keyEvent.stateMask;
>> > if (keyEvent.keyCode == SWT.ESC) {
>> > DesignerEditor editor = (DesignerEditor) getEditorPart();
>> > List selection = editor.getGraphicalViewer().getSelectedEditParts();
>> > if (selection.size() > 0) {
>> > EditPart edit = (EditPart) selection.get(0);
>> > if (edit.getParent() != null)
>> > editor.getGraphicalViewer().select(edit.getParent());
>> > }
>> > return;
>> > }
>> > if (keyEvent.keyCode == SWT.CTRL) {
>> > m_StateMask |= SWT.CTRL;
>> > redraw();
>> > return;
>> > }
>> > super.keyDown(keyEvent, viewer);
>> > }
>> > public void keyUp(KeyEvent keyEvent, EditPartViewer viewer) {
>> > m_StateMask = keyEvent.stateMask;
>> > if (keyEvent.keyCode == SWT.CTRL) {
>> > m_StateMask &= ~SWT.CTRL;
>> > redraw();
>> > return;
>> > }
>> > super.keyUp(keyEvent, viewer);
>> > }
>> > private void redraw() {
>> > DesignerEditor editor = (DesignerEditor) getEditorPart();
>> > editor.getGraphicalViewer().getControl().redraw();
>> > }
>> > public void mouseDown(MouseEvent mouseEvent, EditPartViewer viewer) {
>> > m_StateMask = mouseEvent.stateMask;
>> > mouseEvent.stateMask &= ~SWT.CTRL;
>> > super.mouseDown(mouseEvent, viewer);
>> > }
>>
>> > And here is code, where I create layer, after clicking on which I
> don't
>> > receive keyboard events:
>> > protected void configureGraphicalViewer() {
>> > super.configureGraphicalViewer();
>> > GraphicalViewer viewer = getGraphicalViewer();
>> > FreeformGraphicalRootEditPart rootEditPart = new
> FreeformGraphicalRootEditPart() {
>> > protected void createLayers(LayeredPane layeredPane) {
>> > super.createLayers(layeredPane);
>> > layeredPane.add(new FreeformLayer(),
> DesignerEditDomain.LAYER_CLICKABLE);
>> > }
>> > };
>> > //
>> > viewer.setRootEditPart(rootEditPart);
>> > viewer.setEditPartFactory(new GraphicalPartFactory());
>> > FigureCanvas canvas = (FigureCanvas) viewer.getControl();
>> > canvas.setBackground(ColorConstants.gray);
>> > (canvas).setScrollBarVisibility(FigureCanvas.ALWAYS);
>> > //
>> > viewer.setKeyHandler(new
> GraphicalViewerKeyHandler(viewer).setParent(getCommonKeyHand ler()));
>> > ContextMenuProvider provider = new DesignerContextMenuProvider(viewer,
> getActionRegistry());
>> > viewer.setContextMenu(provider);
>> > }
>>
>>
>>
>> > --
>> > SY, Konstantin.
>>
>> --
>> SY, Konstantin.
--
SY, Konstantin.
|
|
|
Re: EditDomain and CTRL problem [message #85159 is a reply to message #85130] |
Wed, 25 June 2003 10:13   |
Eclipse User |
|
|
|
Originally posted by: none.us.ibm.com
"Konstantin Scheglov" <scheglov_ke@nlmk.ru> wrote in message
news:fvbReqvODHA.3496@fairy.ao.nlmk...
> Randy Hudson <none@us.ibm.com> wrote:
>
> >> I want to handle mouse click on figure, created on additional
> >> layer. I can do this. But I want prevent GEF from handling this
> >> mouse click, so I call event.consume(). And after this GEF thinks,
> >> that all events should be handled only by this figure. :-(
>
> > This is by design. Otherwise, your figure wouldn't receive the mouse
up.
> > Once mouse up is received, the mouse capture is released.
> Yes, but I move figure, when mouse pressed on it.
> Can I tell GEF, that I don't need mouse anymore, and it can pass
> mouse and keyboard events to EditPart's?
Yes, release the mouse button, and mouse and keyboard events will go to
EditPart. I don't understand what is happening, so you'll have to debug
this yourself. I know that this working as designed. There are
applications that receive mousedown on figures to expand/collapse a
container, and it is working.
|
|
|
Re: EditDomain and CTRL problem [message #85422 is a reply to message #85159] |
Thu, 26 June 2003 01:46  |
Eclipse User |
|
|
|
Originally posted by: scheglov_ke.nlmk.ru
Randy Hudson <none@us.ibm.com> wrote:
> Yes, release the mouse button, and mouse and keyboard events will go to
> EditPart. I don't understand what is happening, so you'll have to debug
> this yourself. I know that this working as designed. There are
> applications that receive mousedown on figures to expand/collapse a
> container, and it is working.
Ok, problem is that when I release button, mouse if already not in figure,
because figure was moved to other place in mouse down event.
I solved problem by not using event.consume(), I just don't pass this
event in EditDomain.
--
SY, Konstantin.
|
|
|
Goto Forum:
Current Time: Fri Apr 25 20:24:49 EDT 2025
Powered by FUDForum. Page generated in 0.06063 seconds
|