Merge pull request #595 from eclipse/CHE-388

CHE-388 Don't use ugly browser prompt box to display 'Go to line' dialog window
6.19.x
Vitaliy Guliy 2016-03-01 16:27:17 +02:00
commit a00c5526bf
9 changed files with 108 additions and 34 deletions

View File

@ -101,15 +101,6 @@ public class EditorPartStackPresenter extends PartStackPresenter implements Edit
eventBus.addHandler(CloseNonPinnedEditorsEvent.getType(), this);
}
private void removeItemFromList(@NotNull TabItem tab) {
ListItem listItem = getListItemByTab(tab);
if (listItem != null) {
listButton.removeListItem(listItem);
items.remove(listItem);
}
}
@Nullable
private ListItem getListItemByTab(@NotNull TabItem tabItem) {
for (Entry<ListItem, TabItem> entry : items.entrySet()) {
@ -217,9 +208,11 @@ public class EditorPartStackPresenter extends PartStackPresenter implements Edit
/** {@inheritDoc} */
@Override
public void onTabClose(@NotNull TabItem tab) {
removeItemFromList(tab);
ListItem listItem = getListItemByTab(tab);
listButton.removeListItem(listItem);
items.remove(listItem);
eventBus.fireEvent(new FileEvent(((EditorTab)tab).getFile(), CLOSE));
eventBus.fireEvent(new FileEvent(((EditorTab) tab).getFile(), CLOSE));
}
/** {@inheritDoc} */

View File

@ -35,7 +35,6 @@ import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import static com.google.gwt.dom.client.Style.Display.BLOCK;
import static com.google.gwt.dom.client.Style.Display.NONE;
@ -198,11 +197,10 @@ public class EditorPartStackView extends ResizeComposite implements PartStackVie
tabs.remove(presenter);
contents.remove(presenter);
try {
PartPresenter activePart = contents.getLast();
selectTab(activePart);
} catch (NoSuchElementException exception) {
if (contents.isEmpty()) {
getElement().getParentElement().getStyle().setDisplay(NONE);
} else {
selectTab(contents.getLast());
}
//this hack need to force redraw dom element to apply correct styles

View File

@ -108,7 +108,6 @@ public class EditorTabWidget extends Composite implements EditorTab, ContextMenu
closeButton.addDomHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
EditorTabWidget.this.eventBus.fireEvent(new FileEvent(EditorTabWidget.this.file, FileEvent.FileOperation.CLOSE));
delegate.onTabClose(EditorTabWidget.this);
}
}, ClickEvent.getType());
@ -142,7 +141,8 @@ public class EditorTabWidget extends Composite implements EditorTab, ContextMenu
if (part instanceof EditorPartPresenter) {
VirtualFile changedFile = ((EditorPartPresenter)part).getEditorInput().getFile();
FileType fileType = fileTypeRegistry.getFileTypeByFile(changedFile);
iconPanel.setWidget(new SVGImage(fileType.getSVGImage()));
icon = fileType.getSVGImage();
iconPanel.setWidget(getIcon());
}
}

View File

