diff --git a/resources/icons/heart.png b/resources/icons/heart.png
new file mode 100644
index 0000000..b610134
Binary files /dev/null and b/resources/icons/heart.png differ
diff --git a/resources/ui.xml b/resources/ui.xml
index d5751e1..fa2d755 100644
--- a/resources/ui.xml
+++ b/resources/ui.xml
@@ -11,7 +11,7 @@
+
+ Size="0.4f, 0.3f">
+ Name="align_to_left"
+ Label="Align to Left"/>
+ Name="align_to_right"
+ Label="Align to Right"/>
+
wholeText;
+
+ @Override
+ public Point2 alignLine(int line) {
+ int x = (width - fontMetrics.stringWidth(wholeText.get(line))) / 2;
+ int y = (line + 1) * textHeight;
+ y += spacing * line;
+ return new Point2<>(x, y);
+ }
+
+ @Override
+ public Point2 getCaretPosition(int x, int y) {
+ y -= wholeText.size() * spacing;
+ y /= fontMetrics.getHeight();
+ if(y > wholeText.size() - 1) {
+ return new Point2<>(wholeText.get(wholeText.size() - 1).length(), wholeText.size() - 1);
+ }
+ if(y < 0) {
+ return new Point2<>(0, 0);
+ }
+
+ String currentLine = wholeText.get(y);
+ x -= (width - fontMetrics.stringWidth(currentLine)) / 2;
+ for(int i = 0; i < currentLine.length(); i++) {
+ if(x < (fontMetrics.charWidth(currentLine.charAt(i))) / 2) {
+ return new Point2<>(i, y);
+ }
+ x -= fontMetrics.charWidth(currentLine.charAt(i));
+ }
+ return new Point2<>(0, y);
+ }
+
+ @Override
+ public Point2 getPositionOnScreen(int x, int y) {
+ String currentLine = wholeText.get(y);
+ y = (fontMetrics.getHeight() + spacing) * y;
+ int textStart = (width - fontMetrics.stringWidth(currentLine)) / 2;
+ int width = textStart;
+ width += fontMetrics.stringWidth(currentLine.substring(0, x));
+ return new Point2<>(width, y);
+ }
+
+ @Override
+ public void setWholeText(List wholeText) {
+ this.wholeText = new ArrayList<>();
+ for(StringBuilder line: wholeText) {
+ this.wholeText.add(line.toString());
+ }
+ }
+
+ @Override
+ public void setSpacing(int spacing) {
+ this.spacing = spacing;
+ }
+
+ @Override
+ public void setFontMetrics(FontMetrics fontMetrics) {
+ this.fontMetrics = fontMetrics;
+ this.textHeight = fontMetrics.getHeight();
+ }
+
+ @Override
+ public void setSize(int width, int height) {
+ this.width = width;
+ this.height = height;
+ }
+}
diff --git a/src/guiTree/Components/Decoarations/LeftTextAligner.java b/src/guiTree/Components/Decoarations/LeftTextAligner.java
index fa8a126..9be11f5 100644
--- a/src/guiTree/Components/Decoarations/LeftTextAligner.java
+++ b/src/guiTree/Components/Decoarations/LeftTextAligner.java
@@ -14,7 +14,7 @@ public class LeftTextAligner implements TextAligner{
private int textHeight;
@Override
- public Point2 alignLine(String text, int line) {
+ public Point2 alignLine(int line) {
int x = 0;
int y = (line + 1) * textHeight;
y += spacing * line;
@@ -25,14 +25,8 @@ public class LeftTextAligner implements TextAligner{
public Point2 getPositionOnScreen(int x, int y){
String currentLine = wholeText.get(y);
y = (fontMetrics.getHeight() + spacing) * y;
- int width = 0;
- for(int i = 1; i <= currentLine.length(); i++) {
- width += fontMetrics.charWidth(currentLine.charAt(i - 1));
- if(x == i) {
- return new Point2<>(width, y);
- }
- }
- return new Point2<>(0, y);
+ int width = fontMetrics.stringWidth(currentLine.substring(0, x));
+ return new Point2<>(width, y);
}
@Override
diff --git a/src/guiTree/Components/Decoarations/RightTextAligner.java b/src/guiTree/Components/Decoarations/RightTextAligner.java
index fc66a64..0760745 100644
--- a/src/guiTree/Components/Decoarations/RightTextAligner.java
+++ b/src/guiTree/Components/Decoarations/RightTextAligner.java
@@ -14,7 +14,8 @@ public class RightTextAligner implements TextAligner{
private int width;
@Override
- public Point2 alignLine(String text, int line) {
+ public Point2 alignLine(int line) {
+ String text = wholeText.get(line);
int x = width - fontMetrics.stringWidth(text);
int y = (line + 1) * textHeight;
y += spacing * line;
@@ -47,14 +48,9 @@ public class RightTextAligner implements TextAligner{
public Point2 getPositionOnScreen(int x, int y) {
String currentLine = wholeText.get(y);
y = (fontMetrics.getHeight() + spacing) * y;
- int width = this.width;
- for(int i = currentLine.length(); i > 0; i--) {
- if(x == i) {
- return new Point2<>(width, y);
- }
- width -= fontMetrics.charWidth(currentLine.charAt(i - 1));
- }
- return new Point2<>(this.width - fontMetrics.stringWidth(currentLine), y);
+ int width = this.width - fontMetrics.stringWidth(currentLine);
+ width += fontMetrics.stringWidth(currentLine.substring(0, x));
+ return new Point2<>(width, y);
}
@Override
diff --git a/src/guiTree/Components/Decoarations/TextAligner.java b/src/guiTree/Components/Decoarations/TextAligner.java
index b1107a1..4e5409d 100644
--- a/src/guiTree/Components/Decoarations/TextAligner.java
+++ b/src/guiTree/Components/Decoarations/TextAligner.java
@@ -6,7 +6,7 @@ import java.awt.*;
import java.util.List;
public interface TextAligner {
- Point2 alignLine(String text, int line);
+ Point2 alignLine(int line);
Point2 getCaretPosition(int x, int y);
Point2 getPositionOnScreen(int x, int y);
void setWholeText(List wholeText);
diff --git a/src/guiTree/Components/DropDown.java b/src/guiTree/Components/DropDown.java
index c82fced..c5b0d58 100644
--- a/src/guiTree/Components/DropDown.java
+++ b/src/guiTree/Components/DropDown.java
@@ -207,6 +207,23 @@ public class DropDown extends MenuItem implements Menu{
elementHeightSet = true;
}
+ @Override
+ public Visual findByName(String name) {
+ if(getName().equals(name)){
+ return this;
+ }
+ else{
+ for(Visual child: items){
+ Visual visual;
+ visual = child.findByName(name);
+ if(visual != null){
+ return visual;
+ }
+ }
+ }
+ return null;
+ }
+
public void open() {
System.out.println("Opening");
isOpen = true;
diff --git a/src/guiTree/Components/Image.java b/src/guiTree/Components/Image.java
new file mode 100644
index 0000000..245c9df
--- /dev/null
+++ b/src/guiTree/Components/Image.java
@@ -0,0 +1,42 @@
+package guiTree.Components;
+
+import guiTree.Visual;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+
+public class Image extends Visual {
+ private BufferedImage bufferedImage;
+
+ public Image() {
+ }
+
+ public Image(String url) {
+ setImage(url);
+ }
+
+ public Image(BufferedImage image) {
+ setImage(image);
+ }
+
+ public void setImage(BufferedImage image) {
+ this.bufferedImage = image;
+ }
+
+ public void setImage(String url) {
+ try{
+ bufferedImage = ImageIO.read(new File("resources\\icons\\" + url + ".png"));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void paint(BufferedImage imageBuffer) {
+ Graphics2D g = imageBuffer.createGraphics();
+ g.drawImage(bufferedImage, 0, 0, getWidth(), getHeight(), null);
+ }
+}
diff --git a/src/guiTree/Components/Text.java b/src/guiTree/Components/Text.java
index 1c34a98..da889b0 100644
--- a/src/guiTree/Components/Text.java
+++ b/src/guiTree/Components/Text.java
@@ -1,5 +1,6 @@
package guiTree.Components;
+import guiTree.Components.Decoarations.CenterTextAligner;
import guiTree.Components.Decoarations.LeftTextAligner;
import guiTree.Components.Decoarations.RightTextAligner;
import guiTree.Components.Decoarations.TextAligner;
@@ -148,21 +149,30 @@ public class Text extends Visual {
public void setAlignment(String textAlignment) {
textAlignment = textAlignment.toLowerCase();
- if(textAlignment.equals("left")) {
- textAligner = new LeftTextAligner();
- textAligner.setWholeText(lines);
- textAligner.setSize(getWidth(), getHeight());
- textAligner.setSpacing(paragraphSpacing);
- return;
+ switch(textAlignment) {
+ case "left": {
+ textAligner = new LeftTextAligner();
+ break;
+ }
+ case "right": {
+ textAligner = new RightTextAligner();
+ break;
+ }
+ case "center": {
+ textAligner = new CenterTextAligner();
+ break;
+ }
+ default: {
+ System.err.println("Alignment does not exist");
+ return;
+ }
}
- if(textAlignment.equals("right")) {
- textAligner = new RightTextAligner();
- textAligner.setWholeText(lines);
- textAligner.setSize(getWidth(), getHeight());
- textAligner.setSpacing(paragraphSpacing);
- return;
+ textAligner.setWholeText(lines);
+ textAligner.setSize(getWidth(), getHeight());
+ if(fontMetrics != null) {
+ textAligner.setFontMetrics(fontMetrics);
}
- System.err.println("Alignment does not exist");
+ textAligner.setSpacing(paragraphSpacing);
}
private void copyToClipboard() {
@@ -209,47 +219,6 @@ public class Text extends Visual {
return textAligner.getCaretPosition(x, y);
}
- private void deleteSelection() {
- selectionRectangles.clear();
- selectedText.clear();
-
- if(caretPosition.equals(startDragPosition)) {
- return;
- }
- Point2 selectionStart;
- Point2 selectionEnd;
- if(caretPosition.compareTo(startDragPosition) < 0) {
- selectionStart = new Point2<>(caretPosition);
- selectionEnd = new Point2<>(startDragPosition);
- }
- else {
- selectionStart = new Point2<>(startDragPosition);
- selectionEnd = new Point2<>(caretPosition);
- }
- caretPosition = selectionStart;
-
- if(selectionStart.y.equals(selectionEnd.y)) {
- StringBuilder currentLine = lines.get(selectionStart.y);
- int lineLength = currentLine.length();
- int newLength = lineLength - selectionEnd.x + selectionStart.x;
- currentLine.insert(selectionStart.x, currentLine.substring(selectionEnd.x));
- currentLine = new StringBuilder(currentLine.substring(0, newLength));
- lines.set(selectionStart.y, currentLine);
- return;
- }
-
- while(selectionStart.y + 1 < selectionEnd.y) {
- lines.remove(selectionStart.y + 1);
- selectionEnd.y--;
- }
-
- StringBuilder currentLine = lines.get(selectionStart.y);
- currentLine.insert(selectionStart.x, lines.get(selectionEnd.y).substring(selectionEnd.x));
- currentLine = new StringBuilder(currentLine.substring(0, selectionStart.x + lines.get(selectionEnd.y).substring(selectionEnd.x).length()));
- lines.remove((int)selectionEnd.y);
- lines.set(selectionStart.y, currentLine);
- }
-
private void setSelection() {
if(!selectable) {
return;
@@ -323,7 +292,7 @@ public class Text extends Visual {
g.setColor(getFontColor());
for(StringBuilder line: lines) {
- Point2 position = textAligner.alignLine(line.toString(), lines.indexOf(line));
+ Point2 position = textAligner.alignLine(lines.indexOf(line));
g.drawString(line.toString(), position.x, position.y);
}
}