Example #1
0
        private void CmdOpen_Click(object sender, EventArgs e)
        {
            if (mDirty)
            {
                var resSave = MessageBox.Show("Do you want to save your changes?", "Confirm", MessageBoxButtons.YesNo,
                                              MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                if (resSave == DialogResult.Yes)
                {
                    if (!DoSave())
                    {
                        // user cancelled save
                        return;
                    }
                }
            }

            // clear current filepath from open dialog so user does not get confused
            OpenFileDlg.FileName = string.Empty;

            var resOpen = OpenFileDlg.ShowDialog();

            if (resOpen != DialogResult.OK)
            {
                return;
            }

            try
            {
                var rtCfg = RuntimeConfig.LoadFromFile(OpenFileDlg.FileName);

                BrowseIcon.FileName = rtCfg.PanelIcon;
                UpdatePanelIcon();

                PanelText.Text  = rtCfg.PanelText;
                RibbonText.Text = rtCfg.RibbonText;
                TabText.Text    = rtCfg.TabText;

                mConfigs.Clear();
                mConfigs.AddRange(rtCfg.CommandConfigs);

                // only update filepath if we have successfully loaded file
                mFilePath = OpenFileDlg.FileName;

                mDirty = false;
                UpdateUserInterface();
            }
            catch
            {
                // ignore any errors, probably from incorrect xml file
            }
        }
        public void Initialize()
        {
            // load Commands.xml from disk
            var execAssy       = Assembly.GetExecutingAssembly();
            var execAssyDir    = Path.GetDirectoryName(execAssy.Location);
            var cfgXmlFilePath = Path.Combine(execAssyDir, RuntimeConfigFileName);
            var cfg            = RuntimeConfig.LoadFromFile(cfgXmlFilePath);
            var capsules       = new List <CommandCapsule>
            {
                new CommandCapsule(RibbonTabId, cfg.RibbonText),
                new CommandCapsule(ManagerGroupId, cfg.TabText)
            };

            // create TemplateCapsule/s and add to list
            foreach (var thisCmd in cfg.CommandConfigs)
            {
                // load icon which should be next to dll
                var imgFilePath = Path.Combine(execAssyDir, thisCmd.Image);
                var img         = System.Drawing.Image.FromFile(imgFilePath);
                var newCmd      = new TemplateCapsule(thisCmd.Name, thisCmd.Text, img, thisCmd.Hint, mRoot, mCallback, thisCmd.SpecFileName);

                capsules.Add(newCmd);
            }

            foreach (var commandCapsule in capsules)
            {
                commandCapsule.Initialize();
            }

            // load panel icon which should be next to dll
            var icoFilePath = Path.Combine(execAssyDir, cfg.PanelIcon);
            var ico         = System.Drawing.Image.FromFile(icoFilePath);

            // create LogWindow and add it to Structure panel
            var cmd = Command.Create("RobotWare.Runtime.SpaceClaim");

            cmd.Image     = ico;
            cmd.Text      = cfg.PanelText;
            cmd.IsVisible = true;

            var rtTab = PanelTab.Create(cmd, mCallback, Panel.Structure);
        }
Example #3
0
        public override async Task <bool> InstallAsync(CancellationToken cancellationToken)
        {
            Log.Output($"Installing {DisplayName}");
            var dest = GetToolRoot();

            var url = _assetInfo.DownloadUrl;

            if (!await DownloadAndExtractAsync(url, dest, ZipExtractor.Extract, cancellationToken))
            {
                return(false);
            }

            var manifestFile = Path.Combine(dest, "dnvm.json");

            if (!File.Exists(manifestFile))
            {
                Log.Error("This tool is missing the 'dnvm.json' manifest file");
                Uninstall();
                return(false);
            }

            try
            {
                var manifest          = ToolManifest.LoadFromFile(manifestFile);
                var secondaryInstalls = new List <Task>();
                foreach (var command in manifest.Commands)
                {
                    if (!LinkExecutable(command.Key, command.Value))
                    {
                        Uninstall();
                        return(false);
                    }

                    if (command.Value.Portable == true)
                    {
                        var runtimeConfigPath = Path.Combine(dest, command.Value.RuntimeConfig);
                        var runtimeConfig     = RuntimeConfig.LoadFromFile(runtimeConfigPath);
                        var name = runtimeConfig?.RuntimeOptions?.Framework?.Name;

                        if (!"Microsoft.NETCore.App".Equals(name, StringComparison.OrdinalIgnoreCase))
                        {
                            Log.Error($"This tool requires an unsupported shared framework: {name}");
                            Uninstall();
                            return(false);
                        }

                        var version  = runtimeConfig.RuntimeOptions.Framework.Version;
                        var sharedFx = new RuntimeAsset(Log, _env, version, Architecture.X64);
                        secondaryInstalls.Add(sharedFx.InstallAsync(cancellationToken));
                    }
                }

                await Task.WhenAll(secondaryInstalls);
            }
            catch (FormatException ex)
            {
                Log.Verbose(ex.Message);
                Log.Error("This tool has an unrecognized 'dnvm.json' manifest format");
                Uninstall();
                return(false);
            }

            Log.Output($"Installed {DisplayName}");

            return(true);
        }