// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for details. using System; using System.Diagnostics; using System.ComponentModel; using System.Drawing; using System.Globalization; using System.Windows.Forms; using OpenLiveWriter.CoreServices; using OpenLiveWriter.Localization; namespace OpenLiveWriter.PostEditor.PostHtmlEditing { internal class ImageSizePickerControl : ComboBox { public ImageSizePickerControl() { DropDownStyle = ComboBoxStyle.DropDownList; SelectedIndexChanged += new EventHandler(ImageSizePickerComboBox_SelectedIndexChanged); AccessibleName = ControlHelper.ToAccessibleName(Res.Get(StringId.ImgSBImageSize)); } public void Resynchronize(GetScaledImageSizeDelegate scaledImageSizeDelegate) { // record scaled image size delegate _scaledImageSizeDelegate = scaledImageSizeDelegate; // force a full refresh of the items and selection (will cause new callbacks to get // fired for toString -- required to get the scaling right) SelectedImageSize = SelectedImageSize; } protected override void Dispose(bool disposing) { if (disposing) { SelectedIndexChanged -= new EventHandler(ImageSizePickerComboBox_SelectedIndexChanged); } base.Dispose(disposing); } public event EventHandler SelectedImageSizeChanged; public ImageSize SelectedImageSize { get { if (SelectedItem != null) return (SelectedItem as ImageSizeComboItem).ImageSize; else return ImageSize.Unknown; } set { InitializeComboItems(); if (value != ImageSize.Unknown) { foreach (ImageSizeComboItem item in Items) { if (item.ImageSize == value) { SelectedItem = item; return; } } } // unknown is valid, but other items that don't match are a programming error SelectedItem = null; } } private void InitializeComboItems() { Items.Clear(); if (!DesignMode) { Items.Add(new ImageSizeComboItem(ImageSize.Small, Res.Get(StringId.ImgSBSizerSmall), _scaledImageSizeDelegate)); Items.Add(new ImageSizeComboItem(ImageSize.Medium, Res.Get(StringId.ImgSBSizerMedium), _scaledImageSizeDelegate)); Items.Add(new ImageSizeComboItem(ImageSize.Large, Res.Get(StringId.ImgSBSizerLarge), _scaledImageSizeDelegate)); Items.Add(new ImageSizeComboItem(ImageSize.Original, Res.Get(StringId.ImgSBSizerOriginal), _scaledImageSizeDelegate)); } } private void ImageSizePickerComboBox_SelectedIndexChanged(object sender, EventArgs e) { if (SelectedImageSizeChanged != null) SelectedImageSizeChanged(this, e); } private class ImageSizeComboItem { public ImageSizeComboItem(ImageSize imageSize, string displayName, GetScaledImageSizeDelegate scaledImageSizeDelegate) { _imageSize = imageSize; _displayName = displayName; _scaledImageSizeDelegate = scaledImageSizeDelegate; } public ImageSize ImageSize { get { return _imageSize; } } public override string ToString() { if (_scaledImageSizeDelegate != null) { Size scaledSize = _scaledImageSizeDelegate(ImageSize); return String.Format(CultureInfo.InvariantCulture, "{0} ({1}x{2})", _displayName, scaledSize.Width, scaledSize.Height); } else { return _displayName; } } private ImageSize _imageSize; private string _displayName; private GetScaledImageSizeDelegate _scaledImageSizeDelegate; } private GetScaledImageSizeDelegate _scaledImageSizeDelegate; } internal enum ImageSize { Unknown, Small, Medium, Large, Original }; internal delegate Size GetScaledImageSizeDelegate(ImageSize baseSize); }