Beispiel #1
0
        private void DocumentEntity_DoubleClick(DocumentEntity e)
        {
            // first check
            if (e == null || e.DigitalFile?.Path == null || e.DigitalFile.Path.Trim().Length < 1 ||
                this.theEventStack == null)
            {
                return;
            }

            try
            {
                // temp input
                var inputFn = e.DigitalFile.Path;
                try
                {
                    if (!inputFn.ToLower().Trim().StartsWith("http://") &&
                        !inputFn.ToLower().Trim().StartsWith("https://"))
                    {
                        inputFn = thePackage.MakePackageFileAvailableAsTempFile(inputFn);
                    }
                }
                catch (Exception ex)
                {
                    Log.Error(ex, "Making local file available");
                }

                // give over to event stack
                var evt = new AasxPluginResultEventDisplayContentFile();
                evt.fn       = inputFn;
                evt.mimeType = e.DigitalFile.MimeType;
                this.theEventStack.PushEvent(evt);
            }
            catch (Exception ex)
            {
                Log.Error(ex, "when double-click");
            }
        }
Beispiel #2
0
        private void DocumentEntity_MenuClick(DocumentEntity e, string menuItemHeader, object tag)
        {
            // first check
            if (e == null || menuItemHeader == null)
            {
                return;
            }

            // what to do?
            if (tag == null && menuItemHeader == "Edit" && e.SourceElementsDocument != null &&
                e.SourceElementsDocumentVersion != null)
            {
                // show the edit panel
                OuterTabControl.SelectedItem = TabPanelEdit;
                ButtonAddUpdateDoc.Content   = "Update";

                // make a template description for the content (remeber it)
                formInUpdateMode     = true;
                updateSourceElements = e.SourceElementsDocument;

                var desc = theOptions.FormVdi2770;
                if (desc == null)
                {
                    desc = DocumentShelfOptions.CreateVdi2770TemplateDesc(theOptions);
                }

                // latest version (from resources)
                if (e.SmVersion == DocumentEntity.SubmodelVersion.V11)
                {
                    desc = DocumentShelfOptions.CreateVdi2770v11TemplateDesc();
                }

                this.currentFormDescription = desc;

                // take over existing data
                this.currentFormInst = new FormInstanceSubmodelElementCollection(null, currentFormDescription);
                this.currentFormInst.PresetInstancesBasedOnSource(updateSourceElements);
                this.currentFormInst.outerEventStack = theEventStack;

                // bring it to the panel
                var elementsCntl = new FormListOfDifferentControl();
                elementsCntl.ShowHeader  = false;
                elementsCntl.DataContext = this.currentFormInst;
                ScrollViewerForm.Content = elementsCntl;

#if not_yet
                this.currentTemplateDescription = new AasTemplateDescListOfElement(desc);
                this.currentTemplateDescription.ClearDynamicData();
                this.currentTemplateDescription.PresetInstancesBasedOnSource(updateSourceElements);

                // bring it to the panel
                var elementsCntl = new AasTemplateListOfElementControl();
                elementsCntl.DataContext = this.currentTemplateDescription;
                ScrollViewerForm.Content = elementsCntl;
#endif
                // OK
                return;
            }

            if (tag == null && menuItemHeader == "Delete" && e.SourceElementsDocument != null &&
                e.SourceElementsDocumentVersion != null && theSubmodel?.submodelElements != null && theOptions != null)
            {
                // the source elements need to match a Document
                foreach (var smcDoc in
                         theSubmodel.submodelElements.FindAllSemanticIdAs <AdminShell.SubmodelElementCollection>(
                             theOptions?.SemIdDocument))
                {
                    if (smcDoc?.value == e.SourceElementsDocument)
                    {
                        // identify as well the DocumentVersion
                        // (convert to List() because of Count() below)
                        var allVers =
                            e.SourceElementsDocument.FindAllSemanticIdAs <AdminShell.SubmodelElementCollection>(
                                theOptions?.SemIdDocumentVersion).ToList();
                        foreach (var smcVer in allVers)
                        {
                            if (smcVer?.value == e.SourceElementsDocumentVersion)
                            {
                                // access
                                if (smcVer == null || smcVer.value == null || smcDoc == null || smcDoc.value == null)
                                {
                                    continue;
                                }

                                // ask back .. the old-fashioned way!
                                if (MessageBoxResult.Yes != MessageBox.Show(
                                        "Delete Document?", "Question", MessageBoxButton.YesNo, MessageBoxImage.Warning))
                                {
                                    return;
                                }

                                // confirmed! -> delete
                                if (allVers.Count < 2)
                                {
                                    // remove the whole document!
                                    theSubmodel.submodelElements.Remove(smcDoc);
                                }
                                else
                                {
                                    // remove only the document version
                                    e.SourceElementsDocument.Remove(smcVer);
                                }

                                // switch back to docs
                                // change back
                                OuterTabControl.SelectedItem = TabPanelList;

                                // re-display
                                ParseSubmodelToListItems(
                                    this.theSubmodel, this.theOptions, theViewModel.TheSelectedDocClass,
                                    theViewModel.TheSelectedLanguage, theViewModel.TheSelectedListType);

                                // re-display also in Explorer
                                var evt = new AasxPluginResultEventRedrawAllElements();
                                if (theEventStack != null)
                                {
                                    theEventStack.PushEvent(evt);
                                }

                                // OK
                                return;
                            }
                        }

                        // ReSharper enable PossibleMultipleEnumeration
                    }
                }
            }

            // check for a document reference
            if (tag != null && tag is Tuple <DocumentEntity.DocRelationType, AdminShell.Reference> reltup &&
                reltup.Item2 != null && reltup.Item2.Count > 0)
            {
                var evt = new AasxPluginResultEventNavigateToReference();
                evt.targetReference = new AdminShell.Reference(reltup.Item2);
                this.theEventStack.PushEvent(evt);
            }
        }
