diff --git a/src/zutil/log/netlog/NetLoggerClient.fxml b/src/zutil/log/netlog/NetLoggerClient.fxml
new file mode 100644
index 0000000..db10222
--- /dev/null
+++ b/src/zutil/log/netlog/NetLoggerClient.fxml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/zutil/log/netlog/NetLoggerClient.java b/src/zutil/log/netlog/NetLoggerClient.java
new file mode 100644
index 0000000..4aac0b2
--- /dev/null
+++ b/src/zutil/log/netlog/NetLoggerClient.java
@@ -0,0 +1,52 @@
+package zutil.log.netlog;
+
+import javafx.application.Application;
+import javafx.event.ActionEvent;
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.stage.Stage;
+import javafx.scene.Scene;
+import javafx.scene.Parent;
+import javafx.scene.control.TabPane;
+
+public class NetLoggerClient extends Application{
+ public static final String VERSION = "0.1";
+
+ // UI elements
+ @FXML
+ private TabPane tabPane;
+
+
+ public static void main(String[] args) {
+ Application.launch(NetLoggerClient.class, args);
+ }
+
+ @Override
+ public void start(Stage stage) throws Exception {
+ Parent root = FXMLLoader.load(getClass().getResource("NetLoggerClient.fxml"));
+
+ stage.setTitle("NetLoggerClient ("+VERSION+")");
+ stage.setScene(new Scene(root));
+ stage.show();
+ }
+
+ // Menu Actioins
+ @FXML
+ protected void handleConnectAction(ActionEvent event) {
+ try{
+ tabPane.getTabs().add(new NetLoggerClientInstance("koc.se", 8080));
+ }catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ @FXML
+ protected void handleExitAction(ActionEvent event) {
+ System.exit(0);
+ }
+
+ @FXML
+ protected void handleAboutAction(ActionEvent event) {
+
+ }
+}
\ No newline at end of file
diff --git a/src/zutil/log/netlog/NetLoggerClientInstance.fxml b/src/zutil/log/netlog/NetLoggerClientInstance.fxml
new file mode 100644
index 0000000..b3782fa
--- /dev/null
+++ b/src/zutil/log/netlog/NetLoggerClientInstance.fxml
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/zutil/log/netlog/NetLoggerClientInstance.java b/src/zutil/log/netlog/NetLoggerClientInstance.java
new file mode 100644
index 0000000..b4477f3
--- /dev/null
+++ b/src/zutil/log/netlog/NetLoggerClientInstance.java
@@ -0,0 +1,99 @@
+package zutil.log.netlog;
+
+import javafx.event.ActionEvent;
+import javafx.event.Event;
+import javafx.event.EventHandler;
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.control.ProgressBar;
+import javafx.scene.control.ToggleButton;
+import javafx.scene.control.TableView;
+import javafx.scene.control.Label;
+import javafx.scene.control.Tab;
+import javafx.scene.Parent;
+import javafx.scene.layout.AnchorPane;
+import java.io.IOException;
+
+public class NetLoggerClientInstance extends Tab{
+ private enum Status{RUNNING, PAUSED, DISCONNECTED}
+
+ // Logic variables
+ private Status status;
+
+ // UI elements
+ @FXML
+ private ToggleButton statusBt;
+
+ @FXML
+ private TableView logTb;
+ @FXML
+ private TableView exceptionTb;
+
+ @FXML
+ private Label logCountLb;
+ @FXML
+ private ProgressBar progressBar;
+
+ public NetLoggerClientInstance(){}
+
+ public NetLoggerClientInstance(String host, int port) throws IOException{
+ this.setText( host+":"+port );
+
+ Parent tabRoot = FXMLLoader.load(getClass().getResource("NetLoggerClientInstance.fxml"));
+ this.setContent(tabRoot);
+ AnchorPane.setRightAnchor(tabRoot, 0.0);
+ this.setOnClosed(new EventHandler() {
+ public void handle(Event e) {
+ handleDisconnectAction(e);
+ }
+ });
+ updateStatus();
+ }
+
+ @FXML
+ protected void handlePauseAction(ActionEvent event) {
+ System.out.println("Pause changed");
+ if(status == Status.RUNNING){
+ status = Status.PAUSED;
+ }
+ else if(status == Status.PAUSED){
+ status = Status.RUNNING;
+ }
+ updateStatus();
+ }
+
+ @FXML
+ protected void handleDisconnectAction(Event event) {
+ System.out.println("Disconnected changed");
+ status = Status.DISCONNECTED;
+ updateStatus();
+ }
+
+ @FXML
+ protected void handleLevelChanged(ActionEvent event) {
+ System.out.println("Level changed");
+ }
+
+ @FXML
+ protected void handleIntervalChanged(ActionEvent event) {
+ System.out.println("Interval changed");
+ }
+
+ private void updateStatus(){
+ if(progressBar == null || statusBt == null)
+ return;
+
+ if(status == Status.RUNNING){
+ progressBar.setProgress(1);
+ statusBt.setText("Pause");
+ }
+ else if(status == Status.PAUSED){
+ progressBar.setProgress(-1);
+ statusBt.setText("Unpause");
+ }
+ else if(status == Status.DISCONNECTED){
+ progressBar.setProgress(0);
+ statusBt.disableProperty();
+ }
+ }
+}
\ No newline at end of file