コード例 #1
0
 private void ShowLinkedItems(MultimediaLinkViewModel selected)
 {
     if (selected != null)
     {
         selected.Icon = GraphicsUtils.GenerateThumbnail(selected.TempFilename, 48);
         PluginManager.Instance.AddNonDockableContent(Plugin, new LinkedMultimediaItemsControl(selected), "Items linked to multimedia " + selected.MultimediaID, SizeToContent.Manual);
     }
 }
コード例 #2
0
        private void ViewMultimedia(MultimediaLinkViewModel selected)
        {
            var filename = _tempFileManager.GetContentFileName(selected.MultimediaID, selected.Extension);

            if (!string.IsNullOrWhiteSpace(filename))
            {
                SystemUtils.ShellExecute(filename);
            }
        }
コード例 #3
0
        public LinkedMultimediaItemsControl(MultimediaLinkViewModel viewModel)
        {
            InitializeComponent();
            this.DataContext = viewModel;

            this.MultimediaID = viewModel.MultimediaID;
            var service = new SupportService(User);

            var mm = service.GetMultimedia(MultimediaID);

            var items = service.ListItemsLinkedToMultimedia(MultimediaID);
            var model = new ObservableCollection<ViewModelBase>();

            foreach (MultimediaLinkedItem item in items) {
                if ( !string.IsNullOrWhiteSpace(item.CategoryName)) {
                    LookupType t;
                    if (Enum.TryParse<LookupType>(item.CategoryName, out t)) {
                        var vm = PluginManager.Instance.GetViewModel(t, item.IntraCatID);
                        if (vm!= null) {
                            model.Add(vm);
                            vm.Tag = t;
                        }
                    }
                }
            }

            lvw.MouseRightButtonUp += new MouseButtonEventHandler(lvw_MouseRightButtonUp);

            ListViewDragHelper.Bind(lvw, (dragged) => {

                if (dragged.Tag is LookupType) {
                    var lookupType = (LookupType) dragged.Tag;
                    var plugin = PluginManager.Instance.GetLookupTypeOwner(lookupType);

                    if (plugin != null) {
                        var data = new DataObject("Pinnable", dragged);
                        var pinnable = new PinnableObject(plugin.Name, lookupType, dragged.ObjectID.Value);
                        data.SetData(PinnableObject.DRAG_FORMAT_NAME, pinnable);
                        data.SetData(DataFormats.Text, dragged.DisplayLabel);
                        return data;
                    }
                }
                return null;
            });

            lvw.ItemsSource = model;
            CollectionView myView = (CollectionView)CollectionViewSource.GetDefaultView(lvw.ItemsSource);

            myView.SortDescriptions.Add(new SortDescription("Tag", ListSortDirection.Ascending));
            myView.SortDescriptions.Add(new SortDescription("DisplayLabel", ListSortDirection.Ascending));

            myView.GroupDescriptions.Add(new LinkedItemGroupDescription());
        }
コード例 #4
0
        private void DisplayMultimedia(MultimediaLinkViewModel selected)
        {
            if (selected != null)
            {
                JobExecutor.QueueJob(() => {
                    BitmapSource image = null;
                    try {
                        string filename       = _tempFileManager.GetContentFileName(selected.MultimediaID, selected.Extension);
                        selected.TempFilename = filename;
                        image = GraphicsUtils.LoadImageFromFile(filename);
                        if (image != null)
                        {
                            imgPreview.InvokeIfRequired(() => {
                                imgPreview.Stretch          = Stretch.Uniform;
                                imgPreview.StretchDirection = StretchDirection.DownOnly;
                                imgPreview.Source           = image;
                                gridInfo.DataContext        = image;
                                FileInfo f = new FileInfo(filename);

                                if (f.Length != selected.SizeInBytes)
                                {
                                    selected.SuspendChangeMonitoring = true;
                                    selected.SizeInBytes             = (int)f.Length;
                                    selected.SuspendChangeMonitoring = false;
                                }

                                lblImageInfo.Content = string.Format("{0}x{1}  {2} DPI  {3}", image.PixelWidth, image.PixelHeight, image.DpiX, ByteLengthConverter.FormatBytes(f.Length));
                                lblFilename.Content  = string.Format("Filename: {0}", filename);
                            });
                        }
                    } finally {
                        if (image == null)
                        {
                            imgPreview.InvokeIfRequired(() => {
                                imgPreview.Source    = null;
                                lblImageInfo.Content = "No image";
                                lblFilename.Content  = "";
                            });
                        }
                    }
                });
            }
            else
            {
                imgPreview.Source    = null;
                lblFilename.Content  = "";
                lblImageInfo.Content = "";
            }
        }
