/* * Copyright (C) 2013,2014 The Cat Hive Developers. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.cathive.fx.apps.contacts; import com.cathive.fx.apps.contacts.model.Contact; import com.cathive.fx.inject.core.FXMLComponent; import javafx.beans.binding.Bindings; import javafx.beans.property.BooleanProperty; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.image.ImageView; import javafx.scene.layout.VBox; import javax.annotation.PostConstruct; import javax.enterprise.inject.Instance; import javax.inject.Inject; import javax.inject.Named; /** * @author Benjamin P. Jung */ @Named @FXMLComponent(location = "ContactDetailsPane.fxml", resources = "com.cathive.fx.apps.contacts.Messages") public class ContactDetailsPane extends VBox { @Inject private Instance<ContactsApp> appInstance; @Inject private ContactRendererFactory displayNameRenderers; @FXML private Label displayNameLabel; @FXML private Label firstNameLabel; @FXML private Label lastNameLabel; @FXML private ImageView photoImageView; // <editor-fold desc="Property: read only"> public static final String READ_ONLY_PROPERTY = "readOnly"; private final BooleanProperty readOnly = new SimpleBooleanProperty(this, READ_ONLY_PROPERTY); public boolean isReadOnly() { return this.readOnly.get(); } public void setReadOnly(final boolean readOnly) { this.readOnly.set(readOnly); } public BooleanProperty readOnlyBooleanProperty() { return this.readOnly; } // </editor-fold> /** Contact to be displayed by this component (thus: the "model"). */ private final ObjectProperty<Contact> contact = new SimpleObjectProperty<>(this, "contact"); public void setContact(final Contact contact) { this.contact.set(contact); } public Contact getContact() { return this.contact.get(); } public ObjectProperty<Contact> contactProperty() { return this.contact; } public ContactDetailsPane() { super(); } @PostConstruct protected void init() { this.contactProperty().addListener((observableValue, contact1, contact2) -> { this.displayNameLabel.textProperty().unbind(); if (contact2 == null) { this.displayNameLabel.setText(""); this.photoImageView.setImage(null); } else { this.displayNameLabel.textProperty().bind(this.displayNameRenderers.createDisplayNameBinding(contact2)); this.photoImageView.imageProperty().bind(Bindings.createObjectBinding(() -> contact2.getPhoto() != null ? contact2.getPhoto() : this.displayNameRenderers.getDefaultPhoto(contact2), contact2.photoProperty() )); } }); } }