Пример #1
0
        public AddEditTypeImageViewModel(Window window, ITypeImageService images, bool isAddMode)
        {
            Window = window;
            if (window != null)
            {
                window.Title = $"{(isAddMode ? "Edit" : "Add")} Image";
            }

            Window.DataContext = this;

            IsAddMode  = isAddMode;
            imageError = isAddMode ? ImageError.NotSpecified : ImageError.NoError;
            typeError  = isAddMode ? TypeError.NotSpecified : TypeError.NoError;

            Accept = new DelegateCommand(e => CloseDialog(true), c => IsValid);
            Reject = new DelegateCommand(e => CloseDialog(false));
            Browse = new DelegateCommand(BrowseForImageFiles);

            ImageService = images;

            UpdateErrorMessage(false);

            PropertyChanged += (sender, e) =>
            {
                if (e.PropertyName == "FileName")
                {
                    LoadImageFromFileName(FileName);
                }
            };
        }
        public AddEditTypeImageViewModel(Window window, ITypeImageService images, bool isAddMode)
        {
            this.window = window;
            if (window != null)
            {
                window.Title = string.Format("{0} Image", isAddMode ? "Edit" : "Add");
            }

            this.window.DataContext = this;

            _isAddMode = isAddMode;
            imageError = isAddMode ? ImageError.NotSpecified : ImageError.NoError;
            typeError = isAddMode ? TypeError.NotSpecified : TypeError.NoError;

            Accept = new DelegateCommand(e => CloseDialog(true), c => IsValid);
            Reject = new DelegateCommand(e => CloseDialog(false));
            Browse = new DelegateCommand(BrowseForImageFiles);

            ImageService = images;

            UpdateErrorMessage(false);

            PropertyChanged += (sender, e) =>
            {
                if (e.PropertyName == "FileName")
                {
                    LoadImageFromFileName(FileName);
                }
            };
        }
Пример #3
0
        private async Task HandleErrorAsync(ImageError error)
        {
            SetMemberConfig(Context.User.Id);
            var imageErrors = _imageCommandTexts[Context.User.Id]["errors"] as Dictionary <string, object>;

            var msg = error switch
            {
                ImageError.LengthTooShort => imageErrors["length_too_short"].ToString(),
                ImageError.LengthTooLong => imageErrors["length_too_long"].ToString(),
                ImageError.ImageNotFound => imageErrors["no_result"].ToString(),
                _ => string.Empty
            };

            if (!string.IsNullOrEmpty(msg))
            {
                await Context.Channel.SendMessageAsync(msg);
            }
        }
    }
Пример #4
0
        private void LoadImageFromFileName(string fileName)
        {
            var oldImageError = imageError;

            try
            {
                // Check file exists, it should!
                var fi = new FileInfo(fileName);
                if (fi.Exists)
                {
                    var i = new BitmapImage();
                    i.BeginInit();
                    i.UriSource = new Uri(fileName, UriKind.RelativeOrAbsolute);
                    i.EndInit();

                    Image = i;

                    // Some sanity checking.
                    imageError = i.Width <= 128 && i.Height <= 128 ? ImageError.NoError : ImageError.TooLarge;
                }
                else
                {
                    Image      = null;
                    imageError = ImageError.NotFound;
                }
            }
            catch (Exception)
            {
                Image      = null;
                imageError = ImageError.Unknown;
            }

            if (imageError != oldImageError)
            {
                UpdateErrorMessage(true);
            }
        }
        private void LoadImageFromFileName(string fileName)
        {
            var oldImageError = imageError;

            try
            {
                // Check file exists, it should!
                var fi = new FileInfo(fileName);
                if (fi.Exists)
                {
                    var i = new BitmapImage();
                    i.BeginInit();
                    i.UriSource = new Uri(fileName, UriKind.RelativeOrAbsolute);
                    i.EndInit();

                    Image = i;

                    // Some sanity checking.
                    imageError = i.Width <= 128 && i.Height <= 128 ? ImageError.NoError : ImageError.TooLarge;
                }
                else
                {
                    Image = null;
                    imageError = ImageError.NotFound;
                }
            }
            catch (Exception)
            {
                Image = null;
                imageError = ImageError.Unknown;
            }

            if (imageError != oldImageError)
            {
                UpdateErrorMessage(true);
            }
        }
