public LdextinctionControl(LuiConfig Config) : base(Config) { InitializeComponent(); Init(); Beta.ValueChanged += Beta_ValueChanged; SaveData.Click += (sender, e) => SaveOutput(); }
public void ChildrenMatchConfig(LuiConfig config) { // Set all options dialogs to match the given config. foreach (ListViewItem it in OptionsListView.Items) { ((LuiOptionsDialog)it.Tag).MatchConfig(config); } }
void SetChildConfig(LuiConfig config) { // Set all options dialogs to reference & match the given config. foreach (ListViewItem it in OptionsListView.Items) { ((LuiOptionsDialog)it.Tag).Config = config; } }
public AbsorbanceControl(LuiConfig Config) : base(Config) { InitializeComponent(); CurvesView.Graph = Graph; SaveData.Click += (sender, e) => SaveOutput(); SaveData.Enabled = false; ClearBlank.Click += ClearBlank_Click; ClearBlank.Enabled = false; }
public LdalignControl(LuiConfig Config) : base(Config) { InitializeComponent(); Init(); Beta.ValueChanged += Beta_ValueChanged; SaveData.Click += (sender, e) => SaveOutput(); DdgConfigBox.Config = Config; DdgConfigBox.Commander = Commander; DdgConfigBox.AllowZero = false; DdgConfigBox.HandleParametersChanged(this, EventArgs.Empty); }
void LoadConfig_Click(object sender, EventArgs e) { var ofd = new OpenFileDialog { Filter = "XML Files|*.xml", FileName = "config.xml" }; if (ofd.ShowDialog() == DialogResult.OK) { // Update options dialogs to match the new config. // The new config is not instantiated and the old config is not replaced. ChildrenMatchConfig(LuiConfig.FromFile(ofd.FileName)); HandleCanApply(sender, e); } }
public void SetupLuiConfig() { Config = new LuiConfig { ConfigFile = ConfigFile, LogFile = "./log.txt", LogLevel = "DEBUG" }; gpibParameters1 = new GpibProviderParameters { TypeName = "LuiHardware.gpib.NIGpibProvider", Name = "NI PCI Card", BoardNumber = 0 }; gpibParameters2 = new GpibProviderParameters { TypeName = "LuiHardware.gpib.PrologixGpibProvider", Name = "USB GPIB Controller", PortName = "COM1", Timeout = 300 }; cameraParameters = new CameraParameters { TypeName = "LuiHardware.camera.CameraTempControlled", Name = "Andor USB CCD", Dir = "./", Temperature = 20 }; ddgParameters = new DelayGeneratorParameters { TypeName = "LuiHardware.ddg.DDG535", Name = "Primary DDG", GpibAddress = 15, GpibProvider = gpibParameters1 }; Config.AddParameters(gpibParameters1); Config.AddParameters(gpibParameters2); Config.AddParameters(cameraParameters); Config.AddParameters(ddgParameters); }
public TrldControl(LuiConfig Config) : base(Config) { InitializeComponent(); Init(); Beta.ValueChanged += Beta_ValueChanged; TimesList.AllowEdit = false; TimesView.DefaultValuesNeeded += (sender, e) => { e.Row.Cells["Value"].Value = 0; }; TimesView.DataSource = new BindingSource(TimesList, null); TimesView.CellValidating += TimesView_CellValidating; TimesView.CellEndEdit += TimesView_CellEndEdit; SaveData.Click += (sender, e) => SaveOutput(); DdgConfigBox.Config = Config; DdgConfigBox.Commander = Commander; DdgConfigBox.AllowZero = false; DdgConfigBox.HandleParametersChanged(this, EventArgs.Empty); }
public CalibrateControl(LuiConfig config) : base(config) { InitializeComponent(); CalibrationList.AllowEdit = true; CalibrationListView.DefaultValuesNeeded += CalibrationListView_DefaultValuesNeeded; CalibrationListView.EditingControlShowing += CalibrationListView_EditingControlShowing; CalibrationListView.DataSource = new BindingSource(CalibrationList, null); // Superscript the "2" in "R2" RSquaredLabel.SelectionStart = 1; RSquaredLabel.SelectionLength = 1; RSquaredLabel.SelectionCharOffset = 5; RSquaredLabel.SelectionFont = new Font("Microsoft Sans Serif", 6, FontStyle.Regular); RSquaredLabel.SelectionLength = 0; Ascending = true; ClearBlank.Click += ClearBlank_Click; ClearBlank.Enabled = false; }
public LuiTab(LuiConfig config) { Config = config; Commander = new Commander(); InitializeComponent(); Init(); Paused = new ManualResetEvent(true); CameraGain.ValueChanged += CameraGain_ValueChanged; Collect.Click += Collect_Click; Abort.Click += Abort_Click; Pause.Click += Pause_Click; Clear.Click += Clear_Click; OpenLaser.Click += OpenLaser_Click; CloseLaser.Click += CloseLaser_Click; OpenLamp.Click += OpenLamp_Click; CloseLamp.Click += CloseLamp_Click; Graph.MouseClick += Graph_Click; Abort.Enabled = Pause.Enabled = false; }
public ResidualsControl(LuiConfig config) : base(config) { InitializeComponent(); Graph.YLabelFormat = "g"; SaveData.Click += SaveData_Click; SaveData.Enabled = false; CollectLaser.CheckedChanged += CollectLaser_CheckedChanged; ImageMode.CheckedChanged += ImageMode_CheckedChanged; FvbMode.CheckedChanged += FvbMode_CheckedChanged; SoftFvbMode.CheckedChanged += SoftFvbMode_CheckedChanged; GraphScroll.Scroll += GraphScroll_Scroll; GraphScroll.ValueChanged += GraphScroll_ValueChanged; GraphScroll.Enabled = false; GraphScroll.Minimum = 0; GraphScroll.Maximum = Commander.Camera.Height - 1; GraphScroll.LargeChange = 1; SelectedRow = 0; CameraTemperature.Enabled = false; VBin.Minimum = 1; VBin.Value = 1; VBin.ValueChanged += CameraImage_ValueChanged; VStart.Minimum = 1; VStart.ValueChanged += CameraImage_ValueChanged; VEnd.Minimum = 1; VEnd.ValueChanged += CameraImage_ValueChanged; DdgConfigBox.Config = Config; DdgConfigBox.Commander = Commander; DdgConfigBox.AllowZero = true; DdgConfigBox.Enabled = false; DdgConfigBox.HandleParametersChanged(this, EventArgs.Empty); }
public override void CopyConfigState(LuiConfig config) { PersistentItems = config.GetParameters<P>(); }
public ParentForm(LuiConfig config) { Config = config; SuspendLayout(); // Dispose resources when the form is closed; FormClosed += (s, e) => Config.Dispose(); AutoScaleMode = AutoScaleMode.Dpi; StartPosition = FormStartPosition.WindowsDefaultLocation; Margin = new Padding(2, 2, 2, 2); Name = "ParentForm"; Text = "LUI " + Assembly.GetExecutingAssembly().GetName().Version; #region Setup tabs Tabs = new TabControl(); Tabs.SuspendLayout(); Tabs.Location = new Point(0, 0); Tabs.Margin = new Padding(2, 2, 2, 2); Tabs.Name = "Tabs"; Tabs.SelectedIndex = 0; //Tabs.Anchor = (AnchorStyles)(AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right); Tabs.Dock = DockStyle.Fill; Tabs.TabIndex = 0; HomePage = new TabPage(); AbsPage = new TabPage(); TAAlignPage = new TabPage(); TRODPage = new TabPage(); LDAlignPage = new TabPage(); LDExtinctionPage = new TabPage(); TRLDPage = new TabPage(); ResidualsPage = new TabPage(); CalibrationPage = new TabPage(); OptionsPage = new TabPage(); #region page properties HomePage.BackColor = SystemColors.Control; HomePage.Margin = new Padding(2, 2, 2, 2); HomePage.Name = "HomePage"; HomePage.TabIndex = 2; HomePage.Text = "Home"; AbsPage.BackColor = SystemColors.Control; AbsPage.Margin = new Padding(2, 2, 2, 2); AbsPage.Name = "AbsPage"; AbsPage.TabIndex = 3; AbsPage.Text = "Absorbance"; TAAlignPage.BackColor = SystemColors.Control; TAAlignPage.Margin = new Padding(2, 2, 2, 2); TAAlignPage.Name = "TAAlignPage"; TAAlignPage.TabIndex = 5; TAAlignPage.Text = "TA Align"; TRODPage.BackColor = SystemColors.Control; TRODPage.Margin = new Padding(2, 2, 2, 2); TRODPage.Name = "TRODPage"; TRODPage.Padding = new Padding(2, 2, 2, 2); TRODPage.TabIndex = 0; TRODPage.Text = "TROD"; LDAlignPage.BackColor = SystemColors.Control; LDAlignPage.Margin = new Padding(2, 2, 2, 2); LDAlignPage.Name = "LDAlignPage"; LDAlignPage.Padding = new Padding(2, 2, 2, 2); LDAlignPage.TabIndex = 0; LDAlignPage.Text = "LD Align"; TRLDPage.BackColor = SystemColors.Control; TRLDPage.Margin = new Padding(2, 2, 2, 2); TRLDPage.Name = "TRLDPage"; TRLDPage.Padding = new Padding(2, 2, 2, 2); TRLDPage.TabIndex = 0; TRLDPage.Text = "TRLD"; LDExtinctionPage.BackColor = SystemColors.Control; LDExtinctionPage.Margin = new Padding(2, 2, 2, 2); LDExtinctionPage.Name = "LDExtinctionPage"; LDExtinctionPage.Padding = new Padding(2, 2, 2, 2); LDExtinctionPage.TabIndex = 0; LDExtinctionPage.Text = "Extinction"; ResidualsPage.BackColor = SystemColors.Control; ResidualsPage.Margin = new Padding(2, 2, 2, 2); ResidualsPage.Name = "ResidualsPage"; ResidualsPage.TabIndex = 4; ResidualsPage.Text = "Residuals"; CalibrationPage.BackColor = SystemColors.Control; CalibrationPage.Margin = new Padding(2, 2, 2, 2); CalibrationPage.Name = "CalibrationPage"; CalibrationPage.Padding = new Padding(2, 2, 2, 2); CalibrationPage.TabIndex = 1; CalibrationPage.Text = "WL Cal"; OptionsPage.BackColor = SystemColors.Control; OptionsPage.Margin = new Padding(2, 2, 2, 2); OptionsPage.Name = "OptionsPage"; OptionsPage.TabIndex = 7; OptionsPage.Text = "Options"; Tabs.TabPages.Add(HomePage); Tabs.TabPages.Add(AbsPage); Tabs.TabPages.Add(TAAlignPage); Tabs.TabPages.Add(TRODPage); Tabs.TabPages.Add(LDAlignPage); Tabs.TabPages.Add(TRLDPage); Tabs.TabPages.Add(LDExtinctionPage); Tabs.TabPages.Add(ResidualsPage); Tabs.TabPages.Add(CalibrationPage); Tabs.TabPages.Add(OptionsPage); #endregion Controls.Add(Tabs); Tabs.DrawMode = TabDrawMode.OwnerDrawFixed; Tabs.DrawItem += HandleTabDrawItem; Tabs.Selecting += HandleTabSelecting; Tabs.Selected += HandleTabSelected; #endregion Setup tabs OptionsControl = new OptionsControl(Config) { Dock = DockStyle.Fill }; #region add controls HomePage.Controls.Add(new Panel()); // Just a placeholder. AbsControl = new AbsorbanceControl(Config); AbsPage.Controls.Add(AbsControl); TAAlignControl = new TaalignControl(Config); TAAlignPage.Controls.Add(TAAlignControl); TRODControl = new TrodControl(Config); TRODPage.Controls.Add(TRODControl); LDAlignControl = new LdalignControl(Config); LDAlignPage.Controls.Add(LDAlignControl); TRLDControl = new TrldControl(Config); TRLDPage.Controls.Add(TRLDControl); LDExtinctionControl = new LdextinctionControl(Config); LDExtinctionPage.Controls.Add(LDExtinctionControl); CalibrateControl = new CalibrateControl(Config); CalibrationPage.Controls.Add(CalibrateControl); ResidualsControl = new ResidualsControl(Config); ResidualsPage.Controls.Add(ResidualsControl); OptionsPage.Controls.Add(OptionsControl); OptionsControl.OptionsApplied += HandleOptionsApplied; #endregion foreach (TabPage page in Tabs.TabPages) { if (page != HomePage && page != OptionsPage) { page.Enabled = false; } if (page.Controls[0] is LuiTab luiTab) { luiTab.Load += (se, ev) => CalibrateControl.CalibrationChanged += luiTab.HandleCalibrationChanged; FormClosing += luiTab.HandleExit; luiTab.TaskStarted += HandleTaskStarted; luiTab.TaskFinished += HandleTaskFinished; } } Tabs.SelectedTab = HomePage; Resize += HandleResize; Tabs.ResumeLayout(); ResumeLayout(); }
public void TestXmlSerialization() { //var serializer = new XmlSerializer(Config.GetType()); //using (var writer = new StreamWriter(Config.ConfigFile)) //{ // serializer.Serialize(writer, Config); //} Config.Save(); //LuiConfig testConfig = null; //using (var reader = new StreamReader(ConfigFile)) //{ // testConfig = (LuiConfig)serializer.Deserialize(reader); //} LuiConfig testConfig = LuiConfig.FromFile(ConfigFile); Assert.AreEqual(testConfig.ConfigFile, Config.ConfigFile); Assert.AreEqual(testConfig.LogFile, Config.LogFile); Assert.AreEqual(testConfig.LogLevel, Config.LogLevel); foreach (KeyValuePair <Type, Dictionary <LuiObjectParameters, ILuiObject> > kvp in Config.LuiObjectTableIndex) { IList <LuiObjectParameters> list = (IList <LuiObjectParameters>)kvp.Value.Keys.ToList(); for (int i = 0; i < list.Count; i++) { Assert.AreEqual(list[i], ((IList <LuiObjectParameters>)testConfig.LuiObjectTableIndex[kvp.Key].Keys.ToList())[i]); } } GpibProviderParameters dependency = null; GpibProviderParameters testParameters = null; foreach (var kvp in testConfig.LuiObjectTableIndex[ddgParameters.GetType()]) { if (kvp.Key.Name == ddgParameters.Name) { dependency = ((DelayGeneratorParameters)kvp.Key).GpibProvider; } } foreach (var kvp in testConfig.LuiObjectTableIndex[gpibParameters1.GetType()]) { if (kvp.Key.Name == gpibParameters1.Name) { testParameters = (GpibProviderParameters)kvp.Key; } } Assert.AreEqual(dependency, testParameters); Assert.IsTrue( testConfig.LuiObjectTableIndex[dependency.GetType()][dependency] == testConfig.LuiObjectTableIndex[testParameters.GetType()][testParameters] ); Assert.IsTrue(Object.ReferenceEquals( testConfig.LuiObjectTableIndex[dependency.GetType()][dependency], testConfig.LuiObjectTableIndex[testParameters.GetType()][testParameters] )); var dummy = new DummyGpibProvider(); testConfig.LuiObjectTableIndex[dependency.GetType()][dependency] = dummy; Assert.IsTrue(Object.ReferenceEquals(testConfig.LuiObjectTableIndex[testParameters.GetType()][testParameters], dummy)); }
static void Main(string[] args) { #region Parse command line options var configfile = Constants.DefaultConfigFileLocation; var show_help = false; var p = new OptionSet { { "f|file", "Configuration file", v => configfile = v }, { "h|help", "Show this help text and exit", v => show_help = true } }; List <string> extra; try { extra = p.Parse(args); } catch (OptionException e) { Console.WriteLine("Invalid arguments: " + e.Message); return; } if (show_help) { ShowHelp(p); return; } #endregion Parse command line options #region Deserialize XML and setup LuiConfig LuiConfig Config; try { var serializer = new XmlSerializer(typeof(LuiConfig)); using (var reader = new StreamReader(configfile)) { Config = (LuiConfig)serializer.Deserialize(reader); } } catch (Exception ex) { if (ex is FileNotFoundException) { Config = LuiConfig.DummyConfig(); } else if (ex is InvalidOperationException) { Config = LuiConfig.DummyConfig(); } else { throw; } } Config.ConfigFile = configfile; Config.ConfigureLogging(); #endregion Deserialize XML and setup LuiConfig Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new ParentForm(Config)); }
public TaalignControl(LuiConfig Config) : base(Config) { InitializeComponent(); }
public override void CopyConfigState(LuiConfig config) { LogLevel.Control.SelectedItem = config.LogLevel; }
public OptionsControl(LuiConfig config) { SuspendLayout(); AutoScaleDimensions = new SizeF(6F, 13F); AutoScaleMode = AutoScaleMode.Inherit; Name = "OptionsControl"; #region Panels and list of options dialogs // Container for options dialogs. var OptionsPanel = new Panel { Dock = DockStyle.Fill }; Controls.Add(OptionsPanel); // Must add the DockStyle.Fill control first. var ListPanel = new Panel { Dock = DockStyle.Left // Panel will dock to the left. }; Controls.Add(ListPanel); OptionsListView = new OptionsListView { Dock = DockStyle.Fill, HideSelection = false, // Maintain highlighting if user changes control focus. MultiSelect = false, // Only select one item at a time. HeaderStyle = ColumnHeaderStyle.None, View = View.Details, ShowGroups = true }; OptionsListView.Columns.Add(new ColumnHeader()); OptionsListView.SelectedIndexChanged += HandleSelectedOptionsDialogChanged; ListPanel.Controls.Add(OptionsListView); #endregion Panels and list of options dialogs #region Options dialogs var General = new ListViewGroup("General", HorizontalAlignment.Left); OptionsListView.Groups.Add(General); var Instruments = new ListViewGroup("Instruments", HorizontalAlignment.Left); OptionsListView.Groups.Add(Instruments); // Logging Options var LoggingOptionsDialog = new LoggingOptionsDialog(OptionsPanel.Size) { Dock = DockStyle.Fill }; var LoggingOptionsItem = new ListViewItem("Logging", General) { Tag = LoggingOptionsDialog }; OptionsListView.Items.Add(LoggingOptionsItem); OptionsPanel.Controls.Add(LoggingOptionsDialog); // Beam Flag Options Dialog var BeamFlagOptionsDialog = new LuiOptionsListDialog <AbstractBeamFlags, BeamFlagsParameters>(OptionsPanel.Size); BeamFlagOptionsDialog.AddConfigPanel(new BeamFlagsConfigPanel()); BeamFlagOptionsDialog.AddConfigPanel(new DummyBeamFlagsConfigPanel()); BeamFlagOptionsDialog.SetDefaultSelectedItems(); BeamFlagOptionsDialog.Dock = DockStyle.Fill; var BeamFlagOptionsItem = new ListViewItem("Beam Flags", Instruments) { Tag = BeamFlagOptionsDialog }; OptionsListView.Items.Add(BeamFlagOptionsItem); OptionsPanel.Controls.Add(BeamFlagOptionsDialog); // CCD Camera Dialog var CameraOptionsDialog = new LuiOptionsListDialog <ICamera, CameraParameters>(OptionsPanel.Size); CameraOptionsDialog.AddConfigPanel(new AndorCameraConfigPanel()); CameraOptionsDialog.AddConfigPanel(new CameraTempControlledConfigPanel()); CameraOptionsDialog.AddConfigPanel(new DummyAndorCameraConfigPanel()); CameraOptionsDialog.AddConfigPanel(new DummyCameraConfigPanel()); CameraOptionsDialog.SetDefaultSelectedItems(); CameraOptionsDialog.Dock = DockStyle.Fill; var CameraOptionsItem = new ListViewItem("Camera", Instruments) { Tag = CameraOptionsDialog }; OptionsListView.Items.Add(CameraOptionsItem); OptionsPanel.Controls.Add(CameraOptionsDialog); // GPIB Options Dialog var GPIBOptionsDialog = new LuiOptionsListDialog <IGpibProvider, GpibProviderParameters>(OptionsPanel.Size); GPIBOptionsDialog.AddConfigPanel(new NIConfigPanel()); GPIBOptionsDialog.AddConfigPanel(new PrologixConfigPanel()); GPIBOptionsDialog.AddConfigPanel(new DummyGpibProviderConfigPanel()); GPIBOptionsDialog.SetDefaultSelectedItems(); GPIBOptionsDialog.Dock = DockStyle.Fill; var GPIBOptionsItem = new ListViewItem("GPIB Controllers", Instruments) { Tag = GPIBOptionsDialog }; OptionsListView.Items.Add(GPIBOptionsItem); OptionsPanel.Controls.Add(GPIBOptionsDialog); // DDG Options Dialog var DDGOptionsDialog = new LuiOptionsListDialog <IDigitalDelayGenerator, DelayGeneratorParameters>(OptionsPanel.Size); DDGOptionsDialog.AddConfigPanel(new DG535ConfigPanel(GPIBOptionsDialog)); DDGOptionsDialog.AddConfigPanel(new DummyDigitalDelayGeneratorConfigPanel()); DDGOptionsDialog.SetDefaultSelectedItems(); DDGOptionsDialog.Dock = DockStyle.Fill; var DDGOptionsItem = new ListViewItem("Digital Delay Generators", Instruments) { Tag = DDGOptionsDialog }; OptionsListView.Items.Add(DDGOptionsItem); OptionsPanel.Controls.Add(DDGOptionsDialog); // Syringe Pump Dialog var SyringePumpOptionsDialog = new LuiOptionsListDialog <ISyringePump, SyringePumpParameters>(OptionsPanel.Size); SyringePumpOptionsDialog.AddConfigPanel(new HarvardSyringePumpConfigPanel()); SyringePumpOptionsDialog.AddConfigPanel(new DummySyringePumpConfigPanel()); SyringePumpOptionsDialog.SetDefaultSelectedItems(); SyringePumpOptionsDialog.Dock = DockStyle.Fill; var SyringePumpOptionsItem = new ListViewItem("Syringe Pump", Instruments) { Tag = SyringePumpOptionsDialog }; OptionsListView.Items.Add(SyringePumpOptionsItem); OptionsPanel.Controls.Add(SyringePumpOptionsDialog); // Polarizer Dialog var PolarizerOptionsDialog = new LuiOptionsListDialog <IPolarizer, PolarizerParameters>(OptionsPanel.Size); PolarizerOptionsDialog.AddConfigPanel(new PolarizerConfigPanel()); PolarizerOptionsDialog.AddConfigPanel(new DummyPolarizerConfigPanel()); PolarizerOptionsDialog.SetDefaultSelectedItems(); PolarizerOptionsDialog.Dock = DockStyle.Fill; var PolarizerOptionsItem = new ListViewItem("Polarizer", Instruments) { Tag = PolarizerOptionsDialog }; OptionsListView.Items.Add(PolarizerOptionsItem); OptionsPanel.Controls.Add(PolarizerOptionsDialog); #endregion Options dialogs OptionsListView.Columns[0].Width = -1; // Sets width to that of widest item. // Note OptionsChanged and ConfigChanged handlers are not yet bound. Config = config; // Refers to the global config object. SetChildConfig(Config); // Sets options dialogs to reference & match this config. #region Buttons var ButtonPanel = new FlowLayoutPanel { FlowDirection = FlowDirection.RightToLeft, Anchor = AnchorStyles.Bottom | AnchorStyles.Right, AutoSize = true, // Fit to the buttons. AutoSizeMode = AutoSizeMode.GrowAndShrink }; // Container for the buttons. ApplyConfig = new Button { Text = "Apply", Size = new Size(91, 34), Enabled = false }; ApplyConfig.Click += ApplyConfig_Click; SaveConfig = new Button { Text = "Save", Size = new Size(91, 34), Enabled = false }; SaveConfig.Click += SaveConfig_Click; LoadConfig = new Button { Text = "Load", Size = new Size(91, 34) }; LoadConfig.Click += LoadConfig_Click; ButtonPanel.Controls.Add(LoadConfig); ButtonPanel.Controls.Add(SaveConfig); ButtonPanel.Controls.Add(ApplyConfig); OptionsPanel.Controls.Add(ButtonPanel); ButtonPanel.BringToFront(); // Display on top of any overlapping controls (OptionsPanel). #endregion Buttons ResumeLayout(false); }