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); }
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); }