summaryrefslogtreecommitdiffstats
path: root/Master/Modellbildung_und_Simulation/Aufgabenblatt1/WaveAnalyzer/src/WaveAnalyzerController.cpp
blob: da87dbba2ea9db1958bea3f3754f28aea039534e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*
 * WaveAnalyzerController.cpp
 *
 *  Created on: 02.04.2011
 *      Author: sven
 */
#ifndef WAVEANALYZERCONTROLLER_H_
	#include "WaveAnalyzerController.h"
#endif
#ifndef WAVEANALYZER_H_
	#include "WaveAnalyzer.h"
#endif
#ifndef UTIL_H_
	#include "Util.h"
#endif

const char* WaveAnalyzerController::UI_FILENAME = "ui/waveanalyzer.glade";

WaveAnalyzerController::WaveAnalyzerController()
{
	Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file(UI_FILENAME);
	builder->get_widget("mainwindow",mPtrMainWin);

	builder->get_widget("fullquantfile",mPtrFullQuantFile);
	builder->get_widget("lowquantfile",mPtrLowQuantFile);
	builder->get_widget("snrvalue",mPtrSNRValue);
	builder->get_widget("avgvalue",mPtrArithAvgValue);
	builder->get_widget("variancevalue",mPtrVarianceValue);
	builder->get_widget("deviationvalue",mPtrStdDevValue);

	builder->get_widget("openfullquantbtn",mPtrOpenFullQuantBtn);
	builder->get_widget("openlowquantbtn",mPtrOpenLowQuantBtn);
	builder->get_widget("calcsnrbtn",mPtrCalcSNRBtn);
	builder->get_widget("calc_avg_btn",mPtrCalcArithAvgBtn);
	builder->get_widget("calc_variance_btn",mPtrCalcVarianceBtn);
	builder->get_widget("calc_deviation_btn",mPtrCalcStdDevBtn);

	mPtrOpenFullQuantBtn->signal_clicked().connect(sigc::mem_fun(this,&WaveAnalyzerController::on_open_fullquant_btn));
	mPtrOpenLowQuantBtn->signal_clicked().connect(sigc::mem_fun(this,&WaveAnalyzerController::on_open_lowquant_btn));
	mPtrCalcSNRBtn->signal_clicked().connect(sigc::mem_fun(this,&WaveAnalyzerController::on_calcsnr_btn));
	mPtrCalcArithAvgBtn->signal_clicked().connect(sigc::mem_fun(this,&WaveAnalyzerController::on_calcarithavg_btn));
	mPtrCalcVarianceBtn->signal_clicked().connect(sigc::mem_fun(this,&WaveAnalyzerController::on_calcvariance_btn));
	mPtrCalcStdDevBtn->signal_clicked().connect(sigc::mem_fun(this,&WaveAnalyzerController::on_calcstddev_btn));
}

WaveAnalyzerController::~WaveAnalyzerController() {
	// TODO Auto-generated destructor stub
}
void WaveAnalyzerController::startApp(Gtk::Main& kit)
{
	kit.run(*mPtrMainWin);
}

void WaveAnalyzerController::on_open_fullquant_btn()
{
	choose_file(mFullQuantFilename);
	mPtrFullQuantFile->set_text(mFullQuantFilename);
}

void WaveAnalyzerController::on_open_lowquant_btn()
{
	choose_file(mLowQuantFilename);
	mPtrLowQuantFile->set_text(mLowQuantFilename);
}

void WaveAnalyzerController::on_calcsnr_btn()
{
	if (mFullQuantFilename.empty() || mLowQuantFilename.empty()) {
		return;
	}
	WaveAnalyzer waveAnalyzer;
	double snr = waveAnalyzer.calcSNR(mFullQuantFilename,mLowQuantFilename);
	mPtrSNRValue->set_text(Util::ToString(snr));
}

void WaveAnalyzerController::on_calcarithavg_btn()
{
	if (mFullQuantFilename.empty()) {
		return;
	}
	WaveAnalyzer waveAnalyzer;
	double arithAvg = waveAnalyzer.calcArithAvg(mFullQuantFilename);
	mPtrArithAvgValue->set_text(Util::ToString(arithAvg));
}

void WaveAnalyzerController::on_calcvariance_btn()
{
	if (mFullQuantFilename.empty()) {
		return;
	}
	WaveAnalyzer waveAnalyzer;
	double variance = waveAnalyzer.calcVariance(mFullQuantFilename);
	mPtrVarianceValue->set_text(Util::ToString(variance));
}

void WaveAnalyzerController::on_calcstddev_btn()
{
	if (mFullQuantFilename.empty()) {
		return;
	}
	WaveAnalyzer waveAnalyzer;
	double stdDev = waveAnalyzer.calcStdDeviation(mFullQuantFilename);
	mPtrStdDevValue->set_text(Util::ToString(stdDev));
}

void WaveAnalyzerController::choose_file(std::string& filename)
{
	Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file(UI_FILENAME);
	Gtk::FileChooserDialog* ptrFilechooser;
	builder->get_widget("filechooserdialog",ptrFilechooser);
	Gtk::FileFilter waveFilter;
	waveFilter.set_name("Wave files");
	waveFilter.add_pattern("*.wav");
	ptrFilechooser->add_filter(waveFilter);
	ptrFilechooser->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
	ptrFilechooser->add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK);
	ptrFilechooser->set_transient_for(*mPtrMainWin);
	int result = ptrFilechooser->run();
	switch (result)
	{
	case Gtk::RESPONSE_OK:
		filename = ptrFilechooser->get_filename();
		break;
	default:
		break;
	}
	delete ptrFilechooser;
}