/*
* Copyright 2015 Igor Maznitsa.
*
* 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.igormaznitsa.sciareto.ui.editors.mmeditors;
import com.igormaznitsa.mindmap.model.ExtraTopic;
import com.igormaznitsa.mindmap.model.MindMap;
import com.igormaznitsa.mindmap.model.Topic;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Comparator;
import javax.swing.JTree;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import com.igormaznitsa.mindmap.swing.panel.utils.Utils;
public final class MindMapTreePanel extends javax.swing.JPanel implements Comparator<Object>{
private static final long serialVersionUID = 2652308291444091807L;
private final MindMapTreeCellRenderer cellRenderer = new MindMapTreeCellRenderer();
private final SortedTreeModelWrapper sortedModel;
public MindMapTreePanel(final MindMap map, final ExtraTopic selectedTopicUid, final boolean expandAll, final ActionListener listener) {
initComponents();
this.treeMindMap.setCellRenderer(this.cellRenderer);
this.treeMindMap.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
if (map != null) {
this.sortedModel = new SortedTreeModelWrapper(map, this);
this.treeMindMap.setModel(this.sortedModel);
if (selectedTopicUid != null) {
final Topic topic = map.findTopicForLink(selectedTopicUid);
if (topic != null) {
this.treeMindMap.setSelectionPath(new TreePath(topic.getPath()));
}
}
}else{
this.sortedModel = null;
}
this.treeMindMap.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(final MouseEvent e) {
if (!e.isPopupTrigger() && e.getClickCount() > 1) {
if (listener != null) {
listener.actionPerformed(new ActionEvent(this, 0, "doubleClick")); //NOI18N
}
}
}
});
this.setPreferredSize(new Dimension(450, 400));
if (expandAll){
Utils.foldUnfoldTree(this.treeMindMap,true);
}
}
public JTree getTree() {
return this.treeMindMap;
}
public Topic getSelectedTopic() {
final TreePath selected = this.treeMindMap.getSelectionPath();
return selected == null ? null : (Topic) selected.getLastPathComponent();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
treeScrollPane = new javax.swing.JScrollPane();
treeMindMap = new javax.swing.JTree();
toolBar = new javax.swing.JToolBar();
buttonExpandAll = new javax.swing.JButton();
buttonCollapseAll = new javax.swing.JButton();
buttonUnselect = new javax.swing.JButton();
setLayout(new java.awt.BorderLayout());
treeScrollPane.setViewportView(treeMindMap);
add(treeScrollPane, java.awt.BorderLayout.CENTER);
toolBar.setFloatable(false);
toolBar.setRollover(true);
buttonExpandAll.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/toggle_expand16.png"))); // NOI18N
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("com/igormaznitsa/nbmindmap/i18n/Bundle"); // NOI18N
buttonExpandAll.setText(bundle.getString("MindMapTreePanel.buttonExpandAll.text_1")); // NOI18N
buttonExpandAll.setFocusable(false);
buttonExpandAll.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
buttonExpandAll.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
buttonExpandAll.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonExpandAllActionPerformed(evt);
}
});
toolBar.add(buttonExpandAll);
buttonCollapseAll.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/toggle16.png"))); // NOI18N
buttonCollapseAll.setText(bundle.getString("MindMapTreePanel.buttonCollapseAll.text_1")); // NOI18N
buttonCollapseAll.setFocusable(false);
buttonCollapseAll.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
buttonCollapseAll.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
buttonCollapseAll.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonCollapseAllActionPerformed(evt);
}
});
toolBar.add(buttonCollapseAll);
buttonUnselect.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/select16.png"))); // NOI18N
buttonUnselect.setText(bundle.getString("MindMapTreePanel.buttonUnselect.text_1")); // NOI18N
buttonUnselect.setFocusable(false);
buttonUnselect.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
buttonUnselect.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
buttonUnselect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonUnselectActionPerformed(evt);
}
});
toolBar.add(buttonUnselect);
add(toolBar, java.awt.BorderLayout.PAGE_START);
}// </editor-fold>//GEN-END:initComponents
private void buttonUnselectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonUnselectActionPerformed
this.treeMindMap.setSelectionPath(null);
}//GEN-LAST:event_buttonUnselectActionPerformed
private void buttonExpandAllActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonExpandAllActionPerformed
Utils.foldUnfoldTree(this.treeMindMap, true);
}//GEN-LAST:event_buttonExpandAllActionPerformed
private void buttonCollapseAllActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonCollapseAllActionPerformed
Utils.foldUnfoldTree(this.treeMindMap, false);
}//GEN-LAST:event_buttonCollapseAllActionPerformed
public void dispose(){
if (this.sortedModel != null){
this.sortedModel.dispose();
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton buttonCollapseAll;
private javax.swing.JButton buttonExpandAll;
private javax.swing.JButton buttonUnselect;
private javax.swing.JToolBar toolBar;
private javax.swing.JTree treeMindMap;
private javax.swing.JScrollPane treeScrollPane;
// End of variables declaration//GEN-END:variables
@Override
public int compare(final Object o1, final Object o2) {
return String.CASE_INSENSITIVE_ORDER.compare(String.valueOf(o1), String.valueOf(o2));
}
}