Ejemplo n.º 1
0
        private bool ReadSlb(string filename)
        {
            if (!SlideLibObject.IsSlideLibrary(filename) ||
                !File.Exists(filename)
                )
            {
                return(false);
            }

            FileInfo f = new FileInfo(filename);

            if (f.Length < _slbHeaderLength)
            {
                return(false);
            }
            byte [] content = File.ReadAllBytes(filename);
            // Read Header
            // Check if it is really an AutoCAD slide file
            string st = System.Text.Encoding.Default.GetString(content, 0, _slbHeaderSignature.Length);

            if (st != _slbHeaderSignature)
            {
                return(false);
            }
            // Load Slides
            List <int> indexes = new List <int> ();

            for (int start = _slbHeaderSignatureLength + _slbHeaderSlideEntryLength - 4;; start += _slbHeaderSlideEntryLength)
            {
                int pos = BitConverter.ToInt32(content, start);
                if (pos == 0)
                {
                    break;
                }
                indexes.Add(pos);
            }
            indexes.Add((int)f.Length);
            indexes.RemoveAt(0);

            for (int start = _slbHeaderSignatureLength; indexes.Count > 0; start += _slbHeaderSlideEntryLength, indexes.RemoveAt(0))
            {
                st = System.Text.Encoding.Default.GetString(content, start, _slbHeaderSlideEntryLength - 4);
                st = st.Replace("\0", "");
                int pos = BitConverter.ToInt32(content, start + _slbHeaderSlideEntryLength - 4);
                int sldLength = indexes [0] - pos, i = 1;
                while (sldLength == 0)                   // In case a library has 2 entries for the same slide
                {
                    sldLength = indexes [i++] - pos;
                }
                byte [] sldContent = new byte [sldLength];
                Buffer.BlockCopy(content, pos, sldContent, 0, sldLength);
                _Slides.Add(st, new SlideObject(st, sldContent));
            }

            _FileName = filename;
            return(true);
        }
