mirror of
https://github.com/bisq-network/bisq.git
synced 2025-02-25 07:27:18 +01:00
Use link icon for cloned offers
Signed-off-by: HenrikJannsen <boilingfrog@gmx.com>
This commit is contained in:
parent
384173c894
commit
4ae89e748c
7 changed files with 60 additions and 52 deletions
|
@ -463,12 +463,12 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
|
||||||
ResultHandler resultHandler,
|
ResultHandler resultHandler,
|
||||||
ErrorMessageHandler errorMessageHandler) {
|
ErrorMessageHandler errorMessageHandler) {
|
||||||
if (offersToBeEdited.containsKey(openOffer.getId())) {
|
if (offersToBeEdited.containsKey(openOffer.getId())) {
|
||||||
errorMessageHandler.handleErrorMessage("You can't activate an offer that is currently edited.");
|
errorMessageHandler.handleErrorMessage(Res.get("offerbook.cannotActivateEditedOffer.warning"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cannotActivateOffer(openOffer.getOffer())) {
|
if (cannotActivateOffer(openOffer.getOffer())) {
|
||||||
errorMessageHandler.handleErrorMessage(Res.get("offerbook.cannotActivate.info"));
|
errorMessageHandler.handleErrorMessage(Res.get("offerbook.cannotActivate.warning"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -366,11 +366,22 @@ offerbook.timeSinceSigning.tooltip.learnMore=Learn more
|
||||||
offerbook.xmrAutoConf=Is auto-confirm enabled
|
offerbook.xmrAutoConf=Is auto-confirm enabled
|
||||||
|
|
||||||
offerbook.cloneOffer=Clone offer (with shared maker fee)
|
offerbook.cloneOffer=Clone offer (with shared maker fee)
|
||||||
offerbook.clonedOffer.info=This is a cloned offer with shared maker fee transaction ID
|
offerbook.clonedOffer.tooltip=This is a cloned offer with shared maker fee transaction ID.\n\Maker fee transaction ID: {0}
|
||||||
offerbook.nonClonedOffer.info=Regular offer without shared maker fee transaction ID
|
offerbook.nonClonedOffer.tooltip=Regular offer without shared maker fee transaction ID.\n\Maker fee transaction ID: {0}
|
||||||
offerbook.cannotActivate.info=This cloned offer with shared maker fee cannot be activated because it uses \
|
offerbook.cannotActivate.warning=This cloned offer with shared maker fee cannot be activated because it uses \
|
||||||
the same payment method and currency as another active offer. You need to edit the offer and change the \
|
the same payment method and currency as another active offer. You need to edit the offer and change the \
|
||||||
payment method or currency or deactivate the offer which has the same payment method and currency.
|
payment method or currency or deactivate the offer which has the same payment method and currency.
|
||||||
|
offerbook.cannotActivateEditedOffer.warning=You can't activate an offer that is currently edited.
|
||||||
|
offerbook.clonedOffer.info=By cloning an offer one creates a copy of the given offer with a new offer ID but using the same \
|
||||||
|
maker fee transaction ID.\n\n\
|
||||||
|
This means there is no extra maker fee needed to get paid and the funds reserved for that offer can \
|
||||||
|
be re-used by the cloned offers. This reduces the liquidity requirements for market makers and allows them to post the \
|
||||||
|
same offer in different markets or with different payment methods.\n\n\
|
||||||
|
As a consequence if one of the offers sharing the same maker fee transaction is taken all the other offers \
|
||||||
|
will get closed as well because the transaction output of that maker fee transaction is spent and would render the \
|
||||||
|
other offers invalid. \n\n\
|
||||||
|
This feature requires to use the same trade amount and security deposit and is only permitted for offers with different \
|
||||||
|
payment methods or currencies.
|
||||||
|
|
||||||
offerbook.timeSinceSigning.help=When you successfully complete a trade with a peer who has a signed payment account, your payment account is signed.\n\
|
offerbook.timeSinceSigning.help=When you successfully complete a trade with a peer who has a signed payment account, your payment account is signed.\n\
|
||||||
{0} days later, the initial limit of {1} is lifted and your account can sign other peers'' payment accounts.
|
{0} days later, the initial limit of {1} is lifted and your account can sign other peers'' payment accounts.
|
||||||
|
|
|
@ -832,6 +832,10 @@ tree-table-view:focused {
|
||||||
-fx-text-fill: -bs-rd-error-red;
|
-fx-text-fill: -bs-rd-error-red;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
-fx-fill: -bs-text-color;
|
||||||
|
}
|
||||||
|
|
||||||
.opaque-icon {
|
.opaque-icon {
|
||||||
-fx-fill: -bs-color-gray-bbb;
|
-fx-fill: -bs-color-gray-bbb;
|
||||||
-fx-opacity: 1;
|
-fx-opacity: 1;
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
<TableView fx:id="tableView" VBox.vgrow="ALWAYS">
|
<TableView fx:id="tableView" VBox.vgrow="ALWAYS">
|
||||||
<columns>
|
<columns>
|
||||||
<TableColumn fx:id="offerIdColumn" minWidth="110" maxWidth="120"/>
|
<TableColumn fx:id="offerIdColumn" minWidth="110" maxWidth="120"/>
|
||||||
<TableColumn fx:id="makerFeeTxIdColumn" minWidth="80"/>
|
<TableColumn fx:id="makerFeeTxIdColumn" minWidth="70"/>
|
||||||
<TableColumn fx:id="dateColumn" minWidth="170"/>
|
<TableColumn fx:id="dateColumn" minWidth="170"/>
|
||||||
<TableColumn fx:id="marketColumn" minWidth="75"/>
|
<TableColumn fx:id="marketColumn" minWidth="75"/>
|
||||||
<TableColumn fx:id="priceColumn" minWidth="100"/>
|
<TableColumn fx:id="priceColumn" minWidth="100"/>
|
||||||
|
|
|
@ -391,7 +391,7 @@ public class OpenOffersView extends ActivatableViewAndModel<VBox, OpenOffersView
|
||||||
() -> log.debug("Activate offer was successful"),
|
() -> log.debug("Activate offer was successful"),
|
||||||
(message) -> {
|
(message) -> {
|
||||||
log.error(message);
|
log.error(message);
|
||||||
new Popup().warning(Res.get("offerbook.activateOffer.failed", message)).show();
|
new Popup().warning(message).show();
|
||||||
});
|
});
|
||||||
updateSelectToggleButtonState();
|
updateSelectToggleButtonState();
|
||||||
}
|
}
|
||||||
|
@ -467,6 +467,20 @@ public class OpenOffersView extends ActivatableViewAndModel<VBox, OpenOffersView
|
||||||
if (item == null) {
|
if (item == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String key = "clonedOfferInfo";
|
||||||
|
if (DontShowAgainLookup.showAgain(key)) {
|
||||||
|
new Popup().backgroundInfo(Res.get("offerbook.clonedOffer.info"))
|
||||||
|
.useIUnderstandButton()
|
||||||
|
.dontShowAgainId(key)
|
||||||
|
.onClose(() -> doCloneOffer(item))
|
||||||
|
.show();
|
||||||
|
} else {
|
||||||
|
doCloneOffer(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void doCloneOffer(OpenOfferListItem item) {
|
||||||
OpenOffer openOffer = item.getOpenOffer();
|
OpenOffer openOffer = item.getOpenOffer();
|
||||||
if (openOffer == null || openOffer.getOffer() == null || openOffer.getOffer().getOfferPayload().isEmpty()) {
|
if (openOffer == null || openOffer.getOffer() == null || openOffer.getOffer().getOfferPayload().isEmpty()) {
|
||||||
return;
|
return;
|
||||||
|
@ -576,60 +590,35 @@ public class OpenOffersView extends ActivatableViewAndModel<VBox, OpenOffersView
|
||||||
@Override
|
@Override
|
||||||
public TableCell<OpenOfferListItem, OpenOfferListItem> call(
|
public TableCell<OpenOfferListItem, OpenOfferListItem> call(
|
||||||
TableColumn<OpenOfferListItem, OpenOfferListItem> column) {
|
TableColumn<OpenOfferListItem, OpenOfferListItem> column) {
|
||||||
|
|
||||||
return new TableCell<>() {
|
return new TableCell<>() {
|
||||||
private HyperlinkWithIcon hyperlinkWithIcon = null;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateItem(final OpenOfferListItem item, boolean empty) {
|
|
||||||
super.updateItem(item, empty);
|
|
||||||
if (item != null && !empty) {
|
|
||||||
hyperlinkWithIcon = new HyperlinkWithIcon(item.getMakerFeeTxId());
|
|
||||||
if (item.isNotPublished()) {
|
|
||||||
// getStyleClass().add("offer-disabled"); does not work with hyperlinkWithIcon ;-(
|
|
||||||
hyperlinkWithIcon.setStyle("-fx-text-fill: -bs-color-gray-3;");
|
|
||||||
hyperlinkWithIcon.getIcon().setOpacity(0.2);
|
|
||||||
}
|
|
||||||
hyperlinkWithIcon.setOnAction(event -> GUIUtil.openTxInBlockExplorer(item.getMakerFeeTxId()));
|
|
||||||
if (openOfferManager.hasOfferSharedMakerFee(item.getOpenOffer())) {
|
|
||||||
hyperlinkWithIcon.setTooltip(new Tooltip(Res.get("offerbook.clonedOffer.info")));
|
|
||||||
} else {
|
|
||||||
hyperlinkWithIcon.setTooltip(new Tooltip(Res.get("offerbook.nonClonedOffer.info")));
|
|
||||||
}
|
|
||||||
setGraphic(hyperlinkWithIcon);
|
|
||||||
} else {
|
|
||||||
setGraphic(null);
|
|
||||||
if (hyperlinkWithIcon != null) {
|
|
||||||
hyperlinkWithIcon.setOnAction(null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/*return new TableCell<>() {
|
|
||||||
@Override
|
@Override
|
||||||
public void updateItem(final OpenOfferListItem item, boolean empty) {
|
public void updateItem(final OpenOfferListItem item, boolean empty) {
|
||||||
super.updateItem(item, empty);
|
super.updateItem(item, empty);
|
||||||
getStyleClass().removeAll("offer-disabled");
|
getStyleClass().removeAll("offer-disabled");
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
|
|
||||||
|
Label label = new Label(item.getMakerFeeTxId());
|
||||||
|
Text icon;
|
||||||
|
if (openOfferManager.hasOfferSharedMakerFee(item.getOpenOffer())) {
|
||||||
|
icon = getRegularIconForLabel(MaterialDesignIcon.LINK, label, "icon");
|
||||||
|
setTooltip(new Tooltip(Res.get("offerbook.clonedOffer.tooltip", item.getMakerFeeTxId())));
|
||||||
|
} else {
|
||||||
|
icon = getRegularIconForLabel(MaterialDesignIcon.LINK_OFF, label, "icon");
|
||||||
|
setTooltip(new Tooltip(Res.get("offerbook.nonClonedOffer.tooltip", item.getMakerFeeTxId())));
|
||||||
|
}
|
||||||
|
icon.setVisible(!item.getOffer().isBsqSwapOffer());
|
||||||
|
|
||||||
if (item.isNotPublished()) {
|
if (item.isNotPublished()) {
|
||||||
getStyleClass().add("offer-disabled");
|
getStyleClass().add("offer-disabled");
|
||||||
}
|
icon.setOpacity(0.2);
|
||||||
Label label = new AutoTooltipLabel(item.getMakerFeeTxId());
|
|
||||||
log.error("{} {}",openOfferManager.hasOfferSharedMakerFee(item.getOpenOffer()),item.getOpenOffer().getId());
|
|
||||||
if (openOfferManager.hasOfferSharedMakerFee(item.getOpenOffer())) {
|
|
||||||
Text icon = getRegularIconForLabel(MaterialDesignIcon.CALENDAR_QUESTION, label);
|
|
||||||
label.setContentDisplay(ContentDisplay.LEFT);
|
|
||||||
Tooltip.install(icon, new Tooltip(Res.get("offerbook.sharedMakerFeeTxId")));
|
|
||||||
} else {
|
|
||||||
label.setGraphic(null);
|
|
||||||
}
|
}
|
||||||
setGraphic(label);
|
setGraphic(label);
|
||||||
} else {
|
} else {
|
||||||
setGraphic(null);
|
setGraphic(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};*/
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -557,3 +557,7 @@
|
||||||
-fx-text-fill: -bs-text-color;
|
-fx-text-fill: -bs-text-color;
|
||||||
-fx-fill: -bs-text-color;
|
-fx-fill: -bs-text-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
-fx-fill: #fff;
|
||||||
|
}
|
||||||
|
|
|
@ -2248,12 +2248,12 @@ public class FormBuilder {
|
||||||
// Icons
|
// Icons
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
public static Text getIconForLabel(GlyphIcons icon, String iconSize, Label label, String style) {
|
public static Text getIconForLabel(GlyphIcons icon, String iconSize, Label label, String styleClass) {
|
||||||
if (icon.fontFamily().equals(MATERIAL_DESIGN_ICONS)) {
|
if (icon.fontFamily().equals(MATERIAL_DESIGN_ICONS)) {
|
||||||
final Text textIcon = MaterialDesignIconFactory.get().createIcon(icon, iconSize);
|
final Text textIcon = MaterialDesignIconFactory.get().createIcon(icon, iconSize);
|
||||||
textIcon.setOpacity(0.7);
|
textIcon.setOpacity(0.7);
|
||||||
if (style != null) {
|
if (styleClass != null) {
|
||||||
textIcon.getStyleClass().add(style);
|
textIcon.getStyleClass().add(styleClass);
|
||||||
}
|
}
|
||||||
label.setContentDisplay(ContentDisplay.LEFT);
|
label.setContentDisplay(ContentDisplay.LEFT);
|
||||||
label.setGraphic(textIcon);
|
label.setGraphic(textIcon);
|
||||||
|
@ -2279,8 +2279,8 @@ public class FormBuilder {
|
||||||
return getRegularIconForLabel(icon, label, null);
|
return getRegularIconForLabel(icon, label, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Text getRegularIconForLabel(GlyphIcons icon, Label label, String style) {
|
public static Text getRegularIconForLabel(GlyphIcons icon, Label label, String styleClass) {
|
||||||
return getIconForLabel(icon, "1.231em", label, style);
|
return getIconForLabel(icon, "1.231em", label, styleClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Text getIcon(GlyphIcons icon) {
|
public static Text getIcon(GlyphIcons icon) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue