diff --git a/src/main/java/io/github/dsheirer/gui/playlist/alias/AliasBulkEditor.java b/src/main/java/io/github/dsheirer/gui/playlist/alias/AliasBulkEditor.java index 32222ab5..8349489c 100644 --- a/src/main/java/io/github/dsheirer/gui/playlist/alias/AliasBulkEditor.java +++ b/src/main/java/io/github/dsheirer/gui/playlist/alias/AliasBulkEditor.java @@ -19,11 +19,19 @@ package io.github.dsheirer.gui.playlist.alias; +import java.util.List; + +import org.controlsfx.control.ToggleSwitch; + import com.google.common.collect.Ordering; + import io.github.dsheirer.alias.Alias; import io.github.dsheirer.gui.playlist.Editor; import io.github.dsheirer.icon.Icon; import io.github.dsheirer.playlist.PlaylistManager; +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.ReadOnlyBooleanProperty; +import javafx.beans.property.SimpleBooleanProperty; import javafx.collections.transformation.SortedList; import javafx.event.ActionEvent; import javafx.event.EventHandler; @@ -41,9 +49,6 @@ import javafx.scene.layout.ColumnConstraints; import javafx.scene.layout.GridPane; import javafx.scene.paint.Color; import javafx.util.Callback; -import org.controlsfx.control.ToggleSwitch; - -import java.util.List; /** * Editor for multiple selected aliases providing limited options for changing attributes of multiple aliases @@ -60,6 +65,9 @@ public class AliasBulkEditor extends Editor> private ToggleSwitch mMonitorAudioToggleSwitch; private ComboBox mMonitorPriorityComboBox; private Button mApplyMonitorButton; + + private BooleanProperty mChangeInProgressProperty; + private ReadOnlyBooleanProperty mChangeInProgressROProperty; /** * Constructs an instance @@ -68,6 +76,8 @@ public class AliasBulkEditor extends Editor> public AliasBulkEditor(PlaylistManager playlistManager) { mPlaylistManager = playlistManager; + + mChangeInProgressProperty = new SimpleBooleanProperty(); GridPane gridPane = new GridPane(); gridPane.setPadding(new Insets(10,10,10,10)); @@ -160,6 +170,29 @@ public class AliasBulkEditor extends Editor> { //no-op } + + /** + * Property indicating whether a bulk change is in progress. Bulk changes may cause drastic + * slow downs in some UI components. + * @return changeInProgressProperty + */ + public ReadOnlyBooleanProperty changeInProgressProperty() + { + if(mChangeInProgressROProperty == null) + mChangeInProgressROProperty = BooleanProperty.readOnlyBooleanProperty(mChangeInProgressProperty); + + return mChangeInProgressROProperty; + } + + private void startChange() + { + mChangeInProgressProperty.set(true); + } + + private void endChange() + { + mChangeInProgressProperty.set(false); + } private Label getEditingLabel() { @@ -189,12 +222,16 @@ public class AliasBulkEditor extends Editor> { mApplyColorButton = new Button("Apply"); mApplyColorButton.setOnAction(event -> { + startChange(); + int colorValue = ColorUtil.toInteger(getColorPicker().getValue()); for(Alias alias: getItem()) { alias.setColor(colorValue); } + + endChange(); }); } @@ -207,10 +244,14 @@ public class AliasBulkEditor extends Editor> { mResetColorButton = new Button("Reset Color"); mResetColorButton.setOnAction(event -> { + startChange(); + for(Alias alias: getItem()) { alias.setColor(0); } + + endChange(); }); } @@ -246,6 +287,8 @@ public class AliasBulkEditor extends Editor> @Override public void handle(ActionEvent event) { + startChange(); + Icon icon = getIconNodeComboBox().getSelectionModel().getSelectedItem(); if(icon != null) @@ -255,6 +298,8 @@ public class AliasBulkEditor extends Editor> alias.setIconName(icon.getName()); } } + + endChange(); } }); } @@ -295,6 +340,7 @@ public class AliasBulkEditor extends Editor> return mMonitorPriorityComboBox; } + private static int setCount = 0; private Button getApplyMonitorButton() { if(mApplyMonitorButton == null) @@ -305,6 +351,8 @@ public class AliasBulkEditor extends Editor> @Override public void handle(ActionEvent event) { + startChange(); + boolean canMonitor = getMonitorAudioToggleSwitch().isSelected(); Integer priority = getMonitorPriorityComboBox().getSelectionModel().getSelectedItem(); if(canMonitor) @@ -318,11 +366,15 @@ public class AliasBulkEditor extends Editor> { priority = io.github.dsheirer.alias.id.priority.Priority.DO_NOT_MONITOR; } - + + final Integer pri = priority; for(Alias alias: getItem()) { - alias.setCallPriority(priority); + alias.setCallPriority(pri); + //System.out.println(++setCount); } + + endChange(); } }); } diff --git a/src/main/java/io/github/dsheirer/gui/playlist/alias/AliasConfigurationEditor.java b/src/main/java/io/github/dsheirer/gui/playlist/alias/AliasConfigurationEditor.java index 05c314e0..e91e5a9b 100644 --- a/src/main/java/io/github/dsheirer/gui/playlist/alias/AliasConfigurationEditor.java +++ b/src/main/java/io/github/dsheirer/gui/playlist/alias/AliasConfigurationEditor.java @@ -22,6 +22,15 @@ package io.github.dsheirer.gui.playlist.alias; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.function.Predicate; + +import org.controlsfx.control.textfield.TextFields; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.github.dsheirer.alias.Alias; import io.github.dsheirer.alias.AliasFactory; import io.github.dsheirer.alias.AliasList; @@ -68,14 +77,6 @@ import javafx.util.Callback; import jiconfont.IconCode; import jiconfont.icons.font_awesome.FontAwesome; import jiconfont.javafx.IconNode; -import org.controlsfx.control.textfield.TextFields; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.function.Predicate; /** * Editor for aliases @@ -445,6 +446,19 @@ public class AliasConfigurationEditor extends SplitPane { mAliasSortedList = new SortedList<>(getAliasFilteredList()); mAliasSortedList.comparatorProperty().bind(getAliasTableView().comparatorProperty()); + + //Don't re-sort while the bulk editor is still applying changes to aliases + getAliasBulkEditor().changeInProgressProperty().addListener((observable, oldValue, newValue) -> { + if(newValue) + { + mAliasSortedList.comparatorProperty().unbind(); + mAliasSortedList.setComparator(null); + } + else + { + mAliasSortedList.comparatorProperty().bind(getAliasTableView().comparatorProperty()); + } + }); } return mAliasSortedList;