Entropy Piano Tuner  1.1.3 (documentation not yet complete)
An open-source experimental software for piano tuning by entropy minimization
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
editpianosheetdialog.cpp
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright 2015 Haye Hinrichsen, Christoph Wick
3  *
4  * This file is part of Entropy Piano Tuner.
5  *
6  * Entropy Piano Tuner is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by the
8  * Free Software Foundation, either version 3 of the License, or (at your
9  * option) any later version.
10  *
11  * Entropy Piano Tuner is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14  * more details.
15  *
16  * You should have received a copy of the GNU General Public License along with
17  * Entropy Piano Tuner. If not, see http://www.gnu.org/licenses/.
18  *****************************************************************************/
19 
20 #include "editpianosheetdialog.h"
21 #include <assert.h>
22 #include <QDate>
23 #include <QDateTime>
24 #include <QKeyEvent>
25 #include <QDebug>
26 #include "ui_editpianosheetdialog.h"
27 #include "../core/config.h"
28 #include "../core/piano/piano.h"
29 #include "qtconfig.h"
30 #include "displaysize.h"
31 #include "QScroller"
32 
34  QDialog(parent, Qt::Window),
35  ui(new Ui::EditPianoSheetDialog)
36 {
37  ui->setupUi(this);
38  setModal(true);
39 
41  // on small devices we need a bit more space for translated languages (e.g. German), reduce margins in general for xsmall devices
42  layout()->setMargin(3);
43  ui->scrollAreaWidgetContents->layout()->setMargin(1);
44  }
45 
46  ui->nameLineEdit->setText(QString::fromStdString(piano.getName()));
47  ui->pianoType->setCurrentIndex(piano.getPianoType());
48  ui->serialNumberLineEdit->setText(QString::fromStdString(piano.getSerialNumber()));
49  // we only need the year
50  ui->yearEdit->setDate(QDate(QString::fromStdString(piano.getManufactionYear()).toInt(), 1, 1));
51  ui->productionLocationLineEdit->setText(QString::fromStdString(piano.getManufactionLocation()));
52 
53  ui->tuningLocationLineEdit->setText(QString::fromStdString(piano.getTuningLocation()));
54  QDateTime time = QDateTime::fromString(QString::fromStdString(piano.getTuningTime()), "yyyy-MM-dd HH:mm:ss").toLocalTime();
55  time.setTimeSpec(Qt::UTC);
56  ui->timeOfTuningDateTimeEdit->setDateTime(time.toLocalTime());
57 
58  ui->concertPitchSpinBox->setValue(piano.getConcertPitch());
59  ui->numberOfKeysSpinBox->setValue(piano.getKeyboard().getNumberOfKeys());
60  ui->keyNumberOfASpinBox->setValue(piano.getKeyboard().getKeyNumberOfA4() + 1); // counting starts at 1 (not at 0)
61  ui->keysOnBassBridgeSpinBox->setValue(piano.getKeyboard().getNumberOfBassKeys());
62 
63  ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
64  QScroller::grabGesture(ui->scrollArea->viewport(), QScroller::LeftMouseButtonGesture);
65 
66  SHOW_DIALOG(this);
67 }
68 
70 {
71  delete ui;
72 }
73 
75  assert(piano);
76 
77  piano->setName(ui->nameLineEdit->text().toStdString());
78  piano->setType(static_cast<piano::PianoType>(ui->pianoType->currentIndex()));
79  piano->setSerialNumber(ui->serialNumberLineEdit->text().toStdString());
80  // we only need the year
81  piano->setManufactureYear(QString("%1").arg(ui->yearEdit->date().year()).toStdString());
82  piano->setManufactureLocation(ui->productionLocationLineEdit->text().toStdString());
83 
84  piano->setTuningLocation(ui->tuningLocationLineEdit->text().toStdString());
85  piano->setTuningTime(ui->timeOfTuningDateTimeEdit->dateTime().toUTC().toString("yyyy-MM-dd HH:mm:ss").toStdString());
86  piano->setConcertPitch(ui->concertPitchSpinBox->value());
87  piano->getKeyboard().setNumberOfBassKeys(ui->keysOnBassBridgeSpinBox->value());
88 
89  piano->getKeyboard().changeKeyboardConfiguration(ui->numberOfKeysSpinBox->value(),
90  ui->keyNumberOfASpinBox->value() - 1); // counting start from 1 to 0
91 }
92 
93 void EditPianoSheetDialog::keyPressEvent(QKeyEvent *event) {
94  switch (event->key()) {
95  case Qt::Key_Return:
96  case Qt::Key_Enter:
97  if (!focusWidget() || focusWidget() == this || focusWidget() == ui->scrollArea) {
98  QDialog::keyPressEvent(event);
99  }
100  break;
101  default:
102  QDialog::keyPressEvent(event);
103  break;
104  }
105 }
106 
108  ui->timeOfTuningDateTimeEdit->setDateTime(QDateTime::currentDateTime());
109 }
110 
112  ui->keyNumberOfASpinBox->setMaximum(k);
113 }
114 
116  ui->concertPitchSpinBox->setValue(Piano::DEFAULT_CONCERT_PITCH);
117 }
118 
120  ui->numberOfKeysSpinBox->setValue(Piano::DEFAULT_NUMBER_OF_KEYS);
121 }
122 
124  ui->keyNumberOfASpinBox->setValue(Piano::DEFAULT_KEY_NUMBER_OF_A + 1);
125 }
126 
128  ui->keysOnBassBridgeSpinBox->setValue(Piano::DEFAULT_KEYS_ON_BASS_BRIDGE);
129 }
void setConcertPitch(double pitch)
Definition: piano.h:79
static const double DEFAULT_CONCERT_PITCH
default concert pitch of A
Definition: piano.h:46
piano::PianoType getPianoType() const
Definition: piano.h:60
void setName(const std::string &name)
Definition: piano.h:56
const std::string & getManufactionYear() const
Definition: piano.h:67
void changeKeyboardConfiguration(int numberOfKeys, int keyNumberOfA)
Change keyboard configuration.
Definition: keyboard.cpp:73
void onDefaultKeyNumberOfA()
Slot to set the key number of A to its default value.
#define SHOW_DIALOG(d)
Definition: qtconfig.h:41
static const int DEFAULT_KEY_NUMBER_OF_A
Definition: piano.h:44
Definition: piano.h:40
const std::string & getManufactionLocation() const
Definition: piano.h:70
const std::string & getSerialNumber() const
Definition: piano.h:64
static const int DEFAULT_KEYS_ON_BASS_BRIDGE
Definition: piano.h:45
void setType(piano::PianoType type)
Definition: piano.h:59
Dialog to edit the piano data sheet stored in a Piano.
void setSerialNumber(const std::string &number)
Definition: piano.h:63
int getNumberOfBassKeys() const
Definition: keyboard.h:75
Ui::EditPianoSheetDialog * ui
The Ui of the dialog.
const Keyboard & getKeyboard() const
Definition: piano.h:83
void setManufactureYear(const std::string &year)
Definition: piano.h:66
void keyPressEvent(QKeyEvent *event)
Reimplemented keyPressEvent(QKeyEvent*)
static const int DEFAULT_NUMBER_OF_KEYS
Definition: piano.h:43
const std::string & getTuningTime() const
Definition: piano.h:77
EditPianoSheetDialog(const Piano &piano, QWidget *parent=0)
Default constructor.
const std::string & getTuningLocation() const
Definition: piano.h:73
int getKeyNumberOfA4() const
Definition: keyboard.h:73
void onDefaultConcertPitch()
Slot to set the concert pitch to its default value.
const double & getConcertPitch() const
Definition: piano.h:80
void onDefaultKeysOnBassBridge()
Slot to set the keys on bass bridge to its default value.
void setNumberOfBassKeys(int keys)
Definition: keyboard.h:77
void onNumberOfKeysChanged(int k)
The current number of keys changed.
void setTuningLocation(const std::string &loc)
Definition: piano.h:72
void setManufactureLocation(const std::string &loc)
Definition: piano.h:69
~EditPianoSheetDialog()
Default destructor.
static const std::unique_ptr< DisplaySizeDefines > & getSingleton()
Definition: displaysize.cpp:29
int getNumberOfKeys() const
Definition: keyboard.h:72
const std::string & getName() const
Definition: piano.h:57
void onSetTuningTimeToNow()
Slot to set the tuning time to the current time.
void onDefaultNumberOfKeys()
Slot to set the number of keys to its default value.
void setTuningTime(const std::string &time)
Definition: piano.h:75
void applyData(Piano *piano) const
Applys the current values in the dialog to the given piano.