コード例 #5
0
        private void SaveMultimedia(MultimediaLinkViewModel selected)
        {
            if (selected == null)
            {
                return;
            }

            var dlg = new SaveFileDialog();

            dlg.DefaultExt = selected.Extension;
            dlg.FileName   = selected.Name + "." + selected.Extension;
            if (dlg.ShowDialog() == true)
            {
                var filename = _tempFileManager.GetContentFileName(selected.MultimediaID, selected.Extension);
                var finfo    = new FileInfo(filename);
                finfo.CopyTo(dlg.FileName);
            }
        }
コード例 #6
0
        private void DeleteSingleMultimedia(MultimediaLinkViewModel selected)
        {
            if (selected == null)
            {
                return;
            }

            if (this.Question(string.Format("Are you sure you wish to permanently delete '{0}'?", selected.Name), "Delete multimedia?"))
            {
                var index = _model.IndexOf(selected);
                _model.Remove(selected);
                if (index >= 0 && _model.Count > 0)
                {
                    _model[index].IsSelected = true;
                }

                RegisterUniquePendingChange(new DeleteMultimediaCommand(selected.MultimediaID));
            }
        }
コード例 #7
0
        private void ShowMultimediaProperties(MultimediaLinkViewModel selected)
        {
            if (selected == null)
            {
                return;
            }
            if (selected.MultimediaID < 0)
            {
                ErrorMessage.Show("You must first apply the changes before editing the details of this item!");
                return;
            }
            var service = new SupportService(User);
            var model   = service.GetMultimedia(selected.MultimediaID);

            if (model != null)
            {
                var            detailsControl = new MultimediaDetails(model, User);
                IBioLinkPlugin plugin         = PluginManager.Instance.GetPluginByName("Tools");
                PluginManager.Instance.AddNonDockableContent(plugin, detailsControl, string.Format("Multimedia details [{0}]", model.MultimediaID), SizeToContent.Manual);
            }
        }
コード例 #8
0
 private void AddNewLinkFromExternalLink(MultimediaLink externalLink)
 {
     if (externalLink != null) {
         // Link to existing multimedia
         var model = new MultimediaLink();
         model.MultimediaID = externalLink.MultimediaID;
         model.MultimediaLinkID = NewLinkID();
         model.Name = externalLink.Name;
         model.Extension = externalLink.Extension;
         var viewModel = new MultimediaLinkViewModel(model);
         GenerateThumbnail(viewModel, THUMB_SIZE);
         _model.Add(viewModel);
         RegisterPendingChange(new InsertMultimediaLinkCommand(model, CategoryType, Owner));
     }
 }
