From 1656e08b6f109805517031506747646c719b2501 Mon Sep 17 00:00:00 2001 From: Alexander Diamadis Date: Sat, 30 Oct 2021 13:04:08 +0200 Subject: [PATCH] Added Speaker To Library --- PA_Calculator.pro | 2 + cspeaker.cpp | 96 +++++++++++++++++++++++++++++ cspeaker.h | 33 ++++++++++ library.cpp | 146 +++++++++++++++++++++++++++++++++++++++++++ library.h | 25 +++++++- library.ui | 153 +++++++++++++++++++++++++++++++++++++++++++++- mainwindow.cpp | 44 ++++++++++++- mainwindow.h | 9 +++ mainwindow.ui | 36 ++++++++++- 9 files changed, 535 insertions(+), 9 deletions(-) create mode 100644 cspeaker.cpp create mode 100644 cspeaker.h diff --git a/PA_Calculator.pro b/PA_Calculator.pro index c0751cb..c28f777 100644 --- a/PA_Calculator.pro +++ b/PA_Calculator.pro @@ -11,6 +11,7 @@ CONFIG += c++11 SOURCES += \ camp.cpp \ campmode.cpp \ + cspeaker.cpp \ library.cpp \ main.cpp \ mainwindow.cpp @@ -18,6 +19,7 @@ SOURCES += \ HEADERS += \ camp.h \ campmode.h \ + cspeaker.h \ library.h \ mainwindow.h diff --git a/cspeaker.cpp b/cspeaker.cpp new file mode 100644 index 0000000..f8312ea --- /dev/null +++ b/cspeaker.cpp @@ -0,0 +1,96 @@ +#include "cspeaker.h" +#include + +cSpeaker::cSpeaker() +{ + +} + +cSpeaker::cSpeaker(std::string name, unsigned short imp, unsigned short rmsPower, unsigned short peakPower, unsigned short hpf) +{ + m_name=name; + m_imp=imp; + m_rmsPower=rmsPower; + m_peakPower=peakPower; + m_hpf=hpf; +} + +std::string cSpeaker::getName() +{ + return m_name; +} + +unsigned short cSpeaker::getImpedance() +{ + return m_imp; +} + +unsigned short cSpeaker::getRMSPower() +{ + return m_rmsPower; +} + +unsigned short cSpeaker::getPeakPower() +{ + return m_peakPower; +} + +unsigned short cSpeaker::getHPF() +{ + return m_hpf; +} + +void cSpeaker::setName(std::string name) +{ + m_name=name; +} + +void cSpeaker::setImpedance(unsigned short imp) +{ + m_imp=imp; +} + +void cSpeaker::setRMSPower(unsigned short rmsPower) +{ + m_rmsPower=rmsPower; +} + +void cSpeaker::setPeakPower(unsigned short peakPower) +{ + m_peakPower=peakPower; +} + +void cSpeaker::setHPF(unsigned short hpf) +{ + m_hpf=hpf; +} + +QDataStream& operator<<(QDataStream& out, cSpeaker& speaker){ + out << QString::fromStdString(speaker.getName()); + out << (quint16)speaker.getImpedance(); + out << (quint16)speaker.getRMSPower(); + out << (quint16)speaker.getPeakPower(); + out << (quint16)speaker.getHPF(); + return out; +} + +QDataStream& operator>>(QDataStream& in, cSpeaker& speaker){ + QString name; + in >> name; + speaker.m_name=name.toStdString(); + + quint16 imp,rmsPower,peakPower,hpf; + + in >> imp; + in >> rmsPower; + in >> peakPower; + in >> hpf; + + speaker.m_imp=(unsigned short)imp; + speaker.m_rmsPower=(unsigned short)rmsPower; + speaker.m_peakPower=(unsigned short)peakPower; + speaker.m_hpf=(unsigned short)hpf; + + + return in; +} diff --git a/cspeaker.h b/cspeaker.h new file mode 100644 index 0000000..645fd51 --- /dev/null +++ b/cspeaker.h @@ -0,0 +1,33 @@ +#ifndef CSPEAKER_H +#define CSPEAKER_H +#include +#include + +class cSpeaker +{ +public: + cSpeaker(); + cSpeaker(std::string name, unsigned short imp, unsigned short rmsPower, unsigned short peakPower, unsigned short hpf); + std::string getName(); + unsigned short getImpedance(); + unsigned short getRMSPower(); + unsigned short getPeakPower(); + unsigned short getHPF(); + + void setName(std::string name); + void setImpedance(unsigned short imp); + void setRMSPower(unsigned short rmsPower); + void setPeakPower(unsigned short peakPower); + void setHPF(unsigned short hpf); + + friend QDataStream& operator <<(QDataStream& out,cSpeaker& speaker); + friend QDataStream& operator >>(QDataStream& in,cSpeaker& speaker); +private: + std::string m_name; + unsigned short m_imp; + unsigned short m_rmsPower; + unsigned short m_peakPower; + unsigned short m_hpf; +}; + +#endif // CSPEAKER_H diff --git a/library.cpp b/library.cpp index b0cd632..e02e993 100644 --- a/library.cpp +++ b/library.cpp @@ -12,6 +12,7 @@ library::library(QWidget *parent) : { ui->setupUi(this); unsaved=false; + speakerUnsaved=false; } library::~library() @@ -34,6 +35,22 @@ cAmp *library::getAmps() return m_pCamp; } +void library::setSpeakerPointer(cSpeaker *pSpeaker, unsigned int speakerCount) +{ + m_pSpeaker=pSpeaker; + m_SpeakerCount=speakerCount; +} + +unsigned int library::getSpeakerCount() +{ + return m_SpeakerCount; +} + +cSpeaker *library::getSpeaker() +{ + return m_pSpeaker; +} + void library::open() { @@ -44,7 +61,17 @@ void library::open() } //qDebug() << settings.value("library/path","none").toString(); refreshAmpView(); + refreshSpeakerView(); this->exec(); + if (unsaved or speakerUnsaved){ + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, "Unsaved Changes", "Save unsaved Changes?", + QMessageBox::Yes|QMessageBox::No); + if (reply == QMessageBox::Yes) { + on_pushButton_applyChanges_clicked(); + on_pushButton_applySpeaker_clicked(); + } + } saveLibraryToFile(); } @@ -98,6 +125,14 @@ void library::refreshModeOverview() } +void library::refreshSpeakerView() +{ + ui->listWidget_speakerView->clear(); + for (unsigned int i=0;ilistWidget_speakerView->addItem(QString::fromStdString(m_pSpeaker[i].getName())); + } +} + int library::getCurrentAmpIndex() { return ui->listWidget_ampView->currentRow(); @@ -108,6 +143,11 @@ int library::getCurrentAmpModeIndex() return ui->listWidget_modeSelector->currentRow(); } +int library::getCurrentSpeakerIndex() +{ + return ui->listWidget_speakerView->currentRow(); +} + void library::printAllAmps() { std::cout << "Number of Amps: "<=0){ + unsaved =false; m_pCamp[getCurrentAmpIndex()].setName(ui->lineEdit_ampName->text().toStdString()); m_pCamp[getCurrentAmpIndex()].setSensivity(ui->doubleSpinBox_inputSensitivity->value()); sensitivityUnit currentSens; @@ -290,3 +335,104 @@ void library::on_lineEdit_ampName_textEdited(const QString &arg1) } } + +void library::on_pushButton_addSpeaker_clicked() +{ + m_SpeakerCount+=1; + cSpeaker* tempSpeaker=new cSpeaker[m_SpeakerCount]; + for (unsigned int i=0;ilistWidget_speakerView->setCurrentRow(m_SpeakerCount-1); + ui->lineEdit_speakerName->setFocus(); + ui->lineEdit_speakerName->selectAll(); +} + + +void library::on_listWidget_speakerView_currentRowChanged(int currentRow) +{ + if (currentRow>=0){ + ui->lineEdit_speakerName->setText(QString::fromStdString(m_pSpeaker[currentRow].getName())); + ui->spinBox_speakerImp->setValue(m_pSpeaker[currentRow].getImpedance()); + ui->spinBox_speakerRMSPower->setValue(m_pSpeaker[currentRow].getRMSPower()); + ui->spinBox_speakerPeakPower->setValue(m_pSpeaker[currentRow].getPeakPower()); + ui->spinBox_speakerHPF->setValue(m_pSpeaker[currentRow].getHPF()); + + ui->lineEdit_speakerName->setEnabled(true); + //ui->spinBox_speakerImp->setEnabled(true); + //ui->spinBox_speakerRMSPower->setEnabled(true); + //ui->spinBox_speakerPeakPower->setEnabled(true); + //ui->spinBox_speakerHPF->setEnabled(true); + + }else { + //ui->lineEdit_speakerName->setEnabled(false); + //ui->spinBox_speakerImp->setEnabled(false); + //ui->spinBox_speakerRMSPower->setEnabled(false); + //ui->spinBox_speakerPeakPower->setEnabled(false); + //ui->spinBox_speakerHPF->setEnabled(false); + } + +} + + +void library::on_pushButton_deleteSpeaker_clicked() +{ + if (getCurrentSpeakerIndex()>=0){ + m_SpeakerCount-=1; + cSpeaker* tempSpeaker=new cSpeaker[m_SpeakerCount]; + unsigned int selectedRow=getCurrentSpeakerIndex(); + for (unsigned int i=0;i0){ + ui->listWidget_speakerView->setCurrentRow(0); + }else + { + ui->listWidget_speakerView->setCurrentRow(selectedRow-1); + } + } +} + + +void library::on_pushButton_applySpeaker_clicked() +{ + if (getCurrentSpeakerIndex()>=0){ + speakerUnsaved =false; + m_pSpeaker[getCurrentSpeakerIndex()].setName(ui->lineEdit_speakerName->text().toStdString()); + m_pSpeaker[getCurrentSpeakerIndex()].setImpedance(ui->spinBox_speakerImp->value()); + m_pSpeaker[getCurrentSpeakerIndex()].setRMSPower(ui->spinBox_speakerRMSPower->value()); + m_pSpeaker[getCurrentSpeakerIndex()].setPeakPower(ui->spinBox_speakerPeakPower->value()); + m_pSpeaker[getCurrentSpeakerIndex()].setHPF(ui->spinBox_speakerHPF->value()); + + + int selectedRow=getCurrentSpeakerIndex(); + refreshSpeakerView(); + ui->listWidget_speakerView->setCurrentRow(selectedRow); + } + +} + + +void library::on_lineEdit_speakerName_textEdited(const QString &arg1) +{ + if (speakerUnsaved==false){ + ui->listWidget_speakerView->currentItem()->setText(ui->listWidget_speakerView->currentItem()->text()+QString::fromStdString("*")); + speakerUnsaved =true; + } +} + diff --git a/library.h b/library.h index 8e69d59..26de696 100644 --- a/library.h +++ b/library.h @@ -3,6 +3,8 @@ #include #include "camp.h" +#include "cspeaker.h" + namespace Ui { class library; } @@ -16,6 +18,11 @@ public: void setAmpPointer(cAmp* pAmp,unsigned int ampCount); unsigned int getAmpCount(); cAmp* getAmps(); + + void setSpeakerPointer(cSpeaker* pSpeaker, unsigned int speakerCount); + unsigned int getSpeakerCount(); + cSpeaker* getSpeaker(); + void open(); ~library(); @@ -46,20 +53,36 @@ private slots: void on_lineEdit_ampName_textEdited(const QString &arg1); + void on_pushButton_addSpeaker_clicked(); + + void on_listWidget_speakerView_currentRowChanged(int currentRow); + + void on_pushButton_deleteSpeaker_clicked(); + + void on_pushButton_applySpeaker_clicked(); + + void on_lineEdit_speakerName_textEdited(const QString &arg1); + private: Ui::library *ui; cAmp* m_pCamp; unsigned int m_cAmpCount; + cSpeaker* m_pSpeaker; + unsigned int m_SpeakerCount; + void refreshAmpView(); - void refreshAmpOverview(); void refreshModeOverview(); + void refreshSpeakerView(); + int getCurrentAmpIndex(); int getCurrentAmpModeIndex(); + int getCurrentSpeakerIndex(); void printAllAmps(); bool unsaved; + bool speakerUnsaved; void saveLibraryToFile(); }; diff --git a/library.ui b/library.ui index 6086736..4095d42 100644 --- a/library.ui +++ b/library.ui @@ -20,12 +20,15 @@ Qt::Horizontal - QDialogButtonBox::Close + QDialogButtonBox::Cancel|QDialogButtonBox::Save + + 0 + Amplifiers @@ -215,10 +218,154 @@ - + - Tab 2 + Speaker + + + + + + + + + + + + Add + + + + + + + Delete + + + + + + + Apply + + + + + + + + + + + + + Name + + + + + + + false + + + + + + + Rated Impedance + + + + + + + true + + + Ohm + + + 1 + + + 32 + + + + + + + RMS Power + + + + + + + true + + + W + + + 1 + + + 10000 + + + + + + + Peak Power + + + + + + + true + + + W + + + 1 + + + 10000 + + + + + + + Crossover highpass-frequency + + + + + + + true + + + Hz + + + 1 + + + 20000 + + + + + + diff --git a/mainwindow.cpp b/mainwindow.cpp index b55e3fc..2076e02 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -16,9 +16,14 @@ MainWindow::MainWindow(QWidget *parent) ui->setupUi(this); m_ampCount=0; m_pCAmp=Q_NULLPTR; + + m_speakerCount=0; + m_pSpeaker=Q_NULLPTR; + loadLibrary(); refreshLibraryAmps(); refreshLibraryAmpModes(); + refreshLibrarySpeaker(); } MainWindow::~MainWindow() @@ -121,11 +126,17 @@ void MainWindow::on_actionEditLibrary_triggered() { library* dialog=new library; dialog->setAmpPointer(m_pCAmp,m_ampCount); + dialog->setSpeakerPointer(m_pSpeaker,m_speakerCount); + dialog->open(); m_ampCount=dialog->getAmpCount(); m_pCAmp=dialog->getAmps(); + m_pSpeaker=dialog->getSpeaker(); + m_speakerCount=dialog->getSpeakerCount(); + refreshLibraryAmps(); refreshLibraryAmpModes(); + refreshLibrarySpeaker(); delete dialog; } @@ -147,6 +158,14 @@ void MainWindow::refreshLibraryAmpModes() } } +void MainWindow::refreshLibrarySpeaker() +{ + ui->comboBox_librarySpeaker->clear(); + for (unsigned int i=0;icomboBox_librarySpeaker->addItem(QString::fromStdString(m_pSpeaker[i].getName())); + } +} + void MainWindow::loadLibrary() { QSettings settings("DKM-Tech","Pa-Calculator"); @@ -171,6 +190,16 @@ void MainWindow::loadLibrary() for (unsigned int j=0;j> m_pCAmp[j]; } + + in >> count; + m_speakerCount=count; + if (m_speakerCount>0){ + delete[] m_pSpeaker; + m_pSpeaker=new cSpeaker[m_speakerCount]; + } + for (unsigned int j=0;j> m_pSpeaker[j]; + } } } @@ -183,7 +212,7 @@ void MainWindow::saveLibrary() else { QFile file(fileName); if (!file.open(QIODevice::WriteOnly)) { - QMessageBox::information(this, tr("Unable to open file"), + QMessageBox::information(this, tr("Unable to open file. New one will be created on exit at :")+fileName, file.errorString()); return; } @@ -219,7 +248,7 @@ void MainWindow::on_pushButton_clicked() void MainWindow::on_actionChange_Library_Location_triggered() { QSettings settings("DKM-Tech","Pa-Calculator"); - settings.setValue("library/path",QFileDialog::getSaveFileName(this,"Where to store the storage file?",settings.value("library/path",QString::fromStdString("")).toString(),"Pa Calculator Library File (*.palib)")); + settings.setValue("library/path",QFileDialog::getSaveFileName(this,"Where to store the libary file?",settings.value("library/path",QString::fromStdString("")).toString(),"Pa Calculator Library File (*.palib)")); saveLibrary(); } @@ -232,3 +261,14 @@ void MainWindow::on_actionOpen_Library_triggered() refreshLibraryAmps(); } + +void MainWindow::on_pushButton_loadSpeaker_clicked() +{ + if (ui->comboBox_librarySpeaker->currentIndex()>=0){ + ui->spinBox_speakerImp->setValue(m_pSpeaker[ui->comboBox_librarySpeaker->currentIndex()].getImpedance()); + ui->spinBox_speakerRMSPower->setValue(m_pSpeaker[ui->comboBox_librarySpeaker->currentIndex()].getRMSPower()); + ui->spinBox_speakerPeakPower->setValue(m_pSpeaker[ui->comboBox_librarySpeaker->currentIndex()].getPeakPower()); + ui->spinBox_speakerHPF->setValue(m_pSpeaker[ui->comboBox_librarySpeaker->currentIndex()].getHPF()); + } +} + diff --git a/mainwindow.h b/mainwindow.h index 8d51270..834a6e0 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -3,6 +3,7 @@ #include #include "camp.h" +#include "cspeaker.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } @@ -31,14 +32,22 @@ private slots: void on_actionOpen_Library_triggered(); + void on_pushButton_loadSpeaker_clicked(); + private: Ui::MainWindow *ui; cAmp* m_pCAmp; unsigned int m_ampCount; + cSpeaker* m_pSpeaker; + unsigned int m_speakerCount; + + void refreshLibraryAmps(); void refreshLibraryAmpModes(); + void refreshLibrarySpeaker(); + void loadLibrary(); void saveLibrary(); diff --git a/mainwindow.ui b/mainwindow.ui index a7f74a6..1fe8dd0 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -6,7 +6,7 @@ 0 0 - 1084 + 1167 608 @@ -163,7 +163,7 @@ - Load Preset + Load Amp-Preset @@ -277,6 +277,36 @@ + + + + Load Speaker from library + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Load Speaker-Preset + + + @@ -582,7 +612,7 @@ 0 0 - 1084 + 1167 24