From c498385fb7e372d13e2ee76d7b54ae2381728082 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期三, 17 十二月 2025 19:35:57 +0800
Subject: [PATCH] 新增了测量模式

---
 src/set/Sets.java |  151 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 148 insertions(+), 3 deletions(-)

diff --git a/src/set/Sets.java b/src/set/Sets.java
index b81eac5..9a4d8c2 100644
--- a/src/set/Sets.java
+++ b/src/set/Sets.java
@@ -5,14 +5,12 @@
 import zhuye.MapRenderer;
 import zhuye.Shouye;
 import zhuye.buttonset;
-import set.Setsys;
-
+import zhuye.celiangmoshi;
 import javax.swing.*;
 import javax.swing.filechooser.FileNameExtensionFilter;
 
 import java.awt.*;
 import java.awt.event.*;
-import java.awt.geom.RoundRectangle2D;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
@@ -42,6 +40,7 @@
     private JLabel appVersionLabel;
     private JLabel idleTrailDurationLabel;
     private JLabel boundaryLengthVisibleLabel;
+    private JLabel measurementModeEnabledLabel;
     
     private JButton mowerIdEditBtn;
     private JButton baseStationIdEditBtn;
@@ -156,6 +155,10 @@
         // 鏄剧ず杈圭晫璺濈璁剧疆椤�
         JPanel boundaryLengthPanel = createBoundaryLengthPanel();
         boundaryLengthVisibleLabel = (JLabel) boundaryLengthPanel.getClientProperty("valueLabel");
+        
+        // 寮�鍚祴閲忔ā寮忚缃」
+        JPanel measurementModePanel = createMeasurementModePanel();
+        measurementModeEnabledLabel = (JLabel) measurementModePanel.getClientProperty("valueLabel");
 
         JPanel feedbackPanel = createFeedbackPanel();
         
@@ -171,6 +174,7 @@
         addSettingItem(panel, firmwarePanel, true);
         addSettingItem(panel, idleTrailPanel, true);
         addSettingItem(panel, boundaryLengthPanel, true);
+        addSettingItem(panel, measurementModePanel, true);
         addSettingItem(panel, feedbackPanel, true);
         addSettingItem(panel, appVersionPanel, false);  // 鏈�鍚庝竴椤逛笉鍔犲垎鍓茬嚎
         