Beispiel #3
0
        private void ParseSubmodelToListItems(
            AdminShell.Submodel subModel, AasxPluginDocumentShelf.DocumentShelfOptions options,
            int selectedDocClass, AasxLanguageHelper.LangEnum selectedLanguage, ViewModel.ListType selectedListType)
        {
            try
            {
                // influence list view rendering, as well
                if (selectedListType == ViewModel.ListType.Bars)
                {
                    ScrollMainContent.ItemTemplate = (DataTemplate)ScrollMainContent.Resources["ItemTemplateForBar"];
                    ScrollMainContent.ItemsPanel   = (ItemsPanelTemplate)ScrollMainContent.Resources["ItemsPanelForBar"];
                }

                if (selectedListType == ViewModel.ListType.Grid)
                {
                    ScrollMainContent.ItemTemplate = (DataTemplate)ScrollMainContent.Resources["ItemTemplateForGrid"];
                    ScrollMainContent.ItemsPanel   =
                        (ItemsPanelTemplate)ScrollMainContent.Resources["ItemsPanelForGrid"];
                }

                // clean table
                ScrollMainContent.ItemsSource = null;

                // access
                if (subModel == null || options == null)
                {
                    return;
                }

                // make sure for the right Submodel
                var found = false;
                if (options.AllowSubmodelSemanticIds != null)
                {
                    foreach (var x in options.AllowSubmodelSemanticIds)
                    {
                        if (subModel.semanticId != null && subModel.semanticId.Matches(x))
                        {
                            found = true;
                            break;
                        }
                    }
                }
                if (!found)
                {
                    return;
                }

                // right now: hardcoded check for mdoel version
                var modelVersion = DocumentEntity.SubmodelVersion.Default;
                var defs11       = AasxPredefinedConcepts.VDI2770v11.Static;
                if (subModel.semanticId.Matches(defs11?.SM_ManufacturerDocumentation?.GetSemanticKey()))
                {
                    modelVersion = DocumentEntity.SubmodelVersion.V11;
                }

                // what defaultLanguage
                string defaultLang = null;
                if (theViewModel != null && theViewModel.TheSelectedLanguage > AasxLanguageHelper.LangEnum.Any)
                {
                    defaultLang = AasxLanguageHelper.LangEnumToISO639String[(int)theViewModel.TheSelectedLanguage];
                }

                // make new list box items
                var its = new List <DocumentEntity>();
                if (modelVersion != DocumentEntity.SubmodelVersion.V11)
                {
                    its = ListOfDocumentEntity.ParseSubmodelForV10(
                        thePackage, subModel, options, defaultLang, selectedDocClass, selectedLanguage);
                }
                else
                {
                    its = ListOfDocumentEntity.ParseSubmodelForV11(
                        thePackage, subModel, defs11, defaultLang, selectedDocClass, selectedLanguage);
                }

                // post process
                foreach (var ent in its)
                {
                    // make viewbox to host __later__ created image!
                    var vb = new Viewbox();
                    vb.Stretch       = Stretch.Uniform;
                    ent.ImgContainer = vb;

                    // can already put a generated image into the viewbox?
                    if (referableHashToCachedBitmap != null &&
                        referableHashToCachedBitmap.ContainsKey(ent.ReferableHash))
                    {
                        var img = new Image();
                        img.Source             = referableHashToCachedBitmap[ent.ReferableHash];
                        ent.ImgContainer.Child = img;
                    }
                    else
                    {
                        // trigger generation of image

                        // check if already in list
                        DocumentEntity foundDe = null;
                        foreach (var de in theDocEntitiesToPreview)
                        {
                            if (ent.ReferableHash == de.ReferableHash)
                            {
                                foundDe = de;
                            }
                        }

                        lock (theDocEntitiesToPreview)
                        {
                            if (foundDe != null)
                            {
                                theDocEntitiesToPreview.Remove(foundDe);
                            }
                            theDocEntitiesToPreview.Add(ent);
                        }
                    }

                    // attach events and add
                    ent.DoubleClick += DocumentEntity_DoubleClick;
                    ent.MenuClick   += DocumentEntity_MenuClick;
                }

                // finally set
                ScrollMainContent.ItemsSource = its;
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Exception when parse/ display Submodel");
            }
        }
