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); }
/// <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); }