144 lines
4.5 KiB
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);
|
|
}
|
|
}
|
|
|
|
}
|