LibreVNA/Software/PC_Application/modehandler.cpp
Kiara Navarro cb9b03e418
app/mode: place tabs in menu corner
Signed-off-by: Kiara Navarro <sophiekovalevsky@fedoraproject.org>
2022-07-09 12:54:38 -05:00

151 lines
3.4 KiB
C++

#include "modehandler.h"
#include "VNA/vna.h"
#include "SpectrumAnalyzer/spectrumanalyzer.h"
#include "Generator/generator.h"
#include "mode.h"
#include "averaging.h"
ModeHandler::ModeHandler(AppWindow *aw):
QObject(),
aw(aw)
{}
void ModeHandler::shutdown()
{
for(auto m : modes) {
m->shutdown();
}
}
int ModeHandler::createMode(QString name, Mode::Type t)
{
auto mode = Mode::createNew(aw, name, t);
return createMode(mode);
}
int ModeHandler::createMode(Mode *mode)
{
modes.push_back(mode);
currentModeIndex = int(modes.size()) - 1;
connect(mode, &Mode::statusbarMessage, this, &ModeHandler::setStatusBarMessageChanged);
auto * m = getMode(currentModeIndex);
m->activate();
emit ModeCreated(currentModeIndex);
return (currentModeIndex);
}
Mode* ModeHandler::getMode(int index)
{
return modes.at(index);
}
std::vector<Mode*> ModeHandler::getModes()
{
return modes;
}
void ModeHandler::setCurrentIndex(int index)
{
// if ( (getCurrentIndex() != index) && (index >= 0)) {
if ( (getCurrentIndex() != index) && (index >= 0)) {
currentModeIndex = index;
auto * m = getMode(getCurrentIndex());
m->activate();
emit CurrentModeChanged(getCurrentIndex());
}
}
int ModeHandler::getCurrentIndex()
{
return currentModeIndex;
}
void ModeHandler::closeMode(int index)
{
disconnect(modes.at(index), &Mode::statusbarMessage, this, &ModeHandler::setStatusBarMessageChanged);
delete modes.at(index);
modes.erase(modes.begin() + index);
if (int(modes.size()) > 0) {
if (getCurrentIndex() == index) {
setCurrentIndex(getCurrentIndex()-1); // Select bar before one deleted
}
}
emit ModeClosed(index);
}
void ModeHandler::closeModes()
{
while(modes.size() > 0) {
closeMode(0);
}
}
void ModeHandler::setStatusBarMessageChanged(const QString &msg)
{
emit StatusBarMessageChanged(msg);
}
bool ModeHandler::nameAllowed(const QString &name)
{
for(auto m : modes) {
if(m->getName() == name) {
/* name already taken, no duplicates allowed
* when importing, name is used as value
*/
return false;
}
}
return true;
}
int ModeHandler::findIndex(Mode *targetMode)
{
auto it = std::find(modes.begin(), modes.end(), targetMode);
return it - modes.begin();
}
Mode* ModeHandler::findFirstOfType(Mode::Type t)
{
for(auto m : modes) {
if(m->getType() == t) {
return m;
}
}
return nullptr;
}
void ModeHandler::setAveragingMode(Averaging::Mode value)
{
// averaging mode may have changed, update for all relevant modes
for (auto m : getModes())
{
switch (m->getType())
{
case Mode::Type::VNA:
static_cast<VNA*>(m)->setAveragingMode(value);
break;
case Mode::Type::SA:
static_cast<SpectrumAnalyzer*>(m)->setAveragingMode(value);
break;
case Mode::Type::SG:
case Mode::Type::Last:
default:
break;
}
}
for(auto m : modes) {
if (m->getType() == Mode::Type::SA) {
static_cast<SpectrumAnalyzer*>(m)->setAveragingMode(value);
}
else if (m->getType() == Mode::Type::VNA) {
static_cast<VNA*>(m)->setAveragingMode(value);
}
}
}