From 48ee74129bb09a817a0bbbabe860c4007b74c66b Mon Sep 17 00:00:00 2001
From: 826220679@qq.com <826220679@qq.com>
Date: 星期日, 21 十二月 2025 12:37:44 +0800
Subject: [PATCH] 新增了往返路径

---
 src/dikuai/Dikuaiguanli.java |  220 ++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 187 insertions(+), 33 deletions(-)

diff --git a/src/dikuai/Dikuaiguanli.java b/src/dikuai/Dikuaiguanli.java
index 740ccf8..70bc5b1 100644
--- a/src/dikuai/Dikuaiguanli.java
+++ b/src/dikuai/Dikuaiguanli.java
@@ -23,14 +23,14 @@
 
 import lujing.Lunjingguihua;
 import lujing.MowingPathGenerationPage;
+import publicway.Fuzhibutton;
+import publicway.Lookbutton;
+import publicway.buttonset;
 import zhangaiwu.AddDikuai;
 import zhangaiwu.Obstacledge;
 import zhuye.MapRenderer;
 import zhuye.Shouye;
 import zhuye.Coordinate;
-import zhuye.buttonset;
-import zhuye.Fuzhibutton;
-import zhuye.Lookbutton;
 import gecaoji.Device;
 
 /**
@@ -316,8 +316,7 @@
 		contentPanel.add(Box.createRigidArea(new Dimension(0, 10)));
 
 		// 寰�杩旂偣璺緞锛堝甫鏌ョ湅鍥炬爣鎸夐挳锛�
-		JPanel returnPathPanel = createCardInfoItemWithButton("寰�杩旂偣璺緞:",
-			getDisplayValue(dikuai.getReturnPathCoordinates(), "鏈缃�"),
+		JPanel returnPathPanel = createCardInfoItemWithIconButton("寰�杩旂偣璺緞:",
 			createViewButton(e -> editReturnPath(dikuai)));
 		configureInteractiveLabel(getInfoItemTitleLabel(returnPathPanel),
 			() -> editReturnPath(dikuai),
@@ -755,6 +754,20 @@
 	}
 
 	private String promptCoordinateEditing(String title, String initialValue) {
+		return promptCoordinateEditing(title, initialValue, null);
+	}
+	
+	private String promptCoordinateEditing(String title, String initialValue, Dikuai dikuai) {
+		// 鍒ゆ柇鏄惁鏄線杩旂偣璺緞瀵硅瘽妗�
+		boolean isReturnPathDialog = title != null && title.contains("寰�杩旂偣璺緞");
+		
+		if (isReturnPathDialog) {
+			Window owner = SwingUtilities.getWindowAncestor(this);
+			Wangfanpathpage page = new Wangfanpathpage(owner, title, initialValue, dikuai);
+			page.setVisible(true);
+			return page.getResult();
+		}
+		
 		JTextArea textArea = new JTextArea(prepareCoordinateForEditor(initialValue));
 		textArea.setLineWrap(true);
 		textArea.setWrapStyleWord(true);
@@ -763,7 +776,8 @@
 		textArea.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
 
 		JScrollPane scrollPane = new JScrollPane(textArea);
-		scrollPane.setPreferredSize(new Dimension(360, 240));
+		// 濡傛灉鏄線杩旂偣璺緞瀵硅瘽妗嗭紝楂樺害璋冩暣涓洪�傚簲涓や釜鏂囨湰鍩�
+		scrollPane.setPreferredSize(new Dimension(360, isReturnPathDialog ? 100 : 240));
 
 		Window owner = SwingUtilities.getWindowAncestor(this);
 		JDialog dialog;
@@ -776,17 +790,115 @@
 		}
 		dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
 
-		JPanel contentPanel = new JPanel(new BorderLayout());
+		JPanel contentPanel = new JPanel();
 		contentPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
-		contentPanel.add(scrollPane, BorderLayout.CENTER);
+		
+		if (isReturnPathDialog) {
+			contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
+			// 鍑忓皬杈硅窛浠ュ鍔犳枃鏈煙瀹藉害 (98%宸﹀彸)
+			contentPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+			
+			// 1. 鍘熷寰�杩旇矾寰勫潗鏍囧尯鍩�
+			String rawCoords = dikuai != null ? prepareCoordinateForEditor(dikuai.getReturnPathRawCoordinates()) : "";
+			int rawCount = 0;
+			if (rawCoords != null && !rawCoords.isEmpty() && !"-1".equals(rawCoords)) {
+				rawCount = rawCoords.split(";").length;
+			}
+			
+			JPanel rawHeaderPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
+			rawHeaderPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
+			rawHeaderPanel.setBackground(BACKGROUND_COLOR);
+			rawHeaderPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 30));
+			
+			JLabel rawTitleLabel = new JLabel("鍘熷寰�杩旇矾寰勫潗鏍� (" + rawCount + "鐐�)  ");
+			rawTitleLabel.setFont(new Font("寰蒋闆呴粦", Font.BOLD, 14));
+			rawHeaderPanel.add(rawTitleLabel);
+			
+			// 鍘熷鍧愭爣澶嶅埗鎸夐挳
+			final String finalRawCoords = rawCoords;
+			JButton rawCopyBtn = Fuzhibutton.createCopyButton(
+				() -> {
+					if (finalRawCoords == null || finalRawCoords.isEmpty() || "-1".equals(finalRawCoords)) return null;
+					return finalRawCoords;
+				},
+				"澶嶅埗",
+				new Color(230, 250, 240)
+			);
+			rawCopyBtn.setFont(new Font("寰蒋闆呴粦", Font.PLAIN, 12));
+			rawCopyBtn.setPreferredSize(new Dimension(50, 24));
+			rawCopyBtn.setMargin(new Insets(0,0,0,0));
+			rawHeaderPanel.add(rawCopyBtn);
+			
+			contentPanel.add(rawHeaderPanel);
+			contentPanel.add(Box.createVerticalStrut(5));
+			
+			JTextArea rawTextArea = new JTextArea(rawCoords);
+			rawTextArea.setLineWrap(true);
+			rawTextArea.setWrapStyleWord(true);
+			rawTextArea.setFont(new Font("寰蒋闆呴粦", Font.PLAIN, 13));
+			rawTextArea.setEditable(false); // 鍘熷鍧愭爣閫氬父涓嶅彲缂栬緫
+			rawTextArea.setRows(4);
+			rawTextArea.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+			
+			JScrollPane rawScroll = new JScrollPane(rawTextArea);
+			rawScroll.setAlignmentX(Component.LEFT_ALIGNMENT);
+			// 璁剧疆鏈�澶у搴﹀厑璁告墿灞曪紝棣栭�夊搴﹂�備腑
+			rawScroll.setPreferredSize(new Dimension(300, 100));
+			rawScroll.setMaximumSize(new Dimension(Integer.MAX_VALUE, 100));
+			contentPanel.add(rawScroll);
+			
+			contentPanel.add(Box.createVerticalStrut(15));
+			
+			// 2. 浼樺寲鍚庡線杩旇矾寰勫潗鏍囧尯鍩�
+			String optCoords = prepareCoordinateForEditor(initialValue);
+			int optCount = 0;
+			if (optCoords != null && !optCoords.isEmpty() && !"-1".equals(optCoords)) {
+				optCount = optCoords.split(";").length;
+			}
+			
+			JPanel optHeaderPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
+			optHeaderPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
+			optHeaderPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 30));
+			
+			JLabel optTitleLabel = new JLabel("浼樺寲鍚庡線杩旇矾寰勫潗鏍� (" + optCount + "鐐�)  ");
+			optTitleLabel.setFont(new Font("寰蒋闆呴粦", Font.BOLD, 14));
+			optHeaderPanel.add(optTitleLabel);
+			
+			// 浼樺寲鍧愭爣澶嶅埗鎸夐挳 - 鍔ㄦ�佽幏鍙栨枃鏈煙鍐呭
+			JButton optCopyBtn = Fuzhibutton.createCopyButton(
+				() -> {
+					String text = textArea.getText();
+					if (text == null || text.trim().isEmpty() || "-1".equals(text.trim())) return null;
+					return text;
+				},
+				"澶嶅埗",
+				new Color(230, 250, 240)
+			);
+			optCopyBtn.setFont(new Font("寰蒋闆呴粦", Font.PLAIN, 12));
+			optCopyBtn.setPreferredSize(new Dimension(50, 24));
+			optCopyBtn.setMargin(new Insets(0,0,0,0));
+			optHeaderPanel.add(optCopyBtn);
+			
+			contentPanel.add(optHeaderPanel);
+			contentPanel.add(Box.createVerticalStrut(5));
+			
+			// 浣跨敤浼犲叆鐨� textArea (宸插垵濮嬪寲涓� initialValue)
+			textArea.setRows(4);
+			scrollPane.setAlignmentX(Component.LEFT_ALIGNMENT);
+			scrollPane.setPreferredSize(new Dimension(300, 100));
+			scrollPane.setMaximumSize(new Dimension(Integer.MAX_VALUE, 100));
+			contentPanel.add(scrollPane);
+			
+		} else {
+			contentPanel.setLayout(new BorderLayout());
+			contentPanel.add(scrollPane, BorderLayout.CENTER);
+		}
 
 		JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
 		
-		// 鍒ゆ柇鏄惁鏄線杩旂偣璺緞瀵硅瘽妗�
-		boolean isReturnPathDialog = title != null && title.contains("寰�杩旂偣璺緞");
 		JButton okButton;
 		JButton cancelButton;
-		JButton copyButton;
+		JButton copyButton = null; // 鍒濆鍖栦负null
 		
 		if (isReturnPathDialog) {
 			// 寰�杩旂偣璺緞瀵硅瘽妗嗭細浣跨敤 buttonset 椋庢牸鐨勭‘瀹氭寜閽紝鍥炬爣鎸夐挳
@@ -811,22 +923,8 @@
 				public void mouseExited(MouseEvent e) { cancelButton.setOpaque(false); }
 			});
 			
-			// 浣跨敤 Fuzhibutton 鍒涘缓澶嶅埗鎸夐挳
-			copyButton = Fuzhibutton.createCopyButton(
-				(java.util.function.Supplier<String>) () -> {
-					String text = textArea.getText();
-					if (text == null) {
-						text = "";
-					}
-					String trimmed = text.trim();
-					if (trimmed.isEmpty() || "-1".equals(trimmed)) {
-						return null; // 杩斿洖null浼氳Е鍙�"鏈缃澶嶅埗鐨勫唴瀹�"鎻愮ず
-					}
-					return text;
-				},
-				"澶嶅埗" + title,
-				new Color(230, 250, 240)
-			);
+			// 浣跨敤 Fuzhibutton 鍒涘缓澶嶅埗鎸夐挳 (杩欓噷涓嶅啀闇�瑕佸簳閮ㄧ殑澶嶅埗鎸夐挳锛屽洜涓轰笂闈㈠凡缁忔湁浜�)
+			// copyButton = ... 
 			
 		} else {
 			// 鍏朵粬瀵硅瘽妗嗕繚鎸佸師鏈夋牱寮�
@@ -860,18 +958,41 @@
 		final String[] resultHolder = new String[1];
 
 		okButton.addActionListener(e -> {
-			resultHolder[0] = textArea.getText();
-			confirmed[0] = true;
-			dialog.dispose();
+			if (isReturnPathDialog) {
+				// 寰�杩旂偣璺緞瀵硅瘽妗嗭細鏍囪涓烘墦寮�缁樺埗椤甸潰
+				// 濡傛灉鏂囨湰鍩熶腑宸茬粡鏈夊潗鏍囷紝琛ㄧず瑕侀噸鏂扮粯鍒�
+				String currentText = textArea.getText();
+				if (currentText != null && !currentText.trim().isEmpty() && !"-1".equals(currentText.trim())) {
+					// 鏈夊潗鏍囷紝琛ㄧず閲嶆柊缁樺埗
+					resultHolder[0] = "__OPEN_DRAW_PAGE_REFRESH__";
+				} else {
+					// 娌℃湁鍧愭爣锛屾甯哥粯鍒�
+					resultHolder[0] = "__OPEN_DRAW_PAGE__";
+				}
+				confirmed[0] = true;
+				dialog.dispose();
+			} else {
+				resultHolder[0] = textArea.getText();
+				confirmed[0] = true;
+				dialog.dispose();
+			}
 		});
 
 		cancelButton.addActionListener(e -> dialog.dispose());
 
 		buttonPanel.add(okButton);
 		buttonPanel.add(cancelButton);
-		buttonPanel.add(copyButton);
+		if (copyButton != null) {
+			buttonPanel.add(copyButton);
+		}
 
-		contentPanel.add(buttonPanel, BorderLayout.SOUTH);
+		contentPanel.add(buttonPanel, isReturnPathDialog ? null : BorderLayout.SOUTH);
+		if (isReturnPathDialog) {
+			// 瀵逛簬 BoxLayout锛岀洿鎺ユ坊鍔犲埌搴曢儴
+			JPanel bottomWrapper = new JPanel(new BorderLayout());
+			bottomWrapper.add(buttonPanel, BorderLayout.EAST);
+			contentPanel.add(bottomWrapper);
+		}
 		dialog.setContentPane(contentPanel);
 		dialog.getRootPane().setDefaultButton(okButton);
 		dialog.pack();
@@ -1914,10 +2035,41 @@
 		if (dikuai == null) {
 			return;
 		}
-		String edited = promptCoordinateEditing("鏌ョ湅 / 缂栬緫寰�杩旂偣璺緞", dikuai.getReturnPathCoordinates());
+		String edited = promptCoordinateEditing("鏌ョ湅 / 缂栬緫寰�杩旂偣璺緞", dikuai.getReturnPathCoordinates(), dikuai);
 		if (edited == null) {
 			return;
 		}
+		// 妫�鏌ユ槸鍚︽槸鐗规畩鏍囪锛岃〃绀虹偣鍑讳簡"鍘荤粯鍒�"鎸夐挳
+		if ("__OPEN_DRAW_PAGE__".equals(edited) || "__OPEN_DRAW_PAGE_REFRESH__".equals(edited)) {
+			// 鑾峰彇鍦板潡绠$悊瀵硅瘽妗�
+			Window owner = SwingUtilities.getWindowAncestor(this);
+			Window managementWindow = null;
+			if (owner instanceof JDialog) {
+				managementWindow = owner;
+			}
+			
+			// 鑾峰彇鍦板潡绠$悊瀵硅瘽妗嗙殑鐖剁獥鍙o紙涓荤獥鍙o級锛屼綔涓虹粯鍒堕〉闈㈢殑鐖剁獥鍙�
+			Window drawPageOwner = null;
+			if (managementWindow != null) {
+				drawPageOwner = managementWindow.getOwner();
+			}
+			if (drawPageOwner == null && owner != null) {
+				drawPageOwner = owner.getOwner();
+			}
+			if (drawPageOwner == null) {
+				drawPageOwner = owner;
+			}
+			
+			// 鍏堝叧闂湴鍧楃鐞嗛〉闈�
+			if (managementWindow != null) {
+				managementWindow.dispose();
+			}
+			
+			// 鐒跺悗鎵撳紑缁樺埗椤甸潰锛屽鏋滄槸閲嶆柊缁樺埗锛屼紶閫掓爣璁�
+			boolean isRefresh = "__OPEN_DRAW_PAGE_REFRESH__".equals(edited);
+			Huizhiwanfanpath.showDrawReturnPathDialog(drawPageOwner, dikuai, isRefresh);
+			return;
+		}
 		String normalized = normalizeCoordinateInput(edited);
 		if (!saveFieldAndRefresh(dikuai, "returnPathCoordinates", normalized)) {
 			JOptionPane.showMessageDialog(this, "鏃犳硶鏇存柊寰�杩旂偣璺緞", "閿欒", JOptionPane.ERROR_MESSAGE);
@@ -2322,4 +2474,6 @@
 			return new ArrayList<>(names);
 		}
 	}
+
+
 }
\ No newline at end of file

--
Gitblit v1.10.0