コード例 #9
0
        private void AddNew()
        {
            var dlg = new OpenFileDialog();

            dlg.Filter      = "All files (*.*)|*.*";
            dlg.Multiselect = true;
            if (dlg.ShowDialog().ValueOrFalse())
            {
                foreach (string filename in dlg.FileNames)
                {
                    FileInfo finfo = new FileInfo(filename);
                    if (finfo.Exists)
                    {
                        MultimediaLink          model     = null;
                        MultimediaLinkViewModel viewModel = null;
                        Multimedia duplicate = null;
                        var        action    = CheckDuplicate(finfo, out duplicate);
                        switch (action)
                        {
                        case MultimediaDuplicateAction.Cancel:
                            // Do nothing
                            break;

                        case MultimediaDuplicateAction.NoDuplicate:
                        case MultimediaDuplicateAction.InsertDuplicate:
                            // Insert new multimedia and new link
                            model = new MultimediaLink();
                            model.MultimediaID     = NextNewId();
                            model.MultimediaLinkID = model.MultimediaID;
                            if (finfo.Name.Contains("."))
                            {
                                model.Name      = finfo.Name.Substring(0, finfo.Name.LastIndexOf("."));
                                model.Extension = finfo.Extension.Substring(1);
                            }
                            else
                            {
                                model.Name = finfo.Name;
                            }
                            viewModel = new MultimediaLinkViewModel(model);
                            _tempFileManager.CopyToTempFile(viewModel.MultimediaID, filename);
                            _model.Add(viewModel);
                            RegisterPendingChange(new InsertMultimediaCommand(model, _tempFileManager.GetContentFileName(viewModel.MultimediaID, finfo.Extension.Substring(1))));
                            break;

                        case MultimediaDuplicateAction.UseExisting:
                            // Should never get here!
                            break;

                        case MultimediaDuplicateAction.ReplaceExisting:
                            // register an update for the multimedia,
                            // and insert a new link
                            // Link to existing multimedia
                            model = new MultimediaLink();
                            model.MultimediaID     = duplicate.MultimediaID;
                            model.MultimediaLinkID = -1;
                            model.Name             = duplicate.Name;
                            model.Extension        = duplicate.FileExtension;
                            viewModel = new MultimediaLinkViewModel(model);
                            _model.Add(viewModel);
                            _tempFileManager.CopyToTempFile(viewModel.MultimediaID, filename);
                            RegisterPendingChange(new UpdateMultimediaBytesCommand(model, filename));
                            break;
                        }

                        if (viewModel != null)
                        {
                            viewModel.IsSelected = true;
                        }
                    }
                }
            }
        }
コード例 #10
0
        private void DisplayMultimedia(MultimediaLinkViewModel selected)
        {
            if (selected != null) {
                JobExecutor.QueueJob(() => {
                    string filename = _tempFileManager.GetContentFileName(selected.MultimediaID, selected.Extension);
                    var image = GraphicsUtils.LoadImageFromFile(filename);
                    imgPreview.InvokeIfRequired(() => {
                        imgPreview.Stretch = Stretch.Uniform;
                        imgPreview.StretchDirection = StretchDirection.DownOnly;
                        imgPreview.Source = image;
                        gridInfo.DataContext = image;
                        FileInfo f = new FileInfo(filename);
                        lblImageInfo.Content = string.Format("{0}x{1}  {2} DPI  {3}", image.PixelWidth, image.PixelHeight, image.DpiX, ByteLengthConverter.FormatBytes(f.Length));
                    });

                });
            } else {
                imgPreview.Source = null;
                lblImageInfo.Content = "";
            }
        }
