From d70eb829c5084c347d826e681620f9c56b179202 Mon Sep 17 00:00:00 2001 From: Javier Serrano Polo Date: Tue, 19 Dec 2006 12:21:25 +0000 Subject: [PATCH] added tool plugins git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@441 0778d3d1-df1d-0410-868b-ea421aaaa00d --- ChangeLog | 36 ++++ Makefile.am | 2 + configure.in | 5 +- data/locale/Makefile.am | 6 +- data/presets/AudioFileProcessor/Makefile.am | 2 +- data/presets/BitInvader/Makefile.am | 2 +- data/presets/Organic/Makefile.am | 2 +- data/presets/PluckedStringSynth/Makefile.am | 2 +- data/presets/TripleOscillator/Makefile.am | 2 +- data/presets/VeSTige/Makefile.am | 2 +- data/projects/cool_songs/Makefile.am | 2 +- data/projects/covers/Makefile.am | 2 +- data/projects/demos/Makefile.am | 2 +- data/projects/misc/Makefile.am | 2 +- data/projects/recorded_loops/Makefile.am | 4 +- data/projects/templates/Makefile.am | 2 +- data/projects/tutorials/Makefile.am | 2 +- data/samples/basses/Makefile.am | 2 +- data/samples/bassloopes/Makefile.am | 2 +- data/samples/beats/Makefile.am | 2 +- data/samples/drums/Makefile.am | 2 +- data/samples/effects/Makefile.am | 2 +- data/samples/instruments/Makefile.am | 2 +- data/samples/latin/Makefile.am | 2 +- data/samples/misc/Makefile.am | 2 +- data/samples/shapes/Makefile.am | 2 +- data/samples/stringsnpads/Makefile.am | 2 +- data/themes/Makefile.am | 6 +- data/track_icons/Makefile.am | 2 +- include/main_window.h | 5 + include/plugin.h | 2 +- include/tool.h | 63 +++++++ plugins/Makefile.am | 16 +- .../ladspa_subplugin_features.cpp | 2 +- plugins/live_tool/Makefile.am | 33 ++++ plugins/live_tool/artwork.png | Bin 0 -> 12599 bytes plugins/live_tool/live_tool.cpp | 163 ++++++++++++++++++ plugins/live_tool/live_tool.h | 59 +++++++ plugins/live_tool/logo.png | Bin 0 -> 3602 bytes plugins/vst_base/Makefile.am | 3 +- src/core/main_window.cpp | 44 ++++- src/core/tool.cpp | 70 ++++++++ src/lmms_single_source.cpp | 1 + 43 files changed, 524 insertions(+), 42 deletions(-) create mode 100644 include/tool.h create mode 100644 plugins/live_tool/Makefile.am create mode 100644 plugins/live_tool/artwork.png create mode 100644 plugins/live_tool/live_tool.cpp create mode 100644 plugins/live_tool/live_tool.h create mode 100644 plugins/live_tool/logo.png create mode 100644 src/core/tool.cpp diff --git a/ChangeLog b/ChangeLog index 5f3a153ef..486de7229 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,39 @@ +2006-12-19 Javier Serrano Polo + + * include/tool.h: + * src/core/tool.cpp: + initial release, base class for all tool plugins + + * include/plugin.h: + * plugins/ladspa_effect/ladspa_subplugin_features.cpp: + renamed AnalysisTools to Tool + + * include/main_window.h: + * src/core/main_window.cpp: + added tools menu + + * Makefile.am: + * src/lmms_single_source.cpp: + added tool plugins + + * configure.in: + * plugins/live_tool/artwork.png: + * plugins/live_tool/live_tool.cpp: + * plugins/live_tool/live_tool.h: + * plugins/live_tool/logo.png: + * plugins/live_tool/Makefile.am: + added live tool, an example tool plugin + + * plugins/Makefile.am: + - added live tool + - eased SVN merging + + * data/*/Makefile.am: + * data/*/*/Makefile.am: + * plugins/vst_base/Makefile.am: + - removed wildcard extension for POSIX compliance + - fixed additional automake 1.10 issues + 2006-12-18 Tobias Doerffel * plugins/bass_booster/bassboster_control_dialog.h: diff --git a/Makefile.am b/Makefile.am index 69df2fd36..8a3494938 100644 --- a/Makefile.am +++ b/Makefile.am @@ -166,6 +166,7 @@ lmms_SOURCES = \ $(srcdir)/src/core/sample_play_handle.cpp \ $(srcdir)/src/core/setup_dialog.cpp \ $(srcdir)/src/core/song_editor.cpp \ + $(srcdir)/src/core/tool.cpp \ $(srcdir)/src/core/track.cpp \ $(srcdir)/src/core/track_container.cpp \ $(srcdir)/src/core/surround_area.cpp \ @@ -324,6 +325,7 @@ lmms_SOURCES = \ $(srcdir)/include/string_pair_drag.h \ $(srcdir)/include/midi_tab_widget.h \ $(srcdir)/include/audio_port.h \ + $(srcdir)/include/tool.h \ $(srcdir)/include/tool_button.h \ $(srcdir)/include/cpuload_widget.h \ $(srcdir)/include/midi_alsa_seq.h \ diff --git a/configure.in b/configure.in index 87e51ee08..a37f87b66 100644 --- a/configure.in +++ b/configure.in @@ -2,8 +2,8 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.50) -AC_INIT(lmms, 0.2.1-svn20061217, lmms-devel/at/lists/dot/sf/dot/net) -AM_INIT_AUTOMAKE(lmms, 0.2.1-svn20061217) +AC_INIT(lmms, 0.2.1-svn20061219, lmms-devel/at/lists/dot/sf/dot/net) +AM_INIT_AUTOMAKE(lmms, 0.2.1-svn20061219) AM_CONFIG_HEADER(config.h) @@ -560,6 +560,7 @@ AC_CONFIG_FILES([Makefile plugins/ladspa_base/Makefile plugins/ladspa_effect/Makefile plugins/ladspa_effect/caps/Makefile + plugins/live_tool/Makefile plugins/midi_import/Makefile plugins/organic/Makefile plugins/plucked_string_synth/Makefile diff --git a/data/locale/Makefile.am b/data/locale/Makefile.am index 59d66b88e..a58117760 100755 --- a/data/locale/Makefile.am +++ b/data/locale/Makefile.am @@ -1,7 +1,7 @@ localedir = $(lmmsdatadir)/locale -locale_DATA = $(wildcard *.qm) -locale_SOURCES = $(wildcard *.ts) +locale_DATA = *.qm +locale_TSOURCES = *.ts -EXTRA_DIST = $(locale_DATA) $(locale_SOURCES) +EXTRA_DIST = $(locale_DATA) $(locale_TSOURCES) diff --git a/data/presets/AudioFileProcessor/Makefile.am b/data/presets/AudioFileProcessor/Makefile.am index b42ac19ee..634c12d70 100755 --- a/data/presets/AudioFileProcessor/Makefile.am +++ b/data/presets/AudioFileProcessor/Makefile.am @@ -1,6 +1,6 @@ afppresetsdir = $(lmmsdatadir)/presets/AudioFileProcessor -afppresets_DATA = $(wildcard *.cs.xml) +afppresets_DATA = *.cs.xml EXTRA_DIST = $(afppresets_DATA) diff --git a/data/presets/BitInvader/Makefile.am b/data/presets/BitInvader/Makefile.am index 9bfcb7f2d..7094a3c73 100755 --- a/data/presets/BitInvader/Makefile.am +++ b/data/presets/BitInvader/Makefile.am @@ -1,5 +1,5 @@ bipresetsdir = $(lmmsdatadir)/presets/BitInvader -bipresets_DATA = $(wildcard *.cs.xml) +bipresets_DATA = *.cs.xml EXTRA_DIST = $(bipresets_DATA) diff --git a/data/presets/Organic/Makefile.am b/data/presets/Organic/Makefile.am index 67c524f32..7ba3b5637 100644 --- a/data/presets/Organic/Makefile.am +++ b/data/presets/Organic/Makefile.am @@ -1,6 +1,6 @@ psspresetsdir = $(lmmsdatadir)/presets/Organic -psspresets_DATA = $(wildcard *.cs.xml) +psspresets_DATA = *.cs.xml EXTRA_DIST = $(psspresets_DATA) diff --git a/data/presets/PluckedStringSynth/Makefile.am b/data/presets/PluckedStringSynth/Makefile.am index 0d3e709db..fd0181261 100755 --- a/data/presets/PluckedStringSynth/Makefile.am +++ b/data/presets/PluckedStringSynth/Makefile.am @@ -1,6 +1,6 @@ psspresetsdir = $(lmmsdatadir)/presets/PluckedStringSynth -psspresets_DATA = $(wildcard *.cs.xml) +psspresets_DATA = *.cs.xml EXTRA_DIST = $(psspresets_DATA) diff --git a/data/presets/TripleOscillator/Makefile.am b/data/presets/TripleOscillator/Makefile.am index 5a711c0cf..ec7f96fb5 100755 --- a/data/presets/TripleOscillator/Makefile.am +++ b/data/presets/TripleOscillator/Makefile.am @@ -1,6 +1,6 @@ topresetsdir = $(lmmsdatadir)/presets/TripleOscillator -topresets_DATA = $(wildcard *.cs.xml) +topresets_DATA = *.cs.xml EXTRA_DIST = $(topresets_DATA) diff --git a/data/presets/VeSTige/Makefile.am b/data/presets/VeSTige/Makefile.am index 527e96ed7..7dc119bfa 100755 --- a/data/presets/VeSTige/Makefile.am +++ b/data/presets/VeSTige/Makefile.am @@ -1,6 +1,6 @@ vstpresetsdir = $(lmmsdatadir)/presets/VeSTige -vstpresets_DATA = $(wildcard *.cs.xml) +vstpresets_DATA = *.cs.xml EXTRA_DIST = $(vstpresets_DATA) diff --git a/data/projects/cool_songs/Makefile.am b/data/projects/cool_songs/Makefile.am index 2dab751a2..7ecd52d76 100755 --- a/data/projects/cool_songs/Makefile.am +++ b/data/projects/cool_songs/Makefile.am @@ -1,6 +1,6 @@ coolsongsdir = $(lmmsdatadir)/projects/cool_songs -coolsongs_DATA = $(wildcard *.mmp) +coolsongs_DATA = *.mmp EXTRA_DIST = $(coolsongs_DATA) diff --git a/data/projects/covers/Makefile.am b/data/projects/covers/Makefile.am index a2bd40fdd..a2ca5f340 100755 --- a/data/projects/covers/Makefile.am +++ b/data/projects/covers/Makefile.am @@ -1,6 +1,6 @@ coversdir = $(lmmsdatadir)/projects/covers -covers_DATA = $(wildcard *.mmp) +covers_DATA = *.mmp EXTRA_DIST = $(covers_DATA) diff --git a/data/projects/demos/Makefile.am b/data/projects/demos/Makefile.am index cec23c10c..878ff233d 100755 --- a/data/projects/demos/Makefile.am +++ b/data/projects/demos/Makefile.am @@ -1,6 +1,6 @@ demosdir = $(lmmsdatadir)/projects/demos -demos_DATA = $(wildcard *.mmp) +demos_DATA = *.mmp EXTRA_DIST = $(demos_DATA) diff --git a/data/projects/misc/Makefile.am b/data/projects/misc/Makefile.am index e8aa117f1..1bf335f0b 100755 --- a/data/projects/misc/Makefile.am +++ b/data/projects/misc/Makefile.am @@ -1,6 +1,6 @@ miscdir = $(lmmsdatadir)/projects/misc -misc_DATA = $(wildcard *.mmp) +misc_DATA = *.mmp EXTRA_DIST = $(misc_DATA) diff --git a/data/projects/recorded_loops/Makefile.am b/data/projects/recorded_loops/Makefile.am index bd0b05761..054b7543e 100755 --- a/data/projects/recorded_loops/Makefile.am +++ b/data/projects/recorded_loops/Makefile.am @@ -1,6 +1,6 @@ recordedloopsdir = $(lmmsdatadir)/projects/recorded_loops -recordedloops_DATA = $(wildcard *.mmp) +#recordedloops_DATA = *.mmp -EXTRA_DIST = $(recordedloops_DATA) +#EXTRA_DIST = $(recordedloops_DATA) diff --git a/data/projects/templates/Makefile.am b/data/projects/templates/Makefile.am index 25ad77fc5..d9c684e99 100755 --- a/data/projects/templates/Makefile.am +++ b/data/projects/templates/Makefile.am @@ -1,6 +1,6 @@ templatesdir = $(lmmsdatadir)/projects/templates -templates_DATA = $(wildcard *.mpt) +templates_DATA = *.mpt EXTRA_DIST = $(templates_DATA) diff --git a/data/projects/tutorials/Makefile.am b/data/projects/tutorials/Makefile.am index 4c0e3243e..05613824b 100755 --- a/data/projects/tutorials/Makefile.am +++ b/data/projects/tutorials/Makefile.am @@ -1,6 +1,6 @@ tutorialsdir = $(lmmsdatadir)/projects/tutorials -tutorials_DATA = $(wildcard *.mmp) +tutorials_DATA = *.mmp EXTRA_DIST = $(tutorials_DATA) diff --git a/data/samples/basses/Makefile.am b/data/samples/basses/Makefile.am index fcdef3bf7..843acefbc 100755 --- a/data/samples/basses/Makefile.am +++ b/data/samples/basses/Makefile.am @@ -1,6 +1,6 @@ bassessamplesdir = $(lmmsdatadir)/samples/basses -bassessamples_DATA = $(wildcard *.wav *.ogg) +bassessamples_DATA = *.ogg EXTRA_DIST = $(bassessamples_DATA) diff --git a/data/samples/bassloopes/Makefile.am b/data/samples/bassloopes/Makefile.am index 4e4acc45f..fb1b486b0 100755 --- a/data/samples/bassloopes/Makefile.am +++ b/data/samples/bassloopes/Makefile.am @@ -1,6 +1,6 @@ bassloopessamplesdir = $(lmmsdatadir)/samples/bassloopes -bassloopessamples_DATA = $(wildcard *.wav *.ogg) +bassloopessamples_DATA = *.ogg EXTRA_DIST = $(bassloopessamples_DATA) diff --git a/data/samples/beats/Makefile.am b/data/samples/beats/Makefile.am index 41551478d..6de81ff14 100755 --- a/data/samples/beats/Makefile.am +++ b/data/samples/beats/Makefile.am @@ -1,6 +1,6 @@ beatssamplesdir = $(lmmsdatadir)/samples/beats -beatssamples_DATA = $(wildcard *.wav *.ogg) +beatssamples_DATA = *.ogg EXTRA_DIST = $(beatssamples_DATA) diff --git a/data/samples/drums/Makefile.am b/data/samples/drums/Makefile.am index cfee3a0bc..eac8db9c6 100755 --- a/data/samples/drums/Makefile.am +++ b/data/samples/drums/Makefile.am @@ -1,6 +1,6 @@ drumssamplesdir = $(lmmsdatadir)/samples/drums -drumssamples_DATA = $(wildcard *.wav *.ogg) +drumssamples_DATA = *.ogg EXTRA_DIST = $(drumssamples_DATA) diff --git a/data/samples/effects/Makefile.am b/data/samples/effects/Makefile.am index 5783f61e5..a1b79c790 100755 --- a/data/samples/effects/Makefile.am +++ b/data/samples/effects/Makefile.am @@ -1,6 +1,6 @@ effectssamplesdir = $(lmmsdatadir)/samples/effects -effectssamples_DATA = $(wildcard *.wav *.ogg) +effectssamples_DATA = *.ogg EXTRA_DIST = $(effectssamples_DATA) diff --git a/data/samples/instruments/Makefile.am b/data/samples/instruments/Makefile.am index f86b104bc..ba6788b54 100755 --- a/data/samples/instruments/Makefile.am +++ b/data/samples/instruments/Makefile.am @@ -1,6 +1,6 @@ instrumentssamplesdir = $(lmmsdatadir)/samples/instruments -instrumentssamples_DATA = $(wildcard *.wav *.ogg) +instrumentssamples_DATA = *.ogg EXTRA_DIST = $(instrumentssamples_DATA) diff --git a/data/samples/latin/Makefile.am b/data/samples/latin/Makefile.am index cc7e7a599..c1ca07265 100755 --- a/data/samples/latin/Makefile.am +++ b/data/samples/latin/Makefile.am @@ -1,6 +1,6 @@ latinsamplesdir = $(lmmsdatadir)/samples/latin -latinsamples_DATA = $(wildcard *.wav *.ogg) +latinsamples_DATA = *.ogg EXTRA_DIST = $(latinsamples_DATA) diff --git a/data/samples/misc/Makefile.am b/data/samples/misc/Makefile.am index ec3eb1977..db3b44803 100755 --- a/data/samples/misc/Makefile.am +++ b/data/samples/misc/Makefile.am @@ -1,6 +1,6 @@ miscsamplesdir = $(lmmsdatadir)/samples/misc -miscsamples_DATA = $(wildcard *.wav *.ogg) +miscsamples_DATA = *.ogg EXTRA_DIST = $(miscsamples_DATA) diff --git a/data/samples/shapes/Makefile.am b/data/samples/shapes/Makefile.am index 1ad1bcca2..f7e7a5973 100755 --- a/data/samples/shapes/Makefile.am +++ b/data/samples/shapes/Makefile.am @@ -1,6 +1,6 @@ shapessamplesdir = $(lmmsdatadir)/samples/shapes -shapessamples_DATA = $(wildcard *.wav *.ogg) +shapessamples_DATA = *.wav *.ogg EXTRA_DIST = $(shapessamples_DATA) diff --git a/data/samples/stringsnpads/Makefile.am b/data/samples/stringsnpads/Makefile.am index 69fb02a9c..18a179ddf 100755 --- a/data/samples/stringsnpads/Makefile.am +++ b/data/samples/stringsnpads/Makefile.am @@ -1,6 +1,6 @@ stringsnpadssamplesdir = $(lmmsdatadir)/samples/stringsnpads -stringsnpadssamples_DATA = $(wildcard *.wav *.ogg) +stringsnpadssamples_DATA = *.ogg EXTRA_DIST = $(stringsnpadssamples_DATA) diff --git a/data/themes/Makefile.am b/data/themes/Makefile.am index ccae107b4..273661acf 100755 --- a/data/themes/Makefile.am +++ b/data/themes/Makefile.am @@ -1,11 +1,11 @@ theme_defaultdir = $(lmmsdatadir)/themes/default -theme_default_DATA = $(wildcard default/*.png) +theme_default_DATA = default/*.png theme_blue_scenedir = $(lmmsdatadir)/themes/blue_scene -theme_blue_scene_DATA = $(wildcard blue_scene/*.png) +theme_blue_scene_DATA = blue_scene/*.png plugin_theme_blue_scenedir = $(lmmsdatadir)/themes/blue_scene/plugins -plugin_theme_blue_scene_DATA = $(wildcard blue_scene/plugins/*.png) +plugin_theme_blue_scene_DATA = blue_scene/plugins/*.png EXTRA_DIST = $(theme_default_DATA) $(theme_blue_scene_DATA) $(plugin_theme_blue_scene_DATA) diff --git a/data/track_icons/Makefile.am b/data/track_icons/Makefile.am index 7f57748ec..abaee96a9 100755 --- a/data/track_icons/Makefile.am +++ b/data/track_icons/Makefile.am @@ -1,6 +1,6 @@ trackiconsdir = $(lmmsdatadir)/track_icons -trackicons_DATA = $(wildcard *.png) +trackicons_DATA = *.png EXTRA_DIST = $(trackicons_DATA) diff --git a/include/main_window.h b/include/main_window.h index 864d8bf61..e6f78359f 100644 --- a/include/main_window.h +++ b/include/main_window.h @@ -57,6 +57,7 @@ class QGridLayout; class QSplashScreen; class configManager; +class tool; class toolButton; @@ -165,12 +166,16 @@ private: bool m_alt; } m_keyMods; + QMenu * m_tools_menu; + vlist m_tools; + friend class engine; private slots: void fillTemplatesMenu( void ); + void showTool( int _idx ); } ; diff --git a/include/plugin.h b/include/plugin.h index de0542b1b..51e294f87 100644 --- a/include/plugin.h +++ b/include/plugin.h @@ -69,7 +69,7 @@ public: Effect, // effect-plugin for effect-board ImportFilter, // filter for importing a file ExportFilter, // filter for exporting a file - AnalysisTools, // analysis-tools (level-meter etc) + Tool, // additional tool (level-meter etc) Library, // simple library holding a code-base for // several other plugins (e.g. LADSPA-support) Other, diff --git a/include/tool.h b/include/tool.h new file mode 100644 index 000000000..5c87625a2 --- /dev/null +++ b/include/tool.h @@ -0,0 +1,63 @@ +/* + * tool.h - declaration of class tool, standard interface for all tool plugins + * + * Copyright (c) 2006 Javier Serrano Polo + * + * This file is part of Linux MultiMedia Studio - http://lmms.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; either + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + + +#ifndef _TOOL_H +#define _TOOL_H + + +#ifdef QT4 + +#include + +#else + +#include + +#endif + + +#include "plugin.h" + + +class mainWindow; + + +class tool : public QWidget, public plugin +{ +public: + tool( mainWindow * _window, const descriptor * _descriptor ); + virtual ~tool(); + + // instantiate tool-plugin with given name or return NULL + // on failure + static tool * FASTCALL instantiate( const QString & _plugin_name, + mainWindow * _window ); + +} ; + + + + +#endif diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 53efb1f88..e6a050dc9 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -10,5 +10,17 @@ if STK_SUPPORT STK_DIR=stk endif -SUBDIRS = audio_file_processor bass_booster bit_invader flp_import $(LADSPA_DIRS) midi_import organic plucked_string_synth $(STK_DIR) triple_oscillator $(VST_DIRS) vibed - +SUBDIRS = \ + audio_file_processor \ + bass_booster \ + bit_invader \ + flp_import \ + $(LADSPA_DIRS) \ + live_tool \ + midi_import \ + organic \ + plucked_string_synth \ + $(STK_DIR) \ + triple_oscillator \ + $(VST_DIRS) \ + vibed diff --git a/plugins/ladspa_effect/ladspa_subplugin_features.cpp b/plugins/ladspa_effect/ladspa_subplugin_features.cpp index 9ec148736..fa181ab80 100644 --- a/plugins/ladspa_effect/ladspa_subplugin_features.cpp +++ b/plugins/ladspa_effect/ladspa_subplugin_features.cpp @@ -153,7 +153,7 @@ void ladspaSubPluginFeatures::listSubPluginKeys( engine * _eng, plugins = lm->getValidEffects(); //plugins += lm->getInvalidEffects(); break; - case plugin::AnalysisTools: + case plugin::Tool: plugins = lm->getAnalysisTools(); break; case plugin::Other: diff --git a/plugins/live_tool/Makefile.am b/plugins/live_tool/Makefile.am new file mode 100644 index 000000000..ecd8527a5 --- /dev/null +++ b/plugins/live_tool/Makefile.am @@ -0,0 +1,33 @@ +AUTOMAKE_OPTIONS = foreign 1.4 + + +INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/src/lib -I. + + +AM_CXXFLAGS := $(AM_CXXFLAGS) $(QT_CXXFLAGS) -DPLUGIN_NAME="live_tool" + + +%.moc: ./%.h + $(MOC) -o $@ $< + + +MOC_FILES = ./live_tool.moc + +BUILT_SOURCES = $(MOC_FILES) ./embedded_resources.h +EMBEDDED_RESOURCES = $(wildcard *png) + +./embedded_resources.h: $(EMBEDDED_RESOURCES) + $(BIN2RES) $(EMBEDDED_RESOURCES) > $@ + +EXTRA_DIST = $(EMBEDDED_RESOURCES) + + +CLEANFILES = $(MOC_FILES) ./embedded_resources.h + + + +pkglib_LTLIBRARIES = liblive_tool.la + +liblive_tool_la_SOURCES = live_tool.cpp live_tool.h + +$(liblive_tool_la_SOURCES): ./embedded_resources.h diff --git a/plugins/live_tool/artwork.png b/plugins/live_tool/artwork.png new file mode 100644 index 0000000000000000000000000000000000000000..05ff319b7372c2695343e456e6a97607cb1ea88d GIT binary patch literal 12599 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 + * + * This file is part of Linux MultiMedia Studio - http://lmms.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; either + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + + +#include "live_tool.h" +#include "bb_editor.h" +#include "song_editor.h" + +#ifdef Q_WS_X11 + +#include + +#endif + +#undef SINGLE_SOURCE_COMPILE +#include "embed.cpp" + + + + +extern "C" +{ + +plugin::descriptor live_tool_plugin_descriptor = +{ + STRINGIFY_PLUGIN_NAME( PLUGIN_NAME ), + "LiveTool", + QT_TRANSLATE_NOOP( "pluginBrowser", + "tool for live performance" ), + "Javier Serrano Polo ", + 0x0100, + plugin::Tool, + new QPixmap( PLUGIN_NAME::getIconPixmap( "logo" ) ), + NULL +} ; + +} + + + + +liveTool::liveTool( mainWindow * _window ) : + tool( _window, &live_tool_plugin_descriptor ) +{ + QPixmap background = PLUGIN_NAME::getIconPixmap( "artwork" ); + setPaletteBackgroundPixmap( background ); + setFixedSize( background.size() ); + + hide(); +} + + + + +liveTool::~liveTool() +{ +} + + + + +QString liveTool::nodeName( void ) const +{ + return( live_tool_plugin_descriptor.name ); +} + + + + +void liveTool::keyPressEvent( QKeyEvent * _ke ) +{ + switch( _ke->key() ) + { + case Qt::Key_Space: + if( eng()->getSongEditor()->playing() ) + { + eng()->getSongEditor()->pause(); + } + else if( eng()->getSongEditor()->paused() && + eng()->getSongEditor()->playMode() == + songEditor::PLAY_SONG ) + { + eng()->getSongEditor()->resumeFromPause(); + } + else + { + eng()->getSongEditor()->play(); + } + break; + + default: + _ke->ignore(); + break; + } +} + + + + +#ifdef Q_WS_X11 +bool liveTool::x11Event( XEvent * _xe ) +{ + if( _xe->type == KeyPress ) + { + unsigned keycode = _xe->xkey.keycode; + // F1 to F10 + if( 67 <= keycode && keycode <= 76 ) + { + toggleInstrument( keycode - 67 ); + return( TRUE ); + } + } + return( FALSE ); +} +#endif + + + + +void liveTool::toggleInstrument( int _n ) +{ + bool track_exists; + track * t = eng()->getBBEditor()->tracks().at( _n, &track_exists ); + if( track_exists ) + { + t->setMuted( !t->muted() ); + } +} + + + + +extern "C" +{ + +// neccessary for getting instance out of shared lib +plugin * lmms_plugin_main( void * _data ) +{ + return( new liveTool( static_cast( _data ) ) ); +} + +} diff --git a/plugins/live_tool/live_tool.h b/plugins/live_tool/live_tool.h new file mode 100644 index 000000000..39eacceaa --- /dev/null +++ b/plugins/live_tool/live_tool.h @@ -0,0 +1,59 @@ +/* + * live_tool.h - declaration of class liveTool, for live performance + * + * Copyright (c) 2006 Javier Serrano Polo + * + * This file is part of Linux MultiMedia Studio - http://lmms.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; either + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + + +#ifndef _LIVE_TOOL_H +#define _LIVE_TOOL_H + + +#include "tool.h" + + + + +class liveTool : public tool +{ +public: + liveTool( mainWindow * _window ); + virtual ~liveTool(); + + virtual QString nodeName( void ) const; + + +protected: + virtual void keyPressEvent( QKeyEvent * _ke ); +#ifdef Q_WS_X11 + virtual bool x11Event( XEvent * _xe ); +#endif + + +private: + void toggleInstrument( int _n ); + +} ; + + + + +#endif diff --git a/plugins/live_tool/logo.png b/plugins/live_tool/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..13fc305cb06fad30249f98a49431e2229f11e07d GIT binary patch literal 3602 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 settings_menu )->setText( tr( "&Settings" ) ); @@ -514,7 +516,33 @@ void mainWindow::finalize( void ) tr( "Show setup wizard" ), configManager::inst(), SLOT( exec() ) ); - + + m_tools_menu = new QMenu( this ); + vvector pluginDescriptors; + plugin::getDescriptorsOfAvailPlugins( pluginDescriptors ); + for( vvector::iterator it = + pluginDescriptors.begin(); + it != pluginDescriptors.end(); ++it ) + { + if( it->type == plugin::Tool ) + { + m_tools_menu->addAction( *it->logo, it->public_name ); + m_tools.push_back( tool::instantiate( it->name, + this ) ); + } + } + if( m_tools_menu->count() ) + { +#ifdef QT4 + menuBar()->addMenu( m_tools_menu )->setText( tr( "&Tools" ) ); +#else + menuBar()->insertItem( tr( "&Tools" ), m_tools_menu ); +#endif + connect( m_tools_menu, SIGNAL( activated( int ) ), + this, SLOT( showTool( int ) ) ); + } + + // help-popup-menu QMenu * help_menu = new QMenu( this ); #ifdef QT4 @@ -1051,6 +1079,16 @@ void mainWindow::fillTemplatesMenu( void ) +void mainWindow::showTool( int _idx ) +{ + tool * t = m_tools[m_tools_menu->indexOf( _idx )]; + t->show(); + t->setFocus(); +} + + + + #ifndef QT4 #undef addSeparator #endif diff --git a/src/core/tool.cpp b/src/core/tool.cpp new file mode 100644 index 000000000..2eb8c8ba0 --- /dev/null +++ b/src/core/tool.cpp @@ -0,0 +1,70 @@ +#ifndef SINGLE_SOURCE_COMPILE + +/* + * tool.cpp - base class for all tool plugins (graphs, extensions, etc) + * + * Copyright (c) 2006 Javier Serrano Polo + * + * This file is part of Linux MultiMedia Studio - http://lmms.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; either + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + + +#include "tool.h" +#include "main_window.h" + + + + +tool::tool( mainWindow * _window, const descriptor * _descriptor ) : + QWidget( _window->workspace() ), + plugin( _descriptor, _window->eng() ) +{ + setWindowTitle( _descriptor->public_name ); + setWindowIcon( *_descriptor->logo ); +} + + + + +tool::~tool() +{ +} + + + + +tool * tool::instantiate( const QString & _plugin_name, mainWindow * _window ) +{ + plugin * p = plugin::instantiate( _plugin_name, _window ); + // check whether instantiated plugin is an instrument + if( dynamic_cast( p ) != NULL ) + { + // everything ok, so return pointer + return( dynamic_cast( p ) ); + } + + // not quite... so delete plugin + delete p; + return( NULL ); +} + + + + +#endif diff --git a/src/lmms_single_source.cpp b/src/lmms_single_source.cpp index 7019da3e5..7bb6e1390 100644 --- a/src/lmms_single_source.cpp +++ b/src/lmms_single_source.cpp @@ -44,6 +44,7 @@ #include "src/core/piano_widget.cpp" #include "src/core/name_label.cpp" #include "src/core/preset_preview_play_handle.cpp" +#include "src/core/tool.cpp" #include "src/core/track_container.cpp" #include "src/core/track.cpp" #include "src/core/file_browser.cpp"