public void DetermineNewFrequencyRange(int x, ref Int64 Low, ref Int64 High, ref int SampleCount)
        {
            Int64 nCentralFrequency;
            Int64 nPreviousBW;
            Int64 nNewStartFrequency;
            Int64 nNewEndFrequency;


            nCentralFrequency = GraphConfig.GetFrequencyFromXDisplay(x);
            nPreviousBW       = GraphConfig.nLastDrawingHighFrequency - GraphConfig.nLastDrawingLowFrequency;


            if (nPreviousBW < 100)
            {
                return;
            }

            nNewStartFrequency = nCentralFrequency - (Int64)(nPreviousBW * fZoomInRatio * 0.5f);
            nNewEndFrequency   = nCentralFrequency + (Int64)(nPreviousBW * fZoomInRatio * 0.5f);


            // now we correct the zoom to take acount of discrete frequency step
            SampleCount = Owner.GetSampleCount();


            Int64 nBW = (nNewEndFrequency - nNewStartFrequency);

            Int64 nRealStep;

            if (SampleCount > nBW)
            {
                SampleCount = (int)nBW;
                nRealStep   = 1;
            }
            else
            {
                nRealStep = ((nNewEndFrequency - nNewStartFrequency) + SampleCount / 2) / SampleCount;
            }

            nNewStartFrequency = nCentralFrequency - nRealStep * SampleCount / 2;
            nNewEndFrequency   = nNewStartFrequency + nRealStep * SampleCount;


            if (nNewEndFrequency > Owner.DeviceInterface.MaxFrequency)
            {
                nNewEndFrequency = Owner.DeviceInterface.MaxFrequency;
            }

            if (nNewStartFrequency < Owner.DeviceInterface.MinFrequency)
            {
                nNewStartFrequency = Owner.DeviceInterface.MinFrequency;
            }

            Low  = nNewStartFrequency;
            High = nNewEndFrequency;
        }
        public void DisplayFrequencyAndLevelOnCorners(int nXMouse)
        {
            Int64 nFrequency = GraphConfig.GetFrequencyFromXDisplay(nXMouse);


            double dBLevel;

            String LevelText = null;

            if (CurvesList.Count > 0 && ActiveCurve != null && ActiveCurve.Visible == CCurve.YesNo.Yes)
            {
                dBLevel = Math.Round(ActiveCurve.GeDBLevelFromFrequency(nFrequency), 2);
                LevelDisplayLabel.ForeColor = ActiveCurve.Color_;
                LevelText = ActiveCurve.Name + " : ";
            }
            else
            {
                dBLevel = 0.0f;
                LevelDisplayLabel.ForeColor = Color.Black;
                LevelText = "Level : ";
            }


            double ImpedanceNorm = (100.0f / ((float)Math.Pow(10.0f, dBLevel / 20.0f)) - 100.0f) / 1.0f;

            FreqDisplayLabel.Text = "Frequency : " + Utility.GetStringWithSeparators(nFrequency, " ") + "Hz";


            if (GraphConfig.outputMode == OutputMode.dB)
            {
                if (ImpedanceNorm >= 0)
                {
                    LevelDisplayLabel.Text = LevelText + dBLevel.ToString() + "dB " + " |Z|=" + Math.Round(ImpedanceNorm, 0) + " Ohms";
                }
                else
                {
                    LevelDisplayLabel.Text = LevelText + dBLevel.ToString() + "dB ";
                }
            }
            else
            {
                LevelDisplayLabel.Text = LevelText + dBLevel.ToString();
            }

            GraphConfig.DrawTopBox(CurvesList, nFrequency);
        }
        private void SpectrumPictureBoxClass_MouseClick(object sender, MouseEventArgs e)
        {
            if (Owner.DeviceInterface.GetDevice() == null)
            {
                return; // no device
            }
            MouseEventArgs Event = (MouseEventArgs)e;
            {
                Int64 nCentralFrequency;
                Int64 nPreviousBW;
                Int64 nNewStartFrequency;
                Int64 nNewEndFrequency;


                nCentralFrequency = GraphConfig.GetFrequencyFromXDisplay(Event.X);
                nPreviousBW       = GraphConfig.nLastDrawingHighFrequency - GraphConfig.nLastDrawingLowFrequency;


                if (Event.Button == MouseButtons.Left)
                {
                    if (nPreviousBW < 100)
                    {
                        return;
                    }

                    nNewStartFrequency = nCentralFrequency - (Int64)(nPreviousBW * fZoomInRatio * 0.5f);
                    nNewEndFrequency   = nCentralFrequency + (Int64)(nPreviousBW * fZoomInRatio * 0.5f);
                }
                else
                {
                    nNewStartFrequency = nCentralFrequency - nPreviousBW;
                    nNewEndFrequency   = nCentralFrequency + nPreviousBW;
                }

                // now we correct the zoom to take acount of discrete frequency step
                int nSampleCount = Owner.GetSampleCount();


                Int64 nBW = (nNewEndFrequency - nNewStartFrequency);

                Int64 nRealStep;
                if (nSampleCount > nBW)
                {
                    nSampleCount = (int)nBW;
                    Owner.SetSampleCount(nSampleCount);
                    nRealStep = 1;
                }
                else
                {
                    nRealStep = ((nNewEndFrequency - nNewStartFrequency) + nSampleCount / 2) / nSampleCount;
                }

                nNewStartFrequency = nCentralFrequency - nRealStep * nSampleCount / 2;
                nNewEndFrequency   = nNewStartFrequency + nRealStep * nSampleCount;


                if (nNewEndFrequency > Owner.DeviceInterface.MaxFrequency)
                {
                    nNewEndFrequency = Owner.DeviceInterface.MaxFrequency;
                }

                if (nNewStartFrequency < Owner.DeviceInterface.MinFrequency)
                {
                    nNewStartFrequency = Owner.DeviceInterface.MinFrequency;
                }


                GraphConfig.nLastDrawingLowFrequency  = nNewStartFrequency;
                GraphConfig.nLastDrawingHighFrequency = nNewEndFrequency;

                DrawCurveCollection(CurvesList);
                Owner.SetSweepStartFrequency(nNewStartFrequency);
                Owner.SetSweepEndFrequency(nNewEndFrequency);
            }
        }