コード例 #11
0
        private void AddNew()
        {
            var dlg = new OpenFileDialog();
            dlg.Filter = "All files (*.*)|*.*";
            dlg.Multiselect = true;
            if (dlg.ShowDialog().ValueOrFalse()) {
                foreach (string filename in dlg.FileNames) {
                    FileInfo finfo = new FileInfo(filename);
                    if (finfo.Exists) {
                        MultimediaLink model = null;
                        MultimediaLinkViewModel viewModel = null;
                        Multimedia duplicate = null;
                        var action = CheckDuplicate(finfo, out duplicate);
                        switch (action) {
                            case MultimediaDuplicateAction.Cancel:
                                // Do nothing
                                break;
                            case MultimediaDuplicateAction.NoDuplicate:
                            case MultimediaDuplicateAction.InsertDuplicate:
                                // Insert new multimedia and new link
                                model = new MultimediaLink();
                                model.MultimediaID = NextNewId();
                                model.MultimediaLinkID = model.MultimediaID;
                                if (finfo.Name.Contains(".")) {
                                    model.Name = finfo.Name.Substring(0, finfo.Name.LastIndexOf("."));
                                    model.Extension = finfo.Extension.Substring(1);
                                } else {
                                    model.Name = finfo.Name;
                                }
                                viewModel = new MultimediaLinkViewModel(model);
                                _tempFileManager.CopyToTempFile(viewModel.MultimediaID, filename);
                                _model.Add(viewModel);
                                RegisterPendingChange(new InsertMultimediaCommand(model, _tempFileManager.GetContentFileName(viewModel.MultimediaID, finfo.Extension.Substring(1))));
                                break;
                            case MultimediaDuplicateAction.UseExisting:
                                // Should never get here!
                                break;
                            case MultimediaDuplicateAction.ReplaceExisting:
                                // register an update for the multimedia,
                                // and insert a new link
                                // Link to existing multimedia
                                model = new MultimediaLink();
                                model.MultimediaID = duplicate.MultimediaID;
                                model.MultimediaLinkID = -1;
                                model.Name = duplicate.Name;
                                model.Extension = duplicate.FileExtension;
                                viewModel = new MultimediaLinkViewModel(model);
                                _model.Add(viewModel);
                                _tempFileManager.CopyToTempFile(viewModel.MultimediaID, filename);
                                RegisterPendingChange(new UpdateMultimediaBytesCommand(model, filename));
                                break;
                        }

                        if (viewModel != null) {
                            viewModel.IsSelected = true;
                        }
                    }
                }
            }
        }
コード例 #12
0
 private void ShowLinkedItems(MultimediaLinkViewModel selected)
 {
     if (selected != null) {
         selected.Icon = GraphicsUtils.GenerateThumbnail(selected.TempFilename, 48);
         var plugin = PluginManager.Instance.PluginByName("Tools");
         PluginManager.Instance.AddNonDockableContent(plugin, new LinkedMultimediaItemsControl(selected), "Items linked to multimedia " + selected.MultimediaID, SizeToContent.Manual);
     }
 }
コード例 #13
0
        private void ReloadMultimediaPanel(List<MultimediaLink> data)
        {
            JobExecutor.QueueJob(() => {
                _model = new ObservableCollection<MultimediaLinkViewModel>(data.ConvertAll((item) => {
                    MultimediaLinkViewModel viewmodel = null;
                    this.InvokeIfRequired(() => {
                        viewmodel = new MultimediaLinkViewModel(item);
                        viewmodel.DataChanged += new DataChangedHandler((m) => {
                            RegisterUniquePendingChange(new UpdateMultimediaLinkCommand(viewmodel.Model, CategoryType));
                        });
                    });
                    return viewmodel;
                }));
                this.InvokeIfRequired(() => {
                    this.thumbList.ItemsSource = _model;
                });

                foreach (MultimediaLinkViewModel item in _model) {
                    this.BackgroundInvoke(() => {
                        GenerateThumbnail(item, THUMB_SIZE);
                    });
                }
            });
        }
コード例 #14
0
 private void SaveAs(MultimediaLinkViewModel selected)
 {
     var dlg = new Microsoft.Win32.SaveFileDialog();
     var filename = string.Format("{0}.{1}", selected.Name, selected.Extension);
     dlg.FileName = filename;
     if (dlg.ShowDialog() == true) {
         var srcFile = _tempFileManager.GetContentFileName(selected.MultimediaID, selected.Extension);
         File.Copy(srcFile, dlg.FileName);
         InfoBox.Show("Item has been saved to " + dlg.FileName, "File saved", this);
     }
 }
