private void cmBPoemPart_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (IsUpdating())
            {
                return;
            }

            PoemPart poemPart = cmBPoemPart.SelectedItem as PoemPart;

            if (poemPart != null)
            {
                saController.SetCurrentLine(poemPart);
            }
        }
        public PoemPart GetNextPoemPart(PoemPart poemPart, bool forward)
        {
            Poem parentPoem = poemPart.ParentPoem;

            int indexPart = parentPoem.Parts.IndexOf(poemPart);

            if (indexPart != -1)
            {
                int nextIndex = indexPart + (forward ? 1 : -1);

                if (0 <= nextIndex && nextIndex < parentPoem.Parts.Count)
                {
                    return(parentPoem.Parts[nextIndex]);
                }
            }

            return(null);
        }
示例#3
0
        public void SelectInTree(PoemLine line)
        {
            PoemPart poemPart = line.ParentPoemPart;
            Poem     poem     = line.ParentPoem;

            SABlockPart blockPart = poem.ParentBlockPart;
            SABlock     block     = poem.ParentBlock;

            SA sa = block.ParentSA;

            if (tVSA.Nodes.Count == 0)
            {
                return;
            }

            TreeNode nodeSA = tVSA.Nodes[0];

            if (nodeSA.Tag != sa)
            {
                return;
            }

            TreeNode nodeBlock = null;

            foreach (TreeNode item in nodeSA.Nodes)
            {
                if (item.Tag == block)
                {
                    nodeBlock = item;
                    break;
                }
            }

            if (nodeBlock == null)
            {
                return;
            }

            if (blockPart != null)
            {
                TreeNode nodeBlockPart = null;

                foreach (TreeNode item in nodeBlock.Nodes)
                {
                    if (item.Tag == blockPart)
                    {
                        nodeBlockPart = item;
                        break;
                    }
                }

                if (nodeBlockPart == null)
                {
                    return;
                }

                nodeBlock = nodeBlockPart;
            }

            TreeNode nodePoem = null;

            foreach (TreeNode item in nodeBlock.Nodes)
            {
                if (item.Tag == poem)
                {
                    nodePoem = item;
                    break;
                }
            }

            if (nodePoem == null)
            {
                return;
            }

            if (poemPart != null)
            {
                TreeNode nodePoemPart = null;

                foreach (TreeNode item in nodeBlock.Nodes)
                {
                    if (item.Tag == poemPart)
                    {
                        nodePoemPart = item;
                        break;
                    }
                }

                if (nodePoemPart == null)
                {
                    return;
                }

                nodePoem = nodePoemPart;
            }

            TreeNode nodeLine = null;

            foreach (TreeNode item in nodePoem.Nodes)
            {
                if (item.Tag == line)
                {
                    nodeLine = item;
                    break;
                }
            }

            if (nodeLine != null)
            {
                tVSA.BeginUpdate();

                tVSA.CollapseAll();
                tVSA.SelectedNode = nodeLine;
                nodeLine.EnsureVisible();

                tVSA.EndUpdate();
            }
        }
        //public SA SystemAccumulation { get; set; }

        public PoemLine GetNextLine(PoemLine currentLine, bool forward)
        {
            {
                PoemLinesCollection coll = null;

                if (currentLine.ParentPoemPart != null)
                {
                    coll = currentLine.ParentPoemPart.Lines;
                }
                else
                {
                    coll = currentLine.ParentPoem.Lines;
                }

                int indexLine = coll.IndexOf(currentLine);
                if (indexLine != -1)
                {
                    int nextIndex = indexLine + (forward ? 1 : -1);

                    if (0 <= nextIndex && nextIndex < coll.Count)
                    {
                        return(coll[nextIndex]);
                    }
                }
            }

            if (currentLine.ParentPoemPart != null)
            {
                PoemPart nextPoemPart = GetNextPoemPart(currentLine.ParentPoemPart, forward);

                if (nextPoemPart != null)
                {
                    if (forward)
                    {
                        return(nextPoemPart.GetFirstLine());
                    }
                    else
                    {
                        return(nextPoemPart.GetLastLine());
                    }
                }
            }

            {
                Poem nextPoem = GetNextPoem(currentLine.ParentPoem, forward);
                if (nextPoem != null)
                {
                    if (forward)
                    {
                        return(nextPoem.GetFirstLine());
                    }
                    else
                    {
                        return(nextPoem.GetLastLine());
                    }
                }
            }

            if (currentLine.ParentPoem.ParentBlockPart != null)
            {
                SABlockPart nextPart = GetNextBlockPart(currentLine.ParentPoem.ParentBlockPart, forward);
                if (nextPart != null)
                {
                    if (forward)
                    {
                        return(nextPart.GetFirstLine());
                    }
                    else
                    {
                        return(nextPart.GetLastLine());
                    }
                }
            }

            {
                SABlock nextBlock = GetNextBlock(currentLine.ParentPoem.ParentBlock, forward);
                if (nextBlock != null)
                {
                    if (forward)
                    {
                        return(nextBlock.GetFirstLine());
                    }
                    else
                    {
                        return(nextBlock.GetLastLine());
                    }
                }
            }

            if (forward)
            {
                return(currentLine.ParentPoem.ParentBlock.ParentSA.GetFirstLine());
            }
            else
            {
                return(currentLine.ParentPoem.ParentBlock.ParentSA.GetLastLine());
            }
        }
        private void OperateLines()
        {
            if (saController.CurrentLine != null)
            {
                PoemLine curLine = saController.CurrentLine;

                PoemPart curPoemPart = curLine.ParentPoemPart;
                Poem     curPoem     = curLine.ParentPoem;

                SABlockPart curBlockPart = curPoem.ParentBlockPart;
                SABlock     curBlock     = curPoem.ParentBlock;

                if (cmBSABlock.Items.Contains(curBlock))
                {
                    if (cmBSABlock.SelectedItem != curBlock)
                    {
                        BeginUpdate();

                        cmBSABlock.SelectedItem = curBlock;

                        FillSABlockElements(curBlock);

                        EndUpdate();
                    }
                }

                if (curBlockPart != null)
                {
                    if (!cmBSABlockPart.Items.Contains(curBlockPart))
                    {
                        FillSABlockElements(curBlock);
                    }

                    if (cmBSABlockPart.SelectedItem != curBlockPart)
                    {
                        BeginUpdate();

                        cmBSABlockPart.SelectedItem = curBlockPart;

                        FillPoems(curBlockPart.Poems);

                        EndUpdate();
                    }
                }
                else
                {
                    cmBSABlockPart.Items.Clear();
                }

                {
                    if (!cmBPoem.Items.Contains(curPoem))
                    {
                        if (curBlockPart != null)
                        {
                            FillPoems(curBlockPart.Poems);
                        }
                        else
                        {
                            FillPoems(curBlock.Poems);
                        }
                    }

                    if (cmBPoem.SelectedItem != curPoem)
                    {
                        BeginUpdate();

                        cmBPoem.SelectedItem = curPoem;

                        EndUpdate();
                    }
                }

                if (curPoemPart != null)
                {
                    if (!cmBPoemPart.Items.Contains(curPoemPart))
                    {
                        FillPoemParts(curPoem.Parts);
                    }

                    if (cmBPoemPart.SelectedItem != curPoemPart)
                    {
                        BeginUpdate();

                        cmBPoemPart.SelectedItem = curPoemPart;

                        EndUpdate();
                    }
                }
                else
                {
                    cmBPoemPart.Items.Clear();
                }
            }
            else
            {
                cmBSABlock.SelectedIndex = -1;

                cmBSABlockPart.Items.Clear();
                cmBPoem.Items.Clear();
                cmBPoemPart.Items.Clear();
            }

            gBSABlockPart.Enabled = cmBSABlockPart.Items.Count > 0;
            gBPoem.Enabled        = cmBPoem.Items.Count > 0;
            gBPoemPart.Enabled    = cmBPoemPart.Items.Count > 0;

            {
                Collection <ControlPoemLine> controlsToDelete = new Collection <ControlPoemLine>();

                foreach (Control item in panelLines.Controls)
                {
                    ControlPoemLine controlPoemLine = item as ControlPoemLine;
                    if (controlPoemLine != null)
                    {
                        if (!saController.SelectedLines.Contains(controlPoemLine.PoemLine))
                        {
                            controlsToDelete.Add(controlPoemLine);
                        }
                    }
                }

                panelLines.SuspendLayout();

                foreach (ControlPoemLine item in controlsToDelete)
                {
                    panelLines.Controls.Remove(item);
                }

                foreach (PoemLine line in saController.SelectedLines)
                {
                    ControlPoemLine controlPoemLine = null;
                    foreach (Control item in panelLines.Controls)
                    {
                        ControlPoemLine searchControlPoemLine = item as ControlPoemLine;
                        if (searchControlPoemLine != null)
                        {
                            if (searchControlPoemLine.PoemLine == line)
                            {
                                controlPoemLine = searchControlPoemLine;
                                break;
                            }
                        }
                    }

                    if (controlPoemLine == null)
                    {
                        controlPoemLine      = new ControlPoemLine(line);
                        controlPoemLine.Dock = DockStyle.Bottom;

                        panelLines.Controls.Add(controlPoemLine);
                    }

                    int childIndex = panelLines.Controls.GetChildIndex(controlPoemLine);
                    if (childIndex != saController.SelectedLines.IndexOf(line))
                    {
                        panelLines.Controls.SetChildIndex(controlPoemLine, saController.SelectedLines.IndexOf(line));
                    }
                }

                panelLines.ResumeLayout(true);
            }

            panelLines.Select();
        }
 public PoemLinesCollection(PoemPart ownerPoemPart)
 {
     this.ownerPoemPart = ownerPoemPart;
 }