diff options
Diffstat (limited to 'muse_qt4_evolution/muse/preferences.cpp')
-rw-r--r-- | muse_qt4_evolution/muse/preferences.cpp | 932 |
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))); + } + + |