Пример #6
0
        /// <summary>
        /// Creates a flow document of the report data
        /// </summary>
        /// <returns></returns>
        /// <exception cref="ArgumentException">Flow document must have a specified page height</exception>
        /// <exception cref="ArgumentException">Flow document must have a specified page width</exception>
        /// <exception cref="ArgumentException">"Flow document must have only one ReportProperties section, but it has {0}"</exception>
        public FlowDocument CreateFlowDocument()
        {
            MemoryStream mem = new MemoryStream();

            byte[] buf = Encoding.UTF8.GetBytes(_xamlData);
            mem.Write(buf, 0, buf.Length);
            mem.Position = 0;
            FlowDocument res = XamlReader.Load(mem) as FlowDocument;

            if (res.PageHeight == double.NaN)
            {
                throw new ArgumentException("Flow document must have a specified page height");
            }
            if (res.PageWidth == double.NaN)
            {
                throw new ArgumentException("Flow document must have a specified page width");
            }

            // remember original values
            _pageHeight = res.PageHeight;
            _pageWidth  = res.PageWidth;

            // search report properties
            DocumentWalker             walker     = new DocumentWalker();
            List <SectionReportHeader> headers    = walker.Walk <SectionReportHeader>(res);
            List <SectionReportFooter> footers    = walker.Walk <SectionReportFooter>(res);
            List <ReportProperties>    properties = walker.Walk <ReportProperties>(res);

            if (properties.Count > 0)
            {
                if (properties.Count > 1)
                {
                    throw new ArgumentException(String.Format("Flow document must have only one ReportProperties section, but it has {0}", properties.Count));
                }
                ReportProperties prop = properties[0];
                if (prop.ReportName != null)
                {
                    ReportName = prop.ReportName;
                }
                if (prop.ReportTitle != null)
                {
                    ReportTitle = prop.ReportTitle;
                }
                if (headers.Count > 0)
                {
                    PageHeaderHeight = headers[0].PageHeaderHeight;
                }
                if (footers.Count > 0)
                {
                    PageFooterHeight = footers[0].PageFooterHeight;
                }

                // remove properties section from FlowDocument
                DependencyObject parent = prop.Parent;
                if (parent is FlowDocument)
                {
                    ((FlowDocument)parent).Blocks.Remove(prop); parent = null;
                }
                if (parent is Section)
                {
                    ((Section)parent).Blocks.Remove(prop); parent = null;
                }
            }

            // make height smaller to have enough space for page header and page footer
            res.PageHeight = _pageHeight - _pageHeight * (PageHeaderHeight + PageFooterHeight) / 100d;

            // search image objects
            List <Image> images = new List <Image>();

            walker.Tag            = images;
            walker.VisualVisited += new DocumentVisitedEventHandler(walker_VisualVisited);
            walker.Walk(res);

            // load all images
            foreach (Image image in images)
            {
                if (ImageProcessing != null)
                {
                    ImageProcessing(this, new ImageEventArgs(this, image));
                }
                try
                {
                    if (image.Tag is string)
                    {
                        image.Source = new BitmapImage(new Uri("file:///" + Path.Combine(_xamlImagePath, image.Tag.ToString())));
                    }
                }
                catch (Exception ex)
                {
                    // fire event on exception and check for Handled = true after each invoke
                    if (ImageError != null)
                    {
                        bool handled = false;
                        lock (ImageError)
                        {
                            ImageErrorEventArgs eventArgs = new ImageErrorEventArgs(ex, this, image);
                            foreach (var ed in ImageError.GetInvocationList())
                            {
                                ed.DynamicInvoke(this, eventArgs);
                                if (eventArgs.Handled)
                                {
                                    handled = true; break;
                                }
                            }
                        }
                        if (!handled)
                        {
                            throw;
                        }
                    }
                    else
                    {
                        throw;
                    }
                }
                if (ImageProcessed != null)
                {
                    ImageProcessed(this, new ImageEventArgs(this, image));
                }
                // TODO: find a better way to specify file names
            }

            return(res);
        }
Пример #7
0
 private void mapImage_ImageFailed(object sender, ExceptionRoutedEventArgs e)
 {
     DropShadowPanel1.Visibility = Visibility.Visible;
     ImageError.Begin();
 }