private FILMANFileRecord OpenFILMANFile() { OpenFileDialog ofd = new OpenFileDialog(); ofd.Title = "Open a FILMAN file ..."; ofd.AddExtension = true; ofd.DefaultExt = ".fmn"; // Default file extension ofd.Filter = "FILMAN files (.fmn)|*.fmn|All files|*.*"; // Filter files by extension Nullable<bool> result = ofd.ShowDialog(); if (result == false) return null; FILMANInputStream fmTemp; try { fmTemp = new FILMANInputStream(new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read)); } catch (Exception ex) { MessageBox.Show("Unable to read FILMAN file " + ofd.FileName + "." + Environment.NewLine + "Exception: " + ex.Message, "FILMAN error", MessageBoxButton.OK, MessageBoxImage.Error); return null; } FILMANFileRecord ffr = new FILMANFileRecord(); ffr.path = ofd.FileName; ffr.stream = fmTemp; //Now check to see if there is a Header file available string directory = Path.GetDirectoryName(ffr.path); IEnumerable<string> hdrFiles = Directory.EnumerateFiles(directory, "*.hdr"); if (hdrFiles.Count() > 0) //there's a candidate Header file in this directory { HeaderFileReader headerFile = new HeaderFileReader (new FileStream(hdrFiles.First(), FileMode.Open, FileAccess.Read)); ffr.GVDictionary = headerFile.read().GroupVars; //save the GroupVar dictionary headerFile.Dispose(); //closes file } FMFileListItem fli = new FMFileListItem(ffr); ffr.FMFilePointSelector = fli; fli.ErrorCheckReq += new EventHandler(checkForError); checkForError(fli, null); return ffr; }
private void Select_Click(object sender, RoutedEventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Title = "Open a FILMAN file ..."; ofd.AddExtension = true; ofd.DefaultExt = ".fmn"; // Default file extension ofd.Filter = "FILMAN files (.fmn)|*.fmn|All files|*.*"; // Filter files by extension Nullable<bool> result = ofd.ShowDialog(); if (result == false) return; //Open file and make sure it's valid before changing any of the file data, so there's something to fall back to FILMANInputStream fmTemp; try { fmTemp = new FILMANInputStream(new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read)); } catch (Exception ex) { MessageBox.Show("Unable to access FILMAN file " + ofd.FileName + "." + Environment.NewLine + "Exception: " + ex.Message, "FILMAN error", MessageBoxButton.OK, MessageBoxImage.Error); return; } FILMANRecord fmr = fmTemp.read(); //Test read the first record to make sure there is at least one there if (fmr == null) { MessageBox.Show("No records in FILMAN file " + ofd.FileName, "FILMAN error", MessageBoxButton.OK, MessageBoxImage.Error); return; } //Now we can update the user interface with the file particulars fm = fmTemp; // don't update until all possible errors have passed FMFileName = System.IO.Path.GetFileName(ofd.FileName); FileName.Text = FMFileName; Directory.Text = System.IO.Path.GetDirectoryName(ofd.FileName); FileInfo fi = new FileInfo(ofd.FileName); CreationDate.Text = fi.LastWriteTime.ToString("dddd, d MMM yyyy"); Size.Text = (fi.Length / 1024).ToString("#,##0KB"); gp.Title = "FILMAN file: " + FMFileName; StringBuilder s = new StringBuilder(fm.Description(0)); for (int i = 1; i < 6; i++) { string str = fm.Description(i); if (str != null && str != "") s.Append(Environment.NewLine + str); } this.HeaderInfo.Text = s.ToString(); double graphletMax = fmr.Max(); double graphletMin = fmr.Min(); if (fm.IS > 0) { T.IsEnabled = true; F.IsEnabled = true; if (graphletMin >= 0D || graphletMin > -graphletMax * 0.01D) { Pos.IsChecked = true; F.IsChecked = true; } else { PosNeg.IsChecked = true; T.IsChecked = true; } _tmaxMax=(double)fm.ND / fm.IS; Tmin.Text = "0.0"; Tmax.Text = _tmaxMax.ToString("0.0"); _fmaxMax=(double)fm.IS; Fmin.Text = "0.0"; Fmax.Text = _fmaxMax.ToString("0.0"); } else { P.IsChecked = true; T.IsEnabled = false; F.IsEnabled = false; if (graphletMin >= 0D || graphletMin > -graphletMax * 0.01D) Pos.IsChecked = true; else PosNeg.IsChecked = true; } Pmin.Text = "1"; Pmax.Text = fm.ND.ToString("0"); DecimationBox.Text = "1"; OffsetBox.Text = "0"; OffsetBox.IsEnabled = false; IncludeY.IsChecked = true; yAxis.Text = "Y-axis"; scaleToRecsetMax.IsChecked = true; allYMaxValue.Text = Math.Max(graphletMax, -graphletMin).ToString("G5"); ChannelList.Text = "1-" + fm.NC.ToString("0"); AllChannels.IsChecked = true; None.IsChecked = true; Aspect.Text = "1.0"; DefaultLocation.IsChecked = false; }