summaryrefslogtreecommitdiff
path: root/muse_qt4_evolution/muse/preferences.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse_qt4_evolution/muse/preferences.cpp')
-rw-r--r--muse_qt4_evolution/muse/preferences.cpp932
1 files changed, 932 insertions, 0 deletions
diff --git a/muse_qt4_evolution/muse/preferences.cpp b/muse_qt4_evolution/muse/preferences.cpp
new file mode 100644
index 00000000..022a24da
--- /dev/null
+++ b/muse_qt4_evolution/muse/preferences.cpp
@@ -0,0 +1,932 @@
+//=============================================================================
+// MusE
+// Linux Music Editor
+// $Id:$
+//
+// Copyright (C) 2002-2006 by Werner Schweer and others
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License version 2.
+//
+// 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+//=============================================================================
+
+#include "icons.h"
+#include "preferences.h"
+#include "track.h"
+#include "muse.h"
+#include "song.h"
+#include "event.h"
+#include "arranger.h"
+#include "widgets/filedialog.h"
+#include "waveedit/waveedit.h"
+#include "globals.h"
+#include "conf.h"
+#include "gconfig.h"
+
+#include "audio.h"
+#include "mixer.h"
+#include "midirc.h"
+#include "instruments/minstrument.h"
+#include "midiedit/pianoroll.h"
+#include "midiedit/drumedit.h"
+
+static int rtcResolutions[] = {
+ 1024, 2048, 4096, 8192
+ };
+static int divisions[] = {
+ 48, 96, 192, 384, 768, 1536, 3072, 6144, 12288
+ };
+
+//---------------------------------------------------------
+// twi
+//---------------------------------------------------------
+
+static QTreeWidgetItem* twi(QTreeWidget* tw, const char* txt, int data)
+ {
+ QTreeWidgetItem* i = new QTreeWidgetItem(tw);
+ i->setText(0, txt);
+ i->setData(0, 1, data);
+ return i;
+ }
+
+static QTreeWidgetItem* twi(QTreeWidgetItem* tw, const char* txt, int data)
+ {
+ QTreeWidgetItem* i = new QTreeWidgetItem(tw);
+ i->setText(0, txt);
+ i->setData(0, 1, data);
+ return i;
+ }
+
+//---------------------------------------------------------
+// PreferencesDialog
+//---------------------------------------------------------
+
+PreferencesDialog::PreferencesDialog(Arranger* a, QWidget* parent)
+ : QDialog(parent)
+ {
+ setupUi(this);
+ colorframe->setAutoFillBackground(true);
+ palette0->setAutoFillBackground(true);
+ palette1->setAutoFillBackground(true);
+ palette2->setAutoFillBackground(true);
+ palette3->setAutoFillBackground(true);
+ arr = a;
+ color = 0;
+ config = new GlobalConfigValues;
+ resetValues();
+
+ // ARRANGER
+
+ usePixmap->setChecked(config->canvasUseBgPixmap);
+ useColor->setChecked(!config->canvasUseBgPixmap);
+ connect(usePixmap, SIGNAL(toggled(bool)), SLOT(usePixmapToggled(bool)));
+ connect(useColor, SIGNAL(toggled(bool)), SLOT(useColorToggled(bool)));
+
+
+ styleSheetPath->setText(config->styleSheetFile);
+ currentBg = config->canvasBgPixmap;
+ if (currentBg.isEmpty())
+ currentBg = "<none>";
+ else {
+ QBrush b;
+ b.setTexture(QPixmap(currentBg));
+ QPalette p;
+ p.setBrush(QPalette::Window, b);
+ currentBgLabel->setPalette(p);
+ }
+ QPalette p;
+ canvasBackgroundColor->setAutoFillBackground(true);
+ p.setColor(QPalette::Window, config->canvasBgColor);
+ canvasBackgroundColor->setPalette(p);
+
+ currentBgLabel->setAutoFillBackground(true);
+ currentBgLabel->setText(currentBg);
+
+ partShownames->setChecked(config->canvasShowPartType & 1);
+ partShowevents->setChecked(config->canvasShowPartType & 2);
+ partShowCakes->setChecked(!(config->canvasShowPartType & 2));
+
+ eventNoteon->setChecked(config->canvasShowPartEvent & (1 << 0));
+ eventPolypressure->setChecked(config->canvasShowPartEvent & (1 << 1));
+ eventController->setChecked(config->canvasShowPartEvent & (1 << 2));
+ eventProgramchange->setChecked(config->canvasShowPartEvent & (1 << 3));
+ eventAftertouch->setChecked(config->canvasShowPartEvent & (1 << 4));
+ eventPitchbend->setChecked(config->canvasShowPartEvent & (1 << 5));
+ eventSpecial->setChecked(config->canvasShowPartEvent & (1 << 6));
+ eventButtonGroup->setEnabled(config->canvasShowPartType == 2);
+ arrGrid->setChecked(config->canvasShowGrid);
+
+ // COLORS
+ QTreeWidgetItem* id;
+ QTreeWidgetItem* aid;
+ itemList->setSortingEnabled(false);
+ itemList->clear();
+
+ aid = twi(itemList, "Arranger", 0);
+ id = twi(aid, "PartColors", 0);
+ twi(id, "Selected", 0x41d);
+
+ twi(id, "Default", 0x400);
+ twi(id, "Refrain", 0x401);
+ twi(id, "Bridge", 0x402);
+ twi(id, "Intro", 0x403);
+ twi(id, "Coda", 0x404);
+ twi(id, "Chorus", 0x405);
+ twi(id, "Solo", 0x406);
+ twi(id, "Brass", 0x407);
+ twi(id, "Percussion", 0x408);
+ twi(id, "Drums", 0x409);
+ twi(id, "Guitar", 0x40a);
+ twi(id, "Bass", 0x40b);
+ twi(id, "Flute", 0x40c);
+ twi(id, "Strings", 0x40d);
+ twi(id, "Keyboard", 0x40e);
+ twi(id, "Piano", 0x40f);
+ twi(id, "Saxophon", 0x410);
+
+ twi(id, "part canvas background", 0x41c);
+
+ id = twi(aid, "Track List", 0);
+ twi(id, "Audio Output", 0x500 + Track::AUDIO_OUTPUT);
+ twi(id, "Audio Group", 0x500 + Track::AUDIO_GROUP);
+ twi(id, "Wave Track", 0x500 + Track::WAVE);
+ twi(id, "Audio Input", 0x500 + Track::AUDIO_INPUT);
+ twi(id, "Synthesizer", 0x500 + Track::AUDIO_SOFTSYNTH);
+ twi(id, "Midi Track", 0x500 + Track::MIDI);
+ twi(id, "Midi Output", 0x500 + Track::MIDI_OUT);
+ twi(id, "Midi Input", 0x500 + Track::MIDI_IN);
+// twi(id, "Midi Channel", 0x500 + Track::MIDI_CHANNEL);
+ twi(id, "Midi Synti", 0x500 + Track::MIDI_SYNTI);
+
+ id = twi(itemList, "BigTime", 0);
+ twi(id, "background", 0x100);
+ twi(id, "foreground", 0x101);
+
+ id = twi(itemList, "Transport", 0);
+ twi(id, "handle", 0x200);
+
+ id = twi(itemList, "Editor", 0);
+ twi(id, "background", 0x300);
+
+ colorGroup = new QButtonGroup(this);
+ colorGroup->setExclusive(true);
+ colorGroup->addButton(palette0, 0);
+ colorGroup->addButton(palette1, 1);
+ colorGroup->addButton(palette2, 2);
+ colorGroup->addButton(palette3, 3);
+ colorGroup->addButton(palette4, 4);
+ colorGroup->addButton(palette5, 5);
+ colorGroup->addButton(palette6, 6);
+ colorGroup->addButton(palette7, 7);
+ colorGroup->addButton(palette8, 8);
+ colorGroup->addButton(palette9, 9);
+ colorGroup->addButton(palette10, 10);
+ colorGroup->addButton(palette11, 11);
+ colorGroup->addButton(palette12, 12);
+ colorGroup->addButton(palette13, 13);
+ colorGroup->addButton(palette14, 14);
+ colorGroup->addButton(palette15, 15);
+ connect(itemList, SIGNAL(itemSelectionChanged()), SLOT(colorItemSelectionChanged()));
+ connect(colorGroup, SIGNAL(buttonClicked(QAbstractButton*)), SLOT(paletteClicked(QAbstractButton*)));
+ connect(hslider, SIGNAL(valueChanged(int)), SLOT(hsliderChanged(int)));
+ connect(sslider, SIGNAL(valueChanged(int)), SLOT(ssliderChanged(int)));
+ connect(vslider, SIGNAL(valueChanged(int)), SLOT(vsliderChanged(int)));
+
+ connect(addToPalette, SIGNAL(clicked()), SLOT(addToPaletteClicked()));
+
+ connect(applyButton, SIGNAL(clicked()), SLOT(apply()));
+ connect(okButton, SIGNAL(clicked()), SLOT(ok()));
+ connect(cancelButton, SIGNAL(clicked()), SLOT(cancel()));
+ connect(selectCanvasBgPixmap, SIGNAL(clicked()), SLOT(configCanvasBgPixmap()));
+ connect(selectCanvasBgColor, SIGNAL(clicked()), SLOT(configCanvasBgColor()));
+ connect(partShowevents, SIGNAL(toggled(bool)), eventButtonGroup, SLOT(setEnabled(bool)));
+ updateColor();
+
+ for (unsigned i = 0; i < sizeof(rtcResolutions)/sizeof(*rtcResolutions); ++i) {
+ if (rtcResolutions[i] == config->rtcTicks) {
+ rtcResolutionSelect->setCurrentIndex(i);
+ break;
+ }
+ }
+ for (unsigned i = 0; i < sizeof(divisions)/sizeof(*divisions); ++i) {
+ if (divisions[i] == config->division) {
+ midiDivisionSelect->setCurrentIndex(i);
+ break;
+ }
+ }
+ int i = 0;
+ for (iMidiInstrument mi = midiInstruments.begin(); mi != midiInstruments.end(); ++mi, ++i) {
+ preferredInstrument->addItem((*mi)->iname());
+ if ((*mi)->iname() == config->defaultMidiInstrument)
+ preferredInstrument->setCurrentIndex(i);
+ }
+
+ connectToAllDevices->setChecked(config->connectToAllMidiDevices);
+ connectToAllTracks->setChecked(config->connectToAllMidiTracks);
+ createDefaultInput->setChecked(config->createDefaultMidiInput);
+
+ guiRefreshSelect->setValue(config->guiRefresh);
+ minSliderSelect->setValue(int(config->minSlider));
+ maxSliderSelect->setValue(int(config->maxSlider));
+ minMeterSelect->setValue(int(config->minMeter));
+ maxMeterSelect->setValue(int(config->maxMeter));
+ peakHoldTime->setValue(config->peakHoldTime);
+ helpBrowser->setText(config->helpBrowser);
+ startProjectEntry->setText(config->startProject);
+
+ startProjectGroup = new QButtonGroup(this);
+ startProjectGroup->addButton(alwaysAsk);
+ startProjectGroup->addButton(startWithLastProject);
+ startProjectGroup->addButton(startWithProject);
+
+ switch(config->startMode) {
+ case START_ASK_FOR_PROJECT:
+ alwaysAsk->setChecked(true);
+ break;
+ case START_LAST_PROJECT:
+ startWithLastProject->setChecked(true);
+ break;
+ case START_START_PROJECT:
+ startWithProject->setChecked(true);
+ break;
+ }
+
+ showTransport->setChecked(config->transportVisible);
+ showBigtime->setChecked(config->bigTimeVisible);
+ showMixer1->setChecked(config->mixer1Visible);
+ showMixer2->setChecked(config->mixer2Visible);
+
+ transportX->setValue(config->geometryTransport.x());
+ transportY->setValue(config->geometryTransport.y());
+
+ bigtimeX->setValue(config->geometryBigTime.x());
+ bigtimeY->setValue(config->geometryBigTime.y());
+ bigtimeW->setValue(config->geometryBigTime.width());
+ bigtimeH->setValue(config->geometryBigTime.height());
+
+ mixerX1->setValue(config->mixer1.geometry.x());
+ mixerY1->setValue(config->mixer1.geometry.y());
+ mixerW1->setValue(config->mixer1.geometry.width());
+ mixerH1->setValue(config->mixer1.geometry.height());
+
+ mixerX2->setValue(config->mixer2.geometry.x());
+ mixerY2->setValue(config->mixer2.geometry.y());
+ mixerW2->setValue(config->mixer2.geometry.width());
+ mixerH2->setValue(config->mixer2.geometry.height());
+
+ setMixerCurrent1->setEnabled(muse->mixer1Window());
+ setMixerCurrent1->setEnabled(muse->mixer2Window());
+
+ setBigtimeCurrent->setEnabled(muse->bigtimeWindow());
+ setTransportCurrent->setEnabled(muse->transportWindow());
+ freewheelMode->setChecked(config->useJackFreewheelMode);
+ showSplash->setChecked(config->showSplashScreen);
+ projectPath->setText(config->projectPath);
+ templatePath->setText(config->templatePath);
+ instrumentPath->setText(config->instrumentPath);
+ midiImportPath->setText(config->importMidiPath);
+ waveImportPath->setText(config->importWavePath);
+
+ stopActive->setChecked(midiRCList.isActive(RC_STOP));
+ playActive->setChecked(midiRCList.isActive(RC_PLAY));
+ gotoLeftMarkActive->setChecked(midiRCList.isActive(RC_GOTO_LEFT_MARK));
+ recordActive->setChecked(midiRCList.isActive(RC_RECORD));
+
+ connect(applyButton, SIGNAL(clicked()), SLOT(apply()));
+ connect(okButton, SIGNAL(clicked()), SLOT(ok()));
+ connect(cancelButton, SIGNAL(clicked()), SLOT(cancel()));
+ connect(setMixerCurrent1, SIGNAL(clicked()), SLOT(mixerCurrent1()));
+ connect(setMixerCurrent2, SIGNAL(clicked()), SLOT(mixerCurrent2()));
+ connect(setBigtimeCurrent, SIGNAL(clicked()), SLOT(bigtimeCurrent()));
+ connect(setArrangerCurrent, SIGNAL(clicked()), SLOT(arrangerCurrent()));
+ connect(setTransportCurrent, SIGNAL(clicked()), SLOT(transportCurrent()));
+
+ recordStop->setChecked(false);
+ recordRecord->setChecked(false);
+ recordGotoLeftMark->setChecked(false);
+ recordPlay->setChecked(false);
+ rcGroup->setChecked(rcEnable);
+
+ pianorollWidth->setValue(PianoRoll::initWidth);
+ pianorollHeight->setValue(PianoRoll::initHeight);
+ pianorollRaster->setRaster(PianoRoll::initRaster);
+ pianorollQuant->setQuant(PianoRoll::initQuant);
+
+ drumEditorWidth->setValue(DrumEdit::initWidth);
+ drumEditorHeight->setValue(DrumEdit::initHeight);
+
+ waveEditorWidth->setValue(WaveEdit::initWidth);
+ waveEditorHeight->setValue(WaveEdit::initHeight);
+
+ connect(recordStop, SIGNAL(clicked(bool)), SLOT(recordStopToggled(bool)));
+ connect(recordRecord, SIGNAL(clicked(bool)), SLOT(recordRecordToggled(bool)));
+ connect(recordGotoLeftMark, SIGNAL(clicked(bool)), SLOT(recordGotoLeftMarkToggled(bool)));
+ connect(recordPlay, SIGNAL(clicked(bool)), SLOT(recordPlayToggled(bool)));
+
+ }
+
+//---------------------------------------------------------
+// setButtonColor
+//---------------------------------------------------------
+
+static void setButtonColor(QAbstractButton* b, const QRgb c)
+ {
+ QPalette p(b->palette());
+ p.setColor(QPalette::Button, QColor(c));
+ p.setColor(b->backgroundRole(), QColor(c));
+ b->setPalette(p);
+ }
+
+//---------------------------------------------------------
+// resetValues
+//---------------------------------------------------------
+
+void PreferencesDialog::resetValues()
+ {
+ *config = ::config; // init with global config values
+
+ setButtonColor(palette0, QColorDialog::customColor(0));
+ setButtonColor(palette1, QColorDialog::customColor(1));
+ setButtonColor(palette2, QColorDialog::customColor(2));
+ setButtonColor(palette3, QColorDialog::customColor(3));
+ setButtonColor(palette4, QColorDialog::customColor(4));
+ setButtonColor(palette5, QColorDialog::customColor(5));
+ setButtonColor(palette6, QColorDialog::customColor(6));
+ setButtonColor(palette7, QColorDialog::customColor(7));
+ setButtonColor(palette8, QColorDialog::customColor(8));
+ setButtonColor(palette9, QColorDialog::customColor(9));
+ setButtonColor(palette10, QColorDialog::customColor(10));
+ setButtonColor(palette11, QColorDialog::customColor(11));
+ setButtonColor(palette12, QColorDialog::customColor(12));
+ setButtonColor(palette13, QColorDialog::customColor(13));
+ setButtonColor(palette14, QColorDialog::customColor(14));
+ }
+
+//---------------------------------------------------------
+// PreferencesDialog
+//---------------------------------------------------------
+
+PreferencesDialog::~PreferencesDialog()
+ {
+ delete config;
+ }
+
+//---------------------------------------------------------
+// apply
+//---------------------------------------------------------
+
+void PreferencesDialog::apply()
+ {
+ ::config.styleSheetFile = styleSheetPath->text();
+ int showPartEvent = 0;
+ int showPartType = 0;
+
+ if (partShownames->isChecked())
+ showPartType |= 1;
+ if (partShowevents->isChecked())
+ showPartType |= 2;
+ if (partShowCakes->isChecked())
+ showPartType |= 4;
+
+ if (eventNoteon->isChecked())
+ showPartEvent |= (1 << 0);
+ if (eventPolypressure->isChecked())
+ showPartEvent |= (1 << 1);
+ if (eventController->isChecked())
+ showPartEvent |= (1 << 2);
+ if (eventProgramchange->isChecked())
+ showPartEvent |= (1 << 3);
+ if (eventAftertouch->isChecked())
+ showPartEvent |= (1 << 4);
+ if (eventPitchbend->isChecked())
+ showPartEvent |= (1 << 5);
+ if (eventSpecial->isChecked())
+ showPartEvent |= (1 << 6);
+
+ config->canvasUseBgPixmap = usePixmap->isChecked();
+ if (currentBg != "<none>")
+ config->canvasBgPixmap = currentBg;
+
+ config->canvasShowGrid = arrGrid->isChecked();
+ // set colors...
+ ::config = *config;
+
+ rcEnable = rcGroup->isChecked();
+ int rtcticks = rtcResolutionSelect->currentIndex();
+ int div = midiDivisionSelect->currentIndex();
+
+ ::config.connectToAllMidiDevices = connectToAllDevices->isChecked();
+ ::config.connectToAllMidiTracks = connectToAllTracks->isChecked();
+ ::config.createDefaultMidiInput = createDefaultInput->isChecked();
+ ::config.defaultMidiInputDevice = preferredInput->currentText();
+ ::config.defaultMidiOutputDevice = preferredOutput->currentText();
+ ::config.defaultMidiInstrument = preferredInstrument->currentText();
+
+ ::config.guiRefresh = guiRefreshSelect->value();
+ ::config.minSlider = minSliderSelect->value();
+ ::config.maxSlider = maxSliderSelect->value();
+ ::config.minMeter = minMeterSelect->value();
+ ::config.maxMeter = maxMeterSelect->value();
+ ::config.peakHoldTime = peakHoldTime->value();
+ ::config.rtcTicks = rtcResolutions[rtcticks];
+ ::config.guiDivision = divisions[div];
+ ::config.helpBrowser = helpBrowser->text();
+ ::config.startProject = startProjectEntry->text();
+
+ if (alwaysAsk->isChecked())
+ ::config.startMode = START_ASK_FOR_PROJECT;
+ else if (startWithLastProject->isChecked())
+ ::config.startMode = START_LAST_PROJECT;
+ else if (startWithProject->isChecked())
+ ::config.startMode = START_START_PROJECT;
+
+ ::config.transportVisible = showTransport->isChecked();
+ ::config.bigTimeVisible = showBigtime->isChecked();
+ ::config.mixer1Visible = showMixer1->isChecked();
+ ::config.mixer2Visible = showMixer2->isChecked();
+
+ ::config.geometryTransport.setX(transportX->value());
+ ::config.geometryTransport.setY(transportY->value());
+ ::config.geometryTransport.setWidth(0);
+ ::config.geometryTransport.setHeight(0);
+
+ ::config.geometryBigTime.setX(bigtimeX->value());
+ ::config.geometryBigTime.setY(bigtimeY->value());
+ ::config.geometryBigTime.setWidth(bigtimeW->value());
+ ::config.geometryBigTime.setHeight(bigtimeH->value());
+
+ ::config.mixer1.geometry.setX(mixerX1->value());
+ ::config.mixer1.geometry.setY(mixerY1->value());
+ ::config.mixer1.geometry.setWidth(mixerW1->value());
+ ::config.mixer1.geometry.setHeight(mixerH1->value());
+
+ ::config.mixer2.geometry.setX(mixerX2->value());
+ ::config.mixer2.geometry.setY(mixerY2->value());
+ ::config.mixer2.geometry.setWidth(mixerW2->value());
+ ::config.mixer2.geometry.setHeight(mixerH2->value());
+
+ ::config.useJackFreewheelMode = freewheelMode->isChecked();
+ ::config.showSplashScreen = showSplash->isChecked();
+
+ ::config.projectPath = projectPath->text();
+ ::config.templatePath = templatePath->text();
+ ::config.instrumentPath = instrumentPath->text();
+ ::config.importMidiPath = midiImportPath->text();
+ ::config.importWavePath = waveImportPath->text();
+
+ lastMidiPath = museUser + "/" + ::config.importMidiPath;
+ lastWavePath = museUser + "/" + ::config.importWavePath;
+
+ PianoRoll::initWidth = pianorollWidth->value();
+ PianoRoll::initHeight = pianorollHeight->value();
+ PianoRoll::initRaster = pianorollRaster->raster();
+ PianoRoll::initQuant = pianorollQuant->quant();
+
+ DrumEdit::initWidth = drumEditorWidth->value();
+ DrumEdit::initHeight = drumEditorHeight->value();
+
+ muse->showMixer1(::config.mixer1Visible);
+ muse->showMixer2(::config.mixer2Visible);
+ muse->showBigtime(::config.bigTimeVisible);
+ muse->showTransport(::config.transportVisible);
+ QWidget* w = muse->transportWindow();
+ if (w) {
+ w->resize(::config.geometryTransport.size());
+ w->move(::config.geometryTransport.topLeft());
+ }
+ w = muse->mixer1Window();
+ if (w) {
+ w->resize(::config.mixer1.geometry.size());
+ w->move(::config.mixer1.geometry.topLeft());
+ }
+ w = muse->mixer2Window();
+ if (w) {
+ w->resize(::config.mixer2.geometry.size());
+ w->move(::config.mixer2.geometry.topLeft());
+ }
+ w = muse->bigtimeWindow();
+ if (w) {
+ w->resize(::config.geometryBigTime.size());
+ w->move(::config.geometryBigTime.topLeft());
+ }
+
+ muse->setHeartBeat(); // set guiRefresh
+ audio->msgSetRtc(); // set midi tick rate
+ muse->changeConfig(true); // save settings
+ }
+
+//---------------------------------------------------------
+// ok
+//---------------------------------------------------------
+
+void PreferencesDialog::ok()
+ {
+ apply();
+ close();
+ }
+
+//---------------------------------------------------------
+// cancel
+//---------------------------------------------------------
+
+void PreferencesDialog::cancel()
+ {
+ close();
+ }
+
+//---------------------------------------------------------
+// configCanvasBgPixmap
+//---------------------------------------------------------
+
+void PreferencesDialog::configCanvasBgPixmap()
+ {
+ QString cur(currentBg);
+ if (cur == "<none>")
+ cur = museGlobalShare + "/wallpapers";
+
+ QStringList pattern;
+ const char** p = image_file_pattern;
+ while(*p)
+ pattern << *p++;
+ QString s = getImageFileName(cur, pattern, this, tr("MusE: load image"));
+ if (!s.isEmpty()) {
+ QBrush b;
+ currentBg = s;
+ b.setTexture(QPixmap(s));
+ QPalette p;
+ p.setBrush(QPalette::Window, b);
+ currentBgLabel->setPalette(p);
+ currentBgLabel->setText(currentBg);
+ }
+ }
+
+//---------------------------------------------------------
+// configCanvasBgColor
+//---------------------------------------------------------
+
+void PreferencesDialog::configCanvasBgColor()
+ {
+ QColor color = QColorDialog::getColor(config->canvasBgColor, this);
+ if (color.isValid()) {
+ config->canvasBgColor = color;
+ QPalette p;
+ p.setColor(QPalette::Window, color);
+ canvasBackgroundColor->setPalette(p);
+ }
+ }
+
+//---------------------------------------------------------
+// selectionChanged
+//---------------------------------------------------------
+
+void PreferencesDialog::colorItemSelectionChanged()
+ {
+ QTreeWidgetItem* item = (QTreeWidgetItem*)itemList->selectedItems().at(0);
+ QString txt = item->text(0);
+ int id = item->data(0, 1).toInt();
+ if (id == 0) {
+ color = 0;
+ return;
+ }
+ switch(id) {
+ case 0x400 ... 0x410: // "Default"
+ color = &config->partColors[id & 0xff];
+ break;
+ case 0x100:
+ color = &config->bigTimeBackgroundColor;
+ break;
+ case 0x101:
+ color = &config->bigTimeForegroundColor;
+ break;
+ case 0x200:
+ color = &config->transportHandleColor;
+ break;
+ case 0x300:
+ color = &config->waveEditBackgroundColor;
+ break;
+ case 0x500 ... 0x5ff:
+ color = &config->trackBg[id & 0xff];
+ break;
+ case 0x41c:
+ color = &config->selectPartBg;
+ break;
+ default:
+ color = 0;
+ break;
+ }
+ updateColor();
+ }
+
+//---------------------------------------------------------
+// updateColor
+//---------------------------------------------------------
+
+void PreferencesDialog::updateColor()
+ {
+ hslider->setEnabled(color);
+ sslider->setEnabled(color);
+ vslider->setEnabled(color);
+ if (color == 0)
+ return;
+ QPalette p(colorframe->palette());
+ p.setColor(QPalette::Window, *color);
+ colorframe->setPalette(p);
+ int r, g, b, h, s, v;
+ color->getRgb(&r, &g, &b);
+ color->getHsv(&h, &s, &v);
+
+ hslider->blockSignals(true);
+ sslider->blockSignals(true);
+ vslider->blockSignals(true);
+
+ hslider->setValue(h);
+ sslider->setValue(s);
+ vslider->setValue(v);
+
+ hslider->blockSignals(false);
+ sslider->blockSignals(false);
+ vslider->blockSignals(false);
+ }
+
+void PreferencesDialog::hsliderChanged(int val)
+ {
+ int h, s, v;
+ if (color) {
+ color->getHsv(&h, &s, &v);
+ color->setHsv(val, s, v);
+ }
+ updateColor();
+ }
+
+void PreferencesDialog::ssliderChanged(int val)
+ {
+ int h, s, v;
+ if (color) {
+ color->getHsv(&h, &s, &v);
+ color->setHsv(h, val, v);
+ }
+ updateColor();
+ }
+
+void PreferencesDialog::vsliderChanged(int val)
+ {
+ int h, s, v;
+ if (color) {
+ color->getHsv(&h, &s, &v);
+ color->setHsv(h, s, val);
+ }
+ updateColor();
+ }
+
+//---------------------------------------------------------
+// addToPaletteClicked
+//---------------------------------------------------------
+
+void PreferencesDialog::addToPaletteClicked()
+ {
+ if (!color)
+ return;
+ QAbstractButton* button = colorGroup->checkedButton();
+ int r, g, b;
+ QColor c;
+ if (button) {
+ c = button->palette().color(QPalette::Button);
+ c.getRgb(&r, &g, &b);
+ }
+ if (button == 0 || r != 0xff || g != 0xff || b != 0xff) {
+ for (int i = 0; i < 16; ++i) {
+ button = colorGroup->button(i);
+ c = button->palette().color(QPalette::Button);
+ c.getRgb(&r, &g, &b);
+ if (r == 0xff && g == 0xff && b == 0xff) {
+ // found empty slot
+ button->setChecked(true);
+ break;
+ }
+ }
+ }
+ if (button) {
+ int id = colorGroup->checkedId();
+ QColorDialog::setCustomColor(id, color->rgb());
+ setButtonColor(button, color->rgb());
+ }
+ }
+
+//---------------------------------------------------------
+// paletteClicked
+//---------------------------------------------------------
+
+void PreferencesDialog::paletteClicked(QAbstractButton* button)
+ {
+ if (color == 0)
+ return;
+ QColor c = button->palette().color(QPalette::Button);
+ int r, g, b;
+ c.getRgb(&r, &g, &b);
+ if (r == 0xff && g == 0xff && b == 0xff)
+ return; // interpret palette slot as empty
+ *color = c;
+ updateColor();
+ }
+
+//---------------------------------------------------------
+// usePixmapToggled
+//---------------------------------------------------------
+
+void PreferencesDialog::usePixmapToggled(bool val)
+ {
+ useColor->setChecked(!val);
+ }
+
+//---------------------------------------------------------
+// useColorToggled
+//---------------------------------------------------------
+
+void PreferencesDialog::useColorToggled(bool val)
+ {
+ usePixmap->setChecked(!val);
+ }
+
+//---------------------------------------------------------
+// mixerCurrent1
+//---------------------------------------------------------
+
+void PreferencesDialog::mixerCurrent1()
+ {
+ QWidget* w = muse->mixer1Window();
+ if (!w)
+ return;
+ QRect r(w->frameGeometry());
+ mixerX1->setValue(r.x());
+ mixerY1->setValue(r.y());
+ mixerW1->setValue(r.width());
+ mixerH1->setValue(r.height());
+ }
+
+//---------------------------------------------------------
+// mixerCurrent2
+//---------------------------------------------------------
+
+void PreferencesDialog::mixerCurrent2()
+ {
+ QWidget* w = muse->mixer2Window();
+ if (!w)
+ return;
+ QRect r(w->frameGeometry());
+ mixerX2->setValue(r.x());
+ mixerY2->setValue(r.y());
+ mixerW2->setValue(r.width());
+ mixerH2->setValue(r.height());
+ }
+
+//---------------------------------------------------------
+// bigtimeCurrent
+//---------------------------------------------------------
+
+void PreferencesDialog::bigtimeCurrent()
+ {
+ QWidget* w = muse->bigtimeWindow();
+ if (!w)
+ return;
+ QRect r(w->frameGeometry());
+ bigtimeX->setValue(r.x());
+ bigtimeY->setValue(r.y());
+ bigtimeW->setValue(r.width());
+ bigtimeH->setValue(r.height());
+ }
+
+//---------------------------------------------------------
+// arrangerCurrent
+//---------------------------------------------------------
+
+void PreferencesDialog::arrangerCurrent()
+ {
+ QRect r(muse->frameGeometry());
+ arrangerX->setValue(r.x());
+ arrangerY->setValue(r.y());
+ arrangerW->setValue(r.width());
+ arrangerH->setValue(r.height());
+ }
+
+//---------------------------------------------------------
+// transportCurrent
+//---------------------------------------------------------
+
+void PreferencesDialog::transportCurrent()
+ {
+ QWidget* w = muse->transportWindow();
+ if (!w)
+ return;
+ QRect r(w->frameGeometry());
+ transportX->setValue(r.x());
+ transportY->setValue(r.y());
+ }
+
+//---------------------------------------------------------
+// recordStopToggled
+//---------------------------------------------------------
+
+void PreferencesDialog::recordStopToggled(bool f)
+ {
+ recordStop->setChecked(!f);
+ if (!f) {
+ recordRecord->setChecked(false);
+ recordGotoLeftMark->setChecked(false);
+ recordPlay->setChecked(false);
+ connect(song, SIGNAL(midiEvent(MidiEvent)), SLOT(midiEventReceived(MidiEvent)));
+ }
+ else
+ disconnect(song, SIGNAL(midiEvent(MidiEvent)), this, SLOT(midiEventReceived(MidiEvent)));
+ }
+
+//---------------------------------------------------------
+// recordRecordToggled
+//---------------------------------------------------------
+
+void PreferencesDialog::recordRecordToggled(bool f)
+ {
+ recordRecord->setChecked(!f);
+ if (!f) {
+ recordStop->setChecked(false);
+ recordGotoLeftMark->setChecked(false);
+ recordPlay->setChecked(false);
+ connect(song, SIGNAL(midiEvent(MidiEvent)), SLOT(midiEventReceived(MidiEvent)));
+ }
+ else
+ disconnect(song, SIGNAL(midiEvent(MidiEvent)), this, SLOT(midiEventReceived(MidiEvent)));
+ }
+
+//---------------------------------------------------------
+// recordGotoLeftMarkToggled
+//---------------------------------------------------------
+
+void PreferencesDialog::recordGotoLeftMarkToggled(bool f)
+ {
+ recordGotoLeftMark->setChecked(!f);
+ if (!f) {
+ recordStop->setChecked(false);
+ recordRecord->setChecked(false);
+ recordPlay->setChecked(false);
+ connect(song, SIGNAL(midiEvent(MidiEvent)), SLOT(midiEventReceived(MidiEvent)));
+ }
+ else
+ disconnect(song, SIGNAL(midiEvent(MidiEvent)), this, SLOT(midiEventReceived(MidiEvent)));
+ }
+
+//---------------------------------------------------------
+// recordPlayToggled
+//---------------------------------------------------------
+
+void PreferencesDialog::recordPlayToggled(bool f)
+ {
+ recordPlay->setChecked(!f);
+ if (!f) {
+ recordStop->setChecked(false);
+ recordRecord->setChecked(false);
+ recordGotoLeftMark->setChecked(false);
+ connect(song, SIGNAL(midiEvent(MidiEvent)), SLOT(midiEventReceived(MidiEvent)));
+ }
+ else
+ disconnect(song, SIGNAL(midiEvent(MidiEvent)), this, SLOT(midiEventReceived(MidiEvent)));
+ }
+
+//---------------------------------------------------------
+// midiEventReceived
+//---------------------------------------------------------
+
+void PreferencesDialog::midiEventReceived(MidiEvent event)
+ {
+ printf("event received\n");
+ if (recordPlay->isChecked()) {
+ recordPlay->setChecked(false);
+ playActive->setChecked(true);
+ midiRCList.setAction(event, RC_PLAY);
+ }
+ else if (recordStop->isChecked()) {
+ recordStop->setChecked(false);
+ stopActive->setChecked(true);
+ midiRCList.setAction(event, RC_STOP);
+ }
+ else if (recordRecord->isChecked()) {
+ recordRecord->setChecked(false);
+ recordActive->setChecked(true);
+ midiRCList.setAction(event, RC_RECORD);
+ }
+ else if (recordGotoLeftMark->isChecked()) {
+ recordGotoLeftMark->setChecked(false);
+ gotoLeftMarkActive->setChecked(true);
+ midiRCList.setAction(event, RC_GOTO_LEFT_MARK);
+ }
+ // only one shot
+ disconnect(song, SIGNAL(midiEvent(MidiEvent)), this, SLOT(midiEventReceived(MidiEvent)));
+ }
+
+