Beispiel #4
0
        private void DispatcherTimer_Tick(object sender, EventArgs e)
        {
            // each tick check for one image, if a preview shall be done
            if (theDocEntitiesToPreview != null && theDocEntitiesToPreview.Count > 0 &&
                numDocEntitiesInPreview < maxDocEntitiesInPreview)
            {
                // pop
                DocumentEntity ent = null;
                lock (theDocEntitiesToPreview)
                {
                    ent = theDocEntitiesToPreview[0];
                    theDocEntitiesToPreview.RemoveAt(0);
                }

                try
                {
                    // temp input
                    var inputFn = ent?.DigitalFile;
                    if (inputFn != null)
                    {
                        // from package?
                        if (CheckIfPackageFile(inputFn))
                        {
                            inputFn = thePackage.MakePackageFileAvailableAsTempFile(ent.DigitalFile);
                        }

                        // temp output
                        string outputFn = System.IO.Path.GetTempFileName().Replace(".tmp", ".png");

                        // remember these for later deletion
                        ent.DeleteFilesAfterLoading = new[] { inputFn, outputFn };

                        // start process
                        string arguments = string.Format("-flatten -density 75 \"{0}\"[0] \"{1}\"", inputFn, outputFn);
                        string exeFn     = System.IO.Path.Combine(
                            System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "convert.exe");

                        var startInfo = new ProcessStartInfo(exeFn, arguments)
                        {
                            WindowStyle = ProcessWindowStyle.Hidden
                        };

                        var process = new Process {
                            StartInfo = startInfo, EnableRaisingEvents = true
                        };

                        DocumentEntity lambdaEntity   = ent;
                        string         outputFnBuffer = outputFn;
                        process.Exited += (sender2, args) =>
                        {
                            // release number of parallel processes
                            lock (mutexDocEntitiesInPreview)
                            {
                                numDocEntitiesInPreview--;
                            }

                            // take over data?
                            if (lambdaEntity.ImgContainer != null)
                            {
                                // trigger display image
                                lambdaEntity.ImageReadyToBeLoaded = outputFnBuffer;
                            }
                        };

                        try
                        {
                            process.Start();
                        }
                        catch (Exception ex)
                        {
                            AdminShellNS.LogInternally.That.Error(
                                ex, $"Failed to start the process: {startInfo.FileName} " +
                                $"with arguments {string.Join(" ", startInfo.Arguments)}");
                        }

                        // limit the number of parallel executions
                        lock (mutexDocEntitiesInPreview)
                        {
                            numDocEntitiesInPreview++;
                        }
                    }
                }
                catch (Exception ex)
                {
                    AdminShellNS.LogInternally.That.SilentlyIgnoredError(ex);
                }
            }

            // over all items in order to check, if a prepared image shall be displayed
            foreach (var x in this.ScrollMainContent.Items)
            {
                var de = x as DocumentEntity;
                if (de == null)
                {
                    continue;
                }

                if (de.ImageReadyToBeLoaded != null)
                {
                    // never again
                    var tempFn = de.ImageReadyToBeLoaded;
                    de.ImageReadyToBeLoaded = null;

                    // try load
                    try
                    {
                        // convert here, as the tick-Thread in STA / UI thread
                        var bi  = new BitmapImage(new Uri(tempFn, UriKind.RelativeOrAbsolute));
                        var img = new Image();
                        img.Source            = bi;
                        de.ImgContainer.Child = img;

                        // now delete the associated files file!
                        if (de.DeleteFilesAfterLoading != null)
                        {
                            foreach (var fn in de.DeleteFilesAfterLoading)
                            {
                                // it is quite likely (e.g. http:// files) that the delete fails!
                                try
                                {
                                    File.Delete(fn);
                                }
                                catch (Exception ex)
                                {
                                    AdminShellNS.LogInternally.That.SilentlyIgnoredError(ex);
                                }
                            }
                        }

                        // remember in the cache
                        if (referableHashToCachedBitmap != null &&
                            !referableHashToCachedBitmap.ContainsKey(de.ReferableHash))
                        {
                            referableHashToCachedBitmap[de.ReferableHash] = bi;
                        }
                    }
                    catch (Exception ex)
                    {
                        AdminShellNS.LogInternally.That.SilentlyIgnoredError(ex);
                    }
                }
            }
        }
        private void ParseSubmodelToListItems(
            AdminShell.Submodel subModel, AasxPluginDocumentShelf.DocumentShelfOptions options,
            int selectedDocClass, ViewModel.LanguageSelection selectedLanguage, ViewModel.ListType selectedListType)
        {
            try
            {
                // influence list view rendering, as well
                if (selectedListType == ViewModel.ListType.Bars)
                {
                    ScrollMainContent.ItemTemplate = (DataTemplate)ScrollMainContent.Resources["ItemTemplateForBar"];
                    ScrollMainContent.ItemsPanel   = (ItemsPanelTemplate)ScrollMainContent.Resources["ItemsPanelForBar"];
                }

                if (selectedListType == ViewModel.ListType.Grid)
                {
                    ScrollMainContent.ItemTemplate = (DataTemplate)ScrollMainContent.Resources["ItemTemplateForGrid"];
                    ScrollMainContent.ItemsPanel   =
                        (ItemsPanelTemplate)ScrollMainContent.Resources["ItemsPanelForGrid"];
                }

                // clean table
                ScrollMainContent.ItemsSource = null;

                // access
                if (subModel == null || options == null)
                {
                    return;
                }

                // make sure for the right Submodel
                var found = false;
                if (options.AllowSubmodelSemanticIds != null)
                {
                    foreach (var x in options.AllowSubmodelSemanticIds)
                    {
                        if (subModel.semanticId != null && subModel.semanticId.Matches(x))
                        {
                            found = true;
                            break;
                        }
                    }
                }
                if (!found)
                {
                    return;
                }

                // what defaultLanguage
                string defaultLang = null;
                if (theViewModel != null && theViewModel.TheSelectedLanguage > ViewModel.LanguageSelection.All)
                {
                    defaultLang = ViewModel.LanguageSelectionToISO639String[(int)theViewModel.TheSelectedLanguage];
                }

                // set a new list
                var its = new List <DocumentEntity>();

                // look for Documents
                if (subModel?.submodelElements != null)
                {
                    foreach (var smcDoc in
                             subModel.submodelElements.FindAllSemanticIdAs <AdminShell.SubmodelElementCollection>(
                                 options?.SemIdDocument))
                    {
                        // access
                        if (smcDoc == null || smcDoc.value == null)
                        {
                            continue;
                        }

                        // look immediately for DocumentVersion, as only with this there is a valid List item
                        foreach (var smcVer in
                                 smcDoc.value.FindAllSemanticIdAs <AdminShell.SubmodelElementCollection>(
                                     options?.SemIdDocumentVersion))
                        {
                            // access
                            if (smcVer == null || smcVer.value == null)
                            {
                                continue;
                            }

                            //
                            // try to lookup info in smcDoc and smcVer
                            //

                            // take the 1st title
                            var title =
                                "" +
                                smcVer.value.FindFirstSemanticIdAs <AdminShell.Property>(options?.SemIdTitle)?.value;

                            // could be also a multi-language title
                            foreach (var mlp in
                                     smcVer.value.FindAllSemanticIdAs <AdminShell.MultiLanguageProperty>(
                                         options?.SemIdTitle))
                            {
                                if (mlp.value != null)
                                {
                                    title = mlp.value.GetDefaultStr(defaultLang);
                                }
                            }

                            // have multiple opportunities for orga
                            var orga =
                                "" +
                                smcVer.value.FindFirstSemanticIdAs <AdminShell.Property>(
                                    options?.SemIdOrganizationOfficialName)?.value;
                            if (orga.Trim().Length < 1)
                            {
                                orga =
                                    "" +
                                    smcVer.value.FindFirstSemanticIdAs <AdminShell.Property>(
                                        options?.SemIdOrganizationName)?.value;
                            }

                            // class infos
                            var classId =
                                "" +
                                smcDoc.value.FindFirstSemanticIdAs <AdminShell.Property>(
                                    options?.SemIdDocumentClassId)?.value;

                            // collect country codes
                            var countryCodesStr  = new List <string>();
                            var countryCodesEnum = new List <ViewModel.LanguageSelection>();
                            foreach (var cclp in
                                     smcVer.value.FindAllSemanticIdAs <AdminShell.Property>(options?.SemIdLanguage))
                            {
                                // language code
                                var candidate = ("" + cclp.value).Trim().ToUpper();
                                if (candidate.Length < 1)
                                {
                                    continue;
                                }

                                // convert to country codes
                                foreach (var ev in
                                         (ViewModel.LanguageSelection[])Enum.GetValues(typeof(ViewModel.LanguageSelection)))
                                {
                                    if (candidate == ViewModel.LanguageSelectionToISO639String[(int)ev]?.ToUpper())
                                    {
                                        candidate = ViewModel.LanguageSelectionToISO3166String[(int)ev]?.ToUpper();
                                        countryCodesEnum.Add(ev);
                                    }
                                }

                                // add
                                countryCodesStr.Add(candidate);
                            }

                            // evaluate, if in selection
                            var okDocClass =
                                (selectedDocClass < 1 || classId == null || classId.Trim().Length < 1 ||
                                 classId.Trim()
                                 .StartsWith(
                                     DefinitionsVDI2770.GetDocClass(
                                         (DefinitionsVDI2770.Vdi2770DocClass)selectedDocClass)));

                            var okLanguage =
                                (selectedLanguage == ViewModel.LanguageSelection.All ||
                                 countryCodesEnum == null ||
                                 // make only exception, if no language not all (not only the preferred
                                 // of LanguageSelectionToISO639String) are in the property
                                 countryCodesStr.Count < 1 ||
                                 countryCodesEnum.Contains(selectedLanguage));

                            if (!okDocClass || !okLanguage)
                            {
                                continue;
                            }

                            // further info
                            var further = "";
                            foreach (var fi in
                                     smcVer.value.FindAllSemanticIdAs <AdminShell.Property>(
                                         options?.SemIdDocumentVersionIdValue))
                            {
                                further += "\u00b7 version: " + fi.value;
                            }
                            foreach (var fi in
                                     smcVer.value.FindAllSemanticIdAs <AdminShell.Property>(options?.SemIdDate))
                            {
                                further += "\u00b7 date: " + fi.value;
                            }
                            if (further.Length > 0)
                            {
                                further = further.Substring(2);
                            }

                            // construct entity
                            var ent = new DocumentEntity(title, orga, further, countryCodesStr.ToArray());
                            ent.ReferableHash = String.Format(
                                "{0:X14} {1:X14}", thePackage.GetHashCode(), smcDoc.GetHashCode());

                            // for updating data, set the source elements of this document entity
                            ent.SourceElementsDocument        = smcDoc.value;
                            ent.SourceElementsDocumentVersion = smcVer.value;

                            // filename
                            var fn = smcVer.value.FindFirstSemanticIdAs <AdminShell.File>(
                                options?.SemIdDigitalFile)?.value;
                            ent.DigitalFile = fn;

                            // make viewbox to host __later__ created image!
                            var vb = new Viewbox();
                            vb.Stretch       = Stretch.Uniform;
                            ent.ImgContainer = vb;

                            // can already put a generated image into the viewbox?
                            if (referableHashToCachedBitmap != null &&
                                referableHashToCachedBitmap.ContainsKey(ent.ReferableHash))
                            {
                                var img = new Image();
                                img.Source             = referableHashToCachedBitmap[ent.ReferableHash];
                                ent.ImgContainer.Child = img;
                            }
                            else
                            {
                                // trigger generation of image

                                // check if already in list
                                DocumentEntity foundDe = null;
                                foreach (var de in theDocEntitiesToPreview)
                                {
                                    if (ent.ReferableHash == de.ReferableHash)
                                    {
                                        foundDe = de;
                                    }
                                }

                                lock (theDocEntitiesToPreview)
                                {
                                    if (foundDe != null)
                                    {
                                        theDocEntitiesToPreview.Remove(foundDe);
                                    }
                                    theDocEntitiesToPreview.Add(ent);
                                }
                            }

                            // attach events and add
                            ent.DoubleClick += DocumentEntity_DoubleClick;
                            ent.MenuClick   += DocumentEntity_MenuClick;
                            its.Add(ent);
                        }
                    }
                }

                // make new list box items
                ScrollMainContent.ItemsSource = its;
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Exception when parse/ display Submodel");
            }
        }
