From 06079325e3e3bac95f43470351034a8e846e39a7 Mon Sep 17 00:00:00 2001 From: lzz <964282212@qq.com> Date: Thu, 28 Apr 2022 12:52:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=AE=9E=E7=8E=B0=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E6=A0=8F=E5=8C=BA=E5=8A=9F=E8=83=BD=E3=80=82=20?= =?UTF-8?q?=E5=BE=85=E5=AE=8C=E5=96=84=EF=BC=9A1.=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=EF=BC=9B2.=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E7=9A=84=E5=90=8E=E7=BC=80=E5=90=8D=EF=BC=9B?= =?UTF-8?q?3.=E8=87=AA=E5=8A=A8=E8=B0=83=E8=8A=82=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E4=B8=BA=E5=B7=B2=E6=9C=89=E6=A1=86=E7=9A=84?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F=EF=BC=8C=E8=80=8C=E4=B8=8D=E6=98=AF=E6=95=B4?= =?UTF-8?q?=E4=B8=AA=E7=BB=98=E5=9B=BE=E5=8C=BA=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/libraries/lib.xml | 13 ++ .idea/misc.xml | 2 +- Mark-Map-SCAU.iml | 1 + .../scau/markmapscau/Control/Controller.java | 86 +++++++++++ .../java/scau/markmapscau/LaunchMain.java | 1 + .../scau/markmapscau/Model/Node/Node.java | 3 +- .../markmapscau/Model/Node/NodeArranger.java | 5 +- .../scau/markmapscau/Model/Tool/Tool.java | 20 +++ .../markmapscau/Model/Tool/ToolArranger.java | 142 +++++++++++++++++- .../scau/markmapscau/View/ViewerArranger.java | 79 +++++++--- .../scau/markmapscau/scau-markmap.fxml | 44 ++++-- .../scau/markmapscau/Control/Controller.class | Bin 3883 -> 6524 bytes .../classes/scau/markmapscau/LaunchMain.class | Bin 2748 -> 2748 bytes .../markmapscau/Model/Enum/ArrangeMode.class | Bin 0 -> 1154 bytes .../scau/markmapscau/Model/Node/Node.class | Bin 4411 -> 4439 bytes .../Model/Node/NodeArranger$1.class | Bin 0 -> 827 bytes .../markmapscau/Model/Node/NodeArranger.class | Bin 8364 -> 9304 bytes .../scau/markmapscau/Model/Tool/Tool.class | Bin 293 -> 854 bytes .../markmapscau/Model/Tool/ToolArranger.class | Bin 317 -> 4440 bytes .../markmapscau/View/ViewerArranger$1.class | Bin 0 -> 1631 bytes .../markmapscau/View/ViewerArranger$2.class | Bin 0 -> 821 bytes .../markmapscau/View/ViewerArranger.class | Bin 10654 -> 12798 bytes .../scau/markmapscau/scau-markmap.fxml | 44 ++++-- 23 files changed, 378 insertions(+), 62 deletions(-) create mode 100644 .idea/libraries/lib.xml create mode 100644 target/classes/scau/markmapscau/Model/Enum/ArrangeMode.class create mode 100644 target/classes/scau/markmapscau/Model/Node/NodeArranger$1.class create mode 100644 target/classes/scau/markmapscau/View/ViewerArranger$1.class create mode 100644 target/classes/scau/markmapscau/View/ViewerArranger$2.class diff --git a/.idea/libraries/lib.xml b/.idea/libraries/lib.xml new file mode 100644 index 0000000..11cd899 --- /dev/null +++ b/.idea/libraries/lib.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 3b67321..2283c54 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/Mark-Map-SCAU.iml b/Mark-Map-SCAU.iml index b99096f..636d0f3 100644 --- a/Mark-Map-SCAU.iml +++ b/Mark-Map-SCAU.iml @@ -25,5 +25,6 @@ + \ No newline at end of file diff --git a/src/main/java/scau/markmapscau/Control/Controller.java b/src/main/java/scau/markmapscau/Control/Controller.java index 092c6ed..48df7f1 100644 --- a/src/main/java/scau/markmapscau/Control/Controller.java +++ b/src/main/java/scau/markmapscau/Control/Controller.java @@ -1,16 +1,40 @@ package scau.markmapscau.Control; +import javafx.embed.swing.SwingFXUtils; import javafx.event.ActionEvent; import javafx.fxml.FXML; + +import java.awt.event.MouseEvent; +import java.awt.image.RenderedImage; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import javafx.geometry.Insets; +import javafx.scene.SnapshotParameters; import javafx.scene.control.ScrollPane; +import javafx.scene.image.WritableImage; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.Pane; +import javafx.scene.image.WritableImage; +import javafx.scene.layout.VBox; +import javafx.stage.FileChooser; +import javafx.stage.Stage; +import javafx.scene.Scene; import scau.markmapscau.LaunchMain; import scau.markmapscau.Model.Enum.ArrangeMode; import scau.markmapscau.Model.Node.NodeArranger; import scau.markmapscau.View.ViewerArranger; +import scau.markmapscau.Model.Tool.ToolArranger; import scau.markmapscau.Model.Node.Node; +import javax.imageio.ImageIO; +import java.awt.*; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.logging.Level; +import java.util.logging.Logger; + //controller调用写好的工具类,完成各项功能 public class Controller { @@ -78,6 +102,68 @@ public class Controller { MindMarkZone.setPrefWidth(viewerArranger.nodeArranger.getMinWidth()+EXTRA); } + @FXML + void openFile(ActionEvent event){ + ViewerArranger viewerArranger = LaunchMain.viewerArranger; + //返回从文件读到的哈希表信息 + LinkedHashMap nodeList=viewerArranger.toolArranger.openFile(); + System.out.println(nodeList); + //清除绘图区 + MindMarkZone.getChildren().clear(); + //根据返回的信息哈希表,读取每个结点信息画框和结构树 + viewerArranger.nodeArranger.setNodeList(nodeList); + viewerArranger.drawNodes(nodeList); + //画线 +// arrangeMode = ArrangeMode.RIGHT; + viewerArranger.getLayout(arrangeMode); + viewerArranger.drawLines(arrangeMode); + MindMapScrollPane.setVvalue(0.45); + MindMapScrollPane.setHvalue(0); +// 根据结点来读 +// for(int i=0;i< nodeList.size();i++) { +// Node node = (Node)nodeList.get(i); + //输出看看有没有读取成功每一个结点信息 +// System.out.println(nodeList); +// viewerArranger.newNodeByParent(node.getId()); + } +// } + + @FXML + void saveFile(ActionEvent event){ + ViewerArranger viewerArranger = LaunchMain.viewerArranger; + //需要获取一个保存的目标文件的绝对路径 + LinkedHashMap nodeList = viewerArranger.nodeArranger.getNodeList(); + viewerArranger.toolArranger.saveFile(nodeList); + } + + + @FXML + void exportPicture(ActionEvent event) { + //注意:在Tool类无法获得绘图区面板MindMarkZone,所以直接在这实现 + ViewerArranger viewerArranger = LaunchMain.viewerArranger; + //获取返回文件 + File exportFileChooser = viewerArranger.toolArranger.exportPicture(); +// String exportFilePath = exportFileChooser.getAbsolutePath(); + //以快照snapshot的形式读取 + //缓存保存字节数组 + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + //TODO:调整整个绘图区面板的的大小,适应结点数量和大小 + WritableImage writableImage =new WritableImage((int)MindMarkZone.getWidth(),(int)MindMarkZone.getHeight()); + writableImage = MindMarkZone.snapshot(null,writableImage); + if(exportFileChooser != null){ + try{ + ImageIO.write(SwingFXUtils.fromFXImage(writableImage,null),"PNG",byteArrayOutputStream); + ImageIO.write(SwingFXUtils.fromFXImage(writableImage,null),"JPG",byteArrayOutputStream); + FileOutputStream fileOutputStream = new FileOutputStream(exportFileChooser); + fileOutputStream.write((byteArrayOutputStream.toByteArray())); + fileOutputStream.close(); + byteArrayOutputStream.close(); + }catch (IOException e){ + System.out.println("Couldn't Export As a Picture!"); + } + } + } + @FXML void onChaneLayoutRight(ActionEvent event) {//重新布局,改为右侧布局 arrangeMode = ArrangeMode.RIGHT; diff --git a/src/main/java/scau/markmapscau/LaunchMain.java b/src/main/java/scau/markmapscau/LaunchMain.java index 9907d82..cb81d55 100644 --- a/src/main/java/scau/markmapscau/LaunchMain.java +++ b/src/main/java/scau/markmapscau/LaunchMain.java @@ -8,6 +8,7 @@ import javafx.scene.control.ScrollPane; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.Pane; import javafx.stage.Stage; +import javafx.stage.FileChooser; import scau.markmapscau.Model.Node.NodeArranger; import scau.markmapscau.Model.Tool.ToolArranger; diff --git a/src/main/java/scau/markmapscau/Model/Node/Node.java b/src/main/java/scau/markmapscau/Model/Node/Node.java index ab46257..cabec22 100644 --- a/src/main/java/scau/markmapscau/Model/Node/Node.java +++ b/src/main/java/scau/markmapscau/Model/Node/Node.java @@ -1,9 +1,10 @@ package scau.markmapscau.Model.Node; +import java.io.Serializable; import java.util.List; import java.util.LinkedList; -public class Node { +public class Node implements Serializable { /*数据域*/ private int id;//1.该节点的唯一标识号 private int parentId;//2.该节点所对应的父节点的编号 diff --git a/src/main/java/scau/markmapscau/Model/Node/NodeArranger.java b/src/main/java/scau/markmapscau/Model/Node/NodeArranger.java index 60584d3..55f62ed 100644 --- a/src/main/java/scau/markmapscau/Model/Node/NodeArranger.java +++ b/src/main/java/scau/markmapscau/Model/Node/NodeArranger.java @@ -106,7 +106,10 @@ public class NodeArranger implements NodeUtilInterface{ } @Override - public HashMap getNodeList() {return nodeList;} + public LinkedHashMap getNodeList() {return nodeList;} + public void setNodeList(LinkedHashMap nodeList){ + this.nodeList=nodeList; + } public double getNodeWidth(int depth){return WIDTH*scaleList.get(depth);} diff --git a/src/main/java/scau/markmapscau/Model/Tool/Tool.java b/src/main/java/scau/markmapscau/Model/Tool/Tool.java index f16ce7e..70b29d4 100644 --- a/src/main/java/scau/markmapscau/Model/Tool/Tool.java +++ b/src/main/java/scau/markmapscau/Model/Tool/Tool.java @@ -1,5 +1,25 @@ package scau.markmapscau.Model.Tool; +import javafx.stage.FileChooser; +import javafx.stage.Stage; +import scau.markmapscau.Model.Node.Node; +import scau.markmapscau.Model.Node.NodeArranger; +import java.io.*; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Properties; + public class Tool { + //没用到,因为不会用这个方法... + private static Properties properties = new Properties(); + private static InputStream inputStream = Object.class.getResourceAsStream("/FileProperty.properties"); + static { + try { + properties.load(inputStream); + } catch (Exception e) { + e.printStackTrace(); + } + } } + diff --git a/src/main/java/scau/markmapscau/Model/Tool/ToolArranger.java b/src/main/java/scau/markmapscau/Model/Tool/ToolArranger.java index ed3c7b8..edf85b9 100644 --- a/src/main/java/scau/markmapscau/Model/Tool/ToolArranger.java +++ b/src/main/java/scau/markmapscau/Model/Tool/ToolArranger.java @@ -1,5 +1,143 @@ package scau.markmapscau.Model.Tool; -public class ToolArranger { +import java.awt.*; +import java.io.*; +import java.util.HashMap; +import java.util.LinkedHashMap; +import javafx.embed.swing.SwingFXUtils; +import javafx.scene.SnapshotParameters; +import javafx.scene.image.WritableImage; +import javafx.scene.layout.AnchorPane; +import javafx.stage.FileChooser; +import javafx.stage.Stage; +import scau.markmapscau.LaunchMain; +import scau.markmapscau.View.ViewerArranger; +import scau.markmapscau.Model.Node.Node; +import scau.markmapscau.Model.Node.NodeArranger; +import javax.imageio.ImageIO; +import javax.swing.*; -} + +public class ToolArranger implements Serializable{ + //打开桌面路径 + private final Desktop desktop = Desktop.getDesktop(); + + /*导出为.jpg或者png图像保存到本地*/ + public File exportPicture(){ + //选定保存路径,返回 + Stage exportStage = new Stage(); + FileChooser fileChooser = new FileChooser(); + fileChooser.setTitle("Export As Image"); + fileChooser.getExtensionFilters().addAll( + new FileChooser.ExtensionFilter("JPG","*.jpg"), + new FileChooser.ExtensionFilter("PNG","*.png") + ); + File exportFileChooser = fileChooser.showSaveDialog(exportStage); +// String exportFilePath = exportFileChooser.getAbsolutePath(); +// System.out.println(exportFilePath); + return exportFileChooser; + } + + /*保存思维导图文件*/ + public void saveFile(LinkedHashMap nodeList) { + /* + 1.先读取nodeList(所有结点的所有信息) + 2.把读取到的信息写进一个可自定义后缀的文件 + * */ + //TODO:实现自定义后缀 + Stage saveStage = new Stage(); + FileChooser fileChooser = new FileChooser(); + fileChooser.setTitle("Save the MindMap As a File"); + FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("TXT files(*.txt)","*.txt"); + fileChooser.getExtensionFilters().add(extFilter); + File fileSaveChooser = fileChooser.showSaveDialog(saveStage); +// System.out.println(fileSaveChooser); + //TODO:手动创建弹窗窗口 + if (fileSaveChooser == null) { + //当没有选择文件时,提示“未选择文件” + JOptionPane.showMessageDialog(null, "没有选择文件"); + }else if(fileSaveChooser.exists()){ + //当文件以存在时,则删除,覆盖保存 + fileSaveChooser.delete(); + }else { + //保存 + try { +// String saveFilePath = fileSaveChooser.getAbsolutePath(); +// System.out.println("保存文件的路径"+saveFilePath); + //根据要保存的文件创建对象输出流,序列化输出 + FileOutputStream fileOutputStream = new FileOutputStream(fileSaveChooser); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); + //将容器里所绘制的利用对象全部写入选中的文件中 + //注意:终端输出没问题,但是用IDEA保存用UTF-8在.txt是以二进制编码输出,所以打开文件会出现乱码 + System.out.println(nodeList.values()); + objectOutputStream.writeObject(nodeList); +// for(Node node:nodeList.values()){ +// System.out.println(node); +// objectOutputStream.writeObject(node); +// } + JOptionPane.showMessageDialog(null, "保存成功!"); + objectOutputStream.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (Exception e){ + e.printStackTrace(); + } + } + } + + /*打开思维导图文件*/ + public LinkedHashMap openFile() { + //TODO:判断当前是否为空,如果原有思维导图,则提示是否要保存,再打开 + /*其实一共就做两件事: + 1.获取打开路径 + 2.判断当前面板是否有思维导图 + 3.根据nodeList的信息画出每一个结点 + */ + LinkedHashMap nodeList = new LinkedHashMap(); + Integer isSave = JOptionPane.showConfirmDialog(null,"是否保存当前已有思维导图"); + if (isSave == 0){ + //这里有点问题 + //获取当前链表信息,再调用本类的saveFile() + saveFile(new NodeArranger().getNodeList()); + } + if(isSave == 1){ + //清空绘图区里的东西,或直接在controller实现 +// ViewerArranger viewerArranger = LaunchMain.viewerArranger; +// viewerArranger.cleanAnchorPane(); + try { + Stage openStage = new Stage(); + FileChooser fileChooser = new FileChooser(); + fileChooser.setTitle("Open a MindMap"); + FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("All files","*.*"); + fileChooser.getExtensionFilters().add(extFilter); + File fileOpenChooser = fileChooser.showOpenDialog(openStage); + System.out.println(fileOpenChooser); + //TODO:手动创建弹窗窗口 + if (fileOpenChooser == null) { + JOptionPane.showMessageDialog(null, "没有选中文件"); + } else { + //看一下打开的文件路径 +// String fileOpenPath = fileOpenChooser.getAbsolutePath(); +// System.out.println("打开文件的路径"+fileOpenPath); + FileInputStream fileInputStream = new FileInputStream(fileOpenChooser); + ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); + //将读出来的对象转换为哈希表类型进行接受 + nodeList = (LinkedHashMap)objectInputStream.readObject(); + System.out.println(nodeList); + //遍历文件里面的结点信息,将每一节点信息取出来保存 +// for(int i=0;i< nodeList.size();i++) { +// Node node = (Node)nodeList.get(i); +// ViewerArranger drawNode = LaunchMain.viewerArranger; +// drawNode.newNodeByParent(node.getId()); + //输出看看有没有读取成功每一个结点信息 +// System.out.println(node); +// } + objectInputStream.close(); + } + }catch (Exception e){ + e.printStackTrace(); + } + } + return nodeList; + } +} \ No newline at end of file diff --git a/src/main/java/scau/markmapscau/View/ViewerArranger.java b/src/main/java/scau/markmapscau/View/ViewerArranger.java index e74792c..54eff12 100644 --- a/src/main/java/scau/markmapscau/View/ViewerArranger.java +++ b/src/main/java/scau/markmapscau/View/ViewerArranger.java @@ -8,7 +8,7 @@ import javafx.scene.input.MouseButton; import javafx.scene.input.MouseEvent; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.Pane; - +import javafx.application.Platform; import javafx.scene.shape.Line; import javafx.scene.text.Font; @@ -55,6 +55,7 @@ public class ViewerArranger { this.pane=pane;//结构区 } + /*以下是思维导图的绘画工作函数*/ //画出单个节点 public void drawSingleNode(Node node){ @@ -114,10 +115,11 @@ public class ViewerArranger { this.anchorPane.getChildren().clear(); //遍历节点链表,画图 this.nodeArranger.deBug(); - this.nodeArranger.getNodeList().forEach((key,value)->{ +// this.nodeArranger.getNodeList().forEach((key,value)->{ + nodeList.forEach((key,value)->{ this.drawSingleNode(value); }); - drawTree(); + drawTree(nodeList); } public void newNodeByParent(int parentId){ @@ -185,7 +187,12 @@ public class ViewerArranger { } } for(Line line:lineArray){ - this.anchorPane.getChildren().add(line); + //对绘图图进行修改时,不能同时进行 + new Thread(()->{ + Platform.runLater(()->{ + this.anchorPane.getChildren().add(line); + }); + }).start(); } } @@ -228,7 +235,12 @@ public class ViewerArranger { } } for(Line line:lineArray){ - this.anchorPane.getChildren().add(line); + //对绘图图进行修改时,不能同时进行 + new Thread(()->{ + Platform.runLater(()->{ + this.anchorPane.getChildren().add(line); + }); + }).start(); } } @@ -242,11 +254,16 @@ public class ViewerArranger { Node parentNode = this.nodeArranger.getNodeList().get(0); for(int id:parentNode.getSonNodeList()){ Node node = this.nodeArranger.getNodeList().get(id); - if(parentNode.getNodeLocationX()>node.getNodeLocationX()){//当父亲节点的X坐标大于孩子节点坐标,就是左侧布局 - hasLeftChild =true;//左侧布局就有左孩子 - }else{ - hasRightChild = true; - } + //对绘图图进行修改时,不能同时进行 + new Thread(()->{ + Platform.runLater(()->{ + if(parentNode.getNodeLocationX()>node.getNodeLocationX()){//当父亲节点的X坐标大于孩子节点坐标,就是左侧布局 + hasLeftChild =true;//左侧布局就有左孩子 + }else{ + hasRightChild = true; + } + }); + }).start(); } connectLineRight(0); connectLineLeft(0); @@ -292,35 +309,47 @@ public class ViewerArranger { //zzzz /*结构区绘图*/ //每删除、添加节点就遍历链表并画图 - public void drawTree() { + public void drawTree(HashMap nodeList) { //1.先清空pane this.pane.getChildren().clear(); //2.遍历节点,画图 - HashMap nodelist=this.nodeArranger.getNodeList(); - System.out.println(nodelist); - TreeItem treeItem=new TreeItem<>(nodelist.get(0).getContent());//该节点为根部节点 - treeItem.setExpanded(true); - goThrough(nodelist.get(0),treeItem);//从第一个节点开始遍历 - TreeView treeView=new TreeView<>(treeItem); - treeView.setPrefWidth(this.pane.getPrefWidth()); - System.out.println(this.pane.getHeight()); - treeView.setPrefHeight(this.pane.getHeight()); - this.pane.getChildren().add(treeView); +// HashMap nodelist=this.nodeArranger.getNodeList(); + System.out.println(nodeList); + //因为直接对Pane进行了设置,直接刷新了UI,但操作只能在JavaFX Application Thread(单线程)上 + //调用方法在任何现线程执行场景元素的操作,可能会出现结点序号错误的的情况 + new Thread(() ->{ + Platform.runLater(() ->{ + TreeItem treeItem=new TreeItem<>(nodeList.get(0).getContent());//该节点为根部节点 + treeItem.setExpanded(true); + goThrough(nodeList,nodeList.get(0),treeItem);//从第一个节点开始遍历 + TreeView treeView=new TreeView<>(treeItem); + treeView.setPrefWidth(this.pane.getPrefWidth()); + System.out.println(this.pane.getHeight()); + treeView.setPrefHeight(this.pane.getHeight()); + this.pane.getChildren().add(treeView); + }); + }).start(); //3.遍历完后要全部再重置 - for(Node node:nodelist.values()){ + for(Node node:nodeList.values()){ node.setIsTraverse(false); } } - public void goThrough(Node node,TreeItem treeItem){ + public void goThrough(HashMap nodeList,Node node,TreeItem treeItem){ for(int i=0;i(this.nodeArranger.getNodeList().get((int)node.getSonNodeList().get(i)).getContent()); + TreeItem item =new TreeItem<>(nodeList.get((int)node.getSonNodeList().get(i)).getContent()); treeItem.getChildren().add(item); item.setExpanded(true); node.setIsTraverse(true); - goThrough(this.nodeArranger.getNodeList().get((int)node.getSonNodeList().get(i)),item); + //打开时:这里需要通过得到nodeList直接画树 + goThrough(nodeList,nodeList.get((int)node.getSonNodeList().get(i)),item); } } + //清空绘图区 + public void cleanAnchorPane(){ + this.anchorPane.getChildren().clear(); + } + //不会用迭代器,随便了反正也没人看。 // public void goThrough(Node node){//节点和展示的第几个 // this.sum++; diff --git a/src/main/resources/scau/markmapscau/scau-markmap.fxml b/src/main/resources/scau/markmapscau/scau-markmap.fxml index 5f45269..bab44b6 100644 --- a/src/main/resources/scau/markmapscau/scau-markmap.fxml +++ b/src/main/resources/scau/markmapscau/scau-markmap.fxml @@ -122,22 +122,34 @@ - - - - - - - - - - - - - - - - + + diff --git a/target/classes/scau/markmapscau/Control/Controller.class b/target/classes/scau/markmapscau/Control/Controller.class index 3d6b30b2a6005a018354688115a51bbd36db2fd5..272ef9875d1c96f9001a9711e3355b25eab3795e 100644 GIT binary patch literal 6524 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 H+5Gem2&ofY diff --git a/target/classes/scau/markmapscau/LaunchMain.class b/target/classes/scau/markmapscau/LaunchMain.class index 41c66e13417bfaa86c411363f1eca5b597346b44..5b0d382c38771749becd7f09257c43fc53f583cd 100644 GIT binary patch delta 101 zcmdlZx<_=wK@LXY$%iV!yJpQB z_sy#BbFXKMNCFJ1fhb~R>$SZmL%u#^ZdoM94J1Tz^v%Kki>8QNF<{7Y)x%~(1g;vG zN0LEXYgOxqHH)F}cIF;BQn;=mXm!l zi%QoG2nsVRXspcq_S0aGg5+Vl3k{+cc6#~hO z5Fa6;6we_`_&j;5WW`UPVD2lfog?*`JW?k8$K;(t_zczq{3aqYs;5}t42$Pr0w4JY zzd;dWiozolZg-Kc!4#w8vBZ>;x)4q3{BT3AOERJ;;Yyq5LYsL?1W20`N*!~;daXfm)PJ21?U-C2ye@B2PY z@)uHNQWZ31s`3N!qf&Xlo>>^j-h`@|?&;&}r@wRg`=1AY0XT}E)2Ksz3JoS2(PUud zv^8(#T+5rvotv1pCj$dbM;*@z`V7=(x<^~kjFuGACYHf8u(>>GRdTadX=c`%Q~k4k z!FF@Qe5;p%RZe-ZWZkk0{jNJublgJ8_6!)~BB|BH3am7cn)EAPV3#+ zDWtIm9Vx6eu@37W;u{G{jyJ{4^Ojq&&)qbzCX??TTDm~EpjQNLH1QZ7R|oMNkGE>q zFWh8eGqxCL@pywPP9Z3gX;4ILHL*=*(lT?}cBYC!3Ofv}RtHuB$IT5n-i%!sa>_v( z+fgsOx=m!U%fPa-?}<`m(m+Recw&yMHx9_qDR1&3;2*fX$6k&U6q-mCXPKaGbS^~ zO*}0#D`d|J*PomTZ!B{sObp0e>*Ac!QyM36DuriEoJQV2+mapfRQZ$`x7qQ6Q8AYC zrF@#go;5Kf%NwU`UO+~MO`OAdTACwDV^w0cX;7A2G%=!EGA5IkO^nK9d$d1BFVj~| zjLCFcd^);7Gp>pDpHnA|w=+O)n0Ov97+5=N&DaCJN9A2{f+Bn6!198!fsL8`Apge4 zHJ+EkMAbhWKR05R9LsfHwkBLEpk>6F@~ogzVt<#`9gfC4G*V%2UoYcPPV62v&@e#b z&_;ASd$=+?VV5q2vfIVV?x@A{cvdvn5ELEqb`AYs$nuC~RL=Rxsl<2VUkwa09^T9) zgW_WBaz5&=WH({7hKzzu&WzC^BNK$K#qVfy_1lc*qcAk1>F6`fS=u3t=G7UE`WZ0X zvbbhVCZ^CRH^@y|DQF}fo$IQ?lJRL^PmQTswrVB7L$ZY^A4WC}m>CxUxp#gsvgx_} z7A3|!m;M?bj8xE}HfpkKsGBIIhDwM&I^s&GdX+$|iYcc$PSXZ{HO;0+{7PxkKIJIy z6~4U^;tbRiz8{o>k~MeM4vK!EyrK!8r||{8OyMhupRWyUTgnEGH}B8bxln8vQm3rR zz%Si4a3@X|EewU8w!DICm$wc1{!C@AHwGJ7GB)zi#!I*7Y|Zj(vGrl0>y3L*Bx1mF z-4Q3Sdz(TGl$%vKp$E zVU+Wx@m1#HM>7SNep*RX)D?4Q^^b{{(zkddXk<(2zQ9WcfBUj8Zp z4{pFlv=F!zUA*vCbh31BWl8SF4qkjGjv#|ReigYo%hg1HgK4(X6BQY%Czr2NJyAyk zM_H^Q_#9hV)hM99uu}&?Xi|fFm1r|u5Q#Q0qusnexp|*OW65>z|2=O+7V1%`=JgPrNr+Q5ASB2H;uc=wTO2$dS{r^%_(Wa{ zaT_m3o0pi zg?LL35zEzKwi>MgA>~CN_*0(m&>l;PqA%&0V_Jx}^`6<6)WmoV2&rKL!G9Pu5dBGr z>sp9+^bq|?h#NH^q@W7KGOamMNpo0Qh|LMm8GcGo=&vg9W@ZpJvOVZr761@oce_-HX#6sQ=fA6?mdIK$^Gp9_30@wvih zoPn2mfa}0g40j^M9n<_JGDDdzmb0q0u`sTIPi0TX;Jc!zs>jFNQHM|PDcfeA_!*yX Q@EyO>?0t_r_zCO(1+d2!82|tP literal 4411 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 literal 8364 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 diff --git a/target/classes/scau/markmapscau/Model/Tool/Tool.class b/target/classes/scau/markmapscau/Model/Tool/Tool.class index 34f4dfaaaf47603579a984643bcd636c3dec8dfe..460cc9f142a2d0f171325d079b63f7c074475d71 100644 GIT binary patch literal 854 zcmah{ZEMp|6n<`+E$LlmXV-4^rL&zn+p3M4)Nkz~{yO$*lQo62K+omtQ;?r78?K8o2M^fgVaJB6NgCcxS^{ zc#_iY6OZH=s6f7*PDU~wijhy2@*wnte=K69_1tKtpA_-1JNVx?dJJ~o^YeK#%9nST zk+i@@Ve1*10}{@6oBg!SPH#Y^zAQQnxLe2Llx_yuY+-2D#w zO=pJPbBe8?js|@N=qfujFc3UW04uajb=sr`NljD<-1ee+6DA(x3B^98--7YcLc^qV JT~ZCWe*wLr!Cn9W delta 93 zcmcb{wv>tM)W2Q(7#J9A7z8GAnM_Pqo_v5YYH}cxlrTF36HuIife{E<8Q6d%=j1*n fF?BAW7>LKfz|6o6BzeGWRv^s_R?P<_nHcy1S&9p< diff --git a/target/classes/scau/markmapscau/Model/Tool/ToolArranger.class b/target/classes/scau/markmapscau/Model/Tool/ToolArranger.class index 1a1d818011221a8202490e0dba9842990462e5ce..58cb425013b1491a45eaaf0a77c3060297584854 100644 GIT binary patch literal 4440 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 delta 125 zcmcbiw3mtN)W2Q(7#J9A7z8GA>9esja4<4xOuon^K6xL9;N(1xl*s}-^1%#>4D1X{ zKxGUJj6lfBzy>5afjoUMpMil@YdZtuMxX!_0~e44Ni#4oGjIb*9x$5~Nb>@Dj0}80 Il8J#I0A5uNO8@`> diff --git a/target/classes/scau/markmapscau/View/ViewerArranger$1.class b/target/classes/scau/markmapscau/View/ViewerArranger$1.class new file mode 100644 index 0000000000000000000000000000000000000000..24fde3daf2667fa3c36ed1eb06c2ea3ca630b195 GIT binary patch literal 1631 zcma)6TT|0O6#lj?1VXSCkc-?ZR%{Cr@vcR*+=Q`3Zo>?YI)-$mfsimsiu@aWaeT&s zI^%=->~C@$&xXJNElOsxdvf-iv)}ja$^QED?K^-GOxGiXu!M+$8q_lMySi3VH#KKt zQ`_?GWrM$0#lW4c<7n0zcM`)4wO-M16E`U%cb=4t*r!fGJ!FQuZOu$rc7ZeWRc7aD z!Bl5y^oNWL1&tCeD2O7)5L?%_HPs{_>WkHNu6u-K#IOu+lp&l$y4)o$>o#V+@jq2HSUd-JkPcWOfr=_EBqjaXtbk4!es@W=wj&k zcQ}JIw=k2>F03%b|6jTXy%ORIuAq-0aUNL-zspS$VYal%z-DA5a7{wLg6l}qo)tAt ziOWz!{AUWjbbfYP!2kvsWS9Kzc+qz0lp@KOLf8<76sVv>uPtg;!4&70Jd>6$a3-}Z z;TA(jAQTs>tNzloU&3K{o~&$wDqWYUj5@`JHY2R#eq%**hQ&#hRqiZls{(3M&ek<^ zS#u2W9XKPRjTz2|ATgXF!557+OY=$&m6SJ+byDwtlwfG^!wg&=9547kT@xZ=%l5awrf~x zdF~bMf`SQ55(R3DCBEYwq)t@Pt>R2h;?Zr(b8J&RD8kJG!Ks_&t~YJF^gAjumc^ZM zQ*&MJB2F!*fMFP+SWMg<0L^q!(cKlMH;UU7afhsNnte}tU>__!xDP4)6%D(z6vAB^ zYpD#df_pT!l20Vx#{-&$B}y_pBs+u{S=8h-io!pF!t(=VT+9!CLE9%pcGG)cd*}{* zM2j%#mCCrfkM7S%2Wx@v13FGd2!EuElzEzw5pU_1(U5|UM<`+% z2IgS;(BnSK`6KA_6p&{r~^~ literal 0 HcmV?d00001 diff --git a/target/classes/scau/markmapscau/View/ViewerArranger$2.class b/target/classes/scau/markmapscau/View/ViewerArranger$2.class new file mode 100644 index 0000000000000000000000000000000000000000..2f4a1cd66abc4b149504281c4a99cbc2005e5630 GIT binary patch literal 821 zcma)4+iuf95Ix&CabjHJUZA1e3Yav33QLg?4^&81mC%S>Boe|ypEk~_aqHOC+HU`V zU*Q>$5JIRQz(*lwR}m$Ghf4O&objHW<1_p7*Y^tmyV$X?gq#V(Mji!*?ZoGqH{W7^x(q5KOM9G9@;~H#+>OZ_uAkICt z2sv*j-3CL$9h?WLKkf2US8?3GB)VFnt0cM$5|<9!CHlSVHp*}q@^9O(4~7i&E2~xJ ztlC(^I)fR@Nf7anAy=!nP26PIJmzQI3&|6&7Y{Oj+6qKCX-XMO)wg2fmg;MCnysNK z+_rH?7xvx_`zG!&IF~2%$H&4?8H&4p7(_w(N;eu2eP8=s?gWwOWwWu6Lp}~^0;`?a z=i!LUK;e0Dd607dglw8)YY=DB7p*`s))tL@rn)nfn~@*JNe~@%MLLZqCh82@<%Nsz zpUIHgo=DPzI3eM7JBozd4|$S^#Mz=j-=!9BS7eA~o zFh8qj`72h8{zn*ZG~6JVzl56v3mSeRdI{^;zztOJ2vv&PXy7@;93Ila1$8_t(>IXy mfJ^TR3hzzY(fzZ)z+=6kN^}sa(fUMJYIsV~(z+>eioXHm1;i=< literal 0 HcmV?d00001 diff --git a/target/classes/scau/markmapscau/View/ViewerArranger.class b/target/classes/scau/markmapscau/View/ViewerArranger.class index 5ee4985fe71d7d9ee718ba12e535d58ba25f9ec8..fe5cb04987d1d770f9ba87c96a1a90b16e06d922 100644 GIT binary patch literal 12798 zcmcgy31C#!x&HsjY?+*p5CM|_3K%6!0ue+Mq6mZl!EBHih}h~dxk<)MX5uU$F4d~F zYOAentx8?7HP)rAECU2{`2q4 zIrHSlLk|xnOchbTFJ9B{i}dyT26Ve4U~H_BhY?vEi2#lfVJhtPMOO!UdSi9HfnXOC zpDA$0C@K;l3Zsoiw>c;SV-=Oq5ls0}BM20lr#u+{^1%~UjtYM2V5My%a9Kej9o z1ddB956Se}8QFl7*qA_!U>Cs8ra3M;LD5_~5p*9)j7+XTw5~TC1p-jVGd*+?o$R9d ziWX2U(@~$yHjvO`m}(X=LQKb2rV#XlgHW|VI248AM~%n^-}<1@7>LGd3+Pl@=%UjU zEuzItQ>{HlUjfv7UC{FJm74raYpR`briqHNYLEi zp_O#Hiy9R*QFE5Xw#6cWP!D*t!554hE!~1bgGr)^ggHTTy;adFT8-s^ELPGO_WOkV zPQA%e*`!@|I75Ie9RG3$ds*VsxjO7Eu(H zy_ChYHG!^JuPlix+8|4mwInrgzM@TZ0i<9J)P;lb{!m>w9)kC_LjyD-7b&`!K4YTU z5r_t$-ZFaTj1CuF$}}O%bYd{`nq_bv&P5dv7ydkS30)yU;#|SyN=2Wit4!v}G^UBB zyiz_Z1))|pxQ6Mt5w@KpR8-9N(AD%s+2>lO({s3(9E)lX!x3o~d`Z!l>3XKIU{p(} zDIAX)b-{qY&wynemBQcHV1!~d_3~Wd3v~sJ2uKho@Kr@$lNjmn2Mu4uLtm#GU38P8 zo29dI1bL%GAgu2)mc)BXi0K=OZlPNdVtszUF#s+uKTL`(osP!>!J6)PNIR~YB>}OY zcs~&K(Cu`Gi|$mkh3*2uBHS81dxbCB+vFR7=(@v^dY`|SX_{qfqe2q}a?`gI-A#i` z?yiV$qeMd}P3B4qGMJT5-==$Abf2R8=>e$52-Y2jpD@eX)A4W(RM{UD3R?NH$`Ix(uh0+Qdqj_Ndn=TR(Q-9Y~Aqn*Onj^ z+9i&u*+WCL$3+h*`o6e`BQ*Q6XJgX=SsM%qB0o^{h#=xY(qY65!No;COs>?7m8ic- z0*Z(BO2+jVbS5npgaCg$f~XX$X$*v*k=m8Qo3Dx+al=FVBpy6LKX%cR;+21rl&Q|t z8bUEc=UEf7-M!ThZP-UYRrIukFGsk$+ko=!qn|1IxddHA)cXE`*e2=wrJ`TavyvDf z9x{!y0%TSQ6Fh#S=(iG=+~7cm1RG((?-l)l{%8hS9a2E7IEGARHHk~Aiie)37hLow zMSrIMLNrM8BWoVS24@HtVyRn3dTON@!w{TJFDZJNUV(ODVOuzqMyE6fIy%gI=r!8! zqSqC@A(V|9j*CnJW1@iz4Cf;45{X>&j)ir~??rok1BS>D%IK!QDEceChfH?u+4XDN z>zkLhA(KULeVhI+KJFjje&tg9iG}T@g@VJs6n#J+3TtCV#1{)k#LO~T*kJV|F*!gV zyXYWNXpv({8sp>?fJbiK3}=qHY*U=4g&RT#ESepPo$P|v`g;w3U!&3EgUp?k4ZsJP z)n59Si#=IZ)ZPn2=_;W-R*DOG3YkvurmI|I_OqU)mh9i8{FgJcU!6qY5NuetI zo~U?|c!^?IdkER4Xo)V1Wbi1(N6TPQ#-LP1`8<`Ux%e2x6@2XBhS51pb1K?424do6 z2XvKIkx`{pXre0WL-GC!s~V9WCfm9O4^QVx7tc`a6+4(d3PWUVP1aghIMNje`GWZX zP_1|-&w{sE-LQN`JJXDjKHcQ&a4_&yU+3c$&t{NN=rb!wGpk~%&LPB6z#s?#jk$_X z6g2FO^~>6&<0Qo=>yE`|w6_S?7bvb3-O1$o;&?3V;ZspqFsj~CF{_k$XVgXr61)fz zg5gzjrurQvfLtdExRj|S2kyDTnyEXPp?VbKpxb$w;^hn(Id#5|q&eHUArG`_n%V+h zDb{>?mS0PcBgf??#m$l*N=DicZIAdi7?G&q;#Q`~SuB8l>Y7qg063a{I4xcc56Z2guJf?L-7fA? z+$*kWqQxEGzyOj-T}0Ki27NK)S4cSAaFC5YxNH|AcORXTq6;1lFzN*dW1W?hr4%m* zGSE>DD;`Kz3sOgzMF9sWE~8P!F&WJVzmpZl5O0vQ=3Hz>;S%t#w1o0mm5@i=rkgKP zd@+N~V5Np%hi2f64(Fn|W^hFKA$tNfx1eSwM@N`* zvz!;Qmu$K=4J2t>Idb|b8M`I3*F)315L%Pp7U&82V(|z#*_6Zj|EG{eWJOkav1F5} zq#$}gYpWc|xT0oy35&5>bq6WHHkt5J_DhieRgu({I9G@{c1<;gME*@!F!<{8_f&!nJBbfP% zR!pH(Y^GoH#||NYP?yOPwCvqM9}dav0bLLtoh^-&g;>E22*N3o8x^7sc1+j(A1c?O zRr?UwY3-Ebh)~)=K_!B|{`FnH3K61s!itk~^qpi;C4qA+(IP3Cf!sLy{g>%w?KniX@l1i~>}zJOQ>ik|>>!S0MWw zb!;|#bq0rpf@sC@Oeb5Kk!7ui7O|k1*Jr@C96FDKTu$-B;`E)1r!5?h_zm;O{Rk07 z`d($0SQ&zAvk{Fo84^jL^~FmNT%)mwZ=lJD^@h8mMNa;uhkwP-y7<>P+~D8f)<&DB zMl%rF5biT-%&e`V&YwtQ=FxUpGt#$M7V9-28{|Ea1;Nd^=b1r^f@eBMXI(WZzn=Qf)0)M>;f%-{G})WUr>tSU_LKNi%s5P$o=K6#)EsQ?D01*ilJ~u= z_{aQYF+b_%*N~{b{Qa-KeD$@jZMkp%rB}bS>w#A{U-8;Cm%Vz~?w58AE#P8uV%ZzA z>`ldw^JDmWTfW{=yib4qMZW&3crX7DV}FyczbpPe4dUy4`TD2ghxOM7^7WzONA=7D z^7XOe9|;s2PMzI0R{R7%hI8)*IG#vd&=-vwQJ2k*jC6#YbE&7xhWbw544EpL#Y;<* zQA3%!OjB`cV?ze3a6F5vMzmNi3-uecWQXss)xB=-o-|weKL8JPN(G9aQYC+Ck&I)jO!v zJ97t3@|Iy_inq+MgDSjb&K*?wAQsyADm-UlbHa^<9T$B0KxYii#O8CTlun?@xMZ6~ zCsHNN!@QI5buwR#*(=PA`5JlvUqC?J55Q@yz1S!d!{vlcb>)@r#5Jx1{jN|km|7OQjOab z6GjTRN&E%=A{ghS34ASI2dck>b#CI1sL+Lr36`r$3xn5zn?T*Lhn95iq@{vG{Vr<2 zt7R9p;niWjI`JB!vxu6jXC~;JYK(Lxs7Kx{3F?z~XM#fVJ}*JBYI}k<%HzW7J#DLT+r3rPLT%Je zXHX}tp&mSA6xOtRP3%*&Z?I^0Q^=$p&>H#6d_8!?{1qC+exgd7zQiQ^-bWc+?(3qH@@1!+$jF#|cKyx3sV~w z@@61~oDDjSD+K^#oVSa%K?Mv za!BS1K)w=I@_Cv>S3#?<&LF(f!ebKfligYC9C)6OCJyvWH1ZnYtx93;m+YavP`5{$ z_Rv1Of7Cp4;x2kTK~JrLay_$|kH_m5kI)kd`t>}!DVE=jx9cg-Jwme=ILaIedNDz- zZYJm8!KdY`eltA5c5>;Shoq-v9KG2mjZQyW;rUK!cgf>C|9tlzdb_jKUFs}#Z>4wr zrOuu7w*?;aV}3!YbADlUnI}Q-uaWuK>7NUV%8GW=M~thiFQLUO?0sTEv4ve3xTaAX z>$R7Swf5;suwCQxxOAELpkd)tqUX&Yr!grgEi5f4EfFjxRF_SVol8sR7pBI>nPW#* zmmMi%GiAT0)(jr(AN=^4>IAzN*vsq|dKGAy=)Jwbv4`_J;Rc5oK5r)%CAehp;BQ5` zcI{KH)9(2uNcUzchSrzSH)skj+^XqTc$wSjbh-mpxP?ANchNcYEhzrobQ#@4H`2E; zdM|qK!}ET6lD>nBjqlQ1xNLftwz7k^v7+rfnRajmHm;;yJfC*+A{+=Vr#(1odx)EG zE*PMP`Fz|0T}Y3@EAG=8l|V4~0|ogT@M2>DX$jwgU{C^hwR|gD;{esmxAE=pZ}Vvk z-+|VVz~ExOled71YCcNaf}IxOZ2m4laRBdU`I}hl1oltxx6pEfhHZQ|*2+cTeLRT1 z0?;$a_n=h>%u4v%7=`cVOOjTG*1g)w+`N(Rt@9%&PuBZdQedGOJ+*)styZJ%=)=8$Q{f9RHR<$z&M#|IVy>4%e*4=QOKp5Elq{ zfNuIR6!J-!)lXnnPr*;qeyx-F|VF3H+ zIgC6{uhI+jIxhbX;`&d~i%|ZTU{bHZq+W&kzXp@q50iQwCiMnP>P;x_TQI4=z@+{P zlX@>@QqNMvG$}w@aabm`k1jtfle&nWwoK}Jn7CM>p7jT&GgVzIbbj07;Al!Ie1(I2HXP2r%mmk;xz(Y1SJen?dq;6Fh&A zMxb5_)XRW+IZ&Sn)F)8`ADw~v$`tA=Q>ZV?jk*&t1h>x?@3%mFQvOW0&vQ<+-$BKt z_R1S?qtd*2&Os`f=(vLl(R0%+lnnG3M%4bX*^G-a`=#` zJcBB@TH`lYYy9*Se$#oI4tCg*w<9P@!aSXKpk)USD>#8<&#Bq%lE^e3Qe*l3in zNhjf_u?wKur-FU7%<3_N&DaG=|C?Q4pwb)a{tsIe{OOGVzQY{q-L9?_0 zlxJk@xI{CFLpp`u0%Kw%Z=QX;z1qx1w~(=iTRN-cbG$vltIQNuOrG13wQ*>?`a%c<_edOlW~TTaj3-Lb|gW#JADud85OJz7@UfoDjkNknlLM3Ejq zetq^H4s=%U~Z(8+=w0^J zL2_$9DT2v3tU!&V*oK7NPGxXp=^e{cJC>(*EH`)5=4U6{I6L;nL0K*>*p!Pb{9wp~ zv`01>sRfeBGXUbu%mTRFQmZ0MKdXjIOKT{-gLwOH2GF7u=0&4^Lz)W3DVu`c7e-Fz?faTr{pt-Qb$)yE!1xOb;I=#^B3x^pKoev+eNy9R=!!Vcb cAn&({ODP8%L|^a+4DeU%w&mFzHW!usH>Jo3{Qv*} literal 10654 zcmcgy3w%`7ng4&uWG0#1K!|{eJQR!)hG2XkN`eT4Ai)ICL=Ydhcm4qr?Zlg;H38>O?4*s_O~HyL*DYroKFEuc_0A9iJDEla3u1lywCYCx$z_ zl8s&ANQXd9Q92_mj8q~Pdt2<)PN#N^vQUA2xL_jH!@`+*CrQ+Bjj;G%~vYDVQN0%3^xuDJJLb&GjOC2Gc6p2qbc`SZKJ>! zPBeDK5@dkpd5RzPXz*dSg=0XAow#SUQG`z0F}t`O6&zHPWiUhy(#*oKXo8NAu;YEf zRS~--oJcm5VlL+SFyBHW76>M}YwUgoSqpa1>c`X=@pHYaVd^P9EZmjRA$swn35BYg zW($jPyr77DHBCZ$SD?1RU#EGk@=BWsC$vEp0C`WZsBX% zUFLQ>JrxW@XIcnim0;hVV7J{Ei*oH1;ba$UiDWREObAZPRi4XtjynH_mSK5sLWcz# zRFTiM>RtBBU0~{R6{O2TcsOO9tQ*yBAp*uNKMA!MPo>U0)ETEXA!eaBzjviJ$1NnZ zxr~#R#qHIDN=sSj)3q#DX)D4V$u6C;)z#!^v6 za}O=RFmj=Vi|}=a&E?@lnC7j$r%YY$!zF^Td9IVBo7XL5@bJ#9=63PNkBjk5O&UGQ z%M})`#J3#f=`g`KXTP#BD@&n47r0t*@DSe~CUsOF=EqgIM%TGkaQrYKW|&D0dl86? z3a+%@3=0rFtliANSy1AMUg8T?|kiy7hIr%X4E_$Kp-F zP?un`>xia*IBIHM#dyHNgQ}e3j(Bj5=E@R0j7NNU)WTzUoc1w9KP^GBMq$H@#3TB4 zK@bNI-P7TAUN>Q*g(ubgeNlUjsC=;@thCev+%seiG7Tg@<(&gUY#3>DkDFz@K4H!pUA^b+RBR$ zKg`TD`qR|kuUW;9?Fz$Qpy3Q^pLrmZiZeAO>srE5nx%=S4CyDN?3C@t4owO#;bk9w zq@nr8nXNPMtvQ;s4fq>MF$G?oMQaJ!hhi-;?9%LXgayQX~}{%B2uQq5Aa8gN`IoN zY8LQEt$sV^DG#4m_#ga5^^mmV!DNg8cx)ce&2BrP#Ao=c51(83LX}=I$Z=)}$rBwf zVffXtJBgOfPDI&2FOvdG3dKVc3w7C{?iRZ<$PMz=G?O1fE}#xxQGuBODDzN=Tr}lKo^H zjrzpq;}*3GrVb4q!;_&A-zpOqi<7|xwZp{P-H_oaiEK==WU{j1X=z&6 zt_{_e9Ap~ioz%WmwLZm?8V!-TTA!Cn#{3c>h?QxA$~?o&!QnocE|`$l%dIoeUSln- zhiQ3+)LC+<97gk?4>hu%kz`l@b#aYfYUKzTw9MEA_hg)OxsI4=$x(_K6!|x;SUhSoAbbKjsva)iWKCSJ;|vlz%R4qSmk_fHaBHmc~_l~ zB9$xiEosa^Dg|2(a+29ttGx>?IZk^^sI&|Wdsc|NpC{JgAjZiV(qc)gYC`c^bD}*S z?6czu2E4a~IQ$J+rdrH{+O8g{MbOTQrOlFd;VL6EKejQZM@)jyL&)yzRYRaTyiyGB z+!;;;qk+X^F>b4qzOte(3u@lrp1l6m^juep?-n?zP30eWcgN${!kLHGe>k6HpD5zR?7aks8l$a7Sl``7PqHh_!-OYlCQaU* z6oZM`r;C51G*+z z8=DKSGU!hQEmod2&k;a4L~;=tS00-$aDQ(`=*2^a&(2{Z0|>ra8FSRd+rpjEU@{e_ zid%=__5Vs)MI7lOw)y>z^-}0wW5#;a^(7n-K$mfAjWlpO&I4+(+ikTd4C9P~Fp0Yw%>_;z<#$%soguUue910cI@m@^C9CYta8y^P8R(YMtCz(H zhS-<)PUbujGpy7d<}6X7jp~g38FzM2xM?yFhl{8g82qPKOM`%cwzvnZNMR1m8Js2P z?ACBPGJDMkn8|;oK_?$Nx!PE)N~+G(WAx+UCQwkHqY~CUt0O^PK1f*A%^?wEyTydn zCO--G&)=Y|H)X;<=jmV#@_QVt11O*;Y`}a)B-pd6BUqjFsp>-oN9W?sy*GF@%EE4& z+fih$P{`5j5I4zOhx*%Msd&hCZol?XCI+uO57CWbo?K!llC8EzB`T_XJ_B_k84vch z+R3h1M`EN`?(oZSarL_!9(wPh zE8g7l$UEyUefP?X-?{kdH@9r97v2Xo6X3@iBf&(%PWWUKA;l1-4`(Yr+3a3KI_W7- zFxRYjxNr;$lXx~NAOx{^F~KW%*2ozqnv&PxEFmY$N-gz5+myVXHYM+xSr+Ig1XJ=W zfGK(D&ytzUlqGub;(Iw;isTfCoXWSCInT$kKCl@Q@N9xlA7z2UO(+i(Y{KZkv`yGI zP`e4^0@F8P|3DSH4-8ZlZNij5m3I@SJ;B)pavGn9n{^L`hZpB1o^7o!0l%~(?%s9x%+p~)yTHI?6EYN~-E zQ&SyyDHB1UD_N5Bbo}_hv^45k`8eWM6b7EcfoaUDeHzCWV1@EtXn3zM6ptZ|IVi(C zjKh4x+W`)ZEN|oG3^|h;^kS?8Wfdh4kw!7(bCmgbb0>P2?{e@yc~d_7wxMa|W*nzH zEZTw=7AJ1OauzF{;xrapaR#uYc6u72TK06Nah8@RrV-Whv^37vGMUDjT2C71=;MOg zZMb;lXk5A(m!)wz->zC2n6??;PUE^-)n)F!G?B~WsINt+!}0tc(1K&Jge^Dyzbc~SJ_YFCMMUX zux}c-1h(Q%AdL-yH16M3{Sg{a6ytF=4nW+nFxDZIWnq$ZNtlbBMe^z@T!by%Y>BX5 zAU&)_aXz2QNSkW{WgGEOYb_ZVm&Ox=_Bz7sZHiL%k=UA?{VvNcSSB&rFtZ^onip*( zD7=MIOVb7V`L2@IP`c3t>*0A~Bc9UwR%}%%pW(tS)3~s36{lkz&gAWO3U~1G|1P$!=k3znyyxA37jZ8y|L((w zyh8p6_e&8T;FZ#YG64@sH6D=~JSwyBn9Swf?{RoS7Gon1&`;7go|3iLBgta{hh%6g%-V?)R&-{GZd8enDUQC2jv#^rhG6 zORv+HeobF`gI4<+`qFRdOTWwd(yPo%#+OKC(O&t|c7FZa8(%t)-y0lXx{jY!9ACPX zp6&S39rXEsgfF%3r7xYa2VdePtdo~yBIAa_vrF7)o)+&q=12vX24VW#_QGrmY9YkY zw9ra`W|G2OR-Bx`q&3GKKOsB5-opu*&SwLKY4Pd9KbU#z ziA%xH3T1ekwRahU-edB7pIGJtVx!;li~EP@!XNlq`6HUsAF&pHVsQAF!S2t-3=|ce z%72nk9O&VU>C#6Ug({{S+5%Wi;U;rRQ}CWJhM?M(=vVl6P%X=%uBiRa-exB z929&%13CUerawguW8;zdE9T>K!oQtHFbC=`%fx3algnhBfj%t`^fBP06rRsf!$4|T z1Yq*btN@R=0xTXzfMdw;5CNRihVIY+0g`j-;7$#|A4to=1K5>yDPV#vM2&cGq)BC7 zG)qYi>x;9jFV3>QaCp|e%qaZQYxtXC++a$UzbSIL zNqt;WuArS2=;CrEYaVWLwS0?s&ui4}(>yhXq=mR3<5z7Qrhauh{egBeH5XvFY?IoR z(*`{%Er)ED!&`Y=kRt;*?L;?6Z3^U|`w0kEXnl$J$qJFAP`rKUT8 zr*Nic3|&vW8&EYZ2SRc;kH6F-13TXw#6!m6WD@^1?Lgv1>ZsA|@YK-xGVElV6Qoef8hvgro>?Oyo~ zV`Kq6ga6mzQr+Lo=7-|ZviwPWsANU-@_+;QtfPzH!m>baCB)a(0^0snavSTF+|}DT mdV}1{+C%b)JZ|2fkSE!@A06i^mi*xi{*)KXQ<9b~sQO=zoZUeH diff --git a/target/classes/scau/markmapscau/scau-markmap.fxml b/target/classes/scau/markmapscau/scau-markmap.fxml index 5f45269..bab44b6 100644 --- a/target/classes/scau/markmapscau/scau-markmap.fxml +++ b/target/classes/scau/markmapscau/scau-markmap.fxml @@ -122,22 +122,34 @@ - - - - - - - - - - - - - - - - + + -- Gitee