Ejemplo n.º 2
0
        /// <summary>Reads a single single out of a Slide Library.</summary>
        /// <param name="slbFileName">Slide library file name.</param>
        /// <param name="slideName">Slide name to extract.</param>
        public static SlideObject LoadSlideFromLibrary(string slbFileName, string slideName)
        {
            SlideLibObject slb = new SlideLibObject();

            if (!slb.Load(slbFileName))
            {
                return(null);
            }
            return(slb._Slides.ContainsKey(slideName) ? slb._Slides [slideName] : null);
        }
 /// <summary>Reads a single single out of a Slide Library.</summary>
 /// <param name="slbFileName">Slide library file name.</param>
 /// <param name="slideName">Slide name to extract.</param>
 public static SlideObject LoadSlideFromLibrary(string slbFileName, string slideName)
 {
     SlideLibObject slb =new SlideLibObject () ;
     if ( !slb.Load (slbFileName) )
         return (null) ;
     return (slb._Slides.ContainsKey (slideName) ? slb._Slides [slideName] : null) ;
 }
 public SlmProperties(SlideObject sld, SlideLibObject slb = null)
     : base()
 {
     if (slb != null)
     {
         slbName = slb._Name;
         slbFileName = slb._FileName;
         slbSize = slb._FileLength;
         slbNbSlide = slb._Slides.Count;
         slbVersion = "1.0";
     }
     if (sld != null)
     {
         sldName = sld._Name;
         sldFileName = sld._FileName;
         sldSize = sld._FileLength;
         sldWidth = (int)sld._Size.Width;
         sldHeight = (int)sld._Size.Height;
         sldVersion = sld._Version.ToString("#.0#");
     }
 }
        private void OpenLibrary_Click(object sender, RoutedEventArgs e)
        {
            e.Handled = true;
            if (_dirty)
            {
                if (System.Windows.MessageBox.Show("Save Library first?", "Slm", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
                {
                    if (!CheckLibraryFileName())
                        return;
                    _slideLib.Save();
                }
            }
            // Clear / New library
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
            dlg.DefaultExt = ".slb"; // Default file extension
            dlg.Filter = "AutoCAD Slide Library|*.slb|AutoCAD Slide|*.sld"; // Filter files by extension
            Nullable<bool> result = dlg.ShowDialog();
            if (result == false)
                return;
            switch (System.IO.Path.GetExtension(dlg.FileName).ToLower())
            {
                case ".slb":
                    _slideLib = new SlideLibObject(dlg.FileName);
                    break;
                case ".sld":
                    _slide = new SlideObject(dlg.FileName);
                    break;
            }
            GenerateBadges();
            _dirty = false;

            preview.Slide = null;
            propertyGrid.SelectedObject = new SlmProperties(null, _slideLib);
        }
        private void NewLibrary_Click(object sender, RoutedEventArgs e)
        {
            e.Handled = true;
            if (_dirty)
            {
                if (System.Windows.MessageBox.Show("Save Library first?", "Slm", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
                {
                    if (!CheckLibraryFileName())
                        return;
                    _slideLib.Save();
                }
            }
            // Clear / New library
            _slideLib = new SlideLibObject();
            Library.ItemsSource = new ObservableCollection<SlmVignette>();
            Library.Items.Refresh();
            _dirty = false;

            preview.Slide = null;
            propertyGrid.SelectedObject = new SlmProperties(null, _slideLib);
        }
        private ObservableCollection<SlmVignette> MergeAndGenerateBadges(string[] files)
        {
            Point pt = Library.PointToScreen(new Point(0, 0));
            _margins = new Thickness(pt.X, pt.Y, pt.X + Library.ActualWidth, pt.Y + Library.ActualHeight);

            _waitThread = new Thread(this.RunWaitThread);
            _waitThread.IsBackground = true;
            _waitThread.SetApartmentState(ApartmentState.STA);
            _waitThread.Start();
            Thread.Sleep(0);

            ObservableCollection<SlmVignette> newItems = new ObservableCollection<SlmVignette>();
            ObservableCollection<SlmVignette> items = new ObservableCollection<SlmVignette>();
            if (Library.ItemsSource != null)
                items = new ObservableCollection<SlmVignette>((IEnumerable<SlmVignette>)Library.ItemsSource);
            foreach (string fileName in files)
            {
                if (SlideLibObject.IsSlideLibrary(fileName))
                {
                    SlideLibObject slb = new SlideLibObject(fileName);
                    //_slideLib._Slides =_slideLib._Slides.Concat (slb._Slides).GroupBy (d => d.Key)
                    //	.ToDictionary (d => d.Key, d => d.First ().Value) ;
                    foreach (KeyValuePair<string, SlideObject> slide in slb._Slides)
                    {
                        string name = slide.Key;
                        if (_slideLib._Slides.ContainsKey(slide.Key))
                        {
                            for (int i = 0; ; i++)
                            {
                                string st = name + i;
                                if (!_slideLib._Slides.ContainsKey(st))
                                {
                                    name = st;
                                    break;
                                }
                            }
                        }
                        _slideLib._Slides.Add(name, slide.Value);

                        SlmVignette badge = new SlmVignette()
                        {
                            Name = name,
                            Type = slide.Value._Size.Width + "x" + slide.Value._Size.Height,
                            Image = slide.Value.Export(70, 70)
                        };
                        items.Add(badge);
                        newItems.Add(badge);
                    }
                    _dirty = true;
                }
                if (SlideObject.IsSlide(fileName) && !_slideLib._Slides.ContainsKey(System.IO.Path.GetFileNameWithoutExtension(fileName)))
                {
                    SlideObject sld = new SlideObject(fileName);
                    sld._Name = System.IO.Path.GetFileNameWithoutExtension(fileName);
                    _slideLib._Slides.Add(sld._Name, sld);
                    _dirty = true;

                    SlmVignette badge = new SlmVignette()
                    {
                        Name = sld._Name,
                        Type = sld._Size.Width + "x" + sld._Size.Height,
                        Image = sld.Export(70, 70)
                    };
                    items.Add(badge);
                    newItems.Add(badge);
                }
                Thread.Sleep(0);
            }

            Library.ItemsSource = items;
            Library.Items.Refresh();

            Thread.Sleep(200);
            while (_waitDialog == null)
                Thread.Sleep(100);
            _waitDialog.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
            {
                _waitDialog.Close();
            }));
            if (_waitThread.IsAlive)
                _waitThread.Abort();

            return (newItems);
        }