Use Utilities.copyToClipboard, add copy offer/trade ID

This commit is contained in:
Manfred Karrer 2014-11-16 16:22:21 +01:00
parent dd80d3edf3
commit edfef9865c
13 changed files with 69 additions and 63 deletions

View file

@ -18,6 +18,7 @@
package io.bitsquare.gui.components; package io.bitsquare.gui.components;
import io.bitsquare.gui.OverlayManager; import io.bitsquare.gui.OverlayManager;
import io.bitsquare.util.Utilities;
import org.bitcoinj.core.Coin; import org.bitcoinj.core.Coin;
import org.bitcoinj.uri.BitcoinURI; import org.bitcoinj.uri.BitcoinURI;
@ -38,7 +39,6 @@ import javafx.scene.control.TextField;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.scene.image.*; import javafx.scene.image.*;
import javafx.scene.input.*;
import javafx.scene.layout.*; import javafx.scene.layout.*;
import javafx.stage.Window; import javafx.stage.Window;
@ -91,12 +91,8 @@ public class AddressTextField extends AnchorPane {
Tooltip.install(copyIcon, new Tooltip("Copy address to clipboard")); Tooltip.install(copyIcon, new Tooltip("Copy address to clipboard"));
AwesomeDude.setIcon(copyIcon, AwesomeIcon.COPY); AwesomeDude.setIcon(copyIcon, AwesomeIcon.COPY);
copyIcon.setOnMouseClicked(e -> { copyIcon.setOnMouseClicked(e -> {
if (address.get() != null && address.get().length() > 0) { if (address.get() != null && address.get().length() > 0)
Clipboard clipboard = Clipboard.getSystemClipboard(); Utilities.copyToClipboard(address.get());
ClipboardContent content = new ClipboardContent();
content.putString(address.get());
clipboard.setContent(content);
}
}); });
Label qrCode = new Label(); Label qrCode = new Label();

View file

@ -17,10 +17,11 @@
package io.bitsquare.gui.components; package io.bitsquare.gui.components;
import io.bitsquare.util.Utilities;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty; import javafx.beans.property.StringProperty;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.input.*;
import javafx.scene.layout.*; import javafx.scene.layout.*;
import de.jensd.fx.fontawesome.AwesomeDude; import de.jensd.fx.fontawesome.AwesomeDude;
@ -47,12 +48,8 @@ public class TextFieldWithCopyIcon extends AnchorPane {
AwesomeDude.setIcon(copyIcon, AwesomeIcon.COPY); AwesomeDude.setIcon(copyIcon, AwesomeIcon.COPY);
AnchorPane.setRightAnchor(copyIcon, 0.0); AnchorPane.setRightAnchor(copyIcon, 0.0);
copyIcon.setOnMouseClicked(e -> { copyIcon.setOnMouseClicked(e -> {
if (getText() != null && getText().length() > 0) { if (getText() != null && getText().length() > 0)
Clipboard clipboard = Clipboard.getSystemClipboard(); Utilities.copyToClipboard(getText());
ClipboardContent content = new ClipboardContent();
content.putString(getText());
clipboard.setContent(content);
}
}); });
TextField txIdLabel = new TextField(); TextField txIdLabel = new TextField();
txIdLabel.setEditable(false); txIdLabel.setEditable(false);

View file

@ -25,7 +25,6 @@ import io.bitsquare.util.Utilities;
import org.bitcoinj.core.TransactionConfidence; import org.bitcoinj.core.TransactionConfidence;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.input.*;
import javafx.scene.layout.*; import javafx.scene.layout.*;
import de.jensd.fx.fontawesome.AwesomeDude; import de.jensd.fx.fontawesome.AwesomeDude;
@ -91,14 +90,7 @@ public class TxIdTextField extends AnchorPane {
} }
}); });
copyIcon.setOnMouseClicked(e -> { copyIcon.setOnMouseClicked(e -> Utilities.copyToClipboard(txID));
if (txID != null && txID.length() > 0) {
Clipboard clipboard = Clipboard.getSystemClipboard();
ClipboardContent content = new ClipboardContent();
content.putString(txID);
clipboard.setContent(content);
}
});
walletService.addTxConfidenceListener(new TxConfidenceListener(txID) { walletService.addTxConfidenceListener(new TxConfidenceListener(txID) {
@Override @Override

View file

@ -29,6 +29,7 @@ import io.bitsquare.msg.MessageService;
import io.bitsquare.persistence.Persistence; import io.bitsquare.persistence.Persistence;
import io.bitsquare.user.User; import io.bitsquare.user.User;
import io.bitsquare.util.DSAKeyUtil; import io.bitsquare.util.DSAKeyUtil;
import io.bitsquare.util.Utilities;
import org.bitcoinj.core.Coin; import org.bitcoinj.core.Coin;
import org.bitcoinj.core.ECKey; import org.bitcoinj.core.ECKey;
@ -50,7 +51,6 @@ import javax.inject.Inject;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.input.*;
import javafx.stage.Stage; import javafx.stage.Stage;
import javafx.util.StringConverter; import javafx.util.StringConverter;
@ -350,10 +350,7 @@ public class ArbitratorRegistrationViewCB extends CachedViewCB {
AwesomeDude.setIcon(copyIcon, AwesomeIcon.COPY); AwesomeDude.setIcon(copyIcon, AwesomeIcon.COPY);
copyIcon.setOnMouseClicked(e -> { copyIcon.setOnMouseClicked(e -> {
Clipboard clipboard = Clipboard.getSystemClipboard(); Utilities.copyToClipboard(securityDepositAddress);
ClipboardContent content = new ClipboardContent();
content.putString(securityDepositAddress);
clipboard.setContent(content);
}); });
paymentDoneButton.setDisable(walletService.getArbitratorDepositBalance().isZero()); paymentDoneButton.setDisable(walletService.getArbitratorDepositBalance().isZero());

View file

@ -109,10 +109,7 @@ public class RegistrationViewCB extends CachedViewCB<RegistrationPM> implements
@Override @Override
public void handle(ActionEvent actionEvent) { public void handle(ActionEvent actionEvent) {
getProperties().put("type", "COPY"); getProperties().put("type", "COPY");
Clipboard clipboard = Clipboard.getSystemClipboard(); Utilities.copyToClipboard(presentationModel.getTransactionId());
ClipboardContent content = new ClipboardContent();
content.putString(presentationModel.getTransactionId());
clipboard.setContent(content);
} }
});*/ });*/
actions.add(new AbstractAction(BSResources.get("shared.close")) { actions.add(new AbstractAction(BSResources.get("shared.close")) {

View file

@ -113,6 +113,7 @@ public class TransactionsViewCB extends CachedViewCB {
private void openTxDetails(TransactionsListItem item) { private void openTxDetails(TransactionsListItem item) {
// TODO Open popup with details view // TODO Open popup with details view
log.debug("openTxDetails " + item); log.debug("openTxDetails " + item);
Popups.openWarningPopup("Under construction", Popups.openWarningPopup("Under construction",
"This will open a details popup but that is not implemented yet."); "This will open a details popup but that is not implemented yet.");
} }

View file

@ -25,6 +25,7 @@ import io.bitsquare.btc.listeners.BalanceListener;
import io.bitsquare.gui.CachedViewCB; import io.bitsquare.gui.CachedViewCB;
import io.bitsquare.gui.components.Popups; import io.bitsquare.gui.components.Popups;
import io.bitsquare.gui.util.BSFormatter; import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.util.Utilities;
import org.bitcoinj.core.AddressFormatException; import org.bitcoinj.core.AddressFormatException;
import org.bitcoinj.core.Coin; import org.bitcoinj.core.Coin;
@ -46,7 +47,6 @@ import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.input.*;
import javafx.util.Callback; import javafx.util.Callback;
import de.jensd.fx.fontawesome.AwesomeDude; import de.jensd.fx.fontawesome.AwesomeDude;
@ -308,12 +308,8 @@ public class WithdrawalViewCB extends CachedViewCB {
if (item != null && !empty) { if (item != null && !empty) {
setGraphic(copyIcon); setGraphic(copyIcon);
copyIcon.setOnMouseClicked(e -> { copyIcon.setOnMouseClicked(e -> Utilities.copyToClipboard(item
Clipboard clipboard = Clipboard.getSystemClipboard(); .addressStringProperty().get()));
ClipboardContent content = new ClipboardContent();
content.putString(item.addressStringProperty().get());
clipboard.setContent(content);
});
} }
else { else {

View file

@ -19,6 +19,7 @@ package io.bitsquare.gui.main.portfolio.offer;
import io.bitsquare.gui.CachedViewCB; import io.bitsquare.gui.CachedViewCB;
import io.bitsquare.gui.components.Popups; import io.bitsquare.gui.components.Popups;
import io.bitsquare.util.Utilities;
import java.net.URL; import java.net.URL;
@ -104,8 +105,11 @@ public class OffersViewCB extends CachedViewCB<OffersPM> {
private void openOfferDetails(OfferListItem item) { private void openOfferDetails(OfferListItem item) {
// TODO Open popup with details view // TODO Open popup with details view
log.debug("openOfferDetails " + item); log.debug("openOfferDetails " + item);
Utilities.copyToClipboard(item.getOffer().getId());
Popups.openWarningPopup("Under construction", Popups.openWarningPopup("Under construction",
"This will open a details popup but that is not implemented yet."); "The offer ID was copied to the clipboard. " +
"Use that to identify your trading peer in the IRC chat room \n\n" +
"Later this will open a details popup but that is not implemented yet.");
} }

View file

@ -30,6 +30,7 @@ import io.bitsquare.gui.components.processbar.ProcessStepItem;
import io.bitsquare.gui.main.help.Help; import io.bitsquare.gui.main.help.Help;
import io.bitsquare.gui.main.help.HelpId; import io.bitsquare.gui.main.help.HelpId;
import io.bitsquare.locale.BSResources; import io.bitsquare.locale.BSResources;
import io.bitsquare.util.Utilities;
import org.bitcoinj.core.Coin; import org.bitcoinj.core.Coin;
import org.bitcoinj.utils.Fiat; import org.bitcoinj.utils.Fiat;
@ -232,11 +233,14 @@ public class PendingTradesViewCB extends CachedViewCB<PendingTradesPM> {
Help.openWindow(HelpId.PENDING_TRADE_SUMMARY); Help.openWindow(HelpId.PENDING_TRADE_SUMMARY);
} }
private void openOfferDetails(PendingTradesListItem item) { private void openOfferDetails(String id) {
// TODO Open popup with details view // TODO Open popup with details view
log.debug("Trade details " + item); log.debug("Trade details " + id);
Popups.openWarningPopup("Under construction", "This will open a " + Utilities.copyToClipboard(id);
"details popup but that is not implemented yet."); Popups.openWarningPopup("Under construction",
"The trader ID was copied to the clipboard. " +
"Use that to identify your trading peer in the IRC chat room \n\n" +
"Later this will open a details popup but that is not implemented yet.");
} }
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
@ -552,19 +556,36 @@ public class PendingTradesViewCB extends CachedViewCB<PendingTradesPM> {
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
private void setTradeIdColumnCellFactory() { private void setTradeIdColumnCellFactory() {
idColumn.setCellFactory(TextFieldTableCell.<PendingTradesListItem, String>forTableColumn( idColumn.setCellFactory(
new StringConverter<String>() { new Callback<TableColumn<PendingTradesListItem, String>, TableCell<PendingTradesListItem, String>>() {
@Override
public String toString(String value) {
return presentationModel.formatTradeId(value);
}
@Override @Override
public String fromString(String string) { public TableCell<PendingTradesListItem, String> call(TableColumn<PendingTradesListItem,
return null; String> column) {
return new TableCell<PendingTradesListItem, String>() {
private Hyperlink hyperlink;
@Override
public void updateItem(final String id, boolean empty) {
super.updateItem(id, empty);
if (id != null && !empty) {
hyperlink = new Hyperlink(presentationModel.formatTradeId(id));
hyperlink.setId("id-link");
Tooltip.install(hyperlink, new Tooltip(presentationModel.formatTradeId(id)));
hyperlink.setOnAction(event -> openOfferDetails(id));
setGraphic(hyperlink);
} }
})); else {
setGraphic(null);
setId(null);
} }
}
};
}
});
}
private void setDateColumnCellFactory() { private void setDateColumnCellFactory() {
dateColumn.setCellFactory(TextFieldTableCell.<PendingTradesListItem, Date>forTableColumn( dateColumn.setCellFactory(TextFieldTableCell.<PendingTradesListItem, Date>forTableColumn(

View file

@ -364,10 +364,7 @@ public class CreateOfferViewCB extends CachedViewCB<CreateOfferPM> {
@Override @Override
public void handle(ActionEvent actionEvent) { public void handle(ActionEvent actionEvent) {
getProperties().put("type", "COPY"); getProperties().put("type", "COPY");
Clipboard clipboard = Clipboard.getSystemClipboard(); Utilities.copyToClipboard(presentationModel.transactionId.get());
ClipboardContent content = new ClipboardContent();
content.putString(presentationModel.transactionId.get());
clipboard.setContent(content);
} }
});*/ });*/
actions.add(new AbstractAction(BSResources.get("shared.close")) { actions.add(new AbstractAction(BSResources.get("shared.close")) {

View file

@ -335,10 +335,7 @@ public class TakeOfferViewCB extends CachedViewCB<TakeOfferPM> {
@Override @Override
public void handle(ActionEvent actionEvent) { public void handle(ActionEvent actionEvent) {
getProperties().put("type", "COPY"); getProperties().put("type", "COPY");
Clipboard clipboard = Clipboard.getSystemClipboard(); Utilities.copyToClipboard(presentationModel.transactionId.get());
ClipboardContent content = new ClipboardContent();
content.putString(presentationModel.transactionId.get());
clipboard.setContent(content);
} }
});*/ });*/
actions.add(new AbstractAction(BSResources.get("shared.close")) { actions.add(new AbstractAction(BSResources.get("shared.close")) {

View file

@ -35,6 +35,7 @@ import java.net.URI;
import java.util.function.Function; import java.util.function.Function;
import javafx.animation.AnimationTimer; import javafx.animation.AnimationTimer;
import javafx.scene.input.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -68,6 +69,16 @@ public class Utilities {
return System.getProperty("os.name").toLowerCase(); return System.getProperty("os.name").toLowerCase();
} }
public static void copyToClipboard(String content) {
if (content != null && content.length() > 0) {
Clipboard clipboard = Clipboard.getSystemClipboard();
ClipboardContent clipboardContent = new ClipboardContent();
clipboardContent.putString(content);
clipboard.setContent(clipboardContent);
}
}
public static <T> T jsonToObject(String jsonString, Class<T> classOfT) { public static <T> T jsonToObject(String jsonString, Class<T> classOfT) {
Gson gson = Gson gson =
new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).setPrettyPrinting().create(); new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).setPrettyPrinting().create();

View file

@ -84,7 +84,7 @@ public class TomP2PTests {
private static final Logger log = LoggerFactory.getLogger(TomP2PTests.class); private static final Logger log = LoggerFactory.getLogger(TomP2PTests.class);
// If you want to test in one specific connection mode define it directly, otherwise use UNKNOWN // If you want to test in one specific connection mode define it directly, otherwise use UNKNOWN
private static final ConnectionType FORCED_CONNECTION_TYPE = ConnectionType.DIRECT; private static final ConnectionType FORCED_CONNECTION_TYPE = ConnectionType.MANUAL_PORT_FORWARDING;
// Typically you run the bootstrap node in localhost to test direct connection. // Typically you run the bootstrap node in localhost to test direct connection.
// If you have a setup where you are not behind a router you can also use a WAN bootstrap node. // If you have a setup where you are not behind a router you can also use a WAN bootstrap node.