Prechádzať zdrojové kódy

Add some convenience methods to ObservableController.

Sam Jaffe 5 rokov pred
rodič
commit
82ee489204

+ 1 - 1
pom.xml

@@ -4,7 +4,7 @@
 
   <groupId>org.leumasjaffe</groupId>
   <artifactId>observer</artifactId>
-  <version>0.4.1</version>
+  <version>0.5.0</version>
   <packaging>jar</packaging>
 
   <name>observer</name>

+ 26 - 0
src/main/lombok/org/leumasjaffe/observer/ObservableController.java

@@ -4,6 +4,7 @@ import java.util.Objects;
 import java.util.function.BiConsumer;
 import java.util.function.BiFunction;
 import java.util.function.Consumer;
+import java.util.function.Function;
 
 import javax.swing.text.JTextComponent;
 
@@ -38,6 +39,17 @@ public class ObservableController<S extends JTextComponent, T extends Observable
 		AnyActionDocumentListener.skipEmpty(comp, evt -> accept( ) );
 	}
 	
+	public ObservableController(final S comp, final Function<T, String> get,
+			final BiConsumer<T, String> set, final BiConsumer<? super S, String> update) {
+		super(comp, (c, u) -> update.accept(c, get.apply(u)));
+		this.func = (t, u) -> {
+			if (t.equals(get.apply(u))) return false;
+			set.accept(u, t);
+			return true;
+		};
+		AnyActionDocumentListener.skipEmpty(comp, evt -> accept( ) );
+	}
+	
 	/**
 	 * Construct an ObservableController that modifies its model whenever the linked
 	 * JTextComponent is updated, including deleting all of the text.
@@ -55,6 +67,20 @@ public class ObservableController<S extends JTextComponent, T extends Observable
 				e -> onEmpty.accept( impl.getModel() ), 
 				evt -> accept( ) );
 	}
+	
+	public ObservableController(final S comp, final Function<T, String> get,
+			final BiConsumer<T, String> set, final BiConsumer<? super S, String> update,
+			final Consumer<T> onEmpty) {
+		super(comp, (c, u) -> update.accept(c, get.apply(u)));
+		this.func = (t, u) -> {
+			if (t.equals(get.apply(u))) return false;
+			set.accept(u, t);
+			return true;
+		};
+		AnyActionDocumentListener.emptyOrText( comp, 
+				e -> onEmpty.accept( impl.getModel() ), 
+				evt -> accept( ) );
+	}
 
 	private boolean update() {
 		return func.apply( impl.getComponent().getText( ), impl.getModel() );