summaryrefslogtreecommitdiff
path: root/muse2/muse/widgets/pasteeventsdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse2/muse/widgets/pasteeventsdialog.cpp')
-rw-r--r--muse2/muse/widgets/pasteeventsdialog.cpp175
1 files changed, 175 insertions, 0 deletions
diff --git a/muse2/muse/widgets/pasteeventsdialog.cpp b/muse2/muse/widgets/pasteeventsdialog.cpp
new file mode 100644
index 00000000..04b7cbd7
--- /dev/null
+++ b/muse2/muse/widgets/pasteeventsdialog.cpp
@@ -0,0 +1,175 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: pasteeventsdialog.cpp,v 1.1.1.1 2011/05/05 18:51:04 flo93 Exp $
+// (C) Copyright 2011 Florian Jung (flo93@sourceforge.net)
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; version 2 of
+// the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+//=========================================================
+
+#include <QButtonGroup>
+#include "pasteeventsdialog.h"
+#include "xml.h"
+#include "gconfig.h"
+
+using MusEConfig::config;
+
+namespace MusEDialog {
+
+PasteEventsDialog::PasteEventsDialog(QWidget* parent)
+ : QDialog(parent)
+{
+ setupUi(this);
+
+ raster_spinbox->setSingleStep(config.division);
+
+ connect(raster_spinbox, SIGNAL(valueChanged(int)), this, SLOT(raster_changed(int)));
+ connect(n_spinbox, SIGNAL(valueChanged(int)), this, SLOT(number_changed(int)));
+ connect(max_distance_spinbox, SIGNAL(valueChanged(int)), this, SLOT(max_distance_changed(int)));
+
+ into_single_part_allowed=true;
+
+ pull_values();
+}
+
+void PasteEventsDialog::pull_values()
+{
+ into_single_part = all_into_selected_part_checkbox->isChecked();
+ always_new_part = always_new_button->isChecked();
+ never_new_part = never_new_button->isChecked();
+
+ int temp = max_distance_spinbox->value();
+ if (temp < 0)
+ max_distance = 0;
+ else
+ max_distance = unsigned(temp);
+
+ number = n_spinbox->value();
+ raster = raster_spinbox->value();
+}
+
+void PasteEventsDialog::accept()
+{
+ pull_values();
+ QDialog::accept();
+}
+
+int PasteEventsDialog::exec()
+{
+ all_into_selected_part_checkbox->setChecked(into_single_part && into_single_part_allowed);
+ all_into_selected_part_checkbox->setEnabled(into_single_part_allowed);
+ into_single_part_allowed=true;
+
+ if (always_new_part)
+ always_new_button->setChecked(true);
+ else if (never_new_part)
+ never_new_button->setChecked(true);
+ else
+ sometimes_into_new_button->setChecked(true);
+
+ max_distance_spinbox->setValue(max_distance);
+
+ n_spinbox->setValue(number);
+ raster_spinbox->setValue(raster);
+
+ return QDialog::exec();
+}
+
+QString PasteEventsDialog::ticks_to_quarter_string(int ticks)
+{
+ if (ticks % config.division == 0)
+ {
+ return tr("%n quarter(s)", "", ticks/config.division);
+ }
+ else
+ {
+ double quarters = (double) ticks/config.division;
+ bool one = ( quarters > 0.995 && quarters < 1.005 );
+ if (one)
+ return QString::number(quarters, 'f', 2) + " " + tr("quarter");
+ else
+ return QString::number(quarters, 'f', 2) + " " + tr("quarters");
+ }
+}
+
+void PasteEventsDialog::max_distance_changed(int d)
+{
+ max_distance_quarters->setText(ticks_to_quarter_string(d));
+}
+
+void PasteEventsDialog::raster_changed(int r)
+{
+ raster_quarters->setText(ticks_to_quarter_string(r));
+ insert_quarters->setText(ticks_to_quarter_string(r*n_spinbox->value()));
+}
+
+void PasteEventsDialog::number_changed(int n)
+{
+ insert_quarters->setText(ticks_to_quarter_string(n*raster_spinbox->value()));
+}
+
+
+void PasteEventsDialog::read_configuration(Xml& xml)
+{
+ for (;;)
+ {
+ Xml::Token token = xml.parse();
+ if (token == Xml::Error || token == Xml::End)
+ break;
+
+ const QString& tag = xml.s1();
+ switch (token)
+ {
+ case Xml::TagStart:
+ if (tag == "number")
+ number=xml.parseInt();
+ else if (tag == "raster")
+ raster=xml.parseInt();
+ else if (tag == "always_new_part")
+ always_new_part=xml.parseInt();
+ else if (tag == "never_new_part")
+ never_new_part=xml.parseInt();
+ else if (tag == "max_distance")
+ max_distance=xml.parseInt();
+ else if (tag == "into_single_part")
+ into_single_part=xml.parseInt();
+ else
+ xml.unknown("PasteEventsDialog");
+ break;
+
+ case Xml::TagEnd:
+ if (tag == "pasteeventsdialog")
+ return;
+
+ default:
+ break;
+ }
+ }
+}
+
+void PasteEventsDialog::write_configuration(int level, Xml& xml)
+{
+ xml.tag(level++, "pasteeventsdialog");
+ xml.intTag(level, "number", number);
+ xml.intTag(level, "raster", raster);
+ xml.intTag(level, "always_new_part", always_new_part);
+ xml.intTag(level, "never_new_part", never_new_part);
+ xml.intTag(level, "max_distance", max_distance);
+ xml.intTag(level, "into_single_part", into_single_part);
+ xml.tag(level, "/pasteeventsdialog");
+}
+
+} // namespace MusEDialog