From 56ac7b9fac952c7d3e1e1ca6791598dff526ade5 Mon Sep 17 00:00:00 2001 From: Hans-Albert Maritz Date: Thu, 12 Feb 2015 10:18:51 +1100 Subject: [PATCH] Added popup to show completion suggestions. issue #20 --- src/dlangide/ui/dsourceedit.d | 19 ++++++++++++++++++- src/dlangide/ui/frame.d | 2 ++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/dlangide/ui/dsourceedit.d b/src/dlangide/ui/dsourceedit.d index 5d4cc6c..fc08684 100644 --- a/src/dlangide/ui/dsourceedit.d +++ b/src/dlangide/ui/dsourceedit.d @@ -4,6 +4,7 @@ import dlangui.core.logger; import dlangui.widgets.editors; import dlangui.widgets.srcedit; import dlangui.widgets.menu; +import dlangui.widgets.popup; import ddc.lexer.textsource; import ddc.lexer.exceptions; @@ -86,11 +87,27 @@ class DSourceEdit : SourceEdit { return super.handleAction(a); } + + + void showCompletionPopup(dstring[] suggestions) { + MenuItem completionPopupItem = new MenuItem(null); + //Create popup menu + foreach(int i, dstring suggestion ; suggestions) { + auto action = new Action(i+1, suggestion); + completionPopupItem.add(action); + } + completionPopupItem.updateActionState(this); + PopupMenu popupMenu = new PopupMenu(completionPopupItem); + popupMenu.onMenuItemActionListener = this; + PopupWidget popup = window.showPopup(popupMenu, this, PopupAlign.Point | PopupAlign.Right, textPosToClient(_caretPos).left + left + _leftPaneWidth, textPosToClient(_caretPos).top + top + margins.top); + popup.flags = PopupFlags.CloseOnClickOutside; + Log.d("Showing popup at ", textPosToClient(_caretPos).left, " ", textPosToClient(_caretPos).top); + } + TextPosition getCaretPosition() { return _caretPos; } - /// change caret position and ensure it is visible void setCaretPos(int line, int column) { diff --git a/src/dlangide/ui/frame.d b/src/dlangide/ui/frame.d index f4399f2..9324d25 100644 --- a/src/dlangide/ui/frame.d +++ b/src/dlangide/ui/frame.d @@ -10,6 +10,7 @@ import dlangui.widgets.appframe; import dlangui.widgets.docks; import dlangui.widgets.toolbars; import dlangui.widgets.combobox; +import dlangui.widgets.popup; import dlangui.dialogs.dialog; import dlangui.dialogs.filedlg; import dlangui.core.stdaction; @@ -520,6 +521,7 @@ class IDEFrame : AppFrame { case IDEActions.GetCompletionSuggestions: Log.d("Getting auto completion suggestions."); auto results = _editorTool.getCompletions(currentEditor, currentEditor.getCaretPosition); + currentEditor.showCompletionPopup(results); return true; default: return super.handleAction(a);