Beispiel #6
0
        private void DocumentEntity_MenuClick(DocumentEntity e, string menuItemHeader, object tag)
        {
            // first check
            if (e == null || menuItemHeader == null)
            {
                return;
            }

            // what to do?
            if (tag == null && menuItemHeader == "Edit" && e.SourceElementsDocument != null &&
                e.SourceElementsDocumentVersion != null)
            {
                // show the edit panel
                OuterTabControl.SelectedItem = TabPanelEdit;
                ButtonAddUpdateDoc.Content   = "Update";

                // make a template description for the content (remeber it)
                formInUpdateMode     = true;
                updateSourceElements = e.SourceElementsDocument;

                var desc = DocuShelfSemanticConfig.CreateVdi2770TemplateDesc(theOptions);

                // latest version (from resources)
                if (e.SmVersion == DocumentEntity.SubmodelVersion.V11)
                {
                    desc = DocuShelfSemanticConfig.CreateVdi2770v11TemplateDesc();
                }

                this.currentFormDescription = desc;

                // take over existing data
                this.currentFormInst = new FormInstanceSubmodelElementCollection(null, currentFormDescription);
                this.currentFormInst.PresetInstancesBasedOnSource(updateSourceElements);
                this.currentFormInst.outerEventStack = theEventStack;

                // bring it to the panel
                var elementsCntl = new FormListOfDifferentControl();
                elementsCntl.ShowHeader  = false;
                elementsCntl.DataContext = this.currentFormInst;
                ScrollViewerForm.Content = elementsCntl;

                // OK
                return;
            }

            if (tag == null && menuItemHeader == "Delete" && e.SourceElementsDocument != null &&
                e.SourceElementsDocumentVersion != null && theSubmodel?.submodelElements != null && theOptions != null)
            {
                // the source elements need to match a Document
                foreach (var smcDoc in
                         theSubmodel.submodelElements.FindAllSemanticIdAs <AdminShell.SubmodelElementCollection>(
                             _semConfig.SemIdDocument))
                {
                    if (smcDoc?.value == e.SourceElementsDocument)
                    {
                        // identify as well the DocumentVersion
                        // (convert to List() because of Count() below)
                        var allVers =
                            e.SourceElementsDocument.FindAllSemanticIdAs <AdminShell.SubmodelElementCollection>(
                                _semConfig.SemIdDocumentVersion).ToList();
                        foreach (var smcVer in allVers)
                        {
                            if (smcVer?.value == e.SourceElementsDocumentVersion)
                            {
                                // access
                                if (smcVer == null || smcVer.value == null || smcDoc == null || smcDoc.value == null)
                                {
                                    continue;
                                }

                                // ask back .. the old-fashioned way!
                                if (MessageBoxResult.Yes != MessageBox.Show(
                                        "Delete Document?", "Question", MessageBoxButton.YesNo, MessageBoxImage.Warning))
                                {
                                    return;
                                }

                                // confirmed! -> delete
                                if (allVers.Count < 2)
                                {
                                    // remove the whole document!
                                    theSubmodel.submodelElements.Remove(smcDoc);
                                }
                                else
                                {
                                    // remove only the document version
                                    e.SourceElementsDocument.Remove(smcVer);
                                }

                                // switch back to docs
                                // change back
                                OuterTabControl.SelectedItem = TabPanelList;

                                // re-display
                                ParseSubmodelToListItems(
                                    this.theSubmodel, this.theOptions, theViewModel.TheSelectedDocClass,
                                    theViewModel.TheSelectedLanguage, theViewModel.TheSelectedListType);

                                // re-display also in Explorer
                                var evt = new AasxPluginResultEventRedrawAllElements();
                                if (theEventStack != null)
                                {
                                    theEventStack.PushEvent(evt);
                                }

                                // OK
                                return;
                            }
                        }

                        // ReSharper enable PossibleMultipleEnumeration
                    }
                }
            }

            // save digital file
            if (tag == null && menuItemHeader == "Save file .." && e.DigitalFile?.Path.HasContent() == true)
            {
                // make a file available
                var inputFn = e.DigitalFile.Path;

                if (CheckIfPackageFile(inputFn))
                {
                    inputFn = thePackage.MakePackageFileAvailableAsTempFile(e.DigitalFile.Path);
                }

                if (!inputFn.HasContent())
                {
                    Log.Error("Error making digital file available. Aborting!");
                    return;
                }

                // ask for a file name
                var dlg = new Microsoft.Win32.SaveFileDialog();
                dlg.Title      = "Save digital file as ..";
                dlg.FileName   = System.IO.Path.GetFileName(e.DigitalFile.Path);
                dlg.DefaultExt = "*" + System.IO.Path.GetExtension(e.DigitalFile.Path);
                dlg.Filter     = "All files (*.*)|*.*";

                if (true != dlg.ShowDialog())
                {
                    return;
                }

                // save
                try
                {
                    File.Copy(inputFn, dlg.FileName);
                }
                catch (Exception ex)
                {
                    Log.Error(ex, "while saveing digital file to user specified loacation");
                }
            }

            // check for a document reference
            if (tag != null && tag is Tuple <DocumentEntity.DocRelationType, AdminShell.Reference> reltup &&
                reltup.Item2 != null && reltup.Item2.Count > 0)
            {
                var evt = new AasxPluginResultEventNavigateToReference();
                evt.targetReference = new AdminShell.Reference(reltup.Item2);
                this.theEventStack.PushEvent(evt);
            }
        }
