Compare commits

...

10 Commits

50 changed files with 378 additions and 378 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.log

View File

@ -69,5 +69,16 @@
properties which you can use, check the target you are overriding in the properties which you can use, check the target you are overriding in the
nbproject/build-impl.xml file. nbproject/build-impl.xml file.
--> -->
<target name="-post-compile">
<copy todir="${build.classes.dir}">
<fileset dir="resources"/>
</copy>
</target>
<target name="-post-jar">
<copy todir="${dist.jar.dir}">
<fileset dir="resources"/>
</copy>
</target>
</project> </project>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 424 B

After

Width:  |  Height:  |  Size: 424 B

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 725 B

After

Width:  |  Height:  |  Size: 725 B

View File

Before

Width:  |  Height:  |  Size: 644 B

After

Width:  |  Height:  |  Size: 644 B

View File

Before

Width:  |  Height:  |  Size: 634 B

After

Width:  |  Height:  |  Size: 634 B

View File

Before

Width:  |  Height:  |  Size: 679 B

After

Width:  |  Height:  |  Size: 679 B

View File

Before

Width:  |  Height:  |  Size: 769 B

After

Width:  |  Height:  |  Size: 769 B

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 188 B

After

Width:  |  Height:  |  Size: 188 B

View File

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

Before

Width:  |  Height:  |  Size: 362 B

After

Width:  |  Height:  |  Size: 362 B

View File

Before

Width:  |  Height:  |  Size: 312 B

After

Width:  |  Height:  |  Size: 312 B

View File

Before

Width:  |  Height:  |  Size: 659 B

After

Width:  |  Height:  |  Size: 659 B

View File

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

Before

Width:  |  Height:  |  Size: 397 B

After

Width:  |  Height:  |  Size: 397 B

View File

Before

Width:  |  Height:  |  Size: 313 B

After

Width:  |  Height:  |  Size: 313 B

View File

Before

Width:  |  Height:  |  Size: 802 B

After

Width:  |  Height:  |  Size: 802 B

View File

Before

Width:  |  Height:  |  Size: 1023 B

After

Width:  |  Height:  |  Size: 1023 B

View File

Before

Width:  |  Height:  |  Size: 177 B

After

Width:  |  Height:  |  Size: 177 B

View File

