[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
|
[news.eclipse.tools.gef] Re: How to get information from user in the getCreateCommand(CreateRequest request)
|
You should definitely override performCreation, since the ENTER key can also
be used in accessibility mode. The other alternative is to have the
execute() prompt, but I don't think you could handle cancel at that point.
"Barry Andrews" <bandrews@xxxxxxxxxxxxxxxx> wrote in message
news:cnijq2$96k$1@xxxxxxxxxxxxxxxxxx
> Never mind... I am too quick to post.
>
> If I put the dialog in the performCreation() method instead of
> activate(), I do not get this exception. Why, I am still not quite sure.
> I will try to figure that out, or if you already know please tell. ;)
>
> This actually works out better, because I would rather the dialog pop up
> after the user has selected the location to plop down the object rather
> than when the CreationTool is selected.
>
>
> Thanks for your help!
>
>
> Barry
>
>
> Barry Andrews wrote:
>
> > Thanks! I believe this will give me what I want. I do have one problem
> > that I can't figure out. After I hit OK or Cancel on the InputDialog, I
> > get a NullPointerException in SelectionEditPartTracker. I can't seem to
> > track this down as it is happening in another thread. Everything else
> > works fine.
> >
> > I can't figure out why the SelectionTool's mouseUp() method gets called
> > when the mouse up is happening on a button on a dialog.
> >
> > Is there something else I need to do in my extended CreationTool to keep
> > from getting this exception?
> >
> > Here is my code:
> >
> > public class DECreationTool extends CreationTool
> > {
> > private String objectName;
> >
> > /**
> > *
> > */
> > public DECreationTool()
> > {
> > super();
> > }
> >
> > /**
> > * @param aFactory
> > */
> > public DECreationTool(CreationFactory aFactory)
> > {
> > super(aFactory);
> > }
> >
> > /* (non-Javadoc)
> > * @see org.eclipse.gef.Tool#activate()
> > */
> > public void activate()
> > {
> > super.activate();
> > InputDialog input = new InputDialog(
> > DrawingEditor.getShell(),
> > "Name","Name: ","",null);
> > if(input.open() == InputDialog.CANCEL)
> > this.objectName = null;
> > else
> > this.objectName = input.getValue();
> > }
> >
> > /* (non-Javadoc)
> > * @see org.eclipse.gef.tools.CreationTool#performCreation(int)
> > */
> > protected void performCreation(int button)
> > {
> > if(this.objectName == null || this.objectName.length() == 0)
> > {
> > deactivate();
> > return;
> > }
> >
> > CreateCommand command = (CreateCommand)this.getCommand();
> > command.setName(this.objectName);
> > this.setCurrentCommand(command);
> > super.performCreation(button);
> > }
> > }
> >
> > Here is the exception:
> >
> >
> > java.lang.NullPointerException
> > at
> >
org.eclipse.gef.tools.SelectEditPartTracker.handleButtonUp(SelectEditPartTra
cker.java:114)
> >
> > at
> >
org.eclipse.gef.internal.ui.palette.editparts.ToolEntryEditPart$OtherToggleB
uttonTracker.handleButtonUp(ToolEntryEditPart.java:176)
> >
> > at
org.eclipse.gef.tools.AbstractTool.mouseUp(AbstractTool.java:1054)
> > at
org.eclipse.gef.tools.SelectionTool.mouseUp(SelectionTool.java:544)
> > at org.eclipse.gef.EditDomain.mouseUp(EditDomain.java:245)
> > at
> >
org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMouseReleased(DomainE
ventDispatcher.java:359)
> >
> > at
> >
org.eclipse.draw2d.LightweightSystem$EventHandler.mouseUp(LightweightSystem.
java:528)
> >
> > at
> >
org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:136)
> > at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
> > at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
> > at
org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2783)
> > at
org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2442)
> > at
org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1443)
> > at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1414)
> > at
> >
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:271)
> > at
org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:144)
> > at
> > org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:102)
> > at
> >
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.
java:335)
> >
> > at
> >
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:273)
> >
> > at
> >
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:129)
> >
> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > at
> >
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39
)
> >
> > at
> >
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.java:25)
> >
> > at java.lang.reflect.Method.invoke(Method.java:585)
> > at org.eclipse.core.launcher.Main.basicRun(Main.java:185)
> > at org.eclipse.core.launcher.Main.run(Main.java:704)
> > at org.eclipse.core.launcher.Main.main(Main.java:688)
> >
> >
> >
> > Pratik Shah wrote:
> >
> >> Perhaps popping up a dialog when the tool is activated.
> >>
> >> "Barry Andrews" <bandrews@xxxxxxxxxxxxxxxx> wrote in message
> >> news:cngi25$84p$1@xxxxxxxxxxxxxxxxxx
> >>
> >>> In my getCreateCommand() method in XYLayoutEditPolicy, I want to get
> >>> information from the user, for example the name of the object to
create.
> >>> I had this working before, by bringing up an InputDialog in my
> >>> CreateCommand, but I really wanted to get this information before then
> >>> and just pass it to the command. But when I call the InputDialog from
> >>> the getCreateCommand(), the dialog just pops up over and over. I
realize
> >>> it keeps popping up because every time I move the mouse, this method
> >>> gets called. My question is what is the best way to get information
from
> >>> the user before an object is created?
> >>>
> >>> thanks so much!
> >>>
> >>> Barry
> >>
> >>
> >>
> >>