private void GroupSelectedItems()
        {
            var sbl   = BlockList.GetSelectedBlockList();
            int count = sbl.listBlocks.SelectedItems.Count;

            if (count == 0)
            {
                System.Media.SystemSounds.Beep.Play();
                return;
            }

            string prompt;

            if (count == 1)
            {
                prompt = "Group Selected Block?";
            }
            else if (count == sbl.listBlocks.Items.Count)
            {
                prompt = "Group All Blocks?";
            }
            else
            {
                prompt = string.Format("Group {0} Selected Blocks?", sbl.listBlocks.SelectedItems.Count);
            }

            if (MessageBox.Show(prompt, "Block Editor", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.OK)
            {
                inSelectionChanged = true;
                IBlockGroup   group     = BlockManager.NewBlockGroup();
                List <IBlock> blockList = new List <IBlock>();
                blockList.AddRange(sbl.Blocks);

                IBlock[] selectedBlocks = sbl.AdjacentSelectedBlocks;
                int      index          = blockList.IndexOf(selectedBlocks[0]);
                blockList.Insert(index, group);
                foreach (IBlock block in selectedBlocks)
                {
                    group.Add(block);
                    blockList.Remove(block);
                }
                foreach (IBlock block in blockList)
                {
                    block.NewBlockItem();
                }
                sbl.Clear();
                sbl.Add(blockList.ToArray());
                sbl.listBlocks.SelectedItem = group.BlockItem;
                listCode.UnselectAll();

                if (sbl.ParentGroup != null)
                {
                    sbl.ParentGroup.Blocks = sbl.Blocks;
                }

                Edited = true;
                btnDelete.IsEnabled = btnCut.IsEnabled = btnCopy.IsEnabled = btnGroup.IsEnabled = btnUngroup.IsEnabled = true;
                inSelectionChanged  = false;
            }
        }
Exemple #2
0
        public bool ReadFile(string path, out IBlock[] blocks)
        {
            blocks = null;
            if (!File.Exists(path))
            {
                return(false);
            }

            List <IBlock> listBlocks = new List <IBlock>();

            using (var sr = new StreamReader(path))
            {
                IBlockGroup         group      = null;
                Stack <IBlockGroup> groupStack = new Stack <IBlockGroup>();
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    line = line.Trim();
                    if (string.IsNullOrEmpty(line))
                    {
                        continue;
                    }

                    if (group != null && line == BlockGroup.EndMarker)
                    {
                        groupStack.Pop();
                        group = (groupStack.Count > 0) ? groupStack.Peek() : null;
                        continue;
                    }

                    IBlock block = NewBlock(line);
                    if (block != null)
                    {
                        if (group != null)
                        {
                            group.Add(block);
                        }
                        else
                        {
                            listBlocks.Add(block);
                        }

                        if (block is IBlockGroup)
                        {
                            group = (IBlockGroup)block;
                            groupStack.Push(group);
                        }
                    }
                }
            }

            if (listBlocks.Count == 0)
            {
                return(false);
            }
            blocks = listBlocks.ToArray();
            return(true);
        }
Exemple #3
0
        public IBlock[] NewBlocks(string buffer)
        {
            List <IBlock>       listBlocks = new List <IBlock>();
            IBlockGroup         group      = null;
            Stack <IBlockGroup> groupStack = new Stack <IBlockGroup>();

            string[] lines = buffer.Split('\n');
            for (int i = 0; i < lines.Length; i++)
            {
                string line = lines[i].Trim();
                if (string.IsNullOrEmpty(line))
                {
                    continue;
                }

                if (group != null && line == BlockGroup.EndMarker)
                {
                    groupStack.Pop();
                    group = (groupStack.Count > 0) ? groupStack.Peek() : null;
                    continue;
                }

                IBlock block = NewBlock(line);
                if (block != null)
                {
                    if (group != null)
                    {
                        group.Add(block);
                    }
                    else
                    {
                        listBlocks.Add(block);
                    }

                    if (block is IBlockGroup)
                    {
                        group = (IBlockGroup)block;
                        groupStack.Push(group);
                    }
                }
            }

            return(listBlocks.ToArray());
        }