summaryrefslogtreecommitdiffstats
path: root/Master/Modellbildung_und_Simulation/Aufgabenblatt1/DFTApp/src/DFTAppController.cpp
blob: b66c987ae78a98b5590caa3ea746817cb6e3ddd5 (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
129
/*
 * DFTAppController.cpp
 *
 *  Created on: 29.04.2011
 *      Author: sven
 */
#ifndef DFTAPPCONTROLLER_H_
	#include "DFTAppController.h"
#endif

#ifndef DFTPROCESSOR_H_
	#include "DFTProcessor.h"
#endif

#ifndef UTIL_H_
	#include "Util.h"
#endif

#ifndef _LIBGLADEMM_XML_H
	#include <libglademm/xml.h>
#endif

#include <iostream>

// because of static
const char* DFTAppController::UI_FILENAME = "ui/dftapp.glade";

DFTAppController::DFTAppController() {
	try {
		Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file(UI_FILENAME);
		builder->get_widget("mainwindow",mPtrMainWin);
		builder->get_widget("inputfileentry",mPtrInputFileEntry);
		builder->get_widget("numsamplesentry",mPtrNumSamplesEntry);
		builder->get_widget("startbtn",mPtrStartBtn);
		builder->get_widget("openinputfilebtn",mPtrOpenBtn);
		builder->get_widget("textview1",mPtrTextView);
	} catch (Gtk::BuilderError err) {
		std::cout << "Builder Error: " << err.code() << std::endl;
	}
	mRefPtrTextBuffer = Gtk::TextBuffer::create();
	mPtrTextView->set_buffer(mRefPtrTextBuffer);
	mPtrMainWin->signal_hide().connect(sigc::ptr_fun(&Gtk::Main::quit));
	mPtrOpenBtn->signal_clicked().connect(sigc::mem_fun(this,&DFTAppController::on_button_open));
	mPtrStartBtn->signal_clicked().connect(sigc::mem_fun(this,&DFTAppController::on_button_start));
	mPtrNumSamplesEntry->signal_changed().connect(sigc::mem_fun(this,&DFTAppController::on_numsamples_changed));
	on_numsamples_changed();
}

DFTAppController::~DFTAppController() {
	// TODO Auto-generated destructor stub
}

void DFTAppController::startApp(Gtk::Main& kit)
{
	kit.run(*mPtrMainWin);
	return;
}

void DFTAppController::on_button_start()
{
	DFTProcessor dftProc(mParams);
	std::string text = "Idx\tInput\tRe\tIm\n";
	const std::vector<double>& inputData = dftProc.getInputData();
	const std::vector<double>& Re = dftProc.getRe();
	const std::vector<double>& Im = dftProc.getIm();
	std::vector<double>::const_iterator inIter = inputData.begin();
	std::vector<double>::const_iterator reIter = Re.begin();
	std::vector<double>::const_iterator imIter = Im.begin();
	unsigned idx = 0;
	for (;inIter != inputData.end(); inIter++)
	{
		if (inIter != inputData.begin()) {
			text += "\n";
		}
		text += Util::ToUString(idx);
		text += "\t";
		text += Util::ToUString((int) *inIter);
		if (idx < mParams.getNumSamples() / 2) {
			text += "\t";
			text += Util::ToUString(*reIter);
			text += "\t";
			text += Util::ToUString(*imIter);
		}
		reIter++;
		imIter++;
		idx++;
	}
	mRefPtrTextBuffer->set_text(text);
	std::cout << mRefPtrTextBuffer->get_line_count() << " lines" << std::endl;
}

void DFTAppController::on_button_open()
{
	std::string filename;
	Gtk::FileChooserDialog* ptrFilechooser;
	try {
		Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file(UI_FILENAME);
		builder->get_widget("filechooserdlg",ptrFilechooser);
	} catch (Gtk::BuilderError err) {
	std::cout << "Builder Error: " << err.code() << std::endl;
	}
	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();
		mParams.setInputFilename(filename);
		mPtrInputFileEntry->set_text(mParams.getInputFilename());
		break;
	default:
		break;
	}
	delete ptrFilechooser;
}

void DFTAppController::on_numsamples_changed()
{
	unsigned numSamples;
	Glib::ustring numSamplesStr = mPtrNumSamplesEntry->get_text();
	numSamples = Util::ToUint(numSamplesStr);
	mParams.setNumSamples(numSamples);
}