/* Copyright (c) 2009 The Regents of the University of California. All rights reserved. Permission is hereby granted, without written agreement and without license or royalty fees, to use, copy, modify, and distribute this software and its documentation for any purpose, provided that the above copyright notice and the following two paragraphs appear in all copies of this software. IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.. */ /* * factoidEditor.java * * Created on Aug 23, 2010, 5:52:25 PM */ package org.clothocad.tool.grapevine; import java.awt.Color; import javax.swing.BorderFactory; import javax.swing.border.Border; import org.clothocore.api.data.Factoid; import org.clothocore.api.data.ObjBase; import org.clothocore.api.data.Person; import org.clothocore.api.data.Reference; import org.clothocore.api.dnd.ObjBaseObserver; import org.clothocore.api.dnd.RefreshEvent; import org.clothocore.api.dnd.RefreshEvent.Condition; import org.clothocore.util.basic.ObjBasePopup; import org.clothocad.wikieditorpanel.WikiEditorPanel; import org.clothocore.util.basic.ImageSource; /** * * @author J. Christopher Anderson */ public class factoidEditor extends javax.swing.JFrame { /** Creates new form factoidEditor */ public factoidEditor(Factoid fact) { super("Factoid Editor"); setIconImage(ImageSource.getTinyLogo()); _fact = fact; initComponents(); obo = new ObjBaseObserver() { @Override public void update(ObjBase obj, RefreshEvent evt) { Condition cond = evt.getCondition(); switch(cond) { case AUTHOR_CHANGED: authorField.dataUpdated(); break; case DELETE_SUCCESSFUL: dispose(); break; case NAME_CHANGED: titleField.dataUpdated(); break; case REFERENCE_CHANGED: pmidAbstractArea.dataUpdated(); pmidTitleArea.dataUpdated(); break; case UPDATE_ALL: authorField.dataUpdated(); titleField.dataUpdated(); pmidAbstractArea.dataUpdated(); pmidTitleArea.dataUpdated(); break; } } }; _fact.isRepresentedBy(obo, getContentPane()); new ObjBasePopup(getContentPane(), _fact); setSize(600,600); setVisible(true); } private void initComponents() { wikiPanel = new WikiEditorPanel(this, _fact.getWikiText()); titleLabel = new javax.swing.JLabel(); titleLabel.setForeground(Color.lightGray); authorLabel = new javax.swing.JLabel(); authorLabel.setForeground(Color.lightGray); reflabel = new javax.swing.JLabel(); reflabel.setForeground(Color.lightGray); authorexlabel = new javax.swing.JLabel(); authorexlabel.setForeground(Color.lightGray); jScrollPane1 = new javax.swing.JScrollPane(); pmidAbstractArea = new blueTextArea(10) { @Override public void dataUpdated() { Reference ref = _fact.getReference(); if(ref!=null) { this.setText(ref.getAbstract()); } } }; jScrollPane2 = new javax.swing.JScrollPane(); pmidTitleArea = new blueTextArea(15) { @Override public void dataUpdated() { Reference ref = _fact.getReference(); if(ref!=null) { this.setText(ref.getTitle()); } } }; getContentPane().setBackground(navyblue); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); refField = new blueTextField(12) { @Override public void gainFocus() { } @Override public void loseFocus() { if(oldValue.equals(this.getText())) { return; } oldValue = this.getText(); _fact.changeReference(oldValue); } @Override public void dataUpdated() { if(_fact.getReference()!=null) { this.setText(_fact.getReference().getID()); } } }; authorField = new blueTextField(12) { @Override public void gainFocus() { } @Override public void loseFocus() { if(oldValue.equals(this.getText())) { return; } oldValue = this.getText(); Person aperson = Person.retrieveByName(oldValue.trim()); _fact.changeAuthor(aperson); } @Override public void dataUpdated() { this.setText(_fact.getAuthor().getName()); } }; titleField = new blueTextField(16) { @Override public void gainFocus() { } @Override public void loseFocus() { if(oldValue.equals(this.getText())) { return; } oldValue = this.getText(); _fact.changeName(oldValue); } @Override public void dataUpdated() { this.setText(_fact.getName()); } }; titleLabel.setText("Factoid title:"); authorLabel.setText("Author:"); reflabel.setText("Reference Link"); authorexlabel.setFont(new java.awt.Font("Tahoma", 2, 10)); // NOI18N authorexlabel.setText("(Ex: \"PMID:1347277\" )"); pmidAbstractArea.setColumns(20); pmidAbstractArea.setRows(5); jScrollPane1.setViewportView(pmidAbstractArea); pmidTitleArea.setColumns(20); pmidTitleArea.setRows(2); jScrollPane2.setViewportView(pmidTitleArea); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 455, Short.MAX_VALUE) .addComponent(wikiPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 455, Short.MAX_VALUE) .addComponent(titleField, javax.swing.GroupLayout.DEFAULT_SIZE, 455, Short.MAX_VALUE) .addComponent(titleLabel) .addGroup(layout.createSequentialGroup() .addComponent(reflabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(authorexlabel, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(layout.createSequentialGroup() .addComponent(refField, javax.swing.GroupLayout.DEFAULT_SIZE, 169, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(authorLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(authorField, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE))))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addComponent(titleLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(titleField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(authorField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(authorLabel) .addComponent(reflabel) .addComponent(refField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(authorexlabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(wikiPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); pack(); } private abstract class blueTextArea extends javax.swing.JTextArea { //VARIABLES: int _size; String oldValue=""; public blueTextArea(int size) { _size = size; this.setBackground(navyblue); this.setFont(new java.awt.Font("Arial", 0, _size)); this.setForeground(Color.WHITE); this.setBorder(null); this.setLineWrap(true); this.setWrapStyleWord(true); this.setEditable(false); dataUpdated(); } public abstract void dataUpdated(); } /**----------------- variables -----------------*/ private blueTextField authorField; private blueTextField titleField; private blueTextField refField; private blueTextArea pmidAbstractArea; private blueTextArea pmidTitleArea; private javax.swing.JLabel authorLabel; private javax.swing.JLabel authorexlabel; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JLabel reflabel; private javax.swing.JLabel titleLabel; private WikiEditorPanel wikiPanel; private Factoid _fact; static Color navyblue = new Color(35, 48, 64); private static final Border blackline = BorderFactory.createLineBorder(Color.black); private ObjBaseObserver obo; }