var debug = { overlay: null, output: null, action: null, process: null, initOverlay: function() { debug.overlay = loadFXML("dialog/overlay/debug/debug.fxml"); // Lookup output debug.output = debug.overlay.lookup("#output"); debug.output.setEditable(false); // Lookup copy button debug.copy = debug.overlay.lookup("#copy"); debug.copy.setOnAction(function(event) { var content = new javafx.scene.input.ClipboardContent(); content.putString(debug.output.getText()); // Set clipboard content javafx.scene.input.Clipboard.getSystemClipboard(). setContent(content); }); /// Lookup action button debug.action = debug.overlay.lookup("#action"); debug.action.setOnAction(function(event) { var process = debug.process; if(process !== null && process.isAlive()) { process.destroyForcibly(); debug.updateActionButton(true); return; } // Hide overlay overlay.hide(0, null); }); }, resetOverlay: function() { debug.output.clear(); debug.action.setText(""); debug.action.getStyleClass().remove("kill"); debug.action.getStyleClass().add("close"); }, append: function(text) { debug.output.appendText(text); }, updateActionButton: function(forceClose) { var process = debug.process; var alive = !forceClose && process !== null && process.isAlive(); // Decide what we update to var text = alive ? "Убить" : "Закрыть"; var addClass = alive ? "kill" : "close"; var removeClass = alive ? "close" : "kill"; // Update button debug.action.setText(text); debug.action.getStyleClass().remove(removeClass); debug.action.getStyleClass().add(addClass); } }; /* Export functions */ function debugProcess(process) { debug.process = process; debug.updateActionButton(false); // Create new task var task = newTask(function() { var buffer = IOHelper.newCharBuffer(); var reader = IOHelper.newReader(process.getInputStream(), java.nio.charset.Charset.defaultCharset()); for(var length = reader.read(buffer); length >= 0; length = reader.read(buffer)) { task.updateMessage(new java.lang.String(buffer, 0, length)); } // So we wait for exit code return process.waitFor(); }); task.messageProperty()["addListener(javafx.beans.value.ChangeListener)"]( function(o, ov, nv) debug.append(nv) // Anyone knows how to handle it better? ); // Set completion handlers task.setOnFailed(function(event) { debug.updateActionButton(true); debug.append(java.lang.System.lineSeparator() + task.getException()); }); task.setOnSucceeded(function(event) { debug.updateActionButton(false); debug.append(java.lang.System.lineSeparator() + "Exit code " + task.getValue()); }); // Gogogo startTask(task); }