diff --git a/jna-4.5.1.jar b/jna-4.5.1.jar deleted file mode 100644 index 68216af..0000000 Binary files a/jna-4.5.1.jar and /dev/null differ diff --git a/jna-platform-4.5.1.jar b/jna-platform-4.5.1.jar deleted file mode 100644 index 5aeb3e4..0000000 Binary files a/jna-platform-4.5.1.jar and /dev/null differ diff --git a/src/main/extensions/Extension.java b/src/main/extensions/Extension.java index 4edc439..ee236e4 100644 --- a/src/main/extensions/Extension.java +++ b/src/main/extensions/Extension.java @@ -109,7 +109,7 @@ public abstract class Extension { // nothing to be done yet } else if (packet.headerId() == Extensions.OUTGOING_MESSAGES_IDS.ONDOUBLECLICK) { - onDoubleClick(); + onClick(); } else if (packet.headerId() == Extensions.OUTGOING_MESSAGES_IDS.PACKETINTERCEPT) { String stringifiedMessage = packet.readLongString(); @@ -258,7 +258,7 @@ public abstract class Extension { /** * The application got doubleclicked from the G-Earth interface. Doing something here is optional */ - protected void onDoubleClick(){} + protected void onClick(){} /** * A connection with Habbo has been started diff --git a/src/main/extensions/examples/AdminOnConnect.java b/src/main/extensions/examples/AdminOnConnect.java index 046a0f7..2508549 100644 --- a/src/main/extensions/examples/AdminOnConnect.java +++ b/src/main/extensions/examples/AdminOnConnect.java @@ -38,7 +38,11 @@ public class AdminOnConnect extends Extension { protected void onStartConnection() { done = false; + } + @Override + protected void onClick() { + System.out.println("clicked"); } protected String getTitle() { diff --git a/src/main/extensions/examples/SpeechColorizer.java b/src/main/extensions/examples/SpeechColorizer.java index 4458286..5ff340f 100644 --- a/src/main/extensions/examples/SpeechColorizer.java +++ b/src/main/extensions/examples/SpeechColorizer.java @@ -25,13 +25,14 @@ public class SpeechColorizer extends Extension { super(args); } - private static final int SPEECH_ID = 1926; + private static final int SPEECH_ID = 3373; private static final String[] COLORS = {"red", "blue", "cyan", "green", "purple"}; private static final Random r = new Random(); @Override protected void init() { intercept(HMessage.Side.TOSERVER, SPEECH_ID, this::onSendMessage); + System.out.println("test"); } private void onSendMessage(HMessage message) { diff --git a/src/main/protocol/memory/habboclient/windows/WindowsHabboClient.java b/src/main/protocol/memory/habboclient/windows/WindowsHabboClient.java index b7f59a2..29e5a15 100644 --- a/src/main/protocol/memory/habboclient/windows/WindowsHabboClient.java +++ b/src/main/protocol/memory/habboclient/windows/WindowsHabboClient.java @@ -1,13 +1,13 @@ package main.protocol.memory.habboclient.windows; -import com.sun.jna.Memory; -import com.sun.jna.Native; -import com.sun.jna.Pointer; -import com.sun.jna.platform.win32.Kernel32; -import com.sun.jna.platform.win32.User32; -import com.sun.jna.platform.win32.WinBase; -import com.sun.jna.platform.win32.WinNT; -import com.sun.jna.ptr.IntByReference; +//import com.sun.jna.Memory; +//import com.sun.jna.Native; +//import com.sun.jna.Pointer; +//import com.sun.jna.platform.win32.Kernel32; +//import com.sun.jna.platform.win32.User32; +//import com.sun.jna.platform.win32.WinBase; +//import com.sun.jna.platform.win32.WinNT; +//import com.sun.jna.ptr.IntByReference; import main.protocol.HConnection; import main.protocol.memory.habboclient.HabboClient; @@ -23,281 +23,289 @@ import java.util.*; /* - * all code in this file is here for no actual purpose atm + * not functional class */ public class WindowsHabboClient extends HabboClient { - - private static final boolean DEBUG = true; - private List possibleFlashTasks; - - static Kernel32 kernel32 = (Kernel32) Native.loadLibrary("kernel32",Kernel32.class); - static User32 user32 = (User32) Native.loadLibrary("user32", User32.class); - - public static int PROCESS_VM_READ= 0x0010; - public static int PROCESS_VM_WRITE = 0x0020; - public static int PROCESS_VM_OPERATION = 0x0008; - - public WindowsHabboClient(HConnection connection) { super(connection); } - static class WindowsTask { - public String name; - public int PID; - public String session_name; - public int sessionNumber; - public int mem_usage; - - public WindowsTask(String name, int PID, String sessions_name, int sessionNumber, int mem_usage) { - this.name = name; - this.PID = PID; - this.session_name = sessions_name; - this.sessionNumber = sessionNumber; - this.mem_usage = mem_usage; - } - - @Override - public String toString() { - return "name: " + name + ", PID: " + PID + ", memory: " + mem_usage; - } - } - - private static List execute_command(String command) { - List result = new ArrayList<>(); - try { - Process process = Runtime.getRuntime().exec(command); - BufferedReader reader=new BufferedReader( new InputStreamReader(process.getInputStream())); - String s; - while ((s = reader.readLine()) != null){ - result.add(s); - } - } catch (IOException e) { - e.printStackTrace(); - } - return result; - } - private static List splitStringExtra(String s, String regex ) { - String[] split = s.split(regex); - - List realSplit = new ArrayList<>(); - for (String spli : split) { - if (!spli.equals("") && !spli.equals(" ")) { - realSplit.add(spli); - } - } - - return realSplit; - } - private static List parseTaskList(List lines) { - List windowsTasks = new ArrayList<>(); - - final int ARG_COUNT = 5; - boolean listHasStarted = false; - int[] paramLengths = new int[ARG_COUNT]; - for (String line : lines) { - - if (!listHasStarted && line.startsWith("=")) { - List splitted = splitStringExtra(line, " "); - if (splitted.size() == ARG_COUNT) { - listHasStarted = true; - for (int i = 0; i < ARG_COUNT; i++) { - paramLengths[i] = splitted.get(i).length(); - } - } - } - else if (listHasStarted && splitStringExtra(line, " ").size() >= 5) { - int v = 0; - String[] args = new String[ARG_COUNT]; - for (int i = 0; i < ARG_COUNT; i++) { - int endindex = v + paramLengths[i]; - args[i] = trim(line.substring(v, endindex)); - v = endindex + 1; - } - - WindowsTask task = new WindowsTask( - args[0], - Integer.parseInt(args[1]), - args[2], - Integer.parseInt(args[3]), - obtainMemorySizeFromCMDString(args[4]) - ); - - windowsTasks.add(task); - } - - } - - return windowsTasks; - } - private static String trim(String s) { - int start = 0; - for (int i = 0; i < s.length(); i++) { - if (s.charAt(i) == ' ') start++; - else break; - } - - int end = s.length(); - for (int i = s.length() - 1; i >= 0; i--) { - if (s.charAt(i) == ' ') end--; - else break; - } - - return s.substring(start, end); - } - private static int obtainMemorySizeFromCMDString(String s) { - s = s.replaceAll("[^0-9A-Z]","") - .replace("K","000") - .replace("M", "000000") - .replace("G", "000000000"); - return Integer.parseInt(s); - } - - private void obtain_PIDs() { - int headPID = -1; - - - String command1 = "cmd /C netstat -a -o -n | findstr "+hConnection.getClientHostAndPort()+" | findstr ESTABLISHED"; - List connections = execute_command(command1); - for (String s : connections) { - List realSplit = splitStringExtra(s, " "); - - if (realSplit.size() > 1 && realSplit.get(1).equals(hConnection.getClientHostAndPort())) { - headPID = Integer.parseInt(realSplit.get(4)); - } - } - - - - String command2 = "cmd /C tasklist"; - List tasks = execute_command(command2); - List taskList = parseTaskList(tasks); - - WindowsTask matchWithPID = null; - int i = 0; - while (matchWithPID == null && i < taskList.size()) { - WindowsTask task = taskList.get(i); - if (task.PID == headPID) { - matchWithPID = task; - } - i++; - } - - possibleFlashTasks = new ArrayList<>(); - if (matchWithPID != null) { - for (WindowsTask task : taskList) { - if (task.name.equals(matchWithPID.name)) { - possibleFlashTasks.add(task); - } - } - } - - - - } - @Override public List getRC4possibilities() { - obtain_PIDs(); - - List possibilities = new ArrayList<>(); - - int[] count = {0}; - for (int i = 0; i < possibleFlashTasks.size(); i++) { - WindowsTask task = possibleFlashTasks.get(i); - if (DEBUG) System.out.println("Potential task " + task); - - new Thread(() -> { - List sublist = getRC4possibilities(task.PID, task.mem_usage); - - synchronized (count) { - possibilities.addAll(sublist); - count[0] ++; - } - - }).start(); - } - - while (count[0] != possibleFlashTasks.size() + 1) { // the +1 is temporary, to keep this function blocking untill it's functional - try { - Thread.sleep(1); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - return possibilities; + return null; } - - public List getRC4possibilities(int processID, int processMemorySize) { - List result = new ArrayList<>(); - -// user32.GetWindowThreadProcessId() - WinNT.HANDLE process = kernel32.OpenProcess(PROCESS_VM_READ|PROCESS_VM_OPERATION, true, processID); - - IntByReference test = new IntByReference(0); - Memory output = new Memory(100000); - System.out.println(kernel32.ReadProcessMemory(process, new Pointer(0), output, 100000, test)); - System.out.println(test.getValue()); - - int[] counter = new int[256]; - int p = 0; - while (p < output.size()) { - counter[(output.getByte(p) + 256) % 256] ++; - p += 4; - } - -// for (int i = 0; i < counter.length; i++) { -// System.out.println("counter " + i + " = " + counter[i]); +// +// private static final boolean DEBUG = true; +// private List possibleFlashTasks; +// +// static Kernel32 kernel32 = (Kernel32) Native.loadLibrary("kernel32",Kernel32.class); +// static User32 user32 = (User32) Native.loadLibrary("user32", User32.class); +// +// public static int PROCESS_VM_READ= 0x0010; +// public static int PROCESS_VM_WRITE = 0x0020; +// public static int PROCESS_VM_OPERATION = 0x0008; +// +// +// public WindowsHabboClient(HConnection connection) { +// super(connection); +// } +// +// static class WindowsTask { +// public String name; +// public int PID; +// public String session_name; +// public int sessionNumber; +// public int mem_usage; +// +// public WindowsTask(String name, int PID, String sessions_name, int sessionNumber, int mem_usage) { +// this.name = name; +// this.PID = PID; +// this.session_name = sessions_name; +// this.sessionNumber = sessionNumber; +// this.mem_usage = mem_usage; // } - +// +// @Override +// public String toString() { +// return "name: " + name + ", PID: " + PID + ", memory: " + mem_usage; +// } +// } +// +// private static List execute_command(String command) { +// List result = new ArrayList<>(); +// try { +// Process process = Runtime.getRuntime().exec(command); +// BufferedReader reader=new BufferedReader( new InputStreamReader(process.getInputStream())); +// String s; +// while ((s = reader.readLine()) != null){ +// result.add(s); +// } +// } catch (IOException e) { +// e.printStackTrace(); +// } +// return result; +// } +// private static List splitStringExtra(String s, String regex ) { +// String[] split = s.split(regex); +// +// List realSplit = new ArrayList<>(); +// for (String spli : split) { +// if (!spli.equals("") && !spli.equals(" ")) { +// realSplit.add(spli); +// } +// } +// +// return realSplit; +// } +// private static List parseTaskList(List lines) { +// List windowsTasks = new ArrayList<>(); +// +// final int ARG_COUNT = 5; +// boolean listHasStarted = false; +// int[] paramLengths = new int[ARG_COUNT]; +// for (String line : lines) { +// +// if (!listHasStarted && line.startsWith("=")) { +// List splitted = splitStringExtra(line, " "); +// if (splitted.size() == ARG_COUNT) { +// listHasStarted = true; +// for (int i = 0; i < ARG_COUNT; i++) { +// paramLengths[i] = splitted.get(i).length(); +// } +// } +// } +// else if (listHasStarted && splitStringExtra(line, " ").size() >= 5) { +// int v = 0; +// String[] args = new String[ARG_COUNT]; +// for (int i = 0; i < ARG_COUNT; i++) { +// int endindex = v + paramLengths[i]; +// args[i] = trim(line.substring(v, endindex)); +// v = endindex + 1; +// } +// +// WindowsTask task = new WindowsTask( +// args[0], +// Integer.parseInt(args[1]), +// args[2], +// Integer.parseInt(args[3]), +// obtainMemorySizeFromCMDString(args[4]) +// ); +// +// windowsTasks.add(task); +// } +// +// } +// +// return windowsTasks; +// } +// private static String trim(String s) { +// int start = 0; +// for (int i = 0; i < s.length(); i++) { +// if (s.charAt(i) == ' ') start++; +// else break; +// } +// +// int end = s.length(); +// for (int i = s.length() - 1; i >= 0; i--) { +// if (s.charAt(i) == ' ') end--; +// else break; +// } +// +// return s.substring(start, end); +// } +// private static int obtainMemorySizeFromCMDString(String s) { +// s = s.replaceAll("[^0-9A-Z]","") +// .replace("K","000") +// .replace("M", "000000") +// .replace("G", "000000000"); +// return Integer.parseInt(s); +// } +// +// private void obtain_PIDs() { +// int headPID = -1; +// +// +// String command1 = "cmd /C netstat -a -o -n | findstr "+hConnection.getClientHostAndPort()+" | findstr ESTABLISHED"; +// List connections = execute_command(command1); +// for (String s : connections) { +// List realSplit = splitStringExtra(s, " "); +// +// if (realSplit.size() > 1 && realSplit.get(1).equals(hConnection.getClientHostAndPort())) { +// headPID = Integer.parseInt(realSplit.get(4)); +// } +// } +// +// +// +// String command2 = "cmd /C tasklist"; +// List tasks = execute_command(command2); +// List taskList = parseTaskList(tasks); +// +// WindowsTask matchWithPID = null; +// int i = 0; +// while (matchWithPID == null && i < taskList.size()) { +// WindowsTask task = taskList.get(i); +// if (task.PID == headPID) { +// matchWithPID = task; +// } +// i++; +// } +// +// possibleFlashTasks = new ArrayList<>(); +// if (matchWithPID != null) { +// for (WindowsTask task : taskList) { +// if (task.name.equals(matchWithPID.name)) { +// possibleFlashTasks.add(task); +// } +// } +// } +// +// +// +// } +// +// @Override +// public List getRC4possibilities() { +// obtain_PIDs(); +// +// List possibilities = new ArrayList<>(); +// +// int[] count = {0}; +// for (int i = 0; i < possibleFlashTasks.size(); i++) { +// WindowsTask task = possibleFlashTasks.get(i); +// if (DEBUG) System.out.println("Potential task " + task); +// +// new Thread(() -> { +// List sublist = getRC4possibilities(task.PID, task.mem_usage); +// +// synchronized (count) { +// possibilities.addAll(sublist); +// count[0] ++; +// } +// +// }).start(); +// } +// +// while (count[0] != possibleFlashTasks.size() + 1) { // the +1 is temporary, to keep this function blocking untill it's functional +// try { +// Thread.sleep(1); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// } +// +// return possibilities; +// } +// +// public List getRC4possibilities(int processID, int processMemorySize) { +// List result = new ArrayList<>(); +// +//// user32.GetWindowThreadProcessId() // WinNT.HANDLE process = kernel32.OpenProcess(PROCESS_VM_READ|PROCESS_VM_OPERATION, true, processID); -// Memory out = new Memory(processMemorySize); -// kernel32.ReadProcessMemory(process, new Pointer(0), out, processMemorySize, new IntByReference()); +// +// IntByReference test = new IntByReference(0); +// Memory output = new Memory(100000); +// System.out.println(kernel32.ReadProcessMemory(process, new Pointer(0), output, 100000, test)); +// System.out.println(test.getValue()); // // int[] counter = new int[256]; // int p = 0; -// while (p < out.size()) { -// counter[((out.getByte(p)) + 256) % 256] ++; +// while (p < output.size()) { +// counter[(output.getByte(p) + 256) % 256] ++; // p += 4; // } // -// HashMap> mapper = new HashMap<>(); -// HashSet allvalues = new HashSet<>(); -// for (int i = 0; i < counter.length; i++) { -// if (!mapper.containsKey(counter[i])) { -// mapper.put(counter[i], new ArrayList<>()); -// } -// mapper.get(counter[i]).add(i); -// allvalues.add(counter[i]); -// } -//// System.out.println(allvalues.size()); -// ArrayList allvalues2 = new ArrayList<>(allvalues); -// allvalues2.sort(Integer::compareTo); +//// for (int i = 0; i < counter.length; i++) { +//// System.out.println("counter " + i + " = " + counter[i]); +//// } // -// StringBuilder sttt = new StringBuilder(); -// sttt.append("process ").append(processID).append(", "); -// for (int i = 1; i < Math.min(4, allvalues2.size()+1); i++) { -// int occ = allvalues2.get(allvalues2.size() - i); -// sttt .append(i) -// .append(": ") -// .append(mapper.get(occ).get(0)) -// .append(" with ") -// .append(occ) -// .append(" occurences, "); -// } -// System.out.println(sttt); - - return result; - } - - public static void main(String[] args) { - String command2 = "cmd /C tasklist"; - List tasks = execute_command(command2); - List taskList = parseTaskList(tasks); - - System.out.println("t"); - } +//// WinNT.HANDLE process = kernel32.OpenProcess(PROCESS_VM_READ|PROCESS_VM_OPERATION, true, processID); +//// Memory out = new Memory(processMemorySize); +//// kernel32.ReadProcessMemory(process, new Pointer(0), out, processMemorySize, new IntByReference()); +//// +//// int[] counter = new int[256]; +//// int p = 0; +//// while (p < out.size()) { +//// counter[((out.getByte(p)) + 256) % 256] ++; +//// p += 4; +//// } +//// +//// HashMap> mapper = new HashMap<>(); +//// HashSet allvalues = new HashSet<>(); +//// for (int i = 0; i < counter.length; i++) { +//// if (!mapper.containsKey(counter[i])) { +//// mapper.put(counter[i], new ArrayList<>()); +//// } +//// mapper.get(counter[i]).add(i); +//// allvalues.add(counter[i]); +//// } +////// System.out.println(allvalues.size()); +//// ArrayList allvalues2 = new ArrayList<>(allvalues); +//// allvalues2.sort(Integer::compareTo); +//// +//// StringBuilder sttt = new StringBuilder(); +//// sttt.append("process ").append(processID).append(", "); +//// for (int i = 1; i < Math.min(4, allvalues2.size()+1); i++) { +//// int occ = allvalues2.get(allvalues2.size() - i); +//// sttt .append(i) +//// .append(": ") +//// .append(mapper.get(occ).get(0)) +//// .append(" with ") +//// .append(occ) +//// .append(" occurences, "); +//// } +//// System.out.println(sttt); +// +// return result; +// } +// +// public static void main(String[] args) { +// String command2 = "cmd /C tasklist"; +// List tasks = execute_command(command2); +// List taskList = parseTaskList(tasks); +// +// System.out.println("t"); +// } } diff --git a/src/main/ui/scheduler/buttons/BoxButton.java b/src/main/ui/buttons/BoxButton.java similarity index 97% rename from src/main/ui/scheduler/buttons/BoxButton.java rename to src/main/ui/buttons/BoxButton.java index 18ea782..4ae2ad3 100644 --- a/src/main/ui/scheduler/buttons/BoxButton.java +++ b/src/main/ui/buttons/BoxButton.java @@ -1,4 +1,4 @@ -package main.ui.scheduler.buttons; +package main.ui.buttons; import javafx.event.EventHandler; import javafx.scene.Cursor; diff --git a/src/main/ui/scheduler/buttons/ButtonDelete.png b/src/main/ui/buttons/ButtonDelete.png similarity index 100% rename from src/main/ui/scheduler/buttons/ButtonDelete.png rename to src/main/ui/buttons/ButtonDelete.png diff --git a/src/main/ui/scheduler/buttons/ButtonDeleteHover.png b/src/main/ui/buttons/ButtonDeleteHover.png similarity index 100% rename from src/main/ui/scheduler/buttons/ButtonDeleteHover.png rename to src/main/ui/buttons/ButtonDeleteHover.png diff --git a/src/main/ui/scheduler/buttons/ButtonEdit.png b/src/main/ui/buttons/ButtonEdit.png similarity index 100% rename from src/main/ui/scheduler/buttons/ButtonEdit.png rename to src/main/ui/buttons/ButtonEdit.png diff --git a/src/main/ui/scheduler/buttons/ButtonEditHover.png b/src/main/ui/buttons/ButtonEditHover.png similarity index 100% rename from src/main/ui/scheduler/buttons/ButtonEditHover.png rename to src/main/ui/buttons/ButtonEditHover.png diff --git a/src/main/ui/scheduler/buttons/ButtonPause.png b/src/main/ui/buttons/ButtonPause.png similarity index 100% rename from src/main/ui/scheduler/buttons/ButtonPause.png rename to src/main/ui/buttons/ButtonPause.png diff --git a/src/main/ui/scheduler/buttons/ButtonPauseHover.png b/src/main/ui/buttons/ButtonPauseHover.png similarity index 100% rename from src/main/ui/scheduler/buttons/ButtonPauseHover.png rename to src/main/ui/buttons/ButtonPauseHover.png diff --git a/src/main/ui/scheduler/buttons/ButtonResume.png b/src/main/ui/buttons/ButtonResume.png similarity index 100% rename from src/main/ui/scheduler/buttons/ButtonResume.png rename to src/main/ui/buttons/ButtonResume.png diff --git a/src/main/ui/scheduler/buttons/ButtonResumeHover.png b/src/main/ui/buttons/ButtonResumeHover.png similarity index 100% rename from src/main/ui/scheduler/buttons/ButtonResumeHover.png rename to src/main/ui/buttons/ButtonResumeHover.png diff --git a/src/main/ui/scheduler/buttons/DeleteButton.java b/src/main/ui/buttons/DeleteButton.java similarity index 80% rename from src/main/ui/scheduler/buttons/DeleteButton.java rename to src/main/ui/buttons/DeleteButton.java index 8f221e0..47ac9f9 100644 --- a/src/main/ui/scheduler/buttons/DeleteButton.java +++ b/src/main/ui/buttons/DeleteButton.java @@ -1,4 +1,4 @@ -package main.ui.scheduler.buttons; +package main.ui.buttons; public class DeleteButton extends BoxButton { diff --git a/src/main/ui/scheduler/buttons/EditButton.java b/src/main/ui/buttons/EditButton.java similarity index 79% rename from src/main/ui/scheduler/buttons/EditButton.java rename to src/main/ui/buttons/EditButton.java index c0739a0..2f07b12 100644 --- a/src/main/ui/scheduler/buttons/EditButton.java +++ b/src/main/ui/buttons/EditButton.java @@ -1,4 +1,4 @@ -package main.ui.scheduler.buttons; +package main.ui.buttons; public class EditButton extends BoxButton { diff --git a/src/main/ui/scheduler/buttons/PauseResumeButton.java b/src/main/ui/buttons/PauseResumeButton.java similarity index 98% rename from src/main/ui/scheduler/buttons/PauseResumeButton.java rename to src/main/ui/buttons/PauseResumeButton.java index baf9c4e..779a88e 100644 --- a/src/main/ui/scheduler/buttons/PauseResumeButton.java +++ b/src/main/ui/buttons/PauseResumeButton.java @@ -1,4 +1,4 @@ -package main.ui.scheduler.buttons; +package main.ui.buttons; import javafx.beans.InvalidationListener; import javafx.event.EventHandler; diff --git a/src/main/ui/buttons/SimpleClickButton.java b/src/main/ui/buttons/SimpleClickButton.java new file mode 100644 index 0000000..59585c4 --- /dev/null +++ b/src/main/ui/buttons/SimpleClickButton.java @@ -0,0 +1,11 @@ +package main.ui.buttons; + +/** + * Created by Jonas on 19/07/18. + */ +public class SimpleClickButton extends BoxButton{ + + public SimpleClickButton() { + super("ButtonResume.png", "ButtonResumeHover.png"); + } +} diff --git a/src/main/ui/extensions/ExtensionItemContainer.java b/src/main/ui/extensions/ExtensionItemContainer.java new file mode 100644 index 0000000..6dfd330 --- /dev/null +++ b/src/main/ui/extensions/ExtensionItemContainer.java @@ -0,0 +1,95 @@ +package main.ui.extensions; + +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.control.Label; +import javafx.scene.control.ScrollPane; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.*; +import javafx.scene.text.Font; +import main.ui.buttons.SimpleClickButton; +import main.ui.scheduler.ScheduleItem; +import main.ui.buttons.DeleteButton; +import main.ui.buttons.EditButton; +import main.ui.buttons.PauseResumeButton; + +/** + * Created by Jonas on 19/07/18. + */ +public class ExtensionItemContainer extends GridPane { + + public static final int[] columnWidths = {22, 34, 18, 13, 11}; + GEarthExtension item; + + Label titleLabel; + Label descriptionLabel; + Label authorLabel; + Label versionLabel; + + VBox parent; + + ExtensionItemContainer(GEarthExtension item, VBox parent, ScrollPane scrollPane) { + super(); + setGridLinesVisible(true); + VBox.setMargin(this, new Insets(2, -2, -2, -2)); + + setPrefWidth(scrollPane.getWidth()); + setPrefHeight(23); + scrollPane.widthProperty().addListener(observable -> setPrefWidth(scrollPane.getWidth())); + this.parent = parent; + this.item = item; + initialize(); + } + + private void initialize() { + RowConstraints rowConstraints = new RowConstraints(23); + getRowConstraints().addAll(rowConstraints); + + for (int i = 0; i < columnWidths.length; i++) { + ColumnConstraints columnConstraints = new ColumnConstraints(20); + columnConstraints.setPercentWidth(columnWidths[i]); + getColumnConstraints().add(columnConstraints); + } + + titleLabel = initNewLabelColumn(item.getTitle()); + descriptionLabel = initNewLabelColumn(item.getDescription()); + authorLabel = initNewLabelColumn(item.getAuthor()); + versionLabel = initNewLabelColumn(item.getVersion()); + + add(titleLabel, 0, 0); + add(descriptionLabel, 1, 0); + add(authorLabel, 2, 0); + add(versionLabel, 3, 0); + +// getChildren().addAll(indexLabel, packetLabel, delayLabel, destinationLabel); + + + + DeleteButton deleteButton = new DeleteButton(); + deleteButton.show(); + deleteButton.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> item.isRemoveClickTrigger()); + SimpleClickButton clickButton = new SimpleClickButton(); + clickButton.show(); + clickButton.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> item.isClickTrigger()); + + HBox buttonsBox = new HBox(clickButton, deleteButton); + buttonsBox.setSpacing(10); + buttonsBox.setAlignment(Pos.CENTER); + GridPane.setMargin(buttonsBox, new Insets(0, 5, 0, 5)); + add(buttonsBox, 4, 0); + + parent.getChildren().add(this); + + + GridPane this2 = this; + item.onDelete(observable -> parent.getChildren().remove(this2)); + } + + private Label initNewLabelColumn(String text) { + Label label = new Label(); + label.setFont(new Font(12)); + GridPane.setMargin(label, new Insets(0, 0, 0, 5)); + label.setText(text); + return label; + } +} diff --git a/src/main/ui/extensions/Extensions.fxml b/src/main/ui/extensions/Extensions.fxml index 310ec13..153d095 100644 --- a/src/main/ui/extensions/Extensions.fxml +++ b/src/main/ui/extensions/Extensions.fxml @@ -1,14 +1,92 @@ - + + + + + + + + - - + - + + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +