/// <summary> /// Starts a multiple dialog routine (raw data import assistant) /// for reading raw data files into the programs database /// </summary> /// <param name="mainWindow"> /// The <see cref="MainForm"/> to get access to the status label. /// </param> public static void Start(MainForm mainWindow) { try { asciiSetting = new ASCIISettings(); detectionSetting = new DetectionSettings(); var objfrmImportAssistent = new ImportRawDataAssistentDialog(); if (objfrmImportAssistent.ShowDialog() == DialogResult.OK) { OpenFile: if (asciiSetting.FileDialog.ShowDialog() == DialogResult.OK) { // Save filename string filename = asciiSetting.FileDialog.FileName; // Ask the user to use a settings file // and loads it into the importsettings, if true. AskforUsingSettingsFile(); // Save import file asciiSetting.Filename = filename; // Set import mode detectionSetting.ImportType = ImportTypes.Rawdata; var objfrmImportReadFile = new ImportParseFileDialog(ref asciiSetting); ReadFile: DialogResult resultRawData = objfrmImportReadFile.ShowDialog(); if (resultRawData == DialogResult.OK) { var objfrmImportRawDataAssignColumns = new ImportRawDataAssignColumnsDialog(); MakeAssignments: DialogResult resultAssign = objfrmImportRawDataAssignColumns.ShowDialog(); if (resultAssign == DialogResult.OK) { var objfrmImportTrials = new ImportTrialsDialog(ref asciiSetting, ref detectionSetting); CheckTrials: DialogResult resultTrials = objfrmImportTrials.ShowDialog(); if (resultTrials == DialogResult.OK) { var objfrmImportImages = new ImportImagesDialog(ref asciiSetting, ref detectionSetting); DialogResult resultImages = objfrmImportImages.ShowDialog(); if (resultImages == DialogResult.OK) { if (MessageBox.Show( "Would you like to save the import settings ?", Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { SaveImportSettings(); } // Show import splash window asciiSetting.WaitingSplash.RunWorkerAsync(); // Give some time to show the splash ... Application.DoEvents(); // Read log file again, but complete GenerateOgamaRawDataList(-1); // Generate the trials GenerateOgamaSubjectAndTrialList(); // Save the import into ogamas database and the mdf file. bool successful = SaveImportIntoTablesAndDB(); // Create slideshow trials GenerateOgamaSlideshowTrials(detectionSetting, mainWindow); // Calculate Fixations CalculateFixations(mainWindow); // Clear lists SubjectList.Clear(); TrialList.Clear(); RawDataList.Clear(); // Import has finished. asciiSetting.WaitingSplash.CancelAsync(); // Inform user about success. if (successful) { string message = "Import data successfully written to database." + Environment.NewLine + "Please don´t forget to move the stimuli images to the SlideResources subfolder" + "of the experiment, otherwise no images will be shown."; ExceptionMethods.ProcessMessage("Success", message); } else { string message = "Import had errors. Some or all of the import data " + "could not be written the database."; ExceptionMethods.ProcessErrorMessage(message); } } else if (resultImages == DialogResult.Cancel) { goto CheckTrials; } } else if (resultTrials == DialogResult.Cancel) { goto MakeAssignments; } } else if (resultAssign == DialogResult.Cancel) { goto ReadFile; } } else if (resultRawData == DialogResult.Cancel) { goto OpenFile; } } } } catch (Exception ex) { string message = "Something failed during import." + Environment.NewLine + "Please try again with other settings. " + Environment.NewLine + "Error: " + ex.Message; ExceptionMethods.ProcessErrorMessage(message); if (asciiSetting.WaitingSplash.IsBusy) { asciiSetting.WaitingSplash.CancelAsync(); } } }
/// <summary> /// This method calculates the fixations for the subjects /// that are currently imported. /// </summary> /// <param name="mainWindow"> /// The <see cref="MainForm"/> to get access to the status label. /// </param> private static void CalculateFixations(MainForm mainWindow) { mainWindow.StatusLabel.Text = "Calculating Fixations ..."; foreach (SubjectsData subject in SubjectList) { // Get trial data of current subject DataTable trialsTable = Document.ActiveDocument.DocDataSet.TrialsAdapter.GetDataBySubject(subject.SubjectName); // Calculate fixations var calculationObject = new FixationCalculation(); calculationObject.CalcFixations(SampleType.Gaze, subject.SubjectName, trialsTable, null, null); calculationObject.CalcFixations(SampleType.Mouse, subject.SubjectName, trialsTable, null, null); } mainWindow.StatusLabel.Text = "Fixation calculation done ..."; }
/// <summary> /// This static method creates a slide with a sized image /// for each trial and adds it to the slideshow. /// </summary> /// <param name="detectonSettings"> /// The <see cref="DetectionSettings"/> /// used in this import. /// </param> /// <param name="mainWindow"> /// The <see cref="MainForm"/> to get access to the status label. /// </param> public static void GenerateOgamaSlideshowTrials(DetectionSettings detectonSettings, MainForm mainWindow) { // Stores found stimuli files List<string> trialNames = Document.ActiveDocument.ExperimentSettings.SlideShow.GetTrialNames(); foreach (KeyValuePair<int, int> kvp in detectonSettings.TrialSequenceToTrialIDAssignments) { int trialID = kvp.Value; string file = string.Empty; if (detectonSettings.TrialIDToImageAssignments.ContainsKey(trialID)) { file = detectonSettings.TrialIDToImageAssignments[trialID]; } string filename = Path.GetFileNameWithoutExtension(file); // Create slide var stopConditions = new StopConditionCollection { new MouseStopCondition( MouseButtons.Left, true, string.Empty, null, Point.Empty) }; VGImage stimulusImage = null; if (file != string.Empty) { stimulusImage = new VGImage( ShapeDrawAction.None, Pens.Black, Brushes.Black, SystemFonts.MenuFont, Color.White, Path.GetFileName(file), Document.ActiveDocument.ExperimentSettings.SlideResourcesPath, ImageLayout.Zoom, 1f, Document.ActiveDocument.PresentationSize, VGStyleGroup.None, filename, string.Empty, true) { Size = Document.ActiveDocument.PresentationSize }; } var newSlide = new Slide( filename, Color.White, null, stopConditions, null, string.Empty, Document.ActiveDocument.PresentationSize) { Modified = true, MouseCursorVisible = true }; // Only add stimulus if an image exists if (file != string.Empty) { newSlide.VGStimuli.Add(stimulusImage); } else { newSlide.Name = "No stimulus detected"; } // Create trial if (Document.ActiveDocument.ExperimentSettings.SlideShow.GetNodeByID(trialID) != null) { // trialID = int.Parse(Document.ActiveDocument.ExperimentSettings.SlideShow.GetUnusedNodeID()); // var message = string.Format("The trial with the ID:{0} exists already in the slideshow so it will not be created." // + Environment.NewLine + "Delete the trial with this ID in the slideshow design module if you want it to be newly created by the importer, or assign a new ID to the imported data.", trialID); // ExceptionMethods.ProcessMessage("This trial exists already", message); continue; } var newTrial = new Trial(filename, trialID) { Name = filename }; newTrial.Add(newSlide); if (trialNames.Contains(filename) || (filename == string.Empty && trialNames.Contains("No stimulus detected"))) { // Trial already exists continue; } trialNames.Add(filename); // Create slide node var slideNode = new SlideshowTreeNode(newSlide.Name) { Name = trialID.ToString(CultureInfo.InvariantCulture), Slide = newSlide }; // Add slide node to slideshow Document.ActiveDocument.ExperimentSettings.SlideShow.Nodes.Add(slideNode); Document.ActiveDocument.Modified = true; } mainWindow.StatusLabel.Text = "Saving slideshow to file ..."; if (!Document.ActiveDocument.SaveSettingsToFile(Document.ActiveDocument.ExperimentSettings.DocumentFilename)) { ExceptionMethods.ProcessErrorMessage("Couldn't save slideshow to experiment settings."); } mainWindow.StatusLabel.Text = "Refreshing context panel ..."; mainWindow.RefreshContextPanelImageTabs(); mainWindow.StatusLabel.Text = "Ready ..."; mainWindow.StatusProgressbar.Value = 0; }