コード例 #15
0
        private void AddMultimediaFromFile(string filename)
        {
            if (IsReadOnly) {
                return;
            }

            if (string.IsNullOrWhiteSpace(filename)) {
                return;
            }

            FileInfo finfo = new FileInfo(filename);
            if (finfo.Exists) {
                MultimediaLink model = null;
                MultimediaLinkViewModel viewModel = null;
                Multimedia duplicate = null;
                var action = CheckDuplicate(finfo, out duplicate);
                switch (action) {
                    case MultimediaDuplicateAction.Cancel:
                        // Do nothing
                        break;
                    case MultimediaDuplicateAction.NoDuplicate:
                    case MultimediaDuplicateAction.InsertDuplicate:
                        // Insert new multimedia and new link
                        model = new MultimediaLink();
                        model.MultimediaID = NextNewId();
                        model.MultimediaLinkID = model.MultimediaID;
                        if (finfo.Name.Contains(".")) {
                            model.Name = finfo.Name.Substring(0, finfo.Name.LastIndexOf("."));
                            model.Extension = finfo.Extension.Substring(1);
                        } else {
                            model.Name = finfo.Name;
                        }
                        model.SizeInBytes = (int)finfo.Length;

                        viewModel = new MultimediaLinkViewModel(model);
                        viewModel.Thumbnail = GraphicsUtils.GenerateThumbnail(filename, THUMB_SIZE);
                        _tempFileManager.CopyToTempFile(viewModel.MultimediaID, filename);
                        _model.Add(viewModel);
                        RegisterPendingChange(new InsertMultimediaCommand(model, _tempFileManager.GetContentFileName(viewModel.MultimediaID, finfo.Extension.Substring(1))));
                        RegisterPendingChange(new InsertMultimediaLinkCommand(model, CategoryType, Owner));
                        break;
                    case MultimediaDuplicateAction.UseExisting:
                        // Link to existing multimedia
                        model = new MultimediaLink();
                        model.MultimediaID = duplicate.MultimediaID;
                        model.MultimediaLinkID = NewLinkID();
                        model.Name = duplicate.Name;
                        model.Extension = duplicate.FileExtension;
                        viewModel = new MultimediaLinkViewModel(model);
                        GenerateThumbnail(viewModel, THUMB_SIZE);
                        _model.Add(viewModel);
                        RegisterPendingChange(new InsertMultimediaLinkCommand(model, CategoryType, Owner));
                        break;
                    case MultimediaDuplicateAction.ReplaceExisting:
                        // register an update for the multimedia,
                        // and insert a new link
                        // Link to existing multimedia
                        model = new MultimediaLink();
                        model.MultimediaID = duplicate.MultimediaID;
                        model.MultimediaLinkID = NewLinkID();
                        model.Name = duplicate.Name;
                        model.Extension = duplicate.FileExtension;
                        viewModel = new MultimediaLinkViewModel(model);
                        GenerateThumbnail(viewModel, THUMB_SIZE);
                        _model.Add(viewModel);
                        _tempFileManager.CopyToTempFile(viewModel.MultimediaID, filename);
                        RegisterPendingChange(new UpdateMultimediaBytesCommand(model, filename));
                        RegisterPendingChange(new InsertMultimediaLinkCommand(model, CategoryType, Owner));
                        break;
                }

                if (viewModel != null) {
                    viewModel.IsSelected = true;
                    thumbList.SelectedItem = viewModel;
                }
            }
        }
コード例 #16
0
 private void ViewMultimedia(MultimediaLinkViewModel selected)
 {
     var filename = _tempFileManager.GetContentFileName(selected.MultimediaID, selected.Extension);
     if (!string.IsNullOrWhiteSpace(filename)) {
         SystemUtils.ShellExecute(filename);
     }
 }
