Changeset 1847


Ignore:
Timestamp:
Aug 20, 2010, 2:59:11 PM (11 years ago)
Author:
kopal
Message:
  • added support for serializing/deserializing pictures into model files
Location:
trunk/CrypPlugins/WorkspaceManager
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/WorkspaceManager/Model/ImageModel.cs

    r1842 r1847  
    55using System.Windows.Media.Imaging;
    66using System.IO;
     7using System.Windows.Media;
    78using System.Windows.Controls;
     9
    810
    911namespace WorkspaceManager.Model
     
    1214    /// This class wraps a image which can be put onto the workspace
    1315    /// </summary>
     16    [Serializable]
    1417    public class ImageModel : VisualElementModel
    1518    {
    1619        private byte[] data = null;
     20        private int height;
     21        private int width;
     22        private int stride;
    1723
    1824        /// <summary>
    1925        /// Get the BitmapImage represented by this ImageModel
    2026        /// </summary>
    21         /// <param name="bytes"></param>
    2227        /// <returns></returns>
    23         public BitmapImage getImage(Byte[] bytes)
     28        public Image getImage()
    2429        {
    25             MemoryStream stream = new MemoryStream(bytes);
    26             BitmapImage image = new BitmapImage();
    27             image.BeginInit();
    28             image.StreamSource = stream;
    29             image.EndInit();
     30            Image image = new Image();           
     31            if (data == null)
     32            {
     33                return image;
     34            }
     35
     36            image.Source = BitmapImage.Create(width,
     37                          height,
     38                          96,
     39                          96,
     40                          System.Windows.Media.PixelFormats.Bgr32,
     41                          null,
     42                          data,
     43                          stride);
    3044            return image;
    3145        }
     
    3448        /// Instantiate a new ImageModel
    3549        /// </summary>
     50        public ImageModel()           
     51        {
     52
     53        }
     54        /// <summary>
     55        /// Instantiate a new ImageModel
     56        /// </summary>
    3657        /// <param name="imageSource"></param>
    3758        public ImageModel(Uri imgUri)
    3859        {
    39             BitmapImage img = new BitmapImage(imgUri);
    40             Stream stream = img.StreamSource;
    41             Byte[] buffer = null;
    42             if (stream != null && stream.Length > 0)
     60            if (imgUri == null)
    4361            {
    44                 using (BinaryReader br = new BinaryReader(stream))
    45                 {
    46                     buffer = br.ReadBytes((Int32)stream.Length);
    47                 }
     62                return;
    4863            }
    4964
    50             this.data = buffer;
     65            BitmapImage bmpImage = new BitmapImage(imgUri) ;
     66            height = bmpImage.PixelHeight;
     67            width = bmpImage.PixelWidth;
     68            PixelFormat format = bmpImage.Format;
     69            stride = width * ((format.BitsPerPixel + 7) / 8);           
     70            byte[] byteImage = new byte[height * stride];
     71            bmpImage.CopyPixels(byteImage, stride, 0);
     72
     73            this.data = byteImage;
    5174        }
    5275    }
  • trunk/CrypPlugins/WorkspaceManager/Model/TextModel.cs

    r1842 r1847  
    99    /// This class wraps a text which can be put to the workspace
    1010    /// </summary>
     11    [Serializable]
    1112    public class TextModel : VisualElementModel
    1213    {
    1314        private string text = null;
     15
     16        /// <summary>
     17        /// Instantiate a new TextModel
     18        /// </summary> 
     19        public TextModel()
     20        {
     21            this.text = "";
     22        }
    1423
    1524        /// <summary>
  • trunk/CrypPlugins/WorkspaceManager/Model/XMLSerialization.cs

    r1791 r1847  
    151151            writer.WriteLine("<type>" + obj.GetType().FullName + "</type>");
    152152            writer.WriteLine("<id>" + obj.GetHashCode() + "</id>");
    153 
     153         
    154154            writer.WriteLine("<members>");
    155155
     
    160160                    string type = obj.GetType().GetField(memberInfo.Name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance).FieldType.FullName;
    161161                    object value = obj.GetType().GetField(memberInfo.Name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance).GetValue(obj);
    162                    
     162
    163163                    writer.WriteLine("<member>");
    164                     writer.WriteLine("<name>" + ReplaceXMLSymbols(memberInfo.Name) + "</name>");                                       
     164                    writer.WriteLine("<name>" + ReplaceXMLSymbols(memberInfo.Name) + "</name>");
    165165                    writer.WriteLine("<type>" + ReplaceXMLSymbols(type) + "</type>");
    166                    
    167                     if(value is System.Collections.IList)
     166
     167                    if (value is System.Byte[])
     168                    {
     169                        byte[] bytes = (byte[])value;
     170                        writer.WriteLine("<value><![CDATA[" + ReplaceXMLSymbols(Convert.ToBase64String(bytes)) + "]]></value>");
     171                    }
     172                    else if (value is System.Collections.IList)
    168173                    {
    169174                        writer.WriteLine("<list>");
     
    207212                        {
    208213                            writer.WriteLine("<value>" + ReplaceXMLSymbols(value.ToString()) + "</value>");
    209                         }                       
     214                        }
    210215                    }
    211216                    else
     
    214219                    }
    215220                    writer.WriteLine("</member>");
    216                 }
    217             }
    218            
    219             writer.WriteLine("</members>");
     221                }
     222            }
     223            writer.WriteLine("</members>");           
    220224            writer.WriteLine("</object>");
    221225            writer.Flush();
     
    230234                    string type = obj.GetType().GetField(memberInfo.Name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance).FieldType.FullName;
    231235                    object value = obj.GetType().GetField(memberInfo.Name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance).GetValue(obj);
    232 
    233                     if (value is System.Collections.IList)
     236                   
     237                    if (value is System.Collections.IList && !(value is System.Byte[]))
    234238                    {
    235239                        foreach (object o in (System.Collections.IList)value)
     
    474478                                BindingFlags.Public |
    475479                                BindingFlags.Instance).SetValue(newObject, result);
     480                        }
     481                        else if (RevertXMLSymbols(membertype.InnerText).Equals("System.Byte[]"))
     482                        {                           
     483                            byte[] bytearray = Convert.FromBase64String(value.InnerText);
     484                           
     485                            newObject.GetType().GetField(RevertXMLSymbols(membername.InnerText),
     486                                BindingFlags.NonPublic |
     487                                BindingFlags.Public |
     488                                BindingFlags.Instance).SetValue(newObject, bytearray);
    476489                        }
    477490                        else
  • trunk/CrypPlugins/WorkspaceManager/View/Container/WorkSpaceEditorView.xaml

    r1837 r1847  
    3333                <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
    3434                    <Canvas Name="root" Background="{StaticResource ResourceKey=GridBrush}" RenderTransformOrigin="0.5, 0.5">
    35                         <Grid Width="{Binding ElementName=MainGrid, Path=ActualWidth}" Height="{Binding ElementName=MainGrid, Path=ActualHeight}">
    36                             <e:UserContentWrapper></e:UserContentWrapper>
    37                         </Grid>
     35                        <Grid Name="UserControlWrapper" Width="{Binding ElementName=MainGrid, Path=ActualWidth}" Height="{Binding ElementName=MainGrid, Path=ActualHeight}"/>
    3836                        <Canvas.LayoutTransform>
    3937                            <ScaleTransform x:Name="Scale" ScaleX="{Binding Source={x:Static p:Settings.Default}, Path=EditScale, Mode=OneWay}" ScaleY="{Binding Source={x:Static p:Settings.Default}, Path=EditScale, Mode=OneWay}"></ScaleTransform>
  • trunk/CrypPlugins/WorkspaceManager/View/Container/WorkSpaceEditorView.xaml.cs

    r1835 r1847  
    5858        public WorkSpaceEditorView(WorkspaceModel WorkspaceModel)
    5959        {
    60             setBaseControl(WorkspaceModel);
     60            setBaseControl(WorkspaceModel);                       
    6161            InitializeComponent();
     62            this.UserControlWrapper.Children.Add(new UserContentWrapper(WorkspaceModel));
    6263        }
    6364
     
    325326        {
    326327            this.Model = WorkspaceModel;
     328            this.UserControlWrapper.Children.Clear();
     329            UserContentWrapper UserContentWrapper = new UserContentWrapper(WorkspaceModel);
     330            this.UserControlWrapper.Children.Add(UserContentWrapper);           
    327331
    328332            foreach (PluginModel model in this.Model.AllPluginModels)
  • trunk/CrypPlugins/WorkspaceManager/View/VisualComponents/ImageWrapper.xaml.cs

    r1837 r1847  
    1212using System.Windows.Navigation;
    1313using System.Windows.Shapes;
     14using WorkspaceManager.Model;
    1415
    1516namespace WorkspaceManager.View.VisualComponents
     
    2324        public Point Position { get; set; }
    2425        private Point previousDragPoint = new Point();
     26        private ImageModel model = null;
    2527
    26         public ImageWrapper(Uri imgUri, Point point)
     28        public ImageWrapper(ImageModel model, Point point)
    2729        {
    28             this.Image = makeImage(imgUri);
     30            this.Image = model.getImage();
    2931            this.Position = point;
     32            model.Position = point;
    3033            InitializeComponent();
    3134            this.MouseMove += new MouseEventHandler(ImageWrapper_MouseMove);
     
    3336            this.RenderTransform = new TranslateTransform(Position.X, Position.Y);
    3437            this.root.Children.Add(Image);
     38            this.model = model;
    3539        }
    3640
     
    4246                (this.RenderTransform as TranslateTransform).X = p.X;
    4347                (this.RenderTransform as TranslateTransform).Y = p.Y;
     48                this.model.Position = p;
    4449            }
    4550        }
     
    5055        }
    5156
    52         private Image makeImage(Uri imgUri)
     57        /*private Image makeImage(Uri imgUri)
    5358        {
    5459            try
     
    6368            }
    6469            return null;
    65         }
     70        }*/
    6671
    6772        public ImageWrapper()
  • trunk/CrypPlugins/WorkspaceManager/View/VisualComponents/UserContentWrapper.xaml.cs

    r1837 r1847  
    1212using System.Windows.Navigation;
    1313using System.Windows.Shapes;
     14using WorkspaceManager.Model;
    1415
    1516namespace WorkspaceManager.View.VisualComponents
     
    2021    public partial class UserContentWrapper : UserControl
    2122    {
     23        public WorkspaceModel Model;
    2224        public List<ImageWrapper> ImageList { get; set; }
    2325        public List<TextBox> TextList { get; set; }
    2426
    25         public UserContentWrapper()
     27        public UserContentWrapper(WorkspaceModel WorkspaceModel)
    2628        {
    2729            InitializeComponent();
     
    2931            ImageList = new List<ImageWrapper>();
    3032            TextList = new List<TextBox>();
     33            this.Model = WorkspaceModel;
     34            foreach (ImageModel ImageModel in WorkspaceModel.AllImageModels)
     35            {
     36                AddImage(ImageModel);
     37            }
    3138        }
    3239
     
    3845        public void AddImage(Uri imgUri, Point point)
    3946        {
    40             ImageWrapper imgWrap = new ImageWrapper(imgUri, point);
     47            ImageModel model = Model.newImageModel(imgUri);
     48            ImageWrapper imgWrap = new ImageWrapper(model, point);
     49            ImageList.Add(imgWrap);
     50            ContentRoot.Children.Add(imgWrap);
     51        }
     52
     53        public void AddImage(ImageModel model)
     54        {
     55            ImageWrapper imgWrap = new ImageWrapper(model, model.Position);
    4156            ImageList.Add(imgWrap);
    4257            ContentRoot.Children.Add(imgWrap);
  • trunk/CrypPlugins/WorkspaceManager/WorkspaceManager.cs

    r1846 r1847  
    166166                GuiLogMessage("Could not save Model:" + ex.ToString(), NotificationLevel.Error);               
    167167            }
     168           
    168169        }
    169170
Note: See TracChangeset for help on using the changeset viewer.