⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 systemevaldlg.cpp

📁 Dream.exe soft source (Visual C++)
💻 CPP
📖 第 1 页 / 共 4 页
字号:
/******************************************************************************\
 * Technische Universitaet Darmstadt, Institut fuer Nachrichtentechnik
 * Copyright (c) 2001
 *
 * Author(s):
 *	Volker Fischer
 *
 * Description:
 *
 *
 ******************************************************************************
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 2 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc.,
 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 *
\******************************************************************************/

#include "systemevalDlg.h"


/* Implementation *************************************************************/
systemevalDlg::systemevalDlg(CDRMReceiver* pNDRMR, QWidget* parent,
	const char* name, bool modal, WFlags f) : vecpDRMPlots(0),
	systemevalDlgBase(parent, name, modal, f), pDRMRec(pNDRMR)
{
	/* Set help text for the controls */
	AddWhatsThisHelp();

#ifdef _WIN32 /* This works only reliable under Windows :-( */
	/* Get window geometry data from DRMReceiver module and apply it */
	const QRect WinGeom(pDRMRec->GeomSystemEvalDlg.iXPos,
		pDRMRec->GeomSystemEvalDlg.iYPos,
		pDRMRec->GeomSystemEvalDlg.iWSize,
		pDRMRec->GeomSystemEvalDlg.iHSize);

	if (WinGeom.isValid() && !WinGeom.isEmpty() && !WinGeom.isNull())
		setGeometry(WinGeom);
#else /* Under Linux only restore the size */
	resize(pDRMRec->GeomSystemEvalDlg.iWSize,
		pDRMRec->GeomSystemEvalDlg.iHSize);
#endif


	/* Init controls -------------------------------------------------------- */
	/* Init main plot */
	MainPlot->SetRecObj(pDRMRec);
	MainPlot->SetPlotStyle(pDRMRec->iMainPlotColorStyle);
	MainPlot->setMargin(1);

	/* Init slider control */
	SliderNoOfIterations->setRange(0, 4);
	SliderNoOfIterations->
		setValue(pDRMRec->GetMSCMLC()->GetInitNumIterations());
	TextNumOfIterations->setText(tr("MLC: Number of Iterations: ") +
		QString().setNum(pDRMRec->GetMSCMLC()->GetInitNumIterations()));

	/* Update times for color LEDs */
	LEDFAC->SetUpdateTime(1500);
	LEDSDC->SetUpdateTime(1500);
	LEDMSC->SetUpdateTime(600);
	LEDFrameSync->SetUpdateTime(600);
	LEDTimeSync->SetUpdateTime(600);
	LEDIOInterface->SetUpdateTime(2000); /* extra long -> red light stays long */

	/* Init parameter for frequency edit for log file */
	iCurFrequency = 0;

	/* Update controls */
	UpdateControls();


	/* Init chart selector list view ---------------------------------------- */
	ListViewCharSel->clear();

	/* No sorting of items */
	ListViewCharSel->setSorting(-1);

	/* Insert parent list view items. Parent list view items should not be
	   selectable */
	CCharSelItem* pHistoryLiViIt =
		new CCharSelItem(ListViewCharSel, tr("History"),
		CDRMPlot::NONE_OLD, FALSE);

	CCharSelItem* pConstellationLiViIt =
		new CCharSelItem(ListViewCharSel, tr("Constellation"),
		CDRMPlot::NONE_OLD, FALSE);

	CCharSelItem* pChannelLiViIt =
		new CCharSelItem(ListViewCharSel, tr("Channel"),
		CDRMPlot::NONE_OLD, FALSE);

	CCharSelItem* pSpectrumLiViIt =
		new CCharSelItem(ListViewCharSel, tr("Spectrum"),
		CDRMPlot::NONE_OLD, FALSE);
 
	/* Inser actual items. The list is not sorted -> items which are inserted
	   first show up at the end of the list */
	/* Spectrum */
	CCharSelItem* pListItSNRSpec = new CCharSelItem(pSpectrumLiViIt,
		tr("SNR Spectrum"), CDRMPlot::SNR_SPECTRUM);
	CCharSelItem* pListItAudSpec = new CCharSelItem(pSpectrumLiViIt,
		tr("Audio Spectrum"), CDRMPlot::AUDIO_SPECTRUM);
	CCharSelItem* pListItPowSpecDens = new CCharSelItem(pSpectrumLiViIt,
		tr("Shifted PSD"), CDRMPlot::POWER_SPEC_DENSITY);
	CCharSelItem* pListItInpSpecWater = new CCharSelItem(pSpectrumLiViIt,
		tr("Waterfall Input Spectrum"), CDRMPlot::INP_SPEC_WATERF);
	CCharSelItem* pListItInpSpectrNoAv = new CCharSelItem(pSpectrumLiViIt,
		tr("Input Spectrum"), CDRMPlot::INPUTSPECTRUM_NO_AV);
	CCharSelItem* pListItInpPSD = new CCharSelItem(pSpectrumLiViIt,
		tr("Input PSD"), CDRMPlot::INPUT_SIG_PSD);

	/* Constellation */
	CCharSelItem* pListItConstMSC = new CCharSelItem(pConstellationLiViIt,
		tr("MSC"), CDRMPlot::MSC_CONSTELLATION);
	CCharSelItem* pListItConstSDC = new CCharSelItem(pConstellationLiViIt,
		tr("SDC"), CDRMPlot::SDC_CONSTELLATION);
	CCharSelItem* pListItConstFAC = new CCharSelItem(pConstellationLiViIt,
		tr("FAC"), CDRMPlot::FAC_CONSTELLATION);
	CCharSelItem* pListItConstAll = new CCharSelItem(pConstellationLiViIt,
		tr("FAC / SDC / MSC"), CDRMPlot::ALL_CONSTELLATION);

	/* History */
	CCharSelItem* pListItHistFrSa = new CCharSelItem(pHistoryLiViIt,
		tr("Frequency / Sample Rate"), CDRMPlot::FREQ_SAM_OFFS_HIST);
	CCharSelItem* pListItHistDeDo = new CCharSelItem(pHistoryLiViIt,
		tr("Delay / Doppler"), CDRMPlot::DOPPLER_DELAY_HIST);
	CCharSelItem* pListItHistSNRAu = new CCharSelItem(pHistoryLiViIt,
		tr("SNR / Audio"), CDRMPlot::SNR_AUDIO_HIST);

	/* Channel */
	CCharSelItem* pListItChanTF = new CCharSelItem(pChannelLiViIt,
		tr("Transfer Function"), CDRMPlot::TRANSFERFUNCTION);
	CCharSelItem* pListItChanIR = new CCharSelItem(pChannelLiViIt,
		tr("Impulse Response"), CDRMPlot::AVERAGED_IR);

/* _WIN32 fix because in Visual c++ the GUI files are always compiled even
   if USE_QT_GUI is set or not (problem with MDI in DRMReceiver) */
#ifdef USE_QT_GUI
	/* If MDI in is enabled, disable some of the controls and use different
	   initialization for the chart and chart selector */
	if (pDRMRec->GetMDI()->GetMDIInEnabled() == TRUE)
	{
		ListViewCharSel->setEnabled(FALSE);
		SliderNoOfIterations->setEnabled(FALSE);

		ButtonGroupChanEstFreqInt->setEnabled(FALSE);
		ButtonGroupChanEstTimeInt->setEnabled(FALSE);
		ButtonGroupTimeSyncTrack->setEnabled(FALSE);
		CheckBoxFlipSpec->setEnabled(FALSE);
		EdtFrequency->setText("0");
		EdtFrequency->setEnabled(FALSE);
		GroupBoxInterfRej->setEnabled(FALSE);

		/* Only audio spectrum makes sence for MDI in */
		ListViewCharSel->setSelected(pListItAudSpec, TRUE);
		ListViewCharSel->setOpen(pSpectrumLiViIt, TRUE);
		MainPlot->SetupChart(CDRMPlot::AUDIO_SPECTRUM);
	}
	else
	{
		/* Set chart type */
		switch (pDRMRec->iSysEvalDlgPlotType)
		{
		case (int) CDRMPlot::POWER_SPEC_DENSITY:
			ListViewCharSel->setOpen(pSpectrumLiViIt, TRUE);
			ListViewCharSel->setSelected(pListItPowSpecDens, TRUE);
			MainPlot->SetupChart(CDRMPlot::POWER_SPEC_DENSITY);
			break;

		case (int) CDRMPlot::INPUTSPECTRUM_NO_AV:
			ListViewCharSel->setOpen(pSpectrumLiViIt, TRUE);
			ListViewCharSel->setSelected(pListItInpSpectrNoAv, TRUE);
			MainPlot->SetupChart(CDRMPlot::INPUTSPECTRUM_NO_AV);
			break;

		case (int) CDRMPlot::AUDIO_SPECTRUM:
			ListViewCharSel->setOpen(pSpectrumLiViIt, TRUE);
			ListViewCharSel->setSelected(pListItAudSpec, TRUE);
			MainPlot->SetupChart(CDRMPlot::AUDIO_SPECTRUM);
			break;

		case (int) CDRMPlot::SNR_SPECTRUM:
			ListViewCharSel->setOpen(pSpectrumLiViIt, TRUE);
			ListViewCharSel->setSelected(pListItSNRSpec, TRUE);
			MainPlot->SetupChart(CDRMPlot::SNR_SPECTRUM);
			break;

		case (int) CDRMPlot::INP_SPEC_WATERF:
			ListViewCharSel->setOpen(pSpectrumLiViIt, TRUE);
			ListViewCharSel->setSelected(pListItInpSpecWater, TRUE);
			MainPlot->SetupChart(CDRMPlot::INP_SPEC_WATERF);
			break;

		case (int) CDRMPlot::TRANSFERFUNCTION:
			ListViewCharSel->setOpen(pChannelLiViIt, TRUE);
			ListViewCharSel->setSelected(pListItChanTF, TRUE);
			MainPlot->SetupChart(CDRMPlot::TRANSFERFUNCTION);
			break;

		case (int) CDRMPlot::AVERAGED_IR:
			ListViewCharSel->setOpen(pChannelLiViIt, TRUE);
			ListViewCharSel->setSelected(pListItChanIR, TRUE);
			MainPlot->SetupChart(CDRMPlot::AVERAGED_IR);
			break;

		case (int) CDRMPlot::FAC_CONSTELLATION:
			ListViewCharSel->setOpen(pConstellationLiViIt, TRUE);
			ListViewCharSel->setSelected(pListItConstFAC, TRUE);
			MainPlot->SetupChart(CDRMPlot::FAC_CONSTELLATION);
			break;

		case (int) CDRMPlot::SDC_CONSTELLATION:
			ListViewCharSel->setOpen(pConstellationLiViIt, TRUE);
			ListViewCharSel->setSelected(pListItConstSDC, TRUE);
			MainPlot->SetupChart(CDRMPlot::SDC_CONSTELLATION);
			break;

		case (int) CDRMPlot::MSC_CONSTELLATION:
			ListViewCharSel->setOpen(pConstellationLiViIt, TRUE);
			ListViewCharSel->setSelected(pListItConstMSC, TRUE);
			MainPlot->SetupChart(CDRMPlot::MSC_CONSTELLATION);
			break;

		case (int) CDRMPlot::ALL_CONSTELLATION:
			ListViewCharSel->setOpen(pConstellationLiViIt, TRUE);
			ListViewCharSel->setSelected(pListItConstAll, TRUE);
			MainPlot->SetupChart(CDRMPlot::ALL_CONSTELLATION);
			break;

		case (int) CDRMPlot::FREQ_SAM_OFFS_HIST:
			ListViewCharSel->setOpen(pHistoryLiViIt, TRUE);
			ListViewCharSel->setSelected(pListItHistFrSa, TRUE);
			MainPlot->SetupChart(CDRMPlot::FREQ_SAM_OFFS_HIST);
			break;

		case (int) CDRMPlot::DOPPLER_DELAY_HIST:
			ListViewCharSel->setOpen(pHistoryLiViIt, TRUE);
			ListViewCharSel->setSelected(pListItHistDeDo, TRUE);
			MainPlot->SetupChart(CDRMPlot::DOPPLER_DELAY_HIST);
			break;

		case (int) CDRMPlot::SNR_AUDIO_HIST:
			ListViewCharSel->setOpen(pHistoryLiViIt, TRUE);
			ListViewCharSel->setSelected(pListItHistSNRAu, TRUE);
			MainPlot->SetupChart(CDRMPlot::SNR_AUDIO_HIST);
			break;

		default: /* INPUT_SIG_PSD, includes INPUT_SIG_PSD_ANALOG and NONE_OLD */
			ListViewCharSel->setOpen(pSpectrumLiViIt, TRUE);
			ListViewCharSel->setSelected(pListItInpPSD, TRUE);
			MainPlot->SetupChart(CDRMPlot::INPUT_SIG_PSD);
			break;
		}
	}
#endif

	/* Init context menu for list view */
	pListViewContextMenu = new QPopupMenu(this, tr("ListView context menu"));
	pListViewContextMenu->insertItem(tr("&Open in separate window"), this,
		SLOT(OnListViContMenu()));


	/* Connect controls ----------------------------------------------------- */
	connect(SliderNoOfIterations, SIGNAL(valueChanged(int)),
		this, SLOT(OnSliderIterChange(int)));

	/* Radio buttons */
	connect(RadioButtonTiLinear, SIGNAL(clicked()),
		this, SLOT(OnRadioTimeLinear()));
	connect(RadioButtonTiWiener, SIGNAL(clicked()),
		this, SLOT(OnRadioTimeWiener()));
	connect(RadioButtonFreqLinear, SIGNAL(clicked()),
		this, SLOT(OnRadioFrequencyLinear()));
	connect(RadioButtonFreqDFT, SIGNAL(clicked()),
		this, SLOT(OnRadioFrequencyDft()));
	connect(RadioButtonFreqWiener, SIGNAL(clicked()),
		this, SLOT(OnRadioFrequencyWiener()));
	connect(RadioButtonTiSyncEnergy, SIGNAL(clicked()),
		this, SLOT(OnRadioTiSyncEnergy()));
	connect(RadioButtonTiSyncFirstPeak, SIGNAL(clicked()),
		this, SLOT(OnRadioTiSyncFirstPeak()));

	/* Char selector list view */
	connect(ListViewCharSel, SIGNAL(selectionChanged(QListViewItem*)),
		this, SLOT(OnListSelChanged(QListViewItem*)));
	connect(ListViewCharSel,
		SIGNAL(rightButtonClicked(QListViewItem*, const QPoint&, int)),
		this, SLOT(OnListRightButClicked(QListViewItem*, const QPoint&, int)));

	/* Buttons */
	connect(buttonOk, SIGNAL(clicked()),
		this, SLOT(accept()));

	/* Check boxes */
	connect(CheckBoxFlipSpec, SIGNAL(clicked()),
		this, SLOT(OnCheckFlipSpectrum()));
	connect(CheckBoxMuteAudio, SIGNAL(clicked()),
		this, SLOT(OnCheckBoxMuteAudio()));
	connect(CheckBoxWriteLog, SIGNAL(clicked()),
		this, SLOT(OnCheckWriteLog()));
	connect(CheckBoxSaveAudioWave, SIGNAL(clicked()),
		this, SLOT(OnCheckSaveAudioWAV()));
	connect(CheckBoxRecFilter, SIGNAL(clicked()),
		this, SLOT(OnCheckRecFilter()));
	connect(CheckBoxModiMetric, SIGNAL(clicked()),
		this, SLOT(OnCheckModiMetric()));
	connect(CheckBoxReverb, SIGNAL(clicked()),
		this, SLOT(OnCheckBoxReverb()));

	/* Timers */
	connect(&Timer, SIGNAL(timeout()),
		this, SLOT(OnTimer()));
	connect(&TimerLogFileLong, SIGNAL(timeout()),
		this, SLOT(OnTimerLogFileLong()));
	connect(&TimerLogFileShort, SIGNAL(timeout()),
		this, SLOT(OnTimerLogFileShort()));
	connect(&TimerLogFileStart, SIGNAL(timeout()),
		this, SLOT(OnTimerLogFileStart()));

	/* Activte real-time timer */
	Timer.start(GUI_CONTROL_UPDATE_TIME);

	/* Activate delayed log file start if necessary (timer is set to shot
	   only once) */
	if (pDRMRec->GetParameters()->ReceptLog.IsDelLogStart() == TRUE)
	{
		/* One shot timer */
		TimerLogFileStart.start(pDRMRec->GetParameters()->
			ReceptLog.GetDelLogStart() * 1000 /* ms */, TRUE);
	}
}