@ -1,23 +1,23 @@
package jnet.client; package jnet.client;
import jnet.client.gui.Tray;
import jnet.client.gui.Window; import jnet.client.gui.Window;
import jnet.client.network.NettyClient; import jnet.client.network.NettyClient;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
import jnet.client.gui.Tray;
import jnet.lib.BuilddDate; import jnet.lib.BuilddDate;
import jnet.lib.LogFile; import jnet.lib.LogFile;
import jnet.lib.PropertiesManager; import jnet.lib.PropertiesManager;
import jnet.lib.object.Event; import jnet.lib.object.Event;
import jnet.lib.object.Map; import jnet.lib.object.Map;
import jnet.lib.object.MapObject;
import jnet.lib.object.ObjectType; import jnet.lib.object.ObjectType;
import jnet.lib.object.OnlineClients; import jnet.lib.object.OnlineClients;
import jnet.lib.object.ServerConfig; import jnet.lib.object.ServerConfig;
import jnet.lib.object.SnmpProfile; import jnet.lib.object.SnmpProfile;
import jnet.lib.object.User; import jnet.lib.object.User;
public class Client { public class Client {
// verze serveru // verze serveru
@ -26,12 +26,12 @@ public class Client {
public static final String APP_NAME = "jNet"; public static final String APP_NAME = "jNet";
public static List<Map> maps = new CopyOnWriteArrayList<>(); public static List<Map> maps = new CopyOnWriteArrayList<>();
public static ArrayList<MapObject> mapObject = new ArrayList<>(); //public static List<MapObject> mapObject = new ArrayList<>();
public static ArrayList<OnlineClients> onlineClients = new ArrayList<>(); public static List<OnlineClients> onlineClients = new ArrayList<>();
public static ArrayList<ObjectType> objectType = new ArrayList<>(); public static List<ObjectType> objectType = new ArrayList<>();
public static ArrayList<SnmpProfile> snmpProfile = new ArrayList<>(); public static List<SnmpProfile> snmpProfile = new ArrayList<>();
public static ArrayList<User> users = new ArrayList<>(); public static List<User> users = new ArrayList<>();
public static ArrayList<Event> events = new ArrayList<>(); public static List<Event> events = new ArrayList<>();
public static User user; public static User user;
public static boolean connected = false; public static boolean connected = false;
public static Window okno = new Window(); public static Window okno = new Window();

View File

@ -1,10 +1,11 @@
package jnet.client; package jnet.client;
import jnet.client.gui.MapTree;
import jnet.client.gui.MapView;
import jnet.client.gui.Tray;
import jnet.client.network.NettyClient;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.function.Consumer;
import javax.swing.JOptionPane;
import jnet.client.gui.UIUpdater;
import jnet.client.network.NettyClient;
import jnet.lib.LogFile; import jnet.lib.LogFile;
import jnet.lib.Message; import jnet.lib.Message;
import jnet.lib.object.Event; import jnet.lib.object.Event;
@ -18,102 +19,107 @@ import jnet.lib.object.User;
public class ClientMessageParser { public class ClientMessageParser {
private static final java.util.Map<Integer, Consumer<Message>> handlers = new HashMap<>();
static {
handlers.put(Message.CLIENT_VERSION, ClientMessageParser::handleClientVersion);
handlers.put(Message.UPDATE, ClientMessageParser::handleUpdate);
handlers.put(Message.AUTH_REQUEST, ClientMessageParser::handleAuthRequest);
handlers.put(Message.AUTH_SUCEFULL, ClientMessageParser::handleAuthSuccessful);
handlers.put(Message.AUTH_FAIL, ClientMessageParser::handleAuthFail);
handlers.put(Message.ONLINE_CLIENTS, ClientMessageParser::handleOnlineClients);
handlers.put(Message.OBJECT_TYPE, ClientMessageParser::handleObjectType);
handlers.put(Message.USER, ClientMessageParser::handleUser);
handlers.put(Message.USER_INFO, ClientMessageParser::handleUserInfo);
handlers.put(Message.MAP, ClientMessageParser::handleMap);
handlers.put(Message.STATUS_UPDATE, ClientMessageParser::handleStatusUpdate);
handlers.put(Message.SET_MAP_LOCK, ClientMessageParser::handleSetMapLock);
handlers.put(Message.SNMP_PROFILE, ClientMessageParser::handleSnmpProfile);
handlers.put(Message.EVENT_LIST, ClientMessageParser::handleEventList);
handlers.put(Message.EVENT_NEW, ClientMessageParser::handleEventNew);
handlers.put(Message.EVENT_UPDATE, ClientMessageParser::handleEventUpdate);
handlers.put(Message.ADD_OBJECT, ClientMessageParser::handleAddObject);
handlers.put(Message.REMOVE_OBJECT, ClientMessageParser::handleRemoveObject);
handlers.put(Message.UPDATE_OBJECT, ClientMessageParser::handleUpdateObject);
handlers.put(Message.MAP_REMOVE, ClientMessageParser::handleMapRemove);
handlers.put(Message.USER_EDIT, ClientMessageParser::handleUserEdit);
handlers.put(Message.DELETE_LOG, ClientMessageParser::handleDeleteLog);
handlers.put(Message.SERVER_CONFIG, ClientMessageParser::handleServerConfig);
}
public static void parse(Message msg) { public static void parse(Message msg) {
LogFile.printDebug("-> Message type: " + msg.getType()); LogFile.printDebug("-> Message type: " + msg.getType());
handlers.getOrDefault(msg.getType(), m -> LogFile.printErr("Neznámý typ zprávy")).accept(msg);
}
private static void handleClientVersion(Message msg) {
switch (msg.getType()) {
case Message.CLIENT_VERSION:
NettyClient.send(Message.CLIENT_VERSION, Client.CLIENT_VERSION); NettyClient.send(Message.CLIENT_VERSION, Client.CLIENT_VERSION);
break; }
case Message.UPDATE: private static void handleUpdate(Message msg) {
LogFile.printInfo("Received update request"); LogFile.printInfo("Received update request");
// String[] run = {"java", "-jar", "Updater.jar"}; // TODO: Dialogové okno s informací o aktualizaci a odpočtem k jejímu provedení
// // TODO po přijetí pozadavku dialogove okno s informaci ze dojde k aktualizace a odpoctem k jejimu provedeni }
// try {
// // odpoji se
// client.disconnect();
// // spusti updater
// Runtime.getRuntime().exec(run);
// // vypne program
// System.exit(0);
// } catch (IOException ex) {
// LogFile.printErr("Client update exception: " + ex.getMessage());
// }
break;
case Message.AUTH_REQUEST: private static void handleAuthRequest(Message msg) {
String[] userPass = {Client.config.getString("user"), Client.config.getString("password"), String.valueOf(OnlineClients.PLATFORM_PC)}; String[] userPass = {Client.config.getString("user"), Client.config.getString("password"), String.valueOf(OnlineClients.PLATFORM_PC)};
NettyClient.send(Message.AUTH, userPass); NettyClient.send(Message.AUTH, userPass);
break; }
case Message.AUTH_SUCEFULL: private static void handleAuthSuccessful(Message msg) {
LogFile.printInfo("Log in to server"); LogFile.printInfo("Log in to server");
Client.setConnected(); Client.setConnected();
break; }
case Message.AUTH_FAIL: private static void handleAuthFail(Message msg) {
LogFile.printInfo("Authorization failed on server"); LogFile.printInfo("Authorization failed on server");
// TODO co dal ? když se nepřihlásí ? někam vypsat informaci nebo otevřít okno s informací ? JOptionPane.showMessageDialog(null, "Chybné přihlašovací údaje!", "Chyba", JOptionPane.ERROR_MESSAGE);
break;
case Message.ONLINE_CLIENTS: }
private static void handleOnlineClients(Message msg) {
Client.onlineClients = (ArrayList<OnlineClients>) msg.getMsg(); Client.onlineClients = (ArrayList<OnlineClients>) msg.getMsg();
break; }
case Message.OBJECT_TYPE: private static void handleObjectType(Message msg) {
Client.objectType.add((ObjectType) msg.getMsg()); Client.objectType.add((ObjectType) msg.getMsg());
break; }
case Message.USER: private static void handleUser(Message msg) {
Client.users.add((User) msg.getMsg()); Client.users.add((User) msg.getMsg());
break; }
case Message.USER_INFO: private static void handleUserInfo(Message msg) {
Client.user = (User) msg.getMsg(); Client.user = (User) msg.getMsg();
break; }
case Message.MAP: private static void handleMap(Message msg) {
// pridani do arraylistu Client.maps.add((Map) (Map) msg.getMsg());
Client.maps.add((Map) msg.getMsg()); // aktualizace UI
// pridani do stromu map o refres se postara pri pridavani UIUpdater.updateMapTree();
MapTree.reload(); UIUpdater.updateTray();
// aktualizace tray icon }
Tray.refresh();
break;
case Message.OBJECT_LIST: private static void handleStatusUpdate(Message msg) {
Client.mapObject = (ArrayList<MapObject>) msg.getMsg();
// pridani do stromu map o refres se postara pri pridavani
MapTree.reload();
// aktualizace tray icon
Tray.refresh();
break;
case Message.STATUS_UPDATE:
int[] o = (int[]) msg.getMsg(); int[] o = (int[]) msg.getMsg();
int status = o[1];
int obj_id = o[0]; int obj_id = o[0];
for (MapObject mapObject : Client.mapObject) { int status = o[1];
for (Map map : Client.maps) {
for (MapObject mapObject : map.getObjects()) {
if (mapObject.getId() == obj_id) { if (mapObject.getId() == obj_id) {
// nastaveni statusu objektu
mapObject.setStatus(status); mapObject.setStatus(status);
// aktualizace pohledu map // aktualizace UI
MapView.updateMapView(mapObject.getId()); UIUpdater.updateMapTree();
//aktualizace seznamu map UIUpdater.updateTray();
MapTree.reload(); UIUpdater.updateMapView();
// aktualizace tray icon
Tray.refresh();
break; break;
} }
} }
}
SoundManager.changeStatus(status); SoundManager.changeStatus(status);
break; }
case Message.SET_MAP_LOCK: private static void handleSetMapLock(Message msg) {
int[] data_lock = (int[]) msg.getMsg(); int[] data_lock = (int[]) msg.getMsg();
for (Map map : Client.maps) { for (Map map : Client.maps) {
if (map.getId() == data_lock[0]) { if (map.getId() == data_lock[0]) {
@ -121,20 +127,21 @@ public class ClientMessageParser {
break; break;
} }
} }
break; }
case Message.SNMP_PROFILE: private static void handleSnmpProfile(Message msg) {
Client.snmpProfile.add((SnmpProfile) msg.getMsg()); Client.snmpProfile.add((SnmpProfile) msg.getMsg());
break; }
case Message.EVENT_LIST: private static void handleEventList(Message msg) {
Client.events = ((ArrayList<Event>) msg.getMsg()); Client.events = (ArrayList<Event>) msg.getMsg();
break; }
case Message.EVENT_NEW:
private static void handleEventNew(Message msg) {
Client.events.add((Event) msg.getMsg()); Client.events.add((Event) msg.getMsg());
break; }
case Message.EVENT_UPDATE: private static void handleEventUpdate(Message msg) {
Event event_update = (Event) msg.getMsg(); Event event_update = (Event) msg.getMsg();
for (int i = 0; i < Client.events.size(); i++) { for (int i = 0; i < Client.events.size(); i++) {
if (event_update.getId() == Client.events.get(i).getId()) { if (event_update.getId() == Client.events.get(i).getId()) {
@ -142,79 +149,65 @@ public class ClientMessageParser {
break; break;
} }
} }
break;
case Message.ADD_OBJECT:
MapObject new_mo = (MapObject) msg.getMsg();
// pridat do seznamu
Client.mapObject.add(new_mo);
break;
case Message.REMOVE_OBJECT:
for (MapObject mapObject : Client.mapObject) {
if (mapObject.getId() == (int) msg.getMsg()) {
// odebere ze seznamu
Client.mapObject.remove(mapObject);
// update map view
MapView.updateMapView(mapObject.getId());
break;
} }
}
break;
case Message.UPDATE_OBJECT: private static void handleAddObject(Message msg) {
MapObject mo = (MapObject) msg.getMsg(); MapObject mo = (MapObject) msg.getMsg();
for (int i = 0; i < Client.mapObject.size(); i++) {
if (Client.mapObject.get(i).getId() == mo.getId()) {
Client.mapObject.set(i, mo);
break;
}
}
break;
case Message.MAP_REMOVE:
for (Map map : Client.maps) { for (Map map : Client.maps) {
if (map.getId() == (int) msg.getMsg()) { if (map.getId() == mo.getMap()) {
// odebere ze seznamu map.getObjects().add(mo);
Client.maps.remove(map); UIUpdater.updateMapView();
// aktualizace seznamu map
MapTree.reload();
break; break;
} }
} }
break; }
case Message.USER_EDIT: private static void handleRemoveObject(Message msg) {
User ue = (User) msg.getMsg();
// zmenit v seznamu
for (User user : Client.users) {
if (user.getId() == ue.getId()) {
Client.users.remove(user);
break;
}
}
break;
case Message.DELETE_LOG:
int objId = (int) msg.getMsg(); int objId = (int) msg.getMsg();
// vymaze logy v listu for (Map map : Client.maps) {
for (Event event : Client.events) { for (MapObject object : map.getObjects()) {
if (event.getObject() == objId) { if (object.getId() == objId) {
Client.events.remove(event); map.getObjects().remove(object);
break;
} }
} }
break; }
// aktualizace UI
UIUpdater.updateMapTree();
UIUpdater.updateTray();
}
case Message.SERVER_CONFIG: private static void handleUpdateObject(Message msg) {
MapObject mo = (MapObject) msg.getMsg();
for (Map map : Client.maps) {
for (int i = 0; i < map.getObjects().size(); i++) {
if (map.getObjects().get(i).getId() == mo.getId()) {
map.getObjects().set(i, mo);
UIUpdater.updateMapView();
break;
}
}
}
}
private static void handleMapRemove(Message msg) {
int mapId = (int) msg.getMsg();
Client.maps.removeIf(map -> map.getId() == mapId);
}
private static void handleUserEdit(Message msg) {
User ue = (User) msg.getMsg();
Client.users.removeIf(user -> user.getId() == ue.getId());
}
private static void handleDeleteLog(Message msg) {
int objId = (int) msg.getMsg();
Client.events.removeIf(event -> event.getObject() == objId);
}
private static void handleServerConfig(Message msg) {
Client.serverConfig = (ServerConfig) msg.getMsg(); Client.serverConfig = (ServerConfig) msg.getMsg();
break;
default:
LogFile.printErr("Neznamy typ zpravy");
}
} }
} }

View File

@ -10,6 +10,7 @@ import javax.sound.sampled.FloatControl;
import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException; import javax.sound.sampled.UnsupportedAudioFileException;
import jnet.lib.Status; import jnet.lib.Status;
import jnet.lib.object.Map;
import jnet.lib.object.MapObject; import jnet.lib.object.MapObject;
public class SoundManager { public class SoundManager {
@ -19,20 +20,19 @@ public class SoundManager {
public static void playOnline(){ public static void playOnline(){
int count = 0; int count = 0;
ListIterator<MapObject> iteratorMapObject = Client.mapObject.listIterator(); for (Map map : Client.maps) {
while (iteratorMapObject.hasNext()) { for (MapObject object : map.getObjects()) {
MapObject obj = iteratorMapObject.next(); if (object.getStatus() == Status.OFFLINE && count != 0) {
if (obj.getStatus() == Status.OFFLINE && count != 0) {
playNextOffline(); playNextOffline();
break; break;
} else if (obj.getStatus() == Status.OFFLINE) { } else if (object.getStatus() == Status.OFFLINE) {
System.err.println(obj.getName());
count++; count++;
playFirstOffline(); playFirstOffline();
break; break;
} }
} }
} }
}
public static void changeStatus(int state){ public static void changeStatus(int state){
if (Client.config.getBoolean("sound")) { if (Client.config.getBoolean("sound")) {

View File

@ -81,9 +81,9 @@ public class EventsPanel extends JPanel {
} }
private String[] getObjetInfo(int id) { private String[] getObjetInfo(int id) {
for (MapObject mapObject : Client.mapObject) {
if (mapObject.getId() == id) {
for (Map map : Client.maps) { for (Map map : Client.maps) {
for (MapObject mapObject : map.getObjects()) {
if (mapObject.getId() == id) {
if (map.getId() == mapObject.getMap()) { if (map.getId() == mapObject.getMap()) {
String[] data = {map.getName(), mapObject.getName()}; String[] data = {map.getName(), mapObject.getName()};
return data; return data;
@ -91,6 +91,7 @@ public class EventsPanel extends JPanel {
} }
} }
} }
return null; return null;
} }

View File

@ -1,10 +1,8 @@
package jnet.client.gui; package jnet.client.gui;
import jnet.client.Client;
import java.awt.Component; import java.awt.Component;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.File; import java.io.File;
import java.util.Iterator;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
import javax.swing.JLabel; import javax.swing.JLabel;
@ -14,7 +12,6 @@ import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeCellRenderer;
import jnet.lib.Status; import jnet.lib.Status;
import jnet.lib.object.Map; import jnet.lib.object.Map;
import jnet.lib.object.MapObject;
public class MapTreeCellRenderer extends DefaultTreeCellRenderer { public class MapTreeCellRenderer extends DefaultTreeCellRenderer {
@ -33,19 +30,22 @@ public class MapTreeCellRenderer extends DefaultTreeCellRenderer {
if (o instanceof Map) { if (o instanceof Map) {
try { try {
Map m = (Map) o; Map m = (Map) o;
switch (getMapStatus(m.getId())) { String imagePath = "";
switch (m.getStatus()) {
case Status.OK: // online case Status.OK: // online
image = ImageIO.read(new File("img/flag_green.png")); imagePath = "/img/flag_green.png";
break; break;
case Status.WARNING: // warning case Status.WARNING: // warning
image = ImageIO.read(new File("img/flag_orange.png")); imagePath = "/img/flag_orange.png";
break; break;
case Status.OFFLINE: // offline case Status.OFFLINE: // offline
image = ImageIO.read(new File("img/flag_red.png")); imagePath = "/img/flag_red.png";
break; break;
default: // other default: // other
image = ImageIO.read(new File("img/flag_gray.png")); imagePath = "/img/flag_gray.png";
} }
image = ImageIO.read(getClass().getResourceAsStream(imagePath));
if (image != null) { if (image != null) {
label.setIcon(new ImageIcon(image)); label.setIcon(new ImageIcon(image));
} }
@ -60,26 +60,4 @@ public class MapTreeCellRenderer extends DefaultTreeCellRenderer {
return label; return label;
} }
private int getMapStatus(int mapId) {
int status = Status.NA;
Iterator<MapObject> iteratorMapObject = Client.mapObject.iterator();
while (iteratorMapObject.hasNext()) {
MapObject obj = iteratorMapObject.next();
if (obj.getMap() == mapId) {
switch (obj.getStatus()) {
case Status.OFFLINE:
return Status.OFFLINE;
case Status.WARNING:
status = Status.WARNING;
break;
default:
if (status != Status.WARNING) {
status = Status.OK;
}
}
}
}
return status;
}
} }

View File

@ -21,7 +21,11 @@ import jnet.lib.object.MapObject;
public class MapView extends JPanel { public class MapView extends JPanel {
public static List<PaintObject> paintObjects = new ArrayList<>(); public static List<PaintObject> paintObjects = new ArrayList<>();
;
private BufferedImage lockImage;
private BufferedImage unlockImage;
private static Map map; private static Map map;
public MapView(Map map) { public MapView(Map map) {
@ -30,6 +34,13 @@ public class MapView extends JPanel {
LogFile.printDebug("View map: " + map.getName()); LogFile.printDebug("View map: " + map.getName());
paintObjects.clear(); paintObjects.clear();
try {
lockImage = ImageIO.read(new File("img/lock.png"));
unlockImage = ImageIO.read(new File("img/unlock.png"));
} catch (IOException ex) {
LogFile.printErr("File not found: " + ex);
}
loadObject(map.getId()); loadObject(map.getId());
this.addMouseMotionListener(new MapViewAction(map)); this.addMouseMotionListener(new MapViewAction(map));
@ -53,18 +64,7 @@ public class MapView extends JPanel {
Graphics2D g2 = (Graphics2D) g.create(); Graphics2D g2 = (Graphics2D) g.create();
// vykresleni lock/unlock mapy // vykresleni lock/unlock mapy
try { g.drawImage(map.isLock() ? lockImage : unlockImage, 0, 0, this);
BufferedImage image;
if (map.isLock()) {
image = ImageIO.read(new File("img/lock.png"));
} else {
image = ImageIO.read(new File("img/unlock.png"));
}
g.drawImage(image, 0, 0, this);
} catch (IOException ex) {
LogFile.printErr("File not found: " + ex);
}
// vykresleni objektu // vykresleni objektu
for (PaintObject paintObject : paintObjects) { for (PaintObject paintObject : paintObjects) {
@ -82,8 +82,7 @@ public class MapView extends JPanel {
} }
} }
public static void updateMapView(int mapId) { public static void updateMapView() {
for (Map map : Client.maps) {
if (map.equals(MapView.map)) { if (map.equals(MapView.map)) {
// obnoveni objektu // obnoveni objektu
paintObjects.clear(); paintObjects.clear();
@ -91,14 +90,16 @@ public class MapView extends JPanel {
loadObject(map.getId()); loadObject(map.getId());
} }
} }
}
private static void loadObject(int mapId) { private static void loadObject(int mapId) {
for (MapObject obj : Client.mapObject) { for (Map map : Client.maps) {
for (MapObject obj : map.getObjects()) {
if (obj.getMap() == mapId) { if (obj.getMap() == mapId) {
paintObjects.add(new PaintObject(obj)); paintObjects.add(new PaintObject(obj));
} }
} }
} }
}
} }

View File

@ -158,15 +158,15 @@ public class MapViewAction implements MouseMotionListener, MouseListener {
private void doubleClickOnObject(PaintObject selectedObject) { private void doubleClickOnObject(PaintObject selectedObject) {
int id = selectedObject.getId(); int id = selectedObject.getId();
Iterator<MapObject> iteratorMapObject = Client.mapObject.iterator(); for (Map map : Client.maps) {
while (iteratorMapObject.hasNext()) { for (MapObject object : map.getObjects()) {
MapObject obj = iteratorMapObject.next(); if (object.getId() == id) {
if (obj.getId() == id) { new ObjectDialog(map.getId(), object, false);
new ObjectDialog(map.getId(), obj, false);
break; break;
} }
} }
} }
}
private void rigthClick(MouseEvent me) { private void rigthClick(MouseEvent me) {
JPopupMenu menu = new JPopupMenu(); JPopupMenu menu = new JPopupMenu();

View File

@ -22,7 +22,7 @@ class MenuPanel extends JPanel {
// tlacitko pripojit / odpojit // tlacitko pripojit / odpojit
try { try {
BufferedImage buttonIcon = ImageIO.read(new File("img/connect.png")); BufferedImage buttonIcon = ImageIO.read(getClass().getResourceAsStream("/img/connect.png"));
JButton bLogin = new JButton(new ImageIcon(buttonIcon)); JButton bLogin = new JButton(new ImageIcon(buttonIcon));
bLogin.setFocusPainted(false); bLogin.setFocusPainted(false);
bLogin.setContentAreaFilled(false); bLogin.setContentAreaFilled(false);
@ -44,7 +44,7 @@ class MenuPanel extends JPanel {
// tlacitko nastaveni // tlacitko nastaveni
try { try {
BufferedImage buttonIcon = ImageIO.read(new File("img/settings.png")); BufferedImage buttonIcon = ImageIO.read(getClass().getResourceAsStream("/img/settings.png"));
JButton bSettings = new JButton(new ImageIcon(buttonIcon)); JButton bSettings = new JButton(new ImageIcon(buttonIcon));
bSettings.setFocusPainted(false); bSettings.setFocusPainted(false);
bSettings.setContentAreaFilled(false); bSettings.setContentAreaFilled(false);
@ -62,7 +62,7 @@ class MenuPanel extends JPanel {
// tlacitko log // tlacitko log
try { try {
BufferedImage buttonIcon = ImageIO.read(new File("img/log.png")); BufferedImage buttonIcon = ImageIO.read(getClass().getResourceAsStream("/img/log.png"));
JButton bLog = new JButton(new ImageIcon(buttonIcon)); JButton bLog = new JButton(new ImageIcon(buttonIcon));
bLog.setFocusPainted(false); bLog.setFocusPainted(false);
bLog.setContentAreaFilled(false); bLog.setContentAreaFilled(false);
@ -80,7 +80,7 @@ class MenuPanel extends JPanel {
// tlacitko server settings // tlacitko server settings
try { try {
BufferedImage buttonIcon = ImageIO.read(new File("img/server_settings.png")); BufferedImage buttonIcon = ImageIO.read(getClass().getResourceAsStream("/img/server_settings.png"));
JButton bServerSettings = new JButton(new ImageIcon(buttonIcon)); JButton bServerSettings = new JButton(new ImageIcon(buttonIcon));
bServerSettings.setFocusPainted(false); bServerSettings.setFocusPainted(false);
bServerSettings.setContentAreaFilled(false); bServerSettings.setContentAreaFilled(false);

View File

@ -36,7 +36,7 @@ public class StatusBar extends JPanel {
// tlacitko zobrazujici klienty // tlacitko zobrazujici klienty
try { try {
BufferedImage buttonIcon = ImageIO.read(new File("img/online_clients.png")); BufferedImage buttonIcon = ImageIO.read(getClass().getResourceAsStream("/img/online_clients.png"));
btnOnline = new JButton(new ImageIcon(buttonIcon)); btnOnline = new JButton(new ImageIcon(buttonIcon));
btnOnline.setFocusPainted(false); btnOnline.setFocusPainted(false);
btnOnline.setContentAreaFilled(false); btnOnline.setContentAreaFilled(false);

View File

@ -1,85 +1,69 @@
package jnet.client.gui; package jnet.client.gui;
import jnet.client.Client; import java.awt.*;
import java.awt.AWTException;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Iterator;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import jnet.client.Client;
import jnet.lib.LogFile; import jnet.lib.LogFile;
import jnet.lib.Status; import jnet.lib.Status;
import jnet.lib.object.MapObject; import jnet.lib.object.Map;
public class Tray { public class Tray {
private SystemTray tray;
private SystemTray tray = SystemTray.getSystemTray();
private static TrayIcon trayIcon; private static TrayIcon trayIcon;
private static PopupMenu menu = new PopupMenu(); private static PopupMenu menu = new PopupMenu();
public void createAndShowTray() { public void createAndShowTray() {
try { try {
// Ověření, zda je SystemTray podporován
//Check the SystemTray is supported
if (!SystemTray.isSupported()) { if (!SystemTray.isSupported()) {
LogFile.printErr("SystemTray is not supported"); LogFile.printErr("SystemTray is not supported");
return; return;
} }
// tray menu // Menu pro tray ikonu
MenuItem exitItem = new MenuItem("Ukončit"); MenuItem exitItem = new MenuItem("Ukončit");
exitItem.addActionListener(new ActionListener() { exitItem.addActionListener(e -> {
LogFile.printInfo("Exit application from tray icon");
@Override
public void actionPerformed(ActionEvent e) {
LogFile.printInfo("Exit appliaction from tray icon");
System.exit(0); System.exit(0);
}
}); });
menu.add(exitItem); menu.add(exitItem);
trayIcon = new TrayIcon(ImageIO.read(new File("img/flag_gray.png")), Client.APP_NAME, menu); // Načtení výchozí ikony ze zdrojů
trayIcon.addActionListener(new ActionListener() { trayIcon = new TrayIcon(loadImage("/img/flag_gray.png"), Client.APP_NAME, menu);
@Override trayIcon.setImageAutoSize(true);
public void actionPerformed( ActionEvent e ) { trayIcon.addActionListener(e -> {
//Double click - obnovit/minimalizovat // Dvojklik - obnovit/minimalizovat okno
if (Client.okno.isVisible()) { Client.okno.setVisible(!Client.okno.isVisible());
Client.okno.setVisible(false); });
} else {
Client.okno.setVisible(true);
}
}}
);
tray = SystemTray.getSystemTray(); tray = SystemTray.getSystemTray();
tray.add(trayIcon); tray.add(trayIcon);
} catch (IOException ex) { } catch (IOException | AWTException ex) {
LogFile.printErr("TrayIcon error: " + ex.getMessage());
} catch (AWTException ex) {
LogFile.printErr("TrayIcon error: " + ex.getMessage()); LogFile.printErr("TrayIcon error: " + ex.getMessage());
} }
} }
private static BufferedImage loadImage(String path) throws IOException {
try (var input = Tray.class.getResourceAsStream(path)) {
if (input == null) {
throw new IOException("Soubor nenalezen: " + path);
}
return ImageIO.read(input);
}
}
public static void setIcon(String icon) { public static void setIcon(String icon) {
try { try {
BufferedImage image = ImageIO.read(new File("img/"+icon)); trayIcon.setImage(loadImage("/img/" + icon));
trayIcon.setImage(image);
} catch (IOException ex) { } catch (IOException ex) {
LogFile.printErr("TrayIcon error: " + ex.getMessage()); LogFile.printErr("TrayIcon error: " + ex.getMessage());
} }
} }
public static void setStatusOffline() { public static void setStatusOffline() {
setIcon("flag_red.png"); setIcon("flag_red.png");
} }
@ -97,17 +81,16 @@ public class Tray {
} }
public static void refresh() { public static void refresh() {
Iterator<MapObject> iteratorMapObject = Client.mapObject.iterator(); setStatusOnline(); // Výchozí stav
while (iteratorMapObject.hasNext()) {
MapObject obj = iteratorMapObject.next(); for (Map map : Client.maps) {
switch (obj.getStatus()) { int status = map.getStatus();
case Status.OFFLINE: if (status == Status.OFFLINE) {
setStatusOffline(); setStatusOffline();
case Status.WARNING: return;
}
if (status == Status.WARNING) {
setStatusWarning(); setStatusWarning();
break;
default:
setStatusOnline();
} }
} }
} }

View File

@ -0,0 +1,33 @@
package jnet.client.gui;
import javax.swing.SwingUtilities;
public class UIUpdater {
public static void updateMapUI() {
SwingUtilities.invokeLater(() -> {
MapTree.reload();
Tray.refresh();
});
}
public static void updateMapTree() {
SwingUtilities.invokeLater(() -> {
MapTree.reload();
});
}
public static void updateTray() {
SwingUtilities.invokeLater(() -> {
Tray.refresh();
});
}
public static void updateMapView() {
SwingUtilities.invokeLater(() -> {
MapView.updateMapView();
});
}
}

View File

@ -40,7 +40,6 @@ public class Window extends JFrame {
} catch (IOException ex) { } catch (IOException ex) {
LogFile.printErr("APP icon exception"); LogFile.printErr("APP icon exception");
} }
this.addWindowListener(new WindowAdapter() { this.addWindowListener(new WindowAdapter() {
@Override @Override