Beispiel #7
0
        private void ParseSubmodelToListItems(
            AdminShell.Submodel subModel, AasxPluginDocumentShelf.DocumentShelfOptions options,
            int selectedDocClass, AasxLanguageHelper.LangEnum selectedLanguage, ViewModel.ListType selectedListType)
        {
            try
            {
                // influence list view rendering, as well
                if (selectedListType == ViewModel.ListType.Bars)
                {
                    ScrollMainContent.ItemTemplate = (DataTemplate)ScrollMainContent.Resources["ItemTemplateForBar"];
                    ScrollMainContent.ItemsPanel   = (ItemsPanelTemplate)ScrollMainContent.Resources["ItemsPanelForBar"];
                }

                if (selectedListType == ViewModel.ListType.Grid)
                {
                    ScrollMainContent.ItemTemplate = (DataTemplate)ScrollMainContent.Resources["ItemTemplateForGrid"];
                    ScrollMainContent.ItemsPanel   =
                        (ItemsPanelTemplate)ScrollMainContent.Resources["ItemsPanelForGrid"];
                }

                // clean table
                ScrollMainContent.ItemsSource = null;

                // access
                if (subModel?.semanticId == null || options == null)
                {
                    return;
                }

                // make sure for the right Submodel
                DocumentShelfOptionsRecord foundRec = null;
                foreach (var rec in options.LookupAllIndexKey <DocumentShelfOptionsRecord>(
                             subModel?.semanticId?.GetAsExactlyOneKey()))
                {
                    foundRec = rec;
                }

                if (foundRec == null)
                {
                    return;
                }

                // right now: hardcoded check for mdoel version
                var modelVersion = DocumentEntity.SubmodelVersion.Default;
                var defs11       = AasxPredefinedConcepts.VDI2770v11.Static;
                if (subModel.semanticId.Matches(defs11?.SM_ManufacturerDocumentation?.GetSemanticKey()))
                {
                    modelVersion = DocumentEntity.SubmodelVersion.V11;
                }
                if (foundRec.ForceVersion == DocumentEntity.SubmodelVersion.V10)
                {
                    modelVersion = DocumentEntity.SubmodelVersion.V10;
                }
                if (foundRec.ForceVersion == DocumentEntity.SubmodelVersion.V11)
                {
                    modelVersion = DocumentEntity.SubmodelVersion.V11;
                }

                // set checkbox
                this.CheckBoxLatestVersion.IsChecked = modelVersion == DocumentEntity.SubmodelVersion.V11;

                // set usage info
                var useinf = foundRec.UsageInfo;
                TextBlockUsageInfo.Text   = useinf;
                PanelUsageInfo.Visibility = useinf.HasContent() ? Visibility.Visible : Visibility.Collapsed;

                // what defaultLanguage
                string defaultLang = null;
                if (theViewModel != null && theViewModel.TheSelectedLanguage > AasxLanguageHelper.LangEnum.Any)
                {
                    defaultLang = AasxLanguageHelper.LangEnumToISO639String[(int)theViewModel.TheSelectedLanguage];
                }

                // make new list box items
                var its = new List <DocumentEntity>();
                if (modelVersion != DocumentEntity.SubmodelVersion.V11)
                {
                    its = ListOfDocumentEntity.ParseSubmodelForV10(
                        thePackage, subModel, options, defaultLang, selectedDocClass, selectedLanguage);
                }
                else
                {
                    its = ListOfDocumentEntity.ParseSubmodelForV11(
                        thePackage, subModel, defs11, defaultLang, selectedDocClass, selectedLanguage);
                }

                // post process
                foreach (var ent in its)
                {
                    // make viewbox to host __later__ created image!
                    var vb = new Viewbox();
                    vb.Stretch       = Stretch.Uniform;
                    ent.ImgContainer = vb;

                    // if a preview file exists, try load directly, but not interfere
                    // we delayed load logic, as these images might get more detailed
                    if (ent.PreviewFile?.Path?.HasContent() == true)
                    {
                        var inputFn = ent.PreviewFile.Path;

                        // from package?
                        if (CheckIfPackageFile(inputFn))
                        {
                            inputFn = thePackage.MakePackageFileAvailableAsTempFile(ent.PreviewFile.Path);
                        }

                        ent.LoadImageFromPath(inputFn);
                    }

                    // delayed load logic
                    // can already put a generated image into the viewbox?
                    if (referableHashToCachedBitmap != null &&
                        referableHashToCachedBitmap.ContainsKey(ent.ReferableHash))
                    {
                        var img = new Image();
                        img.Source             = referableHashToCachedBitmap[ent.ReferableHash];
                        ent.ImgContainer.Child = img;
                    }
                    else
                    {
                        // trigger generation of image

                        // check if already in list
                        DocumentEntity foundDe = null;
                        foreach (var de in theDocEntitiesToPreview)
                        {
                            if (ent.ReferableHash == de.ReferableHash)
                            {
                                foundDe = de;
                            }
                        }

                        lock (theDocEntitiesToPreview)
                        {
                            if (foundDe != null)
                            {
                                theDocEntitiesToPreview.Remove(foundDe);
                            }
                            theDocEntitiesToPreview.Add(ent);
                        }
                    }

                    // attach events and add
                    ent.DoubleClick += DocumentEntity_DoubleClick;
                    ent.MenuClick   += DocumentEntity_MenuClick;
                    ent.DragStart   += DocumentEntity_DragStart;
                }

                // finally set
                ScrollMainContent.ItemsSource = its;
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Exception when parse/ display Submodel");
            }
        }