From 76d8d847bd5416bc09008e022b0b5db640fafa8e Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Fri, 8 Nov 2019 18:15:54 +0000 Subject: [PATCH] wip on grouping by file --- .../com/muwire/gui/MainFrameController.groovy | 1 + .../com/muwire/gui/OptionsController.groovy | 12 ++++++++++ .../models/com/muwire/gui/OptionsModel.groovy | 2 ++ .../com/muwire/gui/SearchTabModel.groovy | 5 ++++ .../views/com/muwire/gui/OptionsView.groovy | 12 +++++++--- .../views/com/muwire/gui/SearchTabView.groovy | 23 +++++++++++++++---- .../groovy/com/muwire/gui/UISettings.groovy | 3 +++ 7 files changed, 51 insertions(+), 7 deletions(-) diff --git a/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy b/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy index c4e700ca..1b9286f7 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy @@ -90,6 +90,7 @@ class MainFrameController { params["search-terms"] = search params["uuid"] = uuid.toString() params["core"] = core + params["settings"] = view.settings def group = mvcGroup.createMVCGroup("SearchTab", uuid.toString(), params) model.results[uuid.toString()] = group diff --git a/gui/griffon-app/controllers/com/muwire/gui/OptionsController.groovy b/gui/griffon-app/controllers/com/muwire/gui/OptionsController.groovy index 58714de9..ec9d6f8e 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/OptionsController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/OptionsController.groovy @@ -155,6 +155,8 @@ class OptionsController { uiSettings.autoFontSize = model.automaticFontSize uiSettings.fontSize = Integer.parseInt(view.fontSizeField.text) + uiSettings.groupByFile = model.groupByFile + boolean clearCancelledDownloads = view.clearCancelledDownloadsCheckbox.model.isSelected() model.clearCancelledDownloads = clearCancelledDownloads uiSettings.clearCancelledDownloads = clearCancelledDownloads @@ -242,6 +244,16 @@ class OptionsController { model.closeDecisionMade = true } + @ControllerAction + void groupByFile() { + model.groupByFile = true + } + + @ControllerAction + void groupBySender() { + model.groupByFile = false + } + @ControllerAction void clearHistory() { uiSettings.searchHistory.clear() diff --git a/gui/griffon-app/models/com/muwire/gui/OptionsModel.groovy b/gui/griffon-app/models/com/muwire/gui/OptionsModel.groovy index 485d4f8e..cb4531ec 100644 --- a/gui/griffon-app/models/com/muwire/gui/OptionsModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/OptionsModel.groovy @@ -42,6 +42,7 @@ class OptionsModel { @Observable boolean excludeLocalResult @Observable boolean showSearchHashes @Observable boolean clearUploads + @Observable boolean groupByFile @Observable boolean exitOnClose @Observable boolean closeDecisionMade @@ -92,6 +93,7 @@ class OptionsModel { clearUploads = uiSettings.clearUploads exitOnClose = uiSettings.exitOnClose storeSearchHistory = uiSettings.storeSearchHistory + groupByFile = uiSettings.groupByFile if (core.router != null) { inBw = String.valueOf(settings.inBw) diff --git a/gui/griffon-app/models/com/muwire/gui/SearchTabModel.groovy b/gui/griffon-app/models/com/muwire/gui/SearchTabModel.groovy index 09bf923c..758c8439 100644 --- a/gui/griffon-app/models/com/muwire/gui/SearchTabModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/SearchTabModel.groovy @@ -76,9 +76,14 @@ class SearchTabModel { sourcesBucket.put(e.infohash, sourceBucket) } sourceBucket.addAll(e.sources) + + results2.clear() + results2.addAll(hashBucket.keySet()) JTable table = builder.getVariable("senders-table") table.model.fireTableDataChanged() + table = builder.getVariable("results-table2") + table.model.fireTableDataChanged() } } diff --git a/gui/griffon-app/views/com/muwire/gui/OptionsView.groovy b/gui/griffon-app/views/com/muwire/gui/OptionsView.groovy index 888c877f..1efa114d 100644 --- a/gui/griffon-app/views/com/muwire/gui/OptionsView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/OptionsView.groovy @@ -200,10 +200,16 @@ class OptionsView { 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)) + label(text : "By default, group search results by", constraints : gbc(gridx :0, gridy: 0, anchor : GridBagConstraints.LINE_START, weightx : 100)) + panel(constraints : gbc(gridx : 1, gridy : 0, anchor : GridBagConstraints.LINE_END)) { + buttonGroup(id : "groupBy") + radioButton(text : "Sender", selected : bind {!model.groupByFile}, buttonGroup : groupBy, groupBySenderAction) + radioButton(text : "File", selected : bind {model.groupByFile}, buttonGroup : groupBy, groupByFileAction) + } + label(text : "Remember search history", constraints: gbc(gridx: 0, gridy:1, 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) + constraints : gbc(gridx : 1, gridy:1, anchor : GridBagConstraints.LINE_END)) + button(text : "Clear history", constraints : gbc(gridx : 1, gridy : 2, anchor : GridBagConstraints.LINE_END), clearHistoryAction) } panel (border : titledBorder(title : "Other Settings", border : etchedBorder(), titlePosition : TitledBorder.TOP), diff --git a/gui/griffon-app/views/com/muwire/gui/SearchTabView.groovy b/gui/griffon-app/views/com/muwire/gui/SearchTabView.groovy index 888bc749..89810b0b 100644 --- a/gui/griffon-app/views/com/muwire/gui/SearchTabView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/SearchTabView.groovy @@ -39,6 +39,8 @@ class SearchTabView { FactoryBuilderSupport builder @MVCMember @Nonnull SearchTabModel model + + UISettings settings def pane def parent @@ -175,6 +177,7 @@ class SearchTabView { tableModel(list : model.senders2) { closureColumn(header : "Sender", preferredWidth : 350, type : String, read : {it.sender.getHumanReadableName()}) closureColumn(header : "Browse", preferredWidth : 20, type : Boolean, read : {it.browse}) + closureColumn(header : "Comment", preferredWidth : 20, type : Boolean, read : {it.comment != null}) closureColumn(header : "Certificates", preferredWidth : 20, type: Integer, read : {it.certificates}) closureColumn(header : "Trust", preferredWidth : 50, type : String, read : { model.core.trustService.getLevel(it.sender.destination).toString() @@ -202,8 +205,8 @@ class SearchTabView { panel (constraints : BorderLayout.SOUTH) { label(text : "Group by") buttonGroup(id : "groupBy") - radioButton(text : "Sender", selected : true, buttonGroup : groupBy, actionPerformed: showSenderGrouping) - radioButton(text : "File", selected : false, buttonGroup : groupBy, actionPerformed: showFileGrouping) + radioButton(text : "Sender", selected : bind {!model.groupedByFile}, buttonGroup : groupBy, actionPerformed: showSenderGrouping) + radioButton(text : "File", selected : bind {model.groupedByFile}, buttonGroup : groupBy, actionPerformed: showFileGrouping) } } @@ -344,6 +347,14 @@ class SearchTabView { sendersTable2.model.fireTableDataChanged() }) + resultsTable2.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (e.getClickCount() > 1 && e.button == MouseEvent.BUTTON1) + mvcGroup.controller.download() + } + }) + // TODO: add download right-click action // senders table 2 @@ -358,15 +369,19 @@ class SearchTabView { model.browseActionEnabled = false model.viewCertificatesActionEnabled = false model.trustButtonsEnabled = false + model.viewCommentActionEnabled = false return } model.browseActionEnabled = model.senders2[row].browse model.trustButtonsEnabled = true + model.viewCommentActionEnabled = model.senders2[row].comment != null model.viewCertificatesActionEnabled = model.senders2[row].certificates > 0 }) - - showSenderGrouping.call() + if (settings.groupByFile) + showFileGrouping.call() + else + showSenderGrouping.call() } def closeTab = { diff --git a/gui/src/main/groovy/com/muwire/gui/UISettings.groovy b/gui/src/main/groovy/com/muwire/gui/UISettings.groovy index 9215c66e..2ef4ec45 100644 --- a/gui/src/main/groovy/com/muwire/gui/UISettings.groovy +++ b/gui/src/main/groovy/com/muwire/gui/UISettings.groovy @@ -18,6 +18,7 @@ class UISettings { boolean exitOnClose boolean clearUploads boolean storeSearchHistory + boolean groupByFile Set searchHistory Set openTabs @@ -36,6 +37,7 @@ class UISettings { exitOnClose = Boolean.parseBoolean(props.getProperty("exitOnClose","false")) clearUploads = Boolean.parseBoolean(props.getProperty("clearUploads","false")) storeSearchHistory = Boolean.parseBoolean(props.getProperty("storeSearchHistory","true")) + groupByFile = Boolean.parseBoolean(props.getProperty("groupByFile","false")) searchHistory = DataUtil.readEncodedSet(props, "searchHistory") openTabs = DataUtil.readEncodedSet(props, "openTabs") @@ -56,6 +58,7 @@ class UISettings { props.setProperty("exitOnClose", String.valueOf(exitOnClose)) props.setProperty("clearUploads", String.valueOf(clearUploads)) props.setProperty("storeSearchHistory", String.valueOf(storeSearchHistory)) + props.setProperty("groupByFile", String.valueOf(groupByFile)) if (font != null) props.setProperty("font", font)