From 4648b0e21ff0ee41925740b3f8c7ec24a45fc6a2 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Sun, 19 Aug 2007 23:31:01 +0000 Subject: [PATCH] added "Recently opened files"-menu, fixed several bugs & crashes, removed obsolete plugins from build git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@529 0778d3d1-df1d-0410-868b-ea421aaaa00d --- ChangeLog | 55 ++++ Makefile.am | 2 +- data/locale/de.qm | Bin 108015 -> 112896 bytes data/locale/de.ts | 550 ++++++++++++++++++++++++++++++-- data/projects/misc/mystic.mmp | 249 ++++++++------- include/config_mgr.h | 12 + include/main_window.h | 6 +- plugins/Makefile.am | 2 - plugins/patman/patman.cpp | 10 +- plugins/stk/mallets/mallets.cpp | 37 ++- plugins/stk/mallets/mallets.h | 4 +- plugins/vibed/vibed.cpp | 3 +- src/audio/audio_jack.cpp | 35 +- src/core/config_mgr.cpp | 46 +++ src/core/engine.cpp | 3 + src/core/main_window.cpp | 97 +++--- src/core/mixer.cpp | 4 +- src/lib/journalling_object.cpp | 2 - src/lib/mmp.cpp | 20 +- src/lib/project_journal.cpp | 1 - src/widgets/knob.cpp | 4 +- 21 files changed, 899 insertions(+), 243 deletions(-) diff --git a/ChangeLog b/ChangeLog index 36b308dc2..6a8c3659b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,58 @@ +2007-08-19 Tobias Doerffel + + * data/locale/de.ts: + * data/locale/de.qm: + updated German localization-file + + * Makefile.am: + fixed command for updating TS-files + + * include/config_mgr.h: + * include/main_window.h: + * src/core/config_mgr.cpp: + * src/core/main_window.cpp: + added support for "Recently opened files"-menu + + * src/core/main_window.cpp: + - cleanups + - limit x-coordinate of a widget to be >= 0 in + mainWindow::restoreWidgetState( ... ) - fixes bug with appearently + inacccessible title-bars of piano-roll, song-editor etc. after + loading project + + * include/config_mgr.h: + * src/core/engine.cpp: + also destroy config-manager at engine::destroy() + + * src/audio/audio_jack.cpp: + added define for support for per-track audio-ports - almost works + except that the buffers of the audio-port are already cleared again at + the time the callback fills the buffers - will need an additional + buffer in audio-ports or something like that + + * src/core/mixer.cpp: + * src/lib/journalling_object.cpp: + * src/lib/project_journal.cpp: + * src/widgets/knob.cpp: + removed debug-out + + * plugins/patman/patman.cpp: + set directory of sample-selection-dialog to /usr/share/midi/freepats + if it exists + + * plugins/Makefile.am: + * plugins/vibed/vibed.cpp: + * lib/src/mmp.cpp: + replaced obsolete PluckedStringSynth with Vibed + + * plugins/Makefile.am: + removed Polyb302 from build as the same results can be achieved either + via (improved and maintained) LB302 or TripleOsc+filter - Polyb302 + just increases redundancy and adds extra maintainance-work + + * plugins/stk/mallets/mallets.cpp: + do not crash if Stk-files are missing + 2007-08-18 Tobias Doerffel * plugins/lb302/lb302.cpp: diff --git a/Makefile.am b/Makefile.am index 168e2ab07..4b203de3c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -35,7 +35,7 @@ AM_CXXFLAGS := $(AM_CXXFLAGS) $(QT_CXXFLAGS) $(MOC) -o $@ $< %.ts: - $(LUPDATE) $(lmms_SOURCES) `find plugins/ -type f -name *.cpp` -ts data/locale/$@ + $(LUPDATE) $(lmms_SOURCES) `find plugins/ -type f -name "*.cpp"` -ts data/locale/$@ %.qm: %.ts $(LRELEASE) $< diff --git a/data/locale/de.qm b/data/locale/de.qm index 400f8c6ae3444bfcdae352ec55a16225134cc0ce..bad42b1872c08499c2a9325d0a5d7309bed7085b 100644 GIT binary patch delta 13144 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 Bw|4*l delta 9417 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 diff --git a/data/locale/de.ts b/data/locale/de.ts index 7a8186bed..9934dc967 100644 --- a/data/locale/de.ts +++ b/data/locale/de.ts @@ -3,7 +3,54 @@ QObject Note detuning - Noten-Verstimmung + Noten-Verstimmung + + + + QWidget + + Name: + Name: + + + Maker: + Hersteller: + + + Copyright: + Copyright: + + + Requires Real Time: + Benötigt Echtzeit: + + + Yes + Ja + + + No + + + + Real Time Capable: + Echtzeitfähig: + + + In Place Broken: + + + + Channels In: + Eingangs-Kanäle: + + + Channels Out: + Ausgangs-Kanäle: + + + File: + Datei: @@ -50,10 +97,22 @@ Wenn Sie an der Übersetzung von LMMS in eine andere Sprache interessiert sind o Copyright (c) 2004-2006 LMMS-Developers http://lmms.sourceforge.net - LMMS - Ein leistungsfähiges Synthesizer-Studio + LMMS - Ein leistungsfähiges Synthesizer-Studio Copyright (c) 2004-2006 LMMS-Entwickler +http://lmms.sourceforge.net + + + LMMS - A powerful synthesizer-studio + +Copyright (c) 2004-2007 LMMS-Developers + +http://lmms.sourceforge.net + LMMS - Ein leistungsfähiges Synthesizer-Studio + +Copyright (c) 2004-2007 LMMS-Entwickler + http://lmms.sourceforge.net @@ -649,6 +708,10 @@ http://lmms.sourceforge.net END ENDE + + Loop + Wiederholen + automatableButton @@ -790,6 +853,49 @@ http://lmms.sourceforge.net If you click here, move-mode will be activated. In this mode you can move the values you selected in select-mode. You can also press 'Shift+M' on your keyboard to activate this mode. Wenn Sie hier klicken, wird der Auswahl-Verschieben-Modus aktiviert. In diesem Modus können Sie die markierten Werte verschieben. Sie können auch 'Umschalt+M' auf Ihrer Tastatur drücken, um diesen Modus zu aktivieren. + + Note detuning + Noten-Verstimmung + + + + bassBoosterControlDialog + + Frequency + Frequenz + + + FREQ + FREQ + + + Frequency: + Frequenz: + + + Gain + Gain + + + GAIN + GAIN + + + Gain: + Gain: + + + Ratio + Rate + + + RATIO + RATE + + + Ratio: + Rate: + bbEditor @@ -1153,6 +1259,13 @@ installiert sind. Soll der Einrichtungsassistent jetzt gestartet werden?LMMS-Arbeitsverzeichnis wählen + + effectList + + Description + Beschreibung + + effectSelectDialog @@ -1793,6 +1906,69 @@ Stellen Sie sicher, dass Sie Schreibzugriff auf die gewählte Datei/Gerät haben FX + + kickerInstrument + + Start frequency + Startfrequenz + + + START + START + + + Start frequency: + Startfrequenz: + + + End frequency + Endfrequenz + + + END + ENDE + + + End frequency: + Endfrequenz: + + + Decay + Abfallzeit + + + DECAY + ABFALL + + + Decay: + Abfallzeit (decay): + + + Distortion + Verzerrung + + + DIST + DIST + + + Distortion: + Verzerrung: + + + Gain + Gain + + + GAIN + GAIN + + + Gain: + Gain: + + knob @@ -1964,51 +2140,245 @@ Double clicking any of the plugins will bring up information on the ports.ladspaSubPluginDescriptionWidget Description - Beschreibung + Beschreibung Name: - Name: + Name: Maker: - Hersteller: + Hersteller: Copyright: - Copyright: + Copyright: Requires Real Time: Yes - Benötigt Echtzeit: ja + Benötigt Echtzeit: ja Requires Real Time: No - Benötigt Echtzeit: nein + Benötigt Echtzeit: nein Real Time Capable: Yes - Echtzeitfähig: ja + Echtzeitfähig: ja Real Time Capable: No - Echtzeitfähig: nein - - - In Place Broken: Yes - - - - In Place Broken: No - + Echtzeitfähig: nein Channels In: - Eingangs-Kanäle: + Eingangs-Kanäle: Channels Out: - Ausgangs-Kanäle: + Ausgangs-Kanäle: + + + + lb302Synth + + VCF Cutoff Frequency + VCF-Kennfrequenz + + + Cutoff Freq: + Kennfrequenz: + + + CUT + FREQ + + + VCF Resonance + VCF-Resonanz + + + Resonance: + Resonanz: + + + RES + RES + + + VCF Envelope Mod + VCF-Hüllkurvenintensität + + + Env Mod: + Hüllkurven-Modulation: + + + ENV MOD + + + + VCF Envelope Decay + VCF-Hüllkurvenabfallzeit + + + Decay: + Abfallzeit (decay): + + + DEC + DEC + + + Slide + + + + Accent + Betonung + + + Dead + Tot + + + 303-es-que, 24dB/octave, 3 pole filter + + + + Slide Decay + Slide-Abfallzeit + + + Slide Decay: + Slide-Abfallzeit: + + + SLIDE + + + + Fine detuning of the VCO. Ranged between -100 and 100 centes. + Feinverstimmung des VCOs. Bereich zwischen -100 und 100 Cents. + + + VCO Fine Detuning: + VCO Feinverstimmung: + + + DETUNE + + + + Distortion + Verzerrung + + + DIST: + Verzerrung: + + + DIST + + + + Waveform + Wellenform + + + WAVE: + Wellenform: + + + WAVE + WELLE + + + Sawtooth + Sägezahn + + + Inverted Sawtooth + Invertierter Sägezahn + + + Triangle + Dreieck + + + Square + Rechteck + + + Rounded Square + Abgerundetes Reckteck + + + Moog + Moog + + + + lb303Synth + + VCF Cutoff Frequency + VCF-Kennfrequenz + + + Cutoff Freq: + Kennfreq.: + + + VCF Resonance + VCF-Resonanz + + + Resonance: + Resonanz: + + + VCF Envelope Mod + VCF-Hüllkurvenintensität + + + VCF Envelope Decay + VCF-Hüllkurvenabfallzeit + + + Decay: + Abfallzeit (decay): + + + Accent + Betonung + + + Dead + Tot + + + Slide Decay + Slide-Abfallzeit + + + Slide Decay: + Slide-Abfallzeit: + + + Waveform + Wellenform + + + Fine detuning of the VCO. Ranged between -100 and 100 centes. + Feinverstimmung des VCOs. Bereich zwischen -100 und 100 Cents. + + + VCO Fine Detuning: + VCO Feinverstimmung: + + + Distortion + Verzerrung @@ -2037,6 +2407,19 @@ Double clicking any of the plugins will bring up information on the ports.--- Distributions-Dateien --- + + liveTool + + This tool is intended to be used in live performances, though you can use it for music production as well. +The following keys will work only if this window is active. +The spacebar toggles play and pause in the Song Editor. +F1-F10 keys mute the first 10 instruments in the Beat+Baseline Editor. + Dieses Werkzeug ist für die Verwendung in Live-Auftritten gedacht, allerdings können Sie es natürlich auch für die Musikproduktion verwenden. +Die folgenden Tasten funktionieren nur, wenn dieses Fenster im Vordergrund ist. +Leertaste wechselt zwischen Abspielen und Pause im Song-Editor. +F1-F10 schalten die ersten 10 Instrumente im Beat+Bassline-Editor stumm bzw. wieder zurück. + + mainWindow @@ -2133,11 +2516,11 @@ Double clicking any of the plugins will bring up information on the ports. Import file - Datei importieren + Datei importieren E&xport - E&xportieren + E&xportieren &Quit @@ -2235,7 +2618,7 @@ Bitte besuchen Sie http://wiki.mindrules.net für Dokumentationen über LMMS. LADSPA Plugins... - LADSPA-Plugins... + LADSPA-Plugins... MultiMedia Project (*.mmp *.mmpz *.xml) @@ -2245,6 +2628,26 @@ Bitte besuchen Sie http://wiki.mindrules.net für Dokumentationen über LMMS.MultiMedia Project (*.mmp *.mmpz);;MultiMedia Project Template (*.mpt) MultiMedia Projekt (*.mmp *.mmpz);;MultiMedia Projekt-Vorlage (*.mpt) + + &Tools + &Werkzeuge + + + Online help + Online-Hilfe + + + Recently opened projects + Zuletzt geöffnete Projekte + + + Import... + Importieren... + + + E&xport... + E&xportieren... + mallets @@ -2440,6 +2843,14 @@ Bitte besuchen Sie http://wiki.mindrules.net für Dokumentationen über LMMS.Tibetan Bowl Tibetanische Schüssel + + Missing files + Fehlende Dateien + + + Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! + Ihre Stk-Installation scheint unvollständig zu sein. Bitte stellen Sie sicher, dass das volle Stk-Paket installiert ist! + meterDialog @@ -2601,6 +3012,53 @@ Bitte besuchen Sie http://wiki.mindrules.net für Dokumentationen über LMMS.Würfeln + + patmanSynth + + Open other patch + Andere Patch-Datei öffnen + + + Click here to open another patch-file. Loop and Tune settings are not reset. + Klicken Sie hier, um eine andere Patch-Datei zu laden. Wiederholungs- und Stimmungseinstellungen werden nicht zurückgesetzt. + + + Loop + Wiederholen + + + Loop mode + Modus beim Wiederholen + + + Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. + Hier können Sie den Wiederholen-Modus (de-)aktivieren. Wenn aktiviert, verwendet PatMan die in der Datei verfügbaren Informationen zum Wiederholen. + + + Tune + Stimmung + + + Tune mode + Stimmungsmodus + + + Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. + Hier können Sie den Stimmungs-Modus (de-)aktivieren. Wenn aktiviert, wird der Klang automatisch an die Frequenz der Note angepasst. + + + No file selected + Keine Datei ausgewählt + + + Open patch file + Patch-Datei öffnen + + + Patch-Files (*.pat) + Patch-Dateien (*.pat) + + pattern @@ -2671,11 +3129,11 @@ Lautstärke eines Steps kann mit Mausrad geändert werden Pattern muted - Pattern stummgeschaltet + Pattern stummgeschaltet The track this pattern belongs to or the pattern itself is currently muted therefore freezing makes no sense! Do you still want to continue? - Die Spur, zu der dieser Pattern gehört oder dieser Pattern selbst sind derzeit stummgeschaltet, weshalb das Einfrieren keinen Sinn ergibt. Wollen Sie trotzdem fortfahren? + Die Spur, zu der dieser Pattern gehört oder dieser Pattern selbst sind derzeit stummgeschaltet, weshalb das Einfrieren keinen Sinn ergibt. Wollen Sie trotzdem fortfahren? @@ -2890,7 +3348,7 @@ Lautstärke eines Steps kann mit Mausrad geändert werden Rough & Dirty Wavetable Synthesizer. - + Einfacher & roher Wavetable-Synthesizer. You can drag an instrument-plugin into either the Song-Editor, the Beat+Baseline Editor or just into a channel-window or on the corresponding channel-button. @@ -2928,6 +3386,26 @@ Lautstärke eines Steps kann mit Mausrad geändert werden plugin for using arbitrary VST-effects inside LMMS. Plugin um beliebige VST-Effekte in LMMS nutzen zu können. + + Incomplete monophonic immitation tb303 + Unvollständiger monophonischer TB303-Klon + + + versatile kick- & bassdrum-synthesizer + Vielfältiger Kick- & Bassdrum-Synthesizer + + + GUS-compatible patch instrument + GUS-kompatibles Patch-Instrument + + + Singer bot to add some basic vocals + Künstlicher Sänger für ein paar einfache Vokale + + + Tool for live performance + Werkzeug für Live-Auftritte + projectNotes @@ -3104,7 +3582,7 @@ Lautstärke eines Steps kann mit Mausrad geändert werden Controls - Eigensch. + Regler Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. @@ -3199,12 +3677,20 @@ Wenn es mit anderer VST-software unter Linux funktioniert, kontaktieren Sie bitt All Audio-Files (*.wav *.ogg *.flac *.voc *.aif *.aiff *.au *.raw) - Alle Audio-Dateien (*.wav *.ogg *.flac *.voc *.aif *.aiff *.au *.raw) + Alle Audio-Dateien (*.wav *.ogg *.flac *.voc *.aif *.aiff *.au *.raw) FLAC-Files (*.flac) FLAC-Dateien (*.flac) + + All Audio-Files (*.wav *.ogg *.flac *.spx *.voc *.aif *.aiff *.au *.raw) + Alle Audio-Dateien (*.wav *.ogg *.flac *.spx *.voc *.aif *.aiff *.au *.raw) + + + SPEEX-Files (*.spx) + SPEEX-Dateien (*.spx) + sampleTCO @@ -3410,7 +3896,7 @@ Latenz: %2 ms SMP-level - SMP-Level + SMP-Level If you have a machine with more then one processor (e.g. dual-core systems) you should use a parallelizing-level above 1 which means that LMMS will try to split up sound-processing into several threads which should should be run on several cores by the underlaying operating-system. @@ -4377,15 +4863,15 @@ Die LED rechts unterhalb der Wellenform gibt an, ob die Saite aktiviert ist.vstSubPluginDescriptionWidget Description - Beschreibung + Beschreibung Name: - Name: + Name: File: - Datei: + Datei: diff --git a/data/projects/misc/mystic.mmp b/data/projects/misc/mystic.mmp index 9f7069629..64073eba8 100644 --- a/data/projects/misc/mystic.mmp +++ b/data/projects/misc/mystic.mmp @@ -1,129 +1,132 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + +

Some mystic gis-minor sounds...

]]>
-
-
+ + + diff --git a/include/config_mgr.h b/include/config_mgr.h index ec6346bf1..fa57c9123 100644 --- a/include/config_mgr.h +++ b/include/config_mgr.h @@ -169,6 +169,13 @@ public: } #endif + inline const QStringList & recentlyOpenedProjects( void ) const + { + return( m_recentlyOpenedProjects ); + } + + void addRecentlyOpenedProject( const QString & _file ); + const QString & value( const QString & _class, const QString & _attribute ) const; void setValue( const QString & _class, const QString & _attribute, @@ -227,6 +234,8 @@ private: #ifdef HAVE_STK_H QString m_stkDir; #endif + QStringList m_recentlyOpenedProjects; + typedef vvector > stringPairVector; typedef QMap settingsMap; @@ -257,6 +266,9 @@ private: QHBoxLayout * m_mainLayout; QVBoxLayout * m_contentLayout; + + friend class engine; + } ; #endif diff --git a/include/main_window.h b/include/main_window.h index 6f883e82d..dad08d7d6 100644 --- a/include/main_window.h +++ b/include/main_window.h @@ -110,14 +110,15 @@ public slots: } void createNewProject( void ); void createNewProjectFromTemplate( QAction * _idx ); - void createNewProjectFromTemplate( int _idx ); + void createNewProjectFromTemplate( int _id ); void openProject( void ); + void updateRecentlyOpenedProjectsMenu( void ); + void openRecentlyOpenedProject( int ); bool saveProject( void ); bool saveProjectAs( void ); void showSettingsDialog( void ); void aboutLMMS( void ); void help( void ); -// void ladspaPluginBrowser( void ); void toggleAutomationEditorWin( void ); void toggleBBEditorWin( void ); void toggleSongEditorWin( void ); @@ -151,6 +152,7 @@ private: QGridLayout * m_toolBarLayout; QMenu * m_templatesMenu; + QMenu * m_recentlyOpenedProjectsMenu; int m_custom_templates_count; struct keyModifiers diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 815e5b710..6a851ee47 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -26,8 +26,6 @@ SUBDIRS = \ midi_import \ organic \ patman \ - plucked_string_synth \ - polyb302 \ $(SINGERBOT_DIR) \ $(STK_DIR) \ triple_oscillator \ diff --git a/plugins/patman/patman.cpp b/plugins/patman/patman.cpp index 3081b1219..46a58e9ef 100644 --- a/plugins/patman/patman.cpp +++ b/plugins/patman/patman.cpp @@ -372,7 +372,15 @@ void patmanSynth::openFile( void ) if( m_patchFile == "" ) { - ofd.setDirectory( configManager::inst()->userSamplesDir() ); + if( QDir( "/usr/share/midi/freepats" ).exists() ) + { + ofd.setDirectory( "/usr/share/midi/freepats" ); + } + else + { + ofd.setDirectory( + configManager::inst()->userSamplesDir() ); + } } else if( QFileInfo( m_patchFile ).isRelative() ) { diff --git a/plugins/stk/mallets/mallets.cpp b/plugins/stk/mallets/mallets.cpp index f2ef32b56..4e40bd58e 100644 --- a/plugins/stk/mallets/mallets.cpp +++ b/plugins/stk/mallets/mallets.cpp @@ -32,6 +32,8 @@ #else #include +#include +#include #endif @@ -70,24 +72,40 @@ plugin::descriptor malletsstk_plugin_descriptor = } -mallets::mallets( instrumentTrack * _channel_track ) : - instrument( _channel_track, &malletsstk_plugin_descriptor ) +mallets::mallets( instrumentTrack * _instrument_track ) : + instrument( _instrument_track, &malletsstk_plugin_descriptor ), + m_filesMissing( TRUE ) { - m_modalBarWidget = setupModalBarControls( this, _channel_track ); + m_filesMissing = + !QDir( configManager::inst()->stkDir() ).exists() || + !QFileInfo( configManager::inst()->stkDir()+QDir::separator() + + "sinewave.raw" ).exists(); +#if 0 + // for some reason this crashes...??? + if( m_filesMissing ) + { + QMessageBox::information( 0, tr( "Missing files" ), + tr( "Your Stk-installation seems to be " + "incomplete. Please make sure " + "the full Stk-package is installed!" ), + QMessageBox::Ok ); + } +#endif + m_modalBarWidget = setupModalBarControls( this, _instrument_track ); setWidgetBackground( m_modalBarWidget, "artwork" ); - m_tubeBellWidget = setupTubeBellControls( this, _channel_track ); + m_tubeBellWidget = setupTubeBellControls( this, _instrument_track ); setWidgetBackground( m_tubeBellWidget, "artwork" ); m_tubeBellWidget->hide(); - m_bandedWGWidget = setupBandedWGControls( this, _channel_track ); + m_bandedWGWidget = setupBandedWGControls( this, _instrument_track ); setWidgetBackground( m_bandedWGWidget, "artwork" ); m_bandedWGWidget->hide(); - m_presets = setupPresets( this, _channel_track ); + m_presets = setupPresets( this, _instrument_track ); m_spread = new knob( knobBright_26, this, tr( "Spread" ), - _channel_track ); + _instrument_track ); m_spread->setLabel( tr( "Spread" ) ); m_spread->setRange( 0, 255, 1 ); m_spread->setInitValue( 0 ); @@ -390,6 +408,11 @@ QString mallets::nodeName( void ) const void mallets::playNote( notePlayHandle * _n, bool ) { + if( m_filesMissing ) + { + return; + } + int p = m_presets->value(); const float freq = _n->frequency(); diff --git a/plugins/stk/mallets/mallets.h b/plugins/stk/mallets/mallets.h index 2e3de34c8..5a6d41703 100644 --- a/plugins/stk/mallets/mallets.h +++ b/plugins/stk/mallets/mallets.h @@ -172,7 +172,9 @@ private: vvector m_scalers; sampleFrame * m_buffer; -}; + bool m_filesMissing; + +} ; #endif diff --git a/plugins/vibed/vibed.cpp b/plugins/vibed/vibed.cpp index 3a0cb6494..635ac0f98 100644 --- a/plugins/vibed/vibed.cpp +++ b/plugins/vibed/vibed.cpp @@ -480,7 +480,8 @@ void vibed::loadSettings( const QDomElement & _this ) name = "active" + QString::number( i ); m_editors[i]->setOn( _this.attribute( name ).toInt() ); - if( m_editors[i]->isOn() ) + if( m_editors[i]->isOn() && + _this.hasAttribute( "volume" + QString::number( i ) ) ) { name = "volume" + QString::number( i ); m_volumeKnobs[i]->loadSettings( _this, name ); diff --git a/src/audio/audio_jack.cpp b/src/audio/audio_jack.cpp index 1f65dc8b2..a27d0f22d 100644 --- a/src/audio/audio_jack.cpp +++ b/src/audio/audio_jack.cpp @@ -279,8 +279,8 @@ void audioJACK::stopProcessing( void ) void audioJACK::registerPort( audioPort * _port ) { - return; -/* // make sure, port is not already registered +#ifdef AUDIO_PORT_SUPPORT + // make sure, port is not already registered unregisterPort( _port ); const QString name[2] = { _port->name() + " L", _port->name() + " R" } ; @@ -296,7 +296,8 @@ void audioJACK::registerPort( audioPort * _port ) #endif JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ); - }*/ + } +#endif } @@ -304,8 +305,8 @@ void audioJACK::registerPort( audioPort * _port ) void audioJACK::unregisterPort( audioPort * _port ) { - return; -/* if( m_portMap.contains( _port ) ) +#ifdef AUDIO_PORT_SUPPORT + if( m_portMap.contains( _port ) ) { for( Uint8 ch = 0; ch < DEFAULT_CHANNELS; ++ch ) { @@ -316,7 +317,8 @@ void audioJACK::unregisterPort( audioPort * _port ) } } m_portMap.erase( m_portMap.find( _port ) ); - }*/ + } +#endif } @@ -324,8 +326,8 @@ void audioJACK::unregisterPort( audioPort * _port ) void audioJACK::renamePort( audioPort * _port ) { - return; -/* if( m_portMap.contains( _port ) ) +#ifdef AUDIO_PORT_SUPPORT + if( m_portMap.contains( _port ) ) { const QString name[2] = { _port->name() + " L", _port->name() + " R" }; @@ -340,7 +342,8 @@ void audioJACK::renamePort( audioPort * _port ) #endif ) ; } - }*/ + } +#endif } @@ -368,12 +371,13 @@ int audioJACK::processCallback( jack_nframes_t _nframes, void * _udata ) _this->m_outputPorts[chnl], _nframes ); } -/* const Uint32 frames = tMin( _nframes, - getMixer()->framesPerPeriod() ); +#ifdef AUDIO_PORT_SUPPORT + const Uint32 frames = tMin( _nframes, + _this->getMixer()->framesPerPeriod() ); for( jackPortMap::iterator it = _this->m_portMap.begin(); it != _this->m_portMap.end(); ++it ) { - for( Uint8 ch = 0; ch < DEFAULT_CHANNELS; ++ch ) + for( Uint8 ch = 0; ch < _this->channels(); ++ch ) { if( it.data().ports[ch] == NULL ) { @@ -385,10 +389,11 @@ int audioJACK::processCallback( jack_nframes_t _nframes, void * _udata ) _nframes ); for( Uint32 frame = 0; frame < frames; ++frame ) { - buf[frame] = it.key()->firstBuffer()[ch][frame]; + buf[frame] = it.key()->firstBuffer()[frame][ch]; } } - }*/ + } +#endif jack_nframes_t done = 0; while( done < _nframes && _this->m_stopped == FALSE ) @@ -465,7 +470,7 @@ audioJACK::setupWidget::setupWidget( QWidget * _parent ) : audioDevice::setupWidget( audioJACK::name(), _parent ) { QString cn = configManager::inst()->value( "audiojack", "clientname" ); - if( cn == "" ) + if( cn.isEmpty() ) { cn = "lmms"; } diff --git a/src/core/config_mgr.cpp b/src/core/config_mgr.cpp index 698cbd0cc..76037bd20 100644 --- a/src/core/config_mgr.cpp +++ b/src/core/config_mgr.cpp @@ -729,6 +729,25 @@ void configManager::addPage( QWidget * _w, const QString & _title ) +void configManager::addRecentlyOpenedProject( const QString & _file ) +{ + if( m_recentlyOpenedProjects.size() > 15 ) + { + m_recentlyOpenedProjects.remove( + m_recentlyOpenedProjects.last() ); + } + QStringList::iterator it; + while( ( it = m_recentlyOpenedProjects.find( _file ) ) != + m_recentlyOpenedProjects.end() ) + { + m_recentlyOpenedProjects.remove( it ); + } + m_recentlyOpenedProjects.push_front( _file ); +} + + + + const QString & configManager::value( const QString & _class, const QString & _attribute ) const { @@ -845,6 +864,22 @@ bool configManager::loadConfigFile( void ) } m_settings[node.nodeName()] = attr; } + else if( node.nodeName() == "recentfiles" ) + { + m_recentlyOpenedProjects.clear(); + QDomNode n = node.firstChild(); + while( !n.isNull() ) + { + if( n.isElement() && + n.toElement().hasAttributes() ) + { + m_recentlyOpenedProjects << + n.toElement(). + attribute( "path" ); + } + n = n.nextSibling(); + } + } node = node.nextSibling(); } @@ -965,6 +1000,17 @@ void configManager::saveConfigFile( void ) lmms_config.appendChild( n ); } + QDomElement recent_files = doc.createElement( "recentfiles" ); + + for( QStringList::iterator it = m_recentlyOpenedProjects.begin(); + it != m_recentlyOpenedProjects.end(); ++it ) + { + QDomElement n = doc.createElement( "file" ); + n.setAttribute( "path", *it ); + recent_files.appendChild( n ); + } + lmms_config.appendChild( recent_files ); + #if QT_VERSION >= 0x030100 QString xml = "\n" + doc.toString( 2 ); #else diff --git a/src/core/engine.cpp b/src/core/engine.cpp index fc0bbd997..d5efa4559 100644 --- a/src/core/engine.cpp +++ b/src/core/engine.cpp @@ -27,6 +27,7 @@ #include "automation_editor.h" #include "bb_editor.h" +#include "config_mgr.h" #include "project_journal.h" #include "engine.h" #include "main_window.h" @@ -118,6 +119,8 @@ void engine::destroy( void ) delete s_projectJournal; s_projectJournal = NULL; s_mainWindow = NULL; + + delete configManager::inst(); } diff --git a/src/core/main_window.cpp b/src/core/main_window.cpp index 7671ec5c9..961922057 100644 --- a/src/core/main_window.cpp +++ b/src/core/main_window.cpp @@ -81,6 +81,7 @@ #include "tool_button.h" #include "project_journal.h" #include "automation_editor.h" +#include "templates.h" #if QT_VERSION >= 0x030100 @@ -98,6 +99,7 @@ mainWindow::mainWindow( void ) : ), m_workspace( NULL ), m_templatesMenu( NULL ), + m_recentlyOpenedProjectsMenu( NULL ), m_tools_menu( NULL ) { #ifdef QT4 @@ -217,20 +219,7 @@ mainWindow::mainWindow( void ) : mainWindow::~mainWindow() { -/* // first make sure, there're no mixing/audio-device-threads any more - engine::getMixer()->stopProcessing(); - - // destroy editors with all their children - delete engine::getSongEditor(); - delete engine::getBBEditor(); - - - - // destroy mixer - delete engine::getMixer(); - - // destroy config-manager (which automatically saves config-file) -*/ + // destroy engine which will do further cleanups etc. engine::destroy(); } @@ -436,6 +425,10 @@ void mainWindow::finalize( void ) m_toolBarLayout->setColumnStretch( 100, 1 ); + m_recentlyOpenedProjectsMenu = new QMenu( NULL ); + connect( m_recentlyOpenedProjectsMenu, SIGNAL( activated( int ) ), + this, SLOT( openRecentlyOpenedProject( int ) ) ); + updateRecentlyOpenedProjectsMenu(); // project-popup-menu QMenu * project_menu = new QMenu( this ); @@ -454,6 +447,10 @@ void mainWindow::finalize( void ) this, SLOT( openProject() ), Qt::CTRL + Qt::Key_O ); + project_menu->addAction( embed::getIconPixmap( "project_open" ), + tr( "Recently opened projects" ), + m_recentlyOpenedProjectsMenu ); + project_menu->addAction( embed::getIconPixmap( "project_save" ), tr( "&Save" ), this, SLOT( saveProject() ), @@ -469,16 +466,11 @@ void mainWindow::finalize( void ) project_menu->insertSeparator(); #endif project_menu->addAction( /*embed::getIconPixmap( "project_import" ),*/ - tr( "Import file" ), + tr( "Import..." ), engine::getSongEditor(), SLOT( importProject() ) ); -#ifdef QT4 - project_menu->addSeparator(); -#else - project_menu->insertSeparator(); -#endif project_menu->addAction( embed::getIconPixmap( "project_export" ), - tr( "E&xport" ), + tr( "E&xport..." ), engine::getSongEditor(), SLOT( exportProject() ), Qt::CTRL + Qt::Key_E ); @@ -577,19 +569,6 @@ void mainWindow::finalize( void ) tr( "What's this?" ), this, SLOT( enterWhatsThisMode() ) ); -#if 0 -#ifdef LADSPA_SUPPORT -#ifdef QT4 - help_menu->addSeparator(); -#else - help_menu->insertSeparator(); -#endif - help_menu->addAction( embed::getIconPixmap( "help" ), tr( "LADSPA Plugins..." ), - this, SLOT( ladspaPluginBrowser() ) ); -#endif -#endif - - #ifdef QT4 help_menu->addSeparator(); #else @@ -702,7 +681,8 @@ void mainWindow::saveWidgetState( QWidget * _w, QDomElement & _de ) void mainWindow::restoreWidgetState( QWidget * _w, const QDomElement & _de ) { - QRect r( _de.attribute( "x" ).toInt(), _de.attribute( "y" ).toInt(), + QRect r( tMax( 0, _de.attribute( "x" ).toInt() ), + tMax( 0, _de.attribute( "y" ).toInt() ), _de.attribute( "width" ).toInt(), _de.attribute( "height" ).toInt() ); if( !r.isNull() && _w->parentWidget() != NULL ) @@ -792,6 +772,9 @@ void mainWindow::openProject( void ) { engine::getSongEditor()->loadProject( ofd.selectedFiles()[0] ); + configManager::inst()->addRecentlyOpenedProject( + ofd.selectedFiles()[0] ); + updateRecentlyOpenedProjectsMenu(); } } } @@ -799,6 +782,30 @@ void mainWindow::openProject( void ) +void mainWindow::updateRecentlyOpenedProjectsMenu( void ) +{ + m_recentlyOpenedProjectsMenu->clear(); + QStringList rup = configManager::inst()->recentlyOpenedProjects(); + for( QStringList::iterator it = rup.begin(); it != rup.end(); ++it ) + { + m_recentlyOpenedProjectsMenu->addAction( *it ); + } +} + + + + +void mainWindow::openRecentlyOpenedProject( int _id ) +{ + const QString & f = m_recentlyOpenedProjectsMenu->text( _id ); + engine::getSongEditor()->loadProject( f ); + configManager::inst()->addRecentlyOpenedProject( f ); + updateRecentlyOpenedProjectsMenu(); +} + + + + bool mainWindow::saveProject( void ) { if( engine::getSongEditor()->projectFileName() == "" ) @@ -858,6 +865,9 @@ bool mainWindow::saveProjectAs( void ) #else engine::getSongEditor()->saveProjectAs( sfd.selectedFile() ); #endif + configManager::inst()->addRecentlyOpenedProject( + sfd.selectedFiles()[0] ); + updateRecentlyOpenedProjectsMenu(); return( TRUE ); } return( FALSE ); @@ -896,19 +906,6 @@ void mainWindow::help( void ) -#if 0 -void mainWindow::ladspaPluginBrowser( void ) -{ - // moc for Qt 3.x doesn't recognize preprocessor directives, - // so we can't just block the whole thing out. -#ifdef LADSPA_SUPPORT - ladspaBrowser lb; - lb.exec(); -#endif -} -#endif - - void mainWindow::toggleBBEditorWin( void ) { @@ -1167,8 +1164,8 @@ void mainWindow::browseHelp( void ) } else if( pid == 0 ) { - QString url = "http://wiki.mindrules.net/doku.php?id=" - + tr( "start", "doku.php id" ); +// TODO: use QDesktopService with Qt4 + QString url = "http://lmms.sf.net/wiki/index.php?title=Main_Page"; execlp( "x-www-browser", "x-www-browser", url. #ifdef QT4 toAscii().constData(), diff --git a/src/core/mixer.cpp b/src/core/mixer.cpp index 69f43ae6a..cf4846ee7 100644 --- a/src/core/mixer.cpp +++ b/src/core/mixer.cpp @@ -288,7 +288,7 @@ const surroundSampleFrame * mixer::renderNextBuffer( void ) // clear last audio-buffer clearAudioBuffer( m_writeBuf, m_framesPerPeriod ); -printf("---------------------------next period\n"); +//printf("---------------------------next period\n"); // if( criticalXRuns() == FALSE ) { engine::getSongEditor()->processNextBuffer(); @@ -745,7 +745,7 @@ void mixer::processBuffer( const surroundSampleFrame * _buf, for( ch_cnt_t chnl = 0; chnl < m_audioDev->channels(); ++chnl ) { m_writeBuf[frame][chnl] += _buf[frame][chnl]; - + if( m_scaleClip ) { scaleClip( frame, chnl ); diff --git a/src/lib/journalling_object.cpp b/src/lib/journalling_object.cpp index 931c47a96..3921728cc 100644 --- a/src/lib/journalling_object.cpp +++ b/src/lib/journalling_object.cpp @@ -68,7 +68,6 @@ journallingObject::~journallingObject() void journallingObject::undo( void ) { - printf("undo: %d\n", id() ); if( m_journalEntries.empty() == TRUE ) { return; @@ -85,7 +84,6 @@ void journallingObject::undo( void ) void journallingObject::redo( void ) { - printf("undo: %d\n", id() ); if( m_journalEntries.empty() == TRUE ) { return; diff --git a/src/lib/mmp.cpp b/src/lib/mmp.cpp index 1e6086445..6c6cac23d 100644 --- a/src/lib/mmp.cpp +++ b/src/lib/mmp.cpp @@ -537,7 +537,7 @@ void multimediaProject::upgrade( void ) { el.setAttribute( "chord-enabled", TRUE ); el.setAttribute( "arp-enabled", - el.attribute( "arpdir" ).toInt() != 0 ); + el.attribute( "arpdir" ).toInt() != 0 ); } } @@ -594,6 +594,24 @@ void multimediaProject::upgrade( void ) } } + if( version < "0.3.0" ) + { + QDomNodeList list = elementsByTagName( "pluckedstringsynth" ); + for( int i = 0; !list.item( i ).isNull(); ++i ) + { + QDomElement el = list.item( i ).toElement(); + el.setTagName( "vibedstrings" ); + el.setAttribute( "active0", 1 ); + } + + list = elementsByTagName( "lb303" ); + for( int i = 0; !list.item( i ).isNull(); ++i ) + { + QDomElement el = list.item( i ).toElement(); + el.setTagName( "lb302" ); + } + } + if( !m_head.hasAttribute( "mastervol" ) ) { m_head.setAttribute( "mastervol", 100 ); diff --git a/src/lib/project_journal.cpp b/src/lib/project_journal.cpp index cc4228033..15c085b41 100644 --- a/src/lib/project_journal.cpp +++ b/src/lib/project_journal.cpp @@ -103,7 +103,6 @@ void projectJournal::journalEntryAdded( const jo_id_t _id ) m_journalEntries.push_back( _id ); m_currentJournalEntry = m_journalEntries.end(); engine::getSongEditor()->setModified(); - printf("history size: %d\n", m_journalEntries.size() ); } diff --git a/src/widgets/knob.cpp b/src/widgets/knob.cpp index b74ad45a6..cfb416ede 100644 --- a/src/widgets/knob.cpp +++ b/src/widgets/knob.cpp @@ -411,13 +411,13 @@ void knob::dropEvent( QDropEvent * _de ) QString val = stringPairDrag::decodeValue( _de ); if( type == "float_value" ) { - printf("set val\n"); + //printf("set val\n"); setValue( val.toFloat() ); _de->accept(); } else if( type == "link_object" ) { - printf("link!\n"); + //printf("link!\n"); knob * obj = (knob *)( val.toULong() ); linkObjects( this, obj ); obj->setValue( value() );