public VisualElementEnvironmentItem(VisualElementGeneric parent, TreeViewLineCache cache, AdminShell.PackageEnv package, AdminShell.AdministrationShellEnv env, ItemType itemType) : base() { this.Parent = parent; this.Cache = cache; this.thePackage = package; this.theEnv = env; this.theItemType = itemType; this.Background = (SolidColorBrush)(new BrushConverter().ConvertFrom("#B0B0B0")); this.Border = (SolidColorBrush)(new BrushConverter().ConvertFrom("#404040")); this.Caption = $"\"{ItemTypeNames[(int)itemType]}\""; this.Info = ""; this.IsTopLevel = true; this.TagString = "Env"; if (theItemType == ItemType.EmptySet) { this.TagString = "\u2205"; this.Caption = "No information available"; } if (theItemType == ItemType.Package && thePackage != null) { this.TagString = "\u25a2"; this.Info += "" + thePackage.Filename; } this.TagBg = this.Border; this.TagFg = Brushes.White; RestoreFromCache(); }
public void PrepareDispEditEntity(AdminShell.PackageEnv package, VisualElementGeneric entity, bool editMode, bool hintMode) { // make UI visible settings .. // panels if (!editMode) { ContentPanelNoEdit.Visibility = Visibility.Visible; ContentPanelEdit.Visibility = Visibility.Hidden; } else { ContentPanelNoEdit.Visibility = Visibility.Hidden; ContentPanelEdit.Visibility = Visibility.Visible; } // further ShowContent.IsEnabled = false; DragSource.Foreground = Brushes.DarkGray; DownloadContent.IsEnabled = false; this.showContentPackageUri = null; // update element view DispEditEntityPanel.DisplayOrEditVisualAasxElement(package, entity, editMode, hintMode, (thePackageAux == null) ? null : new AdminShell.PackageEnv[] { thePackageAux }, flyoutProvider: this); // show it Dispatcher.BeginInvoke((Action)(() => ElementTabControl.SelectedIndex = 0)); // some entities require special handling if (entity is VisualElementSubmodelElement && (entity as VisualElementSubmodelElement).theWrapper.submodelElement is AdminShell.File) { var elem = (entity as VisualElementSubmodelElement).theWrapper.submodelElement; ShowContent.IsEnabled = true; this.showContentPackageUri = (elem as AdminShell.File).value; DragSource.Foreground = Brushes.Black; } }
public void UiLoadPackageAux(string fn) { Log.Info("Loading auxiliary AASX from: {0} ..", fn); // loading try { if (thePackageAux != null) { thePackageAux.Close(); } thePackageAux = new AdminShell.PackageEnv(fn); } catch (Exception ex) { Log.Error(ex, $"When loading auxiliary {fn}, an error occurred"); return; } // displaying try { RedrawAllAasxElements(); } catch (Exception ex) { Log.Error(ex, $"When displaying element tree of {fn}, an error occurred"); return; } Log.Info("Auxiliary AASX {0} loaded.", fn); }
public void RebuildAasxElements( AdminShell.AdministrationShellEnv env = null, AdminShell.PackageEnv package = null, AdminShell.PackageEnv[] auxPackages = null, bool editMode = false, string filterElementName = null) { // clear tree displayedTreeViewLines = new List <VisualElementGeneric>(); // valid? if (env != null) { // generate lines, add var x = Generators.GenerateVisualElementsFromShellEnv(treeViewLineCache, env, package, editMode, expandMode: 1); foreach (var xx in x) { displayedTreeViewLines.Add(xx); } // more? if (auxPackages != null) { foreach (var aux in auxPackages) { var x2 = Generators.GenerateVisualElementsFromShellEnv(treeViewLineCache, aux.AasEnv, aux, editMode, expandMode: 1); foreach (var xx in x2) { displayedTreeViewLines.Add(xx); } } } // may be filter if (filterElementName != null) { foreach (var dtl in displayedTreeViewLines) { // it is not likely, that we have to delete on this level, therefore don't care FilterLeafsOfVisualElements(dtl, filterElementName); } } // any of these lines? if (displayedTreeViewLines.Count < 1) { // emergency displayedTreeViewLines.Add(new VisualElementEnvironmentItem(null /* no parent */, treeViewLineCache, package, env, VisualElementEnvironmentItem.ItemType.EmptySet)); } } // redraw tv1.ItemsSource = displayedTreeViewLines; tv1.UpdateLayout(); // select 1st if (displayedTreeViewLines.Count > 0) { displayedTreeViewLines[0].IsSelected = true; } }
public SelectAasEntityDialogueByTree( AdminShell.AdministrationShellEnv env, string filter = null, AdminShell.PackageEnv package = null, AdminShell.PackageEnv[] auxPackages = null) { InitializeComponent(); thePackage = package; theAuxPackages = auxPackages; theEnv = env; theFilter = filter; }
public VisualElementSupplementalFile(VisualElementGeneric parent, TreeViewLineCache cache, AdminShell.PackageEnv package, AdminShell.PackageSupplementaryFile sf) : base() { this.Parent = parent; this.Cache = cache; this.thePackage = package; this.theFile = sf; this.Background = (SolidColorBrush)(new BrushConverter().ConvertFrom("#D0D0D0")); this.Border = (SolidColorBrush)(new BrushConverter().ConvertFrom("#606060")); this.TagString = "\u25a4"; this.TagBg = (SolidColorBrush)(new BrushConverter().ConvertFrom("#707070"));; this.TagFg = Brushes.White; RefreshFromMainData(); RestoreFromCache(); }
public void AddKeyListKeys( StackPanel view, string key, List <AdminShell.Key> keys, ModifyRepo repo = null, AdminShell.PackageEnv package = null, string addExistingEntities = null) { // sometimes needless to show if (repo == null && (keys == null || keys.Count < 1)) { return; } int rows = 1; // default! if (keys != null && keys.Count > 1) { rows = keys.Count; } int rowOfs = 0; if (repo != null) { rowOfs = 1; } // Grid var g = new Grid(); g.Margin = new Thickness(0, 0, 0, 0); // 0 key var gc = new ColumnDefinition(); gc.Width = new GridLength(100); g.ColumnDefinitions.Add(gc); // 1 type gc = new ColumnDefinition(); gc.Width = new GridLength(1.0, GridUnitType.Auto); g.ColumnDefinitions.Add(gc); // 2 local gc = new ColumnDefinition(); gc.Width = new GridLength(1.0, GridUnitType.Auto); g.ColumnDefinitions.Add(gc); // 3 id type gc = new ColumnDefinition(); gc.Width = new GridLength(1.0, GridUnitType.Auto); g.ColumnDefinitions.Add(gc); // 4 value gc = new ColumnDefinition(); gc.Width = new GridLength(1.0, GridUnitType.Star); g.ColumnDefinitions.Add(gc); // 5 buttons behind it gc = new ColumnDefinition(); gc.Width = new GridLength(1.0, GridUnitType.Auto); g.ColumnDefinitions.Add(gc); // rows for (int r = 0; r < rows + rowOfs; r++) { var gr = new RowDefinition(); gr.Height = new GridLength(1.0, GridUnitType.Auto); g.RowDefinitions.Add(gr); } // populate key AddSmallLabelTo(g, 0, 0, margin: new Thickness(5, 0, 0, 0), content: "" + key + ":"); // populate [+] and [Select] buttons if (repo != null) { var g2 = AddSmallGrid(1, 3, new string[] { "*", "#", "#" }); Grid.SetRow(g2, 0); Grid.SetColumn(g2, 1); Grid.SetColumnSpan(g2, 5); g.Children.Add(g2); if (addExistingEntities != null && package != null) { repo.RegisterControl(AddSmallButtonTo(g2, 0, 1, margin: new Thickness(2, 2, 2, 2), padding: new Thickness(5, 0, 5, 0), content: "Add existing"), (o) => { var k2 = SmartSelectAasEntityKeys(package.AasEnv, addExistingEntities); if (k2 != null) { keys.Clear(); keys.AddRange(k2); } return(new ModifyRepo.LambdaActionRedrawEntity()); }); } repo.RegisterControl(AddSmallButtonTo(g2, 0, 2, margin: new Thickness(2, 2, 2, 2), padding: new Thickness(5, 0, 5, 0), content: "Add blank"), (o) => { var k = new AdminShell.Key(); keys.Add(k); return(new ModifyRepo.LambdaActionRedrawEntity()); }); } // contents? if (keys != null) { for (int i = 0; i < keys.Count; i++) { if (repo == null) { // lang AddSmallLabelTo(g, 0 + i + rowOfs, 1, padding: new Thickness(2, 0, 0, 0), content: "(" + keys[i].type + ")"); // local AddSmallLabelTo(g, 0 + i + rowOfs, 2, padding: new Thickness(2, 0, 0, 0), content: "" + ((keys[i].local) ? "(Local)" : "(no-Local)")); // id type AddSmallLabelTo(g, 0 + i + rowOfs, 3, padding: new Thickness(2, 0, 0, 0), content: "[" + keys[i].idType + "]"); // value AddSmallLabelTo(g, 0 + i + rowOfs, 4, padding: new Thickness(2, 0, 0, 0), content: "" + keys[i].value); } else { // save in current context var currentI = 0 + i; // type var cbType = repo.RegisterControl( AddSmallComboBoxTo(g, 0 + i + rowOfs, 1, margin: new Thickness(2, 2, 2, 2), text: "" + keys[currentI].type, minWidth: 100, items: AdminShell.Key.KeyElements, isEditable: false), (o) => { keys[currentI].type = o as string; return(new ModifyRepo.LambdaActionNone()); }) as ComboBox; SmallComboBoxSelectNearestItem(cbType, cbType.Text); // local repo.RegisterControl( AddSmallCheckBoxTo(g, 0 + i + rowOfs, 2, margin: new Thickness(2, 2, 2, 2), content: "local", isChecked: keys[currentI].local), (o) => { keys[currentI].local = (bool)o; return(new ModifyRepo.LambdaActionNone()); }); // id type repo.RegisterControl( AddSmallComboBoxTo(g, 0 + i + rowOfs, 3, margin: new Thickness(2, 2, 2, 2), text: "" + keys[currentI].idType, minWidth: 100, items: AdminShell.Key.IdentifierTypeNames, isEditable: false), (o) => { keys[currentI].idType = o as string; return(new ModifyRepo.LambdaActionNone()); }); // value repo.RegisterControl( AddSmallTextBoxTo(g, 0 + i + rowOfs, 4, margin: new Thickness(2, 2, 2, 2), text: "" + keys[currentI].value), (o) => { keys[currentI].value = o as string; return(new ModifyRepo.LambdaActionNone()); }); // button [-] repo.RegisterControl(AddSmallButtonTo(g, 0 + i + rowOfs, 5, margin: new Thickness(2, 2, 2, 2), padding: new Thickness(5, 0, 5, 0), content: "-"), (o) => { keys.RemoveAt(currentI); return(new ModifyRepo.LambdaActionRedrawEntity()); }); } } } // in total view.Children.Add(g); }
public VisualElementGeneric SmartSelectAasEntityVisualElement(AdminShell.AdministrationShellEnv env, string filter = null, AdminShell.PackageEnv package = null, AdminShell.PackageEnv[] auxPackages = null) { if (this.flyoutProvider == null) { var dlg = new SelectAasEntityDialogueByTree(env, filter, package, auxPackages); if (dlg.ShowDialog() == true) { return(dlg.ResultVisualElement); } } else { var uc = new SelectAasEntityFlyout(env, filter, package, auxPackages); this.flyoutProvider.StartFlyoverModal(uc); if (uc.ResultVisualElement != null) { return(uc.ResultVisualElement); } } return(null); }
public static List <VisualElementGeneric> GenerateVisualElementsFromShellEnv(TreeViewLineCache cache, AdminShell.AdministrationShellEnv env, AdminShell.PackageEnv package = null, bool editMode = false, int expandMode = 0) { // clear tree var res = new List <VisualElementGeneric>(); // valid? if (env == null) { return(res); } // need some attach points VisualElementEnvironmentItem tiPackage = null, tiEnv = null, tiShells = null, tiAssets = null, tiCDs = null; // many operytions -> make it bulletproof try { if (editMode) { // package tiPackage = new VisualElementEnvironmentItem(null /* Parent */, cache, package, env, VisualElementEnvironmentItem.ItemType.Package); tiPackage.SetIsExpandedIfNotTouched(true); res.Add(tiPackage); // env tiEnv = new VisualElementEnvironmentItem(tiPackage, cache, package, env, VisualElementEnvironmentItem.ItemType.Env); tiEnv.SetIsExpandedIfNotTouched(expandMode > 0); tiPackage.Members.Add(tiEnv); // shells tiShells = new VisualElementEnvironmentItem(tiEnv, cache, package, env, VisualElementEnvironmentItem.ItemType.Shells); tiShells.SetIsExpandedIfNotTouched(expandMode > 0); tiEnv.Members.Add(tiShells); // assets tiAssets = new VisualElementEnvironmentItem(tiEnv, cache, package, env, VisualElementEnvironmentItem.ItemType.Assets); tiAssets.SetIsExpandedIfNotTouched(expandMode > 0); tiEnv.Members.Add(tiAssets); // concept descriptions tiCDs = new VisualElementEnvironmentItem(tiEnv, cache, package, env, VisualElementEnvironmentItem.ItemType.ConceptDescriptions); tiCDs.SetIsExpandedIfNotTouched(expandMode > 0); tiEnv.Members.Add(tiCDs); } // over all Admin shells foreach (var aas in env.AdministrationShells) { // item var tiAas = new VisualElementAdminShell(null, cache, env, aas); tiAas.SetIsExpandedIfNotTouched(expandMode > 0); // add item if (editMode) { tiAas.Parent = tiShells; tiShells.Members.Add(tiAas); } else { res.Add(tiAas); } // have submodels? if (aas.submodelRefs != null) { foreach (var smr in aas.submodelRefs) { var sm = env.FindSubmodel(smr); if (sm == null) { Log.Error("Cannot find some submodel!"); continue; } // item var tiSm = new VisualElementSubmodelRef(tiAas, cache, env, smr, sm); tiSm.SetIsExpandedIfNotTouched(expandMode > 1); // recursively into the submodel elements if (sm.submodelElements != null) { foreach (var sme in sm.submodelElements) { GenerateVisualElementsFromShellEnvAddElements(cache, env, tiSm, sm, sme); } } // add tiAas.Members.Add(tiSm); } } // have views? if (aas.views != null && aas.views.views != null) { foreach (var vw in aas.views.views) { // item var tiVw = new VisualElementView(tiAas, cache, env, vw); tiVw.SetIsExpandedIfNotTouched(expandMode > 1); // recursion -> submodel elements if (vw.containedElements != null && vw.containedElements.reference != null) { foreach (var ce in vw.containedElements.reference) { var tiRf = new VisualElementReference(tiVw, cache, env, ce); tiVw.Members.Add(tiRf); } } // add tiAas.Members.Add(tiVw); } } } // if edit mode, then display further .. if (editMode) { // over all assets foreach (var asset in env.Assets) { // item var tiAsset = new VisualElementAsset(tiAssets, cache, env, asset); tiAssets.Members.Add(tiAsset); } // over all concept descriptions foreach (var cd in env.ConceptDescriptions) { // item var tiCD = new VisualElementConceptDescription(tiCDs, cache, env, cd); tiCDs.Members.Add(tiCD); } } // package as well? if (editMode && package != null && tiPackage != null) { // file folder var tiFiles = new VisualElementEnvironmentItem(tiPackage, cache, package, env, VisualElementEnvironmentItem.ItemType.SupplFiles); tiFiles.SetIsExpandedIfNotTouched(expandMode > 0); tiPackage.Members.Add(tiFiles); // single files var files = package.GetListOfSupplementaryFiles(); foreach (var fi in files) { tiFiles.Members.Add(new VisualElementSupplementalFile(tiFiles, cache, package, fi)); } } } catch (Exception ex) { Log.Error(ex, "Generating tree of visual elements"); } // end return(res); }
public static void Test4() { // MAKE or LOAD prefs InputFilePrefs prefs = new InputFilePrefs(); var preffn = "prefs.json"; try { if (File.Exists(preffn)) { Log.WriteLine(2, "Opening {0} for reading preferences ..", preffn); var init = File.ReadAllText(preffn); Log.WriteLine(2, "Parsing preferences .."); prefs = JsonConvert.DeserializeObject <InputFilePrefs>(init); } else { Log.WriteLine(2, "Using built-in preferences .."); var init = @"{ 'filerecs' : [ { 'fn' : 'data\\thumb-usb.jpeg', 'submodel' : 'thumb', 'targetdir' : '/', 'args' : [ ] }, { 'fn' : 'data\\USB_Hexagon.stp', 'submodel' : 'cad', 'targetdir' : '/aasx/cad/', 'args' : [ '0173-1#02-ZBQ121#003' ] }, { 'fn' : 'data\\USB_Hexagon.igs', 'submodel' : 'cad', 'targetdir' : '/aasx/cad/', 'args' : [ '0173-1#02-ZBQ128#008' ] }, { 'fn' : 'data\\FES_100500.edz', 'submodel' : 'cad', 'targetdir' : '/aasx/cad/', 'args' : [ '0173-1#02-ZBQ133#002' ] }, { 'fn' : 'data\\USB_Hexagon_offen.jpeg', 'submodel' : 'docu', 'targetdir' : '/aasx/documentation/', 'args' : [ 'Drawings', '0173-1#02-ZWY722#001', 'Product rendering open', 'V1.2', '0173-1#02-ZHK61a#002' ] }, { 'fn' : 'data\\USB_Hexagon_geschlossen.jpeg', 'submodel' : 'docu', 'targetdir' : '/aasx/documentation/', 'args' : [ 'Presales', '0173-1#02-ZWX723#001', 'Product rendering closed', 'V1.2c', '0173-1#02-ZHK622#001' ] }, { 'fn' : 'data\\docu_cecc_presales_DE.PDF', 'submodel' : 'docu', 'targetdir' : '/aasx/documentation/', 'args' : [ 'Presales', '0173-1#02-ZWX723#001', 'Steuerungen CECC', 'V2.1.3', '0173-1#02-ZHK622#001' ] }, { 'fn' : 'data\\docu_cecc_presales_EN.PDF', 'submodel' : 'docu', 'targetdir' : '/aasx/documentation/', 'args' : [ 'Presales', '0173-1#02-ZWX723#001', 'Controls CECC', 'V2.1.4', '0173-1#02-ZHK622#001' ] }, { 'fn' : 'data\\USB_storage_medium_datasheet_EN.pdf', 'submodel' : 'docu', 'targetdir' : '/aasx/documentation/', 'args' : [ 'Technical specification', '0173-1#02-ZWX724#001', 'Datenblatt Steuerung CECC-LK', 'V1.0', '0173-1#02-ZHK622#001' ] }, { 'fn' : 'data\\docu_cecc_install_DE.PDF', 'submodel' : 'docu', 'targetdir' : '/aasx/documentation/', 'args' : [ 'Installation', '0173-1#02-ZWX725#001', 'Kurzbeschreibung Steuerung CECC-LK', 'V3.2a', '0173-1#02-ZHK622#001' ] }, { 'fn' : 'data\\docu_cecc_install_EN.PDF', 'submodel' : 'docu', 'targetdir' : '/aasx/documentation/', 'args' : [ 'Installation', '0173-1#02-ZWX725#001', 'Brief description control CECC-LK', 'V3.6b', '0173-1#02-ZHK622#001' ] }, { 'fn' : 'data\\docu_cecc_fullmanual_DE.PDF', 'submodel' : 'docu', 'targetdir' : '/aasx/documentation/', 'args' : [ 'Manual', '0173-1#02-ZWX727#001', 'Beschreibung Steuerung CECC-LK', '1403a', '0173-1#02-ZHK622#001' ] }, { 'fn' : 'data\\docu_cecc_fullmanual_EN.PDF', 'submodel' : 'docu', 'targetdir' : '/aasx/documentation/', 'args' : [ 'Manual', '0173-1#02-ZWX727#001', 'Description Steuerung CECC-LK', '1403a', '0173-1#02-ZHK622#001' ] }, ], 'webrecs' : [ { 'url' : 'https://www.festo.com/net/de_de/SupportPortal/Downloads/385954/407353/CECC_2013-05a_8031104e2.pdf', 'submodel' : 'docu', 'args' : [ 'Installation', '0173-1#02-ZWX725#001', 'Controlador CECC', '2013-05a', '0173-1#02-ZHK662#002' ] }, { 'url' : 'https://www.festo.com/net/SupportPortal/Files/407352/CECC_2013-05a_8031105x2.pdf', 'submodel' : 'docu', 'args' : [ 'Installation', '0173-1#02-ZWX725#001', 'Controllore CECC', '2013-05a', '0173-1#02-ZHK699#003' ] }, ] }"; Log.WriteLine(3, "Dump of built-in preferences: {0}", init); Log.WriteLine(2, "Parsing preferences .."); prefs = JsonConvert.DeserializeObject <InputFilePrefs>(init); } } catch (Exception ex) { Console.Error.Write("While parsing preferences: " + ex.Message); Environment.Exit(-1); } // REPOSITORY var repo = new AdminShellNS.UriIdentifierRepository(); try { if (!repo.Load("uri-repository.xml")) { repo.InitRepository("uri-repository.xml"); } } catch (Exception ex) { Console.Error.Write("While accessing URI repository: " + ex.Message); Environment.Exit(-1); } // AAS ENV var aasenv1 = new AdminShell.AdministrationShellEnv(); try { // ASSET var asset1 = new AdminShell.Asset(); aasenv1.Assets.Add(asset1); asset1.SetIdentification("URI", "http://pk.festo.com/3s7plfdrs35", "3s7plfdrs35"); asset1.AddDescription("EN", "Festo USB Stick"); asset1.AddDescription("DE", "Festo USB Speichereinheit"); // CAD Log.WriteLine(2, "Creating submodel CAD .."); var subCad = CreateSubmodelCad(prefs, repo, aasenv1); // DOCU Log.WriteLine(2, "Creating submodel DOCU .."); var subDocu = CreateSubmodelDocumentation(prefs, repo, aasenv1); // DATASHEET Log.WriteLine(2, "Creating submodel DATASHEET .."); var subDatasheet = CreateSubmodelDatasheet(prefs, repo, aasenv1); //var subDatasheet = CreateSubmodelDatasheetSingleItems(repo, aasenv1); // VIEW1 var view1 = CreateStochasticViewOnSubmodels(new AdminShell.Submodel[] { subCad, subDocu, subDatasheet }, "View1"); // ADMIN SHELL Log.WriteLine(2, "Create AAS .."); var aas1 = AdminShell.AdministrationShell.CreateNew("URI", repo.CreateOneTimeId(), "1", "0"); aas1.derivedFrom = new AdminShell.AssetAdministrationShellRef(new AdminShell.Key("AssetAdministrationShell", false, "URI", "www.admin-shell.io/aas/sample-series-aas/1/1")); aasenv1.AdministrationShells.Add(aas1); aas1.assetRef = asset1.GetReference(); // Link things together Log.WriteLine(2, "Linking entities to AAS .."); aas1.submodelRefs.Add(subCad.GetReference() as AdminShell.SubmodelRef); aas1.submodelRefs.Add(subDocu.GetReference() as AdminShell.SubmodelRef); aas1.submodelRefs.Add(subDatasheet.GetReference() as AdminShell.SubmodelRef); aas1.AddView(view1); if (true) { asset1.assetIdentificationModelRef = new AdminShell.SubmodelRef(subDatasheet.GetReference() as AdminShell.SubmodelRef); } } catch (Exception ex) { Console.Error.Write("While building AAS: {0} at {1}", ex.Message, ex.StackTrace); Environment.Exit(-1); } if (true) { try { // // Test serialize // this generates a "sample.xml" is addition to the package below .. for direct usag, e.g. // Log.WriteLine(2, "Test serialize sample.xml .."); using (var s = new StreamWriter("sample.xml")) { var serializer = new XmlSerializer(aasenv1.GetType()); var nss = new XmlSerializerNamespaces(); nss.Add("aas", "http://www.admin-shell.io/aas/1/0"); nss.Add("IEC61360", "http://www.admin-shell.io/IEC61360/1/0"); serializer.Serialize(s, aasenv1, nss); } } catch (Exception ex) { Console.Error.Write("While test serializing XML: {0} at {1}", ex.Message, ex.StackTrace); Environment.Exit(-1); } } // // Make PACKAGE // try { // use the library function var opcfn = "sample-admin-shell.aasx"; Log.WriteLine(2, "Creating package {0} ..", opcfn); var package = new AdminShell.PackageEnv(aasenv1); // supplementary files Log.WriteLine(2, "Adding supplementary files .."); foreach (var fr in prefs.filerecs) { Log.WriteLine(2, " + {0}", fr.fn); package.AddSupplementaryFileToStore(fr.fn, fr.targetdir, Path.GetFileName(fr.fn), fr.submodel == "thumb"); } // save Log.WriteLine(2, "Saving .."); package.SaveAs(opcfn, writeFreshly: true); package.Close(); } catch (Exception ex) { Console.Error.Write("While building OPC package: {0} at {1}", ex.Message, ex.StackTrace); Environment.Exit(-1); } }
private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) { // decode if (e == null || e.Command == null || !(e.Command is RoutedUICommand)) { return; } var cmd = (e.Command as RoutedUICommand).Text.Trim().ToLower(); // decide if (cmd == "new") { if ((!Options.UseFlyovers && MessageBoxResult.Yes == MessageBox.Show("Create new Adminshell environment? This operation can not be reverted!", "AASX", MessageBoxButton.YesNo, MessageBoxImage.Warning)) || (Options.UseFlyovers && MessageBoxResult.Yes == MessageBoxFlyoutShow("Create new Adminshell environment? This operation can not be reverted!", "AASX", MessageBoxButton.YesNo, MessageBoxImage.Warning)) ) { try { // create new AASX package thePackageEnv = new AdminShell.PackageEnv(); // redraw everything RedrawAllAasxElements(); RedrawElementView(); } catch (Exception ex) { Log.Error(ex, "When creating new AASX, an error occurred"); return; } } } if (cmd == "open" || cmd == "openaux") { var dlg = new Microsoft.Win32.OpenFileDialog(); try { dlg.InitialDirectory = System.IO.Path.GetDirectoryName(thePackageEnv.Filename); } catch { } dlg.Filter = "AASX package files (*.aasx)|*.aasx|AAS XML file (*.xml)|*.xml|All files (*.*)|*.*"; if (Options.UseFlyovers) { this.StartFlyover(new EmptyFlyout()); } var res = dlg.ShowDialog(); if (Options.UseFlyovers) { this.CloseFlyover(); } if (res == true) { if (cmd == "open") { UiLoadPackageEnv(dlg.FileName); } if (cmd == "openaux") { UiLoadPackageAux(dlg.FileName); } } } if (cmd == "save") { try { // save thePackageEnv.SaveAs(thePackageEnv.Filename); // as saving changes the structure of pending supplementary files, re-display RedrawAllAasxElements(); } catch (Exception ex) { Log.Error(ex, "When saving AASX, an error occurred"); return; } Log.Info("AASX saved successfully: {0}", thePackageEnv.Filename); } if (cmd == "saveas") { var dlg = new Microsoft.Win32.SaveFileDialog(); try { dlg.InitialDirectory = System.IO.Path.GetDirectoryName(thePackageEnv.Filename); } catch { } dlg.FileName = thePackageEnv.Filename; dlg.DefaultExt = "*.aasx"; dlg.Filter = "AASX package files (*.aasx)|*.aasx|AAS XML file (*.xml)|*.xml|All files (*.*)|*.*"; if (Options.UseFlyovers) { this.StartFlyover(new EmptyFlyout()); } var res = dlg.ShowDialog(); if (Options.UseFlyovers) { this.CloseFlyover(); } if (res == true) { try { // save thePackageEnv.SaveAs(dlg.FileName); // as saving changes the structure of pending supplementary files, re-display RedrawAllAasxElements(); } catch (Exception ex) { Log.Error(ex, "When saving AASX, an error occurred"); return; } Log.Info("AASX saved successfully as: {0}", dlg.FileName); } } if (cmd == "close" && thePackageEnv != null) { if ((!Options.UseFlyovers && MessageBoxResult.Yes == MessageBox.Show(this, "Do you want to close the open package? Please make sure that you have saved before.", "Close Package?", MessageBoxButton.YesNo, MessageBoxImage.Question)) || (Options.UseFlyovers && MessageBoxResult.Yes == MessageBoxFlyoutShow("Do you want to close the open package? Please make sure that you have saved before.", "Close Package?", MessageBoxButton.YesNo, MessageBoxImage.Question)) ) { try { thePackageEnv.Close(); RedrawAllAasxElements(); } catch (Exception ex) { Log.Error(ex, "When closing AASX, an error occurred"); } } } if (cmd == "closeaux" && thePackageAux != null) { try { thePackageAux.Close(); } catch (Exception ex) { Log.Error(ex, "When closing auxiliary AASX, an error occurred"); } } if (cmd == "exit") { /* * if ((!Options.UseFlyovers && MessageBoxResult.Yes == MessageBox.Show(this, "Exit the application? Please make sure that you have saved before.", "Exit Application?", MessageBoxButton.YesNo, MessageBoxImage.Question)) || || (Options.UseFlyovers && MessageBoxResult.Yes == MessageBoxFlyoutShow("Exit the application? Please make sure that you have saved before.", "Exit Application?", MessageBoxButton.YesNo, MessageBoxImage.Question)) || ) */ System.Windows.Application.Current.Shutdown(); } if (cmd == "connect") { if (!Options.UseFlyovers) { MessageBox.Show(this, "In future versions, this feature will allow connecting to an online Administration Shell via OPC UA or similar.\n" + "This feature is scope of the specification 'Details of the Adminstration Shell Part 1 V1.1' and 'Part 2'.", "Connect", MessageBoxButton.OK); } else { MessageBoxFlyoutShow("In future versions, this feature will allow connecting to an online Administration Shell via OPC UA or similar.", "Connect", MessageBoxButton.OK, MessageBoxImage.Hand); } } if (cmd == "about") { var ab = new AboutBox(); ab.ShowDialog(); } if (cmd == "helpgithub") { theBrowser.Address = @"https://github.com/admin-shell/aasx-package-explorer/blob/master/help/index.md"; Dispatcher.BeginInvoke((Action)(() => ElementTabControl.SelectedIndex = 1)); } if (cmd == "editkey") { MenuItemWorkspaceEdit.IsChecked = !MenuItemWorkspaceEdit.IsChecked; } if (cmd == "hintskey") { MenuItemWorkspaceHints.IsChecked = !MenuItemWorkspaceHints.IsChecked; } if (cmd == "editmenu" || cmd == "editkey" || cmd == "hintsmenu" || cmd == "hintskey") { // edit mode affects the total element view RedrawAllAasxElements(); // fake selection RedrawElementView(); } if (cmd == "test") { /* * string err = null; * Log.Append(err + ""); * var p1 = new AdminShell.Property(); * p1.value = "42"; */ /* * var w1 = new AdminShell.SubmodelElementWrapper(); * w1.submodelElement = p1; * var w2 = new AdminShell.SubmodelElementWrapper(w1); */ // var w2 = new AdminShell.SubmodelElementWrapper(p1); var uc = new MessageBoxFlyout("My very long message text!", "Caption", MessageBoxButton.OK, MessageBoxImage.Error); uc.ControlClosed += () => { Log.Info("Yes!"); }; this.StartFlyover(uc); } if (cmd == "queryrepo") { var uc = new SelectFromRepositoryFlyout(); uc.Margin = new Thickness(10); if (uc.LoadAasxRepoFile(Options.AasxRepositoryFn)) { uc.ControlClosed += () => { var fn = uc.ResultFilename; if (fn != null && fn != "") { Log.Info("Switching to {0} ..", fn); UiLoadPackageEnv(fn); } }; this.StartFlyover(uc); } } }