summaryrefslogtreecommitdiffstats
path: root/src/gui/dialogs/LilyPondOptionsDialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/dialogs/LilyPondOptionsDialog.cpp')
-rw-r--r--src/gui/dialogs/LilyPondOptionsDialog.cpp363
1 files changed, 363 insertions, 0 deletions
diff --git a/src/gui/dialogs/LilyPondOptionsDialog.cpp b/src/gui/dialogs/LilyPondOptionsDialog.cpp
new file mode 100644
index 0000000..f693467
--- /dev/null
+++ b/src/gui/dialogs/LilyPondOptionsDialog.cpp
@@ -0,0 +1,363 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
+
+/*
+ Rosegarden
+ A MIDI and audio sequencer and musical notation editor.
+
+ This program is Copyright 2000-2008
+ Guillaume Laurent <[email protected]>,
+ Chris Cannam <[email protected]>,
+ Richard Bown <[email protected]>
+
+ The moral rights of Guillaume Laurent, Chris Cannam, and Richard
+ Bown to claim authorship of this work have been asserted.
+
+ Other copyrights also apply to some parts of this work. Please
+ see the AUTHORS file and individual file headers for details.
+
+ 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; either version 2 of the
+ License, or (at your option) any later version. See the file
+ COPYING included with this distribution for more information.
+*/
+
+
+#include "LilyPondOptionsDialog.h"
+#include "document/io/LilyPondExporter.h"
+#include "gui/configuration/HeadersConfigurationPage.h"
+
+#include <qlayout.h>
+#include <kapplication.h>
+
+#include "document/ConfigGroups.h"
+#include "document/RosegardenGUIDoc.h"
+#include "misc/Strings.h"
+#include <kcombobox.h>
+#include <klineedit.h>
+#include <kconfig.h>
+#include <kdialogbase.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <qframe.h>
+#include <qgroupbox.h>
+#include <qlabel.h>
+#include <qstring.h>
+#include <qtabwidget.h>
+#include <qtooltip.h>
+#include <qvbox.h>
+#include <qwidget.h>
+#include <iostream>
+
+namespace Rosegarden
+{
+
+LilyPondOptionsDialog::LilyPondOptionsDialog(QWidget *parent,
+ RosegardenGUIDoc *doc,
+ QString windowCaption,
+ QString heading) :
+ KDialogBase(parent, 0, true,
+ (windowCaption = "" ? i18n("LilyPond Export/Preview") : windowCaption),
+ Apply | Ok | Cancel),
+ m_doc(doc)
+{
+ setHelp("file-printing");
+
+ KConfig *config = kapp->config();
+ config->setGroup(NotationViewConfigGroup);
+
+ QVBox * mainbox = makeVBoxMainWidget();
+
+ //
+ // Arrange options in "General" and "Advanced" tabs.
+ //
+
+ QTabWidget * tabWidget = new QTabWidget(mainbox);
+
+ QFrame *generalFrame;
+ QFrame *advancedFrame;
+ QGridLayout *generalGrid;
+ QGridLayout *advancedGrid;
+
+ generalFrame = new QFrame();
+ tabWidget->addTab(generalFrame, i18n("General options"));
+
+ generalGrid = new QGridLayout(generalFrame, 1, 1, 5, 5);
+
+ advancedFrame = new QFrame();
+ tabWidget->addTab(advancedFrame, i18n("Advanced options"));
+
+ advancedGrid = new QGridLayout(advancedFrame, 1, 1, 5, 5);
+
+ m_headersPage = new HeadersConfigurationPage(this, m_doc);
+ tabWidget->addTab(m_headersPage, i18n("Headers"));
+
+ m_headersPage->setSpacing(5);
+ m_headersPage->setMargin(5);
+
+ //
+ // LilyPond export: Basic options
+ //
+
+ QGroupBox *basicOptionsBox = new QGroupBox
+ (1, Horizontal,
+ i18n("Basic options"), generalFrame);
+ generalGrid->addWidget(basicOptionsBox, 0, 0);
+
+ QFrame *frameBasic = new QFrame(basicOptionsBox);
+ QGridLayout *layoutBasic = new QGridLayout(frameBasic, 3, 2, 10, 5);
+
+ layoutBasic->addWidget(new QLabel(
+ i18n("Compatibility level"), frameBasic), 0, 0);
+
+ m_lilyLanguage = new KComboBox(frameBasic);
+ // See also setDefaultLilyPondVersion below
+ m_lilyLanguage->insertItem(i18n("LilyPond %1").arg("2.6"));
+ m_lilyLanguage->insertItem(i18n("LilyPond %1").arg("2.8"));
+ m_lilyLanguage->insertItem(i18n("LilyPond %1").arg("2.10"));
+ m_lilyLanguage->insertItem(i18n("LilyPond %1").arg("2.12"));
+ m_lilyLanguage->setCurrentItem(config->readUnsignedNumEntry("lilylanguage", 0));
+ layoutBasic->addWidget(m_lilyLanguage, 0, 1);
+
+ layoutBasic->addWidget(new QLabel(
+ i18n("Paper size"), frameBasic), 1, 0);
+
+ QHBoxLayout *hboxPaper = new QHBoxLayout( frameBasic );
+ m_lilyPaperSize = new KComboBox(frameBasic);
+ m_lilyPaperSize->insertItem(i18n("A3"));
+ m_lilyPaperSize->insertItem(i18n("A4"));
+ m_lilyPaperSize->insertItem(i18n("A5"));
+ m_lilyPaperSize->insertItem(i18n("A6"));
+ m_lilyPaperSize->insertItem(i18n("Legal"));
+ m_lilyPaperSize->insertItem(i18n("US Letter"));
+ m_lilyPaperSize->insertItem(i18n("Tabloid"));
+ m_lilyPaperSize->insertItem(i18n("do not specify"));
+ int defaultPaperSize = 1; // A4
+ if (KGlobal::locale()->country() == "us" ||
+ KGlobal::locale()->country() == "US") defaultPaperSize = 5; // Letter
+ m_lilyPaperSize->setCurrentItem(config->readUnsignedNumEntry
+ ("lilypapersize", defaultPaperSize));
+
+ m_lilyPaperLandscape = new QCheckBox(i18n("Landscape"), frameBasic);
+ m_lilyPaperLandscape->setChecked(config->readBoolEntry("lilypaperlandscape", false));
+
+ hboxPaper->addWidget( m_lilyPaperSize );
+ hboxPaper->addWidget( new QLabel( " ", frameBasic ) ); // fixed-size spacer
+ hboxPaper->addWidget( m_lilyPaperLandscape );
+ layoutBasic->addLayout(hboxPaper, 1, 1);
+
+ layoutBasic->addWidget(new QLabel(
+ i18n("Font size"), frameBasic), 2, 0);
+
+ m_lilyFontSize = new KComboBox(frameBasic);
+ int sizes[] = { 11, 13, 16, 19, 20, 23, 26 };
+ for (int i = 0; i < sizeof(sizes)/sizeof(sizes[0]); ++i) {
+ m_lilyFontSize->insertItem(i18n("%1 pt").arg(sizes[i]));
+ }
+ m_lilyFontSize->setCurrentItem(config->readUnsignedNumEntry
+ ("lilyfontsize", 4));
+ layoutBasic->addWidget(m_lilyFontSize, 2, 1);
+
+ //
+ // LilyPond export: Staff level options
+ //
+
+ QGroupBox *staffOptionsBox = new QGroupBox
+ (1, Horizontal,
+ i18n("Staff level options"), generalFrame);
+ generalGrid->addWidget(staffOptionsBox, 1, 0);
+
+ QFrame *frameStaff = new QFrame(staffOptionsBox);
+ QGridLayout *layoutStaff = new QGridLayout(frameStaff, 2, 2, 10, 5);
+
+ layoutStaff->addWidget(new QLabel(
+ i18n("Export content"), frameStaff), 0, 0);
+
+ m_lilyExportSelection = new KComboBox(frameStaff);
+ m_lilyExportSelection->insertItem(i18n("All tracks"));
+ m_lilyExportSelection->insertItem(i18n("Non-muted tracks"));
+ m_lilyExportSelection->insertItem(i18n("Selected track"));
+ m_lilyExportSelection->insertItem(i18n("Selected segments"));
+ m_lilyExportSelection->setCurrentItem(config->readUnsignedNumEntry("lilyexportselection", 1));
+
+ layoutStaff->addWidget(m_lilyExportSelection, 0, 1);
+
+ m_lilyExportStaffMerge = new QCheckBox(
+ i18n("Merge tracks that have the same name"), frameStaff);
+ m_lilyExportStaffMerge->setChecked(config->readBoolEntry("lilyexportstaffmerge", false));
+ layoutStaff->addMultiCellWidget(m_lilyExportStaffMerge, 1, 1, 0, 1);
+
+ //
+ // LilyPond export: Notation options
+ //
+
+ QGroupBox *notationOptionsBox = new QGroupBox
+ (1, Horizontal,
+ i18n("Notation options"), generalFrame);
+ generalGrid->addWidget(notationOptionsBox, 2, 0);
+
+ QFrame *frameNotation = new QFrame(notationOptionsBox);
+ QGridLayout *layoutNotation = new QGridLayout(frameNotation, 4, 2, 10, 5);
+
+ m_lilyTempoMarks = new KComboBox( frameNotation );
+ m_lilyTempoMarks->insertItem(i18n("None"));
+ m_lilyTempoMarks->insertItem(i18n("First"));
+ m_lilyTempoMarks->insertItem(i18n("All"));
+ m_lilyTempoMarks->setCurrentItem(config->readUnsignedNumEntry("lilyexporttempomarks", 0));
+
+ layoutNotation->addWidget( new QLabel(
+ i18n("Export tempo marks "), frameNotation), 0, 0 );
+ layoutNotation->addWidget(m_lilyTempoMarks, 0, 1);
+
+ m_lilyExportLyrics = new QCheckBox(
+ i18n("Export lyrics"), frameNotation);
+ // default to lyric export == false because if you export the default
+ // empty "- - -" lyrics, crap results ensue, and people will know if they
+ // do need to export the lyrics - DMM
+ // fixed, no "- - -" lyrics are generated for an empty lyrics
+ // default again into lyrics - HJJ
+ m_lilyExportLyrics->setChecked(config->readBoolEntry("lilyexportlyrics", true));
+ layoutNotation->addMultiCellWidget(m_lilyExportLyrics, 1, 1, 0, 1);
+
+ m_lilyExportBeams = new QCheckBox(
+ i18n("Export beamings"), frameNotation);
+ m_lilyExportBeams->setChecked(config->readBoolEntry("lilyexportbeamings", false));
+ layoutNotation->addMultiCellWidget(m_lilyExportBeams, 2, 2, 0, 1);
+
+ // recycle this for a new option to ignore the track brackets (so it is less
+ // obnoxious to print single parts where brackets are in place)
+ m_lilyExportStaffGroup = new QCheckBox(
+ i18n("Export track staff brackets"), frameNotation);
+ m_lilyExportStaffGroup->setChecked(config->readBoolEntry("lilyexportstaffbrackets", true));
+ layoutNotation->addMultiCellWidget(m_lilyExportStaffGroup, 3, 3, 0, 1);
+
+ generalGrid->setRowStretch(4, 10);
+
+ //
+ // LilyPond export: Advanced options
+ //
+
+ QGroupBox *advancedLayoutOptionsBox = new QGroupBox
+ (1, Horizontal,
+ i18n("Layout options"), advancedFrame);
+ advancedGrid->addWidget(advancedLayoutOptionsBox, 0, 0);
+
+ QFrame *frameAdvancedLayout = new QFrame(advancedLayoutOptionsBox);
+ QGridLayout *layoutAdvancedLayout = new QGridLayout(frameAdvancedLayout, 2, 2, 10, 5);
+
+ m_lilyLyricsHAlignment = new KComboBox( frameAdvancedLayout );
+ m_lilyLyricsHAlignment->insertItem(i18n("Left"));
+ m_lilyLyricsHAlignment->insertItem(i18n("Center"));
+ m_lilyLyricsHAlignment->insertItem(i18n("Right"));
+ m_lilyLyricsHAlignment->setCurrentItem(config->readUnsignedNumEntry("lilylyricshalignment", 0));
+
+ layoutAdvancedLayout->addWidget(new QLabel(
+ i18n("Lyrics alignment"), frameAdvancedLayout), 0, 0);
+ layoutAdvancedLayout->addWidget(m_lilyLyricsHAlignment, 0, 1);
+
+ m_lilyRaggedBottom = new QCheckBox(
+ i18n("Ragged bottom (systems will not be spread vertically across the page)"), frameAdvancedLayout);
+ m_lilyRaggedBottom->setChecked(config->readBoolEntry("lilyraggedbottom", false));
+ layoutAdvancedLayout->addMultiCellWidget(m_lilyRaggedBottom, 1, 2, 0, 1);
+
+ QGroupBox *miscOptionsBox = new QGroupBox
+ (1, Horizontal,
+ i18n("Miscellaneous options"), advancedFrame);
+ advancedGrid->addWidget(miscOptionsBox, 1, 0);
+
+ QFrame *frameMisc = new QFrame(miscOptionsBox);
+ QGridLayout *layoutMisc = new QGridLayout(frameMisc, 2, 2, 10, 5);
+
+ m_lilyExportPointAndClick = new QCheckBox(
+ i18n("Enable \"point and click\" debugging"), frameMisc);
+ m_lilyExportPointAndClick->setChecked(config->readBoolEntry("lilyexportpointandclick", false));
+ layoutMisc->addMultiCellWidget(m_lilyExportPointAndClick, 0, 0, 0, 1);
+
+ m_lilyExportMidi = new QCheckBox(
+ i18n("Export \\midi block"), frameMisc);
+ m_lilyExportMidi->setChecked(config->readBoolEntry("lilyexportmidi", false));
+ layoutMisc->addMultiCellWidget(m_lilyExportMidi, 1, 1, 0, 1);
+
+ m_lilyMarkerMode = new KComboBox(frameMisc);
+ m_lilyMarkerMode->insertItem(i18n("No markers"));
+ m_lilyMarkerMode->insertItem(i18n("Rehearsal marks"));
+ m_lilyMarkerMode->insertItem(i18n("Marker text"));
+ m_lilyMarkerMode->setCurrentItem(config->readUnsignedNumEntry("lilyexportmarkermode", 0));
+
+ layoutMisc->addWidget( new QLabel(
+ i18n("Export markers"), frameMisc),2, 0 );
+ layoutMisc->addWidget(m_lilyMarkerMode, 2, 1);
+
+ advancedGrid->setRowStretch(2, 10);
+
+ resize(minimumSize());
+}
+
+void
+LilyPondOptionsDialog::slotApply()
+{
+ KConfig *config = kapp->config();
+ config->setGroup(NotationViewConfigGroup);
+
+ config->writeEntry("lilylanguage", m_lilyLanguage->currentItem());
+ config->writeEntry("lilypapersize", m_lilyPaperSize->currentItem());
+ config->writeEntry("lilypaperlandscape", m_lilyPaperLandscape->isChecked());
+ config->writeEntry("lilyfontsize", m_lilyFontSize->currentItem());
+ config->writeEntry("lilyraggedbottom", m_lilyRaggedBottom->isChecked());
+ config->writeEntry("lilyexportlyrics", m_lilyExportLyrics->isChecked());
+ config->writeEntry("lilyexportmidi", m_lilyExportMidi->isChecked());
+ config->writeEntry("lilyexporttempomarks", m_lilyTempoMarks->currentItem());
+ config->writeEntry("lilyexportselection", m_lilyExportSelection->currentItem());
+ config->writeEntry("lilyexportpointandclick", m_lilyExportPointAndClick->isChecked());
+ config->writeEntry("lilyexportbeamings", m_lilyExportBeams->isChecked());
+ config->writeEntry("lilyexportstaffmerge", m_lilyExportStaffMerge->isChecked());
+ config->writeEntry("lilyexportstaffbrackets", m_lilyExportStaffGroup->isChecked());
+ config->writeEntry("lilylyricshalignment", m_lilyLyricsHAlignment->currentItem());
+ config->writeEntry("lilyexportmarkermode", m_lilyMarkerMode->currentItem());
+ m_headersPage->apply();
+}
+
+void
+LilyPondOptionsDialog::slotOk()
+{
+ slotApply();
+ accept();
+}
+
+void
+LilyPondOptionsDialog::setDefaultLilyPondVersion(QString version)
+{
+ KConfig *config = kapp->config();
+ config->setGroup(NotationViewConfigGroup);
+ int index = -1;
+ bool unstable = false;
+ if (version == "2.6" || version.startsWith("2.6.")) {
+ index = 0;
+ } else if (version == "2.7" || version.startsWith("2.7.")) {
+ unstable = true;
+ index = 1;
+ } else if (version == "2.8" || version.startsWith("2.8.")) {
+ index = 1;
+ } else if (version == "2.9" || version.startsWith("2.9.")) {
+ unstable = true;
+ index = 2;
+ } else if (version == "2.10" || version.startsWith("2.10.")) {
+ index = 2;
+ } else if (version == "2.11" || version.startsWith("2.11.")) {
+ unstable = true;
+ index = 3;
+ } else if (version == "2.12" || version.startsWith("2.12.")) {
+ index = 3;
+ }
+ if (unstable) {
+ std::cerr << "\nWARNING: Unstable LilyPond version detected, selecting next language version up\n" << std::endl;
+ }
+ if (index >= 0) {
+ config->writeEntry("lilylanguage", index);
+ }
+}
+
+}
+#include "LilyPondOptionsDialog.moc"