@ -74,17 +74,17 @@ public class InputDialogPresenter implements InputDialog, InputDialogView.Action
@Override
public void cancelled() {
this.view.closeDialog();
if (this.cancelCallback != null) {
this.cancelCallback.cancelled();
view.closeDialog();
if (cancelCallback != null) {
cancelCallback.cancelled();
}
}
@Override
public void accepted() {
this.view.closeDialog();
if (this.inputCallback != null) {
this.inputCallback.accepted(view.getValue());
view.closeDialog();
if (inputCallback != null) {
inputCallback.accepted(view.getValue());
}
}
@ -103,7 +103,7 @@ public class InputDialogPresenter implements InputDialog, InputDialogView.Action
@Override
public void show() {
isInputValid();
this.view.showDialog();
view.showDialog();
}
@Override

View File

@ -137,10 +137,14 @@ class View extends Composite {
@Override
public void onKeyDown(KeyDownEvent event) {
if (KeyboardEvent.KeyCode.ESC == event.getNativeEvent().getKeyCode()) {
event.stopPropagation();
event.preventDefault();
if (delegate != null) {
delegate.onEscapeKey();
}
} else if (KeyboardEvent.KeyCode.ENTER == event.getNativeEvent().getKeyCode()) {
event.stopPropagation();
event.preventDefault();
if (delegate != null) {
delegate.onEnterKey();
}

View File

@ -162,7 +162,8 @@ public class JavaRefactoringRename implements FileEventHandler {
@Override
public void onFileOperation(FileEvent event) {
if (event.getOperationType() == CLOSE && textEditor.getDocument().getFile().getPath().equals(event.getFile().getPath())) {
if (event.getOperationType() == CLOSE && textEditor != null && textEditor.getDocument() != null &&
textEditor.getDocument().getFile().getPath().equals(event.getFile().getPath())) {
isActiveLinkedEditor = false;
}
}

View File

@ -18,7 +18,6 @@ import com.google.gwt.core.client.JsArrayString;
import com.google.gwt.core.client.RunAsyncCallback;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.LinkElement;
import com.google.gwt.dom.client.Node;
import com.google.inject.Provider;
import com.google.inject.Singleton;
@ -94,6 +93,7 @@ public class OrionEditorExtension implements Provider<OrionKeyBindingModule>{
});
}
});
// must not be delayed
registerEditor();
KeyMode.init();
@ -131,6 +131,7 @@ public class OrionEditorExtension implements Provider<OrionKeyBindingModule>{
initializationFailed(callback, "Failed to inject Orion editor", e);
}
}, scripts, new String[0]);
injectCssLink(GWT.getModuleBaseForStaticFiles() + "built-codeEdit-10.0/code_edit/built-codeEdit.css");
}
@ -154,9 +155,7 @@ public class OrionEditorExtension implements Provider<OrionKeyBindingModule>{
public void onSuccess(final JavaScriptObject[] result) {
//use 4th element as keybinding module
keyBindingModule = result[3].cast();
endConfiguration(callback);
}
},
new String[]{"orion/codeEdit",

View File

@ -96,6 +96,7 @@ import org.eclipse.che.ide.jseditor.client.texteditor.CompositeEditorWidget;
import org.eclipse.che.ide.jseditor.client.texteditor.ContentInitializedHandler;
import org.eclipse.che.ide.jseditor.client.texteditor.EditorWidget;
import org.eclipse.che.ide.jseditor.client.texteditor.LineStyler;
import org.eclipse.che.ide.ui.dialogs.DialogFactory;
import org.eclipse.che.ide.util.browser.UserAgent;
import org.eclipse.che.ide.util.loging.Log;
@ -130,6 +131,7 @@ public class OrionEditorWidget extends CompositeEditorWidget implements HasChang
private final JavaScriptObject uiUtilsOverlay;
private final KeymapPrefReader keymapPrefReader;
private final ContentAssistWidgetFactory contentAssistWidgetFactory;
private final DialogFactory dialogFactory;
@UiField
SimplePanel panel;
@ -169,6 +171,7 @@ public class OrionEditorWidget extends CompositeEditorWidget implements HasChang
final KeymapPrefReader keymapPrefReader,
final Provider<OrionKeyBindingModule> keyBindingModuleProvider,
final ContentAssistWidgetFactory contentAssistWidgetFactory,
final DialogFactory dialogFactory,
@Assisted final List<String> editorModes,
@Assisted final WidgetInitializedCallback widgetInitializedCallback) {
this.keyBindingModuleProvider = keyBindingModuleProvider;
@ -176,6 +179,7 @@ public class OrionEditorWidget extends CompositeEditorWidget implements HasChang
this.moduleHolder = moduleHolder;
this.keyModeInstances = keyModeInstances;
this.eventBus = eventBus;
this.dialogFactory = dialogFactory;
initWidget(UIBINDER.createAndBindUi(this));
this.keymapPrefReader = keymapPrefReader;
@ -193,6 +197,8 @@ public class OrionEditorWidget extends CompositeEditorWidget implements HasChang
codeEditWidgetModule.createEditorView(panel.getElement(), JavaScriptObject.createObject())
.then(new EditorViewCreatedOperation(widgetInitializedCallback));
registerPromptFunction();
}
private static JavaScriptObject getEditorSettings() {
@ -801,4 +807,56 @@ public class OrionEditorWidget extends CompositeEditorWidget implements HasChang
widgetInitializedCallback.initialized(OrionEditorWidget.this);
}
}
/**
* Registers global prompt function to be accessible directly from JavaScript.
*
* Function promptIDE(title, text, defaultValue, callback)
* title Dialog title
* text The text to display in the dialog box
* defaultValue The default value
* callback function(value)
* clicking "OK" will return input value
* clicking "Cancel" will return null
*/
private native void registerPromptFunction() /*-{
if (!$wnd["promptIDE"]) {
var instance = this;
$wnd["promptIDE"] = function(title, text, defaultValue, callback) {
instance.@org.eclipse.che.ide.editor.orion.client.OrionEditorWidget::askLineNumber(*)(title, text, defaultValue, callback);
};
}
}-*/;
/**
* Custom callback to pass given value to native javascript function.
*/
private class InputCallback implements org.eclipse.che.ide.ui.dialogs.InputCallback {
private JavaScriptObject callback;
public InputCallback(JavaScriptObject callback) {
this.callback = callback;
}
@Override
public native void accepted(String value) /*-{
var callback = this.@org.eclipse.che.ide.editor.orion.client.OrionEditorWidget.InputCallback::callback;
callback(value);
}-*/;
};
private void askLineNumber(String title, String text, String defaultValue, final JavaScriptObject callback) {
if (defaultValue == null) {
defaultValue = "";
} else {
// It's strange situation defaultValue.length() returns 'undefined' but must return a number.
// Reinitialise the variable resolves the problem.
defaultValue = "" + defaultValue;
}
dialogFactory.createInputDialog(title, text, defaultValue, 0, defaultValue.length(), new InputCallback(callback), null).show();
}
}

