From 1358e144679d6b38f49c563419ee28cfacf51368 Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Sun, 3 Nov 2019 08:12:10 +0000 Subject: [PATCH] add options for search history --- .../com/muwire/gui/OptionsController.groovy | 27 +++++++++++++++---- .../models/com/muwire/gui/OptionsModel.groovy | 2 ++ .../views/com/muwire/gui/MainFrameView.groovy | 8 +++++- .../views/com/muwire/gui/OptionsView.groovy | 14 ++++++++-- .../com/muwire/gui/SearchFieldModel.groovy | 8 +++--- .../groovy/com/muwire/gui/UISettings.groovy | 3 +++ 6 files changed, 51 insertions(+), 11 deletions(-) diff --git a/gui/griffon-app/controllers/com/muwire/gui/OptionsController.groovy b/gui/griffon-app/controllers/com/muwire/gui/OptionsController.groovy index 2ac986cb..58714de9 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/OptionsController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/OptionsController.groovy @@ -10,6 +10,7 @@ import java.util.logging.Level import javax.annotation.Nonnull import javax.swing.JFileChooser +import javax.swing.JOptionPane import com.muwire.core.Core import com.muwire.core.MuWireSettings @@ -20,12 +21,14 @@ class OptionsController { OptionsModel model @MVCMember @Nonnull OptionsView view + + Core core + MuWireSettings settings + UISettings uiSettings @ControllerAction void save() { String text - Core core = application.context.get("core") - MuWireSettings settings = application.context.get("muwire-settings") def i2pProps = core.i2pOptions @@ -141,7 +144,6 @@ class OptionsController { // UI Setttings - UISettings uiSettings = application.context.get("ui-settings") text = view.lnfField.text model.lnf = text uiSettings.lnf = text @@ -169,16 +171,24 @@ class OptionsController { model.clearUploads = clearUploads uiSettings.clearUploads = clearUploads + boolean storeSearchHistory = view.storeSearchHistoryCheckbox.model.isSelected() + model.storeSearchHistory = storeSearchHistory + uiSettings.storeSearchHistory = storeSearchHistory + uiSettings.exitOnClose = model.exitOnClose if (model.closeDecisionMade) uiSettings.closeWarning = false + + saveUISettings() + cancel() + } + + private void saveUISettings() { File uiSettingsFile = new File(core.home, "gui.properties") uiSettingsFile.withOutputStream { uiSettings.write(it) } - - cancel() } @ControllerAction @@ -231,4 +241,11 @@ class OptionsController { model.exitOnClose = false model.closeDecisionMade = true } + + @ControllerAction + void clearHistory() { + uiSettings.searchHistory.clear() + saveUISettings() + JOptionPane.showMessageDialog(null, "Search history has been cleared") + } } \ No newline at end of file diff --git a/gui/griffon-app/models/com/muwire/gui/OptionsModel.groovy b/gui/griffon-app/models/com/muwire/gui/OptionsModel.groovy index 7417dd3b..485d4f8e 100644 --- a/gui/griffon-app/models/com/muwire/gui/OptionsModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/OptionsModel.groovy @@ -21,6 +21,7 @@ class OptionsModel { @Observable int speedSmoothSeconds @Observable int totalUploadSlots @Observable int uploadSlotsPerUser + @Observable boolean storeSearchHistory // i2p options @Observable String inboundLength @@ -90,6 +91,7 @@ class OptionsModel { showSearchHashes = uiSettings.showSearchHashes clearUploads = uiSettings.clearUploads exitOnClose = uiSettings.exitOnClose + storeSearchHistory = uiSettings.storeSearchHistory if (core.router != null) { inBw = String.valueOf(settings.inBw) diff --git a/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy b/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy index 997572a2..4c5989bf 100644 --- a/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy @@ -96,7 +96,13 @@ class MainFrameView { menuItem("Exit", actionPerformed : {closeApplication()}) } menu (text : "Options") { - menuItem("Configuration", actionPerformed : {mvcGroup.createMVCGroup("Options")}) + menuItem("Configuration", actionPerformed : { + def params = [:] + params['core'] = application.context.get("core") + params['settings'] = params['core'].muOptions + params['uiSettings'] = settings + mvcGroup.createMVCGroup("Options", params) + }) } menu (text : "Status") { menuItem("MuWire", actionPerformed : {mvcGroup.createMVCGroup("mu-wire-status")}) diff --git a/gui/griffon-app/views/com/muwire/gui/OptionsView.groovy b/gui/griffon-app/views/com/muwire/gui/OptionsView.groovy index 26c6a847..e11ecd56 100644 --- a/gui/griffon-app/views/com/muwire/gui/OptionsView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/OptionsView.groovy @@ -61,6 +61,7 @@ class OptionsView { def excludeLocalResultCheckbox def showSearchHashesCheckbox def clearUploadsCheckbox + def storeSearchHistoryCheckbox def inBwField def outBwField @@ -196,8 +197,17 @@ class OptionsView { constraints : gbc(gridx : 3, gridy : 2, anchor : GridBagConstraints.LINE_END)) } - panel (border : titledBorder(title : "Other Settings", border : etchedBorder(), titlePosition : TitledBorder.TOP), + panel (border : titledBorder(title : "Search Settings", border : etchedBorder(), titlePosition : TitledBorder.TOP), constraints : gbc(gridx : 0, gridy : 1, fill : GridBagConstraints.HORIZONTAL, weightx : 100)) { + gridBagLayout() + label(text : "Remember search history", constraints: gbc(gridx: 0, gridy:0, anchor : GridBagConstraints.LINE_START, weightx: 100)) + storeSearchHistoryCheckbox = checkBox(selected : bind {model.storeSearchHistory}, + constraints : gbc(gridx : 1, gridy:0, anchor : GridBagConstraints.LINE_END)) + button(text : "Clear history", constraints : gbc(gridx : 1, gridy : 1, anchor : GridBagConstraints.LINE_END), clearHistoryAction) + + } + panel (border : titledBorder(title : "Other Settings", border : etchedBorder(), titlePosition : TitledBorder.TOP), + constraints : gbc(gridx : 0, gridy : 2, fill : GridBagConstraints.HORIZONTAL, weightx : 100)) { gridBagLayout() label(text : "Automatically clear cancelled downloads", constraints: gbc(gridx: 0, gridy:0, anchor : GridBagConstraints.LINE_START, weightx: 100)) clearCancelledDownloadsCheckbox = checkBox(selected : bind {model.clearCancelledDownloads}, @@ -221,7 +231,7 @@ class OptionsView { radioButton(text : "Exit", selected : bind {model.exitOnClose}, buttonGroup : closeBehaviorGroup, exitOnCloseAction) } } - panel (constraints : gbc(gridx: 0, gridy: 2, weighty: 100)) + panel (constraints : gbc(gridx: 0, gridy: 3, weighty: 100)) } bandwidth = builder.panel { gridBagLayout() diff --git a/gui/src/main/groovy/com/muwire/gui/SearchFieldModel.groovy b/gui/src/main/groovy/com/muwire/gui/SearchFieldModel.groovy index d5a06d93..1b94f44a 100644 --- a/gui/src/main/groovy/com/muwire/gui/SearchFieldModel.groovy +++ b/gui/src/main/groovy/com/muwire/gui/SearchFieldModel.groovy @@ -18,9 +18,11 @@ class SearchFieldModel extends AbstractListModel implements MutableComboBoxModel } public void addElement(Object string) { - if (!uiSettings.searchHistory.add(string)) - return - settingsFile.withOutputStream { uiSettings.write(it) } + if (uiSettings.storeSearchHistory) { + if (!uiSettings.searchHistory.add(string)) + 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 ) { diff --git a/gui/src/main/groovy/com/muwire/gui/UISettings.groovy b/gui/src/main/groovy/com/muwire/gui/UISettings.groovy index f56a82b7..6e8343f8 100644 --- a/gui/src/main/groovy/com/muwire/gui/UISettings.groovy +++ b/gui/src/main/groovy/com/muwire/gui/UISettings.groovy @@ -16,6 +16,7 @@ class UISettings { boolean closeWarning boolean exitOnClose boolean clearUploads + boolean storeSearchHistory Set searchHistory UISettings(Properties props) { @@ -31,6 +32,7 @@ class UISettings { closeWarning = Boolean.parseBoolean(props.getProperty("closeWarning","true")) exitOnClose = Boolean.parseBoolean(props.getProperty("exitOnClose","false")) clearUploads = Boolean.parseBoolean(props.getProperty("clearUploads","false")) + storeSearchHistory = Boolean.parseBoolean(props.getProperty("storeSearchHistory","true")) searchHistory = DataUtil.readEncodedSet(props, "searchHistory") } @@ -48,6 +50,7 @@ class UISettings { props.setProperty("closeWarning", String.valueOf(closeWarning)) props.setProperty("exitOnClose", String.valueOf(exitOnClose)) props.setProperty("clearUploads", String.valueOf(clearUploads)) + props.setProperty("storeSearchHistory", String.valueOf(storeSearchHistory)) if (font != null) props.setProperty("font", font)