diff options
Diffstat (limited to 'attic/muse_qt4_evolution/muse/configtrack.cpp')
-rw-r--r-- | attic/muse_qt4_evolution/muse/configtrack.cpp | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/attic/muse_qt4_evolution/muse/configtrack.cpp b/attic/muse_qt4_evolution/muse/configtrack.cpp new file mode 100644 index 00000000..a8fee6a3 --- /dev/null +++ b/attic/muse_qt4_evolution/muse/configtrack.cpp @@ -0,0 +1,265 @@ +//============================================================================= +// 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 "configtrack.h" +#include "trelement.h" +#include "arranger.h" + +//--------------------------------------------------------- +// ConfigTrackList +//--------------------------------------------------------- + +ConfigTrackList::ConfigTrackList(QWidget* parent) + : QDialog(parent) + { + setupUi(this); + // does not work: + configuredList->setSelectionMode(QAbstractItemView::SingleSelection); + availableList->setSelectionMode(QAbstractItemView::SingleSelection); + + up->setEnabled(false); + down->setEnabled(false); + addItem->setEnabled(false); + removeItem->setEnabled(false); + dirty = false; + curType = 0; + init(); + + connect(trackType, SIGNAL(activated(int)), SLOT(trackTypeChanged(int))); + connect(availableList, SIGNAL(itemSelectionChanged()), SLOT(availableSelected())); + connect(configuredList, SIGNAL(itemSelectionChanged()), SLOT(configuredSelected())); + connect(up, SIGNAL(clicked()), SLOT(upClicked())); + connect(down, SIGNAL(clicked()), SLOT(downClicked())); + connect(addItem, SIGNAL(clicked()), SLOT(addItemClicked())); + connect(removeItem, SIGNAL(clicked()), SLOT(removeItemClicked())); + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +void ConfigTrackList::init() + { + trackType->clear(); + for (int tt = 0; tt < Track::TRACK_TYPES; ++tt) { + list[tt] = glist[tt]; + trackType->addItem(Track::_clname[tt]); + } + trackTypeChanged(curType); + } + +//--------------------------------------------------------- +// done +//--------------------------------------------------------- + +void ConfigTrackList::done(int code) + { + if (code) { + // OK pressed + if (dirty) + saveTrackType(); + for (int tt = 0; tt < Track::TRACK_TYPES; ++tt) + glist[tt] = list[tt]; + emit trackConfigChanged(); + } + else { + dirty = false; + init(); + } + QDialog::done(code); + } + +//--------------------------------------------------------- +// saveTrackType +//--------------------------------------------------------- + +void ConfigTrackList::saveTrackType() + { + dirty = false; + list[curType].clear(); + int gn = 0; + TrElementList group; + int n = configuredList->count(); + for (int i = 0; i < n; ++i) { + QString s = configuredList->item(i)->text(); + int k; + for (k = 0; k < nTrElements; ++k) + if (trElements[k].name == s) + break; + if (trElements[k].grp != gn) { + list[curType].push_back(group); + group.clear(); + gn = trElements[k].grp; + } + group.push_back(&trElements[k]); + } + if (!group.empty()) + list[curType].push_back(group); + } + +//--------------------------------------------------------- +// trackTypeChanged +//--------------------------------------------------------- + +void ConfigTrackList::trackTypeChanged(int type) + { + curType = type; + if (dirty) + saveTrackType(); + + configuredList->clear(); + TrGroupList& gl = list[type]; + for (iTrGroup i = gl.begin(); i != gl.end(); ++i) { + for (iTrElement k = i->begin(); k != i->end(); ++k) + configuredList->addItem((*k)->name); + } + + availableList->clear(); + for (int i = 0; i < nTrElements; ++i) { + QString name(trElements[i].name); + bool f = false; + + // is gui element available for this track type? + + for (int i = 0; i < nTrElements; ++i) { + const TrElement& el = trElements[i]; + if (el.name == name) { + if (el.trackMask & (1 << type)) { + f = true; + break; + } + } + } + if (!f) + continue; + + // is gui element already configured? + + for (iTrGroup i = gl.begin(); i != gl.end(); ++i) { + for (iTrElement k = i->begin(); k != i->end(); ++k) { + if (name == (*k)->name) { + f = false; + break; + } + } + if (!f) + break; + } + if (f) { + availableList->addItem(name); + } + } + } + +//--------------------------------------------------------- +// configuredSelected +//--------------------------------------------------------- + +void ConfigTrackList::configuredSelected() + { + QListWidgetItem* item = configuredList->selectedItems().at(0); + up->setEnabled(item != 0); + down->setEnabled(item != 0); + removeItem->setEnabled(item != 0); + } + +//--------------------------------------------------------- +// availableSelected +//--------------------------------------------------------- + +void ConfigTrackList::availableSelected() + { + QListWidgetItem* item = availableList->selectedItems().at(0); + addItem->setEnabled(item != 0); + } + +//--------------------------------------------------------- +// upClicked +//--------------------------------------------------------- + +void ConfigTrackList::upClicked() + { + QListWidgetItem* item = configuredList->selectedItems().at(0); + int n = configuredList->row(item); + if (n <= 0) + return; + QString s = item->text(); + delete item; + configuredList->insertItem(n-1, s); + configuredList->setItemSelected(configuredList->item(n-1), true); + dirty = true; + } + +//--------------------------------------------------------- +// downClicked +//--------------------------------------------------------- + +void ConfigTrackList::downClicked() + { + QListWidgetItem* item = configuredList->selectedItems().at(0); + int n = configuredList->row(item); + if (n >= int(configuredList->count()-1)) + return; + QString s = item->text(); + + delete item; + configuredList->insertItem(n+1, s); + configuredList->setItemSelected(configuredList->item(n+1), true); + dirty = true; + } + +//--------------------------------------------------------- +// addItemClicked +//--------------------------------------------------------- + +void ConfigTrackList::addItemClicked() + { + QListWidgetItem* item = availableList->selectedItems().at(0); + if (item == 0) + return; + QString s = item->text(); + delete item; + configuredList->addItem(s); + configuredList->setItemSelected(configuredList->item(configuredList->count()-1), true); + QListWidgetItem* ci = availableList->currentItem(); + if (ci) + availableList->setItemSelected(ci, true); + dirty = true; + } + +//--------------------------------------------------------- +// removeItemClicked +//--------------------------------------------------------- + +void ConfigTrackList::removeItemClicked() + { + QListWidgetItem* item = configuredList->selectedItems().at(0); + if (item == 0) + return; + QString s = item->text(); + delete item; + availableList->addItem(s); + availableList->setItemSelected(availableList->item(availableList->count()-1), true); + QListWidgetItem* ci = configuredList->item(configuredList->currentRow()); + if (ci) + configuredList->setItemSelected(ci, true); + dirty = true; + } + |