@@ -384,6 +388,134 @@
     }
     
     /**
+     * 鍒涘缓寮�鍚祴閲忔ā寮忚缃潰鏉�
+     */
+    private JPanel createMeasurementModePanel() {
+        JPanel panel = new JPanel(new GridBagLayout());
+        panel.setOpaque(false);  // 閫忔槑鑳屾櫙
+        panel.setAlignmentX(Component.LEFT_ALIGNMENT);
+        panel.setMaximumSize(new Dimension(Integer.MAX_VALUE, ROW_HEIGHT));
+        panel.setPreferredSize(new Dimension(Integer.MAX_VALUE, ROW_HEIGHT));
+        panel.setMinimumSize(new Dimension(0, ROW_HEIGHT));
+        panel.setBorder(BorderFactory.createEmptyBorder(ITEM_PADDING, ITEM_PADDING, ITEM_PADDING, ITEM_PADDING));
+
+        GridBagConstraints gbc = new GridBagConstraints();
+
+        JLabel titleLabel = new JLabel("寮�鍚祴閲忔ā寮�");
+        titleLabel.setFont(new Font("寰蒋闆呴粦", Font.BOLD, 14));
+        titleLabel.setForeground(Color.BLACK);
+        titleLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+        gbc.gridx = 0;
+        gbc.gridy = 0;
+        gbc.weightx = 0;
+        gbc.anchor = GridBagConstraints.EAST;
+        gbc.insets = new Insets(0, 0, 0, 12);
+        panel.add(titleLabel, gbc);
+
+        measurementModeEnabledLabel = new JLabel(setData.isMeasurementModeEnabled() ? "宸插紑鍚�" : "宸插叧闂�");
+        measurementModeEnabledLabel.setFont(new Font("寰蒋闆呴粦", Font.PLAIN, 14));
+        measurementModeEnabledLabel.setForeground(Color.DARK_GRAY);
+        gbc = new GridBagConstraints();
+        gbc.gridx = 1;
+        gbc.gridy = 0;
+        gbc.weightx = 1.0;
+        gbc.anchor = GridBagConstraints.EAST;
+        panel.add(measurementModeEnabledLabel, gbc);
+
+        panel.putClientProperty("valueLabel", measurementModeEnabledLabel);
+
+        // 鍒涘缓鍒囨崲鎸夐挳锛堜娇鐢ㄥ浘鏍囷級
+        JButton toggleBtn = createMeasurementModeToggleButton();
+        gbc = new GridBagConstraints();
+        gbc.gridx = 2;
+        gbc.gridy = 0;
+        gbc.weightx = 0;
+        gbc.anchor = GridBagConstraints.EAST;
+        panel.add(toggleBtn, gbc);
+        panel.putClientProperty("toggleButton", toggleBtn);
+
+        return panel;
+    }
+    
+    /**
+     * 鍒涘缓娴嬮噺妯″紡鍒囨崲鎸夐挳
+     */
+    private JButton createMeasurementModeToggleButton() {
+        JButton button = new JButton();
+        button.setContentAreaFilled(false);
+        button.setBorder(null);
+        button.setFocusPainted(false);
+        button.setCursor(new Cursor(Cursor.HAND_CURSOR));
+        button.setPreferredSize(new Dimension(32, 32));
+        button.setMinimumSize(new Dimension(32, 32));
+        button.setMaximumSize(new Dimension(32, 32));
+        
+        updateMeasurementModeToggleButton(button);
+        
+        button.addActionListener(e -> toggleMeasurementMode(button));
+        
+        return button;
+    }
+    
+    /**
+     * 鏇存柊娴嬮噺妯″紡鍒囨崲鎸夐挳鍥炬爣
+     */
+    private void updateMeasurementModeToggleButton(JButton button) {
+        boolean isEnabled = setData.isMeasurementModeEnabled();
+        try {
+            String iconPath = isEnabled ? "image/open.png" : "image/close.png";
+            ImageIcon icon = new ImageIcon(iconPath);
+            if (icon.getIconWidth() > 0) {
+                Image scaledImage = icon.getImage().getScaledInstance(32, 32, Image.SCALE_SMOOTH);
+                button.setIcon(new ImageIcon(scaledImage));
+                button.setText(null);
+            } else {
+                button.setIcon(null);
+                button.setText(isEnabled ? "寮�" : "鍏�");
+            }
+        } catch (Exception e) {
+            button.setIcon(null);
+            button.setText(isEnabled ? "寮�" : "鍏�");
+            System.err.println("鏃犳硶鍔犺浇娴嬮噺妯″紡鍥炬爣: " + e.getMessage());
+        }
+    }
+    
+    /**
+     * 鍒囨崲娴嬮噺妯″紡鐘舵��
+     */
+    private void toggleMeasurementMode(JButton button) {
+        boolean newValue = !setData.isMeasurementModeEnabled();
+        setData.setMeasurementModeEnabled(newValue);
+        
+        // 淇濆瓨鍒伴厤缃枃浠�
+        setData.updateProperty("measurementModeEnabled", String.valueOf(newValue));
+        
+        // 鏇存柊UI
+        if (measurementModeEnabledLabel != null) {
+            measurementModeEnabledLabel.setText(newValue ? "宸插紑鍚�" : "宸插叧闂�");
+        }
+        updateMeasurementModeToggleButton(button);
+        
+        // 閫氱煡MapRenderer鏇存柊
+        Shouye shouye = Shouye.getInstance();
+        if (shouye != null) {
+            MapRenderer renderer = shouye.getMapRenderer();
+            if (renderer != null) {
+                renderer.setMeasurementMode(newValue);
+            }
+            if (newValue) {
+                celiangmoshi.start();
+            } else {
+                celiangmoshi.stop();
+            }
+            // 鍒锋柊鍦板浘鏄剧ず锛堥�氳繃MapRenderer瑙﹀彂閲嶇粯锛�
+            if (renderer != null) {
+                renderer.repaint();
+            }
+        }
+    }
+    
+    /**
      * 鍒涘缓杈圭晫璺濈鏄剧ず鍒囨崲鎸夐挳
      */
     private JButton createBoundaryLengthToggleButton() {
@@ -580,6 +712,19 @@
             }
         }
         
+        // 鏇存柊娴嬮噺妯″紡鐘舵��
+        if (measurementModeEnabledLabel != null) {
+            measurementModeEnabledLabel.setText(setData.isMeasurementModeEnabled() ? "宸插紑鍚�" : "宸插叧闂�");
+        }
+        // 鏇存柊娴嬮噺妯″紡鍒囨崲鎸夐挳鍥炬爣
+        JPanel measurementModePanel = (JPanel) measurementModeEnabledLabel.getParent();
+        if (measurementModePanel != null) {
+            JButton toggleBtn = (JButton) measurementModePanel.getClientProperty("toggleButton");
+            if (toggleBtn != null) {
+                updateMeasurementModeToggleButton(toggleBtn);
+            }
+        }
+        
         // 鏇存柊APP鐗堟湰鏄剧ず
         if (appVersionLabel != null) {
             appVersionLabel.setText(setData.getAppVersion() != null ? 

--
Gitblit v1.10.0