View File

@ -35907,14 +35907,35 @@ define('orion/editorCommands',[
var line;
var editor = this.editor || that.editor;
var model = editor.getModel();
if (data.parameters && data.parameters.valueFor('line')) { //$NON-NLS-0$
line = data.parameters.valueFor('line'); //$NON-NLS-0$
} else {
line = model.getLineAtOffset(editor.getCaretOffset());
line = prompt(messages.gotoLinePrompt, line + 1);
if (line) {
line = parseInt(line, 10);
editor.onGotoLine(line - 1, 0);
}
return;
}
line = model.getLineAtOffset(editor.getCaretOffset());
// try to use promptIDE(title, text, defaultValue, callback) function
if (window["promptIDE"]) {
window["promptIDE"](messages.gotoLineTooltip, messages.gotoLinePrompt, line + 1,
function(value) {
if (value) {
value = parseInt(value, 10);
}
if (value) {
editor.onGotoLine(value - 1, 0);
}
});
return;
}
// use browser based
line = prompt(messages.gotoLinePrompt, line + 1);
if (line) {
line = parseInt(line, 10);
}
if (line) {
editor.onGotoLine(line - 1, 0);
@ -42268,4 +42289,4 @@ define('embeddedEditor/builder/embeddedEditor',[
});
return CodeEdit;
});
define('orion/codeEdit', ['embeddedEditor/builder/embeddedEditor'], function(p) { return p; });
define('orion/codeEdit', ['embeddedEditor/builder/embeddedEditor'], function(p) { return p; });