From 1fe51e45eebbfc2ac198ed4778c9afdb9eaf2ed0 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Wed, 21 Dec 2011 17:54:10 +0000 Subject: merged again --- muse2/ChangeLog | 24 + muse2/muse/app.cpp | 21 +- muse2/muse/app.h | 5 - muse2/muse/appearance.cpp | 12 +- muse2/muse/arranger/alayout.cpp | 6 +- muse2/muse/arranger/arranger.cpp | 3 +- muse2/muse/arranger/pcanvas.cpp | 4 +- muse2/muse/arranger/tlist.cpp | 12 +- muse2/muse/arranger/tlist.h | 3 +- muse2/muse/driver/alsamidi.cpp | 39 +- muse2/muse/gconfig.cpp | 13 +- muse2/muse/helper.cpp | 15 +- muse2/muse/icons.cpp | 26 +- muse2/muse/icons.h | 5 + muse2/muse/ladspa.h | 2 +- muse2/muse/liste/editevent.cpp | 2 +- muse2/muse/master/tscale.cpp | 2 +- muse2/muse/mixer/amixer.cpp | 2 +- muse2/muse/mixer/astrip.cpp | 32 +- muse2/muse/mixer/mstrip.cpp | 32 +- muse2/muse/node.cpp | 23 +- muse2/muse/plugin.cpp | 245 +++--- muse2/muse/plugin.h | 19 +- muse2/muse/widgets/CMakeLists.txt | 4 + muse2/muse/widgets/custom_widget_actions.cpp | 196 +++++ muse2/muse/widgets/custom_widget_actions.h | 86 ++ muse2/muse/widgets/doublelabel.cpp | 2 +- muse2/muse/widgets/mtrackinfo.cpp | 28 +- muse2/muse/widgets/mtrackinfobase.ui | 115 +-- muse2/muse/widgets/mtscale.cpp | 4 +- muse2/muse/widgets/mtscale_flo.cpp | 4 +- muse2/muse/widgets/musewidgetsplug.cpp | 18 +- muse2/muse/widgets/pixmap_button.cpp | 174 ++++ muse2/muse/widgets/pixmap_button.h | 87 ++ muse2/muse/widgets/popupmenu.cpp | 17 +- muse2/muse/widgets/popupmenu.h | 3 +- muse2/muse/widgets/routepopup.cpp | 538 ++++++++---- muse2/muse/widgets/routepopup.h | 11 +- muse2/share/locale/muse_de.ts | 147 ++-- muse2/share/locale/muse_en.ts | 1111 +++++++++++++------------ muse2/share/locale/muse_es.ts | 669 +++++++++++---- muse2/share/locale/muse_fr.ts | 301 +++---- muse2/share/locale/muse_pl.ts | 301 +++---- muse2/share/locale/muse_ru.ts | 335 ++++---- muse2/share/locale/muse_sv_SE.ts | 303 +++---- muse2/share/templates/MusE.cfg | 8 +- muse2/synti/vam/COPYING | 5 +- muse2/xpm/midi_thru_off4.xpm | 20 + muse2/xpm/midi_thru_on4.xpm | 20 + muse2/xpm/routing_input_button_slim_4.xpm | 53 ++ muse2/xpm/routing_midi_input_button_slim.xpm | 58 ++ muse2/xpm/routing_midi_output_button_slim.xpm | 58 ++ muse2/xpm/routing_output_button_slim_4.xpm | 53 ++ muse2/xpm/toggle_small.xpm | 15 + 54 files changed, 3467 insertions(+), 1824 deletions(-) create mode 100644 muse2/muse/widgets/custom_widget_actions.cpp create mode 100644 muse2/muse/widgets/custom_widget_actions.h create mode 100644 muse2/muse/widgets/pixmap_button.cpp create mode 100644 muse2/muse/widgets/pixmap_button.h create mode 100644 muse2/xpm/midi_thru_off4.xpm create mode 100644 muse2/xpm/midi_thru_on4.xpm create mode 100644 muse2/xpm/routing_input_button_slim_4.xpm create mode 100644 muse2/xpm/routing_midi_input_button_slim.xpm create mode 100644 muse2/xpm/routing_midi_output_button_slim.xpm create mode 100644 muse2/xpm/routing_output_button_slim_4.xpm create mode 100644 muse2/xpm/toggle_small.xpm diff --git a/muse2/ChangeLog b/muse2/ChangeLog index 356e62d5..2f2a8a87 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,3 +1,27 @@ +20.12.2011: + - Litle break for some polish. Route button icons. Rebuild midi track info ui file - was 3 columns not 2. (Tim) + * Fixed: Hopefully, finally: Non-appearing track info scroll bar. (Tim) + Simple movement of recursive call of sb->setVisible() to end of TLLayout::setGeometry(). + - Audio strip prefader now controls audio. (Tim) +18.12.2011: + * Fixed: Annoying ladspa browser issues. Leak: Dialog was not destroyed. Sorting. Save complete state. (Tim) +17.12.2011: + - Fixed long-time graphics corruption issue: Large areas of desktop erased to background. (Tim...) + Fixed class RoutePopupMenu. Now a subclass of PopupMenu. Changed all usages to 'short-lived' ::exe(), + no more single 'long-life' pointer in class MusE. That should allow multiple instances, using ::popup(). + Also fixed class PopupMenu. Tested all submenu and item destructors - OK, everything destroyed on close. + - Fixed TList::ColorMenu parenting. Pass it a parent from TList::mousePressEvent. + - If Jack is running but no Jack midi devices were found at start, auto-fill with ALSA just to give something. + * Fixed: Some relief from mixer strip and midi track info bloated size. (Tim) + Changed default strip font size from 8 to 7. Changed icon sizing - just let strip layout do its thing, instead of forcing size. + Changed default style sheet to blank. Was causing problems with track info font size. + Fixed mixer: Rebuild mixer upon config font changes. + Re-arranged some font usages. Updated descriptive tooltips on font entry boxes. + Re-claimed font#5 as a 'small bold' font for things like markers. +16.12.2011: + * New: Midi routing matrix! No more clumsy routing menu items. Currently for Midi Track iR and Audio Input iR solo routes. (Tim) +14.12.2011: + - Corrected FSF address in ladspa.h and vam/COPYING. (Orcan) 12.12.2011: * Improved: Midi ports list now fills automatically at start. (Marked as p4.0.41 Tim...) An effort to help new users and others. If auto-filling the mid ports proves too much or unpopular, a simple change diff --git a/muse2/muse/app.cpp b/muse2/muse/app.cpp index 148f3072..4fd01bf7 100644 --- a/muse2/muse/app.cpp +++ b/muse2/muse/app.cpp @@ -327,7 +327,7 @@ MusE::MusE(int /*argc*/, char** /*argv*/) : QMainWindow() mixer2 = 0; watchdogThread = 0; editInstrument = 0; - routingPopupMenu = 0; + //routingPopupMenu = 0; progress = 0; activeTopWin = NULL; currentMenuSharingTopwin = NULL; @@ -1620,18 +1620,6 @@ void MusE::closeEvent(QCloseEvent* event) printf("MusE: Exiting Metronome\n"); MusECore::exitMetronome(); - // Make sure to delete the menu. ~routingPopupMenu() will NOT be called automatically. - // Even though it is a child of MusE, it just passes MusE onto the underlying PopupMenus. - if(routingPopupMenu) - delete routingPopupMenu; - #if 0 - if(routingPopupView) - { - routingPopupView->clear(); - delete routingPopupView; - } - #endif - MusEGlobal::song->cleanupForQuit(); // Give midi devices a chance to close first, above in cleanupForQuit. @@ -1802,18 +1790,20 @@ void MusE::showTransport(bool flag) viewTransportAction->setChecked(flag); } +/* //--------------------------------------------------------- // getRoutingPopupMenu // Get the special common routing popup menu. Used (so far) // by audio strip, midi strip, and midi trackinfo. //--------------------------------------------------------- -MusEGui::RoutePopupMenu* MusE::getRoutingPopupMenu() +MusEGui::RoutePopupMenu* MusE::() { if(!routingPopupMenu) routingPopupMenu = new MusEGui::RoutePopupMenu(this); return routingPopupMenu; } +*/ //--------------------------------------------------------- // saveAs @@ -2493,7 +2483,8 @@ void MusE::changeConfig(bool writeFlag) //loadStyleSheetFile(MusEGlobal::config.styleSheetFile); loadTheme(MusEGlobal::config.style); QApplication::setFont(MusEGlobal::config.fonts[0]); - loadStyleSheetFile(MusEGlobal::config.styleSheetFile); + if(!MusEGlobal::config.styleSheetFile.isEmpty()) + loadStyleSheetFile(MusEGlobal::config.styleSheetFile); emit configChanged(); updateConfiguration(); diff --git a/muse2/muse/app.h b/muse2/muse/app.h index 184581dc..5dad1ff5 100644 --- a/muse2/muse/app.h +++ b/muse2/muse/app.h @@ -85,7 +85,6 @@ class MidiSyncConfig; class MidiTransformerDialog; class PrinterConfig; class RhythmGen; -class RoutePopupMenu; class ScoreEdit; class ShortcutConfig; class TopWin; @@ -185,9 +184,6 @@ class MusE : public QMainWindow QMenu* menu_audio, *menuAutomation, *menuUtils; QMenu* menu_functions, *menuScriptPlugins; - // Special common menu for routes. Used (so far) by audio and midi strip, and midi trackinfo. - RoutePopupMenu* routingPopupMenu; - QMenu* follow; QMenu* midiInputPlugins; @@ -408,7 +404,6 @@ class MusE : public QMainWindow bool importWaveToTrack(QString& name, unsigned tick=0, MusECore::Track* track=NULL); void importPartToTrack(QString& filename, unsigned tick, MusECore::Track* track); void showTransport(bool flag); - RoutePopupMenu* getRoutingPopupMenu(); const ToplevelList* getToplevels() { return &toplevels; } diff --git a/muse2/muse/appearance.cpp b/muse2/muse/appearance.cpp index e9ebf222..37b5726f 100644 --- a/muse2/muse/appearance.cpp +++ b/muse2/muse/appearance.cpp @@ -130,12 +130,12 @@ Appearance::Appearance(Arranger* a, QWidget* parent) lastSelectedBgItem = 0; fontName0->setToolTip(tr("Main application font, and default font for any\n controls not defined here.")); - fontName1->setToolTip(tr("For small controls like mixer strips.\nAlso timescale small numbers, arranger part name overlay,\n and effects rack.")); - fontName2->setToolTip(tr("Midi track info panel. Transport controls.")); - fontName3->setToolTip(tr("Controller graph and S/X buttons. Large numbers for time\n and tempo scale, and time signature.")); - fontName4->setToolTip(tr("Time scale markers.")); - fontName5->setToolTip(tr("List editor: meta event edit dialog multi-line edit box.")); - fontName6->setToolTip(tr("Mixer label font. Auto-font-sizing up to chosen font size.\nWord-breaking but only with spaces.")); + fontName1->setToolTip(tr("Mixer strips and effects racks. Midi track info panel.\nMidi control panel entry box.")); + fontName2->setToolTip(tr("Transport controls.")); + fontName3->setToolTip(tr("Time scale upper, and time signature.\nController graph and S/X buttons.")); + fontName4->setToolTip(tr("Time scale lower, and arranger part name overlay.")); + fontName5->setToolTip(tr("Tempo scale, and markers.")); + fontName6->setToolTip(tr("Mixer labels. Auto-font-sizing up to chosen font size.\nWord-breaking but only with spaces.")); fontSize6->setToolTip(tr("Maximum mixer label auto-font-sizing font size.")); globalAlphaSlider->setToolTip(tr("Global opacity (opposite of transparency).")); diff --git a/muse2/muse/arranger/alayout.cpp b/muse2/muse/arranger/alayout.cpp index 119da498..84923f12 100644 --- a/muse2/muse/arranger/alayout.cpp +++ b/muse2/muse/arranger/alayout.cpp @@ -138,7 +138,8 @@ void TLLayout::setGeometry(const QRect &rect) range = 0; // Note this appears to cause a single recursive call to this function - jumps to beginning, // because now the scroll bar wants to be put in the layout. - sb->setVisible(range != 0); + // Moved below. p4.0.44 + ///sb->setVisible(range != 0); if (range) sb->setMaximum(range); @@ -154,6 +155,9 @@ void TLLayout::setGeometry(const QRect &rect) li[4]->setGeometry(QRect(0, y2, w, s4.height())); li[5]->setGeometry(QRect(3, y3, s5.width(), s5.height())); + /// Fix for non-appearing scrollbar. Yes, we must allow the recursive call, but try it here, not above. p4.0.44 Tim + sb->setVisible(range != 0); + //_inSetGeometry = false; } diff --git a/muse2/muse/arranger/arranger.cpp b/muse2/muse/arranger/arranger.cpp index cb024070..af5c9785 100644 --- a/muse2/muse/arranger/arranger.cpp +++ b/muse2/muse/arranger/arranger.cpp @@ -1032,12 +1032,13 @@ void Arranger::genTrackInfo(QWidget* parent) noTrackInfo->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding)); midiTrackInfo = new MidiTrackInfo(trackInfo); + //midiTrackInfo->setFocusPolicy(Qt::TabFocus); // p4.0.9 //midiTrackInfo->setSizePolicy(QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum)); trackInfo->addWidget(noTrackInfo, 0); trackInfo->addWidget(midiTrackInfo, 1); trackInfo->addWidget(0, 2); - + /// genMidiTrackInfo(); } diff --git a/muse2/muse/arranger/pcanvas.cpp b/muse2/muse/arranger/pcanvas.cpp index f190de3b..05b7b12a 100644 --- a/muse2/muse/arranger/pcanvas.cpp +++ b/muse2/muse/arranger/pcanvas.cpp @@ -1763,7 +1763,7 @@ void PartCanvas::drawItem(QPainter& p, const CItem* item, const QRect& rect) //bool rev = (brightness < 12000 || part->selected()) && !part->mute() && !item->isMoving(); bool rev = brightness >= 12000 && !part->selected(); p.save(); - p.setFont(MusEGlobal::config.fonts[1]); + p.setFont(MusEGlobal::config.fonts[4]); p.setWorldMatrixEnabled(false); if (rev) p.setPen(Qt::white); @@ -2256,7 +2256,7 @@ void PartCanvas::drawItem(QPainter& p, const CItem* item, const QRect& rect) brightness = part_r*29 + part_g*59 + part_b*12; //bool rev = (brightness < 12000 || part->selected()) && !part->mute() && !item->isMoving(); bool rev = brightness >= 12000 && !part->selected(); - p.setFont(MusEGlobal::config.fonts[1]); + p.setFont(MusEGlobal::config.fonts[4]); if (rev) p.setPen(Qt::white); else diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp index 620a24b7..4fc39c2c 100644 --- a/muse2/muse/arranger/tlist.cpp +++ b/muse2/muse/arranger/tlist.cpp @@ -585,10 +585,6 @@ void TList::portsPopupMenu(MusECore::Track* t, int x, int y) switch(t->type()) { case MusECore::Track::MIDI: case MusECore::Track::DRUM: - // FINDMICHJETZT: this is a notice for flo's experimental - // branch! don't forget NEW_DRUM here! - // please don't remove this. i'll do it when - // the time is there. case MusECore::Track::AUDIO_SOFTSYNTH: { MusECore::MidiTrack* track = (MusECore::MidiTrack*)t; @@ -1136,10 +1132,11 @@ void TList::changeAutomationColor(QAction* act) // colorMenu //--------------------------------------------------------- //QMenu* TList::colorMenu(QColor c, int id) -PopupMenu* TList::colorMenu(QColor c, int id) +PopupMenu* TList::colorMenu(QColor c, int id, QWidget* parent) { //QMenu * m = new QMenu(this); - PopupMenu * m = new PopupMenu(this); //, true); TODO + //PopupMenu * m = new PopupMenu(this); //, true); TODO + PopupMenu * m = new PopupMenu(parent); //, true); // for (int i = 0; i< 6; i++) { QPixmap pix(10,10); QPainter p(&pix); @@ -1301,7 +1298,8 @@ void TList::mousePressEvent(QMouseEvent* ev) data += 150; // illegal color > 100 act->setData(data); //QMenu *m = colorMenu(cl->color(), cl->id()); - PopupMenu *m = colorMenu(cl->color(), cl->id()); + //PopupMenu *m = colorMenu(cl->color(), cl->id()); + PopupMenu *m = colorMenu(cl->color(), cl->id(), p); act->setMenu(m); } connect(p, SIGNAL(triggered(QAction*)), SLOT(changeAutomation(QAction*))); diff --git a/muse2/muse/arranger/tlist.h b/muse2/muse/arranger/tlist.h index 2aeae939..5ae3fbe9 100644 --- a/muse2/muse/arranger/tlist.h +++ b/muse2/muse/arranger/tlist.h @@ -27,6 +27,7 @@ #include +class QWidget; class QKeyEvent; class QLineEdit; class QSpinBox; @@ -109,7 +110,7 @@ class TList : public QWidget { MusECore::TrackList getRecEnabledTracks(); void setHeaderToolTips(); //QMenu* colorMenu(QColor c, int id); - PopupMenu* colorMenu(QColor c, int id); + PopupMenu* colorMenu(QColor c, int id, QWidget* parent); private slots: void returnPressed(); diff --git a/muse2/muse/driver/alsamidi.cpp b/muse2/muse/driver/alsamidi.cpp index 4687f17f..2c6f9468 100644 --- a/muse2/muse/driver/alsamidi.cpp +++ b/muse2/muse/driver/alsamidi.cpp @@ -79,6 +79,16 @@ int MidiAlsaDevice::selectWfd() QString MidiAlsaDevice::open() { _openFlags &= _rwFlags; // restrict to available bits + + snd_seq_port_info_t *pinfo; + snd_seq_port_info_alloca(&pinfo); + int rv = snd_seq_get_any_port_info(alsaSeq, adr.client, adr.port, pinfo); + if(rv < 0) + { + printf("MidiAlsaDevice::open Error getting port info: adr: %d:%d: %s\n", adr.client, adr.port, snd_strerror(rv)); + return QString(snd_strerror(rv)); + } + snd_seq_port_subscribe_t* subs; // Allocated on stack, no need to call snd_seq_port_subscribe_free() later. snd_seq_port_subscribe_alloca(&subs); @@ -87,12 +97,9 @@ QString MidiAlsaDevice::open() int wer = 0; int rer = 0; - snd_seq_port_info_t *pinfo; - snd_seq_port_info_alloca(&pinfo); - //snd_seq_port_info_set_client(pinfo, snd_seq_client_info_get_client(cinfo)); - snd_seq_port_info_set_addr(pinfo, &adr); - int cap = snd_seq_port_info_get_capability(pinfo); + + //printf("MidiAlsaDevice::open cap:%d\n", cap); // subscribe for writing if (_openFlags & 1) @@ -151,6 +158,15 @@ QString MidiAlsaDevice::open() void MidiAlsaDevice::close() { + snd_seq_port_info_t *pinfo; + snd_seq_port_info_alloca(&pinfo); + int rv = snd_seq_get_any_port_info(alsaSeq, adr.client, adr.port, pinfo); + if(rv < 0) + { + printf("MidiAlsaDevice::close Error getting port info: adr: %d:%d: %s\n", adr.client, adr.port, snd_strerror(rv)); + return; + } + snd_seq_port_subscribe_t* subs; // Allocated on stack, no need to call snd_seq_port_subscribe_free() later. snd_seq_port_subscribe_alloca(&subs); @@ -158,13 +174,10 @@ void MidiAlsaDevice::close() int wer = 0; int rer = 0; - snd_seq_port_info_t *pinfo; - snd_seq_port_info_alloca(&pinfo); - //snd_seq_port_info_set_client(pinfo, snd_seq_client_info_get_client(cinfo)); - snd_seq_port_info_set_addr(pinfo, &adr); - int cap = snd_seq_port_info_get_capability(pinfo); + //printf("MidiAlsaDevice::close cap:%d\n", cap); + // This function appears to be called only by MidiPort::setMidiDevice(), // which closes then opens the device. // Because the open flags are set BEFORE setMidiDevice() is called, we must ignore the flags. @@ -881,10 +894,10 @@ void exitMidiAlsa() // Allocated on stack, no need to call snd_seq_port_subscribe_free() later. snd_seq_port_subscribe_alloca(&subs); - snd_seq_port_info_t *pinfo; - snd_seq_port_info_alloca(&pinfo); + //snd_seq_port_info_t *pinfo; + //snd_seq_port_info_alloca(&pinfo); //snd_seq_port_info_set_client(pinfo, snd_seq_client_info_get_client(cinfo)); - snd_seq_port_info_set_addr(pinfo, &announce_adr); + //snd_seq_port_info_set_addr(pinfo, &announce_adr); snd_seq_port_subscribe_set_dest(subs, &musePort); snd_seq_port_subscribe_set_sender(subs, &announce_adr); diff --git a/muse2/muse/gconfig.cpp b/muse2/muse/gconfig.cpp index 0abbbd76..f05abbf2 100644 --- a/muse2/muse/gconfig.cpp +++ b/muse2/muse/gconfig.cpp @@ -89,11 +89,11 @@ GlobalConfigValues config = { QColor(200, 192, 171), // waveEditBackgroundColor; { QFont(QString("arial"), 10, QFont::Normal), - QFont(QString("arial"), 8, QFont::Normal), + QFont(QString("arial"), 7, QFont::Normal), // Mixer strips and midi track info panel QFont(QString("arial"), 10, QFont::Normal), QFont(QString("arial"), 10, QFont::Bold), - QFont(QString("arial"), 8, QFont::Bold), // timescale numbers - QFont(QString("Lucidatypewriter"), 14, QFont::Bold), + QFont(QString("arial"), 8, QFont::Normal), // Small numbers: Timescale and markers, part name overlay + QFont(QString("arial"), 8, QFont::Bold), // Small bold numbers such as marker text QFont(QString("arial"), 8, QFont::Bold, true) // Mixer strip labels. Looks and fits better with bold + italic than bold alone, // at the price of only few more pixels than Normal mode. }, @@ -161,16 +161,15 @@ GlobalConfigValues config = { false, // BigTimeVisible; false, // mixer1Visible; false, // mixer2Visible; - false, // markerVisible; - true, // arrangerVisible; + true, // arrangerVisible; true, // showSplashScreen 1, // canvasShowPartType 1 - names, 2 events 5, // canvasShowPartEvent - true, // canvasShowGrid; + true, // canvasShowGrid; QString(""), // canvasBgPixmap; QStringList(), // canvasCustomBgList - QString(":/style.qss"), // default styleSheetFile + QString(""), // default styleSheetFile - For built-in set to ":/style.qss" QString(""), // style QString("sweep"), // externalWavEditor false, // useOldStyleStopShortCut diff --git a/muse2/muse/helper.cpp b/muse2/muse/helper.cpp index f560fbfb..b1f37e36 100644 --- a/muse2/muse/helper.cpp +++ b/muse2/muse/helper.cpp @@ -398,9 +398,10 @@ QString getUniqueUntitledName() // ------------------------------------------------------------------------------------------------------- // populateMidiPorts() -// This version creats separate devices for input and output ports. +// This version creats separate devices for Jack midi input and outputs. // It does not attempt to pair them together. // ------------------------------------------------------------------------------------------------------- + void populateMidiPorts() { if(!MusEGlobal::checkAudioDevice()) @@ -409,6 +410,8 @@ void populateMidiPorts() MusECore::MidiDevice* dev = 0; int port_num = 0; + + int jack_midis_found = 0; // If Jack is running, prefer Jack midi devices over ALSA. if(MusEGlobal::audioDevice->deviceType() == MusECore::AudioDevice::JACK_AUDIO) @@ -420,6 +423,7 @@ void populateMidiPorts() dev = MusECore::MidiJackDevice::createJackMidiDevice(*i, 1); if(dev) { + ++jack_midis_found; //printf("populateMidiPorts Created jack writeable device: %s\n", dev->name().toLatin1().constData()); //dev->setOpenFlags(1); MusEGlobal::midiSeq->msgSetMidiDevice(&MusEGlobal::midiPorts[port_num], dev); @@ -437,6 +441,7 @@ void populateMidiPorts() dev = MusECore::MidiJackDevice::createJackMidiDevice(*i, 2); if(dev) { + ++jack_midis_found; //printf("populateMidiPorts Created jack readable device: %s\n", dev->name().toLatin1().constData()); //dev->setOpenFlags(2); MusEGlobal::midiSeq->msgSetMidiDevice(&MusEGlobal::midiPorts[port_num], dev); @@ -448,9 +453,13 @@ void populateMidiPorts() } } } - else + //else // If Jack is not running, use ALSA devices. - if(MusEGlobal::audioDevice->deviceType() == MusECore::AudioDevice::DUMMY_AUDIO) + //if(MusEGlobal::audioDevice->deviceType() == MusECore::AudioDevice::DUMMY_AUDIO) + // Try to do the user a favour: If we still have no Jack devices, even if Jack is running, fill with ALSA. + // It is possible user has Jack running on ALSA back-end but without midi support. + // IE. They use Jack for audio but use ALSA for midi! + if(MusEGlobal::audioDevice->deviceType() == MusECore::AudioDevice::DUMMY_AUDIO || jack_midis_found == 0) { for(MusECore::iMidiDevice i = MusEGlobal::midiDevices.begin(); i != MusEGlobal::midiDevices.end(); ++i) { diff --git a/muse2/muse/icons.cpp b/muse2/muse/icons.cpp index 6991eab8..1cf28259 100644 --- a/muse2/muse/icons.cpp +++ b/muse2/muse/icons.cpp @@ -43,8 +43,8 @@ #include "xpm/midi_inputplugins_random_rhythm_generator.xpm" #include "xpm/midi_local_off.xpm" #include "xpm/midi_reset_instr.xpm" -#include "xpm/midi_thru_off3.xpm" -#include "xpm/midi_thru_on3.xpm" +#include "xpm/midi_thru_off4.xpm" +#include "xpm/midi_thru_on4.xpm" #include "xpm/settings_appearance_settings.xpm" #include "xpm/settings_configureshortcuts.xpm" #include "xpm/settings_follow_song.xpm" @@ -119,6 +119,10 @@ #include "xpm/mutebutton_off.xpm" #include "xpm/rec_echo_on.xpm" #include "xpm/rec_echo_off.xpm" +#include "xpm/routing_input_button_slim_4.xpm" +#include "xpm/routing_output_button_slim_4.xpm" +#include "xpm/routing_midi_input_button_slim.xpm" +#include "xpm/routing_midi_output_button_slim.xpm" #include "xpm/up.xpm" #include "xpm/down.xpm" @@ -174,6 +178,7 @@ #include "xpm/exit.xpm" #include "xpm/exit1.xpm" +#include "xpm/toggle_small.xpm" #include "xpm/redled.xpm" #include "xpm/darkredled.xpm" #include "xpm/greendot.xpm" @@ -239,6 +244,7 @@ #include "xpm/sine.xpm" #include "xpm/saw.xpm" +#include "icons.h" #if QT_VERSION >= 0x040600 #define MPIXMAP(a,b) QPixmap(QIcon::fromTheme(b, QIcon(QPixmap(a))).pixmap(QPixmap(a).width(),QPixmap(a).height())) @@ -284,6 +290,11 @@ QPixmap* exit1Icon; QPixmap* newmuteIcon; QPixmap* soloIcon; +QPixmap* routesInIcon; +QPixmap* routesOutIcon; +QPixmap* routesMidiInIcon; +QPixmap* routesMidiOutIcon; + QPixmap* pointerIcon; QPixmap* pencilIcon; QPixmap* deleteIcon; @@ -396,6 +407,7 @@ QIcon* editpaste2TrackIcon; QIcon* editpasteClone2TrackIcon; */ +QPixmap* toggle_small_Icon; QPixmap* redLedIcon; QPixmap* darkRedLedIcon; QPixmap* greendotIcon; @@ -595,6 +607,11 @@ void initIcons() newmuteIcon = new MPIXMAP(newmutebutton_xpm, NULL); soloIcon = new MPIXMAP(solobutton_xpm, NULL); + routesInIcon = new MPIXMAP(routing_input_button_slim_4_xpm, NULL); + routesOutIcon = new MPIXMAP(routing_output_button_slim_4_xpm, NULL); + routesMidiInIcon = new MPIXMAP(routing_midi_input_button_slim_xpm, NULL); + routesMidiOutIcon = new MPIXMAP(routing_midi_output_button_slim_xpm, NULL); + recEchoIconOn = new MPIXMAP(rec_echo_on_xpm, NULL); recEchoIconOff = new MPIXMAP(rec_echo_off_xpm, NULL); muteIconOn = new MPIXMAP(mutebutton_on_xpm, NULL); @@ -610,6 +627,7 @@ void initIcons() //soloIconSet2->addPixmap(*soloblksqIconOn, QIcon::Normal, QIcon::On); //soloIconSet2->addPixmap(*soloblksqIconOff, QIcon::Normal, QIcon::Off); + toggle_small_Icon = new MPIXMAP(toggle_small_xpm, NULL); redLedIcon = new MPIXMAP(redled_xpm, NULL); darkRedLedIcon = new MPIXMAP(darkredled_xpm, NULL); greendotIcon = new MPIXMAP(greendot_xpm, NULL); @@ -625,8 +643,8 @@ void initIcons() miditransformSIcon = new MPIXMAP(miditransformS_xpm, NULL); midi_plugSIcon = new MPIXMAP(midi_plugS_xpm, NULL); miditransposeSIcon = new MPIXMAP(miditransposeS_xpm, NULL); - midiThruOnIcon = new MPIXMAP(midi_thru_on3_xpm, NULL); - midiThruOffIcon = new MPIXMAP(midi_thru_off3_xpm, NULL); + midiThruOnIcon = new MPIXMAP(midi_thru_on4_xpm, NULL); + midiThruOffIcon = new MPIXMAP(midi_thru_off4_xpm, NULL); mixerSIcon = new MPIXMAP(mixerS_xpm, NULL); mustangSIcon = new MPIXMAP(mustangS_xpm, NULL); diff --git a/muse2/muse/icons.h b/muse2/muse/icons.h index 0c576ba4..8d55882b 100644 --- a/muse2/muse/icons.h +++ b/muse2/muse/icons.h @@ -147,6 +147,10 @@ extern QPixmap* record_off_Icon; extern QPixmap* newmuteIcon; extern QPixmap* soloIcon; +extern QPixmap* routesInIcon; +extern QPixmap* routesOutIcon; +extern QPixmap* routesMidiInIcon; +extern QPixmap* routesMidiOutIcon; extern QPixmap* muteIconOn; extern QPixmap* muteIconOff; extern QPixmap* soloIconOn; @@ -156,6 +160,7 @@ extern QPixmap* soloblksqIconOff; //extern QIcon* soloIconSet1; //extern QIcon* soloIconSet2; +extern QPixmap* toggle_small_Icon; extern QPixmap* redLedIcon; extern QPixmap* darkRedLedIcon; extern QPixmap* greendotIcon; diff --git a/muse2/muse/ladspa.h b/muse2/muse/ladspa.h index 7bbc338f..d7e0e902 100644 --- a/muse2/muse/ladspa.h +++ b/muse2/muse/ladspa.h @@ -16,7 +16,7 @@ You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef LADSPA_INCLUDED diff --git a/muse2/muse/liste/editevent.cpp b/muse2/muse/liste/editevent.cpp index 214f74c2..fa58bafd 100644 --- a/muse2/muse/liste/editevent.cpp +++ b/muse2/muse/liste/editevent.cpp @@ -330,7 +330,7 @@ EditMetaDialog::EditMetaDialog(int tick, const MusECore::Event& ev, connect(hexButton, SIGNAL(toggled(bool)), SLOT(toggled(bool))); edit = new QTextEdit; - edit->setFont(MusEGlobal::config.fonts[5]); + edit->setFont(MusEGlobal::config.fonts[0]); if (!ev.empty()) { epos->setValue(tick); diff --git a/muse2/muse/master/tscale.cpp b/muse2/muse/master/tscale.cpp index 23e7337b..57bb898d 100644 --- a/muse2/muse/master/tscale.cpp +++ b/muse2/muse/master/tscale.cpp @@ -37,7 +37,7 @@ namespace MusEGui { TScale::TScale(QWidget* parent, int ymag) : View(parent, 1, ymag) { - setFont(MusEGlobal::config.fonts[4]); + setFont(MusEGlobal::config.fonts[5]); //int w = 4 * QFontMetrics(MusEGlobal::config.fonts[4]).width('0'); int w = 4 * fontMetrics().width('0'); setFixedWidth(w); diff --git a/muse2/muse/mixer/amixer.cpp b/muse2/muse/mixer/amixer.cpp index 439a92b9..25171450 100644 --- a/muse2/muse/mixer/amixer.cpp +++ b/muse2/muse/mixer/amixer.cpp @@ -538,7 +538,7 @@ void AudioMixerApp::updateMixer(UpdateAction action) void AudioMixerApp::configChanged() { - songChanged(SC_CONFIG); + songChanged(-1); // Catch when fonts change, do full rebuild. } //--------------------------------------------------------- diff --git a/muse2/muse/mixer/astrip.cpp b/muse2/muse/mixer/astrip.cpp index 9c393a1a..ecb2f507 100644 --- a/muse2/muse/mixer/astrip.cpp +++ b/muse2/muse/mixer/astrip.cpp @@ -895,7 +895,7 @@ AudioStrip::AudioStrip(QWidget* parent, MusECore::AudioTrack* at) record->setToolTip(tr("record")); record->setChecked(t->recordFlag()); record->setIcon(t->recordFlag() ? QIcon(*record_on_Icon) : QIcon(*record_off_Icon)); - record->setIconSize(record_on_Icon->size()); + ///record->setIconSize(record_on_Icon->size()); connect(record, SIGNAL(clicked(bool)), SLOT(recordToggled(bool))); } @@ -906,7 +906,7 @@ AudioStrip::AudioStrip(QWidget* parent, MusECore::AudioTrack* at) mute->setToolTip(tr("mute")); mute->setChecked(t->mute()); mute->setIcon(t->mute() ? QIcon(*muteIconOff) : QIcon(*muteIconOn)); - mute->setIconSize(muteIconOn->size()); + ///mute->setIconSize(muteIconOn->size()); mute->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); connect(mute, SIGNAL(clicked(bool)), SLOT(muteToggled(bool))); @@ -918,7 +918,7 @@ AudioStrip::AudioStrip(QWidget* parent, MusECore::AudioTrack* at) solo->setIcon(t->solo() ? QIcon(*soloblksqIconOn) : QIcon(*soloblksqIconOff)); else solo->setIcon(t->solo() ? QIcon(*soloIconOn) : QIcon(*soloIconOff)); - solo->setIconSize(soloIconOn->size()); + ///solo->setIconSize(soloIconOn->size()); solo->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); connect(solo, SIGNAL(clicked(bool)), SLOT(soloToggled(bool))); if (type == MusECore::Track::AUDIO_OUTPUT) { @@ -938,7 +938,7 @@ AudioStrip::AudioStrip(QWidget* parent, MusECore::AudioTrack* at) off->setToolTip(tr("off")); off->setChecked(t->off()); off->setIcon(t->off() ? QIcon(*exit1Icon) : QIcon(*exitIcon)); - off->setIconSize(exit1Icon->size()); + ///off->setIconSize(exit1Icon->size()); connect(off, SIGNAL(clicked(bool)), SLOT(offToggled(bool))); grid->addWidget(off, _curGridRow, 0); @@ -955,8 +955,10 @@ AudioStrip::AudioStrip(QWidget* parent, MusECore::AudioTrack* at) if (type != MusECore::Track::AUDIO_AUX) { iR = new QToolButton(); iR->setFont(MusEGlobal::config.fonts[1]); - iR->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); - iR->setText(tr("iR")); + iR->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum)); + ///iR->setText(tr("iR")); + iR->setIcon(QIcon(*routesInIcon)); + iR->setIconSize(routesInIcon->size()); iR->setCheckable(false); iR->setToolTip(tr("input routing")); grid->addWidget(iR, _curGridRow, 0); @@ -965,8 +967,10 @@ AudioStrip::AudioStrip(QWidget* parent, MusECore::AudioTrack* at) oR = new QToolButton(); oR->setFont(MusEGlobal::config.fonts[1]); - oR->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); - oR->setText(tr("oR")); + oR->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum)); + ///oR->setText(tr("oR")); + oR->setIcon(QIcon(*routesOutIcon)); + oR->setIconSize(routesOutIcon->size()); oR->setCheckable(false); oR->setToolTip(tr("output routing")); grid->addWidget(oR, _curGridRow++, 1); @@ -1045,9 +1049,11 @@ AudioStrip::AudioStrip(QWidget* parent, MusECore::AudioTrack* at) void AudioStrip::iRoutePressed() { - MusEGui::RoutePopupMenu* pup = MusEGlobal::muse->getRoutingPopupMenu(); - iR->setDown(false); + //MusEGui::RoutePopupMenu* pup = MusEGlobal::muse->getRoutingPopupMenu(); + RoutePopupMenu* pup = new RoutePopupMenu(); pup->exec(QCursor::pos(), track, false); + delete pup; + iR->setDown(false); } //--------------------------------------------------------- @@ -1056,9 +1062,11 @@ void AudioStrip::iRoutePressed() void AudioStrip::oRoutePressed() { - MusEGui::RoutePopupMenu* pup = MusEGlobal::muse->getRoutingPopupMenu(); - oR->setDown(false); + //MusEGui::RoutePopupMenu* pup = MusEGlobal::muse->getRoutingPopupMenu(); + RoutePopupMenu* pup = new RoutePopupMenu(); pup->exec(QCursor::pos(), track, true); + delete pup; + oR->setDown(false); } } // namespace MusEGui diff --git a/muse2/muse/mixer/mstrip.cpp b/muse2/muse/mixer/mstrip.cpp index dc495aa6..031eaa4b 100644 --- a/muse2/muse/mixer/mstrip.cpp +++ b/muse2/muse/mixer/mstrip.cpp @@ -300,7 +300,7 @@ MidiStrip::MidiStrip(QWidget* parent, MusECore::MidiTrack* t) record->setToolTip(tr("record")); record->setChecked(track->recordFlag()); record->setIcon(track->recordFlag() ? QIcon(*record_on_Icon) : QIcon(*record_off_Icon)); - record->setIconSize(record_on_Icon->size()); + ///record->setIconSize(record_on_Icon->size()); connect(record, SIGNAL(clicked(bool)), SLOT(recordToggled(bool))); mute = new QToolButton(); @@ -308,7 +308,7 @@ MidiStrip::MidiStrip(QWidget* parent, MusECore::MidiTrack* t) mute->setToolTip(tr("mute")); mute->setChecked(track->mute()); mute->setIcon(track->mute() ? QIcon(*muteIconOff) : QIcon(*muteIconOn)); - mute->setIconSize(muteIconOn->size()); + ///mute->setIconSize(muteIconOn->size()); mute->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); connect(mute, SIGNAL(clicked(bool)), SLOT(muteToggled(bool))); @@ -322,7 +322,7 @@ MidiStrip::MidiStrip(QWidget* parent, MusECore::MidiTrack* t) solo->setIcon(track->solo() ? QIcon(*soloblksqIconOn) : QIcon(*soloblksqIconOff)); else solo->setIcon(track->solo() ? QIcon(*soloIconOn) : QIcon(*soloIconOff)); - solo->setIconSize(soloIconOn->size()); + ///solo->setIconSize(soloIconOn->size()); connect(solo, SIGNAL(clicked(bool)), SLOT(soloToggled(bool))); /* @@ -368,7 +368,7 @@ MidiStrip::MidiStrip(QWidget* parent, MusECore::MidiTrack* t) off->setToolTip(tr("off")); off->setChecked(track->off()); off->setIcon(track->off() ? QIcon(*exit1Icon) : QIcon(*exitIcon)); - off->setIconSize(exit1Icon->size()); + ///off->setIconSize(exit1Icon->size()); connect(off, SIGNAL(clicked(bool)), SLOT(offToggled(bool))); grid->addWidget(off, _curGridRow, 0); @@ -382,16 +382,20 @@ MidiStrip::MidiStrip(QWidget* parent, MusECore::MidiTrack* t) iR = new QToolButton(); iR->setFont(MusEGlobal::config.fonts[1]); - iR->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); - iR->setText(tr("iR")); + iR->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum)); + ///iR->setText(tr("iR")); + iR->setIcon(QIcon(*routesMidiInIcon)); + iR->setIconSize(routesMidiInIcon->size()); iR->setCheckable(false); iR->setToolTip(tr("input routing")); grid->addWidget(iR, _curGridRow, 0); connect(iR, SIGNAL(pressed()), SLOT(iRoutePressed())); oR = new QToolButton(); oR->setFont(MusEGlobal::config.fonts[1]); - oR->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); - oR->setText(tr("oR")); + oR->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum)); + ///oR->setText(tr("oR")); + oR->setIcon(QIcon(*routesMidiOutIcon)); + oR->setIconSize(routesMidiOutIcon->size()); oR->setCheckable(false); // TODO: Works OK, but disabled for now, until we figure out what to do about multiple out routes and display values... // Enabled (for Midi Port to Audio Input routing). p4.0.14 Tim. @@ -994,9 +998,11 @@ void MidiStrip::setReverbSend(double val) void MidiStrip::iRoutePressed() { - MusEGui::RoutePopupMenu* pup = MusEGlobal::muse->getRoutingPopupMenu(); - iR->setDown(false); + //MusEGui::RoutePopupMenu* pup = MusEGlobal::muse->getRoutingPopupMenu(); + RoutePopupMenu* pup = new RoutePopupMenu(); pup->exec(QCursor::pos(), track, false); + delete pup; + iR->setDown(false); } //--------------------------------------------------------- @@ -1005,9 +1011,11 @@ void MidiStrip::iRoutePressed() void MidiStrip::oRoutePressed() { - MusEGui::RoutePopupMenu* pup = MusEGlobal::muse->getRoutingPopupMenu(); - oR->setDown(false); + //MusEGui::RoutePopupMenu* pup = MusEGlobal::muse->getRoutingPopupMenu(); + RoutePopupMenu* pup = new RoutePopupMenu(); pup->exec(QCursor::pos(), track, true); + delete pup; + oR->setDown(false); } } // namespace MusEGui diff --git a/muse2/muse/node.cpp b/muse2/muse/node.cpp index cb77f939..b6b40738 100644 --- a/muse2/muse/node.cpp +++ b/muse2/muse/node.cpp @@ -687,7 +687,7 @@ void AudioTrack::copyData(unsigned pos, int dstChannels, int srcStartChan, int s for(int c = 0; c < dstChannels; ++c) { double v; - if(srcStartChan > 2) // Don't apply pan or volume to extra channels above 2. + if(srcStartChan > 2 || _prefader) // Don't apply pan or volume to extra channels above 2. Or if prefader on. //v = _volume; v = 1.0; else @@ -711,7 +711,7 @@ void AudioTrack::copyData(unsigned pos, int dstChannels, int srcStartChan, int s for(int c = 0; c < dstChannels; ++c) { double v; - if(srcStartChan > 2) // Don't apply pan or volume to extra channels above 2. + if(srcStartChan > 2 || _prefader) // Don't apply pan or volume to extra channels above 2. Or if prefader on. //v = _volume; v = 1.0; else @@ -729,10 +729,10 @@ void AudioTrack::copyData(unsigned pos, int dstChannels, int srcStartChan, int s } else if(srcChans == 2 && dstChannels == 1) { - //double v1 = (srcStartChan > 2 ? _volume : vol[srcStartChan]); // Don't apply pan to extra channels above 2. + //double v1 = (srcStartChan > 2 ? _volume : vol[srcStartChan]); // //double v2 = (srcStartChan > 2 ? _volume : vol[srcStartChan + 1]); // - double v1 = (srcStartChan > 2 ? 1.0 : vol[srcStartChan]); // Don't apply pan or volume to extra channels above 2. - double v2 = (srcStartChan > 2 ? 1.0 : vol[srcStartChan + 1]); // + double v1 = ((srcStartChan > 2 || _prefader) ? 1.0 : vol[srcStartChan]); // Don't apply pan or volume to extra channels above 2. Or if prefader on. + double v2 = ((srcStartChan > 2 || _prefader) ? 1.0 : vol[srcStartChan + 1]); // float* dp = dstBuffer[0]; float* sp1 = buffer[srcStartChan]; float* sp2 = buffer[srcStartChan + 1]; @@ -1034,7 +1034,7 @@ void AudioTrack::addData(unsigned pos, int dstChannels, int srcStartChan, int sr for(int c = 0; c < dstChannels; ++c) { double v; - if(srcStartChan > 2) // Don't apply pan or volume to extra channels above 2. + if(srcStartChan > 2 || _prefader) // Don't apply pan or volume to extra channels above 2. Or if prefader on. //v = _volume; v = 1.0; else @@ -1058,7 +1058,7 @@ void AudioTrack::addData(unsigned pos, int dstChannels, int srcStartChan, int sr for(int c = 0; c < dstChannels; ++c) { double v; - if(srcStartChan > 2) // Don't apply pan or volume to extra channels above 2. + if(srcStartChan > 2 || _prefader) // Don't apply pan or volume to extra channels above 2. Or if prefader on. //v = _volume; v = 1.0; else @@ -1078,8 +1078,8 @@ void AudioTrack::addData(unsigned pos, int dstChannels, int srcStartChan, int sr { //double v1 = (srcStartChan > 2 ? _volume : vol[srcStartChan]); // Don't apply pan to extra channels above 2. //double v2 = (srcStartChan > 2 ? _volume : vol[srcStartChan + 1]); // - double v1 = (srcStartChan > 2 ? 1.0 : vol[srcStartChan]); // Don't apply pan or volume to extra channels above 2. - double v2 = (srcStartChan > 2 ? 1.0 : vol[srcStartChan + 1]); // + double v1 = ((srcStartChan > 2 || _prefader) ? 1.0 : vol[srcStartChan]); // Don't apply pan or volume to extra channels above 2. Or if prefader on. + double v2 = ((srcStartChan > 2 || _prefader) ? 1.0 : vol[srcStartChan + 1]); // float* sp1 = buffer[srcStartChan]; float* sp2 = buffer[srcStartChan + 1]; float* dp = dstBuffer[0]; @@ -1095,7 +1095,7 @@ void AudioTrack::addData(unsigned pos, int dstChannels, int srcStartChan, int sr void AudioTrack::readVolume(Xml& xml) { - int ch = 0; + //int ch = 0; for (;;) { Xml::Token token = xml.parse(); switch (token) { @@ -1110,7 +1110,8 @@ void AudioTrack::readVolume(Xml& xml) break; case Xml::Attribut: if (xml.s1() == "ch") - ch = xml.s2().toInt(); + //ch = xml.s2().toInt(); + xml.s2(); break; case Xml::TagEnd: if (xml.s1() == "volume") diff --git a/muse2/muse/plugin.cpp b/muse2/muse/plugin.cpp index 227a9daf..e7e5c1f8 100644 --- a/muse2/muse/plugin.cpp +++ b/muse2/muse/plugin.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -45,13 +46,13 @@ #include #include #include +#include #include #include #include #include #include #include -#include #include "globals.h" #include "globaldefs.h" @@ -100,7 +101,10 @@ static const char* MusEGlobal::preset_file_save_pattern[] = { namespace MusEGui { int PluginDialog::selectedPlugType = 0; QStringList PluginDialog::sortItems = QStringList(); - +///int PluginDialog::sortColumn = 0; +///Qt::SortOrder PluginDialog::sortOrder = Qt::AscendingOrder; +QRect PluginDialog::geometrySave = QRect(); +QByteArray PluginDialog::listSave = QByteArray(); } namespace MusECore { @@ -3145,11 +3149,18 @@ PluginDialog::PluginDialog(QWidget* parent) : QDialog(parent) { setWindowTitle(tr("MusE: select plugin")); + + if(!geometrySave.isNull()) + setGeometry(geometrySave); + QVBoxLayout* layout = new QVBoxLayout(this); pList = new QTreeWidget(this); pList->setColumnCount(11); - pList->setSortingEnabled(true); + // "Note: In order to avoid performance issues, it is recommended that sorting + // is enabled after inserting the items into the tree. Alternatively, you could + // also insert the items into a list before inserting the items into the tree. " + //pList->setSortingEnabled(true); QStringList headerLabels; headerLabels << tr("Lib"); headerLabels << tr("Label"); @@ -3163,25 +3174,17 @@ PluginDialog::PluginDialog(QWidget* parent) headerLabels << tr("Maker"); headerLabels << tr("Copyright"); - int sizes[] = { 110, 110, 0, 30, 30, 30, 30, 30, 40, 110, 110 }; - for (int i = 0; i < 11; ++i) { - if (sizes[i] == 0) { - pList->header()->setResizeMode(i, QHeaderView::Stretch); - } - else { - if (sizes[i] <= 40) // hack alert! - pList->header()->setResizeMode(i, QHeaderView::Custom); - pList->header()->resizeSection(i, sizes[i]); - } - } - pList->setHeaderLabels(headerLabels); pList->setSelectionBehavior(QAbstractItemView::SelectRows); pList->setSelectionMode(QAbstractItemView::SingleSelection); pList->setAlternatingRowColors(true); - - fillPlugs(selectedPlugType); + pList->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + //fillPlugs(selectedPlugType); + //pList->setSortingEnabled(true); + //pList->sortByColumn(sortColumn, sortOrder); + layout->addWidget(pList); //--------------------------------------------------- @@ -3191,42 +3194,56 @@ PluginDialog::PluginDialog(QWidget* parent) QBoxLayout* w5 = new QHBoxLayout; layout->addLayout(w5); + QBoxLayout* ok_lo = new QVBoxLayout; + w5->addLayout(ok_lo); + okB = new QPushButton(tr("Ok"), this); okB->setDefault(true); QPushButton* cancelB = new QPushButton(tr("Cancel"), this); okB->setFixedWidth(80); okB->setEnabled(false); cancelB->setFixedWidth(80); - w5->addWidget(okB); - w5->addSpacing(12); - w5->addWidget(cancelB); - - QGroupBox* plugSelGroup = new QGroupBox; + //ok_lo->addStretch(4); + //ok_lo->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Maximum)); + ok_lo->addWidget(okB); + ok_lo->addSpacing(8); + ok_lo->addWidget(cancelB); + //ok_lo->addStretch(4); + //ok_lo->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Maximum)); + + QGroupBox* plugSelGroup = new QGroupBox(this); plugSelGroup->setTitle("Show plugs:"); - QHBoxLayout* psl = new QHBoxLayout; + plugSelGroup->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); + //QHBoxLayout* psl = new QHBoxLayout; + QGridLayout* psl = new QGridLayout; + //psl->setRowStretch(0, 0); plugSelGroup->setLayout(psl); QButtonGroup* plugSel = new QButtonGroup(plugSelGroup); - onlySM = new QRadioButton; + onlySM = new QRadioButton(this); onlySM->setText(tr("Mono and Stereo")); onlySM->setCheckable(true); plugSel->addButton(onlySM); - psl->addWidget(onlySM); - onlyS = new QRadioButton; + //psl->addWidget(onlySM); + psl->addWidget(onlySM, 1, 0); + onlyS = new QRadioButton(this); onlyS->setText(tr("Stereo")); onlyS->setCheckable(true); plugSel->addButton(onlyS); - psl->addWidget(onlyS); - onlyM = new QRadioButton; + //psl->addWidget(onlyS); + psl->addWidget(onlyS, 0, 1); + onlyM = new QRadioButton(this); onlyM->setText(tr("Mono")); onlyM->setCheckable(true); plugSel->addButton(onlyM); - psl->addWidget(onlyM); - allPlug = new QRadioButton; + //psl->addWidget(onlyM); + psl->addWidget(onlyM, 0, 0); + allPlug = new QRadioButton(this); allPlug->setText(tr("Show All")); allPlug->setCheckable(true); plugSel->addButton(allPlug); - psl->addWidget(allPlug); + //psl->addWidget(allPlug); + psl->addWidget(allPlug, 1, 1); plugSel->setExclusive(true); switch(selectedPlugType) { @@ -3240,14 +3257,18 @@ PluginDialog::PluginDialog(QWidget* parent) "Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.
" "Also beware that the 'all' alternative includes plugins that probably not are usable by MusE.")); - w5->addSpacing(12); + w5->addSpacing(8); w5->addWidget(plugSelGroup); - w5->addSpacing(12); + w5->addSpacing(8); - QLabel *sortLabel = new QLabel; + QBoxLayout* srch_lo = new QVBoxLayout; + w5->addLayout(srch_lo); + + QLabel *sortLabel = new QLabel(this); sortLabel->setText(tr("Search in 'Label' and 'Name':")); - w5->addWidget(sortLabel); - w5->addSpacing(2); + srch_lo->addSpacing(8); + srch_lo->addWidget(sortLabel); + srch_lo->addSpacing(8); sortBox = new QComboBox(this); sortBox->setEditable(true); @@ -3255,20 +3276,41 @@ PluginDialog::PluginDialog(QWidget* parent) sortBox->addItems(sortItems); sortBox->setMinimumSize(100, 10); - w5->addWidget(sortBox); - w5->addStretch(-1); + srch_lo->addWidget(sortBox); + //srch_lo->addStretch(); + // FIXME: Adding this makes the whole bottom hlayout expand. Would like some space between lineedit and bottom. + // Same thing if spacers added to group box or Ok Cancel box. + //srch_lo->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Maximum)); - if (!sortBox->currentText().isEmpty()) - fillPlugs(sortBox->currentText()); + fillPlugs(); + + pList->setSortingEnabled(true); + + if(listSave.isEmpty()) + { + //int sizes[] = { 110, 110, 0, 30, 30, 30, 30, 30, 50, 110, 110 }; + int sizes[] = { 110, 110, 110, 30, 30, 30, 30, 30, 50, 110, 110 }; + for (int i = 0; i < 11; ++i) { + //if (sizes[i] == 0) { + // pList->header()->setResizeMode(i, QHeaderView::Stretch); + // } + //else { + if (sizes[i] <= 50) // hack alert! + pList->header()->setResizeMode(i, QHeaderView::Fixed); + pList->header()->resizeSection(i, sizes[i]); + // } + } + pList->sortByColumn(0, Qt::AscendingOrder); + } else - fillPlugs(selectedPlugType); + pList->header()->restoreState(listSave); connect(pList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), SLOT(accept())); connect(pList, SIGNAL(itemClicked(QTreeWidgetItem*,int)), SLOT(enableOkB())); connect(cancelB, SIGNAL(clicked()), SLOT(reject())); connect(okB, SIGNAL(clicked()), SLOT(accept())); connect(plugSel, SIGNAL(buttonClicked(QAbstractButton*)), SLOT(fillPlugs(QAbstractButton*))); - connect(sortBox, SIGNAL(editTextChanged(const QString&)),SLOT(fillPlugs(const QString&))); + connect(sortBox, SIGNAL(editTextChanged(const QString&)),SLOT(fillPlugs())); sortBox->setFocus(); } @@ -3294,23 +3336,53 @@ MusECore::Plugin* PluginDialog::value() return 0; } +//--------------------------------------------------------- +// saveSettings +//--------------------------------------------------------- + +void PluginDialog::saveSettings() +{ + if (!sortBox->currentText().isEmpty()) { + bool found = false; + foreach (QString item, sortItems) + if(item == sortBox->currentText()) { + found = true; + break; + } + if(!found) + sortItems.push_front(sortBox->currentText()); + } + + ///sortColumn = pList->sortColumn(); + QHeaderView* hdr = pList->header(); + if(hdr) + { + ///sortOrder = hdr->sortIndicatorOrder(); + listSave = hdr->saveState(); + } + geometrySave = geometry(); +} + //--------------------------------------------------------- // accept //--------------------------------------------------------- void PluginDialog::accept() { - if (!sortBox->currentText().isEmpty()) { - foreach (QString item, sortItems) - if(item == sortBox->currentText()) { - QDialog::accept(); - return; - } - sortItems.push_front(sortBox->currentText()); - } + saveSettings(); QDialog::accept(); } +//--------------------------------------------------------- +// reject +//--------------------------------------------------------- + +void PluginDialog::reject() +{ + saveSettings(); + QDialog::reject(); +} + //--------------------------------------------------------- // fillPlugs //--------------------------------------------------------- @@ -3318,16 +3390,21 @@ void PluginDialog::accept() void PluginDialog::fillPlugs(QAbstractButton* ab) { if (ab == allPlug) - fillPlugs(SEL_ALL); + //fillPlugs(SEL_ALL); + selectedPlugType = SEL_ALL; else if (ab == onlyM) - fillPlugs(SEL_M); + //fillPlugs(SEL_M); + selectedPlugType = SEL_M; else if (ab == onlyS) - fillPlugs(SEL_S); + //fillPlugs(SEL_S); + selectedPlugType = SEL_S; else if (ab == onlySM) - fillPlugs(SEL_SM); + //fillPlugs(SEL_SM); + selectedPlugType = SEL_SM; + fillPlugs(); } -void PluginDialog::fillPlugs(int nbr) +void PluginDialog::fillPlugs() { pList->clear(); for (MusECore::iPlugin i = MusEGlobal::plugins.begin(); i != MusEGlobal::plugins.end(); ++i) { @@ -3339,8 +3416,13 @@ void PluginDialog::fillPlugs(int nbr) unsigned long ao = i->outports(); unsigned long ci = i->controlInPorts(); unsigned long co = i->controlOutPorts(); + bool found = false; + QString sb_txt = sortBox->currentText().toLower(); + if(sb_txt.isEmpty() || i->label().toLower().contains(sb_txt) || i->name().toLower().contains(sb_txt)) + found = true; + bool addFlag = false; - switch (nbr) { + switch (selectedPlugType) { case SEL_SM: // stereo & mono if ((ai == 1 || ai == 2) && (ao == 1 || ao ==2)) { addFlag = true; @@ -3360,45 +3442,7 @@ void PluginDialog::fillPlugs(int nbr) addFlag = true; break; } - if (addFlag) { - QTreeWidgetItem* item = new QTreeWidgetItem; - item->setText(0, i->lib()); - item->setText(1, i->label()); - item->setText(2, i->name()); - item->setText(3, QString().setNum(ai)); - item->setText(4, QString().setNum(ao)); - item->setText(5, QString().setNum(ci)); - item->setText(6, QString().setNum(co)); - item->setText(7, QString().setNum(i->inPlaceCapable())); - item->setText(8, QString().setNum(i->id())); - item->setText(9, i->maker()); - item->setText(10, i->copyright()); - pList->addTopLevelItem(item); - } - } - selectedPlugType = nbr; -} - -void PluginDialog::fillPlugs(const QString &sortValue) -{ - pList->clear(); - for (MusECore::iPlugin i = MusEGlobal::plugins.begin(); i != MusEGlobal::plugins.end(); ++i) { - //int ai = i->inports(); - //int ao = i->outports(); - //int ci = i->controlInPorts(); - //int co = i->controlOutPorts(); - unsigned long ai = i->inports(); // p4.0.21 - unsigned long ao = i->outports(); - unsigned long ci = i->controlInPorts(); - unsigned long co = i->controlOutPorts(); - - bool addFlag = false; - - if (i->label().toLower().contains(sortValue.toLower())) - addFlag = true; - else if (i->name().toLower().contains(sortValue.toLower())) - addFlag = true; - if (addFlag) { + if (found && addFlag) { QTreeWidgetItem* item = new QTreeWidgetItem; item->setText(0, i->lib()); item->setText(1, i->label()); @@ -3415,7 +3459,7 @@ void PluginDialog::fillPlugs(const QString &sortValue) } } } - + //--------------------------------------------------------- // getPlugin //--------------------------------------------------------- @@ -3423,9 +3467,12 @@ void PluginDialog::fillPlugs(const QString &sortValue) MusECore::Plugin* PluginDialog::getPlugin(QWidget* parent) { PluginDialog* dialog = new PluginDialog(parent); - if (dialog->exec()) - return dialog->value(); - return 0; + MusECore::Plugin* p = 0; + int rv = dialog->exec(); + if(rv) + p = dialog->value(); + delete dialog; + return p; } // TODO: We need to use .qrc files to use icons in WhatsThis bubbles. See Qt diff --git a/muse2/muse/plugin.h b/muse2/muse/plugin.h index 044fd863..717dc281 100644 --- a/muse2/muse/plugin.h +++ b/muse2/muse/plugin.h @@ -60,6 +60,8 @@ class QScrollArea; class QToolButton; class QToolButton; class QTreeWidget; +class QRect; +class QByteArray; namespace MusEGui { class PluginGui; @@ -578,25 +580,28 @@ class PluginGui : public QMainWindow { enum { SEL_SM, SEL_S, SEL_M, SEL_ALL }; class PluginDialog : public QDialog { + Q_OBJECT + QTreeWidget* pList; QRadioButton* allPlug; QRadioButton* onlyM; QRadioButton* onlyS; QRadioButton* onlySM; QPushButton *okB; - - Q_OBJECT + void saveSettings(); public: PluginDialog(QWidget* parent=0); static MusECore::Plugin* getPlugin(QWidget* parent); MusECore::Plugin* value(); - void accept(); public slots: + void accept(); + void reject(); void fillPlugs(QAbstractButton*); - void fillPlugs(int i); - void fillPlugs(const QString& sortValue); + //void fillPlugs(int i); + //void fillPlugs(const QString& sortValue); + void fillPlugs(); private slots: void enableOkB(); @@ -605,6 +610,10 @@ class PluginDialog : public QDialog { QComboBox *sortBox; static int selectedPlugType; static QStringList sortItems; + //static int sortColumn; + //static Qt::SortOrder sortOrder; + static QRect geometrySave; + static QByteArray listSave; }; } diff --git a/muse2/muse/widgets/CMakeLists.txt b/muse2/muse/widgets/CMakeLists.txt index e5353465..bf71f51e 100644 --- a/muse2/muse/widgets/CMakeLists.txt +++ b/muse2/muse/widgets/CMakeLists.txt @@ -40,6 +40,7 @@ QT4_WRAP_CPP (widget_mocs combobox.h comment.h ctrlcombo.h + custom_widget_actions.h dentry.h didyouknow.h doublelabel.h @@ -66,6 +67,7 @@ QT4_WRAP_CPP (widget_mocs pasteeventsdialog.h pitchedit.h pitchlabel.h + pixmap_button.h popupmenu.h # posedit.h poslabel.h @@ -142,6 +144,7 @@ file (GLOB widgets_source_files combobox.cpp comment.cpp ctrlcombo.cpp + custom_widget_actions.cpp dentry.cpp dimap.cpp doublelabel.cpp @@ -170,6 +173,7 @@ file (GLOB widgets_source_files pasteeventsdialog.cpp pitchedit.cpp pitchlabel.cpp + pixmap_button.cpp popupmenu.cpp # posedit.cpp poslabel.cpp diff --git a/muse2/muse/widgets/custom_widget_actions.cpp b/muse2/muse/widgets/custom_widget_actions.cpp new file mode 100644 index 00000000..952f5083 --- /dev/null +++ b/muse2/muse/widgets/custom_widget_actions.cpp @@ -0,0 +1,196 @@ +//============================================================================= +// MusE +// Linux Music Editor +// custom_widget_actions.cpp +// (C) Copyright 2011 Tim E. Real (terminator356 on users.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 +#include +#include +#include +#include + +#include "icons.h" +#include "pixmap_button.h" +#include "custom_widget_actions.h" + +namespace MusEGui { + +//--------------------------------------------------------- +// PixmapButtonsHeaderWidgetAction +//--------------------------------------------------------- + +PixmapButtonsHeaderWidgetAction::PixmapButtonsHeaderWidgetAction(const QString& text, QPixmap* ref_pixmap, int channels, QWidget* parent) + : QWidgetAction(parent) +{ + _refPixmap = ref_pixmap; + _channels = channels; + _text = text; + // Just to be safe, set to -1 instead of default 0. + setData(-1); +} + +QWidget* PixmapButtonsHeaderWidgetAction::createWidget(QWidget* parent) +{ + QWidget* lw = new QWidget(parent); + QHBoxLayout* layout = new QHBoxLayout(lw); + + layout->setSpacing(0); + + QLabel* lbl = new QLabel(_text, lw); + lbl->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); + lbl->setAlignment(Qt::AlignCenter); + lbl->setAutoFillBackground(true); + //QPalette palette; + //palette.setColor(label->backgroundRole(), c); + //lbl->setPalette(palette); + lbl->setBackgroundRole(QPalette::Dark); + layout->addWidget(lbl); + + layout->addSpacing(8); + //layout->addStretch(); + + QSignalMapper* mapper = new QSignalMapper(this); + + PixmapButton* pb = new PixmapButton(toggle_small_Icon, toggle_small_Icon, 2, lw, QString("T")); // Margin = 2 + //mapper->setMapping(pb, _channels); // Set to one past end. + layout->addWidget(pb); + layout->addSpacing(6); + //connect(pb, SIGNAL(clicked(bool)), mapper, SLOT(map())); + + for(int i = 0; i < _channels; ++i) + { + PixmapButton* b = new PixmapButton(_refPixmap, _refPixmap, 2, lw, QString::number(i + 1)); // Margin = 2 + mapper->setMapping(b, i); + connect(b, SIGNAL(pressed()), mapper, SLOT(map())); + if((i != 0) && (i % 4 == 0)) + layout->addSpacing(6); + layout->addWidget(b); + } + + connect(mapper, SIGNAL(mapped(int)), this, SLOT(chanClickMap(int))); + + return lw; +} + +void PixmapButtonsHeaderWidgetAction::chanClickMap(int /*idx*/) +{ + // TODO: Toggle vertical columns... p4.0.42 + + trigger(); +} + + +//--------------------------------------------------------- +// PixmapButtonsWidgetAction +//--------------------------------------------------------- + +PixmapButtonsWidgetAction::PixmapButtonsWidgetAction(const QString& text, QPixmap* on_pixmap, QPixmap* off_pixmap, int channels, int initial, QWidget* parent) + : QWidgetAction(parent) + { + _onPixmap = on_pixmap; + _offPixmap = off_pixmap; + _channels = channels; + _current = initial; + _text = text; + // Just to be safe, set to -1 instead of default 0. + setData(-1); + } + +QWidget* PixmapButtonsWidgetAction::createWidget(QWidget *parent) +{ + QWidget* lw = new QWidget(parent); + QHBoxLayout* layout = new QHBoxLayout(lw); + + layout->setSpacing(0); + + QLabel* lbl = new QLabel(_text, lw); + lbl->setAlignment(Qt::AlignCenter); + //lbl->setAutoFillBackground(true); + //QPalette palette; + //palette.setColor(label->backgroundRole(), c); + //lbl->setPalette(palette); + //lbl->setBackgroundRole(QPalette::Dark); + layout->addWidget(lbl); + + layout->addSpacing(8); + layout->addStretch(); + + QSignalMapper* mapper = new QSignalMapper(this); + + PixmapButton* pb = new PixmapButton(toggle_small_Icon, toggle_small_Icon, 2, lw); // Margin = 2 + mapper->setMapping(pb, _channels); // Set to one past end. + layout->addWidget(pb); + layout->addSpacing(6); + connect(pb, SIGNAL(pressed()), mapper, SLOT(map())); + + for(int i = 0; i < _channels; ++i) + { + bool set = _current & (1 << i); + PixmapButton* b = new PixmapButton(_onPixmap, _offPixmap, 2, lw); // Margin = 2 + _chan_buttons.append(b); + b->setCheckable(true); + b->setDown(set); + mapper->setMapping(b, i); + connect(b, SIGNAL(toggled(bool)), mapper, SLOT(map())); + if((i != 0) && (i % 4 == 0)) + layout->addSpacing(6); + layout->addWidget(b); + } + + connect(mapper, SIGNAL(mapped(int)), this, SLOT(chanClickMap(int))); + + return lw; +} + +void PixmapButtonsWidgetAction::chanClickMap(int idx) +{ + if(idx == _channels) // One past end = Toggle all button. + { + int allch = (1 << _channels) - 1; + if((_current & allch) == allch) + _current = 0; + else + _current = allch; + // Set and redraw the buttons. + for(int i = 0; i < _channels; ++i) + _chan_buttons.at(i)->setDown(_current != 0); + } + else + { + int c = 0; + for(int i = 0; i < _channels; ++i) + { + if(_chan_buttons.at(i)->isChecked()) + c |= (1 << i); + } + _current = c; + } + + trigger(); +} + +void PixmapButtonsWidgetAction::setCurrentState(int state) +{ + _current = state; + // Set and redraw the buttons. + for(int i = 0; i < _channels; ++i) + _chan_buttons.at(i)->setDown((_current & (1 << i)) != 0); +} + +} // namespace MusEGui diff --git a/muse2/muse/widgets/custom_widget_actions.h b/muse2/muse/widgets/custom_widget_actions.h new file mode 100644 index 00000000..c70da12d --- /dev/null +++ b/muse2/muse/widgets/custom_widget_actions.h @@ -0,0 +1,86 @@ +//========================================================= +// MusE +// Linux Music Editor +// custom_widget_actions.h +// (C) Copyright 2011 Tim E. Real (terminator356 on users.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. +// +//========================================================= + +#ifndef __CUSTOM_WIDGET_ACTIONS_H__ +#define __CUSTOM_WIDGET_ACTIONS_H__ + +#include +#include + +class QMouseEvent; +class QPaintEvent; +class QPixmap; + +namespace MusEGui { + +class PixmapButton; + +//--------------------------------------------------------- +// PixmapButtonsHeaderWidgetAction +//--------------------------------------------------------- + +class PixmapButtonsHeaderWidgetAction : public QWidgetAction { + Q_OBJECT + private: + + QPixmap* _refPixmap; + QString _text; + int _channels; + + private slots: + void chanClickMap(int); + + public: + PixmapButtonsHeaderWidgetAction (const QString& text, QPixmap* ref_pixmap, int channels, QWidget* parent = 0); + QWidget* createWidget(QWidget* parent); + }; +//--------------------------------------------------------- +// PixmapButtonsWidgetAction +//--------------------------------------------------------- + +class PixmapButtonsWidgetAction : public QWidgetAction { + Q_OBJECT + private: + + QString _text; + int _channels; + int _current; + QPixmap* _onPixmap; + QPixmap* _offPixmap; + QList _chan_buttons; + + private slots: + void chanClickMap(int); + + public: + PixmapButtonsWidgetAction(const QString& text, + QPixmap* on_pixmap, QPixmap* off_pixmap, + int channels, int initial, + QWidget* parent = 0); + + QWidget* createWidget(QWidget* parent); + int currentState() const { return _current; } + void setCurrentState(int state); + }; + +} // namespace MusEGui +#endif // __CUSTOM_WIDGET_ACTIONS_H__ diff --git a/muse2/muse/widgets/doublelabel.cpp b/muse2/muse/widgets/doublelabel.cpp index dbf7e035..a4b4c9c7 100644 --- a/muse2/muse/widgets/doublelabel.cpp +++ b/muse2/muse/widgets/doublelabel.cpp @@ -180,7 +180,7 @@ void DoubleLabel::setPrecision(int v) QSize DoubleLabel::sizeHint() const { QFontMetrics fm = fontMetrics(); - int h = fm.height() + 4; + int h = fm.height() + 5; int n = _precision; ++n; // For some reason I have to add one digit. Shouldn't have to. diff --git a/muse2/muse/widgets/mtrackinfo.cpp b/muse2/muse/widgets/mtrackinfo.cpp index 19e9729a..a01fbd5f 100644 --- a/muse2/muse/widgets/mtrackinfo.cpp +++ b/muse2/muse/widgets/mtrackinfo.cpp @@ -99,13 +99,23 @@ MidiTrackInfo::MidiTrackInfo(QWidget* parent, MusECore::Track* sel_track) : QWid pan = -65; volume = -1; - setFont(MusEGlobal::config.fonts[2]); + setFont(MusEGlobal::config.fonts[1]); //iChanDetectLabel->setPixmap(*darkgreendotIcon); iChanDetectLabel->setPixmap(*darkRedLedIcon); recEchoButton->setIcon((selected && ((MusECore::MidiTrack*)selected)->recEcho()) ? QIcon(*midiThruOnIcon) : QIcon(*midiThruOffIcon)); recEchoButton->setIconSize(midiThruOnIcon->size()); + //recEchoButton->setOffPixmap(midiThruOffIcon); + //recEchoButton->setOnPixmap(midiThruOnIcon); + + iRButton->setIcon(QIcon(*routesMidiInIcon)); + iRButton->setIconSize(routesMidiInIcon->size()); + //iRButton->setOffPixmap(routesMidiInIcon); + + oRButton->setIcon(QIcon(*routesMidiOutIcon)); + oRButton->setIconSize(routesMidiOutIcon->size()); + //oRButton->setOffPixmap(routesMidiOutIcon); // MusE-2: AlignCenter and WordBreak are set in the ui(3) file, but not supported by QLabel. Turn them on here. trackNameLabel->setAlignment(Qt::AlignCenter); @@ -159,7 +169,7 @@ MidiTrackInfo::MidiTrackInfo(QWidget* parent, MusECore::Track* sel_track) : QWid connect(iPatch, SIGNAL(released()), SLOT(instrPopup())); - ///pop = new QMenu(iPatch); + //pop = new QMenu(iPatch); //pop->setCheckable(false); // not needed in Qt4 // Removed by Tim. p3.3.9 @@ -528,7 +538,7 @@ void MidiTrackInfo::configChanged() // canvas->setBg(QPixmap(MusEGlobal::config.canvasBgPixmap)); //} - setFont(MusEGlobal::config.fonts[2]); + setFont(MusEGlobal::config.fonts[1]); //updateTrackInfo(type); } @@ -666,9 +676,11 @@ void MidiTrackInfo::inRoutesPressed() if(!selected->isMidiTrack()) return; - RoutePopupMenu* pup = MusEGlobal::muse->getRoutingPopupMenu(); - iRButton->setDown(false); + //RoutePopupMenu* pup = MusEGlobal::muse->getRoutingPopupMenu(); + RoutePopupMenu* pup = new RoutePopupMenu(); pup->exec(QCursor::pos(), selected, false); + delete pup; + iRButton->setDown(false); } //--------------------------------------------------------- @@ -682,9 +694,11 @@ void MidiTrackInfo::outRoutesPressed() if(!selected->isMidiTrack()) return; - RoutePopupMenu* pup = MusEGlobal::muse->getRoutingPopupMenu(); - oRButton->setDown(false); + //RoutePopupMenu* pup = MusEGlobal::muse->getRoutingPopupMenu(); + RoutePopupMenu* pup = new RoutePopupMenu(); pup->exec(QCursor::pos(), selected, true); + delete pup; + oRButton->setDown(false); } //--------------------------------------------------------- diff --git a/muse2/muse/widgets/mtrackinfobase.ui b/muse2/muse/widgets/mtrackinfobase.ui index 4a4b9c37..0bf58d76 100644 --- a/muse2/muse/widgets/mtrackinfobase.ui +++ b/muse2/muse/widgets/mtrackinfobase.ui @@ -6,8 +6,8 @@ 0 0 - 98 - 447 + 93 + 417 @@ -59,7 +59,7 @@ 0 - + @@ -72,7 +72,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -140,7 +140,7 @@ - + 0 0 @@ -149,33 +149,16 @@ input routing - iR - - - - - - - - 0 - 0 - - - - output routing + - - oR + + + 16 + 16 + - - - - - - 0 - @@ -192,6 +175,9 @@ program change, and pitchbend (but not sysex or realtime) events on the selected channels, on the selected midi ports. + + 0 + W @@ -202,7 +188,7 @@ false - 2 + 1 -1 @@ -212,7 +198,7 @@ - + 0 0 @@ -223,11 +209,30 @@ Pass input events through ('thru') to output. + + + true + + + + + 0 + 0 + + + + output routing + + + + + + @@ -271,7 +276,7 @@ - + @@ -290,7 +295,7 @@ - + @@ -312,7 +317,7 @@ - + @@ -331,7 +336,7 @@ - + @@ -356,7 +361,7 @@ - + @@ -375,7 +380,7 @@ - + @@ -403,7 +408,7 @@ - + @@ -422,7 +427,7 @@ - + @@ -450,7 +455,7 @@ - + @@ -469,7 +474,7 @@ - + @@ -500,7 +505,7 @@ - + @@ -516,7 +521,7 @@ - + @@ -535,7 +540,7 @@ - + 0 @@ -574,7 +579,7 @@ - + @@ -602,7 +607,7 @@ - + @@ -627,7 +632,7 @@ - + @@ -655,7 +660,7 @@ - + @@ -680,7 +685,7 @@ - + @@ -708,7 +713,7 @@ - + 0 @@ -747,7 +752,7 @@ - + @@ -775,7 +780,7 @@ - + 0 @@ -814,7 +819,7 @@ - + @@ -845,7 +850,7 @@ - + 0 @@ -884,7 +889,7 @@ - + Qt::Vertical diff --git a/muse2/muse/widgets/mtscale.cpp b/muse2/muse/widgets/mtscale.cpp index 6211574d..3131adcc 100644 --- a/muse2/muse/widgets/mtscale.cpp +++ b/muse2/muse/widgets/mtscale.cpp @@ -235,7 +235,7 @@ void MTScale::pdraw(QPainter& p, const QRect& r) int y = 12; p.setPen(Qt::black); - p.setFont(MusEGlobal::config.fonts[4]); + p.setFont(MusEGlobal::config.fonts[5]); p.drawLine(r.x(), y+1, r.x() + r.width(), y+1); QRect tr(r); tr.setHeight(12); @@ -425,7 +425,7 @@ void MTScale::pdraw(QPainter& p, const QRect& r) else { num = beat + 1; y1 = y + 7; - p.setFont(MusEGlobal::config.fonts[1]); + p.setFont(MusEGlobal::config.fonts[4]); r.setY(y+3); } s.setNum(num); diff --git a/muse2/muse/widgets/mtscale_flo.cpp b/muse2/muse/widgets/mtscale_flo.cpp index c54ef1ad..5cf070f6 100644 --- a/muse2/muse/widgets/mtscale_flo.cpp +++ b/muse2/muse/widgets/mtscale_flo.cpp @@ -194,7 +194,7 @@ void MTScaleFlo::draw(QPainter& p, const QRect& r) int y = 12; p.setPen(Qt::black); - p.setFont(MusEGlobal::config.fonts[4]); + p.setFont(MusEGlobal::config.fonts[5]); p.drawLine(r.x(), y+1, r.x() + r.width(), y+1); QRect tr(r); tr.setHeight(12); @@ -319,7 +319,7 @@ void MTScaleFlo::draw(QPainter& p, const QRect& r) else { num = beat + 1; y1 = y + 7; - p.setFont(MusEGlobal::config.fonts[1]); + p.setFont(MusEGlobal::config.fonts[4]); r.setY(y+3); } s.setNum(num); diff --git a/muse2/muse/widgets/musewidgetsplug.cpp b/muse2/muse/widgets/musewidgetsplug.cpp index f707fb7c..8fc29d45 100644 --- a/muse2/muse/widgets/musewidgetsplug.cpp +++ b/muse2/muse/widgets/musewidgetsplug.cpp @@ -117,11 +117,11 @@ MusEGlobal::GlobalConfigValues config = { QColor(200, 200, 200), // waveEditBackgroundColor; { QFont(QString("arial"), 10, QFont::Normal), - QFont(QString("arial"), 8, QFont::Normal), + QFont(QString("arial"), 7, QFont::Normal), // Mixer strips and midi track info panel QFont(QString("arial"), 10, QFont::Normal), QFont(QString("arial"), 10, QFont::Bold), - QFont(QString("arial"), 8, QFont::Bold), // timescale numbers - QFont(QString("Lucidatypewriter"), 14, QFont::Bold), + QFont(QString("arial"), 8, QFont::Normal), // Small numbers: Timescale and markers, part name overlay + QFont(QString("arial"), 8, QFont::Bold), // Small bold numbers such as marker text QFont(QString("arial"), 8, QFont::Bold, true) // Mixer strip labels. Looks and fits better with bold + italic than bold alone, // at the price of only few more pixels than Normal mode. }, @@ -172,8 +172,6 @@ MusEGlobal::GlobalConfigValues config = { QRect(0, 0, 400, 300), // GeometryMain; QRect(0, 0, 200, 100), // GeometryTransport; QRect(0, 0, 600, 200), // GeometryBigTime; - QRect(0, 0, 400, 300), // GeometryPianoroll; - QRect(0, 0, 400, 300), // GeometryDrumedit; //QRect(0, 0, 300, 500), // GeometryMixer; // Obsolete { QString("Mixer A"), @@ -191,14 +189,15 @@ MusEGlobal::GlobalConfigValues config = { false, // BigTimeVisible; false, // mixer1Visible; false, // mixer2Visible; - false, // markerVisible; // This line was missing 2007-01-08 (willyfoobar) + true, // arrangerVisible; true, // showSplashScreen 1, // canvasShowPartType 1 - names, 2 events 5, // canvasShowPartEvent false, // canvasShowGrid; QString(""), // canvasBgPixmap; - QString(""), // styleSheetFile + QStringList(), // canvasCustomBgList + QString(""), // default styleSheetFile - For built-in set to ":/style.qss" QString(""), // style QString(""), // externalWavEditor //this line was missing 2007-01-08 (willyfoobar) false, // useOldStyleStopShortCut @@ -215,7 +214,10 @@ MusEGlobal::GlobalConfigValues config = { 64, // minControlProcessPeriod false, // popupsDefaultStayOpen false, // leftMouseButtonCanDecrease - false // rangeMarkerWithoutMMBCheckBox + false, // rangeMarkerWithoutMMBCheckBox + true, // addHiddenTracks + true // unhideTracks + }; //--------------------------------------------------------- diff --git a/muse2/muse/widgets/pixmap_button.cpp b/muse2/muse/widgets/pixmap_button.cpp new file mode 100644 index 00000000..6b706474 --- /dev/null +++ b/muse2/muse/widgets/pixmap_button.cpp @@ -0,0 +1,174 @@ +//============================================================================= +// MusE +// Linux Music Editor +// pixmap_button.cpp +// (C) Copyright 2011 Tim E. Real (terminator356 on users.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 +#include +#include +#include +#include +#include +#include +#include + +#include "pixmap_button.h" + +namespace MusEGui { + +PixmapButton::PixmapButton(QWidget* parent) + : QWidget(parent) +{ + _onPixmap = 0; + _offPixmap = 0; + _margin = 0; + _checked = false; + _checkable = false; + + QFont fnt = font(); + fnt.setPointSize(8); + setFont(fnt); +} + +PixmapButton::PixmapButton(QPixmap* on_pixmap, QPixmap* off_pixmap, int margin, QWidget* parent, const QString& text) + : QWidget(parent) +{ + _text = text; + _onPixmap = on_pixmap; + _offPixmap = off_pixmap; + _margin = margin; + _checked = false; + _checkable = false; + if(_offPixmap) + setMinimumSize(_offPixmap->size().width() + 2*_margin, _offPixmap->size().height() + 2*_margin); + else + setMinimumSize(10 + 2*_margin, 10 + 2*_margin); + //font().s + + QFont fnt = font(); + fnt.setPointSize(8); + setFont(fnt); +} + +QSize PixmapButton::minimumSizeHint () const +{ + return QSize(10, 10); +} + +void PixmapButton::setMargin(int v) +{ + _margin = v; + if(_offPixmap) + setMinimumSize(_offPixmap->size().width() + 2*_margin, _offPixmap->size().height() + 2*_margin); + update(); +} + +void PixmapButton::setOffPixmap(QPixmap* pm) +{ + _offPixmap = pm; + if(_offPixmap) + setMinimumSize(_offPixmap->size().width() + 2*_margin, _offPixmap->size().height() + 2*_margin); + else + setMinimumSize(10 + 2*_margin, 10 + 2*_margin); + update(); +} + +void PixmapButton::setOnPixmap(QPixmap* pm) +{ + _onPixmap = pm; + update(); +} + +void PixmapButton::setCheckable(bool v) +{ + _checkable = v; + if(!_checkable) + _checked = false; + update(); +} + +void PixmapButton::setChecked(bool v) +{ + if(!_checkable) + return; + if(_checked == v) + return; + _checked = v; + update(); + emit toggled(_checked); +} + +void PixmapButton::setDown(bool v) +{ + if(!_checkable) + return; + if(_checked == v) + return; + _checked = v; + update(); +} + +void PixmapButton::paintEvent(QPaintEvent* e) +{ + QWidget::paintEvent(e); + QPainter p(this); + int w2 = width() / 2; + int h2 = height() / 2; + int mw = _offPixmap->size().width(); + int mh = _offPixmap->size().height(); + int mw2 = mw / 2; + int mh2 = mh / 2; + if(!_text.isEmpty()) + //p.drawText(w2 - mw2, h2 - mh2, mw, mh, *pm); + p.drawText(_margin, height() - _margin, _text); + else + { + QPixmap* pm = _checked ? _onPixmap : _offPixmap; + if(pm) + p.drawPixmap(w2 - mw2, h2 - mh2, mw, mh, *pm); + } +} + +void PixmapButton::mousePressEvent(QMouseEvent* e) +{ + //if(e->button() != Qt::LeftButton) + // return; + if(_checkable) + _checked = !_checked; + update(); + + emit pressed(); + if(_checkable) + emit toggled(_checked); + + //e->setAccepted(true); // This makes menu not close when mouse is released. May be desireable with many small buttons... + QWidget::mousePressEvent(e); +} + +void PixmapButton::mouseReleaseEvent(QMouseEvent* e) +{ + //if(e->button() != Qt::LeftButton) + // return; + emit clicked(_checked); + + //e->setAccepted(true); // This makes menu not close when mouse is released. May be desireable with many small buttons... + QWidget::mouseReleaseEvent(e); +} + +} // MusEGui \ No newline at end of file diff --git a/muse2/muse/widgets/pixmap_button.h b/muse2/muse/widgets/pixmap_button.h new file mode 100644 index 00000000..448b17cb --- /dev/null +++ b/muse2/muse/widgets/pixmap_button.h @@ -0,0 +1,87 @@ +//========================================================= +// MusE +// Linux Music Editor +// pixmap_button.h +// (C) Copyright 2011 Tim E. Real (terminator356 on users.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. +// +//========================================================= + +#ifndef __PIXMAP_BUTTON_H__ +#define __PIXMAP_BUTTON_H__ + +#include + +class QMouseEvent; +class QPaintEvent; +class QPixmap; +class QString; + +namespace MusEGui { + +//--------------------------------------------------------- +// PixmapButton +//--------------------------------------------------------- + +class PixmapButton : public QWidget +{ + Q_OBJECT + + Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable) + Q_PROPERTY(bool checked READ isChecked WRITE setChecked) + //Q_PROPERTY(QPixmap* offPixmap READ offPixmap WRITE setOffPixmap) + //Q_PROPERTY(QPixmap* onPixmap READ onPixmap WRITE setOnPixmap) + Q_PROPERTY(int margin READ margin WRITE setMargin) + + private: + QString _text; + bool _checkable; + bool _checked; + int _margin; + QPixmap* _onPixmap; + QPixmap* _offPixmap; + + protected: + virtual void paintEvent(QPaintEvent* ); + virtual void mousePressEvent(QMouseEvent* ); + virtual void mouseReleaseEvent(QMouseEvent* ); + + signals: + void clicked(bool checked = false); + void toggled(bool checked = false); + void pressed(); + + public: + PixmapButton(QWidget* parent = 0); + PixmapButton(QPixmap* on_pixmap, QPixmap* off_pixmap, int margin, QWidget* parent = 0, const QString& text = QString()); + virtual QSize minimumSizeHint () const; + virtual bool margin() const { return _margin; } + virtual void setMargin(int v); + virtual bool isChecked() const { return _checked; } + virtual void setChecked(bool); + virtual bool isDown() const { return _checked; } + virtual void setDown(bool); + virtual bool isCheckable() const { return _checkable; } + virtual void setCheckable(bool); + virtual QPixmap* offPixmap() const { return _offPixmap; } + virtual void setOffPixmap(QPixmap*); + virtual QPixmap* onPixmap() const { return _onPixmap; } + virtual void setOnPixmap(QPixmap*); +}; + + +} // MusEGui +#endif // __PIXMAP_BUTTON_H__ \ No newline at end of file diff --git a/muse2/muse/widgets/popupmenu.cpp b/muse2/muse/widgets/popupmenu.cpp index af870975..a34418a4 100644 --- a/muse2/muse/widgets/popupmenu.cpp +++ b/muse2/muse/widgets/popupmenu.cpp @@ -33,7 +33,7 @@ #include //#include -#include +//#include //#include #include "popupmenu.h" @@ -70,13 +70,10 @@ PopupMenu::PopupMenu(const QString& title, QWidget* parent, bool stayOpen) init(); } -PopupMenu::~PopupMenu() -{ - //printf("PopupMenu::~PopupMenu\n"); -} - void PopupMenu::init() { + //printf("PopupMenu::init this:%p\n", this); + // Menus will trigger! Set to make sure our trigger handlers ignore menus. menuAction()->setData(-1); @@ -92,8 +89,14 @@ void PopupMenu::init() #endif // POPUP_MENU_DISABLE_AUTO_SCROLL } +// NOTE: Tested all RoutePopupMenu and PopupMenu dtors and a couple of action dtors from our +// PixmapButtonsHeaderWidgetAction and PixmapButtonsWidgetAction: +// This does not appear to be required any more. All submenus and actions are being deleted now. p4.0.43 +/* void PopupMenu::clear() { + //printf("PopupMenu::clear this:%p\n", this); + QList list = actions(); for(int i = 0; i < list.size(); ++i) { @@ -103,6 +106,7 @@ void PopupMenu::clear() { menu->clear(); // Recursive. act->setMenu(0); // CHECK: Is this OK? + //printf(" deleting menu:%p\n", menu); delete menu; } } @@ -115,6 +119,7 @@ void PopupMenu::clear() connect(timer, SIGNAL(timeout()), SLOT(timerHandler())); #endif // POPUP_MENU_DISABLE_AUTO_SCROLL } +*/ void PopupMenu::clearAllChecks() const { diff --git a/muse2/muse/widgets/popupmenu.h b/muse2/muse/widgets/popupmenu.h index 7fc07698..1848d3af 100644 --- a/muse2/muse/widgets/popupmenu.h +++ b/muse2/muse/widgets/popupmenu.h @@ -75,8 +75,7 @@ class PopupMenu : public QMenu PopupMenu(bool stayOpen); PopupMenu(QWidget* parent=0, bool stayOpen = false); PopupMenu(const QString& title, QWidget* parent = 0, bool stayOpen = false); - ~PopupMenu(); - void clear(); + ///void clear(); QAction* findActionFromData(const QVariant&) const; bool stayOpen() const { return _stayOpen; } void clearAllChecks() const; diff --git a/muse2/muse/widgets/routepopup.cpp b/muse2/muse/widgets/routepopup.cpp index 0f1f8264..3e2ad008 100644 --- a/muse2/muse/widgets/routepopup.cpp +++ b/muse2/muse/widgets/routepopup.cpp @@ -34,6 +34,10 @@ #include "menutitleitem.h" #include "popupmenu.h" +#include "custom_widget_actions.h" +#include "globaldefs.h" +#define _USE_CUSTOM_WIDGET_ACTIONS_ + namespace MusEGui { //--------------------------------------------------------- @@ -617,7 +621,22 @@ int RoutePopupMenu::nonSyntiTrackAddSyntis(MusECore::AudioTrack* t, PopupMenu* l int RoutePopupMenu::addMidiPorts(MusECore::AudioTrack* t, PopupMenu* pup, int id, bool isOutput) { + +#ifndef _USE_CUSTOM_WIDGET_ACTIONS_ + QAction* act; + +#endif + +#ifdef _USE_CUSTOM_WIDGET_ACTIONS_ + + PixmapButtonsHeaderWidgetAction* wa_hdr = new PixmapButtonsHeaderWidgetAction("Output port/device", darkRedLedIcon, MIDI_CHANNELS, pup); + pup->addAction(wa_hdr); + ++id; +#else + pup->addAction(new MenuTitleItem("Output port/device", pup)); +#endif + for(int i = 0; i < MIDI_PORTS; ++i) { MusECore::MidiPort* mp = &MusEGlobal::midiPorts[i]; @@ -626,19 +645,16 @@ int RoutePopupMenu::addMidiPorts(MusECore::AudioTrack* t, PopupMenu* pup, int id // This is desirable, but could lead to 'hidden' routes unless we add more support // such as removing the existing routes when user changes flags. // So for now, just list all valid ports whether read or write. - if(!md) - continue; - //if(!(md->rwFlags() & (isOutput ? 1 : 2))) + //if(!md) // continue; + if(!md || !(md->rwFlags() & (isOutput ? 2 : 1))) // If this is an input click we are looking for midi outputs here. + continue; // Do not list synth devices! if(md->isSynti()) continue; - MusECore::RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes(); - - PopupMenu* subp = new PopupMenu(pup, true); - subp->setTitle(md->name()); + MusECore::RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes(); int chanmask = 0; // To reduce number of routes required, from one per channel to just one containing a channel mask. @@ -653,6 +669,21 @@ int RoutePopupMenu::addMidiPorts(MusECore::AudioTrack* t, PopupMenu* pup, int id } } +#ifdef _USE_CUSTOM_WIDGET_ACTIONS_ + + PixmapButtonsWidgetAction* wa = new PixmapButtonsWidgetAction(QString::number(i + 1) + ":" + md->name(), + redLedIcon, darkRedLedIcon,MIDI_CHANNELS, chanmask, pup); + MusECore::Route srcRoute(i, 0); // Ignore the routing channels - our action holds the channels. + //wa->setData(id++); + wa->setData(qVariantFromValue(srcRoute)); + pup->addAction(wa); + ++id; + +#else + + PopupMenu* subp = new PopupMenu(pup, true); + subp->setTitle(md->name()); + for(int ch = 0; ch < MIDI_CHANNELS; ++ch) { act = subp->addAction(QString("Channel %1").arg(ch+1)); @@ -677,6 +708,9 @@ int RoutePopupMenu::addMidiPorts(MusECore::AudioTrack* t, PopupMenu* pup, int id ++id; pup->addMenu(subp); + +#endif // _USE_CUSTOM_WIDGET_ACTIONS_ + } return id; } @@ -687,29 +721,22 @@ int RoutePopupMenu::addMidiPorts(MusECore::AudioTrack* t, PopupMenu* pup, int id //====================== RoutePopupMenu::RoutePopupMenu(QWidget* parent, MusECore::Track* track, bool isOutput) - : _track(track), _isOutMenu(isOutput) + //: _track(track), _isOutMenu(isOutput) + : PopupMenu(parent, true), _track(track), _isOutMenu(isOutput) { - _pup = new PopupMenu(parent, true); init(); } RoutePopupMenu::RoutePopupMenu(const QString& title, QWidget* parent, MusECore::Track* track, bool isOutput) - : _track(track), _isOutMenu(isOutput) + //: _track(track), _isOutMenu(isOutput) + : PopupMenu(title, parent, true), _track(track), _isOutMenu(isOutput) { - _pup = new PopupMenu(title, parent, true); init(); } -RoutePopupMenu::~RoutePopupMenu() -{ - //printf("RoutePopupMenu::~RoutePopupMenu\n"); - // Make sure to clear which clears and deletes any sub popups. - _pup->clear(); - delete _pup; -} - void RoutePopupMenu::init() { + //printf("RoutePopupMenu::init this:%p\n", this); connect(MusEGlobal::song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); } @@ -726,15 +753,19 @@ void RoutePopupMenu::updateRouteMenus() // In case for some reason a route could not be added (or removed). // Then the item will be properly un-checked (or checked) here. + // TODO Fix this up a bit. It doesn't quite respond to complete removal, and other situations are a bit odd. + // Best to ignore it for now since it only half-works. p4.0.42 + +/* //printf("RoutePopupMenu::updateRouteMenus\n"); - if(!_track || !_pup || _pup->actions().isEmpty() || !_pup->isVisible()) + if(!_track || actions().isEmpty() || !isVisible()) return; MusECore::RouteList* rl = _isOutMenu ? _track->outRoutes() : _track->inRoutes(); // Clear all the action check marks. - _pup->clearAllChecks(); + clearAllChecks(); // Take care of Midi Port to Audio Input routes first... if(_isOutMenu && _track->isMidiTrack()) @@ -754,10 +785,13 @@ void RoutePopupMenu::updateRouteMenus() if(ir->channel & chbits) { MusECore::Route r(ir->track, chbits); - //printf("RoutePopupMenu::updateRouteMenus MusECore::MidiPort to AudioInput chbits:%d\n", chbits); - QAction* act = _pup->findActionFromData(qVariantFromValue(r)); + //printf("RoutePopupMenu::updateRouteMenus MusECore::MidiPort to AudioInput chbits:%d\n", chbits); // + QAction* act = findActionFromData(qVariantFromValue(r)); if(act) + { + //printf(" ... Found\n"); // act->setChecked(true); + } } } } @@ -771,6 +805,25 @@ void RoutePopupMenu::updateRouteMenus() // Do MidiTrack to MidiPort routes... if(irl->type == MusECore::Route::MIDI_PORT_ROUTE) { + +#ifdef _USE_CUSTOM_WIDGET_ACTIONS_ + + // Widget action handles channels. Look for route with channels ignored and set to zero. + MusECore::Route r(irl->midiPort, 0); + QAction* act = findActionFromData(qVariantFromValue(r)); + if(act) + { + //printf("RoutePopupMenu::updateRouteMenus found MidiTrack to MidiPort irl type:%d\n", irl->type); // + // Check for custom widget actions first. + PixmapButtonsWidgetAction* mc_wa = dynamic_cast(act); + if(mc_wa) + { + //printf(" ... Found custom, setting current state\n"); // + mc_wa->setCurrentState(irl->channel); // Set all channels at once. + } + } + +#else //printf("RoutePopupMenu::updateRouteMenus MIDI_PORT_ROUTE\n"); for(int ch = 0; ch < MIDI_CHANNELS; ++ch) { @@ -778,33 +831,67 @@ void RoutePopupMenu::updateRouteMenus() if(irl->channel & chbits) { MusECore::Route r(irl->midiPort, chbits); - QAction* act = _pup->findActionFromData(qVariantFromValue(r)); + //printf("RoutePopupMenu::updateRouteMenus MidiTrack to MidiPort irl type:%d\n", irl->type); // + // If act is a PixmapButtonsWidgetAction, route channel is ignored and is zero. + QAction* act = findActionFromData(qVariantFromValue(r)); if(act) + { + //printf(" ... Found\n"); // act->setChecked(true); + } } } +#endif // _USE_CUSTOM_WIDGET_ACTIONS_ + } else // Do all other routes... { - //printf("RoutePopupMenu::updateRouteMenus other irl type:%d\n", irl->type); - QAction* act = _pup->findActionFromData(qVariantFromValue(*irl)); + +#ifdef _USE_CUSTOM_WIDGET_ACTIONS_ + + // Do MidiPort to MidiTrack routes... + if(irl->type == MusECore::Route::TRACK_ROUTE && irl->track && irl->track->type() == MusECore::Track::AUDIO_INPUT) + { + // Widget action handles channels. Look for route with channels ignored and set to zero. + MusECore::Route r(irl->track, 0); + QAction* act = findActionFromData(qVariantFromValue(r)); + if(act) + { + // Check for custom widget actions first. + PixmapButtonsWidgetAction* mc_wa = dynamic_cast(act); + if(mc_wa) + { + //printf("RoutePopupMenu::updateRouteMenus found custom irl type:%d\n", irl->type); // + mc_wa->setCurrentState(irl->channel); // Set all channels at once. + continue; + } + } + } + +#endif // _USE_CUSTOM_WIDGET_ACTIONS_ + + printf("RoutePopupMenu::updateRouteMenus other irl type:%d\n", irl->type); // REMOVE TIm. if(act) + { + //printf("RoutePopupMenu::updateRouteMenus found other irl type:%d\n", irl->type); // act->setChecked(true); + } } } +*/ } void RoutePopupMenu::popupActivated(QAction* action) { - if(!action || !_track || !_pup || _pup->actions().isEmpty()) + if(!action || !_track || actions().isEmpty()) return; if(_track->isMidiTrack()) { MusECore::RouteList* rl = _isOutMenu ? _track->outRoutes() : _track->inRoutes(); - // Take care of Route data items first... + // Take care of Route data items first... if(qVariantCanConvert(action->data())) { MusECore::Route aRoute = action->data().value(); @@ -836,13 +923,10 @@ void RoutePopupMenu::popupActivated(QAction* action) MusECore::RouteList* mprl = _isOutMenu ? mp->outRoutes() : mp->inRoutes(); MusECore::ciRoute ir = mprl->begin(); for (; ir != mprl->end(); ++ir) - { - if(ir->type == MusECore::Route::TRACK_ROUTE && ir->track == aRoute.track) // Is there already a route to this port? - { - chmask = ir->channel; // Grab the channel mask. - break; + if(ir->type == MusECore::Route::TRACK_ROUTE && ir->track == aRoute.track) { // Is there already a route to this port? + chmask = ir->channel; // Grab the channel mask. + break; } - } if ((chmask & chbit) == chbit) // Is the channel's bit(s) set? { // disconnect @@ -866,56 +950,113 @@ void RoutePopupMenu::popupActivated(QAction* action) } return; } + // Support Audio Input track to Midi Port routes. else if(aRoute.type == MusECore::Route::MIDI_PORT_ROUTE) { - int chbit = aRoute.channel; - MusECore::Route bRoute(_track, chbit); - int mdidx = aRoute.midiPort; - - MusECore::MidiPort* mp = &MusEGlobal::midiPorts[mdidx]; - MusECore::MidiDevice* md = mp->device(); - //if(!md) // Rem. Allow connections to ports with no device. - // return; - - //if(!(md->rwFlags() & 2)) - //if(!(md->rwFlags() & (gIsOutRoutingPopupMenu ? 1 : 2))) - if(md && !(md->rwFlags() & (_isOutMenu ? 1 : 2))) - return; - - int chmask = 0; - MusECore::ciRoute iir = rl->begin(); - for (; iir != rl->end(); ++iir) + // Check for custom midi channel select action. + PixmapButtonsWidgetAction* cs_wa = dynamic_cast(action); + if(cs_wa) { - if(iir->type == MusECore::Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) // Is there already a route to this port? + MusECore::Route aRoute = action->data().value(); + int chbits = cs_wa->currentState(); + aRoute.channel = chbits; // Restore the desired route channels from the custom widget action state. + + int mdidx = aRoute.midiPort; + MusECore::MidiPort* mp = &MusEGlobal::midiPorts[mdidx]; + + MusECore::MidiDevice* md = mp->device(); + //if(!md) // Rem. Allow connections to ports with no device. + // return; + + //if(!(md->rwFlags() & 2)) + //if(!(md->rwFlags() & (gIsOutRoutingPopupMenu ? 1 : 2))) + if(md && !(md->rwFlags() & (_isOutMenu ? 1 : 2))) + return; + + int chmask = 0; + MusECore::ciRoute iir = rl->begin(); + for (; iir != rl->end(); ++iir) + if(iir->type == MusECore::Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) { // Is there already a route to this port? + chmask = iir->channel; // Grab the channel mask. + break; + } + + // Only if something changed... + if(chmask != chbits) { - chmask = iir->channel; // Grab the channel mask. - break; - } - } - if ((chmask & chbit) == chbit) // Is the channel's bit(s) set? - { - // disconnect - if(_isOutMenu) - MusEGlobal::audio->msgRemoveRoute(bRoute, aRoute); - else - MusEGlobal::audio->msgRemoveRoute(aRoute, bRoute); + if(chmask != 0) + { + MusECore::Route bRoute(_track, chmask); + // Disconnect all existing channels. + if(_isOutMenu) + MusEGlobal::audio->msgRemoveRoute(bRoute, *iir); + else + MusEGlobal::audio->msgRemoveRoute(*iir, bRoute); + } + if(chbits != 0) + { + // Connect desired channels. + MusECore::Route bRoute(_track, chbits); + if(_isOutMenu) + MusEGlobal::audio->msgAddRoute(bRoute, aRoute); + else + MusEGlobal::audio->msgAddRoute(aRoute, bRoute); + } + MusEGlobal::audio->msgUpdateSoloStates(); + MusEGlobal::song->update(SC_ROUTE); + } + //return; } - else + else { - // connect - if(_isOutMenu) - MusEGlobal::audio->msgAddRoute(bRoute, aRoute); - else - MusEGlobal::audio->msgAddRoute(aRoute, bRoute); + int chbit = aRoute.channel; + MusECore::Route bRoute(_track, chbit); + int mdidx = aRoute.midiPort; + + MusECore::MidiPort* mp = &MusEGlobal::midiPorts[mdidx]; + MusECore::MidiDevice* md = mp->device(); + //if(!md) // Rem. Allow connections to ports with no device. + // return; + + //if(!(md->rwFlags() & 2)) + //if(!(md->rwFlags() & (gIsOutRoutingPopupMenu ? 1 : 2))) + if(md && !(md->rwFlags() & (_isOutMenu ? 1 : 2))) + return; + + int chmask = 0; + MusECore::ciRoute iir = rl->begin(); + for (; iir != rl->end(); ++iir) + { + if(iir->type == MusECore::Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) // Is there already a route to this port? + { + chmask = iir->channel; // Grab the channel mask. + break; + } + } + if ((chmask & chbit) == chbit) // Is the channel's bit(s) set? + { + // disconnect + if(_isOutMenu) + MusEGlobal::audio->msgRemoveRoute(bRoute, aRoute); + else + MusEGlobal::audio->msgRemoveRoute(aRoute, bRoute); + } + else + { + // connect + if(_isOutMenu) + MusEGlobal::audio->msgAddRoute(bRoute, aRoute); + else + MusEGlobal::audio->msgAddRoute(aRoute, bRoute); + } + + MusEGlobal::audio->msgUpdateSoloStates(); + MusEGlobal::song->update(SC_ROUTE); } - - MusEGlobal::audio->msgUpdateSoloStates(); - MusEGlobal::song->update(SC_ROUTE); } } - else // ... now take care of integer data items. - if(qVariantCanConvert(action->data())) + else if(qVariantCanConvert(action->data())) { int n = action->data().value(); if(!_isOutMenu && n == 0) @@ -961,34 +1102,73 @@ void RoutePopupMenu::popupActivated(QAction* action) // Support Midi Port to Audio Input routes. if(_track->type() == MusECore::Track::AUDIO_INPUT && srcRoute.type == MusECore::Route::MIDI_PORT_ROUTE) { - int chbit = srcRoute.channel; - MusECore::Route dstRoute(t, chbit); - int mdidx = srcRoute.midiPort; - int chmask = 0; - MusECore::ciRoute iir = rl->begin(); - for (; iir != rl->end(); ++iir) + // Check for custom midi channel select action. + PixmapButtonsWidgetAction* cs_wa = dynamic_cast(action); + if(cs_wa) { - if(iir->type == MusECore::Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) // Is there already a route to this port? + int chbits = cs_wa->currentState(); + srcRoute.channel = chbits; // Restore the desired route channels from the custom widget action state. + int mdidx = srcRoute.midiPort; + + int chmask = 0; + MusECore::ciRoute iir = rl->begin(); + for (; iir != rl->end(); ++iir) + if(iir->type == MusECore::Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) { // Is there already a route to this port? + chmask = iir->channel; // Grab the channel mask. + break; + } + + // Only if something changed... + if(chmask != chbits) { - chmask = iir->channel; // Grab the channel mask. - break; - } - } - - if ((chmask & chbit) == chbit) // Is the channel's bit(s) set? - { - //printf("routingPopupMenuActivated: removing src route ch:%d dst route ch:%d\n", srcRoute.channel, dstRoute.channel); - MusEGlobal::audio->msgRemoveRoute(srcRoute, dstRoute); + if(chmask != 0) + { + // Disconnect all existing channels. + MusECore::Route dstRoute(t, chmask); + MusEGlobal::audio->msgRemoveRoute(*iir, dstRoute); + } + if(chbits != 0) + { + // Connect desired channels. + MusECore::Route dstRoute(t, chbits); + MusEGlobal::audio->msgAddRoute(srcRoute, dstRoute); + } + MusEGlobal::audio->msgUpdateSoloStates(); + MusEGlobal::song->update(SC_ROUTE); + } + return; } - else + else { - //printf("routingPopupMenuActivated: adding src route ch:%d dst route ch:%d\n", srcRoute.channel, dstRoute.channel); - MusEGlobal::audio->msgAddRoute(srcRoute, dstRoute); - } - - MusEGlobal::audio->msgUpdateSoloStates(); - MusEGlobal::song->update(SC_ROUTE); - return; + int chbit = srcRoute.channel; + MusECore::Route dstRoute(t, chbit); + int mdidx = srcRoute.midiPort; + int chmask = 0; + MusECore::ciRoute iir = rl->begin(); + for (; iir != rl->end(); ++iir) + { + if(iir->type == MusECore::Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) // Is there already a route to this port? + { + chmask = iir->channel; // Grab the channel mask. + break; + } + } + + if ((chmask & chbit) == chbit) // Is the channel's bit(s) set? + { + //printf("routingPopupMenuActivated: removing src route ch:%d dst route ch:%d\n", srcRoute.channel, dstRoute.channel); + MusEGlobal::audio->msgRemoveRoute(srcRoute, dstRoute); + } + else + { + //printf("routingPopupMenuActivated: adding src route ch:%d dst route ch:%d\n", srcRoute.channel, dstRoute.channel); + MusEGlobal::audio->msgAddRoute(srcRoute, dstRoute); + } + + MusEGlobal::audio->msgUpdateSoloStates(); + MusEGlobal::song->update(SC_ROUTE); + return; + } } MusECore::Route dstRoute(t, srcRoute.channel, srcRoute.channels); @@ -1020,13 +1200,13 @@ void RoutePopupMenu::popupActivated(QAction* action) void RoutePopupMenu::prepare() { - _pup->disconnect(); - _pup->clear(); + ///disconnect(); + ///clear(); if(!_track) return; - connect(_pup, SIGNAL(triggered(QAction*)), SLOT(popupActivated(QAction*))); + connect(this, SIGNAL(triggered(QAction*)), SLOT(popupActivated(QAction*))); if(_track->isMidiTrack()) { @@ -1055,11 +1235,11 @@ void RoutePopupMenu::prepare() //if(!md) // continue; - _pup->addSeparator(); - _pup->addAction(new MenuTitleItem(tr("Soloing chain"), _pup)); - PopupMenu* subp = new PopupMenu(_pup, true); + addSeparator(); + addAction(new MenuTitleItem(tr("Soloing chain"), this)); + PopupMenu* subp = new PopupMenu(this, true); subp->setTitle(tr("Audio returns")); - _pup->addMenu(subp); + addMenu(subp); MusECore::InputList* al = MusEGlobal::song->inputs(); for (MusECore::ciAudioInput i = al->begin(); i != al->end(); ++i) @@ -1096,19 +1276,26 @@ void RoutePopupMenu::prepare() } if(pi == MIDI_PORTS) { - act = _pup->addAction(tr("Warning: No input devices!")); + act = addAction(tr("Warning: No input devices!")); act->setCheckable(false); act->setData(-1); - _pup->addSeparator(); + addSeparator(); } - act = _pup->addAction(QIcon(*settings_midiport_softsynthsIcon), tr("Open midi config...")); + act = addAction(QIcon(*settings_midiport_softsynthsIcon), tr("Open midi config...")); act->setCheckable(false); act->setData(gid); - _pup->addSeparator(); + addSeparator(); ++gid; - _pup->addAction(new MenuTitleItem("Input port/device", _pup)); - +#ifdef _USE_CUSTOM_WIDGET_ACTIONS_ + + PixmapButtonsHeaderWidgetAction* wa_hdr = new PixmapButtonsHeaderWidgetAction("Input port/device", darkRedLedIcon, MIDI_CHANNELS, this); + addAction(wa_hdr); + ++gid; +#else + addAction(new MenuTitleItem("Input port/device", this)); +#endif + for(int i = 0; i < MIDI_PORTS; ++i) { // NOTE: Could possibly list all devices, bypassing ports, but no, let's stick with ports. @@ -1142,7 +1329,19 @@ void RoutePopupMenu::prepare() if(!md && ir == rl->end()) continue; - PopupMenu* subp = new PopupMenu(_pup, true); +#ifdef _USE_CUSTOM_WIDGET_ACTIONS_ + + PixmapButtonsWidgetAction* wa = new PixmapButtonsWidgetAction(QString::number(i + 1) + ":" + md->name(), + redLedIcon, darkRedLedIcon, MIDI_CHANNELS, chanmask, this); + MusECore::Route srcRoute(i, 0); // Ignore the routing channels - our action holds the channels. + //wa->setData(id++); + wa->setData(qVariantFromValue(srcRoute)); + addAction(wa); + ++gid; + +#else + + PopupMenu* subp = new PopupMenu(this, true); subp->setTitle(QString("%1:").arg(i+1) + (md ? md->name() : tr(""))); for(int ch = 0; ch < MIDI_CHANNELS; ++ch) @@ -1162,7 +1361,10 @@ void RoutePopupMenu::prepare() MusECore::Route togRoute(i, (1 << MIDI_CHANNELS) - 1); // Set all channel bits. act->setData(qVariantFromValue(togRoute)); ++gid; - _pup->addMenu(subp); + addMenu(subp); + +#endif // _USE_CUSTOM_WIDGET_ACTIONS_ + } #if 0 @@ -1242,18 +1444,18 @@ void RoutePopupMenu::prepare() { char buffer[128]; snprintf(buffer, 128, "%s %d", tr("Channel").toLatin1().constData(), i+1); - MenuTitleItem* titel = new MenuTitleItem(QString(buffer), _pup); - _pup->addAction(titel); + MenuTitleItem* titel = new MenuTitleItem(QString(buffer), this); + addAction(titel); if(!MusEGlobal::checkAudioDevice()) { - _pup->clear(); + clear(); return; } std::list ol = MusEGlobal::audioDevice->inputPorts(); for(std::list::iterator ip = ol.begin(); ip != ol.end(); ++ip) { - act = _pup->addAction(*ip); + act = addAction(*ip); act->setCheckable(true); MusECore::Route dst(*ip, true, i, MusECore::Route::JACK_ROUTE); @@ -1269,42 +1471,42 @@ void RoutePopupMenu::prepare() } } if(i+1 != channel) - _pup->addSeparator(); + addSeparator(); } // // Display using separate menu for audio inputs: // - _pup->addSeparator(); - _pup->addAction(new MenuTitleItem(tr("Soloing chain"), _pup)); - PopupMenu* subp = new PopupMenu(_pup, true); + addSeparator(); + addAction(new MenuTitleItem(tr("Soloing chain"), this)); + PopupMenu* subp = new PopupMenu(this, true); subp->setTitle(tr("Audio returns")); - _pup->addMenu(subp); + addMenu(subp); gid = addInPorts(t, subp, gid, -1, -1, true); // // Display all in the same menu: // - //_pup->addSeparator(); - //MenuTitleItem* title = new MenuTitleItem(tr("Audio returns"), _pup); - //_pup->addAction(title); - //gid = addInPorts(t, _pup, gid, -1, -1, true); + //addSeparator(); + //MenuTitleItem* title = new MenuTitleItem(tr("Audio returns"), this); + //addAction(title); + //gid = addInPorts(t, this, gid, -1, -1, true); } break; case MusECore::Track::AUDIO_SOFTSYNTH: - gid = addMultiChannelPorts(t, _pup, gid, true); + gid = addMultiChannelPorts(t, this, gid, true); break; case MusECore::Track::AUDIO_INPUT: case MusECore::Track::WAVE: case MusECore::Track::AUDIO_GROUP: case MusECore::Track::AUDIO_AUX: - gid = addWavePorts( t, _pup, gid, -1, -1, true); - gid = addOutPorts( t, _pup, gid, -1, -1, true); - gid = addGroupPorts( t, _pup, gid, -1, -1, true); - gid = nonSyntiTrackAddSyntis(t, _pup, gid, true); + gid = addWavePorts( t, this, gid, -1, -1, true); + gid = addOutPorts( t, this, gid, -1, -1, true); + gid = addGroupPorts( t, this, gid, -1, -1, true); + gid = nonSyntiTrackAddSyntis(t, this, gid, true); break; default: - _pup->clear(); + clear(); return; } } @@ -1327,18 +1529,18 @@ void RoutePopupMenu::prepare() { char buffer[128]; snprintf(buffer, 128, "%s %d", tr("Channel").toLatin1().constData(), i+1); - MenuTitleItem* titel = new MenuTitleItem(QString(buffer), _pup); - _pup->addAction(titel); + MenuTitleItem* titel = new MenuTitleItem(QString(buffer), this); + addAction(titel); if(!MusEGlobal::checkAudioDevice()) { - _pup->clear(); + clear(); return; } std::list ol = MusEGlobal::audioDevice->outputPorts(); for(std::list::iterator ip = ol.begin(); ip != ol.end(); ++ip) { - act = _pup->addAction(*ip); + act = addAction(*ip); act->setCheckable(true); MusECore::Route dst(*ip, true, i, MusECore::Route::JACK_ROUTE); @@ -1354,59 +1556,59 @@ void RoutePopupMenu::prepare() } } if(i+1 != channel) - _pup->addSeparator(); + addSeparator(); } // // Display using separate menus for midi ports and audio outputs: // - _pup->addSeparator(); - _pup->addAction(new MenuTitleItem(tr("Soloing chain"), _pup)); - PopupMenu* subp = new PopupMenu(_pup, true); + addSeparator(); + addAction(new MenuTitleItem(tr("Soloing chain"), this)); + PopupMenu* subp = new PopupMenu(this, true); subp->setTitle(tr("Audio sends")); - _pup->addMenu(subp); + addMenu(subp); gid = addOutPorts(t, subp, gid, -1, -1, false); - subp = new PopupMenu(_pup, true); + subp = new PopupMenu(this, true); subp->setTitle(tr("Midi port sends")); - _pup->addMenu(subp); + addMenu(subp); addMidiPorts(t, subp, gid, false); // // Display all in the same menu: // - //_pup->addAction(new MenuTitleItem(tr("Audio sends"), _pup)); - //gid = addOutPorts(t, _pup, gid, -1, -1, false); - //_pup->addSeparator(); - //_pup->addAction(new MenuTitleItem(tr("Midi sends"), _pup)); - //addMidiPorts(t, _pup, gid, false); + //addAction(new MenuTitleItem(tr("Audio sends"), this)); + //gid = addOutPorts(t, this, gid, -1, -1, false); + //addSeparator(); + //addAction(new MenuTitleItem(tr("Midi sends"), this)); + //addMidiPorts(t, this, gid, false); } break; case MusECore::Track::AUDIO_OUTPUT: - gid = addWavePorts( t, _pup, gid, -1, -1, false); - gid = addInPorts( t, _pup, gid, -1, -1, false); - gid = addGroupPorts(t, _pup, gid, -1, -1, false); - gid = addAuxPorts( t, _pup, gid, -1, -1, false); - gid = nonSyntiTrackAddSyntis(t, _pup, gid, false); + gid = addWavePorts( t, this, gid, -1, -1, false); + gid = addInPorts( t, this, gid, -1, -1, false); + gid = addGroupPorts(t, this, gid, -1, -1, false); + gid = addAuxPorts( t, this, gid, -1, -1, false); + gid = nonSyntiTrackAddSyntis(t, this, gid, false); break; case MusECore::Track::WAVE: - gid = addWavePorts( t, _pup, gid, -1, -1, false); - gid = addInPorts( t, _pup, gid, -1, -1, false); - gid = addGroupPorts(t, _pup, gid, -1, -1, false); - gid = addAuxPorts( t, _pup, gid, -1, -1, false); - gid = nonSyntiTrackAddSyntis(t, _pup, gid, false); + gid = addWavePorts( t, this, gid, -1, -1, false); + gid = addInPorts( t, this, gid, -1, -1, false); + gid = addGroupPorts(t, this, gid, -1, -1, false); + gid = addAuxPorts( t, this, gid, -1, -1, false); + gid = nonSyntiTrackAddSyntis(t, this, gid, false); break; case MusECore::Track::AUDIO_GROUP: - gid = addWavePorts( t, _pup, gid, -1, -1, false); - gid = addInPorts( t, _pup, gid, -1, -1, false); - gid = addGroupPorts(t, _pup, gid, -1, -1, false); - gid = addAuxPorts( t, _pup, gid, -1, -1, false); - gid = nonSyntiTrackAddSyntis(t, _pup, gid, false); + gid = addWavePorts( t, this, gid, -1, -1, false); + gid = addInPorts( t, this, gid, -1, -1, false); + gid = addGroupPorts(t, this, gid, -1, -1, false); + gid = addAuxPorts( t, this, gid, -1, -1, false); + gid = nonSyntiTrackAddSyntis(t, this, gid, false); break; case MusECore::Track::AUDIO_SOFTSYNTH: - gid = addMultiChannelPorts(t, _pup, gid, false); + gid = addMultiChannelPorts(t, this, gid, false); break; default: - _pup->clear(); + clear(); return; } } @@ -1421,7 +1623,7 @@ void RoutePopupMenu::exec(MusECore::Track* track, bool isOutput) _isOutMenu = isOutput; } prepare(); - _pup->exec(); + PopupMenu::exec(); } void RoutePopupMenu::exec(const QPoint& p, MusECore::Track* track, bool isOutput) @@ -1432,7 +1634,7 @@ void RoutePopupMenu::exec(const QPoint& p, MusECore::Track* track, bool isOutput _isOutMenu = isOutput; } prepare(); - _pup->exec(p); + PopupMenu::exec(p); } void RoutePopupMenu::popup(const QPoint& p, MusECore::Track* track, bool isOutput) @@ -1443,7 +1645,7 @@ void RoutePopupMenu::popup(const QPoint& p, MusECore::Track* track, bool isOutpu _isOutMenu = isOutput; } prepare(); - _pup->popup(p); + PopupMenu::popup(p); } } // namespace MusEGui diff --git a/muse2/muse/widgets/routepopup.h b/muse2/muse/widgets/routepopup.h index 842ba130..e4ecde4c 100644 --- a/muse2/muse/widgets/routepopup.h +++ b/muse2/muse/widgets/routepopup.h @@ -23,7 +23,8 @@ #ifndef __ROUTEPOPUPMENU_H__ #define __ROUTEPOPUPMENU_H__ -#include +//#include +#include "popupmenu.h" namespace MusECore { class AudioTrack; @@ -37,13 +38,14 @@ class QPoint; namespace MusEGui { -class PopupMenu; +//class PopupMenu; -class RoutePopupMenu : public QObject +//class RoutePopupMenu : public QObject +class RoutePopupMenu : public PopupMenu { Q_OBJECT - PopupMenu* _pup; + //PopupMenu* _pup; MusECore::Track* _track; // Whether the route popup was shown by clicking the output routes button, or input routes button. bool _isOutMenu; @@ -70,7 +72,6 @@ class RoutePopupMenu : public QObject public: RoutePopupMenu(QWidget* parent = 0, MusECore::Track* track = 0, bool isOutput = false); RoutePopupMenu(const QString& title, QWidget* parent = 0, MusECore::Track* track = 0, bool isOutput = false); - ~RoutePopupMenu(); void updateRouteMenus(); void exec(MusECore::Track* track = 0, bool isOutput = false); diff --git a/muse2/share/locale/muse_de.ts b/muse2/share/locale/muse_de.ts index 5b827ede..be59c783 100644 --- a/muse2/share/locale/muse_de.ts +++ b/muse2/share/locale/muse_de.ts @@ -219,7 +219,7 @@ click on part to mute/unmute Alle Dateien (*) - + Add Midi Track Midispur hinzufügen @@ -295,7 +295,7 @@ click on part to mute/unmute JACK: - + Route Signalfluss @@ -330,7 +330,7 @@ click on part to mute/unmute Anschlag - + Warning: No output devices! Warnung: Keine Ausgangsgeräte! @@ -340,7 +340,7 @@ click on part to mute/unmute Öffne MIDI-Konfig... - + Empty ports Leere Ports @@ -10120,43 +10120,70 @@ Knopf. hier nicht definiert ist. - For small controls like mixer strips. Also timescale small numbers, arranger part name overlay, and effects rack. - Für kleine Bedienelemente, wie Mixer-Strips. + Für kleine Bedienelemente, wie Mixer-Strips. Auch die kleinen Timescale-Nummern, Arranger-Partnamen und der Effekteinschub. - Midi track info panel. Transport controls. - MIDI Spurinfo. Transportkontrollen. + MIDI Spurinfo. Transportkontrollen. - Controller graph and S/X buttons. Large numbers for time and tempo scale, and time signature. - Controller-Graph und S/X Knöpfe. Große Zahlen für + Controller-Graph und S/X Knöpfe. Große Zahlen für Zeit- und Tempo-Skala und Taktsignaturen. - Time scale markers. - Zeitskala-Marker. + Zeitskala-Marker. - List editor: meta event edit dialog multi-line edit box. - Listeneditor: Metaevent-Bearbeitungsdialog-Box. + Listeneditor: Metaevent-Bearbeitungsdialog-Box. - Mixer label font. Auto-font-sizing up to chosen font size. Word-breaking but only with spaces. - Mixerschriftart. Automatisches Vergrößern bis zur gewählten + Mixerschriftart. Automatisches Vergrößern bis zur gewählten Größe. Zeilenumbruch aber nur mit Leerzeichen. + + + Mixer strips and effects racks. Midi track info panel. +Midi control panel entry box. + + + + + Transport controls. + + + + + Time scale upper, and time signature. +Controller graph and S/X buttons. + + + + + Time scale lower, and arranger part name overlay. + + + + + Tempo scale, and markers. + + + + + Mixer labels. Auto-font-sizing up to chosen font size. +Word-breaking but only with spaces. + + Maximum mixer label auto-font-sizing font size. @@ -12190,19 +12217,19 @@ click on part to mute/unmute MusEGui::MPConfig - + Default input connections Standard-Eingangsverbindungen - + Are you sure you want to apply to all existing midi tracks now? Sind Sie sicher, dass Sie das auf alle existierenden MIDI-Spuren anwenden wollen? - + Default output connections Standard-Ausgangsverbindungen @@ -12226,18 +12253,18 @@ Möchten Sie sie jetzt auf alle existierende MIDI-Spuren anwenden? - + in ein - - + + out aus - + Show first aliases Zeige erste Aliase @@ -12272,7 +12299,7 @@ Möchten Sie sie jetzt auf alle existierende MIDI-Spuren anwenden? Jack-Gerät erstellen - + Port Number Anschlussnummer @@ -12388,7 +12415,7 @@ Möchten Sie sie jetzt auf alle existierende MIDI-Spuren anwenden? Status: Ergebnis vom Öffnen des Gerätes - + Port Anschluss @@ -13099,7 +13126,7 @@ Sync-Einstellungen anwenden? MusEGui::MidiTrackInfo - + <unknown> <unbekannt> @@ -13124,7 +13151,7 @@ Sync-Einstellungen anwenden? MusEGui::MusE - + Failed to start audio! Audio konnte nicht gestartet werden! @@ -13291,13 +13318,13 @@ Sync-Einstellungen anwenden? - - + + &Save &Speichern - + Click this button to save the song you are editing. You will be prompted for a file name. You can also select the Save command from the File menu. @@ -13621,7 +13648,7 @@ Alternativ das Lied mit dem Befehl "Sichern" im Menü "Datei" &Hilfe - + Cannot read template Vorlage nicht lesbar @@ -13642,13 +13669,13 @@ Alternativ das Lied mit dem Befehl "Sichern" im Menü "Datei" - - + + MusE: Song: %1 MusE: Lied: %1 - + MusE: load project Muse: Projekt laden @@ -13658,7 +13685,7 @@ Alternativ das Lied mit dem Befehl "Sichern" im Menü "Datei" Muse: Vorlage laden - + MusE: Write File failed MusE: Datei schreiben schlug fehl @@ -13671,17 +13698,17 @@ Aktuelles Projekt sichern? - + S&kip &Überspringen - + &Cancel &Abbrechen - + MusE: Save As MusE: Speichern unter @@ -13692,7 +13719,7 @@ Aktuelles Projekt sichern? Es gibt nichts zu editieren - + @@ -14464,7 +14491,7 @@ Wahrscheinlich hat die ausgewählte Spur den falschen Typ. MusEGui::ProjectCreateImpl - + Select directory Verzeichnis auswählen @@ -14472,32 +14499,32 @@ Wahrscheinlich hat die ausgewählte Spur den falschen Typ. MusEGui::RoutePopupMenu - + - + Channel Kanal - - + + Soloing chain Solo-Kette - - + + Audio returns Audio-Rückkanäle - + Warning: No input devices! Warnung: Keine Eingangsgeräte! @@ -14507,18 +14534,18 @@ Wahrscheinlich hat die ausgewählte Spur den falschen Typ. Öffne MIDI-Konfig... - - + + <none> <kein> - + Toggle all Alles umwählen - + More... Mehr... @@ -14942,29 +14969,29 @@ Titel ist nicht einzigartig - + Update drummap? Drumbelegung aktualisieren? - + Do you want to use same port for all instruments in the drummap? Möchten Sie für alle Instrumente der Drumbelegung den selben Anschluss verwenden? - + &Yes &Ja - - + + &No &Nein - + show gui GUI anzeigen @@ -14976,7 +15003,7 @@ Titel ist nicht einzigartig Native GUI anzeigen - + Treble clef Violinschlüssel @@ -14996,7 +15023,7 @@ Titel ist nicht einzigartig Sichtbare Automatisierung - + Delete Track Spur löschen @@ -15026,7 +15053,7 @@ Titel ist nicht einzigartig Möchten Sie für alle Instrumente der Drumbelegung den selben Anschluss und Kanal verwenden? - + Unused Devices Ungenutzte Geräte diff --git a/muse2/share/locale/muse_en.ts b/muse2/share/locale/muse_en.ts index 867761ce..613e78e8 100644 --- a/muse2/share/locale/muse_en.ts +++ b/muse2/share/locale/muse_en.ts @@ -4,57 +4,57 @@ @default - + Add Midi Track - + Add Drum Track - + Add Wave Track - + Add Audio Output - + Add Audio Group - + Add Audio Input - + Add Aux Send - + Add Synth - + Route - + dest - + name="%1"/ @@ -69,17 +69,17 @@ - + Empty ports - + <none> - + channelMask="%1" @@ -3597,205 +3597,220 @@ Songdata Application + + + Project directory + + + Projects: + + + + + ... + + + + Views - - - - - + + + + + y-pos - - - - + + + + show - - - - - + + + + + x-pos - - - - + + + + height - - - - + + + + width - + Mixer A - + Mixer B - + Big Time - + Main Window - + Transport - - - - - + + + + + set current values - - - - - + + + + + Cur - + Start Muse - + start song: - + Start song - + start with last song - + start with template: default.med - + start with song - + On Launch - + show splash screen - + show "Did you know?" dialog - + Audio - + Mixer - - + + dB - + min. Meter Value - + min. Slider Val - + Try to use Jack Freewheel - + Speeds bounce operations - + Use Jack Freewheel mode if possible. This dramatically speeds bounce operations. - + Enable denormal protection - + Enable output limiter - + VST in-place - + Enable VST in-place processing (restart required) - + Enable VST in-place processing. Turn this off if VST Ladspa effect rack plugins do not work or feedback loudly, even if they are supposed to @@ -3803,18 +3818,18 @@ This dramatically speeds bounce operations. - + Minimum control period - + Minimum audio controller process period (samples). - + Minimum audio controller process period (samples). Adjusts responsiveness of audio controls and controller graphs. Set a low value for fast, smooth @@ -3823,270 +3838,265 @@ Adjusts responsiveness of audio controls and - + 1 - + 2 - + 4 - + 8 - - + + 16 - - + + 32 - - + + 64 - - + + 128 - - + + 256 - - + + 512 - - - + + + 1024 - - - + + + 2048 - + External Waveditor - + External Waveditor command - + Note: External editor opened from the internal editor. - + Dummy Audio Driver (settings require restart) - + Sample rate - + Hz - + Period size (Frames per period): - + Shorter periods give better midi playback resolution. - + Midi - + Ticks - + RTC Resolution (Ticks/Sec) - + 4096 - + 8192 - + 16384 - + 32768 - + Midi Resolution (Ticks/Quarternote) - - + + 48 - - + + 96 - - + + 192 - - + + 384 - - + + 768 - - + + 1536 - - + + 3072 - - + + 6144 - - + + 12288 - + Displayed Resolution (Ticks/Quarternote) - - Instruments Directory - - - - + GUI Behaviour - + Behavior - + GUI Refresh Rate - + /sec - + Use old-style stop shortcut: - + Move single armed track with selection - + Use project save dialog - + Some popup menus stay open (else hold Ctrl) - + Allows some popup menus to stay open. Otherwise, hold Ctrl to keep them open. - + In some areas, the middle mouse button decreases values, while the right button increases. Users without a middle mouse button can select this option to make the @@ -4094,67 +4104,67 @@ left button behave like the middle button in such areas. - + Use left mouse button for decreasing values - + Shift + Right click sets left range marker - + Allow adding hidden tracks in track list menu - + Unhide tracks when adding hidden tracks - + GUI Style - + MDI-subwindowness and sharing menus - + Presets: - + traditional MusE SDI - + Cakewalk-like MDI - + Borland-/Mac-like MDI - + &Apply - + &Ok - + &Cancel @@ -5958,6 +5968,14 @@ click on the Restart button. quarters + + MusEGui + + + Select project directory + + + MusEGui::Appearance @@ -5968,35 +5986,34 @@ click on the Restart button. - For small controls like mixer strips. -Also timescale small numbers, arranger part name overlay, - and effects rack. + Mixer strips and effects racks. Midi track info panel. +Midi control panel entry box. - Midi track info panel. Transport controls. + Transport controls. - Controller graph and S/X buttons. Large numbers for time - and tempo scale, and time signature. + Time scale upper, and time signature. +Controller graph and S/X buttons. - Time scale markers. + Time scale lower, and arranger part name overlay. - List editor: meta event edit dialog multi-line edit box. + Tempo scale, and markers. - Mixer label font. Auto-font-sizing up to chosen font size. + Mixer labels. Auto-font-sizing up to chosen font size. Word-breaking but only with spaces. @@ -7339,147 +7356,118 @@ Right-click to show GUI. - - + - - MusE: - - - - - - The user instrument directory -%1 -does not exist yet. Create it now? - - - - - - - (You can change the user instruments directory at Settings->Global Settings->Midi) - - - - - - Unable to create user instrument directory '%1' - - - - - MusE: Save Instrument Definition - - + + Instrument Definition (*.idf) - - + + MusE: Save instrument as - + Enter a new unique instrument name: - + The user instrument '%1' already exists. This will overwrite its .idf instrument file. Are you sure? - + MusE: Bad instrument name - + Please choose a unique instrument name. (The name might be used by a hidden instrument.) - + MusE: Bad patch name - + Please choose a unique patch name - + MusE: Bad patchgroup name - + Please choose a unique patchgroup name - + MusE: Bad controller name - + Please choose a unique controller name - - + + MusE: Cannot add common controller - + A controller named '%1' already exists. - + A controller number %1 already exists. - - + + MusE - - + + The current Instrument contains unsaved data Save Current Instrument? - - + + &Save - - + + &Nosave - + &Abort @@ -7729,14 +7717,6 @@ click on part to mute/unmute - - MusEGui::GlobalSettingsConfig - - - Selects instruments directory - - - MusEGui::Header @@ -8015,7 +7995,7 @@ click on part to mute/unmute MusEGui::MPConfig - + Default input connections @@ -8027,245 +8007,245 @@ click on part to mute/unmute - + Default output connections - - + + Setting will apply to new midi tracks. Do you want to apply to all existing midi tracks now? - + MusE: bad device name - + please choose a unique device name - - + + in - - + + out - + Show first aliases - + Show second aliases - - + + Toggle all - - + + Change all tracks now - + Create Jack device - - + + Port Number - + Enable gui - + Enable reading - + Enable writing - + Port instrument - + Midi device name. Click to edit (Jack) - + Connections from Jack Midi outputs - + Connections to Jack Midi inputs - + Auto-connect these channels to new midi tracks - + Auto-connect new midi tracks to these channels - + Auto-connect new midi tracks to this channel - + Device state - + Enable gui for device - + Enable reading from device - + Enable writing to device - + Name of the midi device associated with this port number. Click to edit Jack midi name. - + Instrument connected to port - + Connections from Jack Midi output ports - + Connections to Jack Midi input ports - + Auto-connect these channels, on this port, to new midi tracks. - + Connect new midi tracks to these channels, on this port. - + Connect new midi tracks to this channel, on this port. - + State: result of opening the device - + Port - + GUI - + I - + O - + Instrument - + Device Name - + In routes - + Out routes - + Def in ch - + Def out ch - + State - + <unknown> - - + + <none> @@ -8885,7 +8865,7 @@ Apply sync settings? MusEGui::MidiTrackInfo - + <unknown> @@ -8910,639 +8890,638 @@ Apply sync settings? MusEGui::MusE - - + + Failed to start audio! - + Was not able to start audio, check if jack is running. - + Timeout waiting for audio to run. Check if jack is running. - + Und&o - + Re&do - + undo last change to song - + redo last undo - + Loop - + loop between left mark and right mark - + Punchin - + record starts at left mark - + Punchout - + record stops at right mark - + Start - + rewind to start position - + Rewind - + rewind current position - + Forward - + move current position - + Stop - + stop sequencer - + Play - + start sequencer play - + Record - + to record press record and then play - - + + Panic - + send note off to all midi channels - + &New - - + + Create New Song - + &Open - - + + Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. - + Open &Recent - - - + + + &Save - - + + Click this button to save the song you are editing. You will be prompted for a file name. You can also select the Save command from the File menu. - + Save &As - + Import Midifile - + Export Midifile - + Import Part - + Import Wave File - + Find unused wave files - + &Quit - + Song Info - + Transport Panel - + Bigtime Window - + Mixer A - + Mixer B - + Cliplist - + Marker View - + Arranger View - + Fullscreen - + &Plugins - + Edit Instrument - + Input Plugins - + Transpose - + Midi Input Transform - + Midi Input Filter - + Midi Remote Control - + Rhythm Generator - + Reset Instr. - + Init Instr. - + Local Off - + Bounce to Track - + Bounce to File - + Restart Audio - + Mixer Automation - + Take Snapshot - + Clear Automation Data - + Cascade - + Tile - + In rows - + In columns - + Global Settings - + Configure Shortcuts - + Follow Song - + Don't Follow Song - + Follow Page - + Follow Continuous - + Metronome - + Midi Sync - + Midi File Import/Export - + Appearance Settings - + Midi Ports / Soft Synth - + &Manual - + &MusE Homepage - + &Report Bug... - + &About MusE - + File Buttons - + Undo/Redo - + Transport - + &File - + &View - + &Midi - + &Audio - + A&utomation - + &Windows - + MusE Se&ttings - + &Help - + Cannot read template - + File open error - + File read error - + Unknown File Format: %1 - - - + + + MusE: Song: %1 - + MusE: load project - + MusE: load template - + MusE: Write File failed - + The current Project contains unsaved data Save Current Project? - - + + S&kip - + &Cancel - - + MusE: Save As - - + + Nothing to edit - - - - - + + + + + MusE: Bounce to Track - + No wave tracks found - - + + No audio output tracks found - + Select one audio output track, and one target wave track - + Select one target wave track - + Select one target wave track, and one audio output track - - + + MusE: Bounce to File - + Select one audio output track - + MusE: Bounce - + set left/right marker for bounce range - + The current Project contains unsaved data Load overwrites current Project: Save Current Project? - + &Abort @@ -10094,102 +10073,102 @@ Likely the selected track is the wrong type. MusEGui::PluginDialog - + MusE: select plugin - + Lib - + Label - + Name - + AI - + AO - + CI - + CO - + IP - + id - + Maker - + Copyright - + Ok - + Cancel - + Mono and Stereo - + Stereo - + Mono - + Show All - + Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. - + Search in 'Label' and 'Name': @@ -10197,102 +10176,110 @@ Likely the selected track is the wrong type. MusEGui::PluginGui - + File Buttons - + Load Preset - + Save Preset - - + + bypass plugin - + MusE: load preset - + Error reading preset. Might not be right type for this plugin - + MusE: save preset + + MusEGui::ProjectCreateImpl + + + Select directory + + + MusEGui::RoutePopupMenu - - - - - - - - + + + + + + + + Channel - - - + + + Soloing chain - - + + Audio returns - + Warning: No input devices! - + Open midi config... - - + + <none> - + Toggle all - + More... - + Audio sends - + Midi port sends @@ -10663,122 +10650,132 @@ the selected title is not unique MusEGui::TList - + <none> - + + visible + + + + no clef - + Treble - + Bass - + Grand - + MusE: bad trackname - + please choose a unique track name - - + + Unused Devices + + + + + Update drummap? - + Do you want to use same port for all instruments in the drummap? - - + + &Yes - - + + &No - - + + show gui - - + + show native gui - + Treble clef - + Bass clef - + Grand Staff - + Viewable automation - + Delete Track - + Track Comment - + Insert Track - + Midi - + Drum - + Do you want to use same port and channel for all instruments in the drummap? @@ -11573,27 +11570,44 @@ to be expanded by more than - + + Projects folder: + + + + + + + ... + + + + Project Name: - - Project Path to song file: + + Project is a Template - - Create project folder (recommended for audio projects) + + Project song file type: - - Browse + + Project Path to song file: - + + Create project folder (recommended for audio projects) + + + + Song information: @@ -11677,26 +11691,26 @@ Create it? - + File %1 exists. Overwrite? - + Open File %1 failed: %2 - + MusE: write - + MusE: Open File @@ -12721,14 +12735,14 @@ Robert Jonsson - - - - - + + + + - - + + + All Files (*) @@ -12755,18 +12769,21 @@ Robert Jonsson + Uncompressed med Files (*.med) + gzip compressed med Files (*.med.gz) + bzip2 compressed med Files (*.med.bz2) @@ -12776,97 +12793,97 @@ Robert Jonsson - + (*.jpg *.gif *.png) - + (*.jpg) - + (*.gif) - + (*.png) - + part Files (*.mpt *.mpt.gz *.mpt.bz2) - + part Files (*.mpt) - + gzip compressed part Files (*.mpt.gz) - + bzip2 compressed part Files (*.mpt.bz2) - + Presets (*.pre *.pre.gz *.pre.bz2) - + Presets (*.pre) - + gzip compressed presets (*.pre.gz) - + bzip2 compressed presets (*.pre.bz2) - + Presets (*.map *.map.gz *.map.bz2) - + Presets (*.map) - + gzip compressed presets (*.map.gz) - + bzip2 compressed presets (*.map.bz2) - + Wave/Binary (*.wav *.ogg *.bin) - + Wave (*.wav *.ogg) - + Binary (*.bin) diff --git a/muse2/share/locale/muse_es.ts b/muse2/share/locale/muse_es.ts index 7a380e3f..d5509dc9 100644 --- a/muse2/share/locale/muse_es.ts +++ b/muse2/share/locale/muse_es.ts @@ -208,22 +208,22 @@ haz click en una parte para silenciar/des-silenciar Todos los archivos (*) - + Add Midi Track Agregar pista MIDI - + Add Drum Track Agregar pista de percusión - + Add Wave Track Agregar pista de audio - + Add Audio Output Agregar salida de audio @@ -243,12 +243,12 @@ haz click en una parte para silenciar/des-silenciar Agregar envio auxiliar - + Add Synth Agregar sintetizador - + Route Ruta @@ -267,7 +267,7 @@ haz click en una parte para silenciar/des-silenciar Velocidad - + Warning: No output devices! Atencion: No hay salidas disponibles @@ -277,7 +277,7 @@ haz click en una parte para silenciar/des-silenciar Configurar MIDI... - + Empty ports Puertos no asignados @@ -4972,7 +4972,7 @@ Configuración MusE: Configuración global globales - + Audio Audio @@ -5098,12 +5098,11 @@ Configuración (Tics/segundo) - GUI - GUI + GUI - + /sec /seg @@ -5113,7 +5112,12 @@ Configuración Velocidad de refresco de la interfáz - + + GUI Behaviour + + + + Use project save dialog Usar diálogo de guardado @@ -5152,7 +5156,22 @@ el botón del medio. Ctrl + clic derecho establece marcador de la izquierda. - + + Allow adding hidden tracks in track list menu + + + + + Unhide tracks when adding hidden tracks + + + + + GUI Style + + + + MDI-subwindowness and sharing menus MDI Sub ventanas y posición de menús @@ -5196,12 +5215,12 @@ el botón del medio. Navegador de ayuda: - + Application Aplicación - + Start Muse Inicio de MusE @@ -5381,7 +5400,22 @@ el botón del medio. 16 - + + Project directory + + + + + Projects: + + + + + ... + ... + + + Main Window Ventana principal @@ -5529,12 +5563,11 @@ Ajusta la sensibilidad de los controles de audio y (Tics/Negra) - Instruments Directory - Carpeta de instrumentos + Carpeta de instrumentos - + Use old-style stop shortcut: Atajo antiguo para detener @@ -5544,12 +5577,12 @@ Ajusta la sensibilidad de los controles de audio y Armar la pista con la selección (Grabar) - + On Launch Lanzar al inicio - + Behavior Comportamiento @@ -7441,6 +7474,11 @@ Entradas habilitadas en la lista Send sync delay Enviar retraso de sincronización + + + Note: Sync delay and MTC sync currently not fully implemeted + + MidiTrackInfoBase @@ -9438,7 +9476,7 @@ falló MusECore::Song - + Jack shutdown! Detener Jack @@ -9534,7 +9572,7 @@ haga clic en el botón Reiniciar. &Cancelar - + MusE - external script failed MusE - fallo de orden externa @@ -9545,6 +9583,14 @@ haga clic en el botón Reiniciar. + + MusEGui + + + Select project directory + + + MusEGui::Appearance @@ -9555,43 +9601,70 @@ haga clic en el botón Reiniciar. defecto para los controles no estan definidas. - For small controls like mixer strips. Also timescale small numbers, arranger part name overlay, and effects rack. - Para los controles pequeños, como: bandas de mezclador. + Para los controles pequeños, como: bandas de mezclador. escala de tiempo, superposición de nombre en la región, y rack de efectos. - Midi track info panel. Transport controls. - Panel de información de la pista MIDI - Control del transporte + Panel de información de la pista MIDI - Control del transporte - Controller graph and S/X buttons. Large numbers for time and tempo scale, and time signature. - Controlador de gráficos y botones S / X. Una gran cantidad + Controlador de gráficos y botones S / X. Una gran cantidad de eventos de tempo y el tempo de la escala y compás. - Time scale markers. - Marcas de la escala de tiempo + Marcas de la escala de tiempo - List editor: meta event edit dialog multi-line edit box. - Editor de la lista: Editar meta evento de diálogo multi-línea + Editor de la lista: Editar meta evento de diálogo multi-línea - Mixer label font. Auto-font-sizing up to chosen font size. Word-breaking but only with spaces. - Fuente de la etiqueta del mezclador. Auto dimensionado del tamaño de la fuente elegida. + Fuente de la etiqueta del mezclador. Auto dimensionado del tamaño de la fuente elegida. La separación de palabras, pero sólo con espacios. + + + Mixer strips and effects racks. Midi track info panel. +Midi control panel entry box. + + + + + Transport controls. + + + + + Time scale upper, and time signature. +Controller graph and S/X buttons. + + + + + Time scale lower, and arranger part name overlay. + + + + + Tempo scale, and markers. + + + + + Mixer labels. Auto-font-sizing up to chosen font size. +Word-breaking but only with spaces. + + Maximum mixer label auto-font-sizing font size. @@ -9925,7 +9998,7 @@ Clic derecho para ver la interfaz transporte - + C&ut C&ortar @@ -10030,14 +10103,22 @@ Clic derecho para ver la interfaz Editor de partitura - all parts in one staff - Todas las regiones en un solo pentagrama + Todas las regiones en un solo pentagrama - one staff per part - Un pentagrama por región. + Un pentagrama por región. + + + + all tracks in one staff + + + + + one staff per track + @@ -10095,6 +10176,21 @@ Clic derecho para ver la interfaz Global Split División global + + + Global Cut - selected tracks + + + + + Global Insert - selected tracks + + + + + Global Split - selected tracks + + &Edit @@ -10106,7 +10202,7 @@ Clic derecho para ver la interfaz E&structura - + Functions Funciones @@ -10166,7 +10262,7 @@ Clic derecho para ver la interfaz Comportamiento de ventana - + New Nuevo @@ -10233,7 +10329,7 @@ Clic derecho para ver la interfaz MusEGui::AudioStrip - + panorama panorama @@ -10263,7 +10359,7 @@ Clic derecho para ver la interfaz pre fader - port fader - + dB dB @@ -10392,7 +10488,7 @@ Clic derecho para ver la interfaz MusEGui::ClipListEdit - + MusE: Clip List Editor MusE: Editor de lista de archivos de audio @@ -10506,7 +10602,7 @@ Clic derecho para ver la interfaz MusEGui::DrumEdit - + mute instrument silenciar instrumento @@ -10862,7 +10958,7 @@ Clic derecho para ver la interfaz VL4 - + Muse: Load Drum Map MusE: Cargar mapa de percusión @@ -10927,51 +11023,41 @@ Clic derecho para ver la interfaz MusE: La captura del archivo ha fallado - - - - MusE: - MusE: + MusE: - - The user instrument directory %1 does not exist yet. Create it now? - El instrumento no existe en la carpeta + El instrumento no existe en la carpeta %1 ¿Desea crearlo ahora? - - (You can change the user instruments directory at Settings->Global Settings->Midi) - (Usted puede cambiar la carpeta del instrumento desde Ajustes->Configuración global->MIDI) + (Usted puede cambiar la carpeta del instrumento desde Ajustes->Configuración global->MIDI) - - Unable to create user instrument directory '%1' - No es posible crear el instrumento en la carpeta '%1' + No es posible crear el instrumento en la carpeta '%1' - - + + MusE: Save Instrument Definition MusE: Guardar definicion de instrumento - - + + Instrument Definition (*.idf) Definicion de instrumento (*.idf) - + MusE: Save instrument as MusE: Guardar instrumento como @@ -10988,7 +11074,7 @@ Are you sure? - + MusE: Bad instrument name MusE: Nombre de instrumento invalido @@ -11338,9 +11424,8 @@ haz click en una región para silenciar/des-silenciar MusEGui::GlobalSettingsConfig - Selects instruments directory - Seleccionar carpeta de instrumentos + Seleccionar carpeta de instrumentos @@ -11354,7 +11439,7 @@ haz click en una región para silenciar/des-silenciar MusEGui::LMaster - + MusE: Mastertrack MusE: pista maestra @@ -11469,7 +11554,7 @@ haz click en una región para silenciar/des-silenciar Valor - + Reposition of the initial tempo and signature events is not allowed Reposición del tempo inicial y la firma de eventos, no está permitido @@ -11492,7 +11577,7 @@ haz click en una región para silenciar/des-silenciar MusEGui::ListEdit - + insert Note insertar Nota @@ -11621,19 +11706,19 @@ haz click en una región para silenciar/des-silenciar MusEGui::MPConfig - + Default input connections Conexión de entrada predeterminada - + Are you sure you want to apply to all existing midi tracks now? ¿Seguro que desea aplicar a todas las pistas MIDI existentes? - + Default output connections Conexión de salida predeterminada @@ -11657,18 +11742,18 @@ Do you want to apply to all existing midi tracks now? - + in Entrada - - + + out Salida - + Show first aliases Mostrar primero los álias @@ -11695,7 +11780,7 @@ Do you want to apply to all existing midi tracks now? Crear conexión Jack - + Port Number Número de puerto @@ -11811,7 +11896,7 @@ Do you want to apply to all existing midi tracks now? Estado: resultado de abrir el puerto - + Port Puerto @@ -11866,13 +11951,13 @@ Do you want to apply to all existing midi tracks now? Estado - + <unknown> <desconocido> - + <none> <ningúno> @@ -11896,7 +11981,7 @@ Do you want to apply to all existing midi tracks now? MusEGui::MarkerView - + MusE: Marker MusE: Marcador @@ -11969,7 +12054,7 @@ Do you want to apply to all existing midi tracks now? MusEGui::MasterEdit - + MusE: Mastertrack MusE: Pista maestra @@ -12522,7 +12607,7 @@ Apply sync settings? MusEGui::MidiTrackInfo - + <unknown> <desconocido> @@ -12547,7 +12632,7 @@ Apply sync settings? MusEGui::MusE - + Failed to start audio! Fallo al iniciar el audio @@ -12566,7 +12651,7 @@ Apply sync settings? Comprobar si Jack está en ejecución - + Und&o Deshacer @@ -12715,13 +12800,13 @@ Comprobar si Jack está en ejecución - - + + &Save &Guardar - + Click this button to save the song you are editing. You will be prompted for a file name. You can also select the Save command from the File menu. @@ -12750,7 +12835,7 @@ Puedes seleccionar también el comando Guardar del men de Archivo. - + Import Wave File Importar archivo de audio @@ -13005,7 +13090,7 @@ Puedes seleccionar también el comando Guardar del men de Archivo. Transporte - + &File Sesión @@ -13045,12 +13130,12 @@ Puedes seleccionar también el comando Guardar del men de Archivo. A&yuda - + Cannot read template No se puede leer la plantilla - + File open error Error al abrir el archivo @@ -13065,14 +13150,14 @@ Puedes seleccionar también el comando Guardar del men de Archivo. Formato de archivo desconocido: %1 - - - + + + MusE: Song: %1 Sesión de MusE: %1 - + MusE: load project MusE: Carga sesión @@ -13082,7 +13167,7 @@ Puedes seleccionar también el comando Guardar del men de Archivo. MusE: cargar plantilla - + MusE: Write File failed MusE: La captura del archivo ha fallado @@ -13095,29 +13180,28 @@ Guardar la sesión actual? - + S&kip Ignorar - + &Cancel &Cancelar - - + MusE: Save As MusE: Guardar como - + Nothing to edit Nada para editar - + @@ -13177,7 +13261,7 @@ y una salida de audio. Fije marcadores derecho e izquierdo para el rango de rebote. - + The current Project contains unsaved data Load overwrites current Project: Save Current Project? @@ -13187,7 +13271,7 @@ Guardar el proyecto actual? - + &Abort &Abortar @@ -13254,7 +13338,7 @@ failed: falló: - + Import part is only valid for midi and wave tracks! Importar regiones es solo para pistas MIDI o de audio @@ -13359,7 +13443,7 @@ El valor actual de la sesión es %2. No se puede copiar/mover/clonar a un tipo diferente de pista - + C&ut C&ortar @@ -13438,7 +13522,7 @@ Files: Archivos: - + %n part(s) out of %1 could not be pasted. Likely the selected track is the wrong type. @@ -13537,7 +13621,7 @@ Probablemente la pista seleccionada es del tipo incorrecto. MusEGui::PianoRoll - + &Edit &Editar @@ -13740,7 +13824,7 @@ Probablemente la pista seleccionada es del tipo incorrecto. MusEGui::PluginDialog - + MusE: select plugin MusE: Selecciona el plugin @@ -13843,7 +13927,7 @@ Probablemente la pista seleccionada es del tipo incorrecto. MusEGui::PluginGui - + File Buttons Botón de archivos @@ -13879,35 +13963,43 @@ Probablemente la pista seleccionada es del tipo incorrecto. MusE: Guardar plantilla + + MusEGui::ProjectCreateImpl + + + Select directory + + + MusEGui::RoutePopupMenu - + - + - - + + Channel Canal - - + + Soloing chain Cadena de solos - - + + Audio returns Retornos de audio - + Warning: No input devices! Atención: no hay entradas @@ -13917,18 +14009,18 @@ Probablemente la pista seleccionada es del tipo incorrecto. Abrir la configuraciòn MIDI - - + + <none> <ningúno> - + Toggle all Cambiar todos - + More... Mas... @@ -13946,7 +14038,7 @@ Probablemente la pista seleccionada es del tipo incorrecto. MusEGui::ScoreCanvas - + Treble Agudos @@ -13966,7 +14058,7 @@ Probablemente la pista seleccionada es del tipo incorrecto. Remover partitura - + Ambiguous part Parte ambígua @@ -13989,7 +14081,7 @@ Probablemente la pista seleccionada es del tipo incorrecto. MusEGui::ScoreEdit - + Undo/Redo tools Herramientas Deshacer/Rehacer @@ -14029,20 +14121,20 @@ Probablemente la pista seleccionada es del tipo incorrecto. Pasado - + - + Apply to new notes: Se aplica a nuevas notas - - + + Apply to selected notes: Aplicar a las notas seleccionadas - + Velocity: Velocidad: @@ -14062,7 +14154,7 @@ Probablemente la pista seleccionada es del tipo incorrecto. Cuantizado: - + Pixels per whole: Pixeles por entero: @@ -14212,7 +14304,7 @@ Probablemente la pista seleccionada es del tipo incorrecto. Región - + Set up &preamble Establecer encabezado @@ -14232,7 +14324,7 @@ Probablemente la pista seleccionada es del tipo incorrecto. Ajuste de nombre del pentagrama - + Enter the new score title Ingrese el título de la nueva partitura @@ -14299,15 +14391,28 @@ El título seleccionado ya existe. Armadura de la escala + + MusEGui::Strip + + + Remove track? + + + MusEGui::TList - + <none> <ningúno> - + + visible + + + + no clef No hay clave @@ -14337,30 +14442,35 @@ El título seleccionado ya existe. Error: El nombre de pista ya existe - - + + Unused Devices + + + + + Update drummap? ¿Actualizár mapa de percusión? - + Do you want to use same port for all instruments in the drummap? ¿Desea utilizar el mismo puerto para todos los instrumentos en el mapa de percusión? - + &Yes Aceptar - - + + &No Cancelar - + show gui Ver interfáz @@ -14372,7 +14482,7 @@ El título seleccionado ya existe. Ver interfáz nativa - + Treble clef Partitura de agudos @@ -14392,7 +14502,7 @@ El título seleccionado ya existe. Automatización visible - + Delete Track Borrar pista @@ -14407,7 +14517,7 @@ El título seleccionado ya existe. Insertar pista - + Midi MIDI @@ -14433,7 +14543,7 @@ El título seleccionado ya existe. MusEGui::Toolbar1 - + Off @@ -14473,7 +14583,7 @@ El título seleccionado ya existe. Pantalla completa - + Piano roll Editor de matríz @@ -14731,7 +14841,7 @@ El título seleccionado ya existe. MusEGui::VisibleTracks - + Show wave tracks Ver pistas de audio @@ -16094,12 +16204,34 @@ una región no tiene que ser ampliada . Crear sesión - + + Projects folder: + + + + + + + ... + ... + + + Project Name: Nombre del la sesión: - + + Project is a Template + + + + + Project song file type: + + + + Project Path to song file: Ruta de la sesión: @@ -16109,12 +16241,11 @@ una región no tiene que ser ampliada . Crear carpeta para la sesión (recomendado para sesiones de audio) - Browse - Buscar + Buscar - + Song information: Información de la sesión @@ -16255,9 +16386,8 @@ actualmente sin uso QObject - Other - Otro + Otro @@ -16305,12 +16435,12 @@ actualmente sin uso Nueva sesión - + create peakfile for Crear archivo de picos - + MusE: get file name MusE: Obtener el nombre de archivo @@ -16358,7 +16488,7 @@ no existe. falló la creación de carpeta - + File %1 exists. Overwrite? @@ -16367,7 +16497,7 @@ exists. Overwrite? ya existe. ¿Desea sobreescribirlo? - + Open File %1 failed: %2 @@ -16388,7 +16518,7 @@ exists existe - + MusE: write MusE: Escribir @@ -16412,13 +16542,13 @@ failed: falló - + MusE: Open File MusE: Abrir archivo - - + + None Ningúno @@ -17681,12 +17811,11 @@ en la lista de controles definidos por MusE SynthConfigBase - MusE: Synth Configuration - MusE: Configuración del Sintetizador virtual + MusE: Configuración del Sintetizador virtual - + Soft Synthesizer Sintetizador Virtual @@ -17696,18 +17825,18 @@ en la lista de controles definidos por MusE Archivo - + Instances Copias - + Name Nombre - + list of available software synthesizers lista de sintetizadores de software dispoibles @@ -17731,12 +17860,23 @@ en la lista de controles definidos por MusE Puerto MIDI - + + Midi Port and Soft Synth Configuration + + + + + + Type + Tipo + + + Midi connections Conexiones de MIDI - + Inst Instrumento @@ -18529,6 +18669,181 @@ Robert Jonsson Estéreo + + file_patterns + + + Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2) + + + + + Midi (*.mid *.MID *.mid.gz *.mid.bz2) + + + + + Karaoke (*.kar *.KAR *.kar.gz *.kar.bz2) + + + + + + + + + + + + + + + + All Files (*) + Todos los archivos (*) + + + + Midi (*.mid) + + + + + Karaoke (*.kar) + + + + + all known files (*.med *.med.gz *.med.bz2 *.mid *.midi *.kar) + + + + + med Files (*.med *.med.gz *.med.bz2) + + + + + + + Uncompressed med Files (*.med) + + + + + + + gzip compressed med Files (*.med.gz) + + + + + + + bzip2 compressed med Files (*.med.bz2) + + + + + mid Files (*.mid *.midi *.kar *.MID *.MIDI *.KAR) + + + + + (*.jpg *.gif *.png) + + + + + (*.jpg) + + + + + (*.gif) + + + + + (*.png) + + + + + part Files (*.mpt *.mpt.gz *.mpt.bz2) + + + + + part Files (*.mpt) + + + + + gzip compressed part Files (*.mpt.gz) + + + + + bzip2 compressed part Files (*.mpt.bz2) + + + + + Presets (*.pre *.pre.gz *.pre.bz2) + + + + + Presets (*.pre) + + + + + gzip compressed presets (*.pre.gz) + + + + + bzip2 compressed presets (*.pre.bz2) + + + + + Presets (*.map *.map.gz *.map.bz2) + + + + + Presets (*.map) + + + + + gzip compressed presets (*.map.gz) + + + + + bzip2 compressed presets (*.map.bz2) + + + + + Wave/Binary (*.wav *.ogg *.bin) + + + + + Wave (*.wav *.ogg) + + + + + Binary (*.bin) + + + freeverb diff --git a/muse2/share/locale/muse_fr.ts b/muse2/share/locale/muse_fr.ts index eb19761e..7880a360 100644 --- a/muse2/share/locale/muse_fr.ts +++ b/muse2/share/locale/muse_fr.ts @@ -226,7 +226,7 @@ cliquez sur une pièces pour la rendre muette ou pas. Tous les Fichiers (*) - + Add Midi Track Ajouter une Piste Midi @@ -270,7 +270,7 @@ cliquez sur une pièces pour la rendre muette ou pas. Mesure - + Route @@ -289,7 +289,7 @@ cliquez sur une pièces pour la rendre muette ou pas. Vélocité - + Warning: No output devices! @@ -299,7 +299,7 @@ cliquez sur une pièces pour la rendre muette ou pas. - + Empty ports @@ -4872,7 +4872,7 @@ Time) MusE: Paramètres - + Audio Audio @@ -5002,7 +5002,7 @@ Time) GUI - + /sec /sec @@ -5106,12 +5106,12 @@ left button behave like the middle button in such areas. Navigateur pour l'aide: - + Application - + Views @@ -5291,7 +5291,22 @@ left button behave like the middle button in such areas. 16 - + + Project directory + + + + + Projects: + + + + + ... + ... + + + Main Window @@ -5431,12 +5446,7 @@ Adjusts responsiveness of audio controls and - - Instruments Directory - - - - + GUI Behaviour @@ -5451,12 +5461,12 @@ Adjusts responsiveness of audio controls and - + On Launch - + Behavior @@ -9265,6 +9275,14 @@ click on the Restart button. + + MusEGui + + + Select project directory + + + MusEGui::Appearance @@ -9275,35 +9293,34 @@ click on the Restart button. - For small controls like mixer strips. -Also timescale small numbers, arranger part name overlay, - and effects rack. + Mixer strips and effects racks. Midi track info panel. +Midi control panel entry box. - Midi track info panel. Transport controls. + Transport controls. - Controller graph and S/X buttons. Large numbers for time - and tempo scale, and time signature. + Time scale upper, and time signature. +Controller graph and S/X buttons. - Time scale markers. + Time scale lower, and arranger part name overlay. - List editor: meta event edit dialog multi-line edit box. + Tempo scale, and markers. - Mixer label font. Auto-font-sizing up to chosen font size. + Mixer labels. Auto-font-sizing up to chosen font size. Word-breaking but only with spaces. @@ -10647,48 +10664,19 @@ Right-click to show GUI. MusE: échec de l'enregistrement - - - - - MusE: - - - - - - The user instrument directory -%1 -does not exist yet. Create it now? - - - - - - - (You can change the user instruments directory at Settings->Global Settings->Midi) - - - - - - Unable to create user instrument directory '%1' - - - - - + + MusE: Save Instrument Definition - - + + Instrument Definition (*.idf) - + MusE: Save instrument as @@ -10705,7 +10693,7 @@ Are you sure? - + MusE: Bad instrument name @@ -11049,14 +11037,6 @@ cliquez sur une pièces pour la rendre muette ou pas. - - MusEGui::GlobalSettingsConfig - - - Selects instruments directory - - - MusEGui::Header @@ -11336,19 +11316,19 @@ polyphonique MusEGui::MPConfig - + Default input connections - + Are you sure you want to apply to all existing midi tracks now? - + Default output connections @@ -11371,18 +11351,18 @@ Do you want to apply to all existing midi tracks now? - + in - - + + out - + Show first aliases @@ -11409,7 +11389,7 @@ Do you want to apply to all existing midi tracks now? - + Port Number Numéro de port @@ -11525,7 +11505,7 @@ Do you want to apply to all existing midi tracks now? Etat: résultat de l'ouverture du port - + Port Port @@ -12206,7 +12186,7 @@ Apply sync settings? MusEGui::MidiTrackInfo - + <unknown> @@ -12231,7 +12211,7 @@ Apply sync settings? MusEGui::MusE - + Failed to start audio! @@ -12249,7 +12229,7 @@ Apply sync settings? - + Und&o &Annuler @@ -12402,13 +12382,13 @@ midi - - + + &Save - + Click this button to save the song you are editing. You will be prompted for a file name. You can also select the Save command from the File menu. @@ -12691,7 +12671,7 @@ You can also select the Save command from the File menu. Transport - + &File &Fichier @@ -12731,12 +12711,12 @@ You can also select the Save command from the File menu. &Aide - + Cannot read template - + File open error @@ -12751,14 +12731,14 @@ You can also select the Save command from the File menu. - - - + + + MusE: Song: %1 - + MusE: load project Muse: charger Projet @@ -12768,7 +12748,7 @@ You can also select the Save command from the File menu. - + MusE: Write File failed MusE: échec de l'enregistrement @@ -12781,29 +12761,28 @@ non encore sauvegardées. Enregistrer? - + S&kip - + &Cancel - - + MusE: Save As MusE: enregistrer sous - + Nothing to edit Rien � éditer - + @@ -12861,7 +12840,7 @@ and one audio output track - + The current Project contains unsaved data Load overwrites current Project: Save Current Project? @@ -13412,7 +13391,7 @@ sélectionnées MusEGui::PluginDialog - + MusE: select plugin MusE: choisir plugin @@ -13515,7 +13494,7 @@ sélectionnées MusEGui::PluginGui - + File Buttons @@ -13551,35 +13530,43 @@ sélectionnées MusE: enregistrer réglages + + MusEGui::ProjectCreateImpl + + + Select directory + + + MusEGui::RoutePopupMenu - + - + Channel Canal - - + + Soloing chain - - + + Audio returns - + Warning: No input devices! @@ -13589,18 +13576,18 @@ sélectionnées - - + + <none> - + Toggle all - + More... @@ -13981,12 +13968,17 @@ the selected title is not unique MusEGui::TList - + <none> - + + visible + + + + no clef @@ -14016,30 +14008,35 @@ the selected title is not unique - - + + Unused Devices + + + + + Update drummap? - + Do you want to use same port for all instruments in the drummap? - + &Yes - - + + &No - + show gui montrer l'interface @@ -14051,7 +14048,7 @@ the selected title is not unique - + Treble clef @@ -14071,7 +14068,7 @@ the selected title is not unique - + Delete Track @@ -14086,7 +14083,7 @@ the selected title is not unique - + Midi @@ -15735,27 +15732,44 @@ to be expanded by more than - + + Projects folder: + + + + + + + ... + ... + + + Project Name: - - Project Path to song file: + + Project is a Template - - Create project folder (recommended for audio projects) + + Project song file type: - - Browse + + Project Path to song file: - + + Create project folder (recommended for audio projects) + + + + Song information: @@ -15994,14 +16008,14 @@ Create it? échec de la création du répertoire - + File %1 exists. Overwrite? - + Open File %1 failed: %2 @@ -16020,7 +16034,7 @@ exists existe - + MusE: write MusE: écriture @@ -16045,7 +16059,7 @@ failed: échec: - + MusE: Open File MusE: Ouvrir un Fichier @@ -18146,7 +18160,7 @@ Robert Jonsson - + @@ -18158,7 +18172,7 @@ Robert Jonsson Tous les Fichiers (*) - + Midi (*.mid) @@ -18180,28 +18194,31 @@ Robert Jonsson + Uncompressed med Files (*.med) - + + gzip compressed med Files (*.med.gz) - + + bzip2 compressed med Files (*.med.bz2) - + mid Files (*.mid *.midi *.kar *.MID *.MIDI *.KAR) - + (*.jpg *.gif *.png) diff --git a/muse2/share/locale/muse_pl.ts b/muse2/share/locale/muse_pl.ts index 00fa0d2c..19ea4894 100644 --- a/muse2/share/locale/muse_pl.ts +++ b/muse2/share/locale/muse_pl.ts @@ -200,7 +200,7 @@ Kliknij na pojedynczy klocek aby go wyłączyć z odtwarzania. Wszystkie Pliki (*) - + Add Midi Track Dodaj Ślad Midi @@ -244,7 +244,7 @@ Kliknij na pojedynczy klocek aby go wyłączyć z odtwarzania. - + Route Połącznie @@ -259,7 +259,7 @@ Kliknij na pojedynczy klocek aby go wyłączyć z odtwarzania. - + Warning: No output devices! @@ -269,7 +269,7 @@ Kliknij na pojedynczy klocek aby go wyłączyć z odtwarzania. - + Empty ports @@ -4744,7 +4744,7 @@ Configuration MuzA: Globalne Ustawienia - + Audio Audio @@ -4875,7 +4875,7 @@ RTC (Rzeczywista Rozdzielczość Zegara) Interfejs Użytkownika - + /sec /sek. @@ -4978,12 +4978,12 @@ left button behave like the middle button in such areas. Przeglądarka pomocy: - + Application Zastosowanie - + Start Muse Uruchamianie MuzA @@ -5163,7 +5163,22 @@ left button behave like the middle button in such areas. 16 - + + Project directory + + + + + Projects: + + + + + ... + ... + + + Main Window @@ -5303,12 +5318,7 @@ Adjusts responsiveness of audio controls and - - Instruments Directory - - - - + GUI Behaviour @@ -5323,12 +5333,12 @@ Adjusts responsiveness of audio controls and - + On Launch - + Behavior @@ -9246,6 +9256,14 @@ click on the Restart button. + + MusEGui + + + Select project directory + + + MusEGui::Appearance @@ -9256,35 +9274,34 @@ click on the Restart button. - For small controls like mixer strips. -Also timescale small numbers, arranger part name overlay, - and effects rack. + Mixer strips and effects racks. Midi track info panel. +Midi control panel entry box. - Midi track info panel. Transport controls. + Transport controls. - Controller graph and S/X buttons. Large numbers for time - and tempo scale, and time signature. + Time scale upper, and time signature. +Controller graph and S/X buttons. - Time scale markers. + Time scale lower, and arranger part name overlay. - List editor: meta event edit dialog multi-line edit box. + Tempo scale, and markers. - Mixer label font. Auto-font-sizing up to chosen font size. + Mixer labels. Auto-font-sizing up to chosen font size. Word-breaking but only with spaces. @@ -10627,48 +10644,19 @@ Right-click to show GUI. MuzA: Zapis pliku nie powiódł się - - - - - MusE: - - - - - - The user instrument directory -%1 -does not exist yet. Create it now? - - - - - - - (You can change the user instruments directory at Settings->Global Settings->Midi) - - - - - - Unable to create user instrument directory '%1' - - - - - + + MusE: Save Instrument Definition - - + + Instrument Definition (*.idf) - + MusE: Save instrument as @@ -10685,7 +10673,7 @@ Are you sure? - + MusE: Bad instrument name @@ -11024,14 +11012,6 @@ Kliknij na pojedynczy klocek aby go wyłączyć z odtwarzania. - - MusEGui::GlobalSettingsConfig - - - Selects instruments directory - - - MusEGui::Header @@ -11310,19 +11290,19 @@ Kliknij na pojedynczy klocek aby go wyłączyć z odtwarzania. MusEGui::MPConfig - + Default input connections - + Are you sure you want to apply to all existing midi tracks now? - + Default output connections @@ -11345,18 +11325,18 @@ Do you want to apply to all existing midi tracks now? - + in - - + + out - + Show first aliases @@ -11383,7 +11363,7 @@ Do you want to apply to all existing midi tracks now? - + Port Number Numer portu @@ -11499,7 +11479,7 @@ Do you want to apply to all existing midi tracks now? Status: rezultat otworzenia urządzenia - + Port @@ -12180,7 +12160,7 @@ Apply sync settings? MusEGui::MidiTrackInfo - + <unknown> @@ -12205,7 +12185,7 @@ Apply sync settings? MusEGui::MusE - + Failed to start audio! @@ -12223,7 +12203,7 @@ Apply sync settings? - + Und&o Co&fnij @@ -12373,13 +12353,13 @@ Apply sync settings? - - + + &Save &Zapisz - + Click this button to save the song you are editing. You will be prompted for a file name. You can also select the Save command from the File menu. @@ -12665,7 +12645,7 @@ Zgrywanie śladu (bounce) Panel transportu - + &File &Plik @@ -12705,12 +12685,12 @@ Zgrywanie śladu (bounce) P&omoc - + Cannot read template Nie można odczytać pliku szablonu - + File open error Błąd odczytu pliku @@ -12725,14 +12705,14 @@ Zgrywanie śladu (bounce) - - - + + + MusE: Song: %1 - + MusE: load project MuzA: ładuj utwór @@ -12742,7 +12722,7 @@ Zgrywanie śladu (bounce) MuzA: ładuj szablon - + MusE: Write File failed MuzA: Zapis pliku nie powiódł się @@ -12755,29 +12735,28 @@ Zapisać otwarty utwór? - + S&kip - + &Cancel - - + MusE: Save As MuzA: Zapisz Jako - + Nothing to edit Nie ma nic do edytowania - + @@ -12835,7 +12814,7 @@ and one audio output track ustaw lokatory do zgrania (bounce) danego zakresu - + The current Project contains unsaved data Load overwrites current Project: Save Current Project? @@ -13382,7 +13361,7 @@ Likely the selected track is the wrong type. MusEGui::PluginDialog - + MusE: select plugin MuzA: wybierz wtyczkę @@ -13485,7 +13464,7 @@ Likely the selected track is the wrong type. MusEGui::PluginGui - + File Buttons Przyciski Menu Plik @@ -13521,35 +13500,43 @@ Likely the selected track is the wrong type. MuzA: zapisz ustawienie + + MusEGui::ProjectCreateImpl + + + Select directory + + + MusEGui::RoutePopupMenu - + - + Channel - - + + Soloing chain - - + + Audio returns - + Warning: No input devices! @@ -13559,18 +13546,18 @@ Likely the selected track is the wrong type. - - + + <none> - + Toggle all - + More... @@ -13951,12 +13938,17 @@ the selected title is not unique MusEGui::TList - + <none> - + + visible + + + + no clef @@ -13986,30 +13978,35 @@ the selected title is not unique proszę wybrać niepowtarzalną nazwę dla śladu - - + + Unused Devices + + + + + Update drummap? Zaktualizować zestaw perkusyjny? - + Do you want to use same port for all instruments in the drummap? Czy chcesz używać jednego portu midi dla wszystkich instrumentów w zestawie perkusyjnym? - + &Yes &Tak - - + + &No &Nie - + show gui pokaż interfejs użytkownika @@ -14021,7 +14018,7 @@ the selected title is not unique - + Treble clef @@ -14041,7 +14038,7 @@ the selected title is not unique - + Delete Track @@ -14056,7 +14053,7 @@ the selected title is not unique - + Midi Midi @@ -15597,27 +15594,44 @@ to be expanded by more than - + + Projects folder: + + + + + + + ... + ... + + + Project Name: - - Project Path to song file: + + Project is a Template - - Create project folder (recommended for audio projects) + + Project song file type: - - Browse + + Project Path to song file: - + + Create project folder (recommended for audio projects) + + + + Song information: @@ -15835,14 +15849,14 @@ Create it? tworzenie katalogu nie powiodło się - + File %1 exists. Overwrite? - + Open File %1 failed: %2 @@ -15859,7 +15873,7 @@ exists istnieje - + MusE: write MuzA: zapis: @@ -15882,7 +15896,7 @@ failed: nie udane - + MusE: Open File MuzA: Otwórz plik @@ -17812,7 +17826,7 @@ Robert Jonsson - + @@ -17824,7 +17838,7 @@ Robert Jonsson Wszystkie Pliki (*) - + Midi (*.mid) @@ -17846,28 +17860,31 @@ Robert Jonsson + Uncompressed med Files (*.med) - + + gzip compressed med Files (*.med.gz) - + + bzip2 compressed med Files (*.med.bz2) - + mid Files (*.mid *.midi *.kar *.MID *.MIDI *.KAR) - + (*.jpg *.gif *.png) diff --git a/muse2/share/locale/muse_ru.ts b/muse2/share/locale/muse_ru.ts index 4510daa7..04c220ea 100644 --- a/muse2/share/locale/muse_ru.ts +++ b/muse2/share/locale/muse_ru.ts @@ -204,7 +204,7 @@ click on part to mute/unmute Все файлы (*) - + Add Midi Track Добавить Midi Трек @@ -280,7 +280,7 @@ click on part to mute/unmute JACK: - + Route Маршрут @@ -315,7 +315,7 @@ click on part to mute/unmute Скорость нажатия - + Warning: No output devices! @@ -325,7 +325,7 @@ click on part to mute/unmute - + Empty ports @@ -5440,7 +5440,7 @@ Configuration MusE: Общие настройки - + Use project save dialog @@ -5529,7 +5529,7 @@ left button behave like the middle button in such areas. &Отмена - + Audio Аудио @@ -5663,7 +5663,7 @@ left button behave like the middle button in such areas. В чём читать справку: - + GUI Refresh Rate Частота обновления ГИП @@ -5673,12 +5673,12 @@ left button behave like the middle button in such areas. /сек - + Application Приложение - + Start Muse Запустить Muse @@ -5898,7 +5898,22 @@ Shorter periods are desirable. 16 - + + Project directory + + + + + Projects: + + + + + ... + ... + + + Main Window @@ -6039,12 +6054,7 @@ Adjusts responsiveness of audio controls and (Тиков/На четвертную ноту) - - Instruments Directory - - - - + GUI Behaviour @@ -6059,12 +6069,12 @@ Adjusts responsiveness of audio controls and Назначать "для записи" выбранный трек - + On Launch - + Behavior @@ -10967,6 +10977,14 @@ click on the Restart button. + + MusEGui + + + Select project directory + + + MusEGui::Appearance @@ -10977,42 +10995,69 @@ click on the Restart button. для всех средств управления, здесь не определены. - For small controls like mixer strips. Also timescale small numbers, arranger part name overlay, and effects rack. - Для небольших средств контроля, типа линеек микшера. + Для небольших средств контроля, типа линеек микшера. Также для маленьких цифр на линейке времени, названий партий в компоновщике и рэка эффектов. - Midi track info panel. Transport controls. - Инфо-панель Midi-трека. Управление транспортом. + Инфо-панель Midi-трека. Управление транспортом. - Controller graph and S/X buttons. Large numbers for time and tempo scale, and time signature. - Диаграмма контроллера и S/X кнопки. Большие цифры для + Диаграмма контроллера и S/X кнопки. Большие цифры для линеек времени и темпа, а также для тактового размера. - Time scale markers. - Маркеры на линейке времени. + Маркеры на линейке времени. - List editor: meta event edit dialog multi-line edit box. - Редактор списка: редактирование мета-события многострочное окно редактирования. + Редактор списка: редактирование мета-события многострочное окно редактирования. - Mixer label font. Auto-font-sizing up to chosen font size. Word-breaking but only with spaces. - Шрифт метки микшера. Автоматическое изменение размера шрифта до выбранного размера. + Шрифт метки микшера. Автоматическое изменение размера шрифта до выбранного размера. Переносы только по пробелам. + + + Mixer strips and effects racks. Midi track info panel. +Midi control panel entry box. + + + + + Transport controls. + + + + + Time scale upper, and time signature. +Controller graph and S/X buttons. + + + + + Time scale lower, and arranger part name overlay. + + + + + Tempo scale, and markers. + + + + + Mixer labels. Auto-font-sizing up to chosen font size. +Word-breaking but only with spaces. + + Maximum mixer label auto-font-sizing font size. @@ -12364,48 +12409,23 @@ Right-click to show GUI. - - - - MusE: - MusE: - - - - - The user instrument directory -%1 -does not exist yet. Create it now? - - - - - - - (You can change the user instruments directory at Settings->Global Settings->Midi) - - - - - - Unable to create user instrument directory '%1' - + MusE: - - + + MusE: Save Instrument Definition MusE: Сохранить Определение Инструмента - - + + Instrument Definition (*.idf) Определение инструмента (*.idf) - + MusE: Save instrument as MusE: Сохранить инструмент как @@ -12422,7 +12442,7 @@ Are you sure? - + MusE: Bad instrument name MusE: Неверное имя инструмента @@ -12769,14 +12789,6 @@ click on part to mute/unmute Вы действительно хотите заменить эффект %1? - - MusEGui::GlobalSettingsConfig - - - Selects instruments directory - - - MusEGui::Header @@ -13055,19 +13067,19 @@ click on part to mute/unmute MusEGui::MPConfig - + Default input connections - + Are you sure you want to apply to all existing midi tracks now? - + Default output connections @@ -13090,18 +13102,18 @@ Do you want to apply to all existing midi tracks now? - + in в - - + + out вне (из) - + Show first aliases Показать первые псевдонимы @@ -13136,7 +13148,7 @@ Do you want to apply to all existing midi tracks now? - + Port Number Номер порта @@ -13252,7 +13264,7 @@ Do you want to apply to all existing midi tracks now? Состояние: результат открытия устройства - + Port Порт @@ -13963,7 +13975,7 @@ Apply sync settings? MusEGui::MidiTrackInfo - + <unknown> <неизвестно> @@ -13988,7 +14000,7 @@ Apply sync settings? MusEGui::MusE - + Failed to start audio! Не могу воспроизводить аудио! @@ -14008,7 +14020,7 @@ Apply sync settings? - + Und&o &Отменить действие @@ -14157,13 +14169,13 @@ Apply sync settings? - - + + &Save &Сохранить - + Click this button to save the song you are editing. You will be prompted for a file name. You can also select the Save command from the File menu. @@ -14447,7 +14459,7 @@ You can also select the Save command from the File menu. Транспорт - + &File &Файл @@ -14487,12 +14499,12 @@ You can also select the Save command from the File menu. - + Cannot read template Не могу прочитать шаблон - + File open error Ошибка при открытии файла @@ -14507,14 +14519,14 @@ You can also select the Save command from the File menu. - - - + + + MusE: Song: %1 - + MusE: load project MusE: Открыть проект @@ -14524,7 +14536,7 @@ You can also select the Save command from the File menu. MusE: открыть шаблон - + MusE: Write File failed @@ -14537,29 +14549,28 @@ Save Current Project? - + S&kip - + &Cancel - - + MusE: Save As MusE: Сохранить как - + Nothing to edit Нечего редактировать - + @@ -14619,7 +14630,7 @@ and one audio output track настройте левый/правый маркеры для установки диапазона сведения - + The current Project contains unsaved data Load overwrites current Project: Save Current Project? @@ -15172,7 +15183,7 @@ Likely the selected track is the wrong type. MusEGui::PluginDialog - + MusE: select plugin MusE: выбрать плагин @@ -15275,7 +15286,7 @@ Likely the selected track is the wrong type. MusEGui::PluginGui - + File Buttons Файловые кнопки @@ -15311,35 +15322,43 @@ Likely the selected track is the wrong type. MusE: сохранить пресет + + MusEGui::ProjectCreateImpl + + + Select directory + + + MusEGui::RoutePopupMenu - + - + Channel Канал - - + + Soloing chain - - + + Audio returns - + Warning: No input devices! @@ -15349,18 +15368,18 @@ Likely the selected track is the wrong type. - - + + <none> <ничего> - + Toggle all - + More... @@ -15741,12 +15760,17 @@ the selected title is not unique MusEGui::TList - + <none> <ничего> - + + visible + + + + no clef @@ -15776,30 +15800,35 @@ the selected title is not unique Выберите неповторяющееся имя для трека - - + + Unused Devices + + + + + Update drummap? Обновить карту ударных? - + Do you want to use same port for all instruments in the drummap? Вы хотите использовать один и тот же порт для всех инструментов в списке ударных? - + &Yes &Да - - + + &No &Нет - + show gui показать ГИП @@ -15811,7 +15840,7 @@ the selected title is not unique показать ГИП - + Treble clef @@ -15831,7 +15860,7 @@ the selected title is not unique - + Delete Track Удалить трек @@ -15846,7 +15875,7 @@ the selected title is not unique - + Midi @@ -17937,27 +17966,44 @@ to be expanded by more than - + + Projects folder: + + + + + + + ... + ... + + + Project Name: - - Project Path to song file: + + Project is a Template - - Create project folder (recommended for audio projects) + + Project song file type: - - Browse + + Project Path to song file: - + + Create project folder (recommended for audio projects) + + + + Song information: @@ -18189,14 +18235,14 @@ Create it? создание каталога не удалось - + File %1 exists. Overwrite? - + Open File %1 failed: %2 @@ -18214,7 +18260,7 @@ exists существует - + MusE: write MusE: записать @@ -18238,7 +18284,7 @@ failed: не удалось: - + MusE: Open File MusE: Открыть файл @@ -20466,7 +20512,7 @@ is set to a valid editor. - + @@ -20478,7 +20524,7 @@ is set to a valid editor. Все файлы (*) - + Midi (*.mid) @@ -20500,28 +20546,31 @@ is set to a valid editor. + Uncompressed med Files (*.med) - + + gzip compressed med Files (*.med.gz) - + + bzip2 compressed med Files (*.med.bz2) - + mid Files (*.mid *.midi *.kar *.MID *.MIDI *.KAR) - + (*.jpg *.gif *.png) diff --git a/muse2/share/locale/muse_sv_SE.ts b/muse2/share/locale/muse_sv_SE.ts index 0bf20ae7..5c5d4216 100644 --- a/muse2/share/locale/muse_sv_SE.ts +++ b/muse2/share/locale/muse_sv_SE.ts @@ -206,7 +206,7 @@ klicka på en part för att Tysta/Avtysta Alla filer (*) - + Add Midi Track Lägg till Midispår @@ -254,7 +254,7 @@ klicka på en part för att Tysta/Avtysta Takt - + Route @@ -273,7 +273,7 @@ klicka på en part för att Tysta/Avtysta Hastighet - + Warning: No output devices! @@ -283,7 +283,7 @@ klicka på en part för att Tysta/Avtysta - + Empty ports @@ -4846,7 +4846,7 @@ Configuration MusE: Globala Inställningar - + Use project save dialog @@ -4935,7 +4935,7 @@ left button behave like the middle button in such areas. &Avbryt - + Audio Ljud @@ -5061,7 +5061,7 @@ left button behave like the middle button in such areas. Hjälpläsare: - + GUI Refresh Rate GUI-uppdateringsfrekvens @@ -5071,12 +5071,12 @@ left button behave like the middle button in such areas. /sek - + Application Applikation - + Start Muse Starta MusE @@ -5256,7 +5256,22 @@ left button behave like the middle button in such areas. - + + Project directory + + + + + Projects: + + + + + ... + + + + Main Window @@ -5396,12 +5411,7 @@ Adjusts responsiveness of audio controls and - - Instruments Directory - - - - + GUI Behaviour @@ -5416,12 +5426,12 @@ Adjusts responsiveness of audio controls and - + On Launch - + Behavior @@ -9278,6 +9288,14 @@ click on the Restart button. + + MusEGui + + + Select project directory + + + MusEGui::Appearance @@ -9288,35 +9306,34 @@ click on the Restart button. - For small controls like mixer strips. -Also timescale small numbers, arranger part name overlay, - and effects rack. + Mixer strips and effects racks. Midi track info panel. +Midi control panel entry box. - Midi track info panel. Transport controls. + Transport controls. - Controller graph and S/X buttons. Large numbers for time - and tempo scale, and time signature. + Time scale upper, and time signature. +Controller graph and S/X buttons. - Time scale markers. + Time scale lower, and arranger part name overlay. - List editor: meta event edit dialog multi-line edit box. + Tempo scale, and markers. - Mixer label font. Auto-font-sizing up to chosen font size. + Mixer labels. Auto-font-sizing up to chosen font size. Word-breaking but only with spaces. @@ -10659,48 +10676,19 @@ Right-click to show GUI. MusE: Misslyckades med att skriva Fil - - - - - MusE: - - - - - - The user instrument directory -%1 -does not exist yet. Create it now? - - - - - - - (You can change the user instruments directory at Settings->Global Settings->Midi) - - - - - - Unable to create user instrument directory '%1' - - - - - + + MusE: Save Instrument Definition - - + + Instrument Definition (*.idf) - + MusE: Save instrument as @@ -10717,7 +10705,7 @@ Are you sure? - + MusE: Bad instrument name @@ -11064,14 +11052,6 @@ klicka på en part för att Tysta/Avtysta Vill du verkligen ersätta effekten %1? - - MusEGui::GlobalSettingsConfig - - - Selects instruments directory - - - MusEGui::Header @@ -11350,19 +11330,19 @@ klicka på en part för att Tysta/Avtysta MusEGui::MPConfig - + Default input connections - + Are you sure you want to apply to all existing midi tracks now? - + Default output connections @@ -11385,18 +11365,18 @@ Do you want to apply to all existing midi tracks now? - + in - - + + out - + Show first aliases @@ -11423,7 +11403,7 @@ Do you want to apply to all existing midi tracks now? - + Port Number Portnummer @@ -11539,7 +11519,7 @@ Do you want to apply to all existing midi tracks now? Status: resultat av öppning av enhet - + Port @@ -12220,7 +12200,7 @@ Apply sync settings? MusEGui::MidiTrackInfo - + <unknown> @@ -12245,7 +12225,7 @@ Apply sync settings? MusEGui::MusE - + Failed to start audio! @@ -12263,7 +12243,7 @@ Apply sync settings? - + Und&o &Ångra @@ -12412,13 +12392,13 @@ Apply sync settings? - - + + &Save &Spara - + Click this button to save the song you are editing. You will be prompted for a file name. You can also select the Save command from the File menu. @@ -12702,7 +12682,7 @@ Du kan också välja menyalternativet Spara från Arkivmenyn. - + &File &Arkiv @@ -12742,12 +12722,12 @@ Du kan också välja menyalternativet Spara från Arkivmenyn. &Hjälp - + Cannot read template Kan inte läsa mall - + File open error Fel vid öppning av fil @@ -12762,14 +12742,14 @@ Du kan också välja menyalternativet Spara från Arkivmenyn. - - - + + + MusE: Song: %1 - + MusE: load project MusE: Öppna projekt @@ -12779,7 +12759,7 @@ Du kan också välja menyalternativet Spara från Arkivmenyn. MusE: ladda mall - + MusE: Write File failed MusE: Misslyckades med att skriva Fil @@ -12792,29 +12772,28 @@ Spara nuvarande Projekt? - + S&kip - + &Cancel &Avbryt - - + MusE: Save As MusE: Spara Som - + Nothing to edit Inget att redigera - + @@ -12872,7 +12851,7 @@ and one audio output track sätt vänster och höger markör till bounce-område - + The current Project contains unsaved data Load overwrites current Project: Save Current Project? @@ -13420,7 +13399,7 @@ Likely the selected track is the wrong type. MusEGui::PluginDialog - + MusE: select plugin MusE: välj plugin @@ -13523,7 +13502,7 @@ Likely the selected track is the wrong type. MusEGui::PluginGui - + File Buttons @@ -13559,35 +13538,43 @@ Likely the selected track is the wrong type. MusE: spara preset + + MusEGui::ProjectCreateImpl + + + Select directory + + + MusEGui::RoutePopupMenu - + - + Channel Kanal - - + + Soloing chain - - + + Audio returns - + Warning: No input devices! @@ -13597,18 +13584,18 @@ Likely the selected track is the wrong type. - - + + <none> - + Toggle all - + More... @@ -13989,12 +13976,17 @@ the selected title is not unique MusEGui::TList - + <none> - + + visible + + + + no clef @@ -14024,30 +14016,35 @@ the selected title is not unique vänligen välj ett unikt spårnamn - - + + Unused Devices + + + + + Update drummap? Updatera trum-map? - + Do you want to use same port for all instruments in the drummap? Vill du använda samma port för alla instrument i trum-map:en? - + &Yes &Ja - - + + &No &Nej - + show gui visa gui @@ -14059,7 +14056,7 @@ the selected title is not unique - + Treble clef @@ -14079,7 +14076,7 @@ the selected title is not unique - + Delete Track Ta bort spår @@ -14094,7 +14091,7 @@ the selected title is not unique - + Midi Midi @@ -15648,27 +15645,44 @@ to be expanded by more than - + + Projects folder: + + + + + + + ... + + + + Project Name: - - Project Path to song file: + + Project is a Template - - Create project folder (recommended for audio projects) + + Project song file type: - - Browse + + Project Path to song file: - + + Create project folder (recommended for audio projects) + + + + Song information: @@ -15915,14 +15929,14 @@ Create it? misslyckades med att skapa katalog - + File %1 exists. Overwrite? - + Open File %1 failed: %2 @@ -15939,7 +15953,7 @@ exists existerar - + MusE: write MusE: skriv @@ -15963,7 +15977,7 @@ failed: misslyckades: - + MusE: Open File MusE: Öppna fil @@ -18061,7 +18075,7 @@ Saknat data tystas - + @@ -18073,7 +18087,7 @@ Saknat data tystas Alla filer (*) - + Midi (*.mid) @@ -18095,28 +18109,31 @@ Saknat data tystas + Uncompressed med Files (*.med) - + + gzip compressed med Files (*.med.gz) - + + bzip2 compressed med Files (*.med.bz2) - + mid Files (*.mid *.midi *.kar *.MID *.MIDI *.KAR) - + (*.jpg *.gif *.png) diff --git a/muse2/share/templates/MusE.cfg b/muse2/share/templates/MusE.cfg index b64d9029..ef4689a6 100644 --- a/muse2/share/templates/MusE.cfg +++ b/muse2/share/templates/MusE.cfg @@ -36,17 +36,17 @@ 0 0 - :/style.qss + sweep 0 0 0 arial,10,-1,5,50,0,0,0,0,0 - arial,8,-1,5,50,0,0,0,0,0 + arial,7,-1,5,50,0,0,0,0,0 arial,10,-1,5,50,0,0,0,0,0 arial,10,-1,5,75,0,0,0,0,0 - arial,8,-1,5,75,0,0,0,0,0 - Lucidatypewriter,14,-1,5,75,0,0,0,0,0 + arial,8,-1,5,50,0,0,0,0,0 + arial,8,-1,5,75,0,0,0,0,0 arial,8,-1,5,75,1,0,0,0,0 190 diff --git a/muse2/synti/vam/COPYING b/muse2/synti/vam/COPYING index dc63aaca..736846ae 100644 --- a/muse2/synti/vam/COPYING +++ b/muse2/synti/vam/COPYING @@ -3,7 +3,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -306,7 +306,8 @@ the "copyright" line and a pointer to where the full notice is found. 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. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + USA Also add information on how to contact you by electronic and paper mail. diff --git a/muse2/xpm/midi_thru_off4.xpm b/muse2/xpm/midi_thru_off4.xpm new file mode 100644 index 00000000..947191dc --- /dev/null +++ b/muse2/xpm/midi_thru_off4.xpm @@ -0,0 +1,20 @@ +/* XPM */ +static const char * midi_thru_off4_xpm[] = { +"13 13 4 1", +" c None", +". c #000000", +"+ c #5E2B2B", +"@ c #553E3E", +" ", +" . ", +" .. ", +" .+. ", +"........++. ", +".+++++++@++. ", +".@@@@@@@@@++.", +".@@@@@@@@@+. ", +"........@+. ", +" .+. ", +" .. ", +" . ", +" "}; diff --git a/muse2/xpm/midi_thru_on4.xpm b/muse2/xpm/midi_thru_on4.xpm new file mode 100644 index 00000000..91604db7 --- /dev/null +++ b/muse2/xpm/midi_thru_on4.xpm @@ -0,0 +1,20 @@ +/* XPM */ +static const char * midi_thru_on4_xpm[] = { +"13 13 4 1", +" c None", +". c #000000", +"+ c #FF0C0B", +"@ c #F18888", +" ", +" . ", +" .. ", +" .+. ", +"........++. ", +".+++++++@++. ", +".@@@@@@@@@++.", +".@@@@@@@@@+. ", +"........@+. ", +" .+. ", +" .. ", +" . ", +" "}; diff --git a/muse2/xpm/routing_input_button_slim_4.xpm b/muse2/xpm/routing_input_button_slim_4.xpm new file mode 100644 index 00000000..4614a1c8 --- /dev/null +++ b/muse2/xpm/routing_input_button_slim_4.xpm @@ -0,0 +1,53 @@ +/* XPM */ +static const char * routing_input_button_slim_4_xpm[] = { +"16 11 39 1", +" c None", +". c #1C1A16", +"+ c #39342D", +"@ c #2E2D2D", +"# c #5D5C5B", +"$ c #504A3E", +"% c #313131", +"& c #A29F99", +"* c #7C786F", +"= c #575553", +"- c #534E42", +"; c #191918", +"> c #FFFFFF", +", c #5D5D5C", +"' c #FEFDFD", +") c #696359", +"! c #151310", +"~ c #8E8980", +"{ c #595041", +"] c #28241D", +"^ c #8A8479", +"/ c #534C3F", +"( c #14120E", +"_ c #A0988D", +": c #221F1A", +"< c #585244", +"[ c #5A5346", +"} c #676053", +"| c #100F0C", +"1 c #91897D", +"2 c #565045", +"3 c #151414", +"4 c #797367", +"5 c #938E84", +"6 c #0C0C0B", +"7 c #656565", +"8 c #B2ACA2", +"9 c #070707", +"0 c #0F0F0F", +" ", +".++ ", +"@@#$ ", +"%%&*****=*=* - ", +";>>>>>>,>,>>$'>)", +"!~{{{{]{]{{{>^{/", +"({_____:_:__<{[}", +"||1222223232 45 ", +"6678 ", +"900 ", +" "}; diff --git a/muse2/xpm/routing_midi_input_button_slim.xpm b/muse2/xpm/routing_midi_input_button_slim.xpm new file mode 100644 index 00000000..0f631c32 --- /dev/null +++ b/muse2/xpm/routing_midi_input_button_slim.xpm @@ -0,0 +1,58 @@ +/* XPM */ +static const char * routing_midi_input_button_slim_xpm[] = { +"16 11 44 1", +" c None", +". c #1C1A16", +"+ c #39342D", +"@ c #211D18", +"# c #2E2D2D", +"$ c #5D5C5B", +"% c #343332", +"& c #504A3E", +"* c #151414", +"= c #313131", +"- c #646464", +"; c #434343", +"> c #7C786F", +", c #575553", +"' c #000000", +") c #262624", +"! c #4D4C49", +"~ c #343330", +"{ c #FFFFFF", +"] c #5D5D5C", +"^ c #221F1A", +"/ c #151310", +"( c #2B2721", +"_ c #16130F", +": c #595041", +"< c #28241D", +"[ c #14120E", +"} c #14120D", +"| c #9C9489", +"1 c #A0988D", +"2 c #100F0C", +"3 c #211E19", +"4 c #0F0E0B", +"5 c #565045", +"6 c #413F3D", +"7 c #0C0C0B", +"8 c #191816", +"9 c #171614", +"0 c #100F0E", +"a c #B2ACA2", +"b c #070707", +"c c #0F0F0F", +"d c #0D0D0D", +"e c #050505", +" ", +" .+++++@ ", +" #$$$$$%&&&&* ", +" =-----;>>>>,'* ", +")!!!!!~{{{{]{'{^", +"/(((((_::::<'''<", +"[<<<<<}|111^{'{]", +" 23333345555*{6 ", +" 7888890aaaa^ ", +" bccccde ", +" "}; diff --git a/muse2/xpm/routing_midi_output_button_slim.xpm b/muse2/xpm/routing_midi_output_button_slim.xpm new file mode 100644 index 00000000..c4141415 --- /dev/null +++ b/muse2/xpm/routing_midi_output_button_slim.xpm @@ -0,0 +1,58 @@ +/* XPM */ +static const char * routing_midi_output_button_slim_xpm[] = { +"16 11 44 1", +" c None", +". c #211D18", +"+ c #39342D", +"@ c #1C1A16", +"# c #151414", +"$ c #504A3E", +"% c #343332", +"& c #5D5C5B", +"* c #2E2D2D", +"= c #000000", +"- c #575553", +"; c #7C786F", +"> c #434343", +", c #646464", +"' c #313131", +") c #221F1A", +"! c #FFFFFF", +"~ c #5D5D5C", +"{ c #343330", +"] c #4D4C49", +"^ c #262624", +"/ c #28241D", +"( c #595041", +"_ c #16130F", +": c #2B2721", +"< c #151310", +"[ c #A0988D", +"} c #9C9489", +"| c #14120D", +"1 c #14120E", +"2 c #413F3D", +"3 c #565045", +"4 c #0F0E0B", +"5 c #211E19", +"6 c #100F0C", +"7 c #B2ACA2", +"8 c #100F0E", +"9 c #171614", +"0 c #191816", +"a c #0C0C0B", +"b c #050505", +"c c #0D0D0D", +"d c #0F0F0F", +"e c #070707", +" ", +" .+++++@ ", +" #$$$$%&&&&&* ", +" #=-;;;;>,,,,,' ", +")!=!~!!!!{]]]]]^", +"/===/((((_:::::<", +"~!=!)[[[}|/////1", +" 2!#33334555556 ", +" )7777890000a ", +" bcdddde ", +" "}; diff --git a/muse2/xpm/routing_output_button_slim_4.xpm b/muse2/xpm/routing_output_button_slim_4.xpm new file mode 100644 index 00000000..6fecf815 --- /dev/null +++ b/muse2/xpm/routing_output_button_slim_4.xpm @@ -0,0 +1,53 @@ +/* XPM */ +static const char * routing_output_button_slim_4_xpm[] = { +"16 11 39 1", +" c None", +". c #39342D", +"+ c #1C1A16", +"@ c #504A3E", +"# c #5D5C5B", +"$ c #2E2D2D", +"% c #534E42", +"& c #7C786F", +"* c #575553", +"= c #A29F99", +"- c #313131", +"; c #696359", +"> c #FFFFFF", +", c #FEFDFD", +"' c #5D5D5C", +") c #191918", +"! c #534C3F", +"~ c #595041", +"{ c #8A8479", +"] c #28241D", +"^ c #8E8980", +"/ c #151310", +"( c #676053", +"_ c #5A5346", +": c #585244", +"< c #A0988D", +"[ c #221F1A", +"} c #14120E", +"| c #938E84", +"1 c #797367", +"2 c #565045", +"3 c #151414", +"4 c #91897D", +"5 c #100F0C", +"6 c #B2ACA2", +"7 c #656565", +"8 c #0C0C0B", +"9 c #0F0F0F", +"0 c #070707", +" ", +" ..+", +" @#$$", +" % &*&*&&&&&=--", +";>,@>>'>'>>>>>>)", +"!~{>~~~]~]~~~~^/", +"(_~:<<[<[<<<<<~}", +" |1 232322222455", +" 6788", +" 990", +" "}; diff --git a/muse2/xpm/toggle_small.xpm b/muse2/xpm/toggle_small.xpm new file mode 100644 index 00000000..470c64fc --- /dev/null +++ b/muse2/xpm/toggle_small.xpm @@ -0,0 +1,15 @@ +/* XPM */ +static const char * toggle_small_xpm[] = { +"9 9 2 1", +" g None", +". g #000000", +" .. .. ", +".... .. ", +".... .. ", +" .. .. ", +" .. .. ", +" .. .. ", +" .. ....", +" .. ....", +" .. .. "}; + -- cgit v1.2.3