package com.teotigraphix.libraryeditor.view; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.fxml.FXML; import javafx.scene.control.TextArea; import javafx.scene.control.TextField; import javafx.scene.layout.Pane; import javafx.scene.layout.StackPane; import org.androidtransfuse.event.EventObserver; import com.cathive.fx.guice.FXMLController; import com.google.inject.Inject; import com.teotigraphix.caustic.model.BeanPathAdapter; import com.teotigraphix.caustic.model.BeanPathAdapter.FieldPathValue; import com.teotigraphix.caustic.ui.controller.ViewStackController; import com.teotigraphix.libraryeditor.model.LibraryModel; import com.teotigraphix.libraryeditor.model.LibraryModel.LibraryItemProxy; import com.teotigraphix.libraryeditor.model.LibraryModel.OnLibraryModelRefresh; import com.teotigraphix.libraryeditor.model.LibraryModel.OnLibraryModelSelectedItemChange; @FXMLController public class EditorViewStackController extends ViewStackController { private BeanPathAdapter<LibraryItemProxy> libraryItem; @FXML StackPane stackPane; @FXML TextField metaName; @FXML TextField metaAuthor; @FXML TextArea metaDescription; @FXML TextField metaTags; @Inject LibraryModel libraryItemModel; public EditorViewStackController() { } @Override public void onRegister() { super.onRegister(); } private ChangeListener<String> changedHandler = new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { } }; @Override protected void registerObservers() { super.registerObservers(); //System.out.println("EditorViewStackController.registerObservers()"); getController().getDispatcher().register(OnLibraryModelSelectedItemChange.class, new EventObserver<OnLibraryModelSelectedItemChange>() { @Override public void trigger(OnLibraryModelSelectedItemChange object) { sceneItemChanged(libraryItemModel.getSelectedItem()); } }); } protected void sceneItemChanged(final LibraryItemProxy libraryItemProxy) { if (libraryItemProxy == null) { if (libraryItem == null) return; System.out.println("EditorViewStackController.sceneItemChanged( UNSET )"); //reset or loading a new library libraryItem.unBindBidirectional("name", metaName.textProperty()); libraryItem.unBindBidirectional("author", metaAuthor.textProperty()); libraryItem.unBindBidirectional("description", metaDescription.textProperty()); libraryItem.unBindBidirectional("tagsString", metaTags.textProperty()); metaName.setText(""); metaAuthor.setText(""); metaDescription.setText(""); metaTags.setText(""); libraryItem = null; return; } getController().getDispatcher().trigger(new OnLibraryModelRefresh()); if (libraryItem == null) { libraryItem = new BeanPathAdapter<LibraryItemProxy>(libraryItemProxy); libraryItem.bindBidirectional("name", metaName.textProperty()); libraryItem.bindBidirectional("author", metaAuthor.textProperty()); libraryItem.bindBidirectional("description", metaDescription.textProperty()); libraryItem.bindBidirectional("tagsString", metaTags.textProperty()); libraryItem.fieldPathValueProperty().addListener(new ChangeListener<FieldPathValue>() { @Override public void changed(ObservableValue<? extends FieldPathValue> arg0, FieldPathValue arg1, FieldPathValue arg2) { getController().getDispatcher().trigger(new OnLibraryModelRefresh()); } }); } else { // System.out.println(item); System.out.println("EditorViewStackController.sceneItemChanged( SET )"); libraryItem.setBean(libraryItemProxy); } } @Override public void create(Pane root) { setStackPane(stackPane); metaName.textProperty().addListener(changedHandler); metaAuthor.textProperty().addListener(changedHandler); metaDescription.textProperty().addListener(changedHandler); metaTags.textProperty().addListener(changedHandler); } }