// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea
// Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com
// Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology
// Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/
package graphtea.ui.components.prefeditor;
import graphtea.platform.attribute.NotifiableAttributeSetImpl;
import graphtea.platform.preferences.AbstractPreference;
import graphtea.ui.components.gpropertyeditor.GPropertyEditor;
import graphtea.ui.components.utils.GFrameLocationProvider;
import javax.swing.*;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
/**
* @author Rouzbeh Ebrahimi
*/
public class GTabbedAttributePane extends JTabbedPane {
/**
*
*/
private static final long serialVersionUID = -1122049309619308113L;
public HashMap<String, AbstractPreference> tabs;
public HashMap<String, HashSet<AbstractPreference>> complicatedTabs;
public boolean isComplicatedForm;
/**
* Creates new form GAttrFrame
*/
public GTabbedAttributePane(HashMap<String, AbstractPreference> tabs) {
super();
this.tabs = tabs;
initComponents();
}
public GTabbedAttributePane(HashMap<String, HashSet<AbstractPreference>> tabs, boolean complicatedForm) {
super();
this.complicatedTabs = tabs;
this.isComplicatedForm = complicatedForm;
initComponents();
}
/**
* @return the return status of this dialog - true-> the ok presses, false-> cancelled by user
*/
public boolean getReturnStatus() {
return status;
}
GPropertyEditor table;
public void initComponents() {
setPreferredSize(GFrameLocationProvider.getPrefSize());
setLocation(GFrameLocationProvider.getPrefLocation());
setName("Preferences");
Iterator<String> iter;
if (!isComplicatedForm) {
iter = tabs.keySet().iterator();
} else {
iter = complicatedTabs.keySet().iterator();
}
for (; iter.hasNext();) {
if (!isComplicatedForm) {
String title = iter.next();
GPropertyEditor gp = new GPropertyEditor();
gp.connect(tabs.get(title).attributeSet);
gp.setVisible(true);
addTab(title, gp);
} else {
String title = iter.next();
GPropertyEditor gp = new GPropertyEditor();
Iterator<AbstractPreference> i = complicatedTabs.get(title).iterator();
NotifiableAttributeSetImpl attributeSet = new NotifiableAttributeSetImpl();
for (; i.hasNext();) {
AbstractPreference ap = i.next();
Map<String, Object> attributeMap = ap.attributeSet.getAttrs();
Iterator<String> j = attributeMap.keySet().iterator();
for (; j.hasNext();) {
String name = j.next();
Object o = attributeMap.get(name);
attributeSet.put(ap.preferenceName + ": " + name, o);
}
}
// GraphPreferences prefInstance=new GraphPreferences();
gp.connect(attributeSet);
gp.setVisible(true);
addTab(title, gp);
}
}
}
private boolean status = false;
private boolean finished = false;
private void closeDialog() {
finished = true;
}
private void finished(boolean status) {
this.status = status;
closeDialog();
//dispose();
}
// public static GTabbedAttributePane showEditDialog(NotifiableAttributeSet input){
// return showEditDialog(input, true);
// }
// /** Shows a Property editor to edit the attributes in the input.
// * the modal is like the modal in JDialog */
// public static GTabbedAttributePane showEditDialog(NotifiableAttributeSet input, boolean modal){
// GTabbedAttributePane gAttrpane = new GTabbedAttributePane();
// gAttrpane.setVisible(true);
// return gAttrPane;
// }
/**
* return the GProertyEditor which is the main editor of notifiableAttributeSet
*/
public GPropertyEditor getPropertyEditor() {
return table;
}
}