jNetClient/src/jnet/client/gui/MapTree.java

144 lines
4.5 KiB
Java

package jnet.client.gui;
import jnet.client.Client;
import jnet.client.gui.dialog.AddMapDialog;
import jnet.client.network.NettyClient;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Collections;
import javax.swing.ImageIcon;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeSelectionModel;
import jnet.lib.LogFile;
import jnet.lib.MapComparator;
import jnet.lib.Message;
import jnet.lib.object.Map;
public class MapTree extends JTree {
static DefaultTreeModel model;
static DefaultMutableTreeNode root = new DefaultMutableTreeNode("Mapy");
private static JTree tree;
public MapTree() {
tree = this;
// neni videt root element
this.setRootVisible(false);
// povoli pouze jeden vybrany radek
this.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
model = new DefaultTreeModel(root);
this.setModel(model);
this.setCellRenderer(new MapTreeCellRenderer());
//this.setComponentPopupMenu(getPopUpMenu());
MouseListener ml = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) getLastSelectedPathComponent();
if (SwingUtilities.isRightMouseButton(e)) {
// right click
if (node != null) {
Object obj = node.getUserObject();
getContextMenuMap(e, (Map) obj);
}
} else if (SwingUtilities.isLeftMouseButton(e)) {
// left click
if (!node.isRoot()) {
if (e.getClickCount() == 1) { // jednoduchy klik
} else if (e.getClickCount() == 2) { // dvojklik
Object obj = node.getUserObject();
Window.setMapView((Map) obj);
}
}
}
}
};
addMouseListener(ml);
}
private static void getContextMenuMap(MouseEvent e, Map m) {
JMenuItem mapAdd = new JMenuItem("Přidat mapu", new ImageIcon("img/add.png"));
mapAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new AddMapDialog().setVisible(true);
}
});
JMenuItem mapDelete = new JMenuItem("Smazat mapu", new ImageIcon("img/trash.png"));
mapDelete.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int option = JOptionPane.showConfirmDialog(
null,
"Smazat mapu " + m.getName() + " a všechny její objekty ?",
"Potvrzení akce",
JOptionPane.YES_NO_OPTION
);
if (option == JOptionPane.YES_OPTION) {
NettyClient.send(Message.MAP_REMOVE, m.getId());
}
}
});
JPopupMenu menu = new JPopupMenu();
if (Client.user.isAddMap()) {
menu.add(mapAdd);
}
if (Client.user.isRemoveMap()) {
menu.add(mapDelete);
}
menu.show(e.getComponent(), e.getX(), e.getY());
}
private static void expandAllNodes(JTree tree, int startingIndex, int rowCount) {
for (int i = startingIndex; i < rowCount; ++i) {
tree.expandRow(i);
}
if (tree.getRowCount() != rowCount) {
expandAllNodes(tree, rowCount, tree.getRowCount());
}
}
public static void reload() {
root.removeAllChildren();
Collections.sort(Client.maps, new MapComparator());
for (Map map : Client.maps) {
DefaultMutableTreeNode node = new DefaultMutableTreeNode(map);
root.add(node);
}
try {
model.reload();
expandAllNodes(tree, 0, tree.getRowCount());
} catch (Exception e) {
LogFile.printErr("Map tree error: " + e);
}
}
}