From 25e9c2a35bb7df5926497eff61984381c414726b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 25 Sep 2023 09:23:49 -0400 Subject: [PATCH] file completion only in current folder. hide popup when changing completer --- tools/lammps-gui/codeeditor.cpp | 48 ++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/tools/lammps-gui/codeeditor.cpp b/tools/lammps-gui/codeeditor.cpp index 91cecef1fd..4277ff4c90 100644 --- a/tools/lammps-gui/codeeditor.cpp +++ b/tools/lammps-gui/codeeditor.cpp @@ -725,6 +725,9 @@ void CodeEditor::reformatCurrentLine() void CodeEditor::runCompletion() { + QAbstractItemView *popup = nullptr; + if (current_comp) popup = current_comp->popup(); + auto cursor = textCursor(); auto line = cursor.block().text().trimmed(); // no completion possible on empty lines @@ -751,7 +754,8 @@ void CodeEditor::runCompletion() if (selected.startsWith("$")) { current_comp = varname_comp; current_comp->setCompletionPrefix(selected); - auto popup = current_comp->popup(); + if (popup && (popup != current_comp->popup())) popup->hide(); + popup = current_comp->popup(); // if the command is already a complete command, remove existing popup if (selected == current_comp->currentCompletion()) { if (popup->isVisible()) { @@ -772,7 +776,8 @@ void CodeEditor::runCompletion() current_comp = command_comp; current_comp->setCompletionPrefix(words[0].c_str()); - auto popup = current_comp->popup(); + if (popup && (popup != current_comp->popup())) popup->hide(); + popup = current_comp->popup(); // if the command is already a complete command, remove existing popup if (words[0] == current_comp->currentCompletion().toStdString()) { if (popup->isVisible()) { @@ -817,9 +822,12 @@ void CodeEditor::runCompletion() current_comp = group_comp; else if ((words[0] == "fitpod") || (words[0] == "include") || (words[0] == "ndx2group") || (words[0] == "read_data") || (words[0] == "read_dump") || - (words[0] == "read_restart") || (words[0] == "rerun")) - current_comp = file_comp; - else if (selected.startsWith("v_")) + (words[0] == "read_restart") || (words[0] == "rerun")) { + if (selected.contains('/')) { + if (popup && popup->isVisible()) popup->hide(); + } else + current_comp = file_comp; + } else if (selected.startsWith("v_")) current_comp = varname_comp; else if (selected.startsWith("c_")) current_comp = compid_comp; @@ -832,7 +840,8 @@ void CodeEditor::runCompletion() if (current_comp) { current_comp->setCompletionPrefix(words[1].c_str()); - auto popup = current_comp->popup(); + if (popup && (popup != current_comp->popup())) popup->hide(); + popup = current_comp->popup(); // if the command is already a complete command, remove existing popup if (words[1] == current_comp->currentCompletion().toStdString()) { if (popup->isVisible()) popup->hide(); @@ -870,12 +879,16 @@ void CodeEditor::runCompletion() current_comp = fixid_comp; else if (selected.startsWith("F_")) current_comp = fixid_comp; - else if ((words[0] == "fitpod") || (words[0] == "molecule")) - current_comp = file_comp; - + else if ((words[0] == "fitpod") || (words[0] == "molecule")) { + if (selected.contains('/')) { + if (popup && popup->isVisible()) popup->hide(); + } else + current_comp = file_comp; + } if (current_comp) { current_comp->setCompletionPrefix(words[2].c_str()); - auto popup = current_comp->popup(); + if (popup && (popup != current_comp->popup())) popup->hide(); + popup = current_comp->popup(); // if the command is already a complete command, remove existing popup if (words[2] == current_comp->currentCompletion().toStdString()) { if (popup->isVisible()) popup->hide(); @@ -899,9 +912,12 @@ void CodeEditor::runCompletion() current_comp = compute_comp; else if (words[0] == "dump") current_comp = dump_comp; - else if ((words[0] == "pair_coeff") && (words[1] == "*") && (words[2] == "*")) - current_comp = file_comp; - else if (selected.startsWith("v_")) + else if ((words[0] == "pair_coeff") && (words[1] == "*") && (words[2] == "*")) { + if (selected.contains('/')) { + if (popup && popup->isVisible()) popup->hide(); + } else + current_comp = file_comp; + } else if (selected.startsWith("v_")) current_comp = varname_comp; else if (selected.startsWith("c_")) current_comp = compid_comp; @@ -914,7 +930,8 @@ void CodeEditor::runCompletion() if (current_comp) { current_comp->setCompletionPrefix(words[3].c_str()); - auto popup = current_comp->popup(); + if (popup && (popup != current_comp->popup())) popup->hide(); + popup = current_comp->popup(); // if the command is already a complete command, remove existing popup if (words[3] == current_comp->currentCompletion().toStdString()) { if (popup->isVisible()) popup->hide(); @@ -942,7 +959,8 @@ void CodeEditor::runCompletion() if (current_comp) { current_comp->setCompletionPrefix(selected); - auto popup = current_comp->popup(); + if (popup && (popup != current_comp->popup())) popup->hide(); + popup = current_comp->popup(); // if the command is already a complete command, remove existing popup if (selected == current_comp->currentCompletion()) { if (popup->isVisible()) popup->hide();