systemevalDlg::~systemevalDlg()
{
	/* Set window geometry data in DRMReceiver module */
	QRect WinGeom = geometry();

	pDRMRec->GeomSystemEvalDlg.iXPos = WinGeom.x();
	pDRMRec->GeomSystemEvalDlg.iYPos = WinGeom.y();
	pDRMRec->GeomSystemEvalDlg.iHSize = WinGeom.height();
	pDRMRec->GeomSystemEvalDlg.iWSize = WinGeom.width();

	/* Store current plot type. Convert plot type into an integer type.
       TODO: better solution */
	pDRMRec->iSysEvalDlgPlotType = (int) MainPlot->GetChartType();

	/* Call the hide event handler routine to make sure the chart window sizes
	   and positions are stored */
	hideEvent(NULL);
}

void systemevalDlg::UpdateControls()
{
	/* Slider for MLC number of iterations */
	const int iNumIt = pDRMRec->GetMSCMLC()->GetInitNumIterations();
	if (SliderNoOfIterations->value() != iNumIt)
	{
		/* Update slider and label */
		SliderNoOfIterations->setValue(iNumIt);
		TextNumOfIterations->setText(tr("MLC: Number of Iterations: ") +
			QString().setNum(iNumIt));
	}

	/* Update for channel estimation and time sync switches */
	switch (pDRMRec->GetChanEst()->GetTimeInt())
	{
	case CChannelEstimation::TLINEAR:
		if (!RadioButtonTiLinear->isChecked())
			RadioButtonTiLinear->setChecked(TRUE);
		break;

	case CChannelEstimation::TWIENER:
		if (!RadioButtonTiWiener->isChecked())
			RadioButtonTiWiener->setChecked(TRUE);
		break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -