From 202610764b90a01f6faef54e2b2e05d940610294 Mon Sep 17 00:00:00 2001
From: Macocian Adrian Radu <34056556+macocianradu@users.noreply.github.com>
Date: Mon, 27 Apr 2020 17:32:34 +0300
Subject: [PATCH] added merge tu grid Panel moved borders to external
components added text field for one line with select
---
resources/ui.xml | 20 ++
src/Main.java | 11 +-
src/Sudoku/Layout | 0
src/Sudoku/SudokuButton.java | 37 ++++
src/Sudoku/SudokuLayout.java | 28 +++
src/guiTree/Components/Border.java | 48 +++++
src/guiTree/Components/Button.java | 9 +-
src/guiTree/Components/CheckBox.java | 2 -
src/guiTree/Components/GridPanel.java | 170 ++++++++++------
src/guiTree/Components/Panel.java | 5 -
src/guiTree/Components/ScrollPanel.java | 10 +-
src/guiTree/Components/Slider.java | 14 --
src/guiTree/Components/Text.java | 185 ++++++++++++++++++
src/guiTree/Components/ToggleButton.java | 9 +-
src/guiTree/CustomFrame.java | 7 +-
src/guiTree/Helper/Debugger.java | 2 +-
src/guiTree/Helper/Point2.java | 20 +-
src/guiTree/Visual.java | 104 +++++-----
src/guiTree/Window.java | 4 +
src/parser/XAMLParser.java | 24 ++-
.../converters/BooleanConverter.java | 2 +-
.../converters/ColorConverter.java | 2 +-
src/{ => parser}/converters/Converter.java | 2 +-
.../converters/ConverterInterface.java | 2 +-
.../converters/DirectionConverter.java | 2 +-
.../converters/DoubleConverter.java | 2 +-
.../converters/FloatConverter.java | 8 +-
.../converters/IntegerConverter.java | 2 +-
.../converters/StringConverter.java | 2 +-
29 files changed, 546 insertions(+), 187 deletions(-)
create mode 100644 src/Sudoku/Layout
create mode 100644 src/Sudoku/SudokuButton.java
create mode 100644 src/Sudoku/SudokuLayout.java
create mode 100644 src/guiTree/Components/Border.java
create mode 100644 src/guiTree/Components/Text.java
rename src/{ => parser}/converters/BooleanConverter.java (89%)
rename src/{ => parser}/converters/ColorConverter.java (89%)
rename src/{ => parser}/converters/Converter.java (98%)
rename src/{ => parser}/converters/ConverterInterface.java (84%)
rename src/{ => parser}/converters/DirectionConverter.java (95%)
rename src/{ => parser}/converters/DoubleConverter.java (89%)
rename src/{ => parser}/converters/FloatConverter.java (68%)
rename src/{ => parser}/converters/IntegerConverter.java (89%)
rename src/{ => parser}/converters/StringConverter.java (85%)
diff --git a/resources/ui.xml b/resources/ui.xml
index b3926bb..34b7a76 100644
--- a/resources/ui.xml
+++ b/resources/ui.xml
@@ -4,4 +4,24 @@
Visible="True"
Title="Sudoku 1.0"
Size="1024, 576">
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Main.java b/src/Main.java
index 0c34ada..19a7c83 100644
--- a/src/Main.java
+++ b/src/Main.java
@@ -1,15 +1,12 @@
-import guiTree.Components.ScrollPanel;
import guiTree.Window;
import parser.XAMLParser;
public class Main {
public static void main(String[] args) {
- try{
- Window window = XAMLParser.parse("ui.xml");
- assert window != null;
- ScrollPanel scrollPanel = (ScrollPanel)window.findByName("ScrollPane");
- System.out.println();
- }catch (Exception e){
+ Window window = null;
+ try {
+ window = XAMLParser.parse("ui.xml");
+ } catch (Exception e) {
e.printStackTrace();
}
}
diff --git a/src/Sudoku/Layout b/src/Sudoku/Layout
new file mode 100644
index 0000000..e69de29
diff --git a/src/Sudoku/SudokuButton.java b/src/Sudoku/SudokuButton.java
new file mode 100644
index 0000000..ec3ef73
--- /dev/null
+++ b/src/Sudoku/SudokuButton.java
@@ -0,0 +1,37 @@
+package Sudoku;
+
+import guiTree.Animations.ColorAnimation;
+import guiTree.Components.ToggleButton;
+import guiTree.events.KeyAdapter;
+
+import java.awt.*;
+import java.awt.event.KeyEvent;
+
+public class SudokuButton extends ToggleButton {
+ private int number;
+ private boolean entered;
+ private boolean fixed;
+ private boolean toggle;
+
+ public SudokuButton(Boolean fixed) {
+ super();
+ this.fixed = fixed;
+ if(!fixed) {
+ addKeyListener(new SudokuKeyListener());
+ }
+ }
+
+ private class SudokuKeyListener extends KeyAdapter {
+ @Override
+ public void keyPressed(KeyEvent keyEvent) {
+ if(keyEvent.getKeyCode() >= 48 && keyEvent.getKeyCode() <= 57) {
+ setLabel(String.valueOf(keyEvent.getKeyCode() - 48));
+ }
+ else {
+ addAnimation(new ColorAnimation(SudokuButton.this, Color.RED, getBackgroundColor(), 100));
+ }
+ setPressed(false);
+ update();
+ }
+ }
+}
diff --git a/src/Sudoku/SudokuLayout.java b/src/Sudoku/SudokuLayout.java
new file mode 100644
index 0000000..9b1b5ec
--- /dev/null
+++ b/src/Sudoku/SudokuLayout.java
@@ -0,0 +1,28 @@
+package Sudoku;
+
+public class SudokuLayout {
+ public static String grid1 = "----3--67";
+ public static String grid2 = "-------35";
+ public static String grid3 = "---16---4";
+ public static String grid4 = "6-8-9---2";
+ public static String grid5 = "12--8--79";
+ public static String grid6 = "9---3-8-6";
+ public static String grid7 = "8---26---";
+ public static String grid8 = "69-------";
+ public static String grid9 = "35--9----";
+
+ public static String getGrid(int nr) {
+ switch(nr) {
+ case 1: return grid1;
+ case 2: return grid2;
+ case 3: return grid3;
+ case 4: return grid4;
+ case 5: return grid5;
+ case 6: return grid6;
+ case 7: return grid7;
+ case 8: return grid8;
+ case 9: return grid9;
+ }
+ return null;
+ }
+}
diff --git a/src/guiTree/Components/Border.java b/src/guiTree/Components/Border.java
new file mode 100644
index 0000000..47573fd
--- /dev/null
+++ b/src/guiTree/Components/Border.java
@@ -0,0 +1,48 @@
+package guiTree.Components;
+
+import guiTree.Visual;
+
+import java.awt.*;
+import java.awt.image.BufferedImage;
+
+public class Border extends Visual {
+ private int thickness;
+ private Color color;
+
+ public Border() {
+ this(1, Color.BLACK);
+ }
+
+ public Border(int thickness) {
+ this(thickness, Color.BLACK);
+ }
+
+ public Border(Color color) {
+ this(1, color);
+ }
+
+ public Border(int thickness, Color color) {
+ super();
+ this.thickness = thickness;
+ this.color = color;
+ setSize(1.0f, 1.0f);
+ }
+
+ public void setThickness(Integer thickness) {
+ this.thickness = thickness;
+ update();
+ }
+
+ public void setColor(Color color) {
+ this.color = color;
+ update();
+ }
+
+ public void paint(BufferedImage imageBuffer) {
+ Graphics2D g = imageBuffer.createGraphics();
+
+ g.setColor(color);
+ g.setStroke(new BasicStroke(thickness));
+ g.drawRect(0, 0, getWidth(), getHeight());
+ }
+}
diff --git a/src/guiTree/Components/Button.java b/src/guiTree/Components/Button.java
index adf679b..dac8638 100644
--- a/src/guiTree/Components/Button.java
+++ b/src/guiTree/Components/Button.java
@@ -82,14 +82,7 @@ public class Button extends Visual {
g.setColor(getPaintColor());
//Draw Button
- if(getHasBorder()) {
- g.fillRoundRect(1, 1, getWidth() - 1, getHeight() - 1, round, round);
- g.setColor(getBorderColor());
- g.drawRoundRect(0, 0, getWidth() - 1, getHeight() - 1, round, round);
- }
- else {
- g.fillRoundRect(0, 0, getWidth(), getHeight(), round, round);
- }
+ g.fillRoundRect(0, 0, getWidth(), getHeight(), round, round);
//Draw Label
if(getFont() != null) {
diff --git a/src/guiTree/Components/CheckBox.java b/src/guiTree/Components/CheckBox.java
index 772cac8..19f7bed 100644
--- a/src/guiTree/Components/CheckBox.java
+++ b/src/guiTree/Components/CheckBox.java
@@ -128,8 +128,6 @@ public class CheckBox extends Visual {
int textHeight = g.getFontMetrics().getHeight();
g.drawString(text, getHeight() + 10, getHeight() / 2 + textHeight / 4);
- g.setColor(getBorderColor());
- g.drawRect(0, 0, getHeight() - 1, getHeight() - 1);
g.dispose();
}
}
diff --git a/src/guiTree/Components/GridPanel.java b/src/guiTree/Components/GridPanel.java
index b88b3d2..c42b2fe 100644
--- a/src/guiTree/Components/GridPanel.java
+++ b/src/guiTree/Components/GridPanel.java
@@ -6,46 +6,27 @@ import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.*;
import java.util.List;
+
import guiTree.Helper.Point2;
public class GridPanel extends Visual {
- private int columnCount;
- private int rowsCount;
- private Map> childrenCols;
- private Map> childrenRows;
- private Map rowSizes;
- private Map columnSizes;
+ private Map>children;
+ private Map fixedRows;
+ private Map fixedColumns;
+ private List rowSizes;
+ private List columnSizes;
private Map, Integer> rowPadding;
private Map, Integer> columnPadding;
public GridPanel(){
super();
- childrenCols = new TreeMap<>();
- childrenRows = new TreeMap<>();
- rowsCount = 0;
- columnCount = 0;
- rowSizes = new HashMap<>();
- columnSizes = new HashMap<>();
+ children = new HashMap<>();
+ rowSizes = new ArrayList<>();
+ columnSizes = new ArrayList<>();
rowPadding = new HashMap<>();
columnPadding = new HashMap<>();
- }
-
- private void refresh() {
- rowsCount = 0;
- columnCount = 0;
- for(int i: childrenRows.keySet()) {
- if(childrenRows.get(i).size() != 0 && !rowSizes.containsKey(i)) {
- rowsCount++;
- }
- }
-
- for(int i: childrenCols.keySet()) {
- if(childrenCols.get(i).size() != 0 && !columnSizes.containsKey(i)) {
- columnCount++;
- }
- }
-
- updateSize();
+ fixedRows = new HashMap<>();
+ fixedColumns = new HashMap<>();
}
public void setSize() {
@@ -53,71 +34,132 @@ public class GridPanel extends Visual {
updateSize();
}
- public void updateSize() {
- if(rowsCount == 0 && columnCount == 0) {
+ private void updateSize() {
+ if(rowSizes.size() == 0 && columnSizes.size() == 0) {
return;
}
int setHeights = 0;
int setWidths = 0;
- for(int i: rowSizes.keySet()) {
- setHeights += rowSizes.get(i);
+ for(int i: fixedRows.keySet()) {
+ rowSizes.set(i, fixedRows.get(i));
+ setHeights += fixedRows.get(i);
}
- for(int i: columnSizes.keySet()) {
- setWidths += columnSizes.get(i);
+ for(int i: fixedColumns.keySet()) {
+ columnSizes.set(i, fixedColumns.get(i));
+ setWidths += fixedColumns.get(i);
}
- int height = (getHeight() - setHeights) / rowsCount;
- int width = (getWidth() - setWidths) / columnCount;
+ int height = 0;
+ int width = 0;
+ if(fixedRows.size() != rowSizes.size()) {
+ height = (getHeight() - setHeights) / (rowSizes.size() - fixedRows.size());
+ }
+ if(fixedColumns.size() != columnSizes.size()) {
+ width = (getWidth() - setWidths) / (columnSizes.size() - fixedColumns.size());
+ }
- int locationY = 0;
- for(int i: childrenRows.keySet()) {
- int actualHeight = rowSizes.getOrDefault(i, height);
- for(Visual v: childrenRows.get(i)) {
-
- v.setHeight(actualHeight);
- v.setLocationY(locationY);
+ for(int i = 0; i < rowSizes.size(); i++) {
+ if(!fixedRows.containsKey(i)) {
+ rowSizes.set(i, height);
}
- locationY += actualHeight;
}
- int locationX = 0;
- for(int i: childrenCols.keySet()) {
- int actualWidth = columnSizes.getOrDefault(i, width);
- for(Visual v: childrenCols.get(i)) {
- v.setWidth(actualWidth);
- v.setLocationX(locationX);
+ for(int i = 0; i < columnSizes.size(); i++) {
+ if(!fixedColumns.containsKey(i)) {
+ columnSizes.set(i, width);
}
- locationX += actualWidth;
}
+
+ for(Visual v : children.keySet()) {
+ Point2 cell = children.get(v);
+ Point2 location = getGridLocation(cell);
+ v.setLocation(location.x, location.y);
+ int cellWidth = columnSizes.get(cell.x);
+ int cellHeight = rowSizes.get(cell.y);
+ int rowPad = rowPadding.getOrDefault(cell, 0);
+ int colPad = columnPadding.getOrDefault(cell, 0);
+
+ for(int i = 0; i < colPad; i++) {
+ cellWidth += columnSizes.get(cell.x + i + 1);
+ }
+ for(int i = 0; i < rowPad; i++) {
+ cellHeight += rowSizes.get(cell.y + i + 1);
+ }
+ v.setSize(cellWidth, cellHeight);
+ if(v.getWidth() != cellWidth) {
+ v.setWidth(-1.0f);
+ v.setWidth(cellWidth);
+ }
+ if(v.getHeight() != cellHeight) {
+ v.setHeight(-1.0f);
+ v.setHeight(cellHeight);
+ }
+ }
+ update();
}
public void setRowPadding(int row, int col, int padding) {
- rowPadding.put(new Point2<>(row, col), padding);
+ rowPadding.put(new Point2<>(col, row), padding);
+ for(int i = rowSizes.size(); i <= row + padding; i++) {
+ rowSizes.add(0);
+ }
+ updateSize();
}
public void setColumnPadding(int row, int col, int padding) {
- columnPadding.put(new Point2<>(row, col), padding);
+ columnPadding.put(new Point2<>(col, row), padding);
+ for(int i = columnSizes.size(); i <= col + padding; i++) {
+ columnSizes.add(0);
+ }
+ updateSize();
}
public void setRowSize(int row, int height) {
- rowSizes.put(row, height);
- refresh();
+ fixedRows.put(row, height);
+ updateSize();
}
public void setColumnSize(int column, int width) {
- columnSizes.put(column, width);
- refresh();
+ fixedColumns.put(column, width);
+ updateSize();
+ }
+
+ private Point2 getGridLocation(Point2 grid) {
+ int locationX = 0;
+ int locationY = 0;
+ for(int i = 0; i < grid.x; i++) {
+ locationX += columnSizes.get(i);
+ }
+ for(int i = 0; i < grid.y; i++) {
+ locationY += rowSizes.get(i);
+ }
+ return new Point2<>(locationX, locationY);
+ }
+
+ public void addVisual(Visual v) {
+ int x = 0;
+ int y = 0;
+ if(v.getAttribute("row") != null) {
+ x = Integer.parseInt(v.getAttribute("row"));
+ }
+ if(v.getAttribute("column") != null) {
+ y = Integer.parseInt(v.getAttribute("column"));
+ }
+ this.addVisual(v, x, y);
}
public void addVisual(Visual v, int row, int col) {
super.addVisual(v);
- childrenCols.computeIfAbsent(col, k -> new ArrayList<>());
- childrenRows.computeIfAbsent(row, k -> new ArrayList<>());
- childrenCols.get(col).add(v);
- childrenRows.get(row).add(v);
+ children.put(v, new Point2<>(col, row));
v.setLocation(-1.0f, -1.0f);
- refresh();
+ for(int i = rowSizes.size(); i <= row; i++) {
+ rowSizes.add(0);
+ }
+ for(int i = columnSizes.size(); i <= col; i++) {
+ columnSizes.add(0);
+ }
+ updateSize();
}
public void paint(BufferedImage imageBuffer) {
diff --git a/src/guiTree/Components/Panel.java b/src/guiTree/Components/Panel.java
index 90ec3c5..eed332f 100644
--- a/src/guiTree/Components/Panel.java
+++ b/src/guiTree/Components/Panel.java
@@ -115,11 +115,6 @@ public class Panel extends Visual {
g.setColor(getBackgroundColor());
g.fillRect(0, 0, getWidth(), getHeight());
- if(getHasBorder()) {
- g.setColor(getBorderColor());
- g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
- }
-
g.dispose();
}
}
diff --git a/src/guiTree/Components/ScrollPanel.java b/src/guiTree/Components/ScrollPanel.java
index 7d170ed..b57a527 100644
--- a/src/guiTree/Components/ScrollPanel.java
+++ b/src/guiTree/Components/ScrollPanel.java
@@ -141,14 +141,8 @@ public class ScrollPanel extends Visual {
public void paint(BufferedImage imageBuffer) {
Graphics2D g = imageBuffer.createGraphics();
g.setColor(getPaintColor());
- if(getHasBorder()) {
- g.fillRect(1, 1, getWidth() - 1, getHeight() - 1);
- g.setColor(getBorderColor());
- g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
- }
- else {
- g.fillRect(0, 0, getWidth(), getHeight());
- }
+
+ g.fillRect(0, 0, getWidth(), getHeight());
g.dispose();
}
diff --git a/src/guiTree/Components/Slider.java b/src/guiTree/Components/Slider.java
index ee5fa1e..528ffd8 100644
--- a/src/guiTree/Components/Slider.java
+++ b/src/guiTree/Components/Slider.java
@@ -36,8 +36,6 @@ public class Slider extends Visual {
setBackgroundColor(new Color(175, 175, 175));
setForegroundColor(new Color(112, 112, 112));
setAccentColor(new Color(50, 50, 50));
- button1.setHasBorder(false);
- button2.setHasBorder(false);
if(direction == Direction.Horizontal) {
button1.setIcon("arrow_left_black");
@@ -192,14 +190,6 @@ public class Slider extends Visual {
slider.setForegroundColor(color);
}
- @Override
- public void setBorderColor(Color color) {
- super.setBorderColor(color);
- button1.setBorderColor(color);
- button2.setBorderColor(color);
- slider.setBorderColor(color);
- }
-
@Override
public void setName(String name) {
super.setName(name);
@@ -230,10 +220,6 @@ public class Slider extends Visual {
Graphics2D g = imageBuffer.createGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
- if(getHasBorder()) {
- g.setColor(getBorderColor());
- g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
- }
g.setColor(getBackgroundColor());
if(direction == Direction.Vertical) {
diff --git a/src/guiTree/Components/Text.java b/src/guiTree/Components/Text.java
new file mode 100644
index 0000000..e181179
--- /dev/null
+++ b/src/guiTree/Components/Text.java
@@ -0,0 +1,185 @@
+package guiTree.Components;
+
+import guiTree.Visual;
+import guiTree.events.MouseAdapter;
+
+import java.awt.*;
+import java.awt.event.MouseEvent;
+import java.awt.image.BufferedImage;
+
+public class Text extends Visual {
+ private String text;
+ private boolean selectable;
+ private int startIndex;
+ private int endIndex;
+ private int textWidth;
+ private int textHeight;
+ private boolean inside;
+ private int[] characterWidthMap;
+ private FontMetrics fontMetrics;
+ private int textX;
+ private int textY;
+
+ public Text() {
+ this(0, 0, "");
+ }
+
+ public Text(int x, int y, String text) {
+ super(x, y);
+ this.text = text;
+ inside = false;
+ characterWidthMap = new int[text.length()];
+ startIndex = -1;
+ endIndex = -1;
+ textX = 0;
+ textY = 0;
+
+ addMouseListener(new MouseAdapter() {
+ @Override
+ public void mousePressed(MouseEvent mouseEvent) {
+ int x = mouseEvent.getX();
+ int y = mouseEvent.getY();
+ if(isOverText(x, y)) {
+ startIndex = getCharAt(x);
+ System.out.println("Start Index: " + startIndex);
+ return;
+ }
+ startIndex = -1;
+ endIndex = -1;
+ update();
+ }
+
+ @Override
+ public void mouseDragged(MouseEvent mouseEvent) {
+ int x = mouseEvent.getX();
+ int y = mouseEvent.getY();
+
+ if(startIndex != -1) {
+ endIndex = getCharAt(x);
+ System.out.println("End index: " + endIndex);
+ }
+ update();
+ }
+
+ @Override
+ public void mouseExited(MouseEvent mouseEvent) {
+ if(inside) {
+ setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
+ }
+ }
+
+ @Override
+ public void mouseMoved(MouseEvent mouseEvent) {
+ int x = mouseEvent.getX();
+ int y = mouseEvent.getY();
+ if(isOverText(x, y)) {
+ if(!inside) {
+ setCursor(new Cursor(Cursor.TEXT_CURSOR));
+ inside = true;
+ }
+ return;
+ }
+ if(inside) {
+ setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
+ inside = false;
+ }
+ }
+ });
+ }
+
+ public String getText() {
+ return text;
+ }
+
+ public void setText(String text) {
+ this.text = text;
+ characterWidthMap = new int[text.length()];
+ }
+
+ public void setSelectable(Boolean selectable) {
+ this.selectable = selectable;
+ }
+
+ private int getCharAt(int x) {
+ int location = (getWidth() - textWidth)/2;
+ for(int i = 0; i < text.length(); i++) {
+ if(x < location + characterWidthMap[i] / 2) {
+ return i;
+ }
+ location += characterWidthMap[i];
+ }
+ return text.length()-1;
+ }
+
+ @Override
+ public void setFont(Font font) {
+ super.setFont(font);
+ fontMetrics = null;
+ }
+
+ private boolean isOverText(int x, int y) {
+ if(x < textX || x > textX + textWidth) {
+ return false;
+ }
+ if(y > textY || y < textY - textHeight) {
+ return false;
+ }
+ System.out.println("Text X: " + textX + " Text Y: " + textY + " x: " + x + " y: " + y + " textWidth: " + textWidth + " textHeight: " + textHeight);
+ return true;
+ }
+
+ private void setCharacterWidthMap() {
+ for(int i = 0; i < text.length(); i++) {
+ int charWidth = fontMetrics.charWidth(text.charAt(i));
+ characterWidthMap[i] = charWidth;
+ }
+ textWidth = fontMetrics.stringWidth(text);
+ textHeight = fontMetrics.getHeight();
+ textX = (getWidth() - textWidth)/2;
+ textY = (getHeight() + textHeight)/2;
+ }
+
+
+ public void paint(BufferedImage imageBuffer) {
+ Graphics2D g = imageBuffer.createGraphics();
+
+ if(getFont() != null) {
+ g.setFont(getFont());
+ }
+ if(fontMetrics == null) {
+ fontMetrics = g.getFontMetrics();
+ setCharacterWidthMap();
+ }
+
+ if(startIndex != -1 && endIndex != -1) {
+ int startX;
+ int endX;
+ if(startIndex > endIndex) {
+ endX = startIndex;
+ startX = endIndex;
+ }
+ else {
+ startX = startIndex;
+ endX = endIndex;
+ }
+ int highlightStartX = textX;
+ int highlightEndX = textX;
+
+ for(int i = 0; i <= endX; i++) {
+ if(i < startX) {
+ highlightStartX += characterWidthMap[i];
+ }
+ highlightEndX += characterWidthMap[i];
+ }
+
+ g.setColor(Color.BLUE);
+ g.fillRect(highlightStartX, textY - textHeight + 3, highlightEndX - highlightStartX, textHeight);
+ }
+
+ g.setColor(getFontColor());
+
+ g.drawString(text, textX, textY);
+
+ g.dispose();
+ }
+}
diff --git a/src/guiTree/Components/ToggleButton.java b/src/guiTree/Components/ToggleButton.java
index 02c6a29..0e15e4b 100644
--- a/src/guiTree/Components/ToggleButton.java
+++ b/src/guiTree/Components/ToggleButton.java
@@ -82,14 +82,7 @@ public class ToggleButton extends Visual {
g.setColor(getPaintColor());
//Draw Button
- if(getHasBorder()) {
- g.fillRect(1, 1, this.getWidth() - 2, this.getHeight() - 2);
- g.setColor(getBorderColor());
- g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
- }
- else {
- g.fillRect(0, 0, getWidth() - 1, getHeight() - 1);
- }
+ g.fillRect(0, 0, getWidth() - 1, getHeight() - 1);
//Draw Label
if(getFont() != null) {
diff --git a/src/guiTree/CustomFrame.java b/src/guiTree/CustomFrame.java
index 37e9d95..2aa3f5c 100644
--- a/src/guiTree/CustomFrame.java
+++ b/src/guiTree/CustomFrame.java
@@ -47,6 +47,7 @@ public class CustomFrame extends JFrame {
private int startX;
private int startY;
private boolean resizing = false;
+ private boolean changedCursor = false;
@Override
public void mouseClicked(MouseEvent e) {
@@ -87,9 +88,13 @@ public class CustomFrame extends JFrame {
if(e.getX() < resizeDelta || e.getX() > getWidth() - resizeDelta ||
e.getY() < resizeDelta || e.getY() > getHeight() - resizeDelta) {
this.setResizeCursor(e);
+ changedCursor = true;
}
else{
- setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
+ if(changedCursor) {
+ setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
+ changedCursor = false;
+ }
}
}
diff --git a/src/guiTree/Helper/Debugger.java b/src/guiTree/Helper/Debugger.java
index 835ffd1..8e8f4fa 100644
--- a/src/guiTree/Helper/Debugger.java
+++ b/src/guiTree/Helper/Debugger.java
@@ -4,7 +4,7 @@ public class Debugger {
public enum Tag {
LISTENER(true),
PAINTING(false),
- FPS(true),
+ FPS(false),
ANIMATIONS(false),
PARSING(false);
diff --git a/src/guiTree/Helper/Point2.java b/src/guiTree/Helper/Point2.java
index 611ce08..a84bf4a 100644
--- a/src/guiTree/Helper/Point2.java
+++ b/src/guiTree/Helper/Point2.java
@@ -1,6 +1,6 @@
package guiTree.Helper;
-public class Point2 {
+public class Point2> implements Comparable> {
public T x;
public T y;
@@ -9,8 +9,13 @@ public class Point2 {
this.y = y;
}
- public boolean equals(Point2 point2) {
- return x == point2.y && y == point2.y;
+ @Override
+ public boolean equals(Object obj) {
+ if(!(obj instanceof Point2>)) {
+ return false;
+ }
+ Point2> point2 = (Point2>)obj;
+ return point2.x.equals(x) && point2.y.equals(y);
}
@Override
@@ -22,4 +27,13 @@ public class Point2 {
public int hashCode() {
return (x.toString() + ", " + y.toString()).hashCode();
}
+
+ @Override
+ public int compareTo(Point2 tPoint2) {
+ int cmp = x.compareTo(tPoint2.x);
+ if(cmp == 0) {
+ return y.compareTo(tPoint2.y);
+ }
+ return cmp;
+ }
}
diff --git a/src/guiTree/Visual.java b/src/guiTree/Visual.java
index 4da1733..8b724fe 100644
--- a/src/guiTree/Visual.java
+++ b/src/guiTree/Visual.java
@@ -14,8 +14,9 @@ import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
-import java.util.Iterator;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
public class Visual {
/*--------------------------------------------------------------------
@@ -42,6 +43,7 @@ public class Visual {
Attributes
---------------------------------------------------------------------*/
+ private Map attributeMap;
private Integer width;
private Integer height;
private Float relativeWidth;
@@ -52,19 +54,18 @@ public class Visual {
private Integer absoluteY;
private Float relativeX;
private Float relativeY;
- private Boolean hasBorder;
private Font font;
private Color backgroundColor;
private Color foregroundColor;
private Color accentColor;
private Color fontColor;
- private Color borderColor;
private Color paintColor;
private Boolean active;
private Boolean dirty;
private static Visual entered;
private static Visual focused;
private Boolean pressed;
+ private Boolean validating;
/*--------------------------------------------------------------------
Constructors
@@ -84,13 +85,12 @@ public class Visual {
this.backgroundColor = Color.WHITE;
this.foregroundColor = Color.BLUE;
this.fontColor = Color.BLACK;
- this.borderColor = Color.BLACK;
this.accentColor = Color.BLUE;
this.dirty = true;
- this.hasBorder = false;
this.active = this instanceof Window;
this.pressed = false;
+ this.attributeMap = new HashMap<>();
this.width = width;
this.height = height;
@@ -103,6 +103,8 @@ public class Visual {
this.locationY = 0;
this.absoluteX = 0;
this.absoluteY = 0;
+
+ this.validating = false;
}
/*--------------------------------------------------------------------
@@ -133,7 +135,7 @@ public class Visual {
v.setLocation();
}
}
- propagateDirt();
+ update();
notifyParent(this, SIZE_CHANGED);
}
@@ -176,7 +178,7 @@ public class Visual {
}
calculateAbsoluteLocation();
- propagateDirt();
+ update();
notifyParent(this, LOCATION_CHANGED);
}
@@ -207,37 +209,31 @@ public class Visual {
public void setBackgroundColor(Color backgroundColor) {
this.backgroundColor = backgroundColor;
this.paintColor = backgroundColor;
- propagateDirt();
+ update();
}
public void setForegroundColor(Color foregroundColor) {
this.foregroundColor = foregroundColor;
- propagateDirt();
+ update();
}
public void setFontColor(Color fontColor) {
this.fontColor = fontColor;
- propagateDirt();
+ update();
}
public void setAccentColor(Color accentColor) {
this.accentColor = accentColor;
- propagateDirt();
- }
-
- public void setBorderColor(Color borderColor) {
- this.borderColor = borderColor;
- propagateDirt();
+ update();
}
public void setPaintColor(Color paintColor) {
this.paintColor = paintColor;
- propagateDirt();
+ update();
}
- public void setHasBorder(Boolean hasBorder) {
- this.hasBorder = hasBorder;
- propagateDirt();
+ public void setAttribute(String attribute, String value) {
+ attributeMap.put(attribute, value);
}
/*--------------------------------------------------------------------
@@ -292,16 +288,12 @@ public class Visual {
return accentColor;
}
- public Color getBorderColor() {
- return borderColor;
- }
-
public Color getPaintColor() {
return paintColor;
}
- public Boolean getHasBorder() {
- return hasBorder;
+ public String getAttribute(String attribute) {
+ return attributeMap.get(attribute);
}
/*--------------------------------------------------------------------
@@ -333,7 +325,7 @@ public class Visual {
if(this.active) {
child.activate();
}
- propagateDirt();
+ update();
}
public void removeVisual(Visual child) {
@@ -344,7 +336,7 @@ public class Visual {
child.setParent(null);
child.imageBuffer = null;
child.deactivate();
- propagateDirt();
+ update();
}
private void setParent(Visual parent) {
@@ -396,8 +388,10 @@ public class Visual {
}
private void revalidate() {
- Timer timer = new Timer();
Debugger.log("Revalidating " + name, Debugger.Tag.PAINTING);
+ Timer timer = new Timer();
+
+ validating = true;
timer.startTiming();
clearImageBuffer();
@@ -408,7 +402,10 @@ public class Visual {
}
imageBuffer.getGraphics().drawImage(v.imageBuffer, v.locationX, v.locationY, null);
}
+
dirty = false;
+ validating = false;
+
if(!(this instanceof Window)){
long time = timer.stopTiming();
Debugger.log("Finished Revalidating " + name + ": " + time, Debugger.Tag.PAINTING);
@@ -422,8 +419,10 @@ public class Visual {
window.revalidate();
}
- public void update() {
- propagateDirt();
+ public void setCursor(Cursor cursor) {
+ if(parent != null) {
+ parent.setCursor(cursor);
+ }
}
public void paint(BufferedImage imageBuffer) {
@@ -459,14 +458,14 @@ public class Visual {
void mouseClicked(MouseEvent mouseEvent) {
for(MouseListener mouseListener: entered.mouseListeners) {
- mouseListener.mouseClicked(mouseEvent);
+ mouseListener.mouseClicked(entered.createMouseEvent(mouseEvent));
}
Debugger.log("Clicked " + entered.name, Debugger.Tag.LISTENER);
}
void mouseReleased(MouseEvent mouseEvent) {
for(MouseListener mouseListener: entered.mouseListeners) {
- mouseListener.mouseReleased(mouseEvent);
+ mouseListener.mouseReleased(entered.createMouseEvent(mouseEvent));
}
Debugger.log("Released " + entered.name, Debugger.Tag.LISTENER);
entered.pressed = false;
@@ -474,7 +473,7 @@ public class Visual {
void mousePressed(MouseEvent mouseEvent) {
for(MouseListener mouseListener: entered.mouseListeners) {
- mouseListener.mousePressed(mouseEvent);
+ mouseListener.mousePressed(entered.createMouseEvent(mouseEvent));
}
entered.pressed = true;
focused = entered;
@@ -488,17 +487,14 @@ public class Visual {
int mouseX = mouseEvent.getX();
int mouseY = mouseEvent.getY();
for(Visual v: children) {
- if(mouseX > v.getLocationX() &&
- mouseY > v.getLocationY() &&
- mouseX < v.getWidth() + v.getLocationX() &&
- mouseY < v.getHeight() + v.getLocationY()){
+ if(v.isInside(mouseX, mouseY)){
v.mouseEntered(mouseEvent);
return;
}
}
entered = this;
for(MouseListener mouseListener: mouseListeners) {
- mouseListener.mouseEntered(mouseEvent);
+ mouseListener.mouseEntered(createMouseEvent(mouseEvent));
}
Debugger.log("Entered " + entered.name, Debugger.Tag.LISTENER);
}
@@ -511,7 +507,7 @@ public class Visual {
return;
}
for (MouseListener mouseListener : entered.mouseListeners) {
- mouseListener.mouseExited(mouseEvent);
+ mouseListener.mouseExited(entered.createMouseEvent(mouseEvent));
}
Debugger.log("Exited " + entered.name, Debugger.Tag.LISTENER);
entered = null;
@@ -519,7 +515,7 @@ public class Visual {
void mouseDragged(MouseEvent mouseEvent) {
for (MouseListener mouseListener : entered.mouseListeners) {
- mouseListener.mouseDragged(mouseEvent);
+ mouseListener.mouseDragged(entered.createMouseEvent(mouseEvent));
}
Debugger.log("Dragged " + entered.name, Debugger.Tag.LISTENER);
}
@@ -533,7 +529,7 @@ public class Visual {
if(entered != null) {
if (!entered.isInside(mouseX, mouseY)) {
for (MouseListener mouseListener : entered.mouseListeners) {
- mouseListener.mouseExited(mouseEvent);
+ mouseListener.mouseExited(entered.createMouseEvent(mouseEvent));
}
Debugger.log("Exited " + entered.name, Debugger.Tag.LISTENER);
entered = this;
@@ -547,16 +543,17 @@ public class Visual {
}
if (this != entered && entered != null) {
for (MouseListener mouseListener : entered.mouseListeners) {
- mouseListener.mouseExited(mouseEvent);
+ mouseListener.mouseExited(entered.createMouseEvent(mouseEvent));
}
entered = this;
for (MouseListener mouseListener : mouseListeners) {
- mouseListener.mouseEntered(mouseEvent);
+ mouseListener.mouseEntered(createMouseEvent(mouseEvent));
}
+ Debugger.log("Entered " + this.name, Debugger.Tag.LISTENER);
}
else {
for (MouseListener mouseListener : mouseListeners) {
- mouseListener.mouseMoved(mouseEvent);
+ mouseListener.mouseMoved(createMouseEvent(mouseEvent));
}
}
Debugger.log("Moved " + this.name, Debugger.Tag.LISTENER);
@@ -640,6 +637,12 @@ public class Visual {
}
}
+ private MouseEvent createMouseEvent(MouseEvent mouseEvent) {
+ return new MouseEvent(mouseEvent.getComponent(), mouseEvent.getID(), mouseEvent.getWhen(), mouseEvent.getModifiersEx(),
+ mouseEvent.getX() - absoluteX, mouseEvent.getY() - absoluteY, mouseEvent.getXOnScreen(), mouseEvent.getYOnScreen(),
+ mouseEvent.getClickCount(), mouseEvent.isPopupTrigger(), mouseEvent.getButton());
+ }
+
private boolean isInside(int x, int y) {
return x > absoluteX && x < absoluteX + width && y > absoluteY && y < absoluteY + height;
}
@@ -658,10 +661,17 @@ public class Visual {
}
}
- private void propagateDirt() {
+ public void update() {
dirty = true;
if(parent != null) {
- parent.propagateDirt();
+ while(parent.validating){
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ parent.update();
}
}
}
diff --git a/src/guiTree/Window.java b/src/guiTree/Window.java
index 703a630..bb2c40f 100644
--- a/src/guiTree/Window.java
+++ b/src/guiTree/Window.java
@@ -244,6 +244,10 @@ public class Window extends Visual implements Runnable{
public void addVisual(Visual v) {
contentPanel.addVisual(v);
}
+ public void setCursor(Cursor cursor) {
+ System.out.println("Changed cursor ASD");
+ frame.setCursor(cursor);
+ }
@Override
public void run() {
diff --git a/src/parser/XAMLParser.java b/src/parser/XAMLParser.java
index 90fb713..787054c 100644
--- a/src/parser/XAMLParser.java
+++ b/src/parser/XAMLParser.java
@@ -1,7 +1,7 @@
package parser;
import com.sun.jdi.InvalidTypeException;
-import converters.Converter;
+import parser.converters.Converter;
import guiTree.Helper.Debugger;
import guiTree.Visual;
import guiTree.Window;
@@ -24,7 +24,18 @@ public class XAMLParser {
Node attribute = attributeList.item(i);
String methodName = "set";
methodName = methodName.concat(attribute.getNodeName());
- List