You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pa-calculator/library.cpp

293 lines
8.7 KiB
C++

#include "library.h"
#include "ui_library.h"
#include <iostream>
#include <QMessageBox>
#include <QSettings>
#include <QFileDialog>
#include <QDebug>
library::library(QWidget *parent) :
QDialog(parent),
ui(new Ui::library)
{
ui->setupUi(this);
unsaved=false;
}
library::~library()
{
delete ui;
}
void library::setAmpPointer(cAmp *pAmp, unsigned int ampCount){
m_pCamp=pAmp;
m_cAmpCount=ampCount;
}
unsigned int library::getAmpCount()
{
return m_cAmpCount;
}
cAmp *library::getAmps()
{
return m_pCamp;
}
void library::open()
{
ui->listWidget_ampView->setCurrentRow(0);
QSettings settings("DKM-Tech","Pa-Calculator");
if (settings.value("library/path","")==""){
settings.setValue("library/path",QFileDialog::getSaveFileName(this,"Select Library Storage File","","Pa Calculator Library File (*.palib)"));
}
//qDebug() << settings.value("library/path","none").toString();
refreshAmpView();
this->exec();
saveLibraryToFile();
}
void library::on_pushButton_addAmp_clicked()
{
m_cAmpCount+=1;
cAmp* tempAmps=new cAmp[m_cAmpCount];
for (unsigned int i=0;i<m_cAmpCount-1;i++){
tempAmps[i].setName(m_pCamp[i].getName());
tempAmps[i].setSensivity(m_pCamp[i].getSensitivity());
tempAmps[i].setSensUnit(m_pCamp[i].getSensivityUnit());
for (unsigned int j=0;j<m_pCamp[i].getAmpModesCount();j++){
tempAmps[i].addAmpMode(m_pCamp[i].getAmpMode(j));
}
}
delete [] m_pCamp;
m_pCamp=tempAmps;
m_pCamp[m_cAmpCount-1]=cAmp("Unnamed Amp",1,volt);
refreshAmpView();
ui->listWidget_ampView->setCurrentRow(m_cAmpCount-1);
ui->lineEdit_ampName->setFocus();
ui->lineEdit_ampName->selectAll();
}
void library::refreshAmpView()
{
ui->listWidget_ampView->clear();
for (unsigned int i=0;i<m_cAmpCount;i++){
ui->listWidget_ampView->addItem(QString::fromStdString(m_pCamp[i].getName()));
}
//std::cerr<<"refreshAmpView started"<<std::endl;
//printAllAmps();
}
void library::refreshModeOverview()
{
ui->listWidget_modeSelector->clear();
if (m_cAmpCount>0){
if (m_pCamp[getCurrentAmpIndex()].getAmpModesCount()>0){
for (unsigned int i=0;i<m_pCamp[getCurrentAmpIndex()].getAmpModesCount();i++){
ui->listWidget_modeSelector->addItem(QString::fromStdString(m_pCamp[getCurrentAmpIndex()].getAmpMode(i).getName()));
//std::cout <<"mode "<<i+1<<" : " <<m_pCamp[getCurrentAmpIndex()].getAmpMode(i).getName()<<std::endl;
}
}
}
//std::cerr<<"refreshModeOverview started"<<std::endl;
//printAllAmps();
}
int library::getCurrentAmpIndex()
{
return ui->listWidget_ampView->currentRow();
}
int library::getCurrentAmpModeIndex()
{
return ui->listWidget_modeSelector->currentRow();
}
void library::printAllAmps()
{
std::cout << "Number of Amps: "<<m_cAmpCount<<std::endl<<std::endl;
for (unsigned int i=0;i<m_cAmpCount;i++){
m_pCamp[i].print();
std::cout <<std::endl;
}
}
void library::saveLibraryToFile()
{
QSettings settings("DKM-Tech","Pa-Calculator");
QString fileName = settings.value("library/path",QString::fromStdString("")).toString();
if (fileName.isEmpty())
return;
else {
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly)) {
QMessageBox::information(this, tr("Unable to open file"),
file.errorString());
return;
}
QDataStream out(&file);
out.setVersion(QDataStream::Qt_4_5);
out << (uint)m_cAmpCount;
for (unsigned int j=0;j<m_cAmpCount;j++){
out << m_pCamp[j];
}
}
}
void library::on_listWidget_ampView_currentRowChanged(int currentRow)
{
if (currentRow>=0){
ui->lineEdit_ampName->setText(QString::fromStdString(m_pCamp[currentRow].getName()));
ui->comboBox_sensUnit->setCurrentIndex(m_pCamp[currentRow].getSensivityUnit());
ui->doubleSpinBox_inputSensitivity->setValue(m_pCamp[currentRow].getSensitivity());
refreshModeOverview();
ui->listWidget_modeSelector->setCurrentRow(0);
ui->lineEdit_ampName->setEnabled(true);
ui->doubleSpinBox_inputSensitivity->setEnabled(true);
}else
{
ui->lineEdit_ampName->setEnabled(false);
ui->doubleSpinBox_inputSensitivity->setEnabled(false);
}
}
void library::on_pushButton_applyChanges_clicked()
{
if (getCurrentAmpIndex()>=0){
m_pCamp[getCurrentAmpIndex()].setName(ui->lineEdit_ampName->text().toStdString());
m_pCamp[getCurrentAmpIndex()].setSensivity(ui->doubleSpinBox_inputSensitivity->value());
sensitivityUnit currentSens;
if (ui->comboBox_sensUnit->currentIndex()==0){
currentSens=volt;
}else{
currentSens=dBu;
}
m_pCamp[getCurrentAmpIndex()].setSensUnit(currentSens);
int selectedRow=getCurrentAmpIndex();
refreshAmpView();
ui->listWidget_ampView->setCurrentRow(selectedRow);
}
}
void library::on_comboBox_sensUnit_currentIndexChanged(int index)
{
double oldValue=ui->doubleSpinBox_inputSensitivity->value();
if (index==0){
ui->doubleSpinBox_inputSensitivity->setSuffix(QString(" V"));
ui->doubleSpinBox_inputSensitivity->setDecimals(2);
ui->doubleSpinBox_inputSensitivity->setValue(0.7746*qPow(10,oldValue/20));
}else{
ui->doubleSpinBox_inputSensitivity->setSuffix(QString(" dBu"));
ui->doubleSpinBox_inputSensitivity->setDecimals(1);
ui->doubleSpinBox_inputSensitivity->setValue(20*std::log10(oldValue/0.7746));
}
}
void library::on_pushButton_deleteAmp_clicked()
{
if (getCurrentAmpIndex()>=0){
m_cAmpCount-=1;
cAmp* tempAmps=new cAmp[m_cAmpCount];
unsigned int selectedRow=getCurrentAmpIndex();
for (unsigned int i=0;i<selectedRow;i++){
tempAmps[i]=m_pCamp[i];
}
for (unsigned int i=selectedRow+1;i<m_cAmpCount+1;i++){
tempAmps[i-1]=m_pCamp[i];
}
delete [] m_pCamp;
m_pCamp=tempAmps;
refreshAmpView();
if (selectedRow-1<0 && m_cAmpCount>0){
ui->listWidget_ampView->setCurrentRow(0);
}else
{
ui->listWidget_ampView->setCurrentRow(selectedRow-1);
}
}
}
void library::on_pushButton_addMode_clicked()
{
if (getCurrentAmpIndex()>=0)
{
if (ui->lineEdit_modeName->text()==""){
QMessageBox msgBox(QMessageBox::Warning,"No mode name","Mode name can't be empty. Please enter a name.");
msgBox.exec();
}else{
cAmpMode mode(ui->lineEdit_modeName->text().toStdString(),ui->spinBox_ratedImp->value(),ui->spinBox_ratedPower->value());
m_pCamp[getCurrentAmpIndex()].addAmpMode(mode);
}
}
refreshModeOverview();
}
void library::on_listWidget_modeSelector_currentRowChanged(int currentRow)
{
if (getCurrentAmpIndex()>=0){
if (currentRow >=0){
ui->lineEdit_modeName->setText(QString::fromStdString(m_pCamp[getCurrentAmpIndex()].getAmpMode(getCurrentAmpModeIndex()).getName()));
ui->spinBox_ratedImp->setValue(m_pCamp[getCurrentAmpIndex()].getAmpMode(getCurrentAmpModeIndex()).getRatedImp());
ui->spinBox_ratedPower->setValue(m_pCamp[getCurrentAmpIndex()].getAmpMode(getCurrentAmpModeIndex()).getRatedPower());
}
}
}
void library::on_pushButton_deleteMode_clicked()
{
int selectedRow=getCurrentAmpModeIndex();
m_pCamp[getCurrentAmpIndex()].deleteAmpMode(getCurrentAmpModeIndex());
refreshModeOverview();
if (selectedRow-1<0 && m_pCamp[getCurrentAmpIndex()].getAmpModesCount()){
ui->listWidget_modeSelector->setCurrentRow(0);
}else
{
ui->listWidget_modeSelector->setCurrentRow(selectedRow-1);
}
}
void library::on_pushButton_applyMode_clicked()
{
unsaved =false;
if (ui->lineEdit_modeName->text()==""){
QMessageBox msgBox(QMessageBox::Warning,"No mode name","Mode name can't be empty. Please enter a name.");
msgBox.exec();
}else{
cAmpMode mode(ui->lineEdit_modeName->text().toStdString(),ui->spinBox_ratedImp->value(),ui->spinBox_ratedPower->value());
m_pCamp[getCurrentAmpIndex()].setAmpMode(getCurrentAmpModeIndex(),mode);
}
int selectedMode=getCurrentAmpModeIndex();
refreshModeOverview();
ui->listWidget_modeSelector->setCurrentRow(selectedMode);
}
void library::on_lineEdit_ampName_textEdited(const QString &arg1)
{
if (unsaved==false){
ui->listWidget_ampView->currentItem()->setText(ui->listWidget_ampView->currentItem()->text()+QString::fromStdString("*"));
unsaved =true;
}
}