From 5fcc3a0b88a454f7487ab106e9320c260d2400b8 Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Wed, 4 May 2022 19:15:10 +0100 Subject: [PATCH] add contact selector for custom contacts visibility type --- .../gui/WatchedDirectoryController.groovy | 3 ++- .../muwire/gui/WatchedDirectoryModel.groovy | 4 ++++ .../muwire/gui/WatchedDirectoryView.groovy | 19 ++++++++++++++++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/gui/griffon-app/controllers/com/muwire/gui/WatchedDirectoryController.groovy b/gui/griffon-app/controllers/com/muwire/gui/WatchedDirectoryController.groovy index e52f2ade..b41fc236 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/WatchedDirectoryController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/WatchedDirectoryController.groovy @@ -22,7 +22,8 @@ class WatchedDirectoryController { autoWatch : view.autoWatchCheckbox.model.isSelected(), syncInterval : Integer.parseInt(view.syncIntervalField.text), subfolders: view.applySubCheckbox.model.isSelected(), - visibility: model.visibility) + visibility: model.visibility, + customVisibility: view.contactSelector.model.contacts) model.core.eventBus.publish(event) cancel() } diff --git a/gui/griffon-app/models/com/muwire/gui/WatchedDirectoryModel.groovy b/gui/griffon-app/models/com/muwire/gui/WatchedDirectoryModel.groovy index f73a866b..e8a1ac36 100644 --- a/gui/griffon-app/models/com/muwire/gui/WatchedDirectoryModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/WatchedDirectoryModel.groovy @@ -1,6 +1,7 @@ package com.muwire.gui import com.muwire.core.Core +import com.muwire.core.Persona import com.muwire.core.files.directories.Visibility import com.muwire.core.files.directories.WatchedDirectory @@ -16,10 +17,13 @@ class WatchedDirectoryModel { @Observable boolean autoWatch @Observable int syncInterval @Observable Visibility visibility + Set allowedContacts = new HashSet<>() void mvcGroupInit(Map args) { autoWatch = directory.autoWatch syncInterval = directory.syncInterval visibility = directory.visibility + if (directory.customVisibility != null) + allowedContacts.addAll(directory.customVisibility) } } \ No newline at end of file diff --git a/gui/griffon-app/views/com/muwire/gui/WatchedDirectoryView.groovy b/gui/griffon-app/views/com/muwire/gui/WatchedDirectoryView.groovy index 0b293076..13386ff1 100644 --- a/gui/griffon-app/views/com/muwire/gui/WatchedDirectoryView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/WatchedDirectoryView.groovy @@ -3,6 +3,7 @@ package com.muwire.gui import com.muwire.core.files.directories.Visibility import griffon.core.artifact.GriffonView +import griffon.core.mvc.MVCGroup import javax.swing.JFrame import javax.swing.border.TitledBorder @@ -36,9 +37,15 @@ class WatchedDirectoryView { def syncIntervalField def applySubCheckbox + MVCGroup contactSelector + void initUI() { mainFrame = application.windowManager.findWindow("main-frame") + def params = [:] + params.contacts = model.allowedContacts + contactSelector = mvcGroup.createMVCGroup("contact-selector", UUID.randomUUID().toString(), params) + window = builder.frame(visible: false, defaultCloseOperation: JFrame.DISPOSE_ON_CLOSE, iconImage: builder.imageIcon("/MuWire-48x48.png").image, title: trans("WATCHED_DIRECTORY_CONFIGURATION")) { @@ -47,7 +54,7 @@ class WatchedDirectoryView { label(trans("WATCHED_DIRECTORY_CONFIGURATION_FOR",model.directory.directory.toString())) } panel (constraints : BorderLayout.CENTER) { - gridLayout(rows: 2, cols: 1) + gridLayout(rows: 3, cols: 1) panel(border: titledBorder(title: trans("WATCHED_DIRECTORY_SYNC_CONFIG"), border: etchedBorder(), titlePosition: TitledBorder.TOP)) { gridBagLayout() @@ -74,6 +81,7 @@ class WatchedDirectoryView { selected: bind { model.visibility == Visibility.CUSTOM }, buttonGroup : visibilityGroup, actionPerformed : actionCustom) } + widget(contactSelector.view.component) } panel (constraints : BorderLayout.SOUTH) { gridLayout(rows: 1, cols: 3) @@ -94,6 +102,8 @@ class WatchedDirectoryView { autoWatchCheckbox.addChangeListener({e -> model.autoWatch = autoWatchCheckbox.model.isSelected() } as ChangeListener) + + contactSelector.view.component.setEnabled(model.visibility == Visibility.CUSTOM) window.addWindowListener( new WindowAdapter() { void windowClosed(WindowEvent event) { @@ -105,15 +115,22 @@ class WatchedDirectoryView { window.setVisible(true) } + void mvcGroupDestroy() { + contactSelector?.destroy() + } + def actionEveryone = { + contactSelector.view.component.setEnabled(false) model.visibility = Visibility.EVERYONE } def actionContacts = { + contactSelector.view.component.setEnabled(false) model.visibility = Visibility.CONTACTS } def actionCustom = { + contactSelector.view.component.setEnabled(true) model.visibility = Visibility.CUSTOM } } \ No newline at end of file