Skip to content
Snippets Groups Projects
Commit a9b592ec authored by dgelessus's avatar dgelessus
Browse files

Support style preferences in :show

parent b4c549ab
No related branches found
No related tags found
No related merge requests found
%% Cell type:code id: tags:
``` prob
:help :show
```
%% Output
```
:show
```
Show the machine's animation function visualisation for the current state.
The visualisation is static, any defined right-click options cannot be viewed or used.
```
:show
```
Show the machine's animation function visualisation for the current state.
The visualisation is static, any defined right-click options cannot be viewed or used.
%% Cell type:code id: tags:
``` prob
:load Hanoi.mch
```
%% Output
Loaded machine: Hanoi : []
%% Cell type:code id: tags:
``` prob
:show
```
%% Output
:show: Machine is not initialised, cannot show animation function visualisation
%% Cell type:code id: tags:
``` prob
:constants
```
%% Output
Machine constants set up using operation 0: $setup_constants()
%% Cell type:code id: tags:
``` prob
:show
```
%% Output
:show: Machine is not initialised, cannot show animation function visualisation
%% Cell type:code id: tags:
``` prob
:init
```
%% Output
Machine initialised using operation 1: $initialise_machine()
%% Cell type:code id: tags:
``` prob
:show
```
%% Output
<table><tbody>
<table style="font-family:monospace"><tbody>
<tr>
<td style="padding:0">![1](images/Disc1.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![1](images/Disc1.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
</tr>
<tr>
<td style="padding:0">![2](images/Disc2.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![2](images/Disc2.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
</tr>
<tr>
<td style="padding:0">![3](images/Disc3.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![3](images/Disc3.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
</tr>
<tr>
<td style="padding:0">![4](images/Disc4.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![4](images/Disc4.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
</tr>
<tr>
<td style="padding:0">![5](images/Disc5.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![5](images/Disc5.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
</tr>
</tbody></table>
<Animation function visualisation>
%% Cell type:code id: tags:
``` prob
:exec Move
```
%% Output
Executed operation 2: Move(orig,dest,1)
%% Cell type:code id: tags:
``` prob
:show
```
%% Output
<table><tbody>
<table style="font-family:monospace"><tbody>
<tr>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
</tr>
<tr>
<td style="padding:0">![2](images/Disc2.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![2](images/Disc2.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
</tr>
<tr>
<td style="padding:0">![3](images/Disc3.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![3](images/Disc3.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
</tr>
<tr>
<td style="padding:0">![4](images/Disc4.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![4](images/Disc4.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
</tr>
<tr>
<td style="padding:0">![5](images/Disc5.gif)</td>
<td style="padding:0">![1](images/Disc1.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![5](images/Disc5.gif)</td>
<td style="padding:0px">![1](images/Disc1.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
</tr>
</tbody></table>
<Animation function visualisation>
%% Cell type:code id: tags:
``` prob
:exec Move
```
%% Output
Executed operation 4: Move(orig,Stakes3,2)
%% Cell type:code id: tags:
``` prob
:show
```
%% Output
<table><tbody>
<table style="font-family:monospace"><tbody>
<tr>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
</tr>
<tr>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
</tr>
<tr>
<td style="padding:0">![3](images/Disc3.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![3](images/Disc3.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
</tr>
<tr>
<td style="padding:0">![4](images/Disc4.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![4](images/Disc4.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
<td style="padding:0px">![0](images/Disc_empty.gif)</td>
</tr>
<tr>
<td style="padding:0">![5](images/Disc5.gif)</td>
<td style="padding:0">![1](images/Disc1.gif)</td>
<td style="padding:0">![2](images/Disc2.gif)</td>
<td style="padding:0px">![5](images/Disc5.gif)</td>
<td style="padding:0px">![1](images/Disc1.gif)</td>
<td style="padding:0px">![2](images/Disc2.gif)</td>
</tr>
</tbody></table>
<Animation function visualisation>
%% Cell type:markdown id: tags:
The image padding preference is respected.
%% Cell type:code id: tags:
``` prob
:pref TK_CUSTOM_STATE_VIEW_PADDING=8
```
%% Output
Preference changed: TK_CUSTOM_STATE_VIEW_PADDING = 8
%% Cell type:code id: tags:
``` prob
:show
```
%% Output
<table style="font-family:monospace"><tbody>
<tr>
<td style="padding:8px">![0](images/Disc_empty.gif)</td>
<td style="padding:8px">![0](images/Disc_empty.gif)</td>
<td style="padding:8px">![0](images/Disc_empty.gif)</td>
</tr>
<tr>
<td style="padding:8px">![0](images/Disc_empty.gif)</td>
<td style="padding:8px">![0](images/Disc_empty.gif)</td>
<td style="padding:8px">![0](images/Disc_empty.gif)</td>
</tr>
<tr>
<td style="padding:8px">![3](images/Disc3.gif)</td>
<td style="padding:8px">![0](images/Disc_empty.gif)</td>
<td style="padding:8px">![0](images/Disc_empty.gif)</td>
</tr>
<tr>
<td style="padding:8px">![4](images/Disc4.gif)</td>
<td style="padding:8px">![0](images/Disc_empty.gif)</td>
<td style="padding:8px">![0](images/Disc_empty.gif)</td>
</tr>
<tr>
<td style="padding:8px">![5](images/Disc5.gif)</td>
<td style="padding:8px">![1](images/Disc1.gif)</td>
<td style="padding:8px">![2](images/Disc2.gif)</td>
</tr>
</tbody></table>
<Animation function visualisation>
%% Cell type:markdown id: tags:
Text labels are supported.
%% Cell type:code id: tags:
``` prob
:load CrosswordPuzzle.mch
```
%% Output
Loaded machine: CrosswordPuzzle : []
%% Cell type:code id: tags:
``` prob
:constants
```
%% Output
Machine constants set up using operation 0: $setup_constants()
%% Cell type:code id: tags:
``` prob
:init
```
%% Output
Machine initialised using operation 1: $initialise_machine()
%% Cell type:code id: tags:
``` prob
:show
```
%% Output
<table><tbody>
<table style="font-family:monospace"><tbody>
<tr>
<td style="padding:10px">S</td>
<td style="padding:10px">T</td>
<td style="padding:10px">E</td>
<td style="padding:10px">E</td>
<td style="padding:10px">R</td>
</tr>
<tr>
<td style="padding:10px">-</td>
<td style="padding:10px">-</td>
<td style="padding:10px">A</td>
<td style="padding:10px">-</td>
<td style="padding:10px">U</td>
</tr>
<tr>
<td style="padding:10px">-</td>
<td style="padding:10px">I</td>
<td style="padding:10px">R</td>
<td style="padding:10px">O</td>
<td style="padding:10px">N</td>
</tr>
<tr>
<td style="padding:10px">-</td>
<td style="padding:10px">-</td>
<td style="padding:10px">N</td>
<td style="padding:10px">O</td>
<td style="padding:10px">-</td>
</tr>
</tbody></table>
<Animation function visualisation>
%% Cell type:markdown id: tags:
The text padding preference is respected.
%% Cell type:code id: tags:
``` prob
:pref TK_CUSTOM_STATE_VIEW_STRING_PADDING=2
```
%% Output
Preference changed: TK_CUSTOM_STATE_VIEW_STRING_PADDING = 2
%% Cell type:code id: tags:
``` prob
:show
```
%% Output
<table style="font-family:monospace"><tbody>
<tr>
<td style="padding:2px">S</td>
<td style="padding:2px">T</td>
<td style="padding:2px">E</td>
<td style="padding:2px">E</td>
<td style="padding:2px">R</td>
</tr>
<tr>
<td style="padding:2px">-</td>
<td style="padding:2px">-</td>
<td style="padding:2px">A</td>
<td style="padding:2px">-</td>
<td style="padding:2px">U</td>
</tr>
<tr>
<td style="padding:2px">-</td>
<td style="padding:2px">I</td>
<td style="padding:2px">R</td>
<td style="padding:2px">O</td>
<td style="padding:2px">N</td>
</tr>
<tr>
<td style="padding:2px">-</td>
<td style="padding:2px">-</td>
<td style="padding:2px">N</td>
<td style="padding:2px">O</td>
<td style="padding:2px">-</td>
</tr>
</tbody></table>
<Animation function visualisation>
%% Cell type:markdown id: tags:
The font name and size preferences are supported.
%% Cell type:code id: tags:
``` prob
:pref TK_CUSTOM_STATE_VIEW_FONT_NAME=Arial TK_CUSTOM_STATE_VIEW_FONT_SIZE=18
```
%% Output
Preference changed: TK_CUSTOM_STATE_VIEW_FONT_SIZE = 18
Preference changed: TK_CUSTOM_STATE_VIEW_FONT_NAME = Arial
%% Cell type:code id: tags:
``` prob
:show
```
%% Output
<table style="font-family:"Arial" monospace;font-size:18px"><tbody>
<tr>
<td style="padding:0">S</td>
<td style="padding:0">T</td>
<td style="padding:0">E</td>
<td style="padding:0">E</td>
<td style="padding:0">R</td>
</tr>
<tr>
<td style="padding:0">-</td>
<td style="padding:0">-</td>
<td style="padding:0">A</td>
<td style="padding:0">-</td>
<td style="padding:0">U</td>
</tr>
<tr>
<td style="padding:0">-</td>
<td style="padding:0">I</td>
<td style="padding:0">R</td>
<td style="padding:0">O</td>
<td style="padding:0">N</td>
</tr>
<tr>
<td style="padding:0">-</td>
<td style="padding:0">-</td>
<td style="padding:0">N</td>
<td style="padding:0">O</td>
<td style="padding:0">-</td>
<td style="padding:2px">S</td>
<td style="padding:2px">T</td>
<td style="padding:2px">E</td>
<td style="padding:2px">E</td>
<td style="padding:2px">R</td>
</tr>
<tr>
<td style="padding:2px">-</td>
<td style="padding:2px">-</td>
<td style="padding:2px">A</td>
<td style="padding:2px">-</td>
<td style="padding:2px">U</td>
</tr>
<tr>
<td style="padding:2px">-</td>
<td style="padding:2px">I</td>
<td style="padding:2px">R</td>
<td style="padding:2px">O</td>
<td style="padding:2px">N</td>
</tr>
<tr>
<td style="padding:2px">-</td>
<td style="padding:2px">-</td>
<td style="padding:2px">N</td>
<td style="padding:2px">O</td>
<td style="padding:2px">-</td>
</tr>
</tbody></table>
<Animation function visualisation>
......
......@@ -7,6 +7,7 @@ import com.google.inject.Inject;
import de.prob.animator.command.GetAnimationMatrixForStateCommand;
import de.prob.animator.command.GetImagesForMachineCommand;
import de.prob.animator.command.GetPreferenceCommand;
import de.prob.statespace.AnimationSelector;
import de.prob.statespace.Trace;
......@@ -55,29 +56,62 @@ public final class ShowCommand implements Command {
throw new UserErrorException("Machine is not initialised, cannot show animation function visualisation");
}
final GetImagesForMachineCommand cmd1 = new GetImagesForMachineCommand();
trace.getStateSpace().execute(cmd1);
final Map<Integer, String> images = cmd1.getImages();
final GetAnimationMatrixForStateCommand cmd2 = new GetAnimationMatrixForStateCommand(trace.getCurrentState());
trace.getStateSpace().execute(cmd2);
if (cmd2.getMatrix() == null) {
final GetImagesForMachineCommand cmdImages = new GetImagesForMachineCommand();
final GetAnimationMatrixForStateCommand cmdMatrix = new GetAnimationMatrixForStateCommand(trace.getCurrentState());
final GetPreferenceCommand cmdImagePadding = new GetPreferenceCommand("TK_CUSTOM_STATE_VIEW_PADDING");
final GetPreferenceCommand cmdStringPadding = new GetPreferenceCommand("TK_CUSTOM_STATE_VIEW_STRING_PADDING");
final GetPreferenceCommand cmdFontName = new GetPreferenceCommand("TK_CUSTOM_STATE_VIEW_FONT_NAME");
final GetPreferenceCommand cmdFontSize = new GetPreferenceCommand("TK_CUSTOM_STATE_VIEW_FONT_SIZE");
trace.getStateSpace().execute(
cmdImages,
cmdMatrix,
cmdImagePadding,
cmdStringPadding,
cmdFontName,
cmdFontSize
);
if (cmdMatrix.getMatrix() == null) {
throw new UserErrorException("No animation function visualisation available");
}
final StringBuilder tableBuilder = new StringBuilder("<table><tbody>");
for (final List<Object> row : cmd2.getMatrix()) {
final Map<Integer, String> images = cmdImages.getImages();
final int imagePadding = Integer.parseInt(cmdImagePadding.getValue());
final int stringPadding = Integer.parseInt(cmdStringPadding.getValue());
final String fontName = cmdFontName.getValue();
final int fontSize = Integer.parseInt(cmdFontSize.getValue());
final StringBuilder tableBuilder = new StringBuilder("<table style=\"font-family:");
if (!fontName.isEmpty()) {
tableBuilder.append('"');
tableBuilder.append(fontName);
tableBuilder.append("\" ");
}
tableBuilder.append("monospace");
if (fontSize != 0) {
tableBuilder.append(";font-size:");
tableBuilder.append(fontSize);
tableBuilder.append("px");
}
tableBuilder.append("\"><tbody>");
for (final List<Object> row : cmdMatrix.getMatrix()) {
tableBuilder.append("\n<tr>");
for (final Object entry : row) {
tableBuilder.append("\n<td style=\"padding:0\">");
final int padding;
final String contents;
if (entry instanceof Integer) {
tableBuilder.append(String.format("![%d](%s)", entry, images.get(entry)));
padding = imagePadding;
contents = String.format("![%d](%s)", entry, images.get(entry));
} else if (entry instanceof String) {
tableBuilder.append(entry);
padding = stringPadding;
contents = (String)entry;
} else {
throw new AssertionError("Unhandled animation matrix entry type: " + entry.getClass());
}
tableBuilder.append("\n<td style=\"padding:");
tableBuilder.append(padding);
tableBuilder.append("px\">");
tableBuilder.append(contents);
tableBuilder.append("</td>");
}
tableBuilder.append("\n</tr>");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment