Skip to content

Commit

Permalink
feat: replace popup control coz no-way to avoid IME bug
Browse files Browse the repository at this point in the history
  • Loading branch information
teletha committed Dec 27, 2023
1 parent f565a78 commit 432424b
Show file tree
Hide file tree
Showing 5 changed files with 131 additions and 185 deletions.
41 changes: 41 additions & 0 deletions src/main/java/viewtify/Viewtify.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
import java.util.function.BiConsumer;
import java.util.function.BooleanSupplier;
import java.util.function.Consumer;
import java.util.function.DoubleConsumer;
import java.util.function.DoubleSupplier;
import java.util.function.Supplier;
import java.util.stream.Collectors;

Expand All @@ -45,6 +47,7 @@
import javafx.beans.binding.IntegerExpression;
import javafx.beans.binding.LongExpression;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.DoublePropertyBase;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.Property;
import javafx.beans.value.ChangeListener;
Expand Down Expand Up @@ -1299,6 +1302,44 @@ public static <E> Signal<ListChangeListener.Change<? extends E>> observeChange(O
});
}

/**
* Create the wrapped property of the specified setter.
*
* @param getter
* @param setter
* @return
*/
public static DoubleProperty property(DoubleSupplier getter, DoubleConsumer setter) {
return new DoublePropertyBase() {

@Override
public String getName() {
return null;
}

@Override
public Object getBean() {
return null;
}

/**
* {@inheritDoc}
*/
@Override
public double get() {
return getter.getAsDouble();
}

/**
* {@inheritDoc}
*/
@Override
public void set(double newValue) {
setter.accept(newValue);
}
};
}

/**
* Create the wrapped property of the specified {@link Variable}.
*
Expand Down
82 changes: 0 additions & 82 deletions src/main/java/viewtify/ViewtyDialog.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,9 @@
package viewtify;

import java.util.List;
import java.util.Objects;
import java.util.function.Supplier;

import javafx.beans.property.DoubleProperty;
import javafx.beans.property.DoublePropertyBase;
import javafx.geometry.Bounds;
import javafx.geometry.Insets;
import javafx.scene.Node;
import javafx.scene.Parent;
Expand All @@ -37,11 +34,7 @@
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.stage.Window;
import javafx.stage.WindowEvent;

import org.controlsfx.control.PopOver.ArrowLocation;

import kiss.Disposable;
import kiss.I;
import kiss.Model;
Expand All @@ -55,7 +48,6 @@
import viewtify.ui.UILabel;
import viewtify.ui.UIText;
import viewtify.ui.UserInterface;
import viewtify.ui.UserInterfaceProvider;
import viewtify.ui.View;
import viewtify.ui.ViewDSL;
import viewtify.ui.anime.Anime;
Expand Down Expand Up @@ -499,80 +491,6 @@ public Variable<String> showInput(String message, WiseConsumer<UIText<String>> s
});
}

/**
* @param builder
*/
public void showPopup(ArrowLocation arrow, Bounds source, Supplier<UserInterfaceProvider<? extends Node>> builder) {
fadable().disableButtons(true).style(StageStyle.TRANSPARENT).modal(Modality.NONE).show(new DialogView<>() {

@Override
protected ViewDSL declareUI() {
return new ViewDSL() {
{
$(builder.get());
}
};
}

@Override
protected void initialize() {
Node node = Objects
.requireNonNullElse(dialog.getOwner().getScene().getFocusOwner(), dialog.getOwner().getScene().getRoot());

Bounds bounds = ui().getBoundsInLocal();
double x, y;
double gap = 5;

x = source.getCenterX() - (bounds.getWidth() / 2);
y = source.getMaxY() + gap;

Window window = pane.getScene().getWindow();
window.setOpacity(0);
window.setY(y - 10);
window.setX(x);

DoubleProperty a = new DoublePropertyBase() {

@Override
public String getName() {
return null;
}

@Override
public Object getBean() {
return null;
}

/**
* {@inheritDoc}
*/
@Override
public double get() {
return window.getY();
}

/**
* {@inheritDoc}
*/
@Override
public void set(double newValue) {
window.setY(newValue);
}
};

Anime.define().effect(window.opacityProperty(), 1).effect(a, y).run(() -> {
Viewtify.observe(window.focusedProperty()).take(v -> !v).take(1).to(() -> {
System.out.println("REG");
Anime.define().effect(window.opacityProperty(), 0).effect(a, y + 10).run(() -> {
window.hide();
System.out.println(node + " @@");
});
});
});
}
});
}

/**
* Show the print preview dialog.
*/
Expand Down
7 changes: 3 additions & 4 deletions src/main/java/viewtify/ui/UITableColumnBase.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,13 @@
*/
package viewtify.ui;

import org.controlsfx.control.PopOver.ArrowLocation;

import javafx.scene.Node;
import javafx.scene.control.Control;
import javafx.scene.control.TableColumnBase;
import javafx.scene.control.TableView;
import javafx.scene.control.TreeTableView;

import org.controlsfx.control.PopOver.ArrowLocation;

import viewtify.ui.helper.LabelHelper;
import viewtify.ui.helper.StyleHelper;
import viewtify.ui.query.CompoundQuery.Query;
Expand Down Expand Up @@ -77,7 +76,7 @@ public final Self filterable(boolean enable) {

UIButton button = new UIButton(null);
button.style("filterable").styleWhile(table.isFiltering(), "filtering");
button.popup(ArrowLocation.BOTTOM_CENTER, () -> new QueryView(table, query));
button.popup(ArrowLocation.LEFT_CENTER, () -> new QueryView(table, query));

ui.setGraphic(button.ui());
}
Expand Down
20 changes: 7 additions & 13 deletions src/main/java/viewtify/ui/helper/ReferenceHolder.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,16 @@
*/
package viewtify.ui.helper;

import org.controlsfx.control.PopOver;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public abstract class ReferenceHolder {
import javafx.scene.Node;
import javafx.stage.Window;

/** The reusable managed popup base. (Lazy SINGLETON) */
private static PopOver popover;
public abstract class ReferenceHolder {

/** The reusable managed popup base. (Lazy SINGLETON) */
static final synchronized PopOver popover() {
if (popover == null) {
popover = new PopOver();
popover.setArrowSize(0);
popover.setDetachable(false);
}
return popover;
}
/** The popup manager. */
static final Map<Node, Window> popups = new ConcurrentHashMap();

/** The reference holder. */
volatile CollectableHelper.Ð collectable;
Expand Down
Loading

0 comments on commit 432424b

Please sign in to comment.