LunarPresentation/Commands/BraceToRow.cs

(开头部分) 10KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System.Windows;
using System.Collections.Generic;
using System.Xml;

namespace SHomeWorkshop.LunarPresentation.Commands
{
    public partial class Command
    {
        /// <summary>
        /// 只方法只应由Command.BraceToRow()的另一个无参数静态方法调用。
        /// 必须保证startIndex和endIndex的正确性。否则会出现未处理异常——且不会提示。
        /// </summary>
        /// <param name="startBrace"></param>
        /// <param name="startIndex"></param>
        /// <param name="endBrace"></param>
        /// <param name="endIndex"></param>
        private static void BraceToRow(Expressions.Brace startBrace, int startIndex, Expressions.Brace endBrace, int endIndex)
        {
            if (startBrace == null || endBrace == null) return;
            if (startBrace.Editor != endBrace.Editor) return;
            if (startBrace.ParentPanel == null || endBrace.ParentPanel == null) return;
            if (startBrace.ParentPanel != endBrace.ParentPanel) return;

            if (startIndex < 0 || endIndex < 0 || startIndex >= endIndex) return;

            Editor editor = startBrace.Editor;
            Expressions.SubPanel parentPanel = startBrace.ParentPanel;

            // 将这两个括弧间的所有公式嵌入一个新“行”中。
            List<Expressions.Expression> exList = new List<Expressions.Expression>();
            for (int i = startIndex + 1; i < endIndex; i++)//两个括弧本身其实不需要放到行中。
            {
                Expressions.Expression ex = startBrace.ParentPanel.BasePanel.Children[i] as Expressions.Expression;
                if (ex != null)
                {
                    exList.Add(ex);
                }
            }

            ModifingItem mi = new ModifingItem() { OldSelectedExID = startBrace.ExID };

            Action actDelEndBrace = new Action(endBrace.ExID,
                endIndex, endBrace.GetType().Name, "DeleteExpression", endBrace.XmlData.OuterXml,
                null, ActionType.Delete, parentPanel.ExID);

            parentPanel.XmlData.RemoveChild(endBrace.XmlData);
            parentPanel.BasePanel.Children.Remove(endBrace);
            mi.Add(actDelEndBrace);

            for (int i = exList.Count - 1; i >= 0; i--)
            {
                Expressions.Expression ex = exList[i];
                Action actDelEx = new Action(ex.ExID,
                    parentPanel.BasePanel.Children.IndexOf(ex),
                    ex.GetType().Name, "DeleteExpression", ex.XmlData.OuterXml, null,
                    ActionType.Delete, parentPanel.ExID);

                parentPanel.XmlData.RemoveChild(ex.XmlData);
                parentPanel.BasePanel.Children.Remove(ex);
                mi.Add(actDelEx);
后面还有 173 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。