コード例 #1
0
ファイル: MainForm.cs プロジェクト: lugDroid/block_updater
        // Delete selected blocks
        private void Btn_DeleteSelection_Click(object sender, EventArgs e)
        {
            // Determine if are any blocks checked
            if (blocksCheckList.CheckedItems.Count != 0)
            {
                statusBox.AppendText(blocksCheckList.CheckedItems.Count + " blocks have been selected for deletion");
                statusBox.AppendText(Environment.NewLine);

                foreach (var device in MyProject.Devices)
                {
                    statusBox.AppendText("Deleting blocks from " + device.Name);
                    statusBox.AppendText(Environment.NewLine);

                    // get plc software
                    // device represents the rack
                    // first element of DeviceItems (modules in the rack) is the plc
                    PlcSoftware software = BlockManagement.GetSoftwareFrom(device.DeviceItems[1]);

                    if (software != null)
                    {
                        // now remove selected blocks
                        foreach (string blockName in blocksCheckList.CheckedItems)
                        {
                            // clean blockName string
                            string name = blockName.Substring(0, blockName.IndexOf('-') - 1);

                            statusBox.AppendText("Searching for " + name);
                            statusBox.AppendText(Environment.NewLine);

                            // first on root folder
                            foreach (var block in software.BlockGroup.Blocks)
                            {
                                if (name.Equals(block.Name))
                                {
                                    statusBox.AppendText("Block " + name + " to be deleted found in root folder");
                                    statusBox.AppendText(Environment.NewLine);
                                    block.Delete();
                                }
                            }

                            // check also subfolders
                            foreach (var group in software.BlockGroup.Groups)
                            {
                                BlockManagement.DeleteBlock(name, group, statusBox);
                            }
                        }
                    }
                    else
                    {
                        statusBox.AppendText("No software found for " + device.Name);
                        statusBox.AppendText(Environment.NewLine);
                    }
                }
            }
            else
            {
                statusBox.AppendText("No blocks have been selected for deletion");
                statusBox.AppendText(Environment.NewLine);
            }
        }
コード例 #2
0
ファイル: MainForm.cs プロジェクト: lugDroid/block_updater
        // Copy selected blocks from project library
        private void Btn_CopySelection_Click(object sender, EventArgs e)
        {
            // Determine if there are any devices checked.
            if (devicesCheckList.CheckedItems.Count != 0)
            {
                statusBox.AppendText("Systems selected: " + devicesCheckList.CheckedItems.Count);
                statusBox.AppendText(Environment.NewLine);

                // If so loop through all devices checking if they have been selected
                foreach (var device in MyProject.Devices)
                {
                    if (devicesCheckList.CheckedItems.Contains(device.Name))
                    {
                        statusBox.AppendText("Applying changes to system " + device.Name);
                        statusBox.AppendText(Environment.NewLine);

                        foreach (var deviceItem in device.DeviceItems)
                        {
                            PlcSoftware software = BlockManagement.GetSoftwareFrom(deviceItem);
                            if (software != null)
                            {
                                MasterCopyFolder masterFolder = MyProject.ProjectLibrary.MasterCopyFolder;

                                // get blocks to be copied info
                                foreach (string item in projectLibraryCheckList.CheckedItems)
                                {
                                    string destFolder  = item.Substring(0, item.IndexOf("/"));
                                    string blockToCopy = item.Substring(item.IndexOf("/") + 1);
                                    statusBox.AppendText("Copying " + blockToCopy + " to " + destFolder);
                                    statusBox.AppendText(Environment.NewLine);

                                    // check if it's a tag table or software block
                                    if (destFolder.Equals("PLC tags"))
                                    {
                                        BlockManagement.CopyTagTableToFolder(blockToCopy, masterFolder, software.TagTableGroup, destFolder, statusBox);
                                    }
                                    else
                                    {
                                        // TO DO - Overload method to take as argument BlockGroup and BlockUserGroup
                                        // Type of BlockGroup is PlcBlockSystemGroup is not compatible with type of
                                        // Group that is PlcBlockUserGroup so the same functions can't be applied
                                        // in both cases, that's the reason for the exception when copying to the root folder
                                        if (destFolder.Equals("PLC"))
                                        {
                                            // delete block if already exists
                                            foreach (var block in software.BlockGroup.Blocks)
                                            {
                                                if (blockToCopy.Equals(block.Name))
                                                {
                                                    block.Delete();
                                                }
                                            }
                                            // now copy block
                                            software.BlockGroup.Blocks.CreateFrom(BlockManagement.GetMasterCopy(masterFolder, blockToCopy, statusBox));
                                        }
                                        else
                                        {
                                            foreach (var group in software.BlockGroup.Groups)
                                            {
                                                // Before copying delete block if already exists
                                                BlockManagement.DeleteBlock(blockToCopy, group, statusBox);
                                                // now copy block
                                                BlockManagement.CopyBlockToFolder(blockToCopy, masterFolder, group, destFolder, statusBox);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                statusBox.AppendText("No systems have been selected");
                statusBox.AppendText(Environment.NewLine);
            }
        }