mirror of https://github.com/zlatinb/muwire
Rework the search box dropdown after the contacts selector dropdown
parent
53206b3b84
commit
3ce7dd0f8f
|
@ -26,31 +26,6 @@ class SearchFieldEditor extends BasicComboBoxEditor {
|
|||
def action = field.getAction()
|
||||
field.setAction(null)
|
||||
editor.setAction(action)
|
||||
editor.getDocument().addDocumentListener(new DocumentListener() {
|
||||
|
||||
@Override
|
||||
public void insertUpdate(DocumentEvent e) {
|
||||
SwingUtilities.invokeLater({
|
||||
field.hidePopup()
|
||||
if (model.onKeyStroke(editor.text))
|
||||
field.showPopup()
|
||||
})
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeUpdate(DocumentEvent e) {
|
||||
SwingUtilities.invokeLater({
|
||||
field.hidePopup()
|
||||
if (model.onKeyStroke(editor.text))
|
||||
field.showPopup()
|
||||
})
|
||||
}
|
||||
|
||||
@Override
|
||||
public void changedUpdate(DocumentEvent e) {
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
editor.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
|
@ -73,11 +48,14 @@ class SearchFieldEditor extends BasicComboBoxEditor {
|
|||
editor.addKeyListener(new KeyAdapter() {
|
||||
@Override
|
||||
void keyPressed(KeyEvent e) {
|
||||
if (e.getKeyCode() != KeyEvent.VK_ENTER)
|
||||
int keyCode = e.getKeyCode()
|
||||
if (keyCode == KeyEvent.VK_UP || keyCode == KeyEvent.VK_DOWN)
|
||||
return
|
||||
if (model.getSelectedItem() != null) {
|
||||
editor.setText((String)model.getSelectedItem())
|
||||
}
|
||||
SwingUtilities.invokeLater({
|
||||
field.hidePopup()
|
||||
if (model.onKeyStroke(editor.text))
|
||||
field.showPopup()
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
@ -1,22 +1,20 @@
|
|||
package com.muwire.gui
|
||||
|
||||
import javax.swing.AbstractListModel
|
||||
import javax.swing.DefaultComboBoxModel
|
||||
import javax.swing.MutableComboBoxModel
|
||||
|
||||
class SearchFieldModel extends AbstractListModel implements MutableComboBoxModel {
|
||||
class SearchFieldModel extends DefaultComboBoxModel implements MutableComboBoxModel {
|
||||
private final UISettings uiSettings
|
||||
private final File settingsFile
|
||||
private final List<String> objects = new ArrayList<>()
|
||||
private String selectedObject
|
||||
|
||||
|
||||
SearchFieldModel(UISettings uiSettings, File home) {
|
||||
super()
|
||||
this.uiSettings = uiSettings
|
||||
this.settingsFile = new File(home, "gui.properties")
|
||||
uiSettings.searchHistory.each { objects.add(it) }
|
||||
fireIntervalAdded(this, 0, objects.size() - 1)
|
||||
addAll(uiSettings.searchHistory)
|
||||
}
|
||||
|
||||
|
||||
public void addElement(Object string) {
|
||||
if (string == null)
|
||||
return
|
||||
|
@ -25,75 +23,27 @@ class SearchFieldModel extends AbstractListModel implements MutableComboBoxModel
|
|||
return
|
||||
settingsFile.withOutputStream { uiSettings.write(it) }
|
||||
}
|
||||
objects.add(string);
|
||||
fireIntervalAdded(this,objects.size()-1, objects.size()-1);
|
||||
if ( objects.size() == 1 && selectedObject == null && string != null ) {
|
||||
setSelectedItem( string );
|
||||
}
|
||||
super.addElement(string)
|
||||
}
|
||||
|
||||
boolean onKeyStroke(String selected) {
|
||||
selectedObject = selected
|
||||
if (selected == null || selected.length() == 0) {
|
||||
objects.clear()
|
||||
uiSettings.searchHistory.each { objects.add(it) }
|
||||
removeAllElements()
|
||||
addAll(uiSettings.searchHistory)
|
||||
return true
|
||||
}
|
||||
|
||||
objects.clear()
|
||||
|
||||
Set<String> matching = new HashSet<>(uiSettings.searchHistory)
|
||||
removeAllElements()
|
||||
setSelectedItem(selected)
|
||||
|
||||
List<String> matching = new ArrayList<>(uiSettings.searchHistory)
|
||||
matching.retainAll { it.containsIgnoreCase(selected) }
|
||||
|
||||
matching.each {
|
||||
objects.add(it)
|
||||
}
|
||||
Collections.sort(objects)
|
||||
if (!objects.isEmpty()) {
|
||||
fireIntervalAdded(this, 0, objects.size() - 1)
|
||||
return true
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSelectedItem(Object anObject) {
|
||||
if ((selectedObject != null && !selectedObject.equals( anObject )) ||
|
||||
selectedObject == null && anObject != null) {
|
||||
selectedObject = anObject;
|
||||
}
|
||||
}
|
||||
if (matching.isEmpty())
|
||||
return false
|
||||
|
||||
@Override
|
||||
public Object getSelectedItem() {
|
||||
selectedObject
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
objects.size()
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getElementAt(int index) {
|
||||
if ( index >= 0 && index < objects.size() )
|
||||
return objects.get(index);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeElement(Object obj) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insertElementAt(Object item, int index) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeElementAt(int index) {
|
||||
|
||||
Collections.sort(matching)
|
||||
addAll(matching)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue