All Downloads are FREE. Search and download functionalities are using the official Maven repository.

eu.agrosense.client.worker.WorkerPropertiesView Maven / Gradle / Ivy

/**
 * Copyright (C) 2008-2013 LimeTri. All rights reserved.
 *
 * AgroSense is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * There are special exceptions to the terms and conditions of the GPLv3 as it is applied to
 * this software, see the FLOSS License Exception
 * .
 *
 * AgroSense is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with AgroSense.  If not, see .
 */
package eu.agrosense.client.worker;

import eu.agrosense.api.style.StyleManager;
import eu.agrosense.client.model.Model;
import eu.agrosense.client.util.javafx.FieldSets;
import eu.agrosense.shared.model.Worker;
import java.awt.BorderLayout;
import static java.awt.image.ImageObserver.HEIGHT;
import static java.awt.image.ImageObserver.WIDTH;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
import org.netbeans.core.spi.multiview.CloseOperationState;
import org.netbeans.core.spi.multiview.MultiViewElement;
import org.netbeans.core.spi.multiview.MultiViewElementCallback;
import org.opendolphin.binding.JFXBinder;
import org.opendolphin.core.PresentationModel;
import org.openide.awt.UndoRedo;
import org.openide.util.Lookup;
import org.openide.util.NbBundle;
import org.openide.windows.TopComponent;
import org.tbee.javafx.scene.layout.MigPane;

/**
 *
 * @author johan
 */
@NbBundle.Messages("worker properties view name=Properties")
@MultiViewElement.Registration(displayName = "Properties",
        iconBase = WorkerNode.ICON_BASE,
        mimeType = Worker.MIME_TYPE,
        persistenceType = TopComponent.PERSISTENCE_NEVER,
        preferredID = "WorkerProperties",
        position = 100)
public class WorkerPropertiesView extends JPanel implements MultiViewElement {

    private JToolBar toolbar = new JToolBar();
    private transient MultiViewElementCallback callback;
    private Lookup lkp;
    private JFXPanel fxPanel;
    private PresentationModel model;
    //
    // fields
    //
    private final TextField idField = new TextField();
    private final TextField nameField = new TextField();
    //
    //
    //
    private final PropertyChangeListener nameChangeListener = new PropertyChangeListener() {
        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            if (SwingUtilities.isEventDispatchThread()) {
                updateName();
            } else {
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        updateName();
                    }
                });
            }
        }
    };

    public WorkerPropertiesView(Lookup lkp) {
        this.lkp = lkp;
        setLayout(new BorderLayout());
        model = lkp.lookup(PresentationModel.class);
        model.getAt(Worker.PROP_NAME).addPropertyChangeListener(nameChangeListener);
        initComponents();
    }

    private void initComponents() {
        setLayout(new BorderLayout());
        fxPanel = new JFXPanel();

        Platform.setImplicitExit(false);
        // create JavaFX scene
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                MigPane root = new MigPane("wrap 2");
                //
                // adding id label and field
                //
                Label idLabel = new Label("Id:");
                root.add(idLabel);
                idField.setPrefWidth(150.0d);
                idField.setDisable(true);
                root.add(idField);
                JFXBinder.bind(Worker.PROP_URI).of(Model.withAt(model, Worker.PROP_URI)).to("text").of(idField);
                JFXBinder.bind("text").of(idField).to(Worker.PROP_URI).of(model);
                //
                // adding name label and field
                //
                Label nameLabel = new Label("Name:");
                root.add(nameLabel);
                nameField.setPrefWidth(150.0d);
                root.add(nameField);
                JFXBinder.bind(Worker.PROP_NAME).of(Model.withAt(model, Worker.PROP_NAME)).to("text").of(nameField);                
                JFXBinder.bind("text").of(nameField).to(Worker.PROP_NAME).of(model);
                
                FieldSets.addNaturalPersonFieldSet(root, model);
                FieldSets.addAddressFieldSet(root, model);
                
                Scene scene = new Scene(root, WIDTH, HEIGHT);
                StyleManager.Default.applyFormStyle(scene);
                fxPanel.setScene(scene);
            }
        });

        add(fxPanel, BorderLayout.CENTER);
    }

    @Override
    public JComponent getVisualRepresentation() {
        return this;
    }

    @Override
    public JComponent getToolbarRepresentation() {
        return toolbar;
    }

    @Override
    public Action[] getActions() {
        return new Action[0];
    }

    @Override
    public Lookup getLookup() {
        return lkp;
    }

    @Override
    public void componentOpened() {
    }

    @Override
    public void componentClosed() {
    }

    @Override
    public void componentShowing() {
        if (callback != null) {
            updateName();
        }
    }

    @Override
    public void componentHidden() {
    }

    @Override
    public void componentActivated() {
    }

    @Override
    public void componentDeactivated() {
    }

    @Override
    public UndoRedo getUndoRedo() {
        return UndoRedo.NONE;
    }

    @Override
    public void setMultiViewCallback(MultiViewElementCallback callback) {
        this.callback = callback;
    }

    @Override
    public CloseOperationState canCloseElement() {
        return CloseOperationState.STATE_OK;
    }

    private void updateName() {
        if (callback != null) {
            TopComponent tc = callback.getTopComponent();
            tc.setHtmlDisplayName((String) model.getAt(Worker.PROP_NAME).getValue());
            tc.setDisplayName((String) model.getAt(Worker.PROP_NAME).getValue());
            tc.setName(getName());
            tc.setToolTipText(getToolTipText());
        }
    }
    
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy