update block explorer preferences for xmr, remove address url
This commit is contained in:
parent
9aea5e0c58
commit
75f5255050
10 changed files with 20 additions and 132 deletions
|
@ -23,22 +23,19 @@ import haveno.common.proto.persistable.PersistablePayload;
|
||||||
public final class BlockChainExplorer implements PersistablePayload {
|
public final class BlockChainExplorer implements PersistablePayload {
|
||||||
public final String name;
|
public final String name;
|
||||||
public final String txUrl;
|
public final String txUrl;
|
||||||
public final String addressUrl;
|
|
||||||
|
|
||||||
public BlockChainExplorer(String name, String txUrl, String addressUrl) {
|
public BlockChainExplorer(String name, String txUrl) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.txUrl = txUrl;
|
this.txUrl = txUrl;
|
||||||
this.addressUrl = addressUrl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Message toProtoMessage() {
|
public Message toProtoMessage() {
|
||||||
return protobuf.BlockChainExplorer.newBuilder().setName(name).setTxUrl(txUrl).setAddressUrl(addressUrl).build();
|
return protobuf.BlockChainExplorer.newBuilder().setName(name).setTxUrl(txUrl).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BlockChainExplorer fromProto(protobuf.BlockChainExplorer proto) {
|
public static BlockChainExplorer fromProto(protobuf.BlockChainExplorer proto) {
|
||||||
return new BlockChainExplorer(proto.getName(),
|
return new BlockChainExplorer(proto.getName(),
|
||||||
proto.getTxUrl(),
|
proto.getTxUrl());
|
||||||
proto.getAddressUrl());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,43 +77,11 @@ public final class Preferences implements PersistedDataHost, BridgeAddressProvid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final ArrayList<BlockChainExplorer> BTC_MAIN_NET_EXPLORERS = new ArrayList<>(Arrays.asList(
|
|
||||||
new BlockChainExplorer("mempool.space (@wiz)", "https://mempool.space/tx/", "https://mempool.space/address/"),
|
|
||||||
new BlockChainExplorer("mempool.space Tor V3", "http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/tx/", "http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/address/"),
|
|
||||||
new BlockChainExplorer("mempool.emzy.de (@emzy)", "https://mempool.emzy.de/tx/", "https://mempool.emzy.de/address/"),
|
|
||||||
new BlockChainExplorer("mempool.emzy.de Tor V3", "http://mempool4t6mypeemozyterviq3i5de4kpoua65r3qkn5i3kknu5l2cad.onion/tx/", "http://mempool4t6mypeemozyterviq3i5de4kpoua65r3qkn5i3kknu5l2cad.onion/address/"),
|
|
||||||
new BlockChainExplorer("mempool.haveno.services (@devinbileck)", "https://mempool.haveno.services/tx/", "https://mempool.haveno.services/address/"),
|
|
||||||
new BlockChainExplorer("mempool.haveno.services Tor V3", "http://mempoolusb2f67qi7mz2it7n5e77a6komdzx6wftobcduxszkdfun2yd.onion/tx/", "http://mempoolusb2f67qi7mz2it7n5e77a6komdzx6wftobcduxszkdfun2yd.onion/address/"),
|
|
||||||
new BlockChainExplorer("Blockstream.info", "https://blockstream.info/tx/", "https://blockstream.info/address/"),
|
|
||||||
new BlockChainExplorer("Blockstream.info Tor V3", "http://explorerzydxu5ecjrkwceayqybizmpjjznk5izmitf2modhcusuqlid.onion/tx/", "http://explorerzydxu5ecjrkwceayqybizmpjjznk5izmitf2modhcusuqlid.onion/address/"),
|
|
||||||
new BlockChainExplorer("OXT", "https://oxt.me/transaction/", "https://oxt.me/address/"),
|
|
||||||
new BlockChainExplorer("Bitaps", "https://bitaps.com/", "https://bitaps.com/"),
|
|
||||||
new BlockChainExplorer("Blockcypher", "https://live.blockcypher.com/btc/tx/", "https://live.blockcypher.com/btc/address/"),
|
|
||||||
new BlockChainExplorer("Tradeblock", "https://tradeblock.com/bitcoin/tx/", "https://tradeblock.com/bitcoin/address/"),
|
|
||||||
new BlockChainExplorer("Biteasy", "https://www.biteasy.com/transactions/", "https://www.biteasy.com/addresses/"),
|
|
||||||
new BlockChainExplorer("Blockonomics", "https://www.blockonomics.co/api/tx?txid=", "https://www.blockonomics.co/#/search?q="),
|
|
||||||
new BlockChainExplorer("Chainflyer", "http://chainflyer.bitflyer.jp/Transaction/", "http://chainflyer.bitflyer.jp/Address/"),
|
|
||||||
new BlockChainExplorer("Smartbit", "https://www.smartbit.com.au/tx/", "https://www.smartbit.com.au/address/"),
|
|
||||||
new BlockChainExplorer("SoChain. Wow.", "https://chain.so/tx/BTC/", "https://chain.so/address/BTC/"),
|
|
||||||
new BlockChainExplorer("Blockchain.info", "https://blockchain.info/tx/", "https://blockchain.info/address/"),
|
|
||||||
new BlockChainExplorer("Insight", "https://insight.bitpay.com/tx/", "https://insight.bitpay.com/address/"),
|
|
||||||
new BlockChainExplorer("Blockchair", "https://blockchair.com/bitcoin/transaction/", "https://blockchair.com/bitcoin/address/")
|
|
||||||
));
|
|
||||||
private static final ArrayList<BlockChainExplorer> BTC_TEST_NET_EXPLORERS = new ArrayList<>(Arrays.asList(
|
|
||||||
new BlockChainExplorer("Blockstream.info", "https://blockstream.info/testnet/tx/", "https://blockstream.info/testnet/address/"),
|
|
||||||
new BlockChainExplorer("Blockstream.info Tor V3", "http://explorerzydxu5ecjrkwceayqybizmpjjznk5izmitf2modhcusuqlid.onion/testnet/tx/", "http://explorerzydxu5ecjrkwceayqybizmpjjznk5izmitf2modhcusuqlid.onion/testnet/address/"),
|
|
||||||
new BlockChainExplorer("Blockcypher", "https://live.blockcypher.com/btc-testnet/tx/", "https://live.blockcypher.com/btc-testnet/address/"),
|
|
||||||
new BlockChainExplorer("Blocktrail", "https://www.blocktrail.com/tBTC/tx/", "https://www.blocktrail.com/tBTC/address/"),
|
|
||||||
new BlockChainExplorer("Biteasy", "https://www.biteasy.com/testnet/transactions/", "https://www.biteasy.com/testnet/addresses/"),
|
|
||||||
new BlockChainExplorer("Smartbit", "https://testnet.smartbit.com.au/tx/", "https://testnet.smartbit.com.au/address/"),
|
|
||||||
new BlockChainExplorer("SoChain. Wow.", "https://chain.so/tx/BTCTEST/", "https://chain.so/address/BTCTEST/"),
|
|
||||||
new BlockChainExplorer("Blockchair", "https://blockchair.com/bitcoin/testnet/transaction/", "https://blockchair.com/bitcoin/testnet/address/")
|
|
||||||
));
|
|
||||||
private static final ArrayList<BlockChainExplorer> XMR_MAIN_NET_EXPLORERS = new ArrayList<>(Arrays.asList(
|
private static final ArrayList<BlockChainExplorer> XMR_MAIN_NET_EXPLORERS = new ArrayList<>(Arrays.asList(
|
||||||
new BlockChainExplorer("xmrchain.net", "https://xmrchain.net/tx/", "")
|
new BlockChainExplorer("xmrchain.net", "https://xmrchain.net/tx/")
|
||||||
));
|
));
|
||||||
private static final ArrayList<BlockChainExplorer> XMR_STAGE_NET_EXPLORERS = new ArrayList<>(Arrays.asList(
|
private static final ArrayList<BlockChainExplorer> XMR_STAGE_NET_EXPLORERS = new ArrayList<>(Arrays.asList(
|
||||||
new BlockChainExplorer("stagenet.xmrchain.net", "https://stagenet.xmrchain.net/tx/", "")
|
new BlockChainExplorer("stagenet.xmrchain.net", "https://stagenet.xmrchain.net/tx/")
|
||||||
));
|
));
|
||||||
|
|
||||||
private static final ArrayList<String> XMR_TX_PROOF_SERVICES_CLEAR_NET = new ArrayList<>(Arrays.asList(
|
private static final ArrayList<String> XMR_TX_PROOF_SERVICES_CLEAR_NET = new ArrayList<>(Arrays.asList(
|
||||||
|
@ -265,10 +233,7 @@ public final class Preferences implements PersistedDataHost, BridgeAddressProvid
|
||||||
setCryptoCurrencies(CurrencyUtil.getMainCryptoCurrencies());
|
setCryptoCurrencies(CurrencyUtil.getMainCryptoCurrencies());
|
||||||
|
|
||||||
BaseCurrencyNetwork baseCurrencyNetwork = Config.baseCurrencyNetwork();
|
BaseCurrencyNetwork baseCurrencyNetwork = Config.baseCurrencyNetwork();
|
||||||
if ("BTC".equals(baseCurrencyNetwork.getCurrencyCode())) {
|
if ("XMR".equals(baseCurrencyNetwork.getCurrencyCode())) {
|
||||||
setBlockChainExplorerMainNet(BTC_MAIN_NET_EXPLORERS.get(0));
|
|
||||||
setBlockChainExplorerStageNet(BTC_TEST_NET_EXPLORERS.get(0));
|
|
||||||
} else if ("XMR".equals(baseCurrencyNetwork.getCurrencyCode())) {
|
|
||||||
setBlockChainExplorerMainNet(XMR_MAIN_NET_EXPLORERS.get(0));
|
setBlockChainExplorerMainNet(XMR_MAIN_NET_EXPLORERS.get(0));
|
||||||
setBlockChainExplorerStageNet(XMR_STAGE_NET_EXPLORERS.get(0));
|
setBlockChainExplorerStageNet(XMR_STAGE_NET_EXPLORERS.get(0));
|
||||||
} else {
|
} else {
|
||||||
|
@ -806,11 +771,11 @@ public final class Preferences implements PersistedDataHost, BridgeAddressProvid
|
||||||
BaseCurrencyNetwork baseCurrencyNetwork = Config.baseCurrencyNetwork();
|
BaseCurrencyNetwork baseCurrencyNetwork = Config.baseCurrencyNetwork();
|
||||||
switch (baseCurrencyNetwork) {
|
switch (baseCurrencyNetwork) {
|
||||||
case XMR_MAINNET:
|
case XMR_MAINNET:
|
||||||
return BTC_MAIN_NET_EXPLORERS;
|
return XMR_MAIN_NET_EXPLORERS;
|
||||||
case XMR_STAGENET:
|
case XMR_STAGENET:
|
||||||
return BTC_TEST_NET_EXPLORERS;
|
return XMR_STAGE_NET_EXPLORERS;
|
||||||
case XMR_LOCAL:
|
case XMR_LOCAL:
|
||||||
return BTC_TEST_NET_EXPLORERS; // TODO: no testnet explorer for private testnet
|
return XMR_STAGE_NET_EXPLORERS; // TODO: no testnet explorer for private testnet
|
||||||
default:
|
default:
|
||||||
throw new RuntimeException("BaseCurrencyNetwork not defined. BaseCurrencyNetwork=" + baseCurrencyNetwork);
|
throw new RuntimeException("BaseCurrencyNetwork not defined. BaseCurrencyNetwork=" + baseCurrencyNetwork);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,9 +22,7 @@ import de.jensd.fx.fontawesome.AwesomeDude;
|
||||||
import de.jensd.fx.fontawesome.AwesomeIcon;
|
import de.jensd.fx.fontawesome.AwesomeIcon;
|
||||||
import haveno.common.util.Utilities;
|
import haveno.common.util.Utilities;
|
||||||
import haveno.core.locale.Res;
|
import haveno.core.locale.Res;
|
||||||
import haveno.core.user.BlockChainExplorer;
|
|
||||||
import haveno.core.user.Preferences;
|
import haveno.core.user.Preferences;
|
||||||
import haveno.desktop.util.GUIUtil;
|
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.control.TextField;
|
import javafx.scene.control.TextField;
|
||||||
import javafx.scene.control.Tooltip;
|
import javafx.scene.control.Tooltip;
|
||||||
|
@ -40,7 +38,7 @@ public class ExplorerAddressTextField extends AnchorPane {
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final TextField textField;
|
private final TextField textField;
|
||||||
private final Label copyIcon, blockExplorerIcon, missingAddressWarningIcon;
|
private final Label copyIcon, missingAddressWarningIcon;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Constructor
|
// Constructor
|
||||||
|
@ -56,14 +54,6 @@ public class ExplorerAddressTextField extends AnchorPane {
|
||||||
|
|
||||||
Tooltip tooltip = new Tooltip(Res.get("explorerAddressTextField.blockExplorerIcon.tooltip"));
|
Tooltip tooltip = new Tooltip(Res.get("explorerAddressTextField.blockExplorerIcon.tooltip"));
|
||||||
|
|
||||||
blockExplorerIcon = new Label();
|
|
||||||
blockExplorerIcon.getStyleClass().addAll("icon", "highlight");
|
|
||||||
blockExplorerIcon.setTooltip(tooltip);
|
|
||||||
AwesomeDude.setIcon(blockExplorerIcon, AwesomeIcon.EXTERNAL_LINK);
|
|
||||||
blockExplorerIcon.setMinWidth(20);
|
|
||||||
AnchorPane.setRightAnchor(blockExplorerIcon, 52.0);
|
|
||||||
AnchorPane.setTopAnchor(blockExplorerIcon, 4.0);
|
|
||||||
|
|
||||||
missingAddressWarningIcon = new Label();
|
missingAddressWarningIcon = new Label();
|
||||||
missingAddressWarningIcon.getStyleClass().addAll("icon", "error-icon");
|
missingAddressWarningIcon.getStyleClass().addAll("icon", "error-icon");
|
||||||
AwesomeDude.setIcon(missingAddressWarningIcon, AwesomeIcon.WARNING_SIGN);
|
AwesomeDude.setIcon(missingAddressWarningIcon, AwesomeIcon.WARNING_SIGN);
|
||||||
|
@ -81,15 +71,13 @@ public class ExplorerAddressTextField extends AnchorPane {
|
||||||
AnchorPane.setRightAnchor(textField, 80.0);
|
AnchorPane.setRightAnchor(textField, 80.0);
|
||||||
AnchorPane.setLeftAnchor(textField, 0.0);
|
AnchorPane.setLeftAnchor(textField, 0.0);
|
||||||
textField.focusTraversableProperty().set(focusTraversableProperty().get());
|
textField.focusTraversableProperty().set(focusTraversableProperty().get());
|
||||||
getChildren().addAll(textField, missingAddressWarningIcon, blockExplorerIcon, copyIcon);
|
getChildren().addAll(textField, missingAddressWarningIcon, copyIcon);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setup(@Nullable String address) {
|
public void setup(@Nullable String address) {
|
||||||
if (address == null) {
|
if (address == null) {
|
||||||
textField.setText(Res.get("shared.na"));
|
textField.setText(Res.get("shared.na"));
|
||||||
textField.setId("address-text-field-error");
|
textField.setId("address-text-field-error");
|
||||||
blockExplorerIcon.setVisible(false);
|
|
||||||
blockExplorerIcon.setManaged(false);
|
|
||||||
copyIcon.setVisible(false);
|
copyIcon.setVisible(false);
|
||||||
copyIcon.setManaged(false);
|
copyIcon.setManaged(false);
|
||||||
missingAddressWarningIcon.setVisible(true);
|
missingAddressWarningIcon.setVisible(true);
|
||||||
|
@ -98,26 +86,12 @@ public class ExplorerAddressTextField extends AnchorPane {
|
||||||
}
|
}
|
||||||
|
|
||||||
textField.setText(address);
|
textField.setText(address);
|
||||||
textField.setOnMouseClicked(mouseEvent -> openBlockExplorer(address));
|
|
||||||
blockExplorerIcon.setOnMouseClicked(mouseEvent -> openBlockExplorer(address));
|
|
||||||
copyIcon.setOnMouseClicked(e -> Utilities.copyToClipboard(address));
|
copyIcon.setOnMouseClicked(e -> Utilities.copyToClipboard(address));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cleanup() {
|
public void cleanup() {
|
||||||
textField.setOnMouseClicked(null);
|
textField.setOnMouseClicked(null);
|
||||||
blockExplorerIcon.setOnMouseClicked(null);
|
|
||||||
copyIcon.setOnMouseClicked(null);
|
copyIcon.setOnMouseClicked(null);
|
||||||
textField.setText("");
|
textField.setText("");
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Private
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
private void openBlockExplorer(String address) {
|
|
||||||
if (preferences != null) {
|
|
||||||
BlockChainExplorer blockChainExplorer = preferences.getBlockChainExplorer();
|
|
||||||
GUIUtil.openWebPage(blockChainExplorer.addressUrl + address, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,6 @@ import haveno.desktop.common.view.ActivatableView;
|
||||||
import haveno.desktop.common.view.FxmlView;
|
import haveno.desktop.common.view.FxmlView;
|
||||||
import haveno.desktop.components.AddressTextField;
|
import haveno.desktop.components.AddressTextField;
|
||||||
import haveno.desktop.components.AutoTooltipLabel;
|
import haveno.desktop.components.AutoTooltipLabel;
|
||||||
import haveno.desktop.components.ExternalHyperlink;
|
|
||||||
import haveno.desktop.components.HyperlinkWithIcon;
|
import haveno.desktop.components.HyperlinkWithIcon;
|
||||||
import haveno.desktop.components.InputTextField;
|
import haveno.desktop.components.InputTextField;
|
||||||
import haveno.desktop.components.TitledGroupBg;
|
import haveno.desktop.components.TitledGroupBg;
|
||||||
|
@ -308,11 +307,6 @@ public class DepositView extends ActivatableView<VBox, Void> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openBlockExplorer(DepositListItem item) {
|
|
||||||
if (item.getAddressString() != null)
|
|
||||||
GUIUtil.openWebPage(preferences.getBlockChainExplorer().addressUrl + item.getAddressString(), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Private
|
// Private
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -391,13 +385,7 @@ public class DepositView extends ActivatableView<VBox, Void> {
|
||||||
|
|
||||||
if (item != null && !empty) {
|
if (item != null && !empty) {
|
||||||
String address = item.getAddressString();
|
String address = item.getAddressString();
|
||||||
field = new ExternalHyperlink(address);
|
setGraphic(new AutoTooltipLabel(address));
|
||||||
field.setOnAction(event -> {
|
|
||||||
openBlockExplorer(item);
|
|
||||||
tableView.getSelectionModel().select(item);
|
|
||||||
});
|
|
||||||
field.setTooltip(new Tooltip(Res.get("tooltip.openBlockchainForAddress", address)));
|
|
||||||
setGraphic(field);
|
|
||||||
} else {
|
} else {
|
||||||
setGraphic(null);
|
setGraphic(null);
|
||||||
if (field != null)
|
if (field != null)
|
||||||
|
|
|
@ -35,7 +35,6 @@ import haveno.desktop.common.view.ActivatableView;
|
||||||
import haveno.desktop.common.view.FxmlView;
|
import haveno.desktop.common.view.FxmlView;
|
||||||
import haveno.desktop.components.AutoTooltipButton;
|
import haveno.desktop.components.AutoTooltipButton;
|
||||||
import haveno.desktop.components.AutoTooltipLabel;
|
import haveno.desktop.components.AutoTooltipLabel;
|
||||||
import haveno.desktop.components.ExternalHyperlink;
|
|
||||||
import haveno.desktop.components.HyperlinkWithIcon;
|
import haveno.desktop.components.HyperlinkWithIcon;
|
||||||
import haveno.desktop.main.overlays.windows.OfferDetailsWindow;
|
import haveno.desktop.main.overlays.windows.OfferDetailsWindow;
|
||||||
import haveno.desktop.main.overlays.windows.TradeDetailsWindow;
|
import haveno.desktop.main.overlays.windows.TradeDetailsWindow;
|
||||||
|
@ -222,10 +221,6 @@ public class LockedView extends ActivatableView<VBox, Void> {
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openBlockExplorer(LockedListItem item) {
|
|
||||||
GUIUtil.openWebPage(preferences.getBlockChainExplorer().addressUrl + item.getAddressString(), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<Tradable> getTradable(LockedListItem item) {
|
private Optional<Tradable> getTradable(LockedListItem item) {
|
||||||
String offerId = item.getAddressEntry().getOfferId();
|
String offerId = item.getAddressEntry().getOfferId();
|
||||||
Optional<Trade> tradeOptional = tradeManager.getOpenTrade(offerId);
|
Optional<Trade> tradeOptional = tradeManager.getOpenTrade(offerId);
|
||||||
|
@ -330,7 +325,6 @@ public class LockedView extends ActivatableView<VBox, Void> {
|
||||||
public TableCell<LockedListItem, LockedListItem> call(TableColumn<LockedListItem,
|
public TableCell<LockedListItem, LockedListItem> call(TableColumn<LockedListItem,
|
||||||
LockedListItem> column) {
|
LockedListItem> column) {
|
||||||
return new TableCell<>() {
|
return new TableCell<>() {
|
||||||
private HyperlinkWithIcon hyperlinkWithIcon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateItem(final LockedListItem item, boolean empty) {
|
public void updateItem(final LockedListItem item, boolean empty) {
|
||||||
|
@ -338,14 +332,9 @@ public class LockedView extends ActivatableView<VBox, Void> {
|
||||||
|
|
||||||
if (item != null && !empty) {
|
if (item != null && !empty) {
|
||||||
String address = item.getAddressString();
|
String address = item.getAddressString();
|
||||||
hyperlinkWithIcon = new ExternalHyperlink(address);
|
setGraphic(new AutoTooltipLabel(address));
|
||||||
hyperlinkWithIcon.setOnAction(event -> openBlockExplorer(item));
|
|
||||||
hyperlinkWithIcon.setTooltip(new Tooltip(Res.get("tooltip.openBlockchainForAddress", address)));
|
|
||||||
setGraphic(hyperlinkWithIcon);
|
|
||||||
} else {
|
} else {
|
||||||
setGraphic(null);
|
setGraphic(null);
|
||||||
if (hyperlinkWithIcon != null)
|
|
||||||
hyperlinkWithIcon.setOnAction(null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -35,7 +35,6 @@ import haveno.desktop.common.view.ActivatableView;
|
||||||
import haveno.desktop.common.view.FxmlView;
|
import haveno.desktop.common.view.FxmlView;
|
||||||
import haveno.desktop.components.AutoTooltipButton;
|
import haveno.desktop.components.AutoTooltipButton;
|
||||||
import haveno.desktop.components.AutoTooltipLabel;
|
import haveno.desktop.components.AutoTooltipLabel;
|
||||||
import haveno.desktop.components.ExternalHyperlink;
|
|
||||||
import haveno.desktop.components.HyperlinkWithIcon;
|
import haveno.desktop.components.HyperlinkWithIcon;
|
||||||
import haveno.desktop.main.overlays.windows.OfferDetailsWindow;
|
import haveno.desktop.main.overlays.windows.OfferDetailsWindow;
|
||||||
import haveno.desktop.main.overlays.windows.TradeDetailsWindow;
|
import haveno.desktop.main.overlays.windows.TradeDetailsWindow;
|
||||||
|
@ -221,10 +220,6 @@ public class ReservedView extends ActivatableView<VBox, Void> {
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openBlockExplorer(ReservedListItem item) {
|
|
||||||
GUIUtil.openWebPage(preferences.getBlockChainExplorer().addressUrl + item.getAddressString(), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<Tradable> getTradable(ReservedListItem item) {
|
private Optional<Tradable> getTradable(ReservedListItem item) {
|
||||||
String offerId = item.getAddressEntry().getOfferId();
|
String offerId = item.getAddressEntry().getOfferId();
|
||||||
Optional<Trade> tradeOptional = tradeManager.getOpenTrade(offerId);
|
Optional<Trade> tradeOptional = tradeManager.getOpenTrade(offerId);
|
||||||
|
@ -329,7 +324,6 @@ public class ReservedView extends ActivatableView<VBox, Void> {
|
||||||
public TableCell<ReservedListItem, ReservedListItem> call(TableColumn<ReservedListItem,
|
public TableCell<ReservedListItem, ReservedListItem> call(TableColumn<ReservedListItem,
|
||||||
ReservedListItem> column) {
|
ReservedListItem> column) {
|
||||||
return new TableCell<>() {
|
return new TableCell<>() {
|
||||||
private HyperlinkWithIcon hyperlinkWithIcon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateItem(final ReservedListItem item, boolean empty) {
|
public void updateItem(final ReservedListItem item, boolean empty) {
|
||||||
|
@ -337,14 +331,9 @@ public class ReservedView extends ActivatableView<VBox, Void> {
|
||||||
|
|
||||||
if (item != null && !empty) {
|
if (item != null && !empty) {
|
||||||
String address = item.getAddressString();
|
String address = item.getAddressString();
|
||||||
hyperlinkWithIcon = new ExternalHyperlink(address);
|
setGraphic(new AutoTooltipLabel(address));
|
||||||
hyperlinkWithIcon.setOnAction(event -> openBlockExplorer(item));
|
|
||||||
hyperlinkWithIcon.setTooltip(new Tooltip(Res.get("tooltip.openBlockchainForAddress", address)));
|
|
||||||
setGraphic(hyperlinkWithIcon);
|
|
||||||
} else {
|
} else {
|
||||||
setGraphic(null);
|
setGraphic(null);
|
||||||
if (hyperlinkWithIcon != null)
|
|
||||||
hyperlinkWithIcon.setOnAction(null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -244,12 +244,6 @@ public class TransactionsView extends ActivatableView<VBox, Void> {
|
||||||
GUIUtil.openWebPage(preferences.getBlockChainExplorer().txUrl + item.getTxId(), false);
|
GUIUtil.openWebPage(preferences.getBlockChainExplorer().txUrl + item.getTxId(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openAddressInBlockExplorer(TransactionsListItem item) {
|
|
||||||
if (item.getAddressString() != null) {
|
|
||||||
GUIUtil.openWebPage(preferences.getBlockChainExplorer().addressUrl + item.getAddressString(), false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void openDetailPopup(TransactionsListItem item) {
|
private void openDetailPopup(TransactionsListItem item) {
|
||||||
if (item.getTradable() instanceof OpenOffer)
|
if (item.getTradable() instanceof OpenOffer)
|
||||||
offerDetailsWindow.show(item.getTradable().getOffer());
|
offerDetailsWindow.show(item.getTradable().getOffer());
|
||||||
|
@ -349,7 +343,6 @@ public class TransactionsView extends ActivatableView<VBox, Void> {
|
||||||
String addressString = item.getAddressString();
|
String addressString = item.getAddressString();
|
||||||
field = new AddressWithIconAndDirection(item.getDirection(), addressString,
|
field = new AddressWithIconAndDirection(item.getDirection(), addressString,
|
||||||
item.getReceived());
|
item.getReceived());
|
||||||
field.setOnAction(event -> openAddressInBlockExplorer(item));
|
|
||||||
field.setTooltip(new Tooltip(Res.get("tooltip.openBlockchainForAddress", addressString)));
|
field.setTooltip(new Tooltip(Res.get("tooltip.openBlockchainForAddress", addressString)));
|
||||||
setGraphic(field);
|
setGraphic(field);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -54,7 +54,7 @@ import static javafx.beans.binding.Bindings.createBooleanBinding;
|
||||||
|
|
||||||
public class EditCustomExplorerWindow extends Overlay<EditCustomExplorerWindow> {
|
public class EditCustomExplorerWindow extends Overlay<EditCustomExplorerWindow> {
|
||||||
|
|
||||||
private InputTextField nameInputTextField, txUrlInputTextField, addressUrlInputTextField;
|
private InputTextField nameInputTextField, txUrlInputTextField;
|
||||||
private UrlInputValidator urlInputValidator;
|
private UrlInputValidator urlInputValidator;
|
||||||
private BlockChainExplorer currentExplorer;
|
private BlockChainExplorer currentExplorer;
|
||||||
private ListView<BlockChainExplorer> listView;
|
private ListView<BlockChainExplorer> listView;
|
||||||
|
@ -70,9 +70,10 @@ public class EditCustomExplorerWindow extends Overlay<EditCustomExplorerWindow>
|
||||||
|
|
||||||
public BlockChainExplorer getEditedBlockChainExplorer() {
|
public BlockChainExplorer getEditedBlockChainExplorer() {
|
||||||
return new BlockChainExplorer(nameInputTextField.getText(),
|
return new BlockChainExplorer(nameInputTextField.getText(),
|
||||||
txUrlInputTextField.getText(), addressUrlInputTextField.getText());
|
txUrlInputTextField.getText());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void show() {
|
public void show() {
|
||||||
|
|
||||||
width = 1000;
|
width = 1000;
|
||||||
|
@ -83,20 +84,17 @@ public class EditCustomExplorerWindow extends Overlay<EditCustomExplorerWindow>
|
||||||
|
|
||||||
urlInputValidator = new UrlInputValidator();
|
urlInputValidator = new UrlInputValidator();
|
||||||
txUrlInputTextField.setValidator(urlInputValidator);
|
txUrlInputTextField.setValidator(urlInputValidator);
|
||||||
addressUrlInputTextField.setValidator(urlInputValidator);
|
|
||||||
nameInputTextField.setValidator(new LengthValidator(1, 50));
|
nameInputTextField.setValidator(new LengthValidator(1, 50));
|
||||||
|
|
||||||
actionButton.disableProperty().bind(createBooleanBinding(() -> {
|
actionButton.disableProperty().bind(createBooleanBinding(() -> {
|
||||||
String name = nameInputTextField.getText();
|
String name = nameInputTextField.getText();
|
||||||
String txUrl = txUrlInputTextField.getText();
|
String txUrl = txUrlInputTextField.getText();
|
||||||
String addressUrl = addressUrlInputTextField.getText();
|
|
||||||
|
|
||||||
// Otherwise we require that input is valid
|
// Otherwise we require that input is valid
|
||||||
return !nameInputTextField.getValidator().validate(name).isValid ||
|
return !nameInputTextField.getValidator().validate(name).isValid ||
|
||||||
!txUrlInputTextField.getValidator().validate(txUrl).isValid ||
|
!txUrlInputTextField.getValidator().validate(txUrl).isValid;
|
||||||
!addressUrlInputTextField.getValidator().validate(addressUrl).isValid;
|
|
||||||
},
|
},
|
||||||
nameInputTextField.textProperty(), txUrlInputTextField.textProperty(), addressUrlInputTextField.textProperty()));
|
nameInputTextField.textProperty(), txUrlInputTextField.textProperty()));
|
||||||
|
|
||||||
applyStyles();
|
applyStyles();
|
||||||
display();
|
display();
|
||||||
|
@ -127,7 +125,6 @@ public class EditCustomExplorerWindow extends Overlay<EditCustomExplorerWindow>
|
||||||
if (blockChainExplorer != null) {
|
if (blockChainExplorer != null) {
|
||||||
nameInputTextField.setText(blockChainExplorer.name);
|
nameInputTextField.setText(blockChainExplorer.name);
|
||||||
txUrlInputTextField.setText(blockChainExplorer.txUrl);
|
txUrlInputTextField.setText(blockChainExplorer.txUrl);
|
||||||
addressUrlInputTextField.setText(blockChainExplorer.addressUrl);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
button.setStyle("-fx-pref-width: 50px; -fx-pref-height: 30; -fx-padding: 3 3 3 3;");
|
button.setStyle("-fx-pref-width: 50px; -fx-pref-height: 30; -fx-padding: 3 3 3 3;");
|
||||||
|
@ -169,7 +166,6 @@ public class EditCustomExplorerWindow extends Overlay<EditCustomExplorerWindow>
|
||||||
BlockChainExplorer blockChainExplorer = listView.getSelectionModel().getSelectedItem();
|
BlockChainExplorer blockChainExplorer = listView.getSelectionModel().getSelectedItem();
|
||||||
nameInputTextField.setText(blockChainExplorer.name);
|
nameInputTextField.setText(blockChainExplorer.name);
|
||||||
txUrlInputTextField.setText(blockChainExplorer.txUrl);
|
txUrlInputTextField.setText(blockChainExplorer.txUrl);
|
||||||
addressUrlInputTextField.setText(blockChainExplorer.addressUrl);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -186,9 +182,7 @@ public class EditCustomExplorerWindow extends Overlay<EditCustomExplorerWindow>
|
||||||
nameInputTextField = addInputTextField(autoConfirmGridPane, ++localRowIndex, Res.get("settings.preferences.editCustomExplorer.name"), Layout.FIRST_ROW_DISTANCE);
|
nameInputTextField = addInputTextField(autoConfirmGridPane, ++localRowIndex, Res.get("settings.preferences.editCustomExplorer.name"), Layout.FIRST_ROW_DISTANCE);
|
||||||
nameInputTextField.setPrefWidth(Layout.INITIAL_WINDOW_WIDTH);
|
nameInputTextField.setPrefWidth(Layout.INITIAL_WINDOW_WIDTH);
|
||||||
txUrlInputTextField = addInputTextField(autoConfirmGridPane, ++localRowIndex, Res.get("settings.preferences.editCustomExplorer.txUrl"));
|
txUrlInputTextField = addInputTextField(autoConfirmGridPane, ++localRowIndex, Res.get("settings.preferences.editCustomExplorer.txUrl"));
|
||||||
addressUrlInputTextField = addInputTextField(autoConfirmGridPane, ++localRowIndex, Res.get("settings.preferences.editCustomExplorer.addressUrl"));
|
|
||||||
nameInputTextField.setText(currentExplorer.name);
|
nameInputTextField.setText(currentExplorer.name);
|
||||||
txUrlInputTextField.setText(currentExplorer.txUrl);
|
txUrlInputTextField.setText(currentExplorer.txUrl);
|
||||||
addressUrlInputTextField.setText(currentExplorer.addressUrl);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -771,7 +771,7 @@ public class PreferencesView extends ActivatableViewAndModel<GridPane, Preferenc
|
||||||
resetDontShowAgainButton.setOnAction(e -> preferences.resetDontShowAgain());
|
resetDontShowAgainButton.setOnAction(e -> preferences.resetDontShowAgain());
|
||||||
|
|
||||||
editCustomBtcExplorer.setOnAction(e -> {
|
editCustomBtcExplorer.setOnAction(e -> {
|
||||||
EditCustomExplorerWindow urlWindow = new EditCustomExplorerWindow("BTC",
|
EditCustomExplorerWindow urlWindow = new EditCustomExplorerWindow("XMR",
|
||||||
preferences.getBlockChainExplorer(), preferences.getBlockChainExplorers());
|
preferences.getBlockChainExplorer(), preferences.getBlockChainExplorers());
|
||||||
urlWindow
|
urlWindow
|
||||||
.actionButtonText(Res.get("shared.save"))
|
.actionButtonText(Res.get("shared.save"))
|
||||||
|
|
|
@ -1748,7 +1748,6 @@ message UserPayload {
|
||||||
message BlockChainExplorer {
|
message BlockChainExplorer {
|
||||||
string name = 1;
|
string name = 1;
|
||||||
string tx_url = 2;
|
string tx_url = 2;
|
||||||
string address_url = 3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message PaymentAccount {
|
message PaymentAccount {
|
||||||
|
|
Loading…
Reference in a new issue