diff --git a/src/test/java/de/neemann/digital/docu/DocuTest.java b/src/test/java/de/neemann/digital/docu/DocuTest.java index 0ad0ecc4c..37c5bf565 100644 --- a/src/test/java/de/neemann/digital/docu/DocuTest.java +++ b/src/test/java/de/neemann/digital/docu/DocuTest.java @@ -41,6 +41,8 @@ public class DocuTest extends TestCase { .append(Lang.get("digital")) .append("\" titleImage=\"") .append(new File(Resources.getRoot(), "../../../screenshot.png").toURI().toString()) + .append("\" images=\"") + .append(new File(Resources.getRoot(), "docu/images/").toURI().toString()) .append("\" toc=\"") .append(Lang.get("tableOfContent")) .append("\" lang=\"") diff --git a/src/test/java/de/neemann/digital/integration/ScreenShots.java b/src/test/java/de/neemann/digital/integration/ScreenShots.java new file mode 100644 index 000000000..fdab9e115 --- /dev/null +++ b/src/test/java/de/neemann/digital/integration/ScreenShots.java @@ -0,0 +1,97 @@ +package de.neemann.digital.integration; + +import de.neemann.digital.gui.Main; +import de.neemann.digital.lang.Lang; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.image.BufferedImage; +import java.io.File; + +import static de.neemann.digital.draw.shapes.GenericShape.SIZE; +import static de.neemann.digital.draw.shapes.GenericShape.SIZE2; + +public class ScreenShots { + + public static void main(String[] args) { + int x = 300; + int y = 200; + new GuiTester() + .add(new GuiTester.WindowCheck<>(Main.class, (gt, w) -> w.setSize(850, 500))) + .add(new ScreenShot<>(Main.class)) + .press("F10") + .press("RIGHT", 5) + .press("DOWN", 2) + .press("RIGHT") + .press("DOWN", 2) + .add(new ScreenShot<>(Main.class)) + .press("ENTER") + .mouseMove(x, y) + .mouseClick(InputEvent.BUTTON1_MASK) + .add(new ScreenShot<>(Main.class)) + .press("typed l") + .mouseMove(x, y + SIZE * 2) + .mouseClick(InputEvent.BUTTON1_MASK) + .add(new ScreenShot<>(Main.class)) + .press("F10") + .press("RIGHT", 5) + .press("DOWN", 1) + .press("RIGHT") + .press("DOWN", 4) + .add(new ScreenShot<>(Main.class)) + .press("ENTER") + .mouseMove(x + SIZE * 5, y + SIZE * 1 + SIZE2) + .mouseClick(InputEvent.BUTTON1_MASK) + .add(new ScreenShot<>(Main.class)) + .press("F10") + .press("RIGHT", 5) + .press("DOWN", 2) + .press("RIGHT") + //.press("DOWN", 4) + .add(new ScreenShot<>(Main.class)) + .press("ENTER") + .mouseMove(x + SIZE * 9, y + SIZE * 1 + SIZE2) + .mouseClick(InputEvent.BUTTON1_MASK) + .add(new ScreenShot<>(Main.class)) + .mouseMove(x, y - SIZE) + .mouseClick(InputEvent.BUTTON1_MASK) + .mouseMove(x + SIZE * 2, y - SIZE) + .mouseClick(InputEvent.BUTTON1_MASK) + .add(new ScreenShot<>(Main.class)) + .mouseMove(x, y + SIZE) + .mouseClick(InputEvent.BUTTON1_MASK) + .mouseMove(x + SIZE * 2, y + SIZE) + .mouseClick(InputEvent.BUTTON1_MASK) + .mouseMove(x + SIZE * 5, y) + .mouseClick(InputEvent.BUTTON1_MASK) + .mouseMove(x + SIZE * 7, y) + .mouseClick(InputEvent.BUTTON1_MASK) + .add(new ScreenShot<>(Main.class)) + .press(' ') + .add(new ScreenShot<>(Main.class)) + .mouseMove(x - SIZE, y) + .mouseClick(InputEvent.BUTTON1_MASK) + .add(new ScreenShot<>(Main.class)) + .execute(); + } + + private static class ScreenShot extends GuiTester.WindowCheck { + private static int n; + + public ScreenShot(Class expectedClass) { + super(expectedClass); + } + + @Override + public void checkWindow(GuiTester guiTester, W window) throws Exception { + BufferedImage image = guiTester.getRobot().createScreenCapture(window.getBounds()); + String str = Integer.toString(n); + if (str.length() == 1) + str = '0' + str; + File file = new File(Resources.getRoot(), "docu/images/"+ Lang.currentLanguage().getName()+"/scr" + str + ".png"); + ImageIO.write(image, "png", file); + n++; + } + } +} diff --git a/src/test/resources/docu/elem2fo.xslt b/src/test/resources/docu/elem2fo.xslt index c9dc9aedf..7de2c9043 100644 --- a/src/test/resources/docu/elem2fo.xslt +++ b/src/test/resources/docu/elem2fo.xslt @@ -1,7 +1,9 @@ + xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:csl="http://www.w3.org/1999/XSL/Transform"> + + / @@ -177,10 +179,13 @@ - - - - + + + + + + + @@ -189,6 +194,10 @@ + + + + diff --git a/src/test/resources/docu/images/de/scr00.png b/src/test/resources/docu/images/de/scr00.png new file mode 100644 index 000000000..10e0e6769 Binary files /dev/null and b/src/test/resources/docu/images/de/scr00.png differ diff --git a/src/test/resources/docu/images/de/scr01.png b/src/test/resources/docu/images/de/scr01.png new file mode 100644 index 000000000..fc6f3515f Binary files /dev/null and b/src/test/resources/docu/images/de/scr01.png differ diff --git a/src/test/resources/docu/images/de/scr02.png b/src/test/resources/docu/images/de/scr02.png new file mode 100644 index 000000000..57c67bb2e Binary files /dev/null and b/src/test/resources/docu/images/de/scr02.png differ diff --git a/src/test/resources/docu/images/de/scr03.png b/src/test/resources/docu/images/de/scr03.png new file mode 100644 index 000000000..8c606a8ba Binary files /dev/null and b/src/test/resources/docu/images/de/scr03.png differ diff --git a/src/test/resources/docu/images/de/scr04.png b/src/test/resources/docu/images/de/scr04.png new file mode 100644 index 000000000..4ab77d6f0 Binary files /dev/null and b/src/test/resources/docu/images/de/scr04.png differ diff --git a/src/test/resources/docu/images/de/scr05.png b/src/test/resources/docu/images/de/scr05.png new file mode 100644 index 000000000..a199101ab Binary files /dev/null and b/src/test/resources/docu/images/de/scr05.png differ diff --git a/src/test/resources/docu/images/de/scr06.png b/src/test/resources/docu/images/de/scr06.png new file mode 100644 index 000000000..0e8402bcc Binary files /dev/null and b/src/test/resources/docu/images/de/scr06.png differ diff --git a/src/test/resources/docu/images/de/scr07.png b/src/test/resources/docu/images/de/scr07.png new file mode 100644 index 000000000..66ceb8020 Binary files /dev/null and b/src/test/resources/docu/images/de/scr07.png differ diff --git a/src/test/resources/docu/images/de/scr08.png b/src/test/resources/docu/images/de/scr08.png new file mode 100644 index 000000000..cf78f6ede Binary files /dev/null and b/src/test/resources/docu/images/de/scr08.png differ diff --git a/src/test/resources/docu/images/de/scr09.png b/src/test/resources/docu/images/de/scr09.png new file mode 100644 index 000000000..67dda32f9 Binary files /dev/null and b/src/test/resources/docu/images/de/scr09.png differ diff --git a/src/test/resources/docu/images/de/scr10.png b/src/test/resources/docu/images/de/scr10.png new file mode 100644 index 000000000..4eb50d3eb Binary files /dev/null and b/src/test/resources/docu/images/de/scr10.png differ diff --git a/src/test/resources/docu/images/de/scr11.png b/src/test/resources/docu/images/de/scr11.png new file mode 100644 index 000000000..9fe4cc849 Binary files /dev/null and b/src/test/resources/docu/images/de/scr11.png differ diff --git a/src/test/resources/docu/images/en/scr00.png b/src/test/resources/docu/images/en/scr00.png new file mode 100644 index 000000000..1c5c0a66a Binary files /dev/null and b/src/test/resources/docu/images/en/scr00.png differ diff --git a/src/test/resources/docu/images/en/scr01.png b/src/test/resources/docu/images/en/scr01.png new file mode 100644 index 000000000..65cafef16 Binary files /dev/null and b/src/test/resources/docu/images/en/scr01.png differ diff --git a/src/test/resources/docu/images/en/scr02.png b/src/test/resources/docu/images/en/scr02.png new file mode 100644 index 000000000..dd320a01a Binary files /dev/null and b/src/test/resources/docu/images/en/scr02.png differ diff --git a/src/test/resources/docu/images/en/scr03.png b/src/test/resources/docu/images/en/scr03.png new file mode 100644 index 000000000..1c6c93311 Binary files /dev/null and b/src/test/resources/docu/images/en/scr03.png differ diff --git a/src/test/resources/docu/images/en/scr04.png b/src/test/resources/docu/images/en/scr04.png new file mode 100644 index 000000000..3eaa111e8 Binary files /dev/null and b/src/test/resources/docu/images/en/scr04.png differ diff --git a/src/test/resources/docu/images/en/scr05.png b/src/test/resources/docu/images/en/scr05.png new file mode 100644 index 000000000..19ab3334b Binary files /dev/null and b/src/test/resources/docu/images/en/scr05.png differ diff --git a/src/test/resources/docu/images/en/scr06.png b/src/test/resources/docu/images/en/scr06.png new file mode 100644 index 000000000..cb826e850 Binary files /dev/null and b/src/test/resources/docu/images/en/scr06.png differ diff --git a/src/test/resources/docu/images/en/scr07.png b/src/test/resources/docu/images/en/scr07.png new file mode 100644 index 000000000..5703ce8e5 Binary files /dev/null and b/src/test/resources/docu/images/en/scr07.png differ diff --git a/src/test/resources/docu/images/en/scr08.png b/src/test/resources/docu/images/en/scr08.png new file mode 100644 index 000000000..23f60e68c Binary files /dev/null and b/src/test/resources/docu/images/en/scr08.png differ diff --git a/src/test/resources/docu/images/en/scr09.png b/src/test/resources/docu/images/en/scr09.png new file mode 100644 index 000000000..31fd285f8 Binary files /dev/null and b/src/test/resources/docu/images/en/scr09.png differ diff --git a/src/test/resources/docu/images/en/scr10.png b/src/test/resources/docu/images/en/scr10.png new file mode 100644 index 000000000..c65e47924 Binary files /dev/null and b/src/test/resources/docu/images/en/scr10.png differ diff --git a/src/test/resources/docu/images/en/scr11.png b/src/test/resources/docu/images/en/scr11.png new file mode 100644 index 000000000..84782a084 Binary files /dev/null and b/src/test/resources/docu/images/en/scr11.png differ diff --git a/src/test/resources/docu/static_de.xml b/src/test/resources/docu/static_de.xml index 7671bbd3e..1261d4369 100644 --- a/src/test/resources/docu/static_de.xml +++ b/src/test/resources/docu/static_de.xml @@ -26,6 +26,70 @@ Bearbeitungsmodus gewechselt werden, indem die Simulation gestoppt wird. + + + + Im Hauptfenster können aus dem Menü Bauteile die verschiedenen Bauteile ausgewahlt werden. + Danach werden diese auf dem Zeichenfeld positioniert. Dieser Vorgang kann mit der ESC-Taste + jederzeit abgebrochen werden. + + + Als erstes Beispiel kann eine Schaltung mit einem Exclusiv-Oder Gatter aufgebaut werden. + Dazu wählt man zunächst einen Eingang aus. Dieser kann später interaktiv mit der Maus + gesteuert werden. + + + Nach der Auswahl kann der erste Eingang auf die Zeichenfläche gesetzt werden. + Der rote Punkt markiert den Leitungsanschluss. Hier wird später eine Verbindungsleitung + angeschlossen. Rot zeigt an, dass dieser Anschluss aktiv ist. Er definiert also einen + Signalwert. + + + Auf die gleiche Art und Weise wird ein zweiter Eingang hinzugefügt. Am besten setzt man + ihn direkt unter den ersten Eingang. + + + Danach wird das Exclusiv-Oder Gatter ausgewählt. Dieses Gatter stellt die eigentliche + logische Funktion dar. + + + Dieses kann nun ebenfalls in die Schaltung eingefügt werden. Am besten setzt man es so, + dass die spätere Verdrahtung möglichst einfach wird. Die blauen Punkte bezeichnen die + Eingänge des Gatters. + + + Jetzt wählt man noch einen Ausgang aus. Dieser kann verwendet werden, um einen Zustand + anzuzeigen, oder um später Signale an eine einbettende Schaltung weiterzugeben. + + + Auch dieser wird so positioniert, dass die Verdrahtung möglichst einfach wird. + Er hat einen blauen Punkt, verfügt also über einen Eingang. + + + Damit sind alle Komponenten vorhanden. Jetzt muss noch die Verdrahtung ergänzt werden. + Mit der Maus kann direkt eine Verbindungsleitung gezogen werden. Es werden die blauen und roten + Punkte miteinander verbunden. Es darf dabei immer nur genau ein roter Punkt mit einer beliebigen + Anzahl blauer Punkte verbunden werden. Nur der Einsatz von Treestate-Ausgängen erlaubt es, + von dieser Regel abzuweichen und mehrere rote Punkte miteinander zu verbinden. + + + So können auch die beiden noch fehlenden Leitungen ergänzt werden. Damit ist eine erste + Schaltung komplett. + + + Um mit der Schaltung interagieren zu können, muss diese gestartet werden. Dazu kann der + Start-Knopf in der Toolbar verwendet werden. + Nach dem Starten der Simulation ändert sich die Farbe der Leitungen und die Ein- und Ausgänge + sind jetzt ausgefüllt. Ein helles Grün markiert eine logische '1' und ein dunkles Grün eine + logische '0'. Im Moment findet sich auf allen Leitungen eine logische '0'. + + + Durch klicken mit der Maus können die Eingänge umgeschaltet werden. Da die Simulation jetzt + aktiv ist, verändert sich der Augang entsprechend der aktuellen Eingangszustände. + Die Schaltung verhällt sich wie erwartet wie ein XOR-Gatter. + + + Alle Elemente müssen über Leitungen verbunden werden. Es ist nicht möglich, zwei Elemente direkt diff --git a/src/test/resources/docu/static_en.xml b/src/test/resources/docu/static_en.xml index 62e804e76..3b0e28c7b 100644 --- a/src/test/resources/docu/static_en.xml +++ b/src/test/resources/docu/static_en.xml @@ -24,6 +24,62 @@ editing mode again by stopping the simulation. + + + + In the main window, the various components can be selected from the menu Components. + Then they are positioned on the drawing field. This process can be aborted with the ESC key + at any time. + + + As a first example, a circuit with an exclusive OR gate can be constructed. + To do this, first select an input component. + This can later be controlled interactively with the mouse. + + + After selection, the first input can be placed on the drawing surface. The red dot marks the wire + connection. Here, a wire will be connected later. Red indicates that this port is active. + So he defines a signal value. + + + In the same way, a second input is added. It is best to put it directly under the first input. + + + Thereafter, the Exclusive-Or gate is selected. This gate represents the actual logical function. + + + This gate can now also be inserted in the circuit. It is best to set it in a way that the subsequent + wiring is as simple as possible. The blue dots indicate the inputs of the gate. + + + Now select an output. This can be used to indicate a signal state or to later pass signals to + an embedding circuit. + + + This is also positioned so that the wiring become as simple as possible. + He has a blue dot, so has an input. + + + Now all necessary components are present. At next the wiring has to be added. With the mouse + directly a wire can be drawn. The blue and red dots are connected. Only one red dot may be + connected to any number of blue dots. Only the use of threestate outputs makes it possible to + deviate from this rule and to connect several red dots. + + + So also the two missing lines can be drawn. This completes a first circuit. + + + To be able to interact with the circuit, it must be started. The start button in the toolbar can + be used for this purpose. After starting the simulation, the color of the wires changes and the + inputs and outputs are now filled. A bright green marks a logical '1' and a dark green a logical '0'. + At the moment there is a logical '0' on all wires. + + + By clicking with the mouse, the inputs can be switched. Since the simulation is now active, the + output changes according to the current input states. The circuit behaves as expected like an XOR gate. + + + All components must be connected via wires. It is not possible to connect two components