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