Skip to content

Commit dfc32e6

Browse files
committed
Started with the debugger
1 parent cdb774b commit dfc32e6

File tree

9 files changed

+218
-16
lines changed

9 files changed

+218
-16
lines changed
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
package me.david.sploty4.debugger;
2+
3+
import javafx.scene.control.Button;
4+
import javafx.scene.control.CheckBox;
5+
import javafx.scene.control.TextArea;
6+
import javafx.scene.layout.BorderPane;
7+
import javafx.scene.layout.HBox;
8+
import lombok.AllArgsConstructor;
9+
import lombok.Getter;
10+
import me.david.sploty4.Sploty;
11+
import org.controlsfx.control.CheckComboBox;
12+
13+
import java.text.DateFormat;
14+
import java.text.SimpleDateFormat;
15+
import java.util.ArrayList;
16+
import java.util.List;
17+
import java.util.logging.Handler;
18+
import java.util.logging.Level;
19+
import java.util.logging.LogRecord;
20+
21+
public class Console extends DebugTab {
22+
23+
private CheckComboBox<Level> comboBox = new CheckComboBox<>();
24+
private HBox toolBox = new HBox();
25+
private BorderPane main = new BorderPane();
26+
private CheckBox javaScirpt = new CheckBox("JavaScript"), splotyLog = new CheckBox("Sploty Logging");
27+
28+
private TextArea textArea = new TextArea("(No Messages)");
29+
private List<MessageEntry> messages = new ArrayList<>();
30+
31+
public Console() {
32+
super("Console");
33+
comboBox.getItems().addAll(Level.INFO, Level.WARNING, Level.CONFIG);
34+
comboBox.getCheckModel().check(Level.INFO);
35+
comboBox.getCheckModel().check(Level.WARNING);
36+
comboBox.getCheckModel().check(Level.CONFIG);
37+
38+
javaScirpt.setOnAction(event -> generateMessages());
39+
splotyLog.setOnAction(event -> generateMessages());
40+
41+
42+
/*TableColumn messageCol = new TableColumn("Message");
43+
messageCol.setCellValueFactory(new PropertyValueFactory<>("message"));
44+
TableColumn extraCol = new TableColumn("Extra");
45+
extraCol.setCellValueFactory(new PropertyValueFactory<>("extra"));
46+
messageTable.getColumns().addAll(messageCol, extraCol);*/
47+
48+
Sploty.getLogger().getLogger().addHandler(new Handler() {
49+
@Override
50+
public void publish(LogRecord logRecord) {
51+
/*System.out.println("--------");
52+
for (StackTraceElement element : Thread.currentThread().getStackTrace()) {
53+
System.out.println(element.getFileName() + " at " + element.getLineNumber());
54+
}
55+
56+
System.out.println("--------");*/
57+
StackTraceElement element = Thread.currentThread().getStackTrace()[6];
58+
MessageEntry entry = new MessageEntry(logRecord.getMessage(), logRecord.getLevel(), MessageType.LOGGING, element.getFileName() + ":" + element.getLineNumber(), logRecord.getMillis());
59+
messages.add(entry);
60+
if (((entry.getType() == MessageType.LOGGING && splotyLog.isSelected()) || (entry.getType() == MessageType.JAVASCRIPT && javaScirpt.isSelected())) && comboBox.getItems().contains(entry.getLevel())) {
61+
textArea.appendText(format.format(entry.time) + "[" + entry.getType().name() + "] [" + entry.level.getName() + "] " + entry.getMessage() + " | " + entry.getExtra() + "\n");
62+
}
63+
}
64+
@Override public void flush() {}
65+
@Override public void close() throws SecurityException {}
66+
});
67+
68+
//TODO reload image
69+
Button reload = new Button("Reload");
70+
reload.setOnAction(event -> generateMessages());
71+
72+
textArea.setWrapText(false);
73+
textArea.setEditable(false);
74+
75+
toolBox.getChildren().addAll(comboBox, splotyLog, javaScirpt, reload);
76+
main.setTop(toolBox);
77+
main.setCenter(textArea);
78+
setContent(main);
79+
generateMessages();
80+
}
81+
82+
private DateFormat format = new SimpleDateFormat("HH:mm:ss");
83+
84+
private void generateMessages() {
85+
StringBuilder builder = new StringBuilder();
86+
for (MessageEntry entry : messages) {
87+
if (((entry.getType() == MessageType.LOGGING && splotyLog.isSelected()) || (entry.getType() == MessageType.JAVASCRIPT && javaScirpt.isSelected())) && comboBox.getItems().contains(entry.getLevel())) {
88+
builder.append(format.format(entry.time)).
89+
append("[").
90+
append(entry.getType().name()).
91+
append("] [").
92+
append(entry.level.getName()).
93+
append("] ").
94+
append(entry.getMessage()).
95+
append(" | ").
96+
append(entry.getExtra()).
97+
append("\n");
98+
}
99+
}
100+
textArea.setText(builder.toString());
101+
textArea.setVisible(true);
102+
textArea.requestFocus();
103+
textArea.requestLayout();
104+
}
105+
106+
@AllArgsConstructor
107+
public class MessageEntry {
108+
109+
@Getter private final String message;
110+
@Getter private final Level level;
111+
@Getter private final MessageType type;
112+
@Getter private final String extra;
113+
@Getter private final long time;
114+
115+
}
116+
117+
private enum MessageType {
118+
119+
LOGGING,
120+
JAVASCRIPT
121+
122+
}
123+
124+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package me.david.sploty4.debugger;
2+
3+
import javafx.scene.control.Tab;
4+
import lombok.Getter;
5+
6+
public class DebugTab extends Tab {
7+
8+
@Getter private String name;
9+
10+
public DebugTab(String name) {
11+
super(name);
12+
setClosable(false);
13+
this.name = name;
14+
}
15+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package me.david.sploty4.debugger;
2+
3+
import javafx.scene.control.TabPane;
4+
import javafx.scene.layout.Pane;
5+
import lombok.Getter;
6+
import lombok.Setter;
7+
import me.david.sploty4.Sploty;
8+
import me.david.sploty4.gui.tab.BrowserTab;
9+
10+
import java.util.ArrayList;
11+
import java.util.List;
12+
13+
public class Debugger extends Pane {
14+
15+
@Getter private final BrowserTab browserTab;
16+
@Getter @Setter private List<DebugTab> debugTabs = new ArrayList<>();
17+
@Getter TabPane tabs = new TabPane();
18+
19+
public Debugger(final BrowserTab browserTab) {
20+
this.browserTab = browserTab;
21+
setVisible(false);
22+
23+
tabs.setPrefSize(Double.MAX_VALUE, Double.MAX_VALUE);
24+
debugTabs.add(new Console());
25+
26+
debugTabs.forEach(debugTab -> tabs.getTabs().add(debugTab));
27+
28+
getChildren().add(tabs);
29+
}
30+
31+
public DebugTab getDebugTabByClass(Class<? extends DebugTab> clazz) {
32+
for (final DebugTab tab : debugTabs)
33+
if (tab.getClass().equals(clazz))
34+
return tab;
35+
36+
Sploty.getLogger().warn("Count not find Debugging Tab named: '" + clazz.getSimpleName() + "'");
37+
return null;
38+
}
39+
40+
public void toggle() {
41+
setVisible(!isVisible());
42+
if (isVisible()) {
43+
browserTab.getSplit().getItems().add(1, this);
44+
browserTab.getSplit().setDividerPosition(1, 0.8);
45+
} else browserTab.getSplit().getItems().remove(this);
46+
layout();
47+
requestLayout();
48+
}
49+
50+
}

src/main/java/me/david/sploty4/document/text/HtmlDocument.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void load(TabHandler tab, Connection connection) {
4242
//TODO: replace timer with a real profiler (multiple section etc)
4343
Timer timer = new Timer().start();
4444
parser.parse(content);
45-
System.out.println("Html parsing took: " + timer.getDelay() + "ms");
45+
Sploty.getLogger().info("Html parsing took: " + timer.getDelay() + "ms");
4646
html = parser.getBase();
4747

4848
//ignore infos??

src/main/java/me/david/sploty4/dom/html/DomHtmlParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ else for(DomReader<DomHtmlParser> reader : getActivReaders()) {
6666
}
6767

6868
public void setCurrentParent(Node currentParent) {
69-
Sploty.getLogger().debug("Set Parent: " + currentParent.getName());
69+
//Sploty.getLogger().debug("Set Parent: " + currentParent.getName());
7070
this.currentParent = currentParent;
7171
}
7272

src/main/java/me/david/sploty4/features/ProblemConclusion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ public void build() {
4848
messageCol.setCellValueFactory(new PropertyValueFactory<>("Message"));
4949
TableColumn actionCol = new TableColumn("Action");
5050
actionCol.setCellValueFactory(new PropertyValueFactory<>("DUMMY"));
51-
5251
actionCol.setCellFactory(new ProblemCellFactory());
52+
5353
table.getColumns().addAll(typeCol, messageCol, actionCol);
5454
table.setItems(FXCollections.observableList(errorReporter.getErrors()));
5555
box.setCenter(table);

src/main/java/me/david/sploty4/gui/menu/menus/ToolGroup.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,13 @@ public class ToolGroup extends MenuGroup {
1010

1111
public ToolGroup(Window window) {
1212
super(window, "Tool");
13-
add("View-Source", (event) -> {
14-
if(!window.getCurrentTab().getCurrentUrl().startsWith("view-source:"))
13+
add("View-Source", event -> {
14+
//todo else send notification
15+
if(!window.getCurrentTab().isViewSource())
1516
window.getCurrentTab().openNew("view-source:" + window.getCurrentTab().getCurrentUrl(), false);
1617
}, new KeyCodeCombination(KeyCode.U, KeyCombination.CONTROL_DOWN));
18+
19+
add("Debugger", event -> window.getCurrentTab().getDebugger().toggle(),
20+
new KeyCodeCombination(KeyCode.F12));
1721
}
1822
}

src/main/java/me/david/sploty4/gui/tab/BrowserTab.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,23 @@
11
package me.david.sploty4.gui.tab;
22

33
import javafx.application.Platform;
4-
import javafx.geometry.Point2D;
4+
import javafx.geometry.Orientation;
55
import javafx.geometry.Rectangle2D;
66
import javafx.scene.Node;
77
import javafx.scene.control.*;
8-
import javafx.scene.input.ClipboardContent;
9-
import javafx.scene.input.Dragboard;
10-
import javafx.scene.input.TransferMode;
11-
import javafx.scene.layout.BorderPane;
12-
import javafx.scene.layout.HBox;
8+
import javafx.scene.layout.*;
139
import javafx.stage.Stage;
10+
import lombok.Getter;
11+
import lombok.Setter;
1412
import me.david.sploty4.Sploty;
13+
import me.david.sploty4.debugger.Debugger;
1514
import me.david.sploty4.document.Document;
1615
import me.david.sploty4.document.other.ErrorDocument;
1716
import me.david.sploty4.document.other.ViewSourceDocument;
1817
import me.david.sploty4.features.DownloadManager;
1918
import me.david.sploty4.features.History;
20-
import me.david.sploty4.gui.Window;
2119
import me.david.sploty4.io.Connection;
2220
import me.david.sploty4.util.FXUtil;
23-
import me.david.sploty4.util.ListUtil;
2421

2522
import javax.net.ssl.HttpsURLConnection;
2623
import javax.net.ssl.SSLPeerUnverifiedException;
@@ -37,13 +34,17 @@ public class BrowserTab extends Tab implements TabHandler {
3734
private Label label;
3835
private Document document;
3936
private Connection connection;
37+
@Getter private boolean viewSource;
38+
4039
private BorderPane main, addressBar;
4140
private HBox toolBox = new HBox();
41+
@Getter private SplitPane split = new SplitPane();
4242
private TextField urlBar = new TextField();
4343
private Button download = new Button();
4444
private Button go = new Button();
4545
private HBox left = new HBox();
4646
private Button secure = new Button();
47+
4748
private Button undoBut = new Button();
4849
private Button redoBut = new Button();
4950
private List<String> undo = new ArrayList<String>(){
@@ -80,9 +81,12 @@ public String remove(int o) {
8081
};
8182
private ContextMenu redoMenu = new ContextMenu();
8283
private ContextMenu undoMenu = new ContextMenu();
84+
8385
private String currentUrl;
8486
private History.HistoryEntry currentHistory;
8587

88+
@Getter @Setter private Debugger debugger;
89+
8690
private void updateMenus(){
8791
redoMenu.getItems().clear();
8892
undoMenu.getItems().clear();
@@ -102,6 +106,8 @@ public BrowserTab(TabList list, String url) {
102106
setContextMenu(new TabContextMenu(this));
103107
urlBar.setOnAction(event -> openNew(urlBar.getText(), false));
104108

109+
debugger = new Debugger(this);
110+
105111
DownloadManager downloadManager = Sploty.getInstance().getDownloadManager();
106112
FXUtil.setImage(download, downloadManager.isError()?"/icons/downloaderror.png":downloadManager.isActive()?"/icons/downloadsinakktiv.png":downloadManager.isError()?"/icons/downloaderror.png":"/icons/downloads.png");
107113
downloadManager.addListener((DownloadManager.ActivityListener) isActive -> FXUtil.setImage(download, isActive?"/icons/downloadsinakktiv.png":"/icons/downloads.png"));
@@ -138,7 +144,9 @@ public BrowserTab(TabList list, String url) {
138144
addressBar.setTop(null);
139145

140146
main.setTop(addressBar);
141-
setContent(main);
147+
split.getItems().addAll(main);
148+
split.setOrientation(Orientation.VERTICAL);
149+
setContent(split);
142150
setOnClosed(event -> {
143151
if(list.getTabs().size() == 0)
144152
list.getWindow().getStage().close();
@@ -226,9 +234,9 @@ public void reload(){
226234
}
227235

228236
private void load(String url) {
237+
viewSource = false;
229238
FXUtil.setImage(secure, "/icons/load/waiting.gif");
230239
secure.setContextMenu(null);
231-
boolean viewSource = false;
232240
if(url.startsWith("view-source:")){
233241
viewSource = true;
234242
url = url.substring(12);

src/main/java/me/david/sploty4/util/SplotyLogger.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public SplotyLogger(final Level level) {
1717
LogManager.getLogManager().reset();
1818
Logger root = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
1919
this.logger = root;
20-
FileHandler txt = null;
20+
FileHandler txt;
2121
try {
2222
String filename = new SimpleDateFormat("dd MM yyyy").format(new Date()) + "-1";
2323
File logdir = new File(Sploty.getDirectory(), "Logs/");
@@ -84,6 +84,7 @@ public SplotyLogger debug(String debug){
8484
return this;
8585
}
8686

87+
//TODO debug mode?
8788
public SplotyLogger debugWarn(String debug){
8889
warn(debug);
8990
return this;

0 commit comments

Comments
 (0)