├── AutoDrive Course Editor.iml ├── AutoDriveCourseEditor.iml ├── Open Editor with Console to see errors.cmd ├── history.xml ├── pom.xml ├── readme.md ├── src └── main │ ├── java │ └── AutoDriveEditor │ │ ├── AutoDriveEditor.java │ │ ├── Classes │ │ ├── CubicCurve.java │ │ ├── LinearLine.java │ │ ├── MapImage.java │ │ ├── QuadCurve.java │ │ └── Rotation.java │ │ ├── GUI │ │ ├── ButtonToolbar.java │ │ ├── Buttons │ │ │ ├── AddNodeBaseButton.java │ │ │ ├── AlignBaseButton.java │ │ │ ├── Alignment │ │ │ │ ├── DepthAlignButton.java │ │ │ │ ├── EditLocationButton.java │ │ │ │ ├── HorizontalAlignButton.java │ │ │ │ └── VerticalAlignButton.java │ │ │ ├── BaseButton.java │ │ │ ├── ConnectionSelectBaseButton.java │ │ │ ├── CopyPasteBaseButton.java │ │ │ ├── CurveBaseButton.java │ │ │ ├── Curves │ │ │ │ ├── CubicCurveButton.java │ │ │ │ └── QuadCurveButton.java │ │ │ ├── Display │ │ │ │ ├── HideDualConnectionsButton.java │ │ │ │ ├── HideNodeButton.java │ │ │ │ ├── HideRegularConnectionsButton.java │ │ │ │ ├── HideReverseConnectionsButton.java │ │ │ │ └── HideSubprioConnectionsButton.java │ │ │ ├── Edit │ │ │ │ ├── CopySelectionButton.java │ │ │ │ ├── CutSelectionButton.java │ │ │ │ ├── MultiSelectButton.java │ │ │ │ └── PasteSelectionButton.java │ │ │ ├── LinerLineBaseButton.java │ │ │ ├── MarkerBaseButton.java │ │ │ ├── Markers │ │ │ │ ├── AddMarkerButton.java │ │ │ │ ├── DeleteMarkerButton.java │ │ │ │ └── EditMarkerButton.java │ │ │ ├── Nodes │ │ │ │ ├── AddPrimaryNodeButton.java │ │ │ │ ├── AddSecondaryNodeButton.java │ │ │ │ ├── DeleteNodeButton.java │ │ │ │ ├── DualConnectionButton.java │ │ │ │ ├── FlipDirectionButton.java │ │ │ │ ├── MoveNodeButton.java │ │ │ │ ├── NormalConnectionButton.java │ │ │ │ ├── ReverseConnectionButton.java │ │ │ │ ├── RotationButton.java │ │ │ │ └── SwapNodePriorityButton.java │ │ │ ├── Options │ │ │ │ ├── ContinuousConnectionButton.java │ │ │ │ ├── GridDisplayButton.java │ │ │ │ ├── GridSnapButton.java │ │ │ │ ├── NodeSizeDownButton.java │ │ │ │ ├── NodeSizeUpButton.java │ │ │ │ ├── OpenConfigButton.java │ │ │ │ └── SelectHiddenButton.java │ │ │ ├── OptionsBaseButton.java │ │ │ └── Testing │ │ │ │ ├── RoadConnection.java │ │ │ │ ├── ScaleButton.java │ │ │ │ ├── TemplateButton.java │ │ │ │ └── TestButton.java │ │ ├── Config │ │ │ ├── ColourPreviewPanel.java │ │ │ ├── ConfigGUI.java │ │ │ └── Tabs │ │ │ │ ├── AutoSaveTab.java │ │ │ │ ├── ColourSelectorTab.java │ │ │ │ ├── ConnectionsTab.java │ │ │ │ ├── CurvesTab.java │ │ │ │ ├── ExperimentalTab.java │ │ │ │ ├── KeybindsTab.java │ │ │ │ ├── KeybindsTab2.java │ │ │ │ └── MapPanelTab.java │ │ ├── Curves │ │ │ └── CurvePanel.java │ │ ├── EditorImages.java │ │ ├── MapPanel.java │ │ ├── Menus │ │ │ ├── DebugMenu │ │ │ │ ├── Logging │ │ │ │ │ ├── LogButtonInfoMenu.java │ │ │ │ │ ├── LogConfigGUIInfoMenu.java │ │ │ │ │ ├── LogConfigMenu.java │ │ │ │ │ ├── LogConnectSelectionMenu.java │ │ │ │ │ ├── LogCopyPasteMenu.java │ │ │ │ │ ├── LogCurveInfoMenu.java │ │ │ │ │ ├── LogFileIOMenu.java │ │ │ │ │ ├── LogFlipConnectionMenu.java │ │ │ │ │ ├── LogGUIInfoMenu.java │ │ │ │ │ ├── LogHeightmapInfoMenu.java │ │ │ │ │ ├── LogLinearLineInfoMenu.java │ │ │ │ │ ├── LogListenerStateMenu.java │ │ │ │ │ ├── LogMarkerInfoMenu.java │ │ │ │ │ ├── LogMergeFunctionMenu.java │ │ │ │ │ ├── LogMultiSelectInfoMenu.java │ │ │ │ │ ├── LogRenderInfoMenu.java │ │ │ │ │ ├── LogRouteManagerMenu.java │ │ │ │ │ ├── LogScanManagerInfoMenu.java │ │ │ │ │ ├── LogUndoRedoMenu.java │ │ │ │ │ ├── LogZoomScaleMenu.java │ │ │ │ │ └── ShowZoomLevelInfo.java │ │ │ │ ├── MoveNodeToCentreMenu.java │ │ │ │ ├── ShowAllNodeIDMenu.java │ │ │ │ ├── ShowHeightMapInfo.java │ │ │ │ ├── ShowNodeHeightMenu.java │ │ │ │ ├── ShowNodeLocationInfo.java │ │ │ │ └── ShowProfileInfo.java │ │ │ ├── Display │ │ │ │ ├── ShowMarkerIcons.java │ │ │ │ ├── ShowMarkerNames.java │ │ │ │ ├── ShowNodeID.java │ │ │ │ └── ShowParkingIcons.java │ │ │ ├── EditMenu │ │ │ │ ├── CopyMenu.java │ │ │ │ ├── CutMenu.java │ │ │ │ ├── PasteMenu.java │ │ │ │ ├── PasteOriginalLocationMenu.java │ │ │ │ ├── RedoMenu.java │ │ │ │ └── UndoMenu.java │ │ │ ├── EditorMenu.java │ │ │ ├── FileMenu │ │ │ │ ├── ExitEditorMenu.java │ │ │ │ ├── OpenConfigMenu.java │ │ │ │ ├── RecentFilesMenu.java │ │ │ │ ├── SaveAsConfigMenu.java │ │ │ │ └── SaveConfigMenu.java │ │ │ ├── HeightMapMenu │ │ │ │ ├── ExportHeightMapMenu.java │ │ │ │ ├── ImportHeightMapMenu.java │ │ │ │ └── ShowHeightmapMenu.java │ │ │ ├── HelpMenu │ │ │ │ ├── AboutMenu.java │ │ │ │ ├── ImagesLinkMenu.java │ │ │ │ ├── ShowDEBUGMenu.java │ │ │ │ └── ShowHistoryMenu.java │ │ │ ├── JCheckBoxMenuItemBase.java │ │ │ ├── JMenuBase.java │ │ │ ├── JMenuItemBase.java │ │ │ ├── MapImagesMenu │ │ │ │ ├── ImportFS19DDSMenu.java │ │ │ │ ├── ImportFS22DDSMenu.java │ │ │ │ ├── LoadMapImageMenu.java │ │ │ │ ├── MapZoomMenu.java │ │ │ │ └── SaveMapImageMenu.java │ │ │ ├── RoutesMenu │ │ │ │ ├── OpenRoutesConfig.java │ │ │ │ ├── OpenRoutesXML.java │ │ │ │ └── SaveRoutesXML.java │ │ │ └── ScanMenu │ │ │ │ ├── FixNodesHeightMenu.java │ │ │ │ ├── MergeNodesMenu.java │ │ │ │ ├── OutOfBoundsFixMenu.java │ │ │ │ └── ScanNetworkMenu.java │ │ ├── RenderThreads │ │ │ ├── ConnectionDrawThread.java │ │ │ └── NodeDrawThread.java │ │ ├── RoutesGUI │ │ │ └── RoutesGUI.java │ │ └── TextPanel.java │ │ ├── Handlers │ │ └── GlobalExceptionHandler.java │ │ ├── Import │ │ └── DDSReader.java │ │ ├── Listeners │ │ ├── ConfigListener.java │ │ └── MouseListener.java │ │ ├── Locale │ │ └── LocaleManager.java │ │ ├── Managers │ │ ├── ButtonManager.java │ │ ├── ChangeManager.java │ │ ├── CopyPasteManager.java │ │ ├── ImportManager.java │ │ ├── MultiSelectManager.java │ │ ├── ScanManager.java │ │ └── VersionManager.java │ │ ├── RoadNetwork │ │ ├── MapNode.java │ │ ├── MarkerGroup.java │ │ └── RoadMap.java │ │ ├── Utils │ │ ├── Classes │ │ │ ├── ButtonColumn.java │ │ │ ├── EventTriggerNumberFilter.java │ │ │ ├── KDTree2D.java │ │ │ ├── KDTree2DNode.java │ │ │ ├── KDTree3D.java │ │ │ ├── KDTree3DNode.java │ │ │ ├── LabelNumberFilter.java │ │ │ ├── NameableThread.java │ │ │ └── SimpleImageInfo.java │ │ ├── ConversionUtils.java │ │ ├── ExceptionUtils.java │ │ ├── FileUtils.java │ │ ├── GUIUtils.java │ │ ├── HTMLUtils.java │ │ ├── ImageUtils.java │ │ ├── LoggerUtils.java │ │ ├── MathUtils.java │ │ ├── ProfileUtil.java │ │ └── XMLUtils.java │ │ └── XMLConfig │ │ ├── AutoSave.java │ │ ├── EditorXML.java │ │ ├── GameXML.java │ │ └── RoutesXML.java │ └── resources │ ├── META-INF │ └── MANIFEST.MF │ ├── editor │ ├── Legacy │ │ ├── curves │ │ │ ├── controlpoint.png │ │ │ ├── controlpoint_selected.png │ │ │ └── curvenode.png │ │ ├── gridsubtoggle.png │ │ ├── node.png │ │ ├── node_marker_blur.png │ │ ├── node_marker_small.png │ │ ├── node_parking_big.png │ │ ├── node_selected.png │ │ ├── subprionode.png │ │ └── subprionode_selected.png │ ├── buttons │ │ ├── addmarker.png │ │ ├── addmarker_selected.png │ │ ├── conconnect.png │ │ ├── conconnect_selected.png │ │ ├── config.png │ │ ├── config_selected.png │ │ ├── connectdual.png │ │ ├── connectdual_selected.png │ │ ├── connectdual_subprio.png │ │ ├── connectdual_subprio_selected.png │ │ ├── connectregular.png │ │ ├── connectregular_selected.png │ │ ├── connectregular_subprio.png │ │ ├── connectregular_subprio_selected.png │ │ ├── connectreverse.png │ │ ├── connectreverse_selected.png │ │ ├── connectreverse_subprio.png │ │ ├── connectreverse_subprio_selected.png │ │ ├── connectroad.png │ │ ├── connectroad_selected.png │ │ ├── copy.png │ │ ├── copy_selected.png │ │ ├── createprimary.png │ │ ├── createprimary_selected.png │ │ ├── createsecondary.png │ │ ├── createsecondary_selected.png │ │ ├── cubiccurve.png │ │ ├── cubiccurve_selected.png │ │ ├── cut.png │ │ ├── cut_selected.png │ │ ├── deletemarker.png │ │ ├── deletemarker_selected.png │ │ ├── deletenodes.png │ │ ├── deletenodes_selected.png │ │ ├── depthalign.png │ │ ├── depthalign_selected.png │ │ ├── editlocation.png │ │ ├── editlocation_selected.png │ │ ├── editmarker.png │ │ ├── editmarker_selected.png │ │ ├── flip.png │ │ ├── flip_selected.png │ │ ├── gridsnaptoggle.png │ │ ├── gridsnaptoggle_selected.png │ │ ├── gridsubtoggle_selected.png │ │ ├── gridtoggle.png │ │ ├── gridtoggle_selected.png │ │ ├── hidden.png │ │ ├── hidden_selected.png │ │ ├── hide_connect_dual.png │ │ ├── hide_connect_dual_selected.png │ │ ├── hide_connect_regular.png │ │ ├── hide_connect_regular_selected.png │ │ ├── hide_connect_reverse.png │ │ ├── hide_connect_reverse_selected.png │ │ ├── hide_connect_subprio.png │ │ ├── hide_connect_subprio_selected.png │ │ ├── hide_node.png │ │ ├── hide_node_selected.png │ │ ├── horizontalalign.png │ │ ├── horizontalalign_selected.png │ │ ├── movenode.png │ │ ├── movenode_selected.png │ │ ├── networkinfo.png │ │ ├── networkinfo_selected.png │ │ ├── nodeminus.png │ │ ├── nodeminus_selected.png │ │ ├── nodeplus.png │ │ ├── nodeplus_selected.png │ │ ├── paste.png │ │ ├── paste_selected.png │ │ ├── quadcurve.png │ │ ├── quadcurve_selected.png │ │ ├── rotatenode.png │ │ ├── rotatenode_selected.png │ │ ├── scale.png │ │ ├── scale_selected.png │ │ ├── select_freeform.png │ │ ├── select_freeform_selected.png │ │ ├── select_rectangle.png │ │ ├── select_rectangle_selected.png │ │ ├── swappriority.png │ │ ├── swappriority_selected.png │ │ ├── unknown.png │ │ ├── unknown_selected.png │ │ ├── verticalalign.png │ │ └── verticalalign_selected.png │ ├── curvepanel │ │ ├── cancel.png │ │ ├── cancel_select.png │ │ ├── confirm.png │ │ └── confirm_select.png │ ├── gameIcon.png │ ├── marker.png │ ├── nodes │ │ ├── node_marker2.png │ │ ├── node_marker_small2.png │ │ ├── node_parking_small.png │ │ ├── node_warning.png │ │ └── node_warning_y.png │ ├── routeIcon.png │ ├── tractor.png │ └── update.png │ ├── locale │ └── AutoDriveEditor_en_US.properties │ ├── log4j2.xml │ └── mapImages │ └── Blank.png └── version.xml /AutoDrive Course Editor.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /AutoDriveCourseEditor.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Open Editor with Console to see errors.cmd: -------------------------------------------------------------------------------- 1 | java.exe -jar -Xms1024m -Xmx1024m .\AutoDriveEditor.Jar 2 | pause -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 4 | 4.0.0 5 | 6 | AutoDriveEditor 7 | AutoDriveCourseEditor 8 | 0.0.1-SNAPSHOT 9 | jar 10 | 11 | AutoDriveCourseEditor 12 | 13 | 14 | UTF-8 15 | 11 16 | 11 17 | 18 | 19 | 20 | 21 | 22 | org.apache.maven.plugins 23 | maven-compiler-plugin 24 | 3.8.1 25 | 26 | 27 | org.apache.maven.plugins 28 | maven-assembly-plugin 29 | 3.2.0 30 | 31 | 32 | 33 | 34 | AutoDriveEditor 35 | 36 | 37 | 38 | jar-with-dependencies 39 | 40 | 41 | 42 | 43 | make-assembly 44 | package 45 | 46 | single 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | org.apache.logging.log4j 58 | log4j-api 59 | 2.20.0 60 | compile 61 | 62 | 63 | org.apache.logging.log4j 64 | log4j-core 65 | 2.20.0 66 | 67 | 68 | org.apache.logging.log4j 69 | log4j-slf4j-impl 70 | 2.20.0 71 | 72 | 73 | com.vdurmont 74 | semver4j 75 | 3.1.0 76 | 77 | 78 | org.drjekyll 79 | colorpicker 80 | 1.4.5 81 | 82 | 83 | junit 84 | junit 85 | 4.13.2 86 | test 87 | 88 | 89 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | ## Java 2 | A Java version **greater than 11** is required. ( JRE or JDK are both possible )
3 | Current Java versions can be downloaded [here](https://www.oracle.com/java/technologies/javase-downloads.html) and installation instructions can be found [here](https://www3.ntu.edu.sg/home/ehchua/programming/howto/JDK_Howto.html) 4 | 5 | ## Compatibility 6 | The editor works with configs generated by the [FS19](https://github.com/Stephan-S/FS19_AutoDrive) / [FS22](https://github.com/Stephan-S/FS22_AutoDrive) / [FS25](https://github.com/Stephan-S/FS25_AutoDrive) versions of AutoDrive. 7 | 8 | ## Starting the AutoDrive Course Editor 9 | The editor can be started multiple ways.
    10 |
  1. Using the supplied CMD file: "Open Editor with Console to see errors.cmd".
  2. 11 |
  3. Directly from a command line: java -jar -Xms1024m -Xmx1024m .\AutoDriveEditor.Jar
  4. 12 |
  5. Directly from a command line: java -jar .\AutoDriveEditor.jar (**Use this only for importing map DDS files that fail using normal run arguments**)
13 | 14 | The editor will automatically create a log file autoDriveEditor.log, which can be used for later troubleshooting.
15 | The log file has a maximum size of 20MB and a maximum of 3 files are then created. 16 | 17 | ## Bug Reports 18 | 19 | Please use the "Issues" section to report any bugs, I will try to respond as soon as humanly possible, but bear in mind 20 | real life doesn't always allow for quick answers. 21 | 22 | ## Map Images 23 | 24 | I maintain another GitHub repository of map images that the editor can automatically download when needed [here](https://github.com/KillBait/AutoDrive_MapImages)
25 | If you want to create images for yourself, you can find a guide [here](https://github.com/KillBait/AutoDrive_MapImages/discussions/20) 26 | 27 | ## Map Image Requests 28 | 29 | Do you have any map images that are not on the repository?, please consider doing a pull request to add to 30 | the collection, it will help other people. 31 | 32 | Help with pull requests can be found on [GitHub Docs](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request) 33 | 34 | **Not familiar with GitHub.. go over to the [Discussion](https://github.com/KillBait/AutoDrive_MapImages/discussions) section of the map image repository and create a request** 35 | 36 | 37 | ## License 38 | 39 | The Editor does not currently have a license attached to it. 40 | 41 | ## Credits 42 | 43 | **@Stephan_S** - The creator of the AutoDrive mod and original editor, with his permission, I have taken over maintaining this editor. 44 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/AddNodeBaseButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons; 2 | 3 | import AutoDriveEditor.Managers.ChangeManager; 4 | import AutoDriveEditor.RoadNetwork.MapNode; 5 | import AutoDriveEditor.RoadNetwork.RoadMap; 6 | import AutoDriveEditor.Utils.ExceptionUtils; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.changeManager; 9 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 10 | import static AutoDriveEditor.GUI.MapPanel.*; 11 | import static AutoDriveEditor.Managers.ScanManager.checkNodeOverlap; 12 | import static AutoDriveEditor.RoadNetwork.RoadMap.createNewNetworkNode; 13 | import static AutoDriveEditor.RoadNetwork.RoadMap.showMismatchedIDError; 14 | import static AutoDriveEditor.XMLConfig.AutoSave.resumeAutoSaving; 15 | import static AutoDriveEditor.XMLConfig.AutoSave.suspendAutoSaving; 16 | 17 | public abstract class AddNodeBaseButton extends BaseButton { 18 | 19 | public static MapNode createNode(double worldX, double worldZ, int flag) { 20 | if (roadMap != null) { 21 | suspendAutoSaving(); 22 | MapNode newNode = createNewNetworkNode(worldX, worldZ, flag, false, false); 23 | getMapPanel().repaint(); 24 | changeManager.addChangeable(new AddNodeChanger(newNode)); 25 | setStale(true); 26 | resumeAutoSaving(); 27 | return newNode; 28 | } 29 | return null; 30 | } 31 | 32 | // 33 | // Add node 34 | // 35 | 36 | public static class AddNodeChanger implements ChangeManager.Changeable { 37 | private final MapNode storeNode; 38 | private final boolean isStale; 39 | 40 | public AddNodeChanger(MapNode node){ 41 | super(); 42 | this.storeNode = node; 43 | this.isStale = isStale(); 44 | } 45 | 46 | public void undo(){ 47 | for (MapNode mapNode : storeNode.getWarningNodes()) { 48 | mapNode.getWarningNodes().remove(storeNode); 49 | if (mapNode.getWarningNodes().size() == 0) mapNode.clearWarningNodes(); 50 | } 51 | if (hoveredNode == storeNode) hoveredNode = null; 52 | RoadMap.removeMapNode(storeNode); 53 | getMapPanel().repaint(); 54 | setStale(this.isStale); 55 | } 56 | 57 | public void redo(){ 58 | try { 59 | roadMap.insertMapNode(storeNode, null, null); 60 | checkNodeOverlap(storeNode); 61 | getMapPanel().repaint(); 62 | setStale(true); 63 | } catch (ExceptionUtils.MismatchedIdException e) { 64 | showMismatchedIDError("AddNodeChanger redo()", e); 65 | } 66 | 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Alignment/DepthAlignButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Alignment; 2 | 3 | import AutoDriveEditor.GUI.Buttons.AlignBaseButton; 4 | import AutoDriveEditor.RoadNetwork.MapNode; 5 | 6 | import javax.swing.*; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.changeManager; 9 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 10 | import static AutoDriveEditor.Managers.MultiSelectManager.multiSelectList; 11 | import static AutoDriveEditor.Utils.GUIUtils.makeImageToggleButton; 12 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 13 | 14 | public class DepthAlignButton extends AlignBaseButton { 15 | 16 | public DepthAlignButton(JPanel panel) { 17 | button = makeImageToggleButton("buttons/depthalign","buttons/depthalign_selected", null,"align_depth_tooltip","align_depth_alt", panel, false, false, null, false, this); 18 | } 19 | 20 | @Override 21 | public String getButtonID() { return "DepthAlignButton"; } 22 | 23 | @Override 24 | public String getButtonAction() { return "ActionButton"; } 25 | 26 | @Override 27 | public String getButtonPanel() { return "Alignment"; } 28 | 29 | @Override 30 | public String getInfoText() { return getLocaleString("align_depth_tooltip"); } 31 | 32 | @Override 33 | protected void adjustNodesTo(MapNode toNode) { 34 | LOG.info("Depth Aligning {} nodes at world y coordinate {}",multiSelectList.size(), toNode.y); 35 | changeManager.addChangeable( new AlignmentChanger(multiSelectList, 0, toNode.y, 0)); 36 | for (MapNode node : multiSelectList) { 37 | node.y = toNode.y; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Alignment/EditLocationButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Alignment; 2 | 3 | import AutoDriveEditor.AutoDriveEditor; 4 | import AutoDriveEditor.GUI.Buttons.BaseButton; 5 | import AutoDriveEditor.RoadNetwork.MapNode; 6 | import AutoDriveEditor.Utils.Classes.LabelNumberFilter; 7 | 8 | import javax.swing.*; 9 | import javax.swing.text.PlainDocument; 10 | import java.awt.*; 11 | import java.awt.event.MouseEvent; 12 | 13 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 14 | import static AutoDriveEditor.GUI.MapPanel.getNodeAtScreenPosition; 15 | import static AutoDriveEditor.GUI.MapPanel.mapScale; 16 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 17 | import static AutoDriveEditor.Utils.GUIUtils.makeImageToggleButton; 18 | import static AutoDriveEditor.Utils.MathUtils.roundUpDoubleToDecimalPlaces; 19 | 20 | public class EditLocationButton extends BaseButton { 21 | 22 | public EditLocationButton(JPanel panel) { 23 | button = makeImageToggleButton("buttons/editlocation","buttons/editlocation_selected", null,"align_node_edit_tooltip","align_node_edit_alt", panel, false, false, null, false, this); 24 | } 25 | 26 | @Override 27 | public String getButtonID() { return "EditLocationButton"; } 28 | 29 | @Override 30 | public String getButtonAction() { return "ActionButton"; } 31 | 32 | @Override 33 | public String getButtonPanel() { return "Alignment"; } 34 | 35 | @Override 36 | public String getInfoText() { return getLocaleString("align_node_edit_tooltip"); } 37 | 38 | @Override 39 | public void mouseClicked(MouseEvent e) { 40 | MapNode clickedNode = getNodeAtScreenPosition(e.getX(), e.getY()); 41 | if (clickedNode != null) showEditNodeLocationDialog(clickedNode); 42 | } 43 | 44 | // 45 | // Dialog for Edit Node position 46 | // 47 | 48 | public void showEditNodeLocationDialog(MapNode node) { 49 | 50 | JTextField posX = new JTextField(String.valueOf((float)node.x)); 51 | JLabel labelPosX = new JLabel(" "); 52 | PlainDocument docX = (PlainDocument) posX.getDocument(); 53 | docX.setDocumentFilter(new LabelNumberFilter(labelPosX, -1024 * mapScale, 1024 * mapScale, true, true)); 54 | 55 | JTextField posZ = new JTextField(String.valueOf((float)node.z)); 56 | JLabel labelPosZ = new JLabel(" "); 57 | PlainDocument docZ = (PlainDocument) posZ.getDocument(); 58 | docZ.setDocumentFilter(new LabelNumberFilter(labelPosZ, -1024 * mapScale, 1024 * mapScale, true, true)); 59 | 60 | JTextField posY = new JTextField(String.valueOf((float)node.y)); 61 | JLabel labelPosY = new JLabel(" "); 62 | if (node.y < 0 ) { 63 | labelPosY.setForeground(Color.RED); 64 | labelPosY.setText("* Invalid Y location"); 65 | } 66 | PlainDocument docY = (PlainDocument) posY.getDocument(); 67 | docY.setDocumentFilter(new LabelNumberFilter(labelPosY, 0, 1024 * mapScale, true, false)); 68 | 69 | 70 | Object[] inputFields = {getLocaleString("dialog_node_position_x"), posX, labelPosX, 71 | getLocaleString("dialog_node_position_y"), posY, labelPosY, 72 | getLocaleString("dialog_node_position_z"), posZ, labelPosZ}; 73 | 74 | int option = JOptionPane.showConfirmDialog(AutoDriveEditor.editor, inputFields, ""+ getLocaleString("dialog_node_title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); 75 | 76 | if (option == JOptionPane.OK_OPTION) { 77 | node.x = roundUpDoubleToDecimalPlaces(Double.parseDouble(posX.getText()), 3); 78 | node.y = roundUpDoubleToDecimalPlaces(Double.parseDouble(posY.getText()), 3); 79 | node.z = roundUpDoubleToDecimalPlaces(Double.parseDouble(posZ.getText()), 3); 80 | getMapPanel().repaint(); 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Alignment/HorizontalAlignButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Alignment; 2 | 3 | import AutoDriveEditor.GUI.Buttons.AlignBaseButton; 4 | import AutoDriveEditor.RoadNetwork.MapNode; 5 | 6 | import javax.swing.*; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.changeManager; 9 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 10 | import static AutoDriveEditor.Managers.MultiSelectManager.multiSelectList; 11 | import static AutoDriveEditor.Utils.GUIUtils.makeImageToggleButton; 12 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 13 | 14 | public class HorizontalAlignButton extends AlignBaseButton { 15 | 16 | public HorizontalAlignButton(JPanel panel) { 17 | button = makeImageToggleButton("buttons/horizontalalign","buttons/horizontalalign_selected", null,"align_horizontal_tooltip","align_horizontal_alt", panel, false, false, null, false, this); 18 | } 19 | 20 | @Override 21 | public String getButtonID() { return "HorizontalAlignButton"; } 22 | 23 | @Override 24 | public String getButtonAction() { return "ActionButton"; } 25 | 26 | @Override 27 | public String getButtonPanel() { return "Alignment"; } 28 | 29 | @Override 30 | public String getInfoText() { return getLocaleString("align_horizontal_tooltip"); } 31 | 32 | @Override 33 | protected void adjustNodesTo(MapNode toNode) { 34 | LOG.info("Horizontally Aligning {} nodes at world Z coordinate {}",multiSelectList.size(), toNode.z); 35 | changeManager.addChangeable( new AlignmentChanger(multiSelectList, 0, 0, toNode.z)); 36 | for (MapNode node : multiSelectList) { 37 | node.z = toNode.z; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Alignment/VerticalAlignButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Alignment; 2 | 3 | import AutoDriveEditor.GUI.Buttons.AlignBaseButton; 4 | import AutoDriveEditor.RoadNetwork.MapNode; 5 | 6 | import javax.swing.*; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.changeManager; 9 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 10 | import static AutoDriveEditor.Managers.MultiSelectManager.multiSelectList; 11 | import static AutoDriveEditor.Utils.GUIUtils.makeImageToggleButton; 12 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 13 | 14 | public class VerticalAlignButton extends AlignBaseButton { 15 | 16 | public VerticalAlignButton(JPanel panel) { 17 | button = makeImageToggleButton("buttons/verticalalign","buttons/verticalalign_selected", null,"align_vertical_tooltip","align_vertical_alt", panel, false, false, null, false, this); 18 | } 19 | 20 | @Override 21 | public String getButtonID() { return "VerticalAlignButton"; } 22 | 23 | @Override 24 | public String getButtonAction() { return "ActionButton"; } 25 | 26 | @Override 27 | public String getButtonPanel() { return "Alignment"; } 28 | 29 | @Override 30 | public String getInfoText() { return getLocaleString("align_vertical_tooltip"); } 31 | 32 | @Override 33 | protected void adjustNodesTo(MapNode toNode) { 34 | LOG.info("Vertically Aligning {} nodes at world X coordinate {}",multiSelectList.size(), toNode.x); 35 | changeManager.addChangeable( new AlignmentChanger(multiSelectList, toNode.x, 0, 0)); 36 | for (MapNode node : multiSelectList) { 37 | node.x = toNode.x; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/CopyPasteBaseButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons; 2 | 3 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 4 | import static AutoDriveEditor.GUI.MapPanel.cnpManager; 5 | import static AutoDriveEditor.Managers.MultiSelectManager.isMultipleSelected; 6 | import static AutoDriveEditor.Managers.MultiSelectManager.multiSelectList; 7 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 8 | import static AutoDriveEditor.XMLConfig.AutoSave.resumeAutoSaving; 9 | import static AutoDriveEditor.XMLConfig.AutoSave.suspendAutoSaving; 10 | 11 | public abstract class CopyPasteBaseButton extends BaseButton { 12 | 13 | public static void cutSelected() { 14 | suspendAutoSaving(); 15 | if (isMultipleSelected && multiSelectList.size() > 0 ) { 16 | cnpManager.CutSelection(multiSelectList); 17 | getMapPanel().repaint(); 18 | 19 | } else { 20 | LOG.info("Nothing to Cut"); 21 | } 22 | resumeAutoSaving(); 23 | } 24 | 25 | public static void copySelected() { 26 | suspendAutoSaving(); 27 | if (isMultipleSelected && multiSelectList.size() > 0 ) { 28 | cnpManager.CopySelection(multiSelectList); 29 | 30 | } else { 31 | LOG.info("Nothing to Copy"); 32 | } 33 | getMapPanel().repaint(); 34 | resumeAutoSaving(); 35 | } 36 | 37 | public static void pasteSelected() { 38 | suspendAutoSaving(); 39 | cnpManager.PasteSelection(false); 40 | getMapPanel().repaint(); 41 | resumeAutoSaving(); 42 | } 43 | 44 | public static void pasteSelectedInOriginalLocation() { 45 | cnpManager.PasteSelection(true); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Display/HideDualConnectionsButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Display; 2 | 3 | import AutoDriveEditor.GUI.Buttons.ConnectionSelectBaseButton; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.MouseEvent; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 9 | import static AutoDriveEditor.GUI.Buttons.LinerLineBaseButton.CONNECTION_DUAL; 10 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 11 | import static AutoDriveEditor.Utils.GUIUtils.makeImageToggleButton; 12 | 13 | public class HideDualConnectionsButton extends ConnectionSelectBaseButton { 14 | 15 | public HideDualConnectionsButton(JPanel panel) { 16 | button = makeImageToggleButton("buttons/hide_connect_dual","buttons/hide_connect_dual_selected", null,"display_toggle_connect_dual_tooltip","display_toggle_connect_dual_alt", panel, false, false, null, false, this); 17 | } 18 | 19 | @Override 20 | public String getButtonID() { return "HideDualConnectionsButton"; } 21 | @Override 22 | public String getButtonAction() { return "ActionButton"; } 23 | @Override 24 | public String getButtonPanel() { return "Display"; } 25 | @Override 26 | public String getInfoText() { return getLocaleString("display_toggle_connect_dual_tooltip"); } 27 | 28 | @Override 29 | public boolean detectRegularConnections() { return false; } 30 | @Override 31 | public boolean detectSubprioConnections() { return false; } 32 | @Override 33 | public boolean detectReverseConnections() { return false; } 34 | 35 | @Override 36 | public Integer getLineDetectionInterval() { return 20; } 37 | 38 | @Override 39 | public Boolean previewConnectionHiddenChange() { return true; } 40 | 41 | @Override 42 | public void mouseClicked(MouseEvent e) { 43 | if (e.getButton() == MouseEvent.BUTTON3) { 44 | resetHiddenStatusForAll(CONNECTION_DUAL); 45 | getMapPanel().repaint(); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Display/HideNodeButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Display; 2 | 3 | import AutoDriveEditor.GUI.Buttons.BaseButton; 4 | import AutoDriveEditor.RoadNetwork.MapNode; 5 | import AutoDriveEditor.RoadNetwork.RoadMap; 6 | 7 | import javax.swing.*; 8 | import java.awt.event.MouseEvent; 9 | 10 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 11 | import static AutoDriveEditor.GUI.MapPanel.getNodeAtScreenPosition; 12 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 13 | import static AutoDriveEditor.Managers.MultiSelectManager.getSelectedNodes; 14 | import static AutoDriveEditor.Utils.GUIUtils.makeImageToggleButton; 15 | 16 | public class HideNodeButton extends BaseButton { 17 | 18 | public HideNodeButton(JPanel panel) { 19 | button = makeImageToggleButton("buttons/hide_node","buttons/hide_node_selected", null,"display_toggle_node_tooltip","display_toggle_node_alt", panel, false, false, null, false, this); 20 | } 21 | 22 | @Override 23 | public String getButtonID() { return "NodeHideButton"; } 24 | 25 | @Override 26 | public String getButtonAction() { return "ActionButton"; } 27 | 28 | @Override 29 | public String getButtonPanel() { return "Display"; } 30 | 31 | @Override 32 | public String getInfoText() { return getLocaleString("display_toggle_node_tooltip"); } 33 | 34 | @Override 35 | public Boolean showHoverNodeSelect() { return false; } 36 | 37 | @Override 38 | public Boolean useMultiSelection() { return true; } 39 | 40 | @Override 41 | public Boolean addSelectedToMultiSelectList() { return false; } 42 | 43 | @Override 44 | public Boolean alwaysSelectHidden() { return true; } 45 | 46 | @Override 47 | public Boolean previewNodeSelectionChange() { return false; } 48 | 49 | @Override 50 | public Boolean previewNodeHiddenChange() { return true; } 51 | 52 | 53 | @Override 54 | public void mouseReleased(MouseEvent e) { 55 | if (e.getButton() == MouseEvent.BUTTON3) { 56 | if (getSelectedNodes().size() >0 ) { 57 | for (MapNode nodeList: getSelectedNodes()) { 58 | nodeList.setNodeHidden(!nodeList.isNodeHidden()); 59 | } 60 | getMapPanel().repaint(); 61 | } 62 | } else if (e.getButton() == MouseEvent.BUTTON1) { 63 | MapNode selectedNode = getNodeAtScreenPosition(e.getX(), e.getY()); 64 | if (selectedNode != null) { 65 | selectedNode.setNodeHidden(!selectedNode.isNodeHidden()); 66 | getMapPanel().repaint(); 67 | } 68 | } 69 | } 70 | 71 | @Override 72 | public void mouseClicked(MouseEvent e) { 73 | if (e.getButton() == MouseEvent.BUTTON3) { 74 | for (MapNode node: RoadMap.networkNodesList) { 75 | node.setNodeHidden(false); 76 | } 77 | getMapPanel().repaint(); 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Display/HideRegularConnectionsButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Display; 2 | 3 | import AutoDriveEditor.GUI.Buttons.ConnectionSelectBaseButton; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.MouseEvent; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 9 | import static AutoDriveEditor.GUI.Buttons.LinerLineBaseButton.CONNECTION_STANDARD; 10 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 11 | import static AutoDriveEditor.Utils.GUIUtils.makeImageToggleButton; 12 | 13 | public class HideRegularConnectionsButton extends ConnectionSelectBaseButton { 14 | 15 | public HideRegularConnectionsButton(JPanel panel) { 16 | button = makeImageToggleButton("buttons/hide_connect_regular","buttons/hide_connect_regular_selected", null,"display_toggle_connect_regular_tooltip","display_toggle_connect_regular_alt", panel, false, false, null, false, this); 17 | } 18 | 19 | @Override 20 | public String getButtonID() { return "HideRegularConnectionsButton"; } 21 | 22 | @Override 23 | public String getButtonAction() { return "ActionButton"; } 24 | 25 | @Override 26 | public String getButtonPanel() { return "Display"; } 27 | 28 | @Override 29 | public String getInfoText() { return getLocaleString("display_toggle_connect_regular_tooltip"); } 30 | 31 | @Override 32 | public boolean detectSubprioConnections() { return false; } 33 | @Override 34 | public boolean detectReverseConnections() { return false; } 35 | @Override 36 | public boolean detectDualConnections() { return false; } 37 | 38 | @Override 39 | public Integer getLineDetectionInterval() { return 10; } 40 | 41 | @Override 42 | public Boolean previewConnectionHiddenChange() { return true; } 43 | 44 | @Override 45 | public void mouseClicked(MouseEvent e) { 46 | if (e.getButton() == MouseEvent.BUTTON3) { 47 | resetHiddenStatusForAll(CONNECTION_STANDARD); 48 | getMapPanel().repaint(); 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Display/HideReverseConnectionsButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Display; 2 | 3 | import AutoDriveEditor.GUI.Buttons.ConnectionSelectBaseButton; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.MouseEvent; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 9 | import static AutoDriveEditor.GUI.Buttons.LinerLineBaseButton.CONNECTION_REVERSE; 10 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 11 | import static AutoDriveEditor.Utils.GUIUtils.makeImageToggleButton; 12 | 13 | public class HideReverseConnectionsButton extends ConnectionSelectBaseButton { 14 | 15 | public HideReverseConnectionsButton(JPanel panel) { 16 | button = makeImageToggleButton("buttons/hide_connect_reverse","buttons/hide_connect_reverse_selected", null,"display_toggle_connect_reverse_tooltip","display_toggle_connect_reverse_alt", panel, false, false, null, false, this); 17 | } 18 | 19 | @Override 20 | public String getButtonID() { return "HideReverseConnectionsButton"; } 21 | 22 | @Override 23 | public String getButtonAction() { return "ActionButton"; } 24 | 25 | @Override 26 | public String getButtonPanel() { return "Display"; } 27 | 28 | @Override 29 | public String getInfoText() { return getLocaleString("display_toggle_connect_reverse_tooltip"); } 30 | 31 | @Override 32 | public boolean detectRegularConnections() { return false; } 33 | @Override 34 | public boolean detectSubprioConnections() { return false; } 35 | @Override 36 | public boolean detectDualConnections() { return false; } 37 | 38 | @Override 39 | public Integer getLineDetectionInterval() { return 20; } 40 | 41 | @Override 42 | public Boolean previewConnectionHiddenChange() { return true; } 43 | 44 | @Override 45 | public void mouseClicked(MouseEvent e) { 46 | if (e.getButton() == MouseEvent.BUTTON3) { 47 | resetHiddenStatusForAll(CONNECTION_REVERSE); 48 | getMapPanel().repaint(); 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Display/HideSubprioConnectionsButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Display; 2 | 3 | import AutoDriveEditor.GUI.Buttons.ConnectionSelectBaseButton; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.MouseEvent; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 9 | import static AutoDriveEditor.GUI.Buttons.LinerLineBaseButton.CONNECTION_STANDARD_SUBPRIO; 10 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 11 | import static AutoDriveEditor.Utils.GUIUtils.makeImageToggleButton; 12 | 13 | public class HideSubprioConnectionsButton extends ConnectionSelectBaseButton { 14 | 15 | public HideSubprioConnectionsButton(JPanel panel) { 16 | button = makeImageToggleButton("buttons/hide_connect_subprio","buttons/hide_connect_subprio_selected", null,"display_toggle_connect_subprio_tooltip","display_toggle_connect_subprio_alt", panel, false, false, null, false, this); 17 | } 18 | 19 | @Override 20 | public String getButtonID() { return "HideSubprioConnectionsButton"; } 21 | 22 | @Override 23 | public String getButtonAction() { return "ActionButton"; } 24 | 25 | @Override 26 | public String getButtonPanel() { return "Display"; } 27 | 28 | @Override 29 | public String getInfoText() { return getLocaleString("display_toggle_connect_subprio_tooltip"); } 30 | 31 | 32 | @Override 33 | public boolean detectRegularConnections() { return false; } 34 | @Override 35 | public boolean detectReverseConnections() { return false; } 36 | @Override 37 | public boolean detectDualConnections() { return false; } 38 | 39 | @Override 40 | public Integer getLineDetectionInterval() { return 20; } 41 | 42 | @Override 43 | public Boolean previewConnectionHiddenChange() { return true; } 44 | 45 | @Override 46 | public void mouseClicked(MouseEvent e) { 47 | if (e.getButton() == MouseEvent.BUTTON3) { 48 | resetHiddenStatusForAll(CONNECTION_STANDARD_SUBPRIO); 49 | getMapPanel().repaint(); 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Edit/CopySelectionButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Edit; 2 | 3 | import AutoDriveEditor.GUI.Buttons.CopyPasteBaseButton; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | 8 | import static AutoDriveEditor.GUI.Menus.DebugMenu.Logging.LogCopyPasteMenu.bDebugLogCopyPasteInfo; 9 | import static AutoDriveEditor.Utils.GUIUtils.makeImageButton; 10 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 11 | 12 | public class CopySelectionButton extends CopyPasteBaseButton { 13 | 14 | public CopySelectionButton(JPanel panel) { 15 | button = makeImageButton("buttons/copy", "buttons/copy_selected", null, "copypaste_copy_tooltip","copypaste_copy_alt", panel, false, this); 16 | } 17 | 18 | @Override 19 | public String getButtonID() { return "CopySelectionButton"; } 20 | 21 | @Override 22 | public String getButtonAction() { return "ActionButton"; } 23 | 24 | @Override 25 | public String getButtonPanel() { return "Edit"; } 26 | 27 | @Override 28 | public Boolean ignoreButtonDeselect() { return true; } 29 | 30 | @Override 31 | public void actionPerformed(ActionEvent e) { 32 | super.actionPerformed(e); 33 | if (bDebugLogCopyPasteInfo) LOG.info("CopySelectionButton > Button Pressed"); 34 | copySelected(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Edit/CutSelectionButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Edit; 2 | 3 | import AutoDriveEditor.GUI.Buttons.CopyPasteBaseButton; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | 8 | import static AutoDriveEditor.GUI.Menus.DebugMenu.Logging.LogCopyPasteMenu.bDebugLogCopyPasteInfo; 9 | import static AutoDriveEditor.Utils.GUIUtils.makeImageButton; 10 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 11 | 12 | public class CutSelectionButton extends CopyPasteBaseButton { 13 | 14 | public CutSelectionButton(JPanel panel) { 15 | button = makeImageButton("buttons/cut", "buttons/cut_selected", null, "copypaste_cut_tooltip","copypaste_cut_alt", panel, false, this); 16 | } 17 | 18 | @Override 19 | public String getButtonID() { return "CutSelectionButton"; } 20 | 21 | @Override 22 | public String getButtonAction() { return "ActionButton"; } 23 | 24 | @Override 25 | public String getButtonPanel() { return "Edit"; } 26 | 27 | @Override 28 | public Boolean ignoreButtonDeselect() { return true; } 29 | 30 | @Override 31 | public void actionPerformed(ActionEvent e) { 32 | super.actionPerformed(e); 33 | if (bDebugLogCopyPasteInfo) LOG.info("CutSelectionButton > Button Pressed"); 34 | cutSelected(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Edit/PasteSelectionButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Edit; 2 | 3 | import AutoDriveEditor.GUI.Buttons.CopyPasteBaseButton; 4 | import AutoDriveEditor.Managers.ChangeManager; 5 | import AutoDriveEditor.RoadNetwork.MapNode; 6 | import AutoDriveEditor.RoadNetwork.RoadMap; 7 | 8 | import javax.swing.*; 9 | import java.awt.event.ActionEvent; 10 | import java.util.ArrayList; 11 | import java.util.LinkedList; 12 | 13 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 14 | import static AutoDriveEditor.GUI.MapPanel.isStale; 15 | import static AutoDriveEditor.GUI.MapPanel.setStale; 16 | import static AutoDriveEditor.GUI.Menus.DebugMenu.Logging.LogCopyPasteMenu.bDebugLogCopyPasteInfo; 17 | import static AutoDriveEditor.Managers.MultiSelectManager.clearMultiSelection; 18 | import static AutoDriveEditor.Utils.GUIUtils.makeImageButton; 19 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 20 | 21 | public class PasteSelectionButton extends CopyPasteBaseButton { 22 | 23 | public PasteSelectionButton(JPanel panel) { 24 | button = makeImageButton("buttons/paste", "buttons/paste_selected", null, "copypaste_paste_tooltip","copypaste_paste_alt", panel, false, this); 25 | } 26 | 27 | @Override 28 | public String getButtonID() { return "PasteSelectionButton"; } 29 | 30 | @Override 31 | public String getButtonAction() { return "ActionButton"; } 32 | 33 | @Override 34 | public String getButtonPanel() { return "Edit"; } 35 | 36 | @Override 37 | public Boolean ignoreButtonDeselect() { return true; } 38 | 39 | @Override 40 | public void actionPerformed(ActionEvent e) { 41 | super.actionPerformed(e); 42 | if (bDebugLogCopyPasteInfo) LOG.info("PasteSelectionButton > Button Pressed"); 43 | pasteSelected(); 44 | } 45 | 46 | // 47 | // Paste selection changer 48 | // 49 | 50 | public static class PasteSelectionChanger implements ChangeManager.Changeable { 51 | //private final LinkedList storeNodes; 52 | private final ArrayList storeNodes; 53 | private final boolean isStale; 54 | 55 | public PasteSelectionChanger(LinkedList nodes){ 56 | super(); 57 | this.storeNodes = new ArrayList<>(nodes); 58 | this.isStale = isStale(); 59 | } 60 | 61 | public void undo(){ 62 | clearMultiSelection(); 63 | RoadMap.networkNodesList.removeAll(this.storeNodes); 64 | getMapPanel().repaint(); 65 | setStale(this.isStale); 66 | } 67 | 68 | public void redo(){ 69 | RoadMap.networkNodesList.addAll(this.storeNodes); 70 | getMapPanel().repaint(); 71 | setStale(true); 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/MarkerBaseButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons; 2 | 3 | public abstract class MarkerBaseButton extends BaseButton { 4 | 5 | public static class markerDestinationInfo { 6 | private final String name; 7 | private final String group; 8 | public markerDestinationInfo(String destName, String groupName){ 9 | name = destName; 10 | group = groupName; 11 | } 12 | 13 | // 14 | // getter setters 15 | // 16 | 17 | public String getName() { 18 | return name; 19 | } 20 | 21 | public String getGroup() { 22 | return group; 23 | } 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Markers/DeleteMarkerButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Markers; 2 | 3 | import AutoDriveEditor.GUI.Buttons.MarkerBaseButton; 4 | import AutoDriveEditor.Managers.ChangeManager; 5 | import AutoDriveEditor.RoadNetwork.MapNode; 6 | 7 | import javax.swing.*; 8 | import java.awt.event.MouseEvent; 9 | 10 | import static AutoDriveEditor.AutoDriveEditor.changeManager; 11 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 12 | import static AutoDriveEditor.GUI.MapPanel.*; 13 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 14 | import static AutoDriveEditor.Utils.GUIUtils.makeImageToggleButton; 15 | import static AutoDriveEditor.XMLConfig.AutoSave.resumeAutoSaving; 16 | import static AutoDriveEditor.XMLConfig.AutoSave.suspendAutoSaving; 17 | 18 | public class DeleteMarkerButton extends MarkerBaseButton { 19 | 20 | public DeleteMarkerButton(JPanel panel) { 21 | button = makeImageToggleButton("buttons/deletemarker","buttons/deletemarker_selected", null,"markers_delete_tooltip","markers_delete_alt", panel, false, false, null, false, this); 22 | } 23 | 24 | @Override 25 | public String getButtonID() { return "DeleteMarkerButton"; } 26 | 27 | @Override 28 | public String getButtonAction() { return "ActionButton"; } 29 | 30 | @Override 31 | public String getButtonPanel() { return "Markers"; } 32 | 33 | @Override 34 | public String getInfoText() { return getLocaleString("markers_delete_tooltip"); } 35 | 36 | @Override 37 | public void mouseClicked(MouseEvent e) { 38 | if (e.getButton() == MouseEvent.BUTTON1) { 39 | MapNode selectedNode = getNodeAtScreenPosition(e.getX(), e.getY()); 40 | if (selectedNode != null) { 41 | if (selectedNode.hasMapMarker()) { 42 | removeMarkerFromNode(selectedNode); 43 | } 44 | } 45 | } 46 | } 47 | 48 | public void removeMarkerFromNode(MapNode fromMapNode) { 49 | suspendAutoSaving(); 50 | changeManager.addChangeable( new MarkerRemoveChanger(fromMapNode)); 51 | fromMapNode.removeMapMarker(); 52 | setStale(true); 53 | getMapPanel().repaint(); 54 | resumeAutoSaving(); 55 | } 56 | 57 | public static class MarkerRemoveChanger implements ChangeManager.Changeable { 58 | private final MapNode markerNode; 59 | private final String markerName; 60 | private final String markerGroup; 61 | private final Boolean isStale; 62 | 63 | public MarkerRemoveChanger(MapNode mapnode){ 64 | this.markerNode = mapnode; 65 | this.markerName = mapnode.getMarkerName(); 66 | this.markerGroup = mapnode.getMarkerGroup(); 67 | this.isStale = isStale(); 68 | } 69 | 70 | public void undo(){ 71 | this.markerNode.createMapMarker(this.markerName, this.markerGroup); 72 | getMapPanel().repaint(); 73 | setStale(this.isStale); 74 | } 75 | 76 | public void redo(){ 77 | this.markerNode.removeMapMarker(); 78 | getMapPanel().repaint(); 79 | setStale(true); 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Nodes/AddPrimaryNodeButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Nodes; 2 | 3 | import AutoDriveEditor.GUI.Buttons.AddNodeBaseButton; 4 | import AutoDriveEditor.RoadNetwork.MapNode; 5 | 6 | import javax.swing.*; 7 | import java.awt.event.MouseEvent; 8 | import java.awt.geom.Point2D; 9 | 10 | import static AutoDriveEditor.GUI.MapPanel.screenPosToWorldPos; 11 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 12 | import static AutoDriveEditor.Managers.ScanManager.checkAreaForNodeOverlap; 13 | import static AutoDriveEditor.RoadNetwork.MapNode.NODE_FLAG_REGULAR; 14 | import static AutoDriveEditor.Utils.GUIUtils.makeImageToggleButton; 15 | 16 | public class AddPrimaryNodeButton extends AddNodeBaseButton { 17 | 18 | public AddPrimaryNodeButton(JPanel panel) { 19 | button = makeImageToggleButton("buttons/createprimary","buttons/createprimary_selected", null, "nodes_create_primary_node_tooltip", "nodes_create_primary_node_alt", panel, false, false, null, false, this); 20 | } 21 | 22 | @Override 23 | public String getButtonID() { return "AddPrimaryNodeButton"; } 24 | 25 | @Override 26 | public String getButtonAction() { return "ActionButton"; } 27 | 28 | @Override 29 | public String getButtonPanel() { return "Nodes"; } 30 | 31 | @Override 32 | public String getInfoText() { return getLocaleString("nodes_create_primary_node_tooltip"); } 33 | 34 | @Override 35 | public void mouseReleased(MouseEvent e) { 36 | if (e.getButton() == MouseEvent.BUTTON1) { 37 | Point2D worldPos = screenPosToWorldPos(e.getX(), e.getY()); 38 | MapNode newNode = createNode(worldPos.getX(), worldPos.getY(), NODE_FLAG_REGULAR); 39 | checkAreaForNodeOverlap(newNode); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Nodes/AddSecondaryNodeButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Nodes; 2 | 3 | import AutoDriveEditor.GUI.Buttons.AddNodeBaseButton; 4 | import AutoDriveEditor.RoadNetwork.MapNode; 5 | 6 | import javax.swing.*; 7 | import java.awt.event.MouseEvent; 8 | import java.awt.geom.Point2D; 9 | 10 | import static AutoDriveEditor.GUI.MapPanel.screenPosToWorldPos; 11 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 12 | import static AutoDriveEditor.Managers.ScanManager.checkAreaForNodeOverlap; 13 | import static AutoDriveEditor.RoadNetwork.MapNode.NODE_FLAG_SUBPRIO; 14 | import static AutoDriveEditor.Utils.GUIUtils.makeImageToggleButton; 15 | 16 | public class AddSecondaryNodeButton extends AddNodeBaseButton { 17 | 18 | public AddSecondaryNodeButton(JPanel panel) { 19 | button = makeImageToggleButton("buttons/createsecondary","buttons/createsecondary_selected", null, "nodes_create_secondary_node_tooltip", "nodes_create_secondary_node_alt", panel, false, false, null, false, this); 20 | } 21 | 22 | @Override 23 | public String getButtonID() { return "AddSecondaryNodeButton"; } 24 | 25 | @Override 26 | public String getButtonAction() { return "ActionButton"; } 27 | 28 | @Override 29 | public String getButtonPanel() { return "Nodes"; } 30 | 31 | @Override 32 | public String getInfoText() { return getLocaleString("nodes_create_secondary_node_tooltip"); } 33 | 34 | @Override 35 | public void mouseReleased(MouseEvent e) { 36 | if (e.getButton() == MouseEvent.BUTTON1) { 37 | Point2D worldPos = screenPosToWorldPos(e.getX(), e.getY()); 38 | MapNode newNode = createNode(worldPos.getX(), worldPos.getY(), NODE_FLAG_SUBPRIO); 39 | checkAreaForNodeOverlap(newNode); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Nodes/DualConnectionButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Nodes; 2 | 3 | import AutoDriveEditor.GUI.Buttons.LinerLineBaseButton; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.MouseListener; 7 | 8 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 9 | import static AutoDriveEditor.Utils.GUIUtils.makeStateChangeImageToggleButton; 10 | import static AutoDriveEditor.Utils.ImageUtils.loadImageIcon; 11 | 12 | public class DualConnectionButton extends LinerLineBaseButton implements MouseListener { 13 | 14 | private final ImageIcon dualConnectionIcon; 15 | private final ImageIcon dualConnectionSelectedIcon; 16 | private final ImageIcon dualConnectionSubPrioIcon; 17 | private final ImageIcon dualConnectionSubPrioSelectedIcon; 18 | 19 | 20 | public DualConnectionButton(JPanel panel) { 21 | dualConnectionIcon = loadImageIcon("editor/buttons/connectdual.png"); 22 | dualConnectionSelectedIcon = loadImageIcon("editor/buttons/connectdual_selected.png"); 23 | dualConnectionSubPrioIcon = loadImageIcon("editor/buttons/connectdual_subprio.png"); 24 | dualConnectionSubPrioSelectedIcon = loadImageIcon("editor/buttons/connectdual_subprio_selected.png"); 25 | 26 | button = makeStateChangeImageToggleButton("buttons/connectdual","buttons/connectdual_selected", null, "nodes_create_dual_connection_tooltip", "nodes_create_dual_connection_alt", panel, false, false, null, false, this); 27 | //add Mouse Listener to detect right click on button to change between normal/subprio nodes 28 | button.addMouseListener(this); 29 | connectionType = CONNECTION_DUAL; 30 | } 31 | 32 | @Override 33 | public String getButtonID() { return "DualConnectionButton"; } 34 | 35 | @Override 36 | public String getButtonAction() { return "ActionButton"; } 37 | 38 | @Override 39 | public String getButtonPanel() { return "Nodes"; } 40 | 41 | @Override 42 | public String getInfoText() { return getLocaleString("nodes_create_dual_connection_tooltip"); } 43 | 44 | @Override 45 | protected void setNormalStateIcons() { 46 | button.setIcon(dualConnectionIcon); 47 | button.setSelectedIcon(dualConnectionSelectedIcon); 48 | } 49 | 50 | @Override 51 | protected void setAlternateStateIcons() { 52 | button.setIcon(dualConnectionSubPrioIcon); 53 | button.setSelectedIcon(dualConnectionSubPrioSelectedIcon); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Nodes/NormalConnectionButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Nodes; 2 | 3 | import AutoDriveEditor.GUI.Buttons.LinerLineBaseButton; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.MouseListener; 7 | 8 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 9 | import static AutoDriveEditor.Utils.GUIUtils.makeStateChangeImageToggleButton; 10 | import static AutoDriveEditor.Utils.ImageUtils.loadImageIcon; 11 | 12 | public class NormalConnectionButton extends LinerLineBaseButton implements MouseListener { 13 | 14 | private final ImageIcon normalConnectionIcon; 15 | private final ImageIcon normalConnectionSelectedIcon; 16 | private final ImageIcon normalConnectionSubPrioIcon; 17 | private final ImageIcon normalConnectionSubPrioSelectedIcon; 18 | 19 | 20 | public NormalConnectionButton(JPanel panel) { 21 | normalConnectionIcon = loadImageIcon("editor/buttons/connectregular.png"); 22 | normalConnectionSelectedIcon = loadImageIcon("editor/buttons/connectregular_selected.png"); 23 | normalConnectionSubPrioIcon = loadImageIcon("editor/buttons/connectregular_subprio.png"); 24 | normalConnectionSubPrioSelectedIcon = loadImageIcon("editor/buttons/connectregular_subprio_selected.png"); 25 | 26 | button = makeStateChangeImageToggleButton("buttons/connectregular", "buttons/connectregular_selected", null,"nodes_create_regular_connection_tooltip","nodes_create_regular_connection_alt", panel, false, false, null, false, this); 27 | //add Mouse Listener to detect right click on button to change between normal/subprio nodes 28 | button.addMouseListener(this); 29 | connectionType = CONNECTION_STANDARD; 30 | } 31 | 32 | @Override 33 | public String getButtonID() { return "NormalConnectionButton"; } 34 | 35 | @Override 36 | public String getButtonAction() { return "ActionButton"; } 37 | 38 | @Override 39 | public String getButtonPanel() { return "Nodes"; } 40 | 41 | @Override 42 | public String getInfoText() { return getLocaleString("nodes_create_regular_connection_tooltip"); } 43 | 44 | @Override 45 | protected void setNormalStateIcons() { 46 | button.setIcon(normalConnectionIcon); 47 | button.setSelectedIcon(normalConnectionSelectedIcon); 48 | } 49 | 50 | @Override 51 | protected void setAlternateStateIcons() { 52 | button.setIcon(normalConnectionSubPrioIcon); 53 | button.setSelectedIcon(normalConnectionSubPrioSelectedIcon); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Nodes/ReverseConnectionButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Nodes; 2 | 3 | import AutoDriveEditor.GUI.Buttons.LinerLineBaseButton; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.MouseListener; 7 | 8 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 9 | import static AutoDriveEditor.Utils.GUIUtils.makeStateChangeImageToggleButton; 10 | import static AutoDriveEditor.Utils.ImageUtils.loadImageIcon; 11 | 12 | public class ReverseConnectionButton extends LinerLineBaseButton implements MouseListener { 13 | 14 | private final ImageIcon reverseConnectionIcon; 15 | private final ImageIcon reverseConnectionSelectedIcon; 16 | private final ImageIcon reverseConnectionSubPrioIcon; 17 | private final ImageIcon reverseConnectionSubPrioSelectedIcon; 18 | 19 | public ReverseConnectionButton(JPanel panel) { 20 | reverseConnectionIcon = loadImageIcon("editor/buttons/connectreverse.png"); 21 | reverseConnectionSelectedIcon = loadImageIcon("editor/buttons/connectreverse_selected.png"); 22 | reverseConnectionSubPrioIcon = loadImageIcon("editor/buttons/connectreverse_subprio.png"); 23 | reverseConnectionSubPrioSelectedIcon = loadImageIcon("editor/buttons/connectreverse_subprio_selected.png"); 24 | 25 | button = makeStateChangeImageToggleButton("buttons/connectreverse","buttons/connectreverse_selected", null, "nodes_create_reverse_connection_tooltip", "nodes_create_reverse_connection_alt", panel, false, false, null, false, this); 26 | button.addMouseListener(this); 27 | connectionType = CONNECTION_REVERSE; 28 | } 29 | 30 | @Override 31 | public String getButtonID() { return "ReverseConnectionButton"; } 32 | 33 | @Override 34 | public String getButtonAction() { return "ActionButton"; } 35 | 36 | @Override 37 | public String getButtonPanel() { return "Nodes"; } 38 | 39 | @Override 40 | public String getInfoText() { return getLocaleString("nodes_create_reverse_connection_tooltip"); } 41 | 42 | @Override 43 | protected void setNormalStateIcons() { 44 | button.setIcon(reverseConnectionIcon); 45 | button.setSelectedIcon(reverseConnectionSelectedIcon); 46 | } 47 | 48 | @Override 49 | protected void setAlternateStateIcons() { 50 | button.setIcon(reverseConnectionSubPrioIcon); 51 | button.setSelectedIcon(reverseConnectionSubPrioSelectedIcon); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Options/ContinuousConnectionButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Options; 2 | 3 | import AutoDriveEditor.GUI.Buttons.OptionsBaseButton; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | 8 | import static AutoDriveEditor.GUI.TextPanel.showInTextArea; 9 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 10 | import static AutoDriveEditor.Utils.GUIUtils.makeImageToggleButton; 11 | import static AutoDriveEditor.XMLConfig.EditorXML.bContinuousConnections; 12 | 13 | public class ContinuousConnectionButton extends OptionsBaseButton { 14 | 15 | public ContinuousConnectionButton(JPanel panel) { 16 | String tooltip; 17 | boolean isSelected; 18 | 19 | if (bContinuousConnections) { 20 | tooltip = "options_con_connect_enabled_tooltip"; 21 | isSelected = false; 22 | } else { 23 | tooltip = "options_con_connect_disabled_tooltip"; 24 | isSelected = true; 25 | } 26 | button = makeImageToggleButton("buttons/conconnect", "buttons/conconnect_selected", null, tooltip, "options_con_connect_alt", panel, !bContinuousConnections, false, null, false, this); 27 | button.setSelected(isSelected); 28 | } 29 | 30 | @Override 31 | public String getButtonID() { return "ContinuousConnectionButton"; } 32 | 33 | @Override 34 | public String getInfoText() { return null; } 35 | 36 | @Override 37 | public void actionPerformed(ActionEvent e) { 38 | super.actionPerformed(e); 39 | bContinuousConnections = !bContinuousConnections; 40 | if (bContinuousConnections) { 41 | button.setToolTipText(getLocaleString("options_con_connect_enabled_tooltip")); 42 | showInTextArea(getLocaleString("options_con_connect_enabled_tooltip"), true, false); 43 | } else { 44 | button.setToolTipText(getLocaleString("options_con_connect_disabled_tooltip")); 45 | showInTextArea(getLocaleString("options_con_connect_disabled_tooltip"), true, false); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Options/NodeSizeDownButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Options; 2 | 3 | import AutoDriveEditor.GUI.Buttons.OptionsBaseButton; 4 | 5 | import javax.swing.*; 6 | 7 | import static AutoDriveEditor.Utils.GUIUtils.makeImageButton; 8 | import static AutoDriveEditor.XMLConfig.EditorXML.nodeSize; 9 | import static AutoDriveEditor.XMLConfig.EditorXML.setNewNodeSize; 10 | 11 | public class NodeSizeDownButton extends OptionsBaseButton { 12 | 13 | public NodeSizeDownButton(JPanel panel) { 14 | button = makeImageButton("buttons/nodeminus", "buttons/nodeminus_selected", null,"options_node_size_minus_tooltip","options_node_size_minus_alt", panel, false, this); 15 | Timer nodeDownButtonTimer = new Timer(75, e -> { 16 | if (nodeSize > 0.1) setNewNodeSize(nodeSize - 0.10f); 17 | }); 18 | nodeDownButtonTimer.setCoalesce(true); 19 | nodeDownButtonTimer.setRepeats(true); 20 | 21 | button.getModel().addChangeListener(e -> { 22 | if (button.getModel().isPressed()) { 23 | nodeDownButtonTimer.start(); 24 | } else { 25 | nodeDownButtonTimer.stop(); 26 | } 27 | }); 28 | } 29 | 30 | @Override 31 | public String getButtonID() { return "NodeSizeDownButton"; } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Options/NodeSizeUpButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Options; 2 | 3 | import AutoDriveEditor.GUI.Buttons.OptionsBaseButton; 4 | 5 | import javax.swing.*; 6 | 7 | import static AutoDriveEditor.Utils.GUIUtils.makeImageButton; 8 | import static AutoDriveEditor.XMLConfig.EditorXML.nodeSize; 9 | import static AutoDriveEditor.XMLConfig.EditorXML.setNewNodeSize; 10 | 11 | public class NodeSizeUpButton extends OptionsBaseButton { 12 | 13 | public NodeSizeUpButton(JPanel panel) { 14 | button = makeImageButton("buttons/nodeplus", "buttons/nodeplus_selected", null,"options_node_size_plus_tooltip","options_node_size_plus_alt", panel, false, this); 15 | Timer nodeUpButtonTimer = new Timer(75, e -> setNewNodeSize(nodeSize + 0.10f)); 16 | nodeUpButtonTimer.setCoalesce(true); 17 | nodeUpButtonTimer.setRepeats(true); 18 | 19 | button.getModel().addChangeListener(e -> { 20 | if (button.getModel().isPressed()) { 21 | nodeUpButtonTimer.start(); 22 | } else { 23 | nodeUpButtonTimer.stop(); 24 | } 25 | }); 26 | } 27 | 28 | @Override 29 | public String getButtonID() { return "NodeSizeUpButton"; } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Options/OpenConfigButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Options; 2 | 3 | import AutoDriveEditor.GUI.Buttons.OptionsBaseButton; 4 | import AutoDriveEditor.GUI.Config.ConfigGUI; 5 | import AutoDriveEditor.Listeners.ConfigListener; 6 | 7 | import javax.swing.*; 8 | import java.awt.event.ActionEvent; 9 | 10 | import static AutoDriveEditor.AutoDriveEditor.editor; 11 | import static AutoDriveEditor.GUI.Config.ConfigGUI.configGUI; 12 | import static AutoDriveEditor.GUI.Config.ConfigGUI.createConfigGUI; 13 | import static AutoDriveEditor.Utils.GUIUtils.makeImageButton; 14 | 15 | public class OpenConfigButton extends OptionsBaseButton { 16 | 17 | public static ConfigListener configListener; 18 | 19 | public OpenConfigButton(JPanel panel) { 20 | button = makeImageButton("buttons/config", "buttons/config_selected", null, "options_config_open_tooltip","options_config_open_alt", panel, true, this); 21 | configListener = new ConfigListener(); 22 | } 23 | 24 | @Override 25 | public String getButtonID() { return "OpenConfigButton"; } 26 | 27 | @Override 28 | public void actionPerformed(ActionEvent e) { 29 | super.actionPerformed(e); 30 | if (!ConfigGUI.isConfigWindowOpen) { 31 | createConfigGUI(editor); 32 | } else { 33 | configGUI.toFront(); 34 | } 35 | } 36 | 37 | // Override base function - ignore any enabled/disabled messages as we want it available at all times 38 | @Override 39 | public void setEnabled(boolean enabled) {} 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Options/SelectHiddenButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Options; 2 | 3 | import AutoDriveEditor.GUI.Buttons.OptionsBaseButton; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | 8 | import static AutoDriveEditor.GUI.TextPanel.showInTextArea; 9 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 10 | import static AutoDriveEditor.Utils.GUIUtils.makeImageToggleButton; 11 | import static AutoDriveEditor.XMLConfig.EditorXML.bSelectHidden; 12 | 13 | public class SelectHiddenButton extends OptionsBaseButton { 14 | 15 | public SelectHiddenButton(JPanel panel) { 16 | String tooltip; 17 | boolean isSelected; 18 | 19 | if (bSelectHidden) { 20 | tooltip = "display_select_hidden_enabled_tooltip"; 21 | isSelected = false; 22 | } else { 23 | tooltip = "display_select_hidden_disabled_tooltip"; 24 | isSelected = true; 25 | } 26 | 27 | button = makeImageToggleButton("buttons/hidden","buttons/hidden_selected", null, tooltip, tooltip, panel, false, false, null, false, this); 28 | button.setSelected(isSelected); 29 | } 30 | 31 | @Override 32 | public String getButtonID() { return "SelectHiddenButton"; } 33 | 34 | @Override 35 | public String getButtonAction() { return "ActionButton"; } 36 | 37 | @Override 38 | public String getButtonPanel() { return "Options"; } 39 | 40 | @Override 41 | public String getInfoText() { return getLocaleString("nodes_create_primary_node_tooltip"); } 42 | 43 | @Override 44 | public void actionPerformed(ActionEvent e) { 45 | super.actionPerformed(e); 46 | bSelectHidden = !bSelectHidden; 47 | if (bSelectHidden) { 48 | button.setToolTipText(getLocaleString("display_select_hidden_enabled_tooltip")); 49 | showInTextArea(getLocaleString("display_select_hidden_enabled_tooltip"), true, false); 50 | } else { 51 | button.setToolTipText(getLocaleString("display_select_hidden_disabled_tooltip")); 52 | showInTextArea(getLocaleString("display_select_hidden_disabled_tooltip"), true, false); 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/OptionsBaseButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons; 2 | 3 | public abstract class OptionsBaseButton extends BaseButton{ 4 | 5 | @Override 6 | public String getButtonAction() { return "OptionButton"; } 7 | 8 | @Override 9 | public String getButtonPanel() { return "Options"; } 10 | 11 | @Override 12 | public String getInfoText() { return null; } 13 | 14 | @Override 15 | public Boolean ignoreButtonDeselect() { return true; } 16 | 17 | @Override 18 | public void setSelected(boolean selected) {} 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Testing/TemplateButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Testing; 2 | 3 | import AutoDriveEditor.GUI.Buttons.BaseButton; 4 | 5 | import javax.swing.*; 6 | import java.awt.*; 7 | import java.awt.event.ActionEvent; 8 | import java.awt.event.MouseEvent; 9 | import java.awt.event.MouseWheelEvent; 10 | 11 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 12 | import static AutoDriveEditor.Utils.GUIUtils.makeImageToggleButton; 13 | 14 | @SuppressWarnings("unused") 15 | public class TemplateButton extends BaseButton { 16 | 17 | // 18 | // 19 | // 20 | 21 | public TemplateButton(JPanel panel) { 22 | 23 | // create your button, the pointer to it must be assigned to the button variable 24 | // 25 | // e.g. 26 | // button = new JButton() 27 | // button = new JToggleButton() 28 | 29 | button = makeImageToggleButton( "buttons/unknown", "buttons/unknown_selected", null, "nodes_test_tooltip", "options_con_connect_alt", panel, true, true, null, false, this); 30 | } 31 | 32 | @Override 33 | public String getButtonID() { return "TemplateButton"; } 34 | 35 | @Override 36 | public String getButtonAction() { return "TemplateAction"; } 37 | 38 | @Override 39 | public String getButtonPanel() { return "Template"; } 40 | 41 | @Override 42 | public String getInfoText() { return getLocaleString("nodes_template_tooltip"); } 43 | 44 | @Override 45 | public Boolean ignoreButtonDeselect() { return false; } 46 | 47 | @Override 48 | public Boolean useMultiSelection() { return true; } 49 | 50 | @Override 51 | public Boolean previewNodeSelectionChange() { return true; } 52 | 53 | @Override 54 | public void setEnabled(boolean selected) {} 55 | 56 | @Override 57 | public void setSelected(boolean selected) {} 58 | 59 | @Override 60 | public void actionPerformed(ActionEvent e) {} 61 | 62 | @Override 63 | public void mouseClicked(MouseEvent e) {} 64 | 65 | @Override 66 | public void mousePressed(MouseEvent e) {} 67 | 68 | @Override 69 | public void mouseReleased(MouseEvent e) {} 70 | 71 | @Override 72 | public void mouseDragged(MouseEvent e) {} 73 | 74 | @Override 75 | public void mouseMoved(MouseEvent e) {} 76 | 77 | @Override 78 | public void mouseWheelMoved(MouseWheelEvent e) {} 79 | 80 | @Override 81 | public void drawToScreen(Graphics g) {} 82 | 83 | 84 | 85 | 86 | } 87 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Buttons/Testing/TestButton.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Buttons.Testing; 2 | 3 | import AutoDriveEditor.GUI.Buttons.BaseButton; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | 8 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 9 | import static AutoDriveEditor.Utils.GUIUtils.makeImageToggleButton; 10 | 11 | public class TestButton extends BaseButton { 12 | 13 | public static boolean bTestButton; 14 | 15 | // test overrides 16 | 17 | public TestButton(JPanel panel) { 18 | button = makeImageToggleButton( "buttons/unknown", "buttons/unknown_selected", null, "nodes_test_tooltip", "options_con_connect_alt", panel, bTestButton, true, null, false, this); 19 | } 20 | 21 | @Override 22 | public String getButtonID() { return "TestButton"; } 23 | 24 | @Override 25 | public String getButtonAction() { return "ActionButton"; } 26 | 27 | @Override 28 | public String getButtonPanel() { return "Test"; } 29 | 30 | @Override 31 | public String getInfoText() { return getLocaleString("nodes_test_tooltip"); } 32 | 33 | @Override 34 | public Boolean ignoreButtonDeselect() { return true; } 35 | 36 | @Override 37 | public void setSelected(boolean selected) {} 38 | 39 | 40 | @Override 41 | public void actionPerformed(ActionEvent e) { 42 | super.actionPerformed(e); 43 | bTestButton = !bTestButton; 44 | /*if (bTestButton) { 45 | if (bIsDebugEnabled) LOG.info("TestButton = {}", true); 46 | String mainText = "
FATAL Sequence Error detected

" + "e.getMessage()" + "

" + "See AutoDriveEditor.log for more info"; 47 | JOptionPane.showMessageDialog(editor, mainText, "FATAL Sequence Error!!", JOptionPane.ERROR_MESSAGE); 48 | }*/ 49 | 50 | /*if (multiSelectList.size() > 0) { 51 | for (MapNode node: multiSelectList) { 52 | LOG.info("ID {}", node.id); 53 | } 54 | Collections.sort(multiSelectList, (nl1, nl2) -> Integer.compare(nl1.id, nl2.id)); 55 | for (MapNode node: multiSelectList) { 56 | LOG.info("ID {}", node.id); 57 | } 58 | 59 | } else { 60 | LOG.info("list empty"); 61 | }*/ 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Config/Tabs/ExperimentalTab.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Config.Tabs; 2 | 3 | import javax.swing.*; 4 | import java.awt.*; 5 | import java.awt.event.ItemEvent; 6 | 7 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 8 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 9 | import static AutoDriveEditor.Utils.GUIUtils.makeCheckBox; 10 | import static AutoDriveEditor.XMLConfig.EditorXML.bShowSelectionBounds; 11 | 12 | public class ExperimentalTab extends JPanel { 13 | public ExperimentalTab() { 14 | 15 | setLayout(new GridLayout(1,2,0,5)); 16 | 17 | // Show Selection Bounds checkbox 18 | 19 | JLabel showSelectionBoundsLabel = new JLabel(getLocaleString("panel_config_tab_mappanel_show_selection_bounds") + " ", JLabel.TRAILING); 20 | JCheckBox cbShowSelectionBounds = makeCheckBox(showSelectionBoundsLabel, "ShowSelectionBounds", null, true, bShowSelectionBounds); 21 | cbShowSelectionBounds.addItemListener(e -> { 22 | bShowSelectionBounds = e.getStateChange() == ItemEvent.SELECTED; 23 | getMapPanel().repaint(); 24 | }); 25 | showSelectionBoundsLabel.setLabelFor(cbShowSelectionBounds); 26 | add(showSelectionBoundsLabel); 27 | add(cbShowSelectionBounds); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Config/Tabs/MapPanelTab.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Config.Tabs; 2 | 3 | import javax.swing.*; 4 | import javax.swing.border.EmptyBorder; 5 | import java.awt.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 9 | import static AutoDriveEditor.Utils.GUIUtils.makeCheckBox; 10 | import static AutoDriveEditor.XMLConfig.EditorXML.*; 11 | 12 | public class MapPanelTab extends JPanel { 13 | 14 | public MapPanelTab() { 15 | 16 | setLayout(new GridLayout(6,2,0,5)); 17 | 18 | // Use online images checkbox 19 | 20 | JLabel enableOnlineImagesLabel = new JLabel(getLocaleString("panel_config_tab_mappanel_online_images") + " ", JLabel.TRAILING); 21 | JCheckBox cbEnableOnlineImages = makeCheckBox(enableOnlineImagesLabel, getLocaleString("panel_config_tab_mappanel_online_images"), null, true, bUseOnlineMapImages); 22 | cbEnableOnlineImages.addItemListener(e -> bUseOnlineMapImages = e.getStateChange() == ItemEvent.SELECTED); 23 | enableOnlineImagesLabel.setLabelFor(cbEnableOnlineImages); 24 | add(enableOnlineImagesLabel); 25 | add(cbEnableOnlineImages); 26 | 27 | // Middle mouse button move checkbox 28 | 29 | JLabel middleMouseMoveLabel = new JLabel(getLocaleString("panel_config_tab_mappanel_middle_mouse_move") + " ", JLabel.TRAILING); 30 | JCheckBox cbMiddleMouseMove = makeCheckBox(middleMouseMoveLabel, getLocaleString("panel_config_tab_mappanel_middle_mouse_move"), null, true, bMiddleMouseMove); 31 | cbMiddleMouseMove.addItemListener(e -> bMiddleMouseMove = e.getStateChange() == ItemEvent.SELECTED); 32 | middleMouseMoveLabel.setLabelFor(cbMiddleMouseMove); 33 | add(middleMouseMoveLabel); 34 | add(cbMiddleMouseMove); 35 | 36 | // Lock toolbar checkbox 37 | 38 | JLabel lockToolbarLabel = new JLabel(getLocaleString("panel_config_tab_mappanel_lock_toolbar") + " ", JLabel.TRAILING); 39 | JCheckBox cbLockToolbar = makeCheckBox(lockToolbarLabel, getLocaleString("panel_config_tab_mappanel_lock_toolbar"), null, true, bLockToolbarPosition); 40 | cbLockToolbar.addItemListener(e -> bLockToolbarPosition = e.getStateChange() == ItemEvent.SELECTED); 41 | lockToolbarLabel.setLabelFor(cbLockToolbar); 42 | add(lockToolbarLabel); 43 | add(cbLockToolbar); 44 | 45 | cbLockToolbar.addPropertyChangeListener(evt -> { 46 | if ("UNCHECKEDHOT".equals(evt.getNewValue())) { 47 | bLockToolbarPosition = false; 48 | } else if ("CHECKEDHOT".equals(evt.getNewValue())) { 49 | bLockToolbarPosition = true; 50 | } 51 | }); 52 | 53 | // Zoom interpolation checkbox 54 | 55 | JLabel smoothZoomLabel = new JLabel(getLocaleString("panel_config_tab_mappanel_interpolate_zoom") + " ", JLabel.TRAILING); 56 | JCheckBox cbSmoothZoom = makeCheckBox(middleMouseMoveLabel, getLocaleString("panel_config_tab_mappanel_interpolate_zoom"), null, true, bMiddleMouseMove); 57 | cbSmoothZoom.addItemListener(e -> bInterpolateZoom = e.getStateChange() == ItemEvent.SELECTED); 58 | smoothZoomLabel.setLabelFor(cbSmoothZoom); 59 | add(smoothZoomLabel); 60 | add(cbSmoothZoom); 61 | 62 | // Maximum zoom level text field and buttons 63 | 64 | JPanel zoomPanel = new JPanel(); 65 | zoomPanel.setBorder(new EmptyBorder(new Insets(3,0,0,0))); 66 | zoomPanel.setLayout(new FlowLayout(FlowLayout.LEADING)); 67 | 68 | JLabel maxZoomLabel = new JLabel(getLocaleString("panel_config_tab_mappanel_max_zoom") + " ", JLabel.TRAILING); 69 | 70 | SpinnerModel spinnerValue = new SpinnerNumberModel(maxZoomLevel, 1, 250, 1); 71 | JSpinner spinner = new JSpinner(spinnerValue); 72 | spinner.setPreferredSize(new Dimension(50,20)); 73 | 74 | // TODO fix changing zoomLevel to below current level locking zooming 75 | 76 | spinner.addChangeListener(e -> { 77 | JSpinner spinner1 = (JSpinner) e.getSource(); 78 | maxZoomLevel = (int) spinner1.getValue(); 79 | }); 80 | 81 | add(maxZoomLabel); 82 | zoomPanel.add(spinner); 83 | add(zoomPanel); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/EditorImages.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI; 2 | 3 | import javax.swing.*; 4 | import java.awt.image.BufferedImage; 5 | 6 | import static AutoDriveEditor.Utils.ImageUtils.loadImage; 7 | import static AutoDriveEditor.Utils.ImageUtils.loadImageIcon; 8 | 9 | 10 | public class EditorImages { 11 | 12 | private static BufferedImage tractorImage; 13 | private static BufferedImage overlapWarningImage; 14 | private static BufferedImage negativeHeightWarningImage; 15 | private static BufferedImage parkingImage; 16 | private static BufferedImage markerImage; 17 | private static ImageIcon updateIcon; 18 | private static ImageIcon markerIcon; 19 | private static ImageIcon gameIcon; 20 | private static ImageIcon routeIcon; 21 | 22 | 23 | 24 | 25 | public static void loadIcons() { 26 | 27 | updateIcon = loadImageIcon("editor/update.png"); 28 | markerIcon = loadImageIcon("editor/marker.png"); 29 | gameIcon = loadImageIcon("editor/gameIcon.png"); 30 | routeIcon = loadImageIcon("editor/routeIcon.png"); 31 | 32 | tractorImage = loadImage("editor/tractor.png"); 33 | markerImage = loadImage("editor/nodes/node_marker_small2.png"); 34 | parkingImage = loadImage("editor/nodes/node_parking_small.png"); 35 | overlapWarningImage = loadImage("editor/nodes/node_warning.png"); 36 | negativeHeightWarningImage = loadImage("editor/nodes/node_warning_y.png"); 37 | } 38 | 39 | public static ImageIcon getUpdateIcon() { return updateIcon; } 40 | public static ImageIcon getMarkerIcon() { return markerIcon; } 41 | public static ImageIcon getGameIcon() { return gameIcon; } 42 | public static ImageIcon getRouteIcon() { return routeIcon; } 43 | 44 | public static BufferedImage getMarkerImage() { return markerImage; } 45 | public static BufferedImage getTractorImage() { return tractorImage; } 46 | public static BufferedImage getOverlapWarningImage() { return overlapWarningImage; } 47 | public static BufferedImage getNegativeHeightWarningImage() { return negativeHeightWarningImage; } 48 | public static BufferedImage getParkingImage() { return parkingImage; } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogButtonInfoMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogButtonInfoMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogButton; 11 | 12 | public LogButtonInfoMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_button_state", "menu_debug_log_button_state_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogButton = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogConfigGUIInfoMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogConfigGUIInfoMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogConfigGUIInfo; 11 | 12 | public LogConfigGUIInfoMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_config_gui_info", "menu_debug_log_config_gui_info_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogConfigGUIInfo = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogConfigMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogConfigMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogXMLInfo; 11 | 12 | public LogConfigMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_config", "menu_debug_log_config_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogXMLInfo = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogConnectSelectionMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogConnectSelectionMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugConnectSelection; 11 | 12 | public LogConnectSelectionMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_connection_selection_info", "menu_debug_log_connection_selection_info_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugConnectSelection = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogCopyPasteMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogCopyPasteMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogCopyPasteInfo; 11 | 12 | public LogCopyPasteMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_copypaste_info", "menu_debug_log_copypaste_info_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogCopyPasteInfo = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogCurveInfoMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogCurveInfoMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogCurveInfo; 11 | 12 | public LogCurveInfoMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_curve_info", "menu_debug_log_curve_info_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogCurveInfo = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogFileIOMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogFileIOMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogFileIO; 11 | 12 | public LogFileIOMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_fileio", "menu_debug_log_fileio_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogFileIO = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogFlipConnectionMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogFlipConnectionMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogFlipConnection; 11 | 12 | public LogFlipConnectionMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_flip_connection_info", "menu_debug_log_flip_connection_info_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogFlipConnection = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogGUIInfoMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogGUIInfoMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogGUIInfo; 11 | 12 | public LogGUIInfoMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_gui_info", "menu_debug_log_gui_info_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogGUIInfo = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogHeightmapInfoMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogHeightmapInfoMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogHeightMapInfo; 11 | 12 | public LogHeightmapInfoMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_heightmap_info", "menu_debug_log_heightmap_info_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogHeightMapInfo = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogLinearLineInfoMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogLinearLineInfoMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogLinearlineInfo; 11 | 12 | public LogLinearLineInfoMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_linearline_info", "menu_debug_log_linearline_info_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogLinearlineInfo = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogListenerStateMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogListenerStateMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugMenuState; 11 | 12 | public LogListenerStateMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_menu", "menu_debug_log_menu_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugMenuState = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogMarkerInfoMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogMarkerInfoMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogMarkerInfo; 11 | 12 | public LogMarkerInfoMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_marker_info", "menu_debug_log_marker_info_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogMarkerInfo = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogMergeFunctionMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogMergeFunctionMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogMerge; 11 | 12 | public LogMergeFunctionMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_merge", "menu_debug_log_merge_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogMerge = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogMultiSelectInfoMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogMultiSelectInfoMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogMultiSelectInfo; 11 | 12 | public LogMultiSelectInfoMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_multiselect", "menu_debug_log_multiselect_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogMultiSelectInfo = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogRenderInfoMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogRenderInfoMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogRenderInfo; 11 | 12 | public LogRenderInfoMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_render_info", "menu_debug_log_render_info_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogRenderInfo = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogRouteManagerMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogRouteManagerMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogRouteManager; 11 | 12 | public LogRouteManagerMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_routemanager", "menu_debug_log_routemanager_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogRouteManager = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogScanManagerInfoMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogScanManagerInfoMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogScanManagerInfo; 11 | 12 | public LogScanManagerInfoMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_scanmanager_info", "menu_debug_log_scanmanager_info_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogScanManagerInfo = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogUndoRedoMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogUndoRedoMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogUndoRedo; 11 | 12 | public LogUndoRedoMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_undo_redo", "menu_debug_log_undo_redo_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogUndoRedo = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/LogZoomScaleMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | public class LogZoomScaleMenu extends JCheckBoxMenuItemBase { 9 | 10 | public static boolean bDebugLogZoomScale; 11 | 12 | public LogZoomScaleMenu() { 13 | makeCheckBoxMenuItem("menu_debug_log_zoom", "menu_debug_log_zoom_accstring", false, true); 14 | } 15 | 16 | @Override 17 | public void itemStateChanged(ItemEvent e) { 18 | super.itemStateChanged(e); 19 | AbstractButton menuItem = (AbstractButton) e.getItem(); 20 | bDebugLogZoomScale = menuItem.isSelected(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/Logging/ShowZoomLevelInfo.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu.Logging; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 9 | 10 | public class ShowZoomLevelInfo extends JCheckBoxMenuItemBase { 11 | 12 | public static boolean bDebugShowZoomLevelInfo; 13 | public ShowZoomLevelInfo() { 14 | makeCheckBoxMenuItem("menu_debug_zoomlevel", "menu_debug_zoomlevel_accstring", false, true); 15 | } 16 | 17 | @Override 18 | public void itemStateChanged(ItemEvent e) { 19 | super.itemStateChanged(e); 20 | AbstractButton menuItem = (AbstractButton) e.getItem(); 21 | bDebugShowZoomLevelInfo = menuItem.isSelected(); 22 | getMapPanel().repaint(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/MoveNodeToCentreMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | import AutoDriveEditor.RoadNetwork.MapNode; 5 | import AutoDriveEditor.RoadNetwork.RoadMap; 6 | import AutoDriveEditor.Utils.Classes.LabelNumberFilter; 7 | 8 | import javax.swing.*; 9 | import javax.swing.text.PlainDocument; 10 | import java.awt.event.ActionEvent; 11 | import java.awt.geom.Point2D; 12 | 13 | import static AutoDriveEditor.AutoDriveEditor.editor; 14 | import static AutoDriveEditor.AutoDriveEditor.mapPanel; 15 | import static AutoDriveEditor.Classes.MapImage.pdaImage; 16 | import static AutoDriveEditor.GUI.MapPanel.*; 17 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 18 | import static AutoDriveEditor.XMLConfig.EditorXML.maxZoomLevel; 19 | 20 | public class MoveNodeToCentreMenu extends JMenuItemBase { 21 | public MoveNodeToCentreMenu() { 22 | makeMenuItem("menu_debug_movetonode", "menu_debug_movetonode_accstring", true); 23 | } 24 | 25 | @Override 26 | public void actionPerformed(ActionEvent e) { 27 | super.actionPerformed(e); 28 | 29 | if (roadMap != null && pdaImage != null ) { 30 | JTextField centreNode = new JTextField(String.valueOf(1)); 31 | JLabel labelNode = new JLabel(" "); 32 | PlainDocument docX = (PlainDocument) centreNode.getDocument(); 33 | docX.setDocumentFilter(new LabelNumberFilter(labelNode, 0, RoadMap.networkNodesList.size(), false, false)); 34 | 35 | Object[] inputFields = {getLocaleString("dialog_centre_node"), centreNode, labelNode}; 36 | 37 | int option = JOptionPane.showConfirmDialog( editor, inputFields, ""+ getLocaleString("dialog_centre_node_title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); 38 | 39 | if (option == JOptionPane.OK_OPTION) { 40 | zoomLevel = maxZoomLevel; 41 | updateNodeScaling(); 42 | MapNode node = RoadMap.networkNodesList.get(Integer.parseInt(centreNode.getText()) - 1); 43 | Point2D target = worldPosToScreenPos(node.x, node.z); 44 | double x = (mapPanel.getWidth() >> 1) - target.getX(); 45 | double y = (mapPanel.getHeight() >> 1) - target.getY(); 46 | moveMapBy((int)x,(int)y); 47 | } 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/ShowAllNodeIDMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.InputEvent; 7 | import java.awt.event.ItemEvent; 8 | import java.awt.event.KeyEvent; 9 | 10 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 11 | public class ShowAllNodeIDMenu extends JCheckBoxMenuItemBase { 12 | 13 | public static boolean bDebugShowAllNodeID; 14 | 15 | public ShowAllNodeIDMenu() { 16 | makeCheckBoxMenuItem("menu_debug_show_all_node_ID", "menu_debug_show_all_node_ID_accstring", KeyEvent.VK_6, InputEvent.ALT_DOWN_MASK, false,true); 17 | } 18 | 19 | @Override 20 | public void itemStateChanged(ItemEvent e) { 21 | super.itemStateChanged(e); 22 | AbstractButton menuItem = (AbstractButton) e.getItem(); 23 | bDebugShowAllNodeID = menuItem.isSelected(); 24 | getMapPanel().repaint(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/ShowHeightMapInfo.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 9 | import static AutoDriveEditor.GUI.TextPanel.showInTextArea; 10 | 11 | public class ShowHeightMapInfo extends JCheckBoxMenuItemBase { 12 | 13 | public static boolean bDebugShowHeightMapInfo; 14 | public ShowHeightMapInfo() { 15 | makeCheckBoxMenuItem("menu_debug_heightmap", "menu_debug_heightmap_accstring", false, true); 16 | } 17 | 18 | @Override 19 | public void itemStateChanged(ItemEvent e) { 20 | super.itemStateChanged(e); 21 | AbstractButton menuItem = (AbstractButton) e.getItem(); 22 | bDebugShowHeightMapInfo = menuItem.isSelected(); 23 | if (!menuItem.isSelected()) showInTextArea("", true, false); 24 | getMapPanel().repaint(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/ShowNodeHeightMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 9 | 10 | public class ShowNodeHeightMenu extends JCheckBoxMenuItemBase { 11 | 12 | public static boolean bDebugShowHeight; 13 | public ShowNodeHeightMenu() { 14 | makeCheckBoxMenuItem("menu_debug_showheight", "menu_debug_showheight_accstring", false, true); 15 | } 16 | 17 | @Override 18 | public void itemStateChanged(ItemEvent e) { 19 | super.itemStateChanged(e); 20 | AbstractButton menuItem = (AbstractButton) e.getItem(); 21 | bDebugShowHeight = menuItem.isSelected(); 22 | getMapPanel().repaint(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/ShowNodeLocationInfo.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.InputEvent; 7 | import java.awt.event.ItemEvent; 8 | import java.awt.event.KeyEvent; 9 | 10 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 11 | 12 | public class ShowNodeLocationInfo extends JCheckBoxMenuItemBase { 13 | 14 | public static boolean bDebugShowNodeLocationInfo; 15 | 16 | public ShowNodeLocationInfo() { 17 | makeCheckBoxMenuItem("menu_debug_shownodelocationinfo", "menu_debug_shownodelocationinfo_accstring", KeyEvent.VK_7, InputEvent.ALT_DOWN_MASK, false, true); 18 | } 19 | 20 | @Override 21 | public void itemStateChanged(ItemEvent e) { 22 | super.itemStateChanged(e); 23 | AbstractButton menuItem = (AbstractButton) e.getItem(); 24 | bDebugShowNodeLocationInfo = menuItem.isSelected(); 25 | getMapPanel().repaint(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/DebugMenu/ShowProfileInfo.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.DebugMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 9 | 10 | public class ShowProfileInfo extends JCheckBoxMenuItemBase { 11 | 12 | public static boolean bDebugShowProfileInfo; 13 | public ShowProfileInfo() { 14 | makeCheckBoxMenuItem("menu_debug_profile", "menu_debug_profile_accstring", false, true); 15 | } 16 | 17 | @Override 18 | public void itemStateChanged(ItemEvent e) { 19 | super.itemStateChanged(e); 20 | AbstractButton menuItem = (AbstractButton) e.getItem(); 21 | bDebugShowProfileInfo = menuItem.isSelected(); 22 | getMapPanel().repaint(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/Display/ShowMarkerIcons.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.Display; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 9 | import static AutoDriveEditor.XMLConfig.EditorXML.bShowMarkerIcons; 10 | import static AutoDriveEditor.XMLConfig.EditorXML.bShowMarkerNames; 11 | 12 | public class ShowMarkerIcons extends JCheckBoxMenuItemBase { 13 | 14 | public ShowMarkerIcons() { 15 | makeCheckBoxMenuItem("menu_display_show_marker_icons", "menu_display_show_marker_icons_accstring", bShowMarkerNames, true); 16 | } 17 | 18 | @Override 19 | public void itemStateChanged(ItemEvent e) { 20 | super.itemStateChanged(e); 21 | AbstractButton menuItem = (AbstractButton) e.getItem(); 22 | bShowMarkerIcons = menuItem.isSelected(); 23 | getMapPanel().repaint(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/Display/ShowMarkerNames.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.Display; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 9 | import static AutoDriveEditor.XMLConfig.EditorXML.bShowMarkerNames; 10 | 11 | public class ShowMarkerNames extends JCheckBoxMenuItemBase { 12 | 13 | public ShowMarkerNames() { 14 | makeCheckBoxMenuItem("menu_display_show_marker_names", "menu_display_show_marker_names_accstring", bShowMarkerNames, true); 15 | } 16 | 17 | @Override 18 | public void itemStateChanged(ItemEvent e) { 19 | super.itemStateChanged(e); 20 | AbstractButton menuItem = (AbstractButton) e.getItem(); 21 | bShowMarkerNames = menuItem.isSelected(); 22 | getMapPanel().repaint(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/Display/ShowNodeID.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.Display; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 9 | import static AutoDriveEditor.Utils.GUIUtils.InputEvent_NONE; 10 | import static AutoDriveEditor.Utils.GUIUtils.KeyEvent_NONE; 11 | import static AutoDriveEditor.XMLConfig.EditorXML.bShowSelectedNodeID; 12 | 13 | public class ShowNodeID extends JCheckBoxMenuItemBase { 14 | 15 | public ShowNodeID() { 16 | makeCheckBoxMenuItem("menu_display_showID", "menu_display_showID_accstring", KeyEvent_NONE, InputEvent_NONE, bShowSelectedNodeID,true); 17 | } 18 | 19 | public void itemStateChanged(ItemEvent e) { 20 | super.itemStateChanged(e); 21 | AbstractButton menuItem = (AbstractButton) e.getItem(); 22 | bShowSelectedNodeID = menuItem.isSelected(); 23 | getMapPanel().repaint(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/Display/ShowParkingIcons.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.Display; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.getMapPanel; 9 | import static AutoDriveEditor.XMLConfig.EditorXML.bShowMarkerNames; 10 | import static AutoDriveEditor.XMLConfig.EditorXML.bShowParkingIcons; 11 | 12 | public class ShowParkingIcons extends JCheckBoxMenuItemBase { 13 | 14 | public ShowParkingIcons() { 15 | makeCheckBoxMenuItem("menu_display_show_parking_icons", "menu_display_show_parking_icons_accstring", bShowMarkerNames, true); 16 | } 17 | 18 | @Override 19 | public void itemStateChanged(ItemEvent e) { 20 | super.itemStateChanged(e); 21 | AbstractButton menuItem = (AbstractButton) e.getItem(); 22 | bShowParkingIcons = menuItem.isSelected(); 23 | getMapPanel().repaint(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/EditMenu/CopyMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.EditMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | import java.awt.event.InputEvent; 8 | import java.awt.event.KeyEvent; 9 | 10 | import static AutoDriveEditor.GUI.Buttons.CopyPasteBaseButton.copySelected; 11 | 12 | public class CopyMenu extends JMenuItemBase { 13 | 14 | public static JMenuItem menu_Copy; 15 | 16 | public CopyMenu() { 17 | menu_Copy = makeMenuItem("menu_edit_copy", "menu_edit_copy_accstring", KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK, false); 18 | } 19 | 20 | @Override 21 | public void actionPerformed(ActionEvent e) { 22 | super.actionPerformed(e); 23 | copySelected(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/EditMenu/CutMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.EditMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | import java.awt.event.InputEvent; 8 | import java.awt.event.KeyEvent; 9 | 10 | import static AutoDriveEditor.GUI.Buttons.CopyPasteBaseButton.cutSelected; 11 | 12 | public class CutMenu extends JMenuItemBase { 13 | 14 | public static JMenuItem menu_Cut; 15 | 16 | public CutMenu() { 17 | menu_Cut = makeMenuItem("menu_edit_cut", "menu_edit_cut_accstring", KeyEvent.VK_X, InputEvent.CTRL_DOWN_MASK, false); 18 | } 19 | 20 | @Override 21 | public void actionPerformed(ActionEvent e) { 22 | super.actionPerformed(e); 23 | cutSelected(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/EditMenu/PasteMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.EditMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | import java.awt.event.InputEvent; 8 | import java.awt.event.KeyEvent; 9 | 10 | import static AutoDriveEditor.GUI.Buttons.CopyPasteBaseButton.pasteSelected; 11 | 12 | public class PasteMenu extends JMenuItemBase { 13 | 14 | public static JMenuItem menu_Paste; 15 | 16 | public PasteMenu() { 17 | menu_Paste = makeMenuItem("menu_edit_paste", "menu_edit_paste_accstring", KeyEvent.VK_V, InputEvent.CTRL_DOWN_MASK, false); 18 | } 19 | 20 | @Override 21 | public void actionPerformed(ActionEvent e) { 22 | super.actionPerformed(e); 23 | pasteSelected(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/EditMenu/PasteOriginalLocationMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.EditMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | import java.awt.event.InputEvent; 8 | import java.awt.event.KeyEvent; 9 | 10 | import static AutoDriveEditor.GUI.Buttons.CopyPasteBaseButton.pasteSelectedInOriginalLocation; 11 | 12 | public class PasteOriginalLocationMenu extends JMenuItemBase { 13 | 14 | public static JMenuItem menu_PasteOriginalLocation; 15 | 16 | public PasteOriginalLocationMenu() { 17 | menu_PasteOriginalLocation = makeMenuItem("menu_edit_paste_original_location", "menu_edit_paste_original_location_accstring", KeyEvent.VK_V, InputEvent.SHIFT_DOWN_MASK, false); 18 | } 19 | 20 | @Override 21 | public void actionPerformed(ActionEvent e) { 22 | super.actionPerformed(e); 23 | pasteSelectedInOriginalLocation(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/EditMenu/RedoMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.EditMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | import java.awt.event.InputEvent; 8 | import java.awt.event.KeyEvent; 9 | 10 | import static AutoDriveEditor.AutoDriveEditor.changeManager; 11 | 12 | public class RedoMenu extends JMenuItemBase { 13 | 14 | public static JMenuItem menu_Redo; 15 | 16 | public RedoMenu() { 17 | menu_Redo = makeMenuItem("menu_edit_redo", "menu_edit_redo_accstring", KeyEvent.VK_Z, InputEvent.SHIFT_DOWN_MASK, false); 18 | } 19 | 20 | @Override 21 | public void actionPerformed(ActionEvent e) { 22 | super.actionPerformed(e); 23 | changeManager.redo(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/EditMenu/UndoMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.EditMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | import java.awt.event.InputEvent; 8 | import java.awt.event.KeyEvent; 9 | 10 | import static AutoDriveEditor.AutoDriveEditor.changeManager; 11 | 12 | public class UndoMenu extends JMenuItemBase { 13 | 14 | public static JMenuItem menu_Undo; 15 | 16 | public UndoMenu() { 17 | menu_Undo = makeMenuItem("menu_edit_undo", "menu_edit_undo_accstring", KeyEvent.VK_Z, InputEvent.CTRL_DOWN_MASK, false); 18 | } 19 | 20 | @Override 21 | public void actionPerformed(ActionEvent e) { 22 | super.actionPerformed(e); 23 | changeManager.undo(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/FileMenu/ExitEditorMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.FileMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import java.awt.event.ActionEvent; 6 | import java.awt.event.InputEvent; 7 | import java.awt.event.KeyEvent; 8 | import java.awt.event.WindowEvent; 9 | 10 | import static AutoDriveEditor.AutoDriveEditor.editor; 11 | 12 | public class ExitEditorMenu extends JMenuItemBase { 13 | 14 | public ExitEditorMenu() { 15 | makeMenuItem("menu_file_exit", "menu_file_exit_accstring", KeyEvent.VK_Q, InputEvent.ALT_DOWN_MASK, true ); 16 | } 17 | 18 | @Override 19 | public void actionPerformed(ActionEvent e) { 20 | super.actionPerformed(e); 21 | editor.dispatchEvent(new WindowEvent(editor, WindowEvent.WINDOW_CLOSING)); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/FileMenu/OpenConfigMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.FileMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import javax.swing.filechooser.FileFilter; 7 | import java.awt.event.ActionEvent; 8 | import java.awt.event.InputEvent; 9 | import java.awt.event.KeyEvent; 10 | import java.io.File; 11 | 12 | import static AutoDriveEditor.AutoDriveEditor.editor; 13 | import static AutoDriveEditor.GUI.MapPanel.checkIfConfigIsStaleAndConfirmSave; 14 | import static AutoDriveEditor.Utils.FileUtils.createFileChooser; 15 | import static AutoDriveEditor.XMLConfig.AutoSave.resumeAutoSaving; 16 | import static AutoDriveEditor.XMLConfig.AutoSave.suspendAutoSaving; 17 | import static AutoDriveEditor.XMLConfig.GameXML.lastUsedLocation; 18 | import static AutoDriveEditor.XMLConfig.GameXML.loadGameConfig; 19 | 20 | public class OpenConfigMenu extends JMenuItemBase { 21 | 22 | public OpenConfigMenu() { 23 | makeMenuItem("menu_file_loadconfig", "menu_file_loadconfig_accstring", KeyEvent.VK_L, InputEvent.ALT_DOWN_MASK, true ); 24 | } 25 | 26 | @Override 27 | public void actionPerformed(ActionEvent e) { 28 | super.actionPerformed(e); 29 | // check if the current config has been changed a confirm save before loading a new config 30 | checkIfConfigIsStaleAndConfirmSave(); 31 | 32 | JFileChooser lfc = createFileChooser("dialog_load_config_xml_title", JFileChooser.FILES_ONLY, true, lastUsedLocation, new FileFilter() { 33 | @Override 34 | public boolean accept(File f) { 35 | // always show folders/directory's 36 | if (f.isDirectory()) return true; 37 | // files only that end with the specific extension 38 | return f.getName().contains(".xml"); 39 | } 40 | 41 | @Override 42 | public String getDescription() { 43 | return "AutoDrive Config (.xml)"; 44 | } 45 | }); 46 | 47 | suspendAutoSaving(); 48 | 49 | if (lfc.showOpenDialog(editor) == JFileChooser.APPROVE_OPTION) { 50 | lastUsedLocation = lfc.getCurrentDirectory().getAbsolutePath(); 51 | loadGameConfig(lfc.getSelectedFile()); 52 | } 53 | 54 | resumeAutoSaving(); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/FileMenu/SaveAsConfigMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.FileMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import javax.swing.filechooser.FileFilter; 7 | import java.awt.event.ActionEvent; 8 | import java.awt.event.InputEvent; 9 | import java.awt.event.KeyEvent; 10 | import java.io.File; 11 | 12 | import static AutoDriveEditor.AutoDriveEditor.editor; 13 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 14 | import static AutoDriveEditor.Utils.FileUtils.getSelectedFileWithExtension; 15 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 16 | import static AutoDriveEditor.XMLConfig.GameXML.*; 17 | 18 | public class SaveAsConfigMenu extends JMenuItemBase { 19 | 20 | public static JMenuItem menu_SaveConfigAs; 21 | 22 | public SaveAsConfigMenu() { 23 | menu_SaveConfigAs = makeMenuItem("menu_file_saveasconfig", "menu_file_saveasconfig_accstring", KeyEvent.VK_A, InputEvent.ALT_DOWN_MASK, false); 24 | } 25 | 26 | @Override 27 | public void actionPerformed(ActionEvent e) { 28 | super.actionPerformed(e); 29 | 30 | JFileChooser fc = new JFileChooser(lastUsedLocation); 31 | 32 | if (xmlConfigFile == null) return; 33 | fc.setDialogTitle(getLocaleString("dialog_save_destination")); 34 | fc.setFileSelectionMode(JFileChooser.FILES_ONLY); 35 | fc.setFileFilter(new FileFilter() { 36 | @Override 37 | public boolean accept(File f) { 38 | // always accept directory's 39 | if (f.isDirectory()) return true; 40 | // but only files with a specific name 41 | return f.getName().contains(".xml"); 42 | } 43 | 44 | @Override 45 | public String getDescription() { 46 | return "AutoDrive Config (.xml)"; 47 | } 48 | }); 49 | fc.setSelectedFile(xmlConfigFile); 50 | 51 | if (fc.showSaveDialog(editor) == JFileChooser.APPROVE_OPTION) { 52 | lastUsedLocation = fc.getCurrentDirectory().getAbsolutePath(); 53 | LOG.info("{} {}", getLocaleString("console_config_save_as"), getSelectedFileWithExtension(fc)); 54 | saveGameConfig(getSelectedFileWithExtension(fc).toString(), false, false); 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/FileMenu/SaveConfigMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.FileMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | import java.awt.event.InputEvent; 8 | import java.awt.event.KeyEvent; 9 | 10 | import static AutoDriveEditor.XMLConfig.GameXML.saveGameConfig; 11 | 12 | public class SaveConfigMenu extends JMenuItemBase { 13 | 14 | public static JMenuItem menu_SaveConfig; 15 | 16 | public SaveConfigMenu() { 17 | menu_SaveConfig = makeMenuItem("menu_file_saveconfig", "menu_file_saveconfig_accstring", KeyEvent.VK_S, InputEvent.ALT_DOWN_MASK, false); 18 | } 19 | 20 | @Override 21 | public void actionPerformed(ActionEvent e) { 22 | super.actionPerformed(e); 23 | saveGameConfig(null, false, false); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/HeightMapMenu/ImportHeightMapMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.HeightMapMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import javax.swing.filechooser.FileFilter; 7 | import java.awt.event.ActionEvent; 8 | import java.io.File; 9 | 10 | import static AutoDriveEditor.AutoDriveEditor.editor; 11 | import static AutoDriveEditor.Classes.MapImage.manualLoadHeightMap; 12 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 13 | import static AutoDriveEditor.XMLConfig.GameXML.lastUsedLocation; 14 | 15 | public class ImportHeightMapMenu extends JMenuItemBase { 16 | 17 | public static JMenuItem menu_ImportHeightMap; 18 | 19 | public ImportHeightMapMenu() { 20 | menu_ImportHeightMap = makeMenuItem("menu_heightmap_import", "menu_heightmap_import_accstring", false); 21 | } 22 | 23 | @Override 24 | public void actionPerformed(ActionEvent e) { 25 | super.actionPerformed(e); 26 | JFileChooser fc = new JFileChooser(lastUsedLocation); 27 | fc.setDialogTitle(getLocaleString("dialog_heightmap_load_title")); 28 | fc.setFileSelectionMode(JFileChooser.FILES_ONLY); 29 | fc.setFileFilter(new FileFilter() { 30 | @Override 31 | public boolean accept(File f) { 32 | // always accept directory's 33 | if (f.isDirectory()) return true; 34 | // but only files with a specific name 35 | return f.getName().equals("terrain.heightmap.png"); 36 | } 37 | 38 | @Override 39 | public String getDescription() { 40 | return "FS HeightMap File (terrain.heightmap.png)"; 41 | } 42 | }); 43 | if (fc.showOpenDialog(editor) == JFileChooser.APPROVE_OPTION) { 44 | File fileName = fc.getSelectedFile(); 45 | manualLoadHeightMap(fileName); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/HeightMapMenu/ShowHeightmapMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.HeightMapMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | import static AutoDriveEditor.Classes.MapImage.*; 9 | import static AutoDriveEditor.GUI.MapPanel.forceMapImageRedraw; 10 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 11 | 12 | public class ShowHeightmapMenu extends JCheckBoxMenuItemBase { 13 | 14 | public static JCheckBoxMenuItem menu_ShowHeightMap; 15 | public static boolean bShowHeightMap; 16 | public ShowHeightmapMenu() { 17 | menu_ShowHeightMap = makeCheckBoxMenuItem("menu_heightmap_show", "menu_heightmap_show_accstring", false, true); 18 | } 19 | 20 | @Override 21 | public void itemStateChanged(ItemEvent e) { 22 | super.itemStateChanged(e); 23 | AbstractButton menuItem = (AbstractButton) e.getItem(); 24 | bShowHeightMap = menuItem.isSelected(); 25 | if (bShowHeightMap) { 26 | LOG.info("displaying height map image"); 27 | if (heightMapImage != null ) { 28 | setMapPanelImage(heightMapImage, true); 29 | } else { 30 | LOG.info("heightMapImage = null"); 31 | } 32 | } else { 33 | if (mapPanelImage != null ) { 34 | LOG.info("displaying map image"); 35 | setMapPanelImage(pdaImage, false); 36 | } else { 37 | LOG.info("map image is NULL, setting to default mapImage"); 38 | useDefaultMapImage(); 39 | } 40 | } 41 | forceMapImageRedraw(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/HelpMenu/AboutMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.HelpMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.*; 9 | import static AutoDriveEditor.Utils.HTMLUtils.createHyperLink; 10 | 11 | public class AboutMenu extends JMenuItemBase { 12 | 13 | public AboutMenu() { 14 | makeMenuItem("menu_help_about", "menu_help_about_accstring", true); 15 | } 16 | 17 | @Override 18 | public void actionPerformed(ActionEvent e) { 19 | super.actionPerformed(e); 20 | 21 | String mainText = "
Editor version : " + COURSE_EDITOR_VERSION + " by KillBait!

" + 22 | "Build info : " + COURSE_EDITOR_BUILD_INFO + "



" + 23 | "Many thanks to the following people

" + 24 | "@rhaetional (GitHub) :- Code submission for Parking Destinations/out-of-bounds code & macOS fix
" + 25 | "Everybody for the suggestions and bug reports :-)


" + 26 | "AutoDrive Development Team

" + 27 | "Stephan (Founder/Modder and Original Editor Author)

" + 28 | "TyKonKet (Modder)
Oliver (Modder)
Axel (Co-Modder)
" + 29 | "Aletheist (Co-Modder)
Willi (Supporter & Tester)
" + 30 | "Iwan1803 (Community Manager & Supporter)

" + 31 | "Many thanks goto Stephan for allowing me to take over the development of this editor"; 32 | String linkText = "

Visit AutoDrive Editor HomePage
"; 33 | JEditorPane editorLink = createHyperLink(mainText,linkText, "https://github.com/KillBait/AutoDrive_Course_Editor"); 34 | JOptionPane.showMessageDialog(editor, editorLink, "About AutoDrive Editor", JOptionPane.PLAIN_MESSAGE); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/HelpMenu/ImagesLinkMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.HelpMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.*; 9 | import static AutoDriveEditor.Utils.HTMLUtils.createHyperLink; 10 | 11 | public class ImagesLinkMenu extends JMenuItemBase { 12 | 13 | public ImagesLinkMenu() { 14 | makeMenuItem("menu_help_images", "menu_help_images_accstring", true); 15 | } 16 | 17 | @Override 18 | public void actionPerformed(ActionEvent e) { 19 | super.actionPerformed(e); 20 | 21 | String mainText = "
AutoDrive Course Editor version : " + COURSE_EDITOR_VERSION + " by KillBait!

" + 22 | "(Build info : " + COURSE_EDITOR_BUILD_INFO + ")



" + 23 | "I maintain a GitHub repository of map images that the editor
" + 24 | "can automatically download and use when needed here

" + 25 | "Do you want to create your own images?, follow the link below

"; 26 | String linkText = "How to create your own Images (GitHub Page)"; 27 | JEditorPane editorLink = createHyperLink(mainText,linkText, "https://github.com/KillBait/AutoDrive_MapImages/discussions/20"); 28 | JOptionPane.showMessageDialog(editor, editorLink, "AutoDrive Editor Images", JOptionPane.PLAIN_MESSAGE); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/HelpMenu/ShowDEBUGMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.HelpMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JCheckBoxMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ItemEvent; 7 | 8 | import static AutoDriveEditor.AutoDriveEditor.bIsDebugEnabled; 9 | import static AutoDriveEditor.GUI.Menus.EditorMenu.menu_DEBUG; 10 | 11 | public class ShowDEBUGMenu extends JCheckBoxMenuItemBase { 12 | 13 | public ShowDEBUGMenu() { 14 | makeCheckBoxMenuItem("menu_help_debug", "menu_help_debug_accstring", false, true); 15 | } 16 | 17 | @Override 18 | public void itemStateChanged(ItemEvent e) { 19 | super.itemStateChanged(e); 20 | AbstractButton menuItem = (AbstractButton) e.getItem(); 21 | menu_DEBUG.setVisible(menuItem.isSelected()); 22 | bIsDebugEnabled = menuItem.isSelected(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/HelpMenu/ShowHistoryMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.HelpMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import java.awt.event.ActionEvent; 6 | 7 | import static AutoDriveEditor.Managers.VersionManager.showVersionHistory; 8 | 9 | public class ShowHistoryMenu extends JMenuItemBase { 10 | public ShowHistoryMenu() { 11 | makeMenuItem("menu_help_history", "menu_help_history_accstring"); 12 | } 13 | 14 | @Override 15 | public void actionPerformed(ActionEvent e) { 16 | super.actionPerformed(e); 17 | showVersionHistory(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/JCheckBoxMenuItemBase.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus; 2 | 3 | import javax.swing.*; 4 | import javax.swing.event.ChangeEvent; 5 | import javax.swing.event.ChangeListener; 6 | import java.awt.event.ActionEvent; 7 | import java.awt.event.ActionListener; 8 | import java.awt.event.ItemEvent; 9 | import java.awt.event.ItemListener; 10 | 11 | import static AutoDriveEditor.GUI.Menus.DebugMenu.Logging.LogListenerStateMenu.bDebugMenuState; 12 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 13 | import static AutoDriveEditor.Utils.GUIUtils.InputEvent_NONE; 14 | import static AutoDriveEditor.Utils.GUIUtils.KeyEvent_NONE; 15 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 16 | 17 | public abstract class JCheckBoxMenuItemBase extends JCheckBoxMenuItem implements ActionListener, ItemListener, ChangeListener { 18 | 19 | @SuppressWarnings("SameParameterValue") 20 | protected JCheckBoxMenuItem makeCheckBoxMenuItem(String text, String accString, Boolean isSelected, Boolean enabled) { 21 | return makeCheckBoxMenuItem(text, accString, KeyEvent_NONE, InputEvent_NONE, isSelected, enabled); 22 | } 23 | 24 | protected JCheckBoxMenuItem makeCheckBoxMenuItem(String text, String accString, int keyEvent, Boolean isSelected, Boolean enabled) { 25 | return makeCheckBoxMenuItem(text, accString, keyEvent, InputEvent_NONE, isSelected, enabled); 26 | } 27 | 28 | protected JCheckBoxMenuItem makeCheckBoxMenuItem (String text, String accString, int keyEvent, int inputEvent, Boolean isSelected, Boolean enabled) { 29 | setText(getLocaleString(text)); 30 | if (keyEvent != KeyEvent_NONE && inputEvent != InputEvent_NONE) { 31 | setAccelerator(KeyStroke.getKeyStroke(keyEvent, inputEvent)); 32 | setMnemonic(keyEvent); 33 | } else if (inputEvent == InputEvent_NONE && keyEvent != 0){ 34 | setAccelerator(KeyStroke.getKeyStroke(keyEvent, 0)); 35 | } 36 | setSelected(isSelected); 37 | getAccessibleContext().setAccessibleDescription(getLocaleString(accString)); 38 | addItemListener(this); 39 | setEnabled(enabled); 40 | 41 | return this; 42 | } 43 | 44 | @Override 45 | public void actionPerformed(ActionEvent e) { 46 | if (bDebugMenuState) logMenuEventFor("actionPerformed()"); 47 | } 48 | 49 | @Override 50 | public void itemStateChanged(ItemEvent e) { 51 | if (bDebugMenuState) logMenuEventFor("itemStateChanged()"); 52 | } 53 | 54 | @Override 55 | public void stateChanged(ChangeEvent e) { if (bDebugMenuState) logMenuEventFor("stateChanged()"); 56 | } 57 | 58 | private void logMenuEventFor(String function) { 59 | LOG.info("Menu:- ({}) - {}",this.getText(), function); 60 | 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/JMenuBase.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus; 2 | 3 | import javax.swing.*; 4 | import javax.swing.event.ChangeEvent; 5 | import javax.swing.event.ChangeListener; 6 | import java.awt.event.ActionEvent; 7 | import java.awt.event.ActionListener; 8 | import java.awt.event.ItemEvent; 9 | import java.awt.event.ItemListener; 10 | 11 | import static AutoDriveEditor.GUI.Menus.DebugMenu.Logging.LogListenerStateMenu.bDebugMenuState; 12 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 13 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 14 | 15 | public abstract class JMenuBase extends JMenu implements ActionListener, ItemListener, ChangeListener { 16 | 17 | protected JMenu makeMenu(String menuName, int keyEvent, String accString, JMenuBar parentMenu, boolean isVisible) { 18 | setText(getLocaleString(menuName)); 19 | setMnemonic(keyEvent); 20 | getAccessibleContext().setAccessibleDescription(getLocaleString(accString)); 21 | setVisible(isVisible); 22 | parentMenu.add(this); 23 | return this; 24 | } 25 | 26 | protected JMenu makeSubMenu(String menuName, String accString) { 27 | return makeSubMenu(menuName, accString, true); 28 | } 29 | 30 | @SuppressWarnings("SameParameterValue") 31 | protected JMenu makeSubMenu(String menuName, String accString, boolean enabled) { 32 | setText(getLocaleString(menuName)); 33 | getAccessibleContext().setAccessibleDescription(getLocaleString(accString)); 34 | setEnabled(enabled); 35 | addActionListener(this); 36 | return this; 37 | } 38 | 39 | @Override 40 | public void actionPerformed(ActionEvent e) { 41 | if (bDebugMenuState) logMenuEventFor("actionPerformed()"); 42 | } 43 | 44 | @Override 45 | public void itemStateChanged(ItemEvent e) { 46 | if (bDebugMenuState) logMenuEventFor("itemStateChanged()"); 47 | } 48 | 49 | @Override 50 | public void stateChanged(ChangeEvent e) { if (bDebugMenuState) logMenuEventFor("stateChanged()"); 51 | } 52 | 53 | private void logMenuEventFor(String function) { 54 | LOG.info("Menu:- ({}) - {}",this.getText(), function); 55 | 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/JMenuItemBase.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus; 2 | 3 | import javax.swing.*; 4 | import javax.swing.event.ChangeEvent; 5 | import javax.swing.event.ChangeListener; 6 | import java.awt.event.ActionEvent; 7 | import java.awt.event.ActionListener; 8 | import java.awt.event.ItemEvent; 9 | import java.awt.event.ItemListener; 10 | 11 | import static AutoDriveEditor.GUI.Menus.DebugMenu.Logging.LogListenerStateMenu.bDebugMenuState; 12 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 13 | import static AutoDriveEditor.Utils.GUIUtils.InputEvent_NONE; 14 | import static AutoDriveEditor.Utils.GUIUtils.KeyEvent_NONE; 15 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 16 | 17 | public abstract class JMenuItemBase extends JMenuItem implements ActionListener, ItemListener, ChangeListener { 18 | 19 | @SuppressWarnings({"SameParameterValue", "UnusedReturnValue"}) 20 | protected JMenuItemBase makeMenuItem(String menuName, String accString) { 21 | return makeMenuItem(menuName, accString, KeyEvent_NONE, InputEvent_NONE, true); 22 | } 23 | 24 | protected JMenuItemBase makeMenuItem(String menuName, String accString, boolean enabled) { 25 | return makeMenuItem(menuName, accString, KeyEvent_NONE, InputEvent_NONE, enabled); 26 | } 27 | 28 | protected JMenuItemBase makeMenuItem(String menuName, String accString, int keyEvent, int inputEvent, boolean enabled) { 29 | setText(getLocaleString(menuName)); 30 | if (keyEvent != 0) { 31 | setAccelerator(KeyStroke.getKeyStroke(keyEvent, inputEvent)); 32 | } 33 | getAccessibleContext().setAccessibleDescription(getLocaleString(accString)); 34 | setEnabled(enabled); 35 | addActionListener(this); 36 | return this; 37 | } 38 | 39 | protected JCheckBoxMenuItem makeCheckBoxMenuItem(String text, String accString, Boolean isSelected, Boolean enabled) { 40 | return makeCheckBoxMenuItem(text, accString, KeyEvent_NONE, InputEvent_NONE, isSelected, enabled); 41 | } 42 | 43 | @SuppressWarnings("SameParameterValue") 44 | protected JCheckBoxMenuItem makeCheckBoxMenuItem (String text, String accString, int keyEvent, int inputEvent, Boolean isSelected, Boolean enabled) { 45 | JCheckBoxMenuItem cbMenuItem = new JCheckBoxMenuItem(getLocaleString(text)); 46 | if (keyEvent != KeyEvent_NONE && inputEvent != InputEvent_NONE) { 47 | cbMenuItem.setAccelerator(KeyStroke.getKeyStroke(keyEvent, inputEvent)); 48 | cbMenuItem.setMnemonic(keyEvent); 49 | } else if (inputEvent == InputEvent_NONE && keyEvent != 0){ 50 | cbMenuItem.setAccelerator(KeyStroke.getKeyStroke(keyEvent, 0)); 51 | } 52 | cbMenuItem.setSelected(isSelected); 53 | cbMenuItem.getAccessibleContext().setAccessibleDescription(getLocaleString(accString)); 54 | cbMenuItem.addItemListener(this); 55 | cbMenuItem.setEnabled(enabled); 56 | 57 | return cbMenuItem; 58 | } 59 | 60 | @Override 61 | public void actionPerformed(ActionEvent e) { 62 | if (bDebugMenuState) logMenuEventFor("actionPerformed()"); 63 | } 64 | 65 | @Override 66 | public void itemStateChanged(ItemEvent e) { 67 | if (bDebugMenuState) logMenuEventFor("itemStateChanged()"); 68 | } 69 | 70 | @Override 71 | public void stateChanged(ChangeEvent e) { if (bDebugMenuState) logMenuEventFor("stateChanged()"); 72 | } 73 | 74 | private void logMenuEventFor(String function) { 75 | LOG.info("Menu:- ({}) - {}",this.getText(), function); 76 | 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/MapImagesMenu/ImportFS19DDSMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.MapImagesMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import javax.swing.filechooser.FileFilter; 7 | import java.awt.*; 8 | import java.awt.event.ActionEvent; 9 | import java.awt.event.InputEvent; 10 | import java.awt.event.KeyEvent; 11 | import java.io.File; 12 | 13 | import static AutoDriveEditor.AutoDriveEditor.editor; 14 | import static AutoDriveEditor.GUI.Menus.EditorMenu.saveImageEnabled; 15 | import static AutoDriveEditor.GUI.TextPanel.setImageLoadedLabel; 16 | import static AutoDriveEditor.GUI.TextPanel.showInTextArea; 17 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 18 | import static AutoDriveEditor.Managers.ImportManager.importFromFS19; 19 | import static AutoDriveEditor.Managers.ImportManager.setIsEditorUsingImportedImage; 20 | import static AutoDriveEditor.XMLConfig.GameXML.lastUsedLocation; 21 | 22 | public class ImportFS19DDSMenu extends JMenuItemBase { 23 | 24 | public static JMenuItem menu_ImportFS19DDS; 25 | public ImportFS19DDSMenu() { 26 | menu_ImportFS19DDS = makeMenuItem("menu_import_fs19_dds", "menu_import_fs19_dds_accstring", KeyEvent.VK_I, InputEvent.ALT_DOWN_MASK,false); 27 | } 28 | 29 | @Override 30 | public void actionPerformed(ActionEvent e) { 31 | super.actionPerformed(e); 32 | JFileChooser fc = new JFileChooser(lastUsedLocation); 33 | fc.setDialogTitle(getLocaleString("dialog_import_FS19_dds_image_title")); 34 | fc.setFileSelectionMode(JFileChooser.FILES_ONLY); 35 | fc.setFileFilter(new FileFilter() { 36 | @Override 37 | public boolean accept(File f) { 38 | // always accept directory's 39 | if (f.isDirectory()) return true; 40 | // but only files with a specific name 41 | return f.getName().equals("pda_map_H.dds"); 42 | } 43 | 44 | @Override 45 | public String getDescription() { 46 | return "FS19 PDA Image (pda_map_H.dds)"; 47 | } 48 | }); 49 | if (fc.showOpenDialog(editor) == JFileChooser.APPROVE_OPTION) { 50 | if (!fc.getSelectedFile().getName().equals("pda_map_H.dds") && !fc.getSelectedFile().getName().endsWith(".dds")) { 51 | JOptionPane.showMessageDialog(editor, "The file " + fc.getSelectedFile() + " is not a valid dds file.", "FileType Error", JOptionPane.ERROR_MESSAGE); 52 | return; 53 | } 54 | 55 | boolean importResult = importFromFS19(fc.getSelectedFile().getAbsoluteFile().toString()); 56 | if (importResult) { 57 | setIsEditorUsingImportedImage(true); 58 | saveImageEnabled(true); 59 | setImageLoadedLabel("Imported", new Color(191, 56, 14)); 60 | showInTextArea("Import of FS19 mapImage '" + fc.getSelectedFile().getName() + "' Successful", true, true); 61 | } 62 | } else { 63 | showInTextArea("Cancelled import of FS19 PDA Image", true, true); 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/MapImagesMenu/ImportFS22DDSMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.MapImagesMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import javax.swing.filechooser.FileFilter; 7 | import java.awt.*; 8 | import java.awt.event.ActionEvent; 9 | import java.awt.event.InputEvent; 10 | import java.awt.event.KeyEvent; 11 | import java.io.File; 12 | 13 | import static AutoDriveEditor.AutoDriveEditor.editor; 14 | import static AutoDriveEditor.GUI.Menus.EditorMenu.saveImageEnabled; 15 | import static AutoDriveEditor.GUI.TextPanel.setImageLoadedLabel; 16 | import static AutoDriveEditor.GUI.TextPanel.showInTextArea; 17 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 18 | import static AutoDriveEditor.Managers.ImportManager.importFromFS22; 19 | import static AutoDriveEditor.Managers.ImportManager.setIsEditorUsingImportedImage; 20 | import static AutoDriveEditor.XMLConfig.GameXML.lastUsedLocation; 21 | 22 | public class ImportFS22DDSMenu extends JMenuItemBase { 23 | 24 | public static JMenuItem menu_ImportFS22DDS; 25 | public ImportFS22DDSMenu() { 26 | menu_ImportFS22DDS = makeMenuItem("menu_import_fs22_dds", "menu_import_fs22_dds_accstring", KeyEvent.VK_P, InputEvent.ALT_DOWN_MASK,false); 27 | } 28 | 29 | @Override 30 | public void actionPerformed(ActionEvent e) { 31 | super.actionPerformed(e); 32 | JFileChooser fc = new JFileChooser(lastUsedLocation); 33 | fc.setDialogTitle(getLocaleString("dialog_import_FS22_dds_image_title")); 34 | fc.setFileSelectionMode(JFileChooser.FILES_ONLY); 35 | fc.setFileFilter(new FileFilter() { 36 | @Override 37 | public boolean accept(File f) { 38 | // always accept directory's 39 | if (f.isDirectory()) return true; 40 | // but only files with a specific name 41 | return f.getName().equals("overview.dds"); 42 | } 43 | 44 | @Override 45 | public String getDescription() { 46 | return "FS22 PDA image (overview.dds)"; 47 | } 48 | }); 49 | if (fc.showOpenDialog(editor) == JFileChooser.APPROVE_OPTION) { 50 | if (!fc.getSelectedFile().getName().equals("overview.dds") && !fc.getSelectedFile().getName().endsWith(".dds")) { 51 | JOptionPane.showMessageDialog(editor, "The file " + fc.getSelectedFile() + " is not a valid dds file.", "FileType Error", JOptionPane.ERROR_MESSAGE); 52 | return; 53 | } 54 | 55 | boolean importResult = importFromFS22(fc.getSelectedFile().getAbsoluteFile().toString()); 56 | if (importResult) { 57 | setIsEditorUsingImportedImage(true); 58 | saveImageEnabled(true); 59 | setImageLoadedLabel("Imported", new Color(191, 56, 14)); 60 | showInTextArea("Import of FS22 mapImage '" + fc.getSelectedFile().getName() + "' Successful", true, true); 61 | } 62 | } else { 63 | showInTextArea("Cancelled import of FS22 PDA Image", true, true); 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/MapImagesMenu/LoadMapImageMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.MapImagesMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.imageio.ImageIO; 6 | import javax.swing.*; 7 | import javax.swing.filechooser.FileFilter; 8 | import java.awt.*; 9 | import java.awt.event.ActionEvent; 10 | import java.awt.event.InputEvent; 11 | import java.awt.event.KeyEvent; 12 | import java.awt.image.BufferedImage; 13 | import java.io.File; 14 | import java.io.IOException; 15 | 16 | import static AutoDriveEditor.AutoDriveEditor.editor; 17 | import static AutoDriveEditor.Classes.MapImage.setMapPanelImage; 18 | import static AutoDriveEditor.GUI.MapPanel.forceMapImageRedraw; 19 | import static AutoDriveEditor.GUI.TextPanel.setImageLoadedLabel; 20 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 21 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 22 | import static AutoDriveEditor.XMLConfig.GameXML.lastUsedLocation; 23 | 24 | public class LoadMapImageMenu extends JMenuItemBase { 25 | 26 | public static JMenuItem menu_LoadMapImage; 27 | public LoadMapImageMenu() { 28 | menu_LoadMapImage = makeMenuItem("menu_map_loadimage", "menu_map_loadimage_accstring", KeyEvent.VK_M, InputEvent.ALT_DOWN_MASK, false); 29 | } 30 | 31 | @Override 32 | public void actionPerformed(ActionEvent e) { 33 | super.actionPerformed(e); 34 | JFileChooser fc = new JFileChooser(lastUsedLocation); 35 | fc.setDialogTitle(getLocaleString("dialog_load_image_title")); 36 | fc.setFileSelectionMode(JFileChooser.FILES_ONLY); 37 | fc.setFileFilter(new FileFilter() { 38 | @Override 39 | public boolean accept(File f) { 40 | // always accept directory's 41 | if (f.isDirectory()) return true; 42 | // but only files with a specific name 43 | return f.getName().contains(".png"); 44 | } 45 | 46 | @Override 47 | public String getDescription() { 48 | return "AutoDriveEditor MapImage (.png)"; 49 | } 50 | }); 51 | 52 | if (fc.showOpenDialog(editor) == JFileChooser.APPROVE_OPTION) { 53 | LOG.info("Manual loading of map image setSelected"); 54 | File fileName; 55 | try { 56 | fileName = fc.getSelectedFile(); 57 | BufferedImage mapImage = ImageIO.read(fileName); 58 | if (mapImage != null) { 59 | setMapPanelImage(mapImage, false); 60 | forceMapImageRedraw(); 61 | setImageLoadedLabel("Manual Load", new Color(150,100,20)); 62 | } 63 | } catch (IOException e1) { 64 | LOG.error(e1.getMessage(), e1); 65 | } 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/MapImagesMenu/MapZoomMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.MapImagesMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | import java.util.Enumeration; 8 | 9 | import static AutoDriveEditor.GUI.Menus.DebugMenu.Logging.LogListenerStateMenu.bDebugMenuState; 10 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 11 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 12 | import static AutoDriveEditor.XMLConfig.EditorXML.setNewMapScale; 13 | 14 | public class MapZoomMenu extends JMenuBase { 15 | 16 | static final ButtonGroup zoomGroup = new ButtonGroup(); 17 | final boolean bShowExtendedMapSizes = true; 18 | 19 | public MapZoomMenu() { 20 | 21 | String nameString; 22 | 23 | makeSubMenu("menu_map_scale","menu_map_scale_accstring", true); 24 | int maxItems = (bShowExtendedMapSizes) ? 24 : 9; 25 | 26 | for (int i=1; i <= maxItems; i++) { 27 | nameString = i*2 + "km"; 28 | if (i <= 10) { 29 | nameString+= " ( " + Math.pow(2,(i)) + "x )"; 30 | } 31 | makeSimpleRadioButton(nameString, "menu_map_scale_simplebutton_accstring", true, zoomGroup, i, i == 0); 32 | } 33 | } 34 | 35 | @SuppressWarnings("SameParameterValue") 36 | private void makeSimpleRadioButton(String text, String accString, Boolean enabled, ButtonGroup buttonGroup, int mnemonic, boolean isGroupDefault) { 37 | JRadioButtonMenuItem menuItem = new JRadioButtonMenuItem(text); 38 | menuItem.getAccessibleContext().setAccessibleDescription(getLocaleString(accString) + " " + text); 39 | menuItem.setEnabled(enabled); 40 | menuItem.addActionListener(this); 41 | menuItem.setMnemonic(mnemonic); 42 | if (buttonGroup != null) { 43 | buttonGroup.add(menuItem); 44 | if (isGroupDefault) { 45 | buttonGroup.setSelected(menuItem.getModel(), true); 46 | } 47 | } 48 | add(menuItem); 49 | } 50 | 51 | @Override 52 | public void actionPerformed(ActionEvent e) { 53 | //super.actionPerformed(e); 54 | int mnemonic = zoomGroup.getSelection().getMnemonic(); 55 | if (bDebugMenuState) LOG.info("Selected = {}", mnemonic); 56 | setNewMapScale(mnemonic); 57 | } 58 | 59 | public static void updateMapScaleMenu(int selection) { 60 | if (bDebugMenuState) LOG.info("## updateMapScaleMenu ## newMapScale = {}km", selection * 2); 61 | for (Enumeration e = zoomGroup.getElements(); e.hasMoreElements();) { 62 | AbstractButton button = e.nextElement(); 63 | if (button.getMnemonic() == selection) { 64 | button.setSelected(true); 65 | if (bDebugMenuState) LOG.info("## updateMapScaleMenu ## setting menu {} ('{}') to True", button.getMnemonic(), button.getText()); 66 | break; 67 | } 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/RoutesMenu/OpenRoutesConfig.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.RoutesMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import javax.swing.filechooser.FileFilter; 7 | import java.awt.event.ActionEvent; 8 | import java.io.File; 9 | 10 | import static AutoDriveEditor.AutoDriveEditor.editor; 11 | import static AutoDriveEditor.GUI.RoutesGUI.RoutesGUI.createRoutesGUI; 12 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 13 | import static AutoDriveEditor.XMLConfig.AutoSave.resumeAutoSaving; 14 | import static AutoDriveEditor.XMLConfig.AutoSave.suspendAutoSaving; 15 | import static AutoDriveEditor.XMLConfig.GameXML.lastUsedLocation; 16 | 17 | public class OpenRoutesConfig extends JMenuItemBase { 18 | 19 | public static JMenuItem menu_OpenRoutesConfig 20 | ; 21 | public OpenRoutesConfig() { 22 | menu_OpenRoutesConfig = makeMenuItem("menu_routes_load_config", "menu_routes_load_config_accstring", true ); 23 | } 24 | 25 | @Override 26 | public void actionPerformed(ActionEvent e) { 27 | super.actionPerformed(e); 28 | JFileChooser fc = new JFileChooser(lastUsedLocation); 29 | fc.setDialogTitle(getLocaleString("dialog_load_routemanager_config_title")); 30 | fc.setFileSelectionMode(JFileChooser.FILES_ONLY); 31 | fc.setFileFilter(new FileFilter() { 32 | @Override 33 | public boolean accept(File f) { 34 | // always accept directory's 35 | if (f.isDirectory()) return true; 36 | // but only files with a specific name 37 | return f.getName().equals("routes.xml"); 38 | } 39 | 40 | @Override 41 | public String getDescription() { 42 | return "AutoDrive RouteManager Config (.xml)"; 43 | } 44 | }); 45 | 46 | suspendAutoSaving(); 47 | if (fc.showOpenDialog(editor) == JFileChooser.APPROVE_OPTION) { 48 | lastUsedLocation = fc.getCurrentDirectory().getAbsolutePath(); 49 | File fileName = fc.getSelectedFile(); 50 | createRoutesGUI(fileName, editor); 51 | } 52 | resumeAutoSaving(); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/RoutesMenu/OpenRoutesXML.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.RoutesMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import javax.swing.filechooser.FileFilter; 7 | import java.awt.event.ActionEvent; 8 | import java.io.File; 9 | 10 | import static AutoDriveEditor.AutoDriveEditor.editor; 11 | import static AutoDriveEditor.GUI.MapPanel.isStale; 12 | import static AutoDriveEditor.GUI.Menus.EditorMenu.saveImageEnabled; 13 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 14 | import static AutoDriveEditor.Managers.ImportManager.setIsEditorUsingImportedImage; 15 | import static AutoDriveEditor.XMLConfig.AutoSave.resumeAutoSaving; 16 | import static AutoDriveEditor.XMLConfig.AutoSave.suspendAutoSaving; 17 | import static AutoDriveEditor.XMLConfig.GameXML.lastUsedLocation; 18 | import static AutoDriveEditor.XMLConfig.GameXML.saveGameConfig; 19 | import static AutoDriveEditor.XMLConfig.RoutesXML.loadRouteManagerXML; 20 | 21 | public class OpenRoutesXML extends JMenuItemBase { 22 | 23 | public OpenRoutesXML() { makeMenuItem("menu_routes_load_xml", "menu_routes_load_xml_accstring", true );} 24 | 25 | @Override 26 | public void actionPerformed(ActionEvent e) { 27 | super.actionPerformed(e); 28 | 29 | //checkIfConfigIsStaleAndConfirmSave(); 30 | 31 | JFileChooser fc = new JFileChooser(lastUsedLocation); 32 | if (isStale()) { 33 | int response = JOptionPane.showConfirmDialog(editor, getLocaleString("dialog_exit_unsaved"), "AutoDrive", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); 34 | if (response == JOptionPane.YES_OPTION) { 35 | saveGameConfig(null, false, false); 36 | } 37 | } 38 | fc.setDialogTitle(getLocaleString("dialog_load_route_xml_title")); 39 | fc.setFileSelectionMode(JFileChooser.FILES_ONLY); 40 | fc.setFileFilter(new FileFilter() { 41 | @Override 42 | public boolean accept(File f) { 43 | // always accept directory's 44 | if (f.isDirectory()) return true; 45 | // but only files with a specific name 46 | return f.getName().contains(".xml") && !f.getName().equals("routes.xml"); 47 | } 48 | 49 | @Override 50 | public String getDescription() { 51 | return "AutoDrive Route XML (.xml)"; 52 | } 53 | }); 54 | 55 | suspendAutoSaving(); 56 | 57 | if (fc.showOpenDialog(editor) == JFileChooser.APPROVE_OPTION) { 58 | lastUsedLocation = fc.getCurrentDirectory().getAbsolutePath(); 59 | File fileName = fc.getSelectedFile(); 60 | if (loadRouteManagerXML(fileName, false, null)) { 61 | setIsEditorUsingImportedImage(false); 62 | saveImageEnabled(false); 63 | } 64 | } 65 | 66 | resumeAutoSaving(); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/RoutesMenu/SaveRoutesXML.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.RoutesMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | 8 | import static AutoDriveEditor.XMLConfig.RoutesXML.saveRouteManagerXML; 9 | 10 | public class SaveRoutesXML extends JMenuItemBase { 11 | 12 | public static JMenuItem menu_SaveRoutesXML; 13 | 14 | public SaveRoutesXML() { 15 | menu_SaveRoutesXML = makeMenuItem("menu_routes_save_xml", "menu_routes_save_xml_accstring", false); 16 | } 17 | 18 | @Override 19 | public void actionPerformed(ActionEvent e) { 20 | super.actionPerformed(e); 21 | saveRouteManagerXML(null, false, false); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/ScanMenu/FixNodesHeightMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.ScanMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | import AutoDriveEditor.RoadNetwork.MapNode; 5 | import AutoDriveEditor.RoadNetwork.RoadMap; 6 | 7 | import javax.swing.*; 8 | import java.awt.event.ActionEvent; 9 | 10 | import static AutoDriveEditor.AutoDriveEditor.editor; 11 | import static AutoDriveEditor.GUI.MapPanel.getYValueFromHeightMap; 12 | import static AutoDriveEditor.GUI.MapPanel.roadMap; 13 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 14 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 15 | 16 | public class FixNodesHeightMenu extends JMenuItemBase { 17 | 18 | public static JMenuItem menu_FixNodesHeight; 19 | 20 | public FixNodesHeightMenu() { 21 | menu_FixNodesHeight = makeMenuItem("menu_heightmap_fix_nodes", "menu_heightmap_fix_nodes_accstring", false); 22 | } 23 | 24 | @Override 25 | public void actionPerformed(ActionEvent e) { 26 | super.actionPerformed(e); 27 | if (roadMap != null) { 28 | int result = JOptionPane.showConfirmDialog(editor, getLocaleString("dialog_fix_node_height"), "AutoDrive Editor", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); 29 | if (result == JOptionPane.OK_OPTION) { 30 | for (MapNode node : RoadMap.networkNodesList) { 31 | double heightMapY = getYValueFromHeightMap(node.x, node.z); 32 | if (node.y == -1) { 33 | node.y = heightMapY; 34 | } 35 | } 36 | } else { 37 | LOG.info("Cancelled node fix"); 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/ScanMenu/MergeNodesMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.ScanMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | 5 | import javax.swing.*; 6 | import java.awt.event.ActionEvent; 7 | 8 | import static AutoDriveEditor.Managers.ScanManager.mergeOverlappingNodes; 9 | 10 | public class MergeNodesMenu extends JMenuItemBase { 11 | 12 | public static JMenuItem menu_MergeNodes; 13 | 14 | public MergeNodesMenu() { 15 | menu_MergeNodes = makeMenuItem("menu_scan_merge", "menu_scan_merge_accstring", false); 16 | } 17 | 18 | @Override 19 | public void actionPerformed(ActionEvent e) { 20 | super.actionPerformed(e); 21 | mergeOverlappingNodes(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/GUI/Menus/ScanMenu/ScanNetworkMenu.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.GUI.Menus.ScanMenu; 2 | 3 | import AutoDriveEditor.GUI.Menus.JMenuItemBase; 4 | import AutoDriveEditor.Utils.Classes.LabelNumberFilter; 5 | 6 | import javax.swing.*; 7 | import javax.swing.text.PlainDocument; 8 | import java.awt.event.ActionEvent; 9 | 10 | import static AutoDriveEditor.AutoDriveEditor.editor; 11 | import static AutoDriveEditor.GUI.MapPanel.mapScale; 12 | import static AutoDriveEditor.Locale.LocaleManager.getLocaleString; 13 | import static AutoDriveEditor.Managers.ScanManager.scanNetworkForOverlapNodes; 14 | import static AutoDriveEditor.Managers.ScanManager.searchDistance; 15 | 16 | public class ScanNetworkMenu extends JMenuItemBase { 17 | 18 | public static JMenuItem menu_ScanNetwork; 19 | 20 | public ScanNetworkMenu() { 21 | menu_ScanNetwork = makeMenuItem("menu_scan_overlap", "menu_scan_overlap_accstring", false); 22 | } 23 | 24 | @Override 25 | public void actionPerformed(ActionEvent e) { 26 | super.actionPerformed(e); 27 | JTextField mergeDistance = new JTextField(String.valueOf(searchDistance)); 28 | JLabel labelDistance = new JLabel(" "); 29 | PlainDocument docX = (PlainDocument) mergeDistance.getDocument(); 30 | docX.setDocumentFilter(new LabelNumberFilter(labelDistance, 0, 2048 * mapScale, true, false)); 31 | 32 | Object[] inputFields = {getLocaleString("dialog_scan_area"), mergeDistance, labelDistance}; 33 | 34 | int option = JOptionPane.showConfirmDialog(editor, inputFields, ""+ getLocaleString("dialog_scan_title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); 35 | 36 | if (option == JOptionPane.OK_OPTION) { 37 | scanNetworkForOverlapNodes(Double.parseDouble(mergeDistance.getText())); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/Handlers/GlobalExceptionHandler.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.Handlers; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | public class GlobalExceptionHandler implements Thread.UncaughtExceptionHandler{ 7 | 8 | private static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class); 9 | 10 | public void uncaughtException(Thread t, Throwable e) { LOGGER.info(e.getMessage(), e); } 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/RoadNetwork/MarkerGroup.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.RoadNetwork; 2 | 3 | // 4 | // Used for storing all the marker groups and ID's in Route config files 5 | // 6 | 7 | @SuppressWarnings("rawtypes") 8 | public class MarkerGroup implements Comparable{ 9 | 10 | public final int groupIndex; 11 | public final String groupName; 12 | 13 | public MarkerGroup(int index, String name) { 14 | this.groupIndex = index; 15 | this.groupName = name; 16 | } 17 | 18 | @SuppressWarnings("ComparatorMethodParameterNotUsed") 19 | @Override 20 | public int compareTo(Object o) { 21 | if (o instanceof MarkerGroup) { 22 | MarkerGroup other = (MarkerGroup) o; 23 | if (other.groupName.equals(groupName) && other.groupIndex == groupIndex) { 24 | return 0; 25 | } 26 | } 27 | return 1; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/Utils/Classes/EventTriggerNumberFilter.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.Utils.Classes; 2 | 3 | import javax.swing.event.ChangeEvent; 4 | import javax.swing.event.ChangeListener; 5 | import javax.swing.text.AttributeSet; 6 | import javax.swing.text.BadLocationException; 7 | import javax.swing.text.DocumentFilter; 8 | 9 | public class EventTriggerNumberFilter extends DocumentFilter { 10 | 11 | private final ChangeListener changeListener; 12 | private final int maxValue; 13 | private final int minValue; 14 | private final boolean useDecimalPlaces; 15 | 16 | private final boolean canBeNegative; 17 | 18 | public EventTriggerNumberFilter(int min, int max, boolean allowDecimalPlaces, boolean canBeNegative, ChangeListener changeListener) { 19 | super(); 20 | this.minValue = min; 21 | this.maxValue = max; 22 | this.useDecimalPlaces = allowDecimalPlaces; 23 | this.canBeNegative = canBeNegative; 24 | this.changeListener = changeListener; 25 | } 26 | 27 | @Override 28 | public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { 29 | super.remove(fb, offset, length); 30 | if (fb.getDocument().getLength() != 0) { 31 | this.changeListener.stateChanged(new ChangeEvent(Integer.parseInt(fb.getDocument().getText(0, fb.getDocument().getLength())))); 32 | } 33 | } 34 | 35 | @Override 36 | public void insertString(FilterBypass fb, int offset,String string, AttributeSet attr) { 37 | try { 38 | if (this.useDecimalPlaces) { 39 | if (string.equals(".") && !fb.getDocument().getText(0, fb.getDocument().getLength()).contains(".")) { 40 | super.insertString(fb, offset, string, attr); 41 | return; 42 | } 43 | } 44 | if (this.canBeNegative) { 45 | if (string.equals("-") && !fb.getDocument().getText(0, fb.getDocument().getLength()).contains("-")) { 46 | super.insertString(fb, offset, string, attr); 47 | return; 48 | } 49 | } 50 | Integer.parseInt(string); 51 | super.insertString(fb, offset, string, attr); 52 | } catch (Exception ignored) { 53 | // this will only trigger if an unwanted key is pressed i.e. not a numeric 0 - 9 54 | } 55 | } 56 | 57 | @Override 58 | public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) { 59 | try { 60 | if (this.useDecimalPlaces) { 61 | if (text.equals(".") && !fb.getDocument().getText(0, fb.getDocument().getLength()).contains(".")) { 62 | super.insertString(fb, offset, text, attrs); 63 | return; 64 | } 65 | } 66 | if (this.canBeNegative) { 67 | if (text.equals("-") && !fb.getDocument().getText(0, fb.getDocument().getLength()).contains("-")) { 68 | super.insertString(fb, offset, text, attrs); 69 | return; 70 | } 71 | } 72 | Integer.parseInt(text); 73 | super.replace(fb, offset, length, text, attrs); 74 | int value = Integer.parseInt(fb.getDocument().getText(0, fb.getDocument().getLength())); 75 | if ( value > this.maxValue) { 76 | super.replace(fb, offset, length +1, "", attrs); 77 | this.changeListener.stateChanged(new ChangeEvent(fb.getDocument().getText(0, fb.getDocument().getLength()))); 78 | } else if ( value < this.minValue) { 79 | super.replace(fb, offset, length -1, "", attrs); 80 | this.changeListener.stateChanged(new ChangeEvent(fb.getDocument().getText(0, fb.getDocument().getLength()))); 81 | } else { 82 | this.changeListener.stateChanged(new ChangeEvent(value)); 83 | } 84 | } catch (Exception ignored) { 85 | // this will only trigger if an unwanted key is pressed i.e. not a numeric 0 - 9 86 | } 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/Utils/Classes/KDTree2DNode.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.Utils.Classes; 2 | 3 | import AutoDriveEditor.RoadNetwork.MapNode; 4 | 5 | public class KDTree2DNode { 6 | 7 | public final MapNode mapNode; 8 | KDTree2DNode left, right; 9 | 10 | public KDTree2DNode(MapNode mapNode) { 11 | this.mapNode = mapNode; 12 | left = right = null; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/Utils/Classes/KDTree3DNode.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.Utils.Classes; 2 | 3 | import AutoDriveEditor.RoadNetwork.MapNode; 4 | 5 | public class KDTree3DNode { 6 | MapNode mapNode; 7 | KDTree3DNode left; 8 | KDTree3DNode right; 9 | 10 | KDTree3DNode(MapNode mapNode) { 11 | this.mapNode = mapNode; 12 | this.left = null; 13 | this.right = null; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/Utils/Classes/NameableThread.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.Utils.Classes; 2 | 3 | import java.util.concurrent.ThreadFactory; 4 | 5 | public class NameableThread implements ThreadFactory{ 6 | private final ThreadFactory threadFactory; 7 | private final String name; 8 | 9 | public NameableThread(final ThreadFactory threadFactory, final String name) { 10 | this.threadFactory = threadFactory; 11 | this.name = name; 12 | } 13 | 14 | @Override 15 | public Thread newThread(final Runnable r) { 16 | final Thread thread = threadFactory.newThread(r); 17 | thread.setName(name); 18 | return thread; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/Utils/ConversionUtils.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.Utils; 2 | 3 | import java.awt.*; 4 | 5 | public class ConversionUtils { 6 | 7 | public static Color HexToColor(String hexColour) { 8 | int r = Integer.valueOf(hexColour.substring(1, 3), 16); 9 | int g = Integer.valueOf(hexColour.substring(3, 5), 16); 10 | int b = Integer.valueOf(hexColour.substring(5, 7), 16); 11 | return new Color(r,g,b); 12 | } 13 | 14 | public static String ColorToHex(Color color, boolean toUpperCase) { 15 | String hex = String.format("#%02x%02x%02x", color.getRed(), color.getGreen(), color.getBlue()); 16 | if (toUpperCase) hex = hex.toUpperCase(); 17 | return hex; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/Utils/HTMLUtils.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.Utils; 2 | 3 | import javax.swing.*; 4 | import javax.swing.event.HyperlinkEvent; 5 | import java.awt.*; 6 | import java.io.IOException; 7 | import java.net.URISyntaxException; 8 | 9 | public class HTMLUtils { 10 | 11 | public static JEditorPane createHyperLink(String text, String linkText, String URL) { 12 | JLabel label = new JLabel(); 13 | label.setHorizontalAlignment(SwingConstants.CENTER); 14 | Font font = label.getFont(); 15 | 16 | // create some css from the label's font 17 | String style = "font-family:" + font.getFamily() + ";" + "font-weight:" + (font.isBold() ? "bold" : "normal") + ";" + 18 | "font-size:" + font.getSize() + "pt;" + 19 | "text-align: centre"; 20 | 21 | // html content 22 | JEditorPane ep = new JEditorPane("text/html", "" // 23 | + text + " " + linkText + "" // 24 | + ""); 25 | 26 | // handle link events 27 | ep.addHyperlinkListener(e -> { 28 | if (e.getEventType().equals(HyperlinkEvent.EventType.ACTIVATED)) { 29 | try { 30 | Desktop.getDesktop().browse(e.getURL().toURI()); // roll your own link launcher or use Desktop if J6+ 31 | } catch (IOException | URISyntaxException ex) { 32 | ex.printStackTrace(); 33 | } 34 | } 35 | }); 36 | ep.setEditable(false); 37 | ep.setBackground(label.getBackground()); 38 | return ep; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/Utils/ImageUtils.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.Utils; 2 | 3 | import AutoDriveEditor.AutoDriveEditor; 4 | 5 | import javax.imageio.ImageIO; 6 | import javax.swing.*; 7 | import java.awt.*; 8 | import java.awt.image.BufferedImage; 9 | import java.io.IOException; 10 | import java.net.URL; 11 | 12 | import static AutoDriveEditor.GUI.Menus.DebugMenu.Logging.LogRenderInfoMenu.bDebugLogRenderInfo; 13 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 14 | 15 | public class ImageUtils { 16 | 17 | public static BufferedImage getNewBufferImage(int width, int height, int transparency) { 18 | GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 19 | GraphicsDevice gd = ge.getDefaultScreenDevice(); 20 | GraphicsConfiguration gc = gd.getDefaultConfiguration(); 21 | BufferedImage bufferImage = gc.createCompatibleImage(width, height, transparency); 22 | bufferImage.setAccelerationPriority(1); 23 | if (bDebugLogRenderInfo) LOG.info("Accelerated bufferImage = {}", bufferImage.getAccelerationPriority()); 24 | return bufferImage; 25 | } 26 | 27 | public static BufferedImage loadImage(String fileName) { 28 | try { 29 | URL url = AutoDriveEditor.class.getResource("/" + fileName); 30 | if (url != null) { 31 | 32 | BufferedImage file = ImageIO.read(url); 33 | BufferedImage image = getNewBufferImage(file.getWidth(), file.getHeight(), Transparency.BITMASK); 34 | Graphics2D g = (Graphics2D) image.getGraphics(); 35 | g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); 36 | g.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED); 37 | g.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_SPEED); 38 | g.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE); 39 | g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_OFF); 40 | g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR); 41 | g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED); 42 | g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); 43 | g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); 44 | g.drawImage(file,0,0,null); 45 | g.dispose(); 46 | return image; 47 | } 48 | } catch (IOException e) { 49 | LOG.error(e.getMessage(), e); 50 | } 51 | return null; 52 | } 53 | 54 | public static ImageIcon loadImageIcon(String name) { 55 | String fileName = "/" + name; 56 | try { 57 | URL url = AutoDriveEditor.class.getResource(fileName); 58 | if (url != null) { 59 | BufferedImage newImage = ImageIO.read(url); 60 | return new ImageIcon(newImage); 61 | } else { 62 | LOG.info("## loadImageIcon Error ## Unable to load image {}", fileName); 63 | } 64 | } catch (IOException ignored) {} 65 | return null; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/Utils/LoggerUtils.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.Utils; 2 | 3 | import AutoDriveEditor.AutoDriveEditor; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | 7 | public class LoggerUtils { 8 | 9 | public static final Logger LOG = LoggerFactory.getLogger(AutoDriveEditor.class); 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/Utils/MathUtils.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.Utils; 2 | 3 | import java.awt.geom.Point2D; 4 | import java.awt.geom.Rectangle2D; 5 | import java.math.BigDecimal; 6 | import java.math.RoundingMode; 7 | 8 | @SuppressWarnings("unused") 9 | public class MathUtils { 10 | 11 | /** 12 | * Given two points that describe the start and end locations of a rectangle, will return 13 | * a rectangle2D with normalized co-ordinates ( i.e. start location will always be the top-Left 14 | * of the rectangle and the size and width will always be positive numbers. 15 | * 16 | * @param startPoint Point2D containing the start location 17 | * @param endPoint Point2D containing the end location 18 | * @return Rectangle2D containing the normalized X,Y,Width,Height or null if the startPoint 19 | * or endPoint is invalid 20 | */ 21 | public static Rectangle2D getNormalizedRectangle(Point2D startPoint, Point2D endPoint) { 22 | if (startPoint != null && endPoint != null) { 23 | double x1 = Math.min(startPoint.getX(), endPoint.getX()); 24 | double y1 = Math.min(startPoint.getY(), endPoint.getY()); 25 | double x2 = Math.max(startPoint.getX(), endPoint.getX()); 26 | double y2 = Math.max(startPoint.getY(), endPoint.getY()); 27 | 28 | // Ensure coordinates are in the correct order for the top-left and bottom-right corners 29 | if (x1 > x2) { 30 | double temp = x1; 31 | x1 = x2; 32 | x2 = temp; 33 | } 34 | if (y1 > y2) { 35 | double temp = y1; 36 | y1 = y2; 37 | y2 = temp; 38 | } 39 | 40 | // Ensure the width and height are non-negative 41 | double width = Math.max(0, x2 - x1); 42 | double height = Math.max(0, y2 - y1); 43 | 44 | return new Rectangle2D.Double(x1, y1, width, height); 45 | } 46 | return null; 47 | } 48 | 49 | 50 | /** 51 | * 52 | * takes an input representing a (double) angle in radians and normalizes it 53 | * to be within the range [0, 2π) or [0, 360 degrees) 54 | * 55 | * @param input in radians 56 | * @return normalized angle as a (double) 57 | */ 58 | public static double normalizeAngle(double input) { 59 | double xPI = 2 * Math.PI; 60 | return (input % xPI + xPI) % xPI; 61 | } 62 | 63 | public static double roundUpDoubleToDecimalPlaces(double value, int places) { 64 | if (!Double.isNaN(value)) { 65 | BigDecimal bd = new BigDecimal(value); 66 | bd = bd.setScale(places, RoundingMode.HALF_UP); 67 | return bd.doubleValue(); 68 | } else { 69 | return 0; 70 | } 71 | } 72 | 73 | public static float roundUpFloatToDecimalPlaces(float value, int places) { 74 | if (!Float.isNaN(value)) { 75 | BigDecimal bd = new BigDecimal(value); 76 | bd = bd.setScale(places, RoundingMode.HALF_UP); 77 | return (float) bd.doubleValue(); 78 | } else { 79 | return 0; 80 | } 81 | } 82 | 83 | public static double limitDoubleToDecimalPlaces(double value, int places, RoundingMode roundingMode) { 84 | if (!Double.isNaN(value)) { 85 | BigDecimal bd = new BigDecimal(value); 86 | bd = bd.setScale(places, roundingMode); 87 | return bd.doubleValue(); 88 | } else { 89 | return 0; 90 | } 91 | } 92 | 93 | public static float limitFloatToDecimalPlaces(float value, int places, RoundingMode roundingMode) { 94 | if (!Float.isNaN(value)) { 95 | BigDecimal bd = new BigDecimal(value); 96 | bd = bd.setScale(places, roundingMode); 97 | return (float) bd.doubleValue(); 98 | } else { 99 | return 0; 100 | } 101 | } 102 | 103 | public static double linearInterpolate(double n0, double n1, double a) { 104 | return (1.0 - a) * n0 + (a * n1); 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/Utils/ProfileUtil.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.Utils; 2 | 3 | import java.math.RoundingMode; 4 | 5 | import static AutoDriveEditor.Utils.MathUtils.limitDoubleToDecimalPlaces; 6 | 7 | public class ProfileUtil { 8 | 9 | private long time; 10 | private long startTime = 0; 11 | 12 | public ProfileUtil() { 13 | this.time = 0; 14 | } 15 | 16 | public void startTimer() { 17 | this.startTime = System.nanoTime(); 18 | } 19 | 20 | public void pauseTimer() { 21 | this.time += System.nanoTime() - this.startTime; 22 | } 23 | 24 | public void restartTimer() { 25 | startTimer(); 26 | } 27 | 28 | public void stopTimer() { 29 | pauseTimer(); 30 | } 31 | 32 | public void resetTimer() { 33 | this.time = 0; 34 | } 35 | 36 | public double getTime(int decimalPrecision) { 37 | return limitDoubleToDecimalPlaces((double)this.time / 1000000, decimalPrecision , RoundingMode.HALF_UP); 38 | } 39 | } 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/main/java/AutoDriveEditor/XMLConfig/AutoSave.java: -------------------------------------------------------------------------------- 1 | package AutoDriveEditor.XMLConfig; 2 | 3 | import AutoDriveEditor.Utils.Classes.NameableThread; 4 | 5 | import java.util.concurrent.Executors; 6 | import java.util.concurrent.ScheduledExecutorService; 7 | import java.util.concurrent.ScheduledFuture; 8 | import java.util.concurrent.TimeUnit; 9 | 10 | import static AutoDriveEditor.GUI.MapPanel.*; 11 | import static AutoDriveEditor.GUI.TextPanel.updateAutosaveStatusLabel; 12 | import static AutoDriveEditor.RoadNetwork.RoadMap.getRoadMap; 13 | import static AutoDriveEditor.Utils.LoggerUtils.LOG; 14 | import static AutoDriveEditor.XMLConfig.EditorXML.autoSaveInterval; 15 | import static AutoDriveEditor.XMLConfig.EditorXML.maxAutoSaveSlots; 16 | import static AutoDriveEditor.XMLConfig.GameXML.autoSaveGameConfigFile; 17 | import static AutoDriveEditor.XMLConfig.RoutesXML.autoSaveRouteManagerXML; 18 | 19 | public class AutoSave { 20 | 21 | 22 | public static ScheduledExecutorService scheduledExecutorService; 23 | @SuppressWarnings("rawtypes") 24 | public static ScheduledFuture scheduledFuture; 25 | 26 | public static boolean bSuspendAutoSave; 27 | 28 | public static void startAutoSaveThread() { 29 | LOG.info("Starting AutoSave Thread"); 30 | 31 | scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(new NameableThread(Executors.defaultThreadFactory(), "AutoSave")); 32 | scheduledFuture = scheduledExecutorService.scheduleAtFixedRate(() -> { 33 | if (getRoadMap() != null) { 34 | if (configType == CONFIG_SAVEGAME) { 35 | autoSaveGameConfigFile(); 36 | } else if (configType == CONFIG_ROUTEMANAGER) { 37 | autoSaveRouteManagerXML(); 38 | } 39 | } 40 | }, autoSaveInterval, autoSaveInterval, TimeUnit.MINUTES); 41 | // 42 | LOG.info("Started AutoSave Thread ( Interval in Minutes {} , Max Slots {} )", autoSaveInterval, maxAutoSaveSlots); 43 | } 44 | 45 | public static void stopAutoSaveThread() { 46 | if (scheduledExecutorService != null) { 47 | scheduledExecutorService.shutdown(); 48 | try { 49 | if (!scheduledExecutorService.awaitTermination(2, TimeUnit.SECONDS)) { 50 | scheduledExecutorService.shutdownNow(); 51 | if (!scheduledExecutorService.awaitTermination(3, TimeUnit.SECONDS)) { 52 | LOG.info("AutoSave thread failed to shut down after 5 seconds"); 53 | } 54 | } else { 55 | LOG.info("AutoSave thread stopped"); 56 | } 57 | updateAutosaveStatusLabel(); 58 | //setAutosaveStatusLabel("Disabled", new Color(200, 0, 0)); 59 | } catch (InterruptedException e) { 60 | e.printStackTrace(); 61 | scheduledExecutorService.shutdownNow(); 62 | } 63 | } 64 | } 65 | 66 | public static void restartAutoSaveThread() { 67 | LOG.info("Restarting AutoSave Thread"); 68 | if (scheduledExecutorService != null) { 69 | stopAutoSaveThread(); 70 | startAutoSaveThread(); 71 | } else { 72 | LOG.info("Failed to restart AutoSave Thread ( Thread not active )"); 73 | } 74 | } 75 | 76 | public static void suspendAutoSaving() { bSuspendAutoSave = true; } 77 | 78 | public static void resumeAutoSaving() { bSuspendAutoSave = false; } 79 | 80 | @SuppressWarnings("BooleanMethodIsAlwaysInverted") 81 | public static boolean canAutoSave() { return !bSuspendAutoSave; } 82 | 83 | } -------------------------------------------------------------------------------- /src/main/resources/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Main-Class: AutoDriveEditor.AutoDriveEditor 3 | 4 | -------------------------------------------------------------------------------- /src/main/resources/editor/Legacy/curves/controlpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/Legacy/curves/controlpoint.png -------------------------------------------------------------------------------- /src/main/resources/editor/Legacy/curves/controlpoint_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/Legacy/curves/controlpoint_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/Legacy/curves/curvenode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/Legacy/curves/curvenode.png -------------------------------------------------------------------------------- /src/main/resources/editor/Legacy/gridsubtoggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/Legacy/gridsubtoggle.png -------------------------------------------------------------------------------- /src/main/resources/editor/Legacy/node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/Legacy/node.png -------------------------------------------------------------------------------- /src/main/resources/editor/Legacy/node_marker_blur.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/Legacy/node_marker_blur.png -------------------------------------------------------------------------------- /src/main/resources/editor/Legacy/node_marker_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/Legacy/node_marker_small.png -------------------------------------------------------------------------------- /src/main/resources/editor/Legacy/node_parking_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/Legacy/node_parking_big.png -------------------------------------------------------------------------------- /src/main/resources/editor/Legacy/node_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/Legacy/node_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/Legacy/subprionode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/Legacy/subprionode.png -------------------------------------------------------------------------------- /src/main/resources/editor/Legacy/subprionode_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/Legacy/subprionode_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/addmarker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/addmarker.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/addmarker_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/addmarker_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/conconnect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/conconnect.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/conconnect_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/conconnect_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/config.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/config_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/config_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/connectdual.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/connectdual.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/connectdual_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/connectdual_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/connectdual_subprio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/connectdual_subprio.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/connectdual_subprio_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/connectdual_subprio_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/connectregular.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/connectregular.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/connectregular_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/connectregular_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/connectregular_subprio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/connectregular_subprio.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/connectregular_subprio_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/connectregular_subprio_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/connectreverse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/connectreverse.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/connectreverse_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/connectreverse_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/connectreverse_subprio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/connectreverse_subprio.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/connectreverse_subprio_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/connectreverse_subprio_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/connectroad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/connectroad.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/connectroad_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/connectroad_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/copy.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/copy_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/copy_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/createprimary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/createprimary.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/createprimary_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/createprimary_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/createsecondary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/createsecondary.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/createsecondary_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/createsecondary_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/cubiccurve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/cubiccurve.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/cubiccurve_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/cubiccurve_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/cut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/cut.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/cut_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/cut_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/deletemarker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/deletemarker.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/deletemarker_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/deletemarker_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/deletenodes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/deletenodes.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/deletenodes_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/deletenodes_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/depthalign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/depthalign.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/depthalign_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/depthalign_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/editlocation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/editlocation.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/editlocation_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/editlocation_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/editmarker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/editmarker.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/editmarker_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/editmarker_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/flip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/flip.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/flip_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/flip_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/gridsnaptoggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/gridsnaptoggle.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/gridsnaptoggle_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/gridsnaptoggle_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/gridsubtoggle_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/gridsubtoggle_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/gridtoggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/gridtoggle.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/gridtoggle_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/gridtoggle_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/hidden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/hidden.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/hidden_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/hidden_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/hide_connect_dual.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/hide_connect_dual.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/hide_connect_dual_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/hide_connect_dual_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/hide_connect_regular.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/hide_connect_regular.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/hide_connect_regular_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/hide_connect_regular_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/hide_connect_reverse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/hide_connect_reverse.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/hide_connect_reverse_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/hide_connect_reverse_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/hide_connect_subprio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/hide_connect_subprio.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/hide_connect_subprio_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/hide_connect_subprio_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/hide_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/hide_node.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/hide_node_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/hide_node_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/horizontalalign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/horizontalalign.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/horizontalalign_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/horizontalalign_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/movenode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/movenode.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/movenode_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/movenode_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/networkinfo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/networkinfo.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/networkinfo_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/networkinfo_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/nodeminus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/nodeminus.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/nodeminus_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/nodeminus_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/nodeplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/nodeplus.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/nodeplus_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/nodeplus_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/paste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/paste.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/paste_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/paste_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/quadcurve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/quadcurve.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/quadcurve_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/quadcurve_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/rotatenode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/rotatenode.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/rotatenode_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/rotatenode_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/scale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/scale.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/scale_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/scale_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/select_freeform.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/select_freeform.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/select_freeform_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/select_freeform_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/select_rectangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/select_rectangle.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/select_rectangle_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/select_rectangle_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/swappriority.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/swappriority.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/swappriority_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/swappriority_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/unknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/unknown.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/unknown_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/unknown_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/verticalalign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/verticalalign.png -------------------------------------------------------------------------------- /src/main/resources/editor/buttons/verticalalign_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/buttons/verticalalign_selected.png -------------------------------------------------------------------------------- /src/main/resources/editor/curvepanel/cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/curvepanel/cancel.png -------------------------------------------------------------------------------- /src/main/resources/editor/curvepanel/cancel_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/curvepanel/cancel_select.png -------------------------------------------------------------------------------- /src/main/resources/editor/curvepanel/confirm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/curvepanel/confirm.png -------------------------------------------------------------------------------- /src/main/resources/editor/curvepanel/confirm_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/curvepanel/confirm_select.png -------------------------------------------------------------------------------- /src/main/resources/editor/gameIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/gameIcon.png -------------------------------------------------------------------------------- /src/main/resources/editor/marker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/marker.png -------------------------------------------------------------------------------- /src/main/resources/editor/nodes/node_marker2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/nodes/node_marker2.png -------------------------------------------------------------------------------- /src/main/resources/editor/nodes/node_marker_small2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/nodes/node_marker_small2.png -------------------------------------------------------------------------------- /src/main/resources/editor/nodes/node_parking_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/nodes/node_parking_small.png -------------------------------------------------------------------------------- /src/main/resources/editor/nodes/node_warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/nodes/node_warning.png -------------------------------------------------------------------------------- /src/main/resources/editor/nodes/node_warning_y.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/nodes/node_warning_y.png -------------------------------------------------------------------------------- /src/main/resources/editor/routeIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/routeIcon.png -------------------------------------------------------------------------------- /src/main/resources/editor/tractor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/tractor.png -------------------------------------------------------------------------------- /src/main/resources/editor/update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/editor/update.png -------------------------------------------------------------------------------- /src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/main/resources/mapImages/Blank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KillBait/AutoDrive_Course_Editor/f7064ee9d9ebf8f73640260ecc096439c5ee8876/src/main/resources/mapImages/Blank.png -------------------------------------------------------------------------------- /version.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1.0.9 4 | 5 | 6 | Version Notes 7 | 8 | 9 |

Update to v1.0.9

10 |

Fixed

11 |
    12 |
  • Fixed FS25 config crash when reading Parking Spots ( FS25 changed how vehicle ID's are stored in vehicles.xml
  • 13 |
14 |

Visit the Release Page Here.

15 | 16 | ]]> 17 |
18 |
19 | --------------------------------------------------------------------------------