Skip to content

Commit 9b9505f

Browse files
jannisCodemickaelistria
authored andcommitted
Drop Down menu in Quick Search implemented
1 parent 6a3eb35 commit 9b9505f

File tree

2 files changed

+54
-9
lines changed

2 files changed

+54
-9
lines changed

bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/DialogSettings.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.util.ArrayList;
3232
import java.util.Collection;
3333
import java.util.LinkedHashMap;
34+
import java.util.LinkedList;
3435
import java.util.List;
3536
import java.util.Map;
3637
import java.util.Map.Entry;
@@ -87,6 +88,8 @@ public class DialogSettings implements IDialogSettings {
8788

8889
// A Map with all the keys mapped to array of strings.
8990
private Map<String, String[]> arrayItems;
91+
private LinkedList<String> lastFiveSearches;
92+
private static final int SEARCHES_DISPLAYED = 5;
9093

9194
private static final String TAG_SECTION = "section";//$NON-NLS-1$
9295

@@ -113,6 +116,7 @@ public DialogSettings(String sectionName) {
113116
items = new LinkedHashMap<>();
114117
arrayItems = new LinkedHashMap<>();
115118
sections = new LinkedHashMap<>();
119+
lastFiveSearches = new LinkedList<>();
116120
}
117121

118122
@Override
@@ -364,6 +368,30 @@ public void put(String key, String value) {
364368
}
365369
}
366370

371+
public void inputNewSearchFilter(String SearchIn) {
372+
lastFiveSearches.addFirst(SearchIn);
373+
374+
int index = -1;
375+
for (int i = 1; i < lastFiveSearches.size(); i++) {
376+
if (lastFiveSearches.get(i).equals(SearchIn)) {
377+
index = i;
378+
}
379+
}
380+
if (index != -1)
381+
lastFiveSearches.remove(index);
382+
383+
if (lastFiveSearches.size() > SEARCHES_DISPLAYED) {
384+
lastFiveSearches.removeLast();
385+
}
386+
}
387+
388+
public LinkedList<String> getLastFilters() {
389+
if (lastFiveSearches.isEmpty()) {
390+
return null;
391+
}
392+
return lastFiveSearches;
393+
}
394+
367395
@Override
368396
public void put(String key, boolean value) {
369397
put(key, String.valueOf(value));

bundles/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/QuickSearchDialog.java

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import static org.eclipse.jface.resource.JFaceResources.TEXT_FONT;
2424

25+
import java.awt.event.ItemEvent;
2526
import java.util.ArrayList;
2627
import java.util.Arrays;
2728
import java.util.Collections;
@@ -41,6 +42,7 @@
4142
import org.eclipse.jface.action.IMenuManager;
4243
import org.eclipse.jface.action.LegacyActionTools;
4344
import org.eclipse.jface.action.MenuManager;
45+
import org.eclipse.jface.dialogs.DialogSettings;
4446
import org.eclipse.jface.dialogs.IDialogConstants;
4547
import org.eclipse.jface.dialogs.IDialogSettings;
4648
import org.eclipse.jface.layout.GridDataFactory;
@@ -83,6 +85,7 @@
8385
import org.eclipse.swt.layout.GridData;
8486
import org.eclipse.swt.layout.GridLayout;
8587
import org.eclipse.swt.widgets.Button;
88+
import org.eclipse.swt.widgets.Combo;
8689
import org.eclipse.swt.widgets.Composite;
8790
import org.eclipse.swt.widgets.Control;
8891
import org.eclipse.swt.widgets.Display;
@@ -369,7 +372,7 @@ public void update(ViewerCell cell) {
369372
private Label headerLabel;
370373

371374
private IWorkbenchWindow window;
372-
private Text searchIn;
375+
private Combo searchIn;
373376
private Label listLabel;
374377

375378
/**
@@ -409,16 +412,21 @@ public void create() {
409412
*/
410413
protected void restoreDialog(IDialogSettings settings) {
411414
try {
412-
if (initialPatternText==null) {
413-
String lastSearch = settings.get(DIALOG_LAST_QUERY);
415+
DialogSettings dialogSettings = (DialogSettings) settings;
416+
417+
if (initialPatternText==null && dialogSettings.getLastFilters() != null) {
418+
String lastSearch = dialogSettings.getLastFilters().getFirst();
419+
414420
if (lastSearch==null) {
415421
lastSearch = EMPTY_STRING;
416422
}
417423
pattern.setText(lastSearch);
418424
pattern.selectAll();
419425
}
420-
if (settings.get(DIALOG_PATH_FILTER)!=null) {
421-
String filter = settings.get(DIALOG_PATH_FILTER);
426+
if (dialogSettings.getLastFilters() != null) {
427+
String filter = dialogSettings.getLastFilters().getFirst();
428+
429+
searchIn.setItems(searchInStrings(dialogSettings.getLastFilters()));
422430
searchIn.setText(filter);
423431
}
424432

@@ -452,6 +460,14 @@ protected void restoreDialog(IDialogSettings settings) {
452460
}
453461
}
454462

463+
private String[] searchInStrings (List<String> list) {
464+
String[] strings = new String[list.size()];
465+
for(int i = 0; i < list.size(); i++) {
466+
strings[i] = list.get(i);
467+
}
468+
return strings;
469+
}
470+
455471
private class ToggleKeepOpenAction extends Action {
456472
public ToggleKeepOpenAction(IDialogSettings settings) {
457473
super(
@@ -531,9 +547,10 @@ public boolean close() {
531547
* settings used to store dialog
532548
*/
533549
protected void storeDialog(IDialogSettings settings) {
534-
String currentSearch = pattern.getText();
535-
settings.put(DIALOG_LAST_QUERY, currentSearch);
536-
settings.put(DIALOG_PATH_FILTER, searchIn.getText());
550+
DialogSettings dialogSettings = (DialogSettings) settings;
551+
dialogSettings.inputNewSearchFilter(searchIn.getText());
552+
settings.put(DIALOG_LAST_QUERY, pattern.getText());
553+
537554
if (toggleCaseSensitiveAction!=null) {
538555
settings.put(CASE_SENSITIVE, toggleCaseSensitiveAction.isChecked());
539556
}
@@ -755,7 +772,7 @@ public void getName(AccessibleEvent e) {
755772
Label searchInLabel = new Label(searchInComposite, SWT.NONE);
756773
searchInLabel.setText(Messages.QuickSearchDialog_In);
757774
GridDataFactory.swtDefaults().indent(5, 0).applyTo(searchInLabel);
758-
searchIn = new Text(searchInComposite, SWT.SINGLE | SWT.BORDER | SWT.ICON_CANCEL);
775+
searchIn = new Combo(searchInComposite, SWT.SINGLE | SWT.BORDER | SWT.ICON_CANCEL);
759776
searchIn.setToolTipText(Messages.QuickSearchDialog_InTooltip);
760777
GridDataFactory.fillDefaults().grab(true, false).indent(5, 0).applyTo(searchIn);
761778

0 commit comments

Comments
 (0)