Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Editare text #48

Merged
merged 4 commits into from

2 participants

@dianaprajescu
Collaborator
  • Citeste textul din elementele frunza
  • Modifica textul din elementele frunza
  • Adauga elemente frunza daca este nevoie
  • Sterge elemente frunza
@stefanneculai stefanneculai merged commit 5c89311 into develop
@dianaprajescu dianaprajescu deleted the vezi_text branch
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
This page is out of date. Refresh to see the latest.
View
4 src/element_actions/PopupListener.java
@@ -14,9 +14,9 @@
*/
public class PopupListener implements ActionListener {
- private final GElement panel;
+ private GElement panel;
- private final LayoutParser layoutParser;
+ private LayoutParser layoutParser;
/**
* Constructor.
View
14 src/element_actions/ViewText.java
@@ -14,6 +14,8 @@
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
+import parser.TextActions;
+
/**
* @author Unknown-Revengers
*
@@ -59,7 +61,7 @@ public ViewText(GElement panel) {
contentPanel = this.getContentPane();
// Adauga textul elementului la frame.
- this.addText(elementPanel.element.getData().text);
+ this.addText();
// Adauga buton.
this.addButton();
@@ -83,7 +85,8 @@ private void addButton() {
@Override
public void actionPerformed(ActionEvent e) {
// Save text.
- elementPanel.element.getData().text = descriptionArea.getText();
+ TextActions.saveText(elementPanel.element,
+ descriptionArea.getText());
frame.dispose();
}
@@ -95,14 +98,13 @@ public void actionPerformed(ActionEvent e) {
/**
* Adauga text la fereastra.
- *
- * @param text
- * Textul de adaugat.
*/
- private void addText(String text) {
+ private void addText() {
// New Panel.
JPanel panel = new JPanel();
+ String text = TextActions.getText(elementPanel.element);
+
// Creaza Text Area pentru text.
descriptionArea = new JTextArea(text);
descriptionArea.setLineWrap(true);
View
12 src/gui/LayoutGUI.java
@@ -47,12 +47,12 @@
/**
* Layout parser.
*/
- public final LayoutParser layoutParser;
+ public LayoutParser layoutParser;
/**
* Imaginea ce este incarcata.
*/
- private final BufferedImage image;
+ private BufferedImage image;
/**
* Panelul in care se deseneaza imaginea.
@@ -93,8 +93,8 @@ public LayoutGUI(LayoutParser layoutParser) throws IOException {
// Incarca elementele din pagina.
this.loadElements(VisibleElements.S_BLOCK);
- // Actiuni finale asupra documentului.
- this.addFinalActions();
+ // Actiuni e asupra documentului.
+ this.addActions();
// Afiseaza fereastra.
this.setVisible(true);
@@ -310,7 +310,7 @@ private void addFilters() {
/**
* TODO Buton pentru salvat schimbarile facute intr-un fisier de output.
*/
- private void addFinalActions() {
+ private void addActions() {
// TODO Ruleaza modul de numerotare a paginii.
JButton btnNumeroteaza = new JButton("Numeroteaza pagina");
btnNumeroteaza.setBounds(this.getMaximizedBounds().width - 290,
@@ -327,4 +327,4 @@ private void addFinalActions() {
btnSalveaza.addActionListener(new SalveazaButtonListener());
getContentPane().add(btnSalveaza);
}
-}
+}
View
208 src/parser/TextActions.java
@@ -0,0 +1,208 @@
+package parser;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import tree.GenericTreeNode;
+
+/**
+ * @author diana
+ *
+ */
+public class TextActions {
+ /**
+ * Genereaza textul pentru elementul curent.
+ *
+ * @param element
+ * Elementul curent.
+ * @return String Textul elementului.
+ */
+ @SuppressWarnings("unchecked")
+ public static String getText(
+ GenericTreeNode<LayoutParserTreeElement> element) {
+
+ // Daca elementul este nod frunza returneaza textul.
+ if (element.getData().elementType.toString().compareTo("String") == 0) {
+ return element.getData().text;
+ }
+
+ // Ia copii elementului curent.
+ List<GenericTreeNode<LayoutParserTreeElement>> children = element
+ .getChildren();
+
+ // Sorteaza dupa top.
+ Collections.sort(children, new ElementComparator());
+
+ String text = "";
+ for (GenericTreeNode<LayoutParserTreeElement> child : children) {
+ text = text.concat(getText(child));
+ if (child.getData().elementType.toString().compareTo("TextLine") == 0) {
+ text = text.concat("\n");
+ }
+ else if (child.getData().elementType.toString().compareTo("String") == 0) {
+ text = text.concat(" ");
+ }
+ }
+
+ // Remove space and new line added only after last component.
+ text = text.replaceAll(" $", "");
+ if (element.getData().elementType.toString().compareTo("TextBlock") == 0) {
+ text = text.substring(0, text.length() - 1);
+ }
+ return text;
+ }
+
+ /**
+ * Salveaza modificarile facute in arbore.
+ *
+ * @param text
+ * Textul de salvat in arbore.
+ */
+ public static void saveText(
+ GenericTreeNode<LayoutParserTreeElement> element,
+ String text) {
+ /*
+ * Daca elementul curent este nod frunza, modifica atributul text.
+ */
+ if (element.getData().elementType.toString().compareTo("String") == 0) {
+ element.getData().text = text;
+ return;
+ }
+
+ /*
+ * Daca TextBlock sau TextLine are doar o componenta atunci aceasta este
+ * text.
+ */
+ String[] textComponents = { text };
+
+ // Sparge textul dupa delimitatori.
+ if (element.getData().elementType.toString().compareTo("TextBlock") == 0
+ && text.contains("\n")) {
+ // Split text in lines.
+ textComponents = text.split("\n");
+
+ } else if (element.getData().elementType.toString().compareTo(
+ "TextLine") == 0) {
+
+ if (text.contains("\n")) {
+ text = text.replace("\n", " ");
+ }
+
+ text = text.trim();
+ text = text.replaceAll("( )+", " ");
+ textComponents = text.split(" ");
+ }
+
+ // Ia copii elementului curent.
+ List<GenericTreeNode<LayoutParserTreeElement>> children = element
+ .getChildren();
+
+ // Sorteaza dupa top.
+ Collections.sort(children, new ElementComparator());
+
+ // Adauga si modifica text in arbore.
+ for (int i = 0; i < textComponents.length; i++) {
+ if (children.size() == i + 1
+ && element.getData().elementType.toString().compareTo(
+ "TextBlock") == 0) {
+ /*
+ * Daca numarul de noduri TextLine din TextBlock este mai mare
+ * decat numarul de noduri TextLine existente in arbore, adauga
+ * ultimile TextLine la ultimul nod TextLine din arbore.
+ */
+ for (int j = i + 1; j < textComponents.length; j++) {
+ textComponents[i] = textComponents[i].concat(" ")
+ .concat(textComponents[j]);
+ }
+
+ textComponents[i] = textComponents[i].trim();
+ textComponents[i] = textComponents[i].replaceAll("( )+", " ");
+
+ saveText(children.get(i), textComponents[i]);
+ break;
+
+ } else if (children.size() > i) {
+ // Schimba textul din nodul existent children.get(i).
+ saveText(children.get(i), textComponents[i]);
+
+ } else if (element.getData().elementType.toString().compareTo(
+ "TextLine") == 0) {
+ // Creaza frunze (elemente de tipul String).
+ LayoutParserTreeElement frunza = new LayoutParserTreeElement();
+ frunza.text = textComponents[i];
+ frunza.elementType = parser.LayoutParserTreeElement.ElementType.STRING;
+
+ GenericTreeNode<LayoutParserTreeElement> x = new GenericTreeNode<LayoutParserTreeElement>();
+ x.setData(frunza);
+
+ element.addChild(x);
+ }
+ }
+
+ // Sterge text din arbore.
+ if (children.size() > textComponents.length) {
+ deleteText(element, textComponents.length);
+ }
+ }
+
+ /**
+ * Sterge noduri frunza daca la editare s-au sters cuvinte.
+ *
+ * @param element
+ * Elementul din care s-au sters cuvinte.
+ * @param textLength
+ * Numarul de elemente ramase.
+ */
+ private static void deleteText(
+ GenericTreeNode<LayoutParserTreeElement> element,
+ int textLength) {
+ // Ia copii elementului curent.
+ List<GenericTreeNode<LayoutParserTreeElement>> children = element
+ .getChildren();
+
+ // Sorteaza dupa top.
+ Collections.sort(children, new ElementComparator());
+
+ for (int i = textLength; i < children.size(); i++) {
+ // Daca este frunza, sterge nodul
+ if (children.get(i).getData().elementType.toString().compareTo(
+ "String") == 0) {
+ element.removeChildAt(i);
+
+ // One child removed, size drops by 1.
+ i--;
+
+ } else {
+ deleteText(children.get(i), 0);
+ }
+ }
+ }
+
+ /**
+ * @author Unknown-Revengers
+ *
+ * Comparator Class for Elements.
+ */
+ @SuppressWarnings("rawtypes")
+ public static class ElementComparator implements Comparator {
+ @SuppressWarnings("unchecked")
+ @Override
+ public int compare(Object node1, Object node2) {
+ // Nu compara nodurile frunza, ele nu au top.
+ if (((GenericTreeNode<LayoutParserTreeElement>) node1).getData().elementType
+ .toString().compareTo("String") != 0) {
+ int top1 = ((GenericTreeNode<LayoutParserTreeElement>) node1)
+ .getData().top;
+ int top2 = ((GenericTreeNode<LayoutParserTreeElement>) node2)
+ .getData().top;
+
+ if (top1 != top2) {
+ return top1 > top2 ? -1 : 1;
+ }
+ }
+
+ return 0;
+ }
+ }
+}
Something went wrong with that request. Please try again.