diff --git a/src/main/java/com/sparrowwallet/sparrow/AppController.java b/src/main/java/com/sparrowwallet/sparrow/AppController.java index 39f27736..4a03ef2d 100644 --- a/src/main/java/com/sparrowwallet/sparrow/AppController.java +++ b/src/main/java/com/sparrowwallet/sparrow/AppController.java @@ -222,6 +222,41 @@ public class AppController implements Initializable { Platform.runLater(() -> setServerToggleTooltip(getCurrentBlockHeight())); }; + private final ListChangeListener tabsChangeListener = (c) -> { + if(c.next() && (c.wasAdded() || c.wasRemoved())) { + if(c.wasRemoved() && previouslySelectedTab != null) { + tabs.getSelectionModel().select(previouslySelectedTab); + } + + boolean walletAdded = c.getAddedSubList().stream().anyMatch(tab -> ((TabData) tab.getUserData()).getType() == TabData.TabType.WALLET); + boolean walletRemoved = c.getRemoved().stream().anyMatch(tab -> ((TabData) tab.getUserData()).getType() == TabData.TabType.WALLET); + if(walletAdded || walletRemoved) { + EventManager.get().post(new OpenWalletsEvent(tabs.getScene().getWindow(), getOpenWalletTabData())); + } + + List closedWalletTabs = c.getRemoved().stream().filter(tab -> tab.getUserData() instanceof WalletTabData) + .flatMap(tab -> ((TabPane) tab.getContent()).getTabs().stream().map(subTab -> (WalletTabData) subTab.getUserData())).collect(Collectors.toList()); + if(!closedWalletTabs.isEmpty()) { + EventManager.get().post(new WalletTabsClosedEvent(closedWalletTabs)); + } + + List closedTransactionTabs = c.getRemoved().stream().map(tab -> (TabData) tab.getUserData()) + .filter(tabData -> tabData.getType() == TabData.TabType.TRANSACTION).map(tabData -> (TransactionTabData) tabData).collect(Collectors.toList()); + if(!closedTransactionTabs.isEmpty()) { + EventManager.get().post(new TransactionTabsClosedEvent(closedTransactionTabs)); + } + + closeTab.setDisable(tabs.getTabs().isEmpty()); + if(tabs.getTabs().isEmpty()) { + Stage tabStage = (Stage) tabs.getScene().getWindow(); + tabStage.setTitle("Sparrow"); + saveTransaction.setVisible(true); + saveTransaction.setDisable(true); + exportWallet.setDisable(true); + } + } + }; + @Override public void initialize(URL location, ResourceBundle resources) { EventManager.get().register(this); @@ -278,40 +313,7 @@ public class AppController implements Initializable { //Draggle tabs introduce unwanted movement when selecting between them //tabs.setTabDragPolicy(TabPane.TabDragPolicy.REORDER); - tabs.getTabs().addListener((ListChangeListener) c -> { - if(c.next() && (c.wasAdded() || c.wasRemoved())) { - if(c.wasRemoved() && previouslySelectedTab != null) { - tabs.getSelectionModel().select(previouslySelectedTab); - } - - boolean walletAdded = c.getAddedSubList().stream().anyMatch(tab -> ((TabData)tab.getUserData()).getType() == TabData.TabType.WALLET); - boolean walletRemoved = c.getRemoved().stream().anyMatch(tab -> ((TabData)tab.getUserData()).getType() == TabData.TabType.WALLET); - if(walletAdded || walletRemoved) { - EventManager.get().post(new OpenWalletsEvent(tabs.getScene().getWindow(), getOpenWalletTabData())); - } - - List closedWalletTabs = c.getRemoved().stream().filter(tab -> tab.getUserData() instanceof WalletTabData) - .flatMap(tab -> ((TabPane)tab.getContent()).getTabs().stream().map(subTab -> (WalletTabData)subTab.getUserData())).collect(Collectors.toList()); - if(!closedWalletTabs.isEmpty()) { - EventManager.get().post(new WalletTabsClosedEvent(closedWalletTabs)); - } - - List closedTransactionTabs = c.getRemoved().stream().map(tab -> (TabData)tab.getUserData()) - .filter(tabData -> tabData.getType() == TabData.TabType.TRANSACTION).map(tabData -> (TransactionTabData)tabData).collect(Collectors.toList()); - if(!closedTransactionTabs.isEmpty()) { - EventManager.get().post(new TransactionTabsClosedEvent(closedTransactionTabs)); - } - - closeTab.setDisable(tabs.getTabs().isEmpty()); - if(tabs.getTabs().isEmpty()) { - Stage tabStage = (Stage)tabs.getScene().getWindow(); - tabStage.setTitle("Sparrow"); - saveTransaction.setVisible(true); - saveTransaction.setDisable(true); - exportWallet.setDisable(true); - } - } - }); + tabs.getTabs().addListener(tabsChangeListener); tabs.getScene().getWindow().setOnCloseRequest(event -> { EventManager.get().unregister(this); @@ -1813,15 +1815,19 @@ public class AppController implements Initializable { MenuItem moveRight = new MenuItem("Move Right"); moveRight.setOnAction(event -> { int index = tabs.getTabs().indexOf(tab); + tabs.getTabs().removeListener(tabsChangeListener); tabs.getTabs().remove(tab); tabs.getTabs().add(index + 1, tab); + tabs.getTabs().addListener(tabsChangeListener); tabs.getSelectionModel().select(tab); }); MenuItem moveLeft = new MenuItem("Move Left"); moveLeft.setOnAction(event -> { int index = tabs.getTabs().indexOf(tab); + tabs.getTabs().removeListener(tabsChangeListener); tabs.getTabs().remove(tab); tabs.getTabs().add(index - 1, tab); + tabs.getTabs().addListener(tabsChangeListener); tabs.getSelectionModel().select(tab); }); contextMenu.getItems().addAll(moveRight, moveLeft);