コード例 #17
0
 private void ShowMultimediaProperties(MultimediaLinkViewModel selected)
 {
     if (selected == null) {
         return;
     }
     if (selected.MultimediaID < 0) {
         ErrorMessage.Show("You must first apply the changes before editing the details of this item!");
         return;
     }
     var service = new SupportService(User);
     var model = service.GetMultimedia(selected.MultimediaID);
     if (model != null) {
         var detailsControl = new MultimediaDetails(model, User);
         IBioLinkPlugin plugin = PluginManager.Instance.GetPluginByName("Tools");
         PluginManager.Instance.AddNonDockableContent(plugin, detailsControl, string.Format("Multimedia details [{0}]", model.MultimediaID), SizeToContent.Manual);
     }
 }
コード例 #18
0
        private void SaveMultimedia(MultimediaLinkViewModel selected)
        {
            if (selected == null) {
                return;
            }

            var dlg = new SaveFileDialog();
            dlg.DefaultExt = selected.Extension;
            dlg.FileName = selected.Name + "." + selected.Extension;
            if (dlg.ShowDialog() == true) {
                var filename = _tempFileManager.GetContentFileName(selected.MultimediaID, selected.Extension);
                var finfo = new FileInfo(filename);
                finfo.CopyTo(dlg.FileName);
            }
        }
コード例 #19
0
        private void DisplayMultimedia(MultimediaLinkViewModel selected)
        {
            if (selected != null) {
                JobExecutor.QueueJob(() => {
                    BitmapSource image = null;
                    try {
                        string filename = _tempFileManager.GetContentFileName(selected.MultimediaID, selected.Extension);
                        selected.TempFilename = filename;
                        image = GraphicsUtils.LoadImageFromFile(filename);
                        if (image != null) {
                            imgPreview.InvokeIfRequired(() => {
                                imgPreview.Stretch = Stretch.Uniform;
                                imgPreview.StretchDirection = StretchDirection.DownOnly;
                                imgPreview.Source = image;
                                gridInfo.DataContext = image;
                                FileInfo f = new FileInfo(filename);

                                if (f.Length != selected.SizeInBytes) {
                                    selected.SuspendChangeMonitoring = true;
                                    selected.SizeInBytes = (int) f.Length;
                                    selected.SuspendChangeMonitoring = false;
                                }

                                lblImageInfo.Content = string.Format("{0}x{1}  {2} DPI  {3}", image.PixelWidth, image.PixelHeight, image.DpiX, ByteLengthConverter.FormatBytes(f.Length));
                                lblFilename.Content = string.Format("Filename: {0}", filename);
                            });
                        }
                    } finally {
                        if (image == null) {
                            imgPreview.InvokeIfRequired(() => {
                                imgPreview.Source = null;
                                lblImageInfo.Content = "No image";
                                lblFilename.Content = "";
                            });
                        }
                    }

                });
            } else {
                imgPreview.Source = null;
                lblFilename.Content = "";
                lblImageInfo.Content = "";
            }
        }
コード例 #20
0
        private void DeleteSingleMultimedia(MultimediaLinkViewModel selected)
        {
            if (selected == null) {
                return;
            }

            if (this.Question(string.Format("Are you sure you wish to permanently delete '{0}'?", selected.Name), "Delete multimedia?")) {
                var index = _model.IndexOf(selected);
                _model.Remove(selected);
                if (index >= 0 && _model.Count > 0) {
                    _model[index].IsSelected = true;
                }

                RegisterUniquePendingChange(new DeleteMultimediaCommand(selected.MultimediaID));
            }
        }
コード例 #21
0
 private void GenerateThumbnail(MultimediaLinkViewModel item, int maxDimension)
 {
     string filename = _tempFileManager.GetContentFileName(item.MultimediaID, item.Extension);
     item.TempFilename = filename;
     this.InvokeIfRequired(() => {
         item.Thumbnail = GraphicsUtils.GenerateThumbnail(filename, maxDimension);
     });
 }
コード例 #22
0
ファイル: MultimediaLinkTooltip.cs プロジェクト: kehh/biolink
 public MultimediaLinkTooltip(MultimediaLinkViewModel viewModel)
     : base(viewModel.ObjectID.Value, viewModel)
 {
 }