|
@@ -10,8 +10,11 @@ import java.util.Observable;
|
|
|
import java.util.Observer;
|
|
|
|
|
|
import javax.swing.JFrame;
|
|
|
+import javax.swing.JMenuItem;
|
|
|
+import javax.swing.JPopupMenu;
|
|
|
import javax.swing.JScrollPane;
|
|
|
import javax.swing.JTree;
|
|
|
+import javax.swing.SwingUtilities;
|
|
|
import javax.swing.event.TreeSelectionEvent;
|
|
|
import javax.swing.event.TreeSelectionListener;
|
|
|
import javax.swing.tree.DefaultTreeModel;
|
|
@@ -65,18 +68,24 @@ public class NetworkTreePanel extends JScrollPane implements Observer {
|
|
|
private Controller controller;
|
|
|
|
|
|
/**
|
|
|
- * Creates a new Netork Tree Panel
|
|
|
+ * Right click menu
|
|
|
+ */
|
|
|
+ private JPopupMenu rightClick;
|
|
|
+ /**
|
|
|
+ * Creates a new Network Tree Panel
|
|
|
*
|
|
|
- * @param c
|
|
|
+ * @param controller
|
|
|
* Controller
|
|
|
* @param parent
|
|
|
* parent frame
|
|
|
*/
|
|
|
- public NetworkTreePanel(Controller c, JFrame parent) {
|
|
|
+ public NetworkTreePanel(Controller controller, JFrame parent) {
|
|
|
that = this;
|
|
|
this.parent = parent;
|
|
|
- network = c.getNetworkController();
|
|
|
+ this.controller = controller;
|
|
|
+ network = this.controller.getNetworkController();
|
|
|
tree = new JTree();
|
|
|
+ initializeRightClickMenu();
|
|
|
|
|
|
/**
|
|
|
* Custom Renderer
|
|
@@ -102,26 +111,33 @@ public class NetworkTreePanel extends JScrollPane implements Observer {
|
|
|
public void mouseClicked(MouseEvent e) {
|
|
|
TreePath clicked = tree.getPathForLocation(e.getX(), e.getY());
|
|
|
System.out.println("Click on tree: " + clicked);
|
|
|
+
|
|
|
+ showRightClickMenu(e, clicked);
|
|
|
+
|
|
|
}
|
|
|
});
|
|
|
this.setViewportView(tree);
|
|
|
this.setPreferredSize(this.parent.getSize());
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* MVC - Receive updates on model change, and remove listener on Frame
|
|
|
* close
|
|
|
*/
|
|
|
- c.addObserver(this);
|
|
|
+ controller.addObserver(this);
|
|
|
parent.addWindowListener(new WindowAdapter() {
|
|
|
@Override
|
|
|
public void windowClosing(WindowEvent e) {
|
|
|
- c.removeObserver(that);
|
|
|
+ controller.removeObserver(that);
|
|
|
super.windowClosing(e);
|
|
|
}
|
|
|
});
|
|
|
update(null, null);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
@Override
|
|
|
public void update(Observable o, Object arg) {
|
|
|
root = new DefaultMutableTreeNode("Network");
|
|
@@ -171,4 +187,39 @@ public class NetworkTreePanel extends JScrollPane implements Observer {
|
|
|
tree.repaint();
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Initializes the rightClickMenu
|
|
|
+ */
|
|
|
+ private void initializeRightClickMenu() {
|
|
|
+ rightClick = new JPopupMenu();
|
|
|
+ rightClick.add(new JMenuItem("Option 1"));
|
|
|
+ rightClick.add(new JMenuItem("Option 2"));
|
|
|
+ this.add(rightClick);
|
|
|
+
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * Shows the right click menu
|
|
|
+ * @param e Mouse event which triggred this method
|
|
|
+ * @param clicked clicked tree path
|
|
|
+ */
|
|
|
+ private void showRightClickMenu(MouseEvent e, TreePath clicked) {
|
|
|
+ if(!SwingUtilities.isRightMouseButton(e) || clicked == null ){
|
|
|
+ /**
|
|
|
+ * Hide Menu, maybe create methods later ?
|
|
|
+ */
|
|
|
+ rightClick.setVisible(false);
|
|
|
+ rightClick.setEnabled(false);
|
|
|
+ }else{
|
|
|
+ Object o = clicked.getLastPathComponent();
|
|
|
+ if(o instanceof SmartDevice){
|
|
|
+ //TODO: Specific actions
|
|
|
+ }
|
|
|
+ rightClick.setLocation(e.getLocationOnScreen());
|
|
|
+ rightClick.setVisible(true);
|
|
|
+ rightClick.setEnabled(true);
|
|
|
+ if(o instanceof SmartDevice) System.out.println(((SmartDevice)o).getName());
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|