From f01af6740e99cdb46a04fc48a2f21a1a8265fec6 Mon Sep 17 00:00:00 2001 From: Javier Serrano Polo Date: Sat, 3 Nov 2007 14:41:58 +0000 Subject: [PATCH] singerbot proxy, fixed recently opened files, style sheet support git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@574 0778d3d1-df1d-0410-868b-ea421aaaa00d --- ChangeLog | 155 ++++++ Makefile.am | 3 + acinclude.m4 | 9 +- configure.in | 8 +- data/locale/ca.qm | Bin 165882 -> 166162 bytes data/locale/ca.ts | 444 ++++++++-------- data/locale/qt_ar.qm | Bin 22817 -> 0 bytes data/locale/qt_cs.qm | Bin 24555 -> 0 bytes data/locale/qt_de.qm | Bin 26796 -> 0 bytes data/locale/qt_es.qm | Bin 25947 -> 0 bytes data/locale/qt_fr.qm | Bin 26349 -> 0 bytes data/locale/qt_he.qm | Bin 21034 -> 0 bytes data/locale/qt_it.qm | Bin 26321 -> 0 bytes data/locale/qt_ja.qm | Bin 19679 -> 0 bytes data/locale/qt_nb.qm | Bin 24605 -> 0 bytes data/locale/qt_pt-br.qm | Bin 25885 -> 0 bytes data/locale/qt_ru.qm | Bin 24203 -> 0 bytes data/locale/qt_sk.qm | Bin 24814 -> 0 bytes data/locale/qt_zh-cn.qm | Bin 16920 -> 0 bytes data/locale/qt_zh-tw.qm | Bin 17033 -> 0 bytes data/themes/Makefile.am | 2 +- include/caption_menu.h | 45 ++ include/config_mgr.h | 2 + include/file_browser.h | 69 +-- include/main_window.h | 6 +- include/mmp.h | 2 + include/rack_plugin.h | 7 +- plugins/bass_booster/bass_booster.h | 2 + plugins/flp_import/unrtf/attr.c | 5 +- plugins/flp_import/unrtf/attr.h | 3 +- plugins/flp_import/unrtf/convert.c | 32 +- plugins/flp_import/unrtf/error.c | 5 +- plugins/flp_import/unrtf/error.h | 5 +- plugins/flp_import/unrtf/html.c | 21 +- plugins/flp_import/unrtf/malloc.c | 3 +- plugins/flp_import/unrtf/malloc.h | 3 +- plugins/flp_import/unrtf/output.c | 5 +- plugins/flp_import/unrtf/output.h | 239 ++++----- plugins/ladspa_effect/ladspa_effect.h | 6 +- plugins/lb302/lb302.cpp | 7 +- plugins/midi_import/midi_import.cpp | 6 +- plugins/singerbot/Makefile.am | 7 +- plugins/singerbot/file.h | 72 +++ plugins/singerbot/singerbot.cpp | 219 ++++---- plugins/singerbot/singerbot.h | 59 +-- plugins/singerbot/singerbot_proxy.cpp | 225 ++++++++ plugins/vibed/impulse_editor.cpp | 21 +- plugins/vibed/nine_button_selector.cpp | 19 +- plugins/vibed/vibed.cpp | 20 +- plugins/vst_base/lvsl_client.cpp | 6 +- plugins/vst_effect/vst_effect.h | 1 + src/audio/audio_alsa.cpp | 10 +- src/audio/audio_file_ogg.cpp | 6 +- src/core/automation_editor.cpp | 11 +- src/core/automation_pattern.cpp | 2 +- src/core/config_mgr.cpp | 25 +- src/core/file_browser.cpp | 696 ++++++++++++------------- src/core/import_filter.cpp | 1 - src/core/ladspa_manager.cpp | 4 - src/core/main.cpp | 14 +- src/core/main_window.cpp | 65 +-- src/core/piano_roll.cpp | 11 +- src/core/piano_widget.cpp | 19 +- src/core/setup_dialog.cpp | 1 - src/core/song_editor.cpp | 3 +- src/core/surround_area.cpp | 13 +- src/core/tool.cpp | 5 +- src/core/track.cpp | 1 - src/core/track_container.cpp | 7 +- src/lib/mmp.cpp | 86 ++- src/lib/sample_buffer.cpp | 5 - src/midi/midi_alsa_seq.cpp | 21 +- src/midi/midi_mapper.cpp | 4 +- src/tracks/instrument_track.cpp | 5 +- src/widgets/automatable_button.cpp | 19 +- src/widgets/automatable_slider.cpp | 22 +- src/widgets/caption_menu.cpp | 53 ++ src/widgets/combobox.cpp | 18 +- src/widgets/effect_label.cpp | 13 +- src/widgets/kmultitabbar.cpp | 32 +- src/widgets/knob.cpp | 29 +- src/widgets/lcd_spinbox.cpp | 17 +- src/widgets/project_notes.cpp | 4 +- src/widgets/rack_plugin.cpp | 47 +- src/widgets/tab_bar.cpp | 5 +- src/widgets/tempo_sync_knob.cpp | 20 +- src/widgets/text_float.cpp | 2 - 87 files changed, 1710 insertions(+), 1329 deletions(-) delete mode 100644 data/locale/qt_ar.qm delete mode 100644 data/locale/qt_cs.qm delete mode 100644 data/locale/qt_de.qm delete mode 100644 data/locale/qt_es.qm delete mode 100644 data/locale/qt_fr.qm delete mode 100644 data/locale/qt_he.qm delete mode 100644 data/locale/qt_it.qm delete mode 100644 data/locale/qt_ja.qm delete mode 100644 data/locale/qt_nb.qm delete mode 100644 data/locale/qt_pt-br.qm delete mode 100644 data/locale/qt_ru.qm delete mode 100644 data/locale/qt_sk.qm delete mode 100644 data/locale/qt_zh-cn.qm delete mode 100644 data/locale/qt_zh-tw.qm create mode 100644 include/caption_menu.h create mode 100644 plugins/singerbot/file.h create mode 100644 plugins/singerbot/singerbot_proxy.cpp create mode 100644 src/widgets/caption_menu.cpp diff --git a/ChangeLog b/ChangeLog index 7bd2dabbac..bbef10232c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,158 @@ +2007-11-03 Javier Serrano Polo + + * plugins/singerbot/singerbot_proxy.cpp: + initial release, separate process to deal with Festival + + * plugins/singerbot/file.h: + initial release, file descriptor wrapper + + * plugins/singerbot/Makefile.am: + * plugins/singerbot/singerbot.cpp: + * plugins/singerbot/singerbot.h: + use external proxy + + * include/main_window.h: + * src/core/main_window.cpp: + upgraded recently opened files feature + + * include/main_window.h: + * src/core/main_window.cpp: + * src/core/song_editor.cpp: + fixed recently opened files segfault + + * include/mmp.h: + * src/lib/mmp.cpp: + simplified save extension handling + + * src/core/song_editor.cpp: + * src/lib/mmp.cpp: + fixed recently opened files bug (#1800364) + + * data/themes/default/style.css: + * data/themes/Makefile.am: + * include/config_mgr.h: + * src/core/config_mgr.cpp: + * src/core/main_window.cpp: + added style sheet support + + * include/caption_menu.h: + * src/widgets/caption_menu.cpp: + initial release, context menu with a caption + + * plugins/vibed/impulse_editor.cpp: + * plugins/vibed/nine_button_selector.cpp: + * plugins/vibed/vibed.cpp: + * src/core/piano_widget.cpp: + * src/core/surround_area.cpp: + * src/widgets/automatable_button.cpp: + * src/widgets/automatable_slider.cpp: + * src/widgets/combobox.cpp: + * src/widgets/knob.cpp: + * src/widgets/lcd_spinbox.cpp: + * src/widgets/rack_plugin.cpp: + * src/widgets/tempo_sync_knob.cpp: + use caption menu + + * src/core/main_window.cpp: + set workspace's background with its own method + + * acinclude.m4: + * include/file_browser.h: + * src/core/file_browser.cpp: + * src/core/main_window.cpp: + replaced Qt3-based file browser implementation + + * src/core/file_browser.cpp: + enabled match in directory content filter + + * src/widgets/automatable_slider.cpp: + fixed mouse release segfault + + * acinclude.m4: + * src/core/main.cpp: + assume Qt translations are properly configured + + * src/core/main.cpp: + use standard return values + + * src/core/config_mgr.cpp: + removed line breaks inside paragraphs, wrapping should work + + * src/audio/audio_alsa.cpp: + * src/midi/midi_alsa_seq.cpp: + removed discouraged alloca calls + + * include/main_window.h: + * include/rack_plugin.h: + * plugins/bass_booster/bass_booster.h: + * plugins/ladspa_effect/ladspa_effect.h: + * plugins/vst_base/lvsl_client.cpp: + * plugins/vst_effect/vst_effect.h: + * src/core/automation_editor.cpp: + * src/core/file_browser.cpp: + * src/core/main_window.cpp: + * src/core/piano_roll.cpp: + * src/core/surround_area.cpp: + * src/core/tool.cpp: + * src/core/track_container.cpp: + * src/tracks/instrument_track.cpp: + * src/widgets/combobox.cpp: + * src/widgets/effect_label.cpp: + * src/widgets/knob.cpp: + * src/widgets/project_notes.cpp: + * src/widgets/rack_plugin.cpp: + * src/widgets/tempo_sync_knob.cpp: + reduced include dependencies + + * plugins/flp_import/unrtf/attr.c: + * plugins/flp_import/unrtf/attr.h: + * plugins/flp_import/unrtf/convert.c: + * plugins/flp_import/unrtf/error.c: + * plugins/flp_import/unrtf/error.h: + * plugins/flp_import/unrtf/html.c: + * plugins/flp_import/unrtf/malloc.c: + * plugins/flp_import/unrtf/malloc.h: + * plugins/flp_import/unrtf/output.c: + * plugins/flp_import/unrtf/output.h: + * src/audio/audio_file_ogg.cpp: + replaced deprecated string conversions + + * plugins/lb302/lb302.cpp: + * src/widgets/kmultitabbar.cpp: + fixed different signedness comparison + + * plugins/lb302/lb302.cpp: + * plugins/midi_import/midi_import.cpp: + commented out unused variables + + * plugins/flp_import/unrtf/convert.c: + replaced empty conditional + + * src/widgets/kmultitabbar.cpp: + added copyright notice + + * src/core/automation_pattern.cpp: + * src/core/config_mgr.cpp: + * src/core/import_filter.cpp: + * src/core/ladspa_manager.cpp: + * src/core/setup_dialog.cpp: + * src/core/track.cpp: + * src/core/track_container.cpp: + * src/lib/sample_buffer.cpp: + * src/midi/midi_mapper.cpp: + * src/widgets/tab_bar.cpp: + * src/widgets/text_float.cpp: + removed old undefs + + * configure.in: + readded unsafe-loop-optimizations warning + + * data/locale/ca.ts: + updated translation + + * data/locale/qt_*.qm: + removed old Qt3 translations + 2007-10-30 Tobias Doerffel * src/core/note_play_handle.cpp: diff --git a/Makefile.am b/Makefile.am index ab62ae92c1..a6c38e1a2a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -55,6 +55,7 @@ lmms_MOC = \ ./automation_track.moc \ ./bb_editor.moc \ ./bb_track.moc \ + ./caption_menu.moc \ ./instrument_track.moc \ ./combobox.moc \ ./config_mgr.moc \ @@ -217,6 +218,7 @@ lmms_SOURCES = \ $(srcdir)/src/tracks/sample_track.cpp \ $(srcdir)/src/widgets/automatable_button.cpp \ $(srcdir)/src/widgets/automatable_slider.cpp \ + $(srcdir)/src/widgets/caption_menu.cpp \ $(srcdir)/src/widgets/combobox.cpp \ $(srcdir)/src/widgets/cpuload_widget.cpp \ $(srcdir)/src/widgets/effect_label.cpp \ @@ -301,6 +303,7 @@ lmms_SOURCES = \ $(srcdir)/include/track.h \ $(srcdir)/include/track_container.h \ $(srcdir)/include/bb_track.h \ + $(srcdir)/include/caption_menu.h \ $(srcdir)/include/sample_track.h \ $(srcdir)/include/sample_buffer.h \ $(srcdir)/include/name_label.h \ diff --git a/acinclude.m4 b/acinclude.m4 index dcfa12c194..7ed31f99fc 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -52,10 +52,9 @@ for i in $QT_TRANSLATIONS_SEARCH ; do fi done if test x"$QT_TRANSLATIONS" = x ; then - AC_MSG_WARN([*** not found! You may want to install a Qt i18n package]) -else - AC_DEFINE_UNQUOTED(QT_TRANSLATIONS_DIR, "$QT_TRANSLATIONS") + AC_MSG_ERROR([*** not found! Either install Qt i18n files or define QT_TRANSLATIONS.]) fi +AC_DEFINE_UNQUOTED(QT_TRANSLATIONS_DIR, "$QT_TRANSLATIONS") AC_MSG_RESULT([$QT_TRANSLATIONS]) @@ -136,7 +135,7 @@ case "${host}" in if test "x$QT_LIBS" = x; then AC_MSG_ERROR([*** Couldn't find any Qt4 libraries]) fi - QT_LIB="-L$QTDIR/bin -lQtCore4 -lQtXml4 -lQtNetwork4 -lQtGui4 -lQt3Support4 -lws2_32" + QT_LIB="-L$QTDIR/bin -lQtCore4 -lQtXml4 -lQtNetwork4 -lQtGui4 -lws2_32" # Check that windres is in path AC_PATH_PROGS([WINDRES],[i586-mingw32-windres windres],,[${prefix}/bin:$PATH]) if test x$WINDRES = x ; then @@ -154,7 +153,7 @@ case "${host}" in else QT_LIB="-L$QTDIR/lib64 -L$QTDIR/lib64/qt4" fi - QT_LIB="$QT_LIB -lQtCore -lQtXml -lQtNetwork -lQtGui -lQt3Support" + QT_LIB="$QT_LIB -lQtCore -lQtXml -lQtNetwork -lQtGui" ;; esac AC_MSG_RESULT([found: $QT_LIB]) diff --git a/configure.in b/configure.in index c72217b408..892893e6c1 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.4.0-svn20071030, lmms-devel/at/lists/dot/sf/dot/net) -AM_INIT_AUTOMAKE(lmms, 0.4.0-svn20071030) +AC_INIT(lmms, 0.4.0-svn20071103, lmms-devel/at/lists/dot/sf/dot/net) +AM_INIT_AUTOMAKE(lmms, 0.4.0-svn20071103) AM_CONFIG_HEADER(config.h) @@ -59,7 +59,7 @@ DEFAULTFLAGS="-O2 -fPIC" #"-floop-optimize2 -fgcse-sm -fgcse-las" if test "x`$CC --version|head -1|cut -d\ -f3|cut -d. -f1`" = "x4" ; then DEFAULTFLAGS="$DEFAULTFLAGS -ftree-vectorize -ftree-loop-linear" # if test "x`$CC --version|head -1|cut -d\ -f3|cut -d. -f2`" != "x0" ; then -# DEFAULTFLAGS="$DEFAULTFLAGS -funsafe-loop-optimizations -Wunsafe-loop-optimizations" +# DEFAULTFLAGS="$DEFAULTFLAGS -funsafe-loop-optimizations" # fi fi @@ -576,7 +576,7 @@ lmmsdatadir="$datadir/$PACKAGE" AC_SUBST(lmmsdatadir) -EXTRA_WARNINGS="-Wextra -Wno-unused-parameter -Winline -Wdisabled-optimization" +EXTRA_WARNINGS="-Wextra -Wno-unused-parameter -Wunsafe-loop-optimizations -Winline -Wdisabled-optimization" if test "x$CXX" == "xg++" ; then CXXFLAGS="$CXXFLAGS -ansi -Wall $EXTRA_WARNINGS -fno-exceptions" fi diff --git a/data/locale/ca.qm b/data/locale/ca.qm index b31fb3a6f70e9a43cff152caf1776d957792b4e4..d018b29e9a90c5bcbe20acac2a2eba804621cc8a 100644 GIT binary patch delta 7243 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 P8L0n%7oYyl99R7xH$(;- delta 7004 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 NXE0BEzlL>L^FJXozrFwf diff --git a/data/locale/ca.ts b/data/locale/ca.ts index 2ec3feef2e..70dfb9fe08 100644 --- a/data/locale/ca.ts +++ b/data/locale/ca.ts @@ -860,7 +860,7 @@ http://lmms.sourceforge.net automatableButton - + &Open in automation editor &Obre a l'editor d'automatització @@ -868,7 +868,7 @@ http://lmms.sourceforge.net automatableSlider - + &Open in automation editor &Obre a l'editor d'automatització @@ -1209,7 +1209,7 @@ http://lmms.sourceforge.net comboBox - + &Open in automation editor &Obre a l'editor d'automatització @@ -1291,12 +1291,12 @@ Es mostrarà l'assistent per a reconfigurar LMMS. &Finalitza - + Could not save config-file No s'ha pogut desar el fitxer de configuració - + Could not save configuration file %1. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. No s'ha pogut desar el fitxer de configuració %1. @@ -1307,19 +1307,6 @@ Per favor, comprova que tens permís d'escriptura per a aquest fitxer i tor Version mismatches La versió no coincideix - - - Accordingly to the information in your LMMS-configuration-file you seem -to have run a different (probably older) version of LMMS before. -It is recommended to run the setup-wizard again to ensure that -the latest samples, presets, demo-projects etc. are installed in your -LMMS-working-directory. Run the setup-wizard now? - Segons la informació del fitxer de configuració de LMMS, sembla que abans -has executat una versió diferent (probablement més antiga) de LMMS. -Es recomana executar l'assistent de configuració un altre cop per a assegurar -que les darreres mostres, plantilles, projectes demo, etc. s'instal·lin al teu -directori de treball de LMMS. Executar ara l'assistent? - &Cancel @@ -1335,6 +1322,15 @@ directori de treball de LMMS. Executar ara l'assistent? Choose LMMS working directory Escull el directori de treball de LMMS + + + Accordingly to the information in your LMMS-configuration-file you seem to have run a different (probably older) version of LMMS before. +It is recommended to run the setup-wizard again to ensure that the latest samples, presets, demo-projects etc. are installed in your LMMS-working-directory. +Run the setup-wizard now? + Segons la informació del fitxer de configuració de LMMS, sembla que abans has executat una versió diferent (probablement més antiga) de LMMS. +Es recomana executar l'assistent de configuració un altre cop per a assegurar que les darreres mostres, plantilles, projectes demo, etc. s'instal·lin al teu directori de treball de LMMS. +Executar ara l'assistent? + effectList @@ -1866,30 +1862,15 @@ Assegura't que tens permís d'escriptura per al fitxer/dispositiu sele fileBrowser - + Browser Navegador - + Reload (F5) Recarrega (F5) - - - Send to active instrument-track - Envia a la pista d'instrument activa - - - - Open in new instrument-track/Song-Editor - Obre en una nova pista d'instrument/Editor de Cançó - - - - Open in new instrument-track/B+B Editor - Obre en una nova pista d'instrument/Editor R+B - impulseEditor @@ -1944,7 +1925,7 @@ Assegura't que tens permís d'escriptura per al fitxer/dispositiu sele Pica aquí per a activar/desactivar la forma d'ona. - + &Help &Ajuda @@ -2198,37 +2179,37 @@ Assegura't que tens permís d'escriptura per al fitxer/dispositiu sele knob - + &Help &Ajuda - + &Reset (%1%2) &Restaura (%1%2) - + &Copy value (%1%2) &Copia valor (%1%2) - + &Paste value (%1%2) &Enganxa valor (%1%2) - + Connect to MIDI-device Connecta a dispositiu MIDI - + Please enter a new value between %1 and %2: Per favor, introdueix un nou valor entre %1 i %2: - + &Open in automation editor &Obre a l'editor d'automatització @@ -2518,7 +2499,7 @@ Assegura't que tens permís d'escriptura per al fitxer/dispositiu sele lcdSpinBox - + &Open in automation editor &Obre a l'editor d'automatització @@ -2526,25 +2507,40 @@ Assegura't que tens permís d'escriptura per al fitxer/dispositiu sele listView - + Files Fitxers - + Loading sample Carregant mostra - + Please wait, loading sample for preview... Per favor espera, carregant mostra per a previsualitzar... - + --- Factory files --- --- Fitxers de fàbrica --- + + + Send to active instrument-track + Envia a la pista d'instrument activa + + + + Open in new instrument-track/Song-Editor + Obre en una nova pista d'instrument/Editor de Cançó + + + + Open in new instrument-track/B+B Editor + Obre en una nova pista d'instrument/Editor R+B + liveTool @@ -2563,137 +2559,137 @@ Les tecles F1-F10 apaguen els 10 primers instruments a l'Editor de Ritme Ba mainWindow - + Setting up main-window and workspace... Preparant finestra principal i espai de treball... - + Creating new song... Creant nova cançó... - + Creating GUI... Creant interfície... - + &New &Nou - + &Open... &Obre... - + &Save &Desa - + Save &As... &Anomena i desa... - + &Quit &Surt - + Help Ajuda - + About Quant a - + &Help &Ajuda - + What's this? Què és això? - + My samples Les meves mostres - + My presets Les meves plantilles - + My projects Els meus projectes - + Loading song... Carregant cançó... - + &Settings &Configuració - + Show setup wizard Mostra l'assistent de configuració - + By pressing this button, you can show or hide the project notes window. In this window you can put down your project notes. Pitjant aquest botó, pots mostrar o amagar la finestra de notes del projecte. En aquesta finestra pots escriure les teves notes del projecte. - + LMMS %1 LMMS %1 - + Create new project Crea nou projecte - + Open existing project Obre projecte existent - + Save current project Desa projecte actual - + Export current project Exporta projecte actual - + By pressing this button, you can show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melody-patterns in an easy way. Pitjant aquest botó pots mostrar o amagar el Rotlle de Piano. Amb l'ajuda del Rotlle de Piano pots editar patrons de melodia fàcilment. - + &Project &Projecte - + Open project Obre projecte @@ -2703,62 +2699,62 @@ Les tecles F1-F10 apaguen els 10 primers instruments a l'Editor de Ritme Ba Desa projecte - + My home El meu cau - + Root directory Directori arrel - + Show/hide Beat+Baseline Editor Mostra/amaga Editor de Ritme Base - + By pressing this button, you can show or hide the Beat+Baseline Editor. The Beat+Baseline Editor is needed for creating beats, opening, adding and removing channels, cutting, copying and pasting beat- and baseline-patterns and other things like that. Pitjant aquest botó pots mostrar o amagar l'Editor de Ritme Base. L'Editor de Ritme Base és necessari per a crear ritmes; obrir, afegir i eliminar canals; tallar, copiar i enganxar patrons de ritme; i altres funcions similars. - + Show/hide Piano-Roll Mostra/amaga Rotlle de Piano - + Show/hide Song-Editor Mostra/amaga Editor de Cançó - + By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap-samples) directly into the playlist. Pitjant aquest botó pots mostrar o amagar l'Editor de Cançó. Amb l'ajuda de l'Editor de Cançó pots editar la llista de reproducció de la cançó i especificar quan ha de tocar-se cada pista. També pots inserir i moure mostres (p.e. mostres de rap) directament a la llista de reproducció. - + Show/hide project notes Mostra/amaga les notes del projecte - + &Edit &Edita - + Undo Desfés - + Redo Refés - + Show settings dialog Mostra el diàleg de configuració @@ -2768,22 +2764,22 @@ Les tecles F1-F10 apaguen els 10 primers instruments a l'Editor de Ritme Ba Ajuda no disponible - + Show/hide Automation Editor Mostra/amaga Editor d'Automatització - + By pressing this button, you can show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Pitjant aquest botó pots mostrar o amagar l'Editor d'Automatització. Amb l'ajuda de l'Editor d'Automatització pots editar valors dinàmics fàcilment. - + &Tools E&ines - + MultiMedia Project (*.mmp *.mmpz *.xml) Projecte MultiMèdia (*.mmp *.mmpz *.xml) @@ -2793,17 +2789,17 @@ Les tecles F1-F10 apaguen els 10 primers instruments a l'Editor de Ritme Ba Projecte MultiMèdia (*.mmp *.mmpz);;Plantilla de Projecte MultiMèdia (*.mpt) - + Online help Ajuda en línia - + Import... Importa... - + E&xport... E&xporta... @@ -2814,6 +2810,11 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Actualment no hi ha ajuda disponible a LMMS. Per favor, visita http://lmms.sf.net/wiki per a documentació sobre LMMS. + + + Recently opened projects + Projectes oberts recentment + mallets @@ -3084,7 +3085,7 @@ Per favor, visita http://lmms.sf.net/wiki per a documentació sobre LMMS. midiClient - + DEVICE DISPOSITIU @@ -3199,7 +3200,7 @@ Per favor, visita http://lmms.sf.net/wiki per a documentació sobre LMMS. nineButtonSelector - + &Help &Ajuda @@ -3544,12 +3545,12 @@ usa la roda del ratolí per a ajustar el volum d'un pas pianoWidget - + Base note Nota base - + &Open in automation editor &Obre a l'editor d'automatització @@ -3670,7 +3671,7 @@ usa la roda del ratolí per a ajustar el volum d'un pas sintetitzador versàtil de guitza & bombo - + Singer bot to add some basic vocals Bot cantant per a afegir veus bàsiques @@ -3999,77 +4000,77 @@ usa la roda del ratolí per a ajustar el volum d'un pas rackPlugin - + Turn the effect off Apaga l'efecte - + On/Off Encès/Apagat - + Toggles the effect on or off. Encén o apaga l'efecte. - + Wet/Dry mix Mescla Moll/Sec - + W/D M/S - + Wet Level: Nivell de Moll: - + The Wet/Dry knob sets the ratio between the input signal and the effect that shows up in the output. La roda Moll/Sec indica la proporció entre el senyal d'entrada i l'efecte que es mostra a la sortida. - + Decay Decaïment - + Time: Temps: - + The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay effects. La roda Decaïment controla quants períodes de silenci han de passar abans de que el connector aturi el processament. Valors més petits reduiran la càrrega de CPU, però augmenten el risc de tallar la cua als efectes de retard. - + Gate Porta - + Gate: Porta: - + The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. La roda Porta controla el nivell de senyal que és considerat 'silenci' mentre decideix quan aturar de processar senyals. - + Controls Controls - + Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. @@ -4092,22 +4093,22 @@ El botó Controls obre un diàleg per a editar els paràmetres de l'efecte. Un clic dret mostrarà un menú contextual on podràs canviar l'ordre en el qual els efectes són processats o esborrar un efecte. - + Move &up Mou a&munt - + Move &down Mou a&vall - + &Remove this plugin &Treu aquest connector - + &Help &Ajuda @@ -4357,64 +4358,64 @@ Si funciona amb altre programari VST sota Linux, per favor contacta amb un desen INTERFÍCIE MIDI - + OK D'acord - + Cancel Cancel·la - + Restart LMMS Reinicia LMMS - + Please note that most changes won't take effect until you restart LMMS! Per favor, tingues en compte que la majoria de canvis no s'aplicaran fins que reiniciïs LMMS! - + Frames: %1 Latency: %2 ms Marcs: %1 Latència: %2 ms - + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Aquí pots configurar la mida de la memòria intermèdia interna usada per LMMS. Els valors més petits donen menor latència però també poden causar so inservible o baix rendiment, especialment a ordinadors antics o sistemes amb un nucli sense temps real. - + Choose LMMS working directory Escull el directori de treball de LMMS - + Choose your VST-plugin directory Escull el teu directori de connectors VST - + Choose artwork-theme directory Escull el directori de material gràfic - + Choose FL Studio installation directory Escull el directori d'instal·lació de FL Studio - + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Aquí pots seleccionar la teva interfície d'àudio preferida. Depenent de la configuració del teu sistema durant el temps de compilació, pots escollir entre ALSA, JACK, OSS i altres. Abaix pots veure una caixa amb controls per a configurar la interfície d'àudio seleccionada. - + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Aquí pots seleccionar la teva interfície MIDI preferida. Depenent de la configuració del teu sistema durant el temps de compilació, pots escollir entre ALSA, OSS i més. Abaix pots veure una caixa amb controls per a configurar la interfície MIDI seleccionada. @@ -4451,12 +4452,12 @@ Please note that in some cases parallelizing won't work with small buffer-s Fixa't que en alguns casos la paral·lelització no funcionarà amb memòries intermèdies de mida petita. Si experimentes problemes (p.e. molts xruns), prova d'augmentar la mida de la memòria intermèdia. - + Choose LADSPA plugin directory Escull un directori de connectors LADSPA - + Choose STK rawwave directory Escull el directori d'ones crues STK @@ -4517,12 +4518,12 @@ Fixa't que en alguns casos la paral·lelització no funcionarà amb memòri Pica aquí si vols aturar la reproducció de la cançó. El marcador de posició de cançó serà col·locat a l'inici de la cançó. - + untitled sense títol - + File already exists El fitxer ja existeix @@ -4542,7 +4543,7 @@ Fixa't que en alguns casos la paral·lelització no funcionarà amb memòri El projecte multimèdia %1 sembla contenir errors. LMMS farà el que pot per a recuperar el màxim possible de dades d'aquest fitxer. - + Could not write file No es pot escriure el fitxer @@ -4552,7 +4553,7 @@ Fixa't que en alguns casos la paral·lelització no funcionarà amb memòri Editor de Cançó - + The file "%1" already exists. Do you want to overwrite it? El fitxer "%1" ja existeix. Vols sobreescriure'l? @@ -4597,19 +4598,19 @@ Fixa't que en alguns casos la paral·lelització no funcionarà amb memòri Afegeix pista de mostra - + Project NOT saved. Projecte NO desat. - + The file %1 already exists. Do you want to overwrite it? El fitxer %1 ja existeix. Vols sobreescriure'l? - + Select file for project-export... Selecciona fitxer per a exportar projecte... @@ -4624,7 +4625,7 @@ Vols sobreescriure'l? El projecte actual ha estat modificat des del darrer desament. Vols desar-lo ara? - + Import file Importa fitxer @@ -4696,12 +4697,12 @@ Per favor, assegura't que tens permís de lectura per al fitxer i torna-ho El projecte %1 està desat. - + The project %1 was not saved! El projecte %1 no està desat! - + Could not write file %1. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. No es pot escriure el fitxer %1. Probablement no tens permís per a escriure aquest fitxer. @@ -4716,27 +4717,27 @@ Per favor, assegura't que tens permís d'escriptura per a aquest fitxe surroundArea - + click to where this channel should be audible pica a on aquest canal ha de ser audible - + Surround area X Àrea envoltant X - + Surround area Y Àrea envoltant Y - + Open &X in automation editor Obre &X a l'editor d'automatització - + Open &Y in automation editor Obre &Y a l'editor d'automatització @@ -4752,122 +4753,122 @@ Per favor, assegura't que tens permís d'escriptura per a aquest fitxe tempoSyncKnob - + Tempo Sync Sinc Tempo - + &Reset (%1%2) &Restaura (%1%2) - + &Copy value (%1%2) &Copia valor (%1%2) - + &Paste value (%1%2) &Enganxa valor (%1%2) - + No Sync Sense Sinc - + Eight beats Vuit batecs - + Whole note Nota sencera - + Half note Mitja nota - + Quarter note Quart de nota - + 8th note 8è de nota - + 16th note 16è de nota - + 32nd note 32è de nota - + Connect to MIDI-device Connecta a dispositiu MIDI - + &Help &Ajuda - + Synced to Eight Beats Sincronitzat a Vuit Batecs - + Synced to Whole Note Sincronitzat a Nota Sencera - + Synced to Half Note Sincronitzat a Mitja Nota - + Synced to Quarter Note Sincronitzat a Quart de Nota - + Synced to 8th Note Sincronitzat a 8è de Nota - + Synced to 16th Note Sincronitzat a 16è de Nota - + Synced to 32nd Note Sincronitzat a 32è de Nota - + &Open in automation editor &Obre a l'editor d'automatització - + Custom... Personalitzat... - + Custom Personalitzat @@ -5023,27 +5024,27 @@ Per favor, assegura't que tens permís de lectura per al fitxer i el direct trackOperationsWidget - + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Pitja <Ctrl> quan piquis el control de moviment per a iniciar una nova acció d'arrossegar i amollar. - + Clone this track Clona aquesta pista - + Remove this track Elimina aquesta pista - + Actions for this track Accions per a aquesta pista - + With this switch you can either mute this track or mute all other tracks. By clicking left, this track is muted. This is useful, if you only want to listen to the other tracks without changing this track and loosing information. When you click right on this switch, all other tracks will be muted. This is useful, if you only want to listen to this track. @@ -5052,24 +5053,24 @@ Amb un clic esquerre, aquesta pista s'apaga. Això és útil si només vols Amb un clic dret a l'interruptor, totes les altres pistes s'apagaran. Això és útil si només vols escoltar aquesta pista. - + left click = mute this track right click = mute all other tracks (solo) clic esquerre = apaga aquesta pista clic dret = apaga totes les altres pistes (solo) - + Mute Apaga - + Enable automation Habilita automatització - + Disable automation Inhabilita automatització @@ -5380,7 +5381,7 @@ Si funciona amb altre programari VST sota Linux, per favor contacta amb un desen vibed - + The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. @@ -5397,147 +5398,147 @@ El botó 'S' suavitzarà la forma d'ona. El botó 'N' normalitzarà la forma d'ona. - + Volume Volum - + Volume: Volum: - + The 'V' knob sets the volume of the selected string. La roda 'V' ajusta el volum de la corda seleccionada. - + String stiffness Rigidesa de corda - + String stiffness: Rigidesa de corda: - + The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. La roda 'S' ajusta la rigidesa de la corda seleccionada. La rigidesa de la corda afecta el temps que la corda ressonarà. Quan més baix el valor, més temps sonarà la corda. - + Pick position Posició per a tocar - + Pick position: Posició per a tocar: - + The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. La roda 'P' ajusta la posició on serà tocada la corda seleccionada. Quan més baix el valor, es toca més a prop del pont. - + Pickup position Posició per a recollir - + Pickup position: Posició per a recollir: - + The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. La roda 'PU' ajusta la posició on les vibracions seran monitoritzades per a la corda seleccionada. Quan més baix aquest valor, la recollida és més a prop del pont. - + Pan Panorama - + Pan: Panorama: - + The Pan knob determines the location of the selected string in the stereo field. La roda Pan determina la localització de la corda seleccionada al camp estèreo. - + Detune Desafinament - + Detune: Desafinament: - + The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. La roda Detune modifica el to de la corda seleccionada. Valors menors que zero faran que la corda soni amb bemoll. Valors majors que zero faran que la corda soni amb sostingut. - + Fuzziness Arrissada - + Fuzziness: Arrissada: - + The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. La roda Slap afegeix una mica d'arrissada a la corda seleccionada que és més notable durant l'atac, encara que també pot usar-se per a que la corda soni més 'metàl·lica'. - + Length Longitud - + Length: Longitud: - + The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. La roda Length ajusta la longitud de la corda seleccionada. Les cordes més llargues sonaran a la vegada més temps i més brillants, emperò també es menjaran més cicles de CPU. - + Impulse or initial state Impuls o estat inicial - + The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. El selector 'Imp' determina si la forma d'ona del gràfic s'ha de tractar com un impuls impartit a la corda quan es toca o l'estat inicial de la corda. - + The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. - El selector Octave s'usa per a escollir a quin harmònic de la nota la corda sonarà. Per exemple, '-2' significa que la corda sonarà dues octaves per sota de la fonamental, 'F' significa que la corda sonarà a la fonamental, i '6' significa que la corda sonarà sis octaves per sobre de la fonamental. + El selector Octava s'usa per a escollir a quin harmònic de la nota la corda sonarà. Per exemple, '-2' significa que la corda sonarà dues octaves per sota de la fonamental, 'F' significa que la corda sonarà a la fonamental, i '6' significa que la corda sonarà sis octaves per sobre de la fonamental. - + The String selector is used to choose which string the controls are editting. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. - El selector String s'usa per a escollir quina corda estan editant els controls. Un instrument Vibed pot tenir fins a nou cordes vibrants independents. El LED a la cantonada dreta baixa de l'editor de forma d'ona indica si la corda seleccionada està activa. + El selector Corda s'usa per a escollir quina corda estan editant els controls. Un instrument Vibed pot tenir fins a nou cordes vibrants independents. El LED a la cantonada dreta baixa de l'editor de forma d'ona indica si la corda seleccionada està activa. - + Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. @@ -5562,15 +5563,30 @@ La roda 'Length' controla la longitud de la corda. El LED a la cantonada dreta baixa de l'editor de forma d'ona determina si la corda està activa a l'instrument actual. - + &Help &Ajuda - + Impulse Impuls + + + Impulse Editor + Editor d'Impuls + + + + Octave + Octava + + + + String + Corda + visualizationWidget diff --git a/data/locale/qt_ar.qm b/data/locale/qt_ar.qm deleted file mode 100644 index 11e52310e3dbd4998b20f1f3d0e2120369aeb89e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22817 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 diff --git a/data/locale/qt_es.qm b/data/locale/qt_es.qm deleted file mode 100644 index 53d64faa416f1694dee7a8591808dfd8bed79a58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25947 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 NqYaOIx+~P?{{WDp7)$^F diff --git a/data/locale/qt_fr.qm b/data/locale/qt_fr.qm deleted file mode 100644 index f1e5a9d78793ed87c7463e5104f9c1543ce9b50e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26349 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 DtVpOc diff --git a/data/locale/qt_he.qm b/data/locale/qt_he.qm deleted file mode 100644 index 0fd539e12dc400d9d72375e88730f7507e5ca9ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21034 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 B(&GRC diff --git a/data/locale/qt_it.qm b/data/locale/qt_it.qm deleted file mode 100644 index da95fdae0bf7698a90258abb2f31dff028a5e2bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26321 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 ND&C9-MBR09^S>0SR5Snp diff --git a/data/locale/qt_ja.qm b/data/locale/qt_ja.qm deleted file mode 100644 index 2e847b5dc7e6a9869cf779c8c15ea81ad949cf91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19679 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 Yo93yUiy1&fS!G#%St*iDO;D)#KdQ(lhyVZp diff --git a/data/locale/qt_nb.qm b/data/locale/qt_nb.qm deleted file mode 100644 index 8ce91fa6b9bde4dea1f85f309eef9c10eb50ca33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24605 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 WM%JSTaCa!u)!fyAC+OVeNb|qLS0)_* diff --git a/data/locale/qt_pt-br.qm b/data/locale/qt_pt-br.qm deleted file mode 100644 index 6aefed5c8524d08f3cfd6e7861db42f7d4468d6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25885 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 diff --git a/data/locale/qt_sk.qm b/data/locale/qt_sk.qm deleted file mode 100644 index c68e89be5c84f54f08ef75907d56f1d494b5c463..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24814 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 diff --git a/data/locale/qt_zh-cn.qm b/data/locale/qt_zh-cn.qm deleted file mode 100644 index 6342df1890d6515f80450eaf3ac08c7ccef5ab05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16920 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 WiiPL_MA<7!a!QKup@dE@5&s9rzBDxe diff --git a/data/themes/Makefile.am b/data/themes/Makefile.am index 273661acff..b00175d881 100644 --- a/data/themes/Makefile.am +++ b/data/themes/Makefile.am @@ -1,5 +1,5 @@ theme_defaultdir = $(lmmsdatadir)/themes/default -theme_default_DATA = default/*.png +theme_default_DATA = default/*.png default/style.css theme_blue_scenedir = $(lmmsdatadir)/themes/blue_scene theme_blue_scene_DATA = blue_scene/*.png diff --git a/include/caption_menu.h b/include/caption_menu.h new file mode 100644 index 0000000000..83fb0f7f96 --- /dev/null +++ b/include/caption_menu.h @@ -0,0 +1,45 @@ +/* + * caption_menu.h - context menu with a caption + * + * Copyright (c) 2007 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 _CAPTION_MENU_H +#define _CAPTION_MENU_H + + +#include + + +class captionMenu : public QMenu +{ + Q_OBJECT +public: + captionMenu( const QString & _title, QWidget * _parent = 0 ); + virtual ~captionMenu(); + +} ; + + + + +#endif diff --git a/include/config_mgr.h b/include/config_mgr.h index 619c1bd410..dc73d553ee 100644 --- a/include/config_mgr.h +++ b/include/config_mgr.h @@ -203,6 +203,8 @@ private: void FASTCALL addPage( QWidget * _w, const QString & _title ); + void loadStyleSheet( void ); + /* static void processFilesRecursively( const QString & _src_dir, const QString & _dst_dir, void( * _proc_func )( const QString & _src, const QString & diff --git a/include/file_browser.h b/include/file_browser.h index 55913e9cbe..4ed9abeed8 100644 --- a/include/file_browser.h +++ b/include/file_browser.h @@ -28,14 +28,13 @@ #include #include -class QColorGroup; -#include +#include #include "side_bar_widget.h" -class QListViewItem; +class QColorGroup; class QPixmap; class fileItem; @@ -62,24 +61,12 @@ public slots: void reloadTree( void ); -protected slots: - void contextMenuRequest( Q3ListViewItem * _i, const QPoint & _pos, - int _col ); - void contextMenuRequest( QListViewItem * _i, const QPoint & _pos, - int _col ); - void sendToActiveInstrumentTrack( void ); - void openInNewInstrumentTrackSE( void ); - void openInNewInstrumentTrackBBE( void ); - - private: virtual void keyPressEvent( QKeyEvent * _ke ); void addItems( const QString & _path ); - void openInNewInstrumentTrack( trackContainer * _tc ); listView * m_l; - fileItem * m_contextMenuItem; QString m_directories; QString m_filter; @@ -90,7 +77,7 @@ private: -class listView : public Q3ListView +class listView : public QTreeWidget { Q_OBJECT public: @@ -99,10 +86,10 @@ public: protected: - virtual void contentsMouseDoubleClickEvent( QMouseEvent * _me ); - virtual void contentsMousePressEvent( QMouseEvent * _me ); - virtual void contentsMouseMoveEvent( QMouseEvent * _me ); - virtual void contentsMouseReleaseEvent( QMouseEvent * _me ); + virtual void contextMenuEvent( QContextMenuEvent * _e ); + virtual void mousePressEvent( QMouseEvent * _me ); + virtual void mouseMoveEvent( QMouseEvent * _me ); + virtual void mouseReleaseEvent( QMouseEvent * _me ); private: @@ -112,21 +99,30 @@ private: playHandle * m_previewPlayHandle; QMutex m_pphMutex; + fileItem * m_contextMenuItem; + + void openInNewInstrumentTrack( trackContainer * _tc ); + + +private slots: + void activateListItem( QTreeWidgetItem * _item, int _column ); + void openInNewInstrumentTrackBBE( void ); + void openInNewInstrumentTrackSE( void ); + void sendToActiveInstrumentTrack( void ); + void updateDirectory( QTreeWidgetItem * _item ); + } ; -class directory : public Q3ListViewItem +class directory : public QTreeWidgetItem { public: - directory( Q3ListView * _parent, const QString & _filename, - const QString & _path, const QString & _filter ); - directory( directory * _parent, const QString & _filename, - const QString & _path, const QString & _filter ); + directory( const QString & _filename, const QString & _path, + const QString & _filter ); - void setOpen( bool ); - void setup( void ); + void update( void ); inline QString fullName( QString _path = QString::null ) { @@ -139,11 +135,6 @@ public: QDir::separator() ); } - inline const QPixmap * pixmap( int ) const - { - return( m_pix ); - } - inline void addDirectory( const QString & _dir ) { m_directories.push_back( _dir ); @@ -152,7 +143,6 @@ public: private: void initPixmapStuff( void ); - void setPixmap( const QPixmap * _px ); bool addItems( const QString & _path ); @@ -161,8 +151,6 @@ private: static QPixmap * s_folderOpenedPixmap; static QPixmap * s_folderLockedPixmap; - directory * m_p; - const QPixmap * m_pix; QStringList m_directories; QString m_filter; @@ -171,12 +159,12 @@ private: -class fileItem : public Q3ListViewItem +class fileItem : public QTreeWidgetItem { public: - fileItem( Q3ListView * _parent, const QString & _name, + fileItem( QTreeWidget * _parent, const QString & _name, const QString & _path ); - fileItem( Q3ListViewItem * _parent, const QString & _name, + fileItem( QTreeWidgetItem * _parent, const QString & _name, const QString & _path ); inline QString fullName( void ) const @@ -184,10 +172,6 @@ public: return( QDir::cleanPath( m_path ) + QDir::separator() + text( 0 ) ); } - inline const QPixmap * pixmap( int ) const - { - return( m_pix ); - } enum fileTypes { @@ -215,7 +199,6 @@ private: static QPixmap * s_flpFilePixmap; static QPixmap * s_unknownFilePixmap; - QPixmap * m_pix; QString m_path; fileTypes m_type; } ; diff --git a/include/main_window.h b/include/main_window.h index f2aa9b4e80..b3fb89da6f 100644 --- a/include/main_window.h +++ b/include/main_window.h @@ -28,13 +28,13 @@ #include #include -#include #include class QAction; class QDomElement; class QGridLayout; class QSplashScreen; +class QWorkspace; class configManager; class tool; @@ -94,8 +94,6 @@ public slots: void createNewProject( void ); void createNewProjectFromTemplate( QAction * _idx ); void openProject( void ); - void updateRecentlyOpenedProjectsMenu( void ); - void openRecentlyOpenedProject( int ); bool saveProject( void ); bool saveProjectAs( void ); void showSettingsDialog( void ); @@ -158,7 +156,9 @@ private: private slots: void browseHelp( void ); void fillTemplatesMenu( void ); + void openRecentlyOpenedProject( QAction * _action ); void showTool( QAction * _idx ); + void updateRecentlyOpenedProjectsMenu( void ); } ; diff --git a/include/mmp.h b/include/mmp.h index 9df0db683c..97d1eb1de4 100644 --- a/include/mmp.h +++ b/include/mmp.h @@ -57,6 +57,8 @@ public: multimediaProject( projectTypes _project_type ); ~multimediaProject(); + QString nameWithExtension( const QString & _fn ) const; + bool writeFile( QString & _fn, bool _overwrite_check = TRUE ); inline QDomElement & content( void ) diff --git a/include/rack_plugin.h b/include/rack_plugin.h index 6606e44522..bc21e94a43 100644 --- a/include/rack_plugin.h +++ b/include/rack_plugin.h @@ -26,13 +26,14 @@ #define _RACK_PLUGIN_H #include -#include -#include -#include #include "journalling_object.h" +class QGroupBox; +class QLabel; +class QPushButton; + class audioPort; class effect; class effectControlDialog; diff --git a/plugins/bass_booster/bass_booster.h b/plugins/bass_booster/bass_booster.h index 7f506fbc81..f5205e3c8c 100644 --- a/plugins/bass_booster/bass_booster.h +++ b/plugins/bass_booster/bass_booster.h @@ -27,6 +27,8 @@ #define _BASS_BOOSTER_H +#include + #include "effect.h" #include "effect_lib.h" #include "engine.h" diff --git a/plugins/flp_import/unrtf/attr.c b/plugins/flp_import/unrtf/attr.c index 663197959e..850f960e98 100644 --- a/plugins/flp_import/unrtf/attr.c +++ b/plugins/flp_import/unrtf/attr.c @@ -32,6 +32,7 @@ * 18 Sep 01, tuorfa@yahoo.com: added AttrStack (stack of stacks) paradigm * 22 Sep 01, tuorfa@yahoo.com: added comment blocks * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith + * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions *--------------------------------------------------------------------*/ #ifdef HAVE_CONFIG_H @@ -101,7 +102,7 @@ void attr_clear_all( void ) *=======================================================================*/ void -attr_express_begin (int attr, char* param) { +attr_express_begin (int attr, const char* param) { switch(attr) { case ATTR_BOLD: @@ -302,7 +303,7 @@ attr_express_end (int attr, char *param) *=======================================================================*/ void -attr_push(int attr, char* param) +attr_push(int attr, const char* param) { AttrStack *stack = stack_of_stacks_top; if (!stack) { diff --git a/plugins/flp_import/unrtf/attr.h b/plugins/flp_import/unrtf/attr.h index 6273a10b50..04a1bba3c8 100644 --- a/plugins/flp_import/unrtf/attr.h +++ b/plugins/flp_import/unrtf/attr.h @@ -31,6 +31,7 @@ * 06 Aug 01, tuorfa@yahoo.com: added several attributes * 18 Sep 01, tuorfa@yahoo.com: updates for AttrStack paradigm * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith + * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions *--------------------------------------------------------------------*/ #ifndef _ATTR @@ -73,7 +74,7 @@ extern void attr_push_core (int attr, char* param); extern void attr_pop_core (int attr); -extern void attr_push(int attr, char* param); +extern void attr_push(int attr, const char* param); extern void attrstack_push(); extern void attrstack_drop(); diff --git a/plugins/flp_import/unrtf/convert.c b/plugins/flp_import/unrtf/convert.c index 433514b3c8..690311fe75 100644 --- a/plugins/flp_import/unrtf/convert.c +++ b/plugins/flp_import/unrtf/convert.c @@ -59,6 +59,7 @@ and added support for accented characters in titles from Laurent Monin # 09 Mar 06, daved@physiol.usyd.edu.au: don't print null post_trans + * 31 Oct 07, jasp00@users.sourceforge.net: fixed several warnings *--------------------------------------------------------------------*/ #ifdef HAVE_CONFIG_H @@ -156,7 +157,7 @@ static int picture_height; static int picture_bits_per_pixel=1; static int picture_type=PICT_UNKNOWN; static int picture_wmetafile_type; -static char *picture_wmetafile_type_str; +static const char *picture_wmetafile_type_str; static int have_printed_body=FALSE; @@ -208,7 +209,7 @@ starting_body () /*-------------------------------------------------------------------*/ -static char *month_strings[12]= { +static const char *month_strings[12]= { #ifdef ENGLISH "January","February","March","April","May","June","July","August", "September","October","November","December" @@ -491,7 +492,7 @@ process_info_group (Word *w) { int ch = h2toi (&s2[2]); - char *s3; + const char *s3; s3 = op_translate_char (op, charset_type, ch, numchar_table); if (!s3 || !*s3) { @@ -834,7 +835,7 @@ cmd_field (Word *w, int align, char has_param, int num) { op->symbol_last_char >= char_num ) { - char * string; + const char * string; if ((string = op->symbol_translation_table[char_num - op->symbol_first_char]) != 0) outstring+=QString().sprintf("%s", string); } @@ -1423,8 +1424,7 @@ static int cmd_ulnone (Word *w, int align, char has_param, int param) { attr==ATTR_THICK_UL || attr==ATTR_DOUBLE_UL) { - if (!attr_pop(ATTR_UNDERLINE)) - ; + attr_pop(ATTR_UNDERLINE); } else more=FALSE; } while(more); @@ -1681,7 +1681,7 @@ static int cmd_u (Word *w, int align, char has_param, int param) { (uchar)param <= op->unisymbol1_last_char ) { - char *string; + const char *string; if ((string = op->unisymbol1_translation_table[param - op->unisymbol1_first_char]) != 0) outstring+=QString().sprintf("%s", string); else @@ -1695,7 +1695,7 @@ static int cmd_u (Word *w, int align, char has_param, int param) { (uchar)param <= op->unisymbol2_last_char ) { - char *string; + const char *string; if ((string = op->unisymbol2_translation_table[param - op->unisymbol2_first_char]) != 0) outstring+=QString().sprintf("%s", string); else @@ -1709,7 +1709,7 @@ static int cmd_u (Word *w, int align, char has_param, int param) { (uchar)param <= op->unisymbol3_last_char ) { - char *string; + const char *string; if ((string = op->unisymbol3_translation_table[param - op->unisymbol3_first_char]) != 0) outstring+=QString().sprintf("%s", string); else @@ -1724,7 +1724,7 @@ static int cmd_u (Word *w, int align, char has_param, int param) { (uchar)param <= op->unisymbol4_last_char ) { - char *string; + const char *string; if ((string = op->unisymbol4_translation_table[param - op->unisymbol4_first_char]) != 0) outstring+=QString().sprintf("%s", string); else @@ -2291,9 +2291,9 @@ static int cmd_tcn (Word *w, int align, char has_param, int param) { typedef struct { - char *name; + const char *name; int (*func)(Word*, int, char, int); - char *debug_print; + const char *debug_print; } HashItem; @@ -2616,7 +2616,7 @@ enum { SMALL=0, BIG=1 }; } while ((ch=*s)) { - char *post_trans = NULL; + const char *post_trans = NULL; if (simulate_allcaps || simulate_smallcaps) ch = toupper (ch); @@ -2844,7 +2844,7 @@ word_print_core (Word *w) if (within_picture) { starting_body(); if (!pictfile && !nopict_mode) { - char *ext=NULL; + const char *ext=NULL; switch (picture_type) { case PICT_WB: ext="bmp"; break; case PICT_WM: ext="wmf"; break; @@ -2985,7 +2985,7 @@ word_print_core (Word *w) else if (*s == '\'') { /* \'XX is a hex char code expression */ int ch = h2toi (&s[1]); - char *s2; + const char *s2; #if 1 /* daved - 0.19.6 */ s2 = op_translate_char (op, charset_type, ch, numchar_table); @@ -3050,7 +3050,7 @@ word_print_core (Word *w) match = !strcmp(s, hip[index].name); if (match) { - char *debug; + const char *debug; int terminate_group; if (hip[index].func) { diff --git a/plugins/flp_import/unrtf/error.c b/plugins/flp_import/unrtf/error.c index 2cea4fdf8a..cd4e650ea6 100644 --- a/plugins/flp_import/unrtf/error.c +++ b/plugins/flp_import/unrtf/error.c @@ -36,6 +36,7 @@ * 25 Sep 04, st001906@hrz1.hrz.tu-darmstadt.de: added stdlib.h for djgpp * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 22 Aug 05, ax2groin@arbornet.org: added lineno to error_handler + * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions *--------------------------------------------------------------------*/ #ifdef HAVE_CONFIG_H @@ -79,7 +80,7 @@ usage () *=======================================================================*/ void -error_handler (char* message) +error_handler (const char* message) { #if 1 fprintf(stderr, "Error (line %d): %s\n", lineno, message); @@ -98,7 +99,7 @@ error_handler (char* message) *=======================================================================*/ void -warning_handler (char* message) +warning_handler (const char* message) { fprintf(stderr, "Warning: %s\n", message); } diff --git a/plugins/flp_import/unrtf/error.h b/plugins/flp_import/unrtf/error.h index 9a4bf80e02..6ade02a4c5 100644 --- a/plugins/flp_import/unrtf/error.h +++ b/plugins/flp_import/unrtf/error.h @@ -29,6 +29,7 @@ *---------------------------------------------------------------------- * Changes * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith + * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions *--------------------------------------------------------------------*/ @@ -38,7 +39,7 @@ extern void usage(void); -extern void error_handler (char*); -extern void warning_handler (char*); +extern void error_handler (const char*); +extern void warning_handler (const char*); diff --git a/plugins/flp_import/unrtf/html.c b/plugins/flp_import/unrtf/html.c index 3b982a98b2..f97e683df8 100644 --- a/plugins/flp_import/unrtf/html.c +++ b/plugins/flp_import/unrtf/html.c @@ -38,6 +38,7 @@ * 21 Jul 05, daved@physiol.usyd.edu.au: added endash * 19 Aug 05, ax2groin@arbornet.org: added more chars and changes to ANSI * 05 Jan 06, marcossamaral@terra.com.br: fixed bugs #14982 and #14983 + * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions *--------------------------------------------------------------------*/ #ifdef HAVE_CONFIG_H @@ -59,7 +60,7 @@ #include "output.h" -static char* ascii [96] = { +static const char* ascii [96] = { /* 0x20 */ " ", "!", """, "#", "$", "%", "&", "'", /* 0x28 */ "(", ")", "*", "+", ",", "-", ".", "/", /* 0x30 */ "0", "1", "2", "3", "4", "5", "6", "7", @@ -75,7 +76,7 @@ static char* ascii [96] = { }; -static char* ansi [] = { +static const char* ansi [] = { /* 0x78 */ "x", /* 0x79 */ "y", /* 0x7a */ "z", @@ -123,7 +124,7 @@ static char* ansi [] = { /* 0xf8 */ "ø","ù","ú","û","ü","ý","þ","ÿ" }; -static char* mac [] = { +static const char* mac [] = { /* 0xa4 */ "•", NULL,NULL,NULL, /* 0xa8 */ NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, /* 0xb0 */ NULL,NULL,NULL,NULL,NULL,"μ",NULL,NULL, @@ -134,7 +135,7 @@ static char* mac [] = { }; #if 1 /* daved - 0.19.4 - unicode symbol character support */ -static char * unisymbol1[] = { +static const char * unisymbol1[] = { /* 913 */ "Α", /* 914 */ "Β", /* 915 */ "Γ", @@ -208,7 +209,7 @@ static char * unisymbol1[] = { }; #endif #if 1 /* daved - 0.19.4 - unicode symbol character support */ -static char * unisymbol2[] = { +static const char * unisymbol2[] = { /* 57516 */ "Γ", /* 57517 */ "Δ", /* 57518 */ "Θ", @@ -253,7 +254,7 @@ static char * unisymbol2[] = { /* 57557 */ "δ", }; -static char * unisymbol3[] = { +static const char * unisymbol3[] = { /* 61505 */ "Α", /* 61506 */ "Β", /* 61507 */ "Χ", @@ -316,7 +317,7 @@ static char * unisymbol3[] = { #endif #if 1 /* 0.19.5 more unicode characters */ -static char * unisymbol4[] = { +static const char * unisymbol4[] = { /* 61600 */ "€", /* 61601 */ "ϒ", /* 61602 */ "′", @@ -414,7 +415,7 @@ static char * unisymbol4[] = { }; #endif #if 1 /* daved - SYMBOL font characters */ -static char* symbol[] = { +static const char* symbol[] = { /* 60 */ "<", /* 61 */ "=", /* 62 */ ">", @@ -612,7 +613,7 @@ static char* symbol[] = { /* 254 */ 0, }; #endif -static char* cp437 [] = { +static const char* cp437 [] = { /* 0x80 */ "ç", /* 0x81 */ "ü", /* 0x82 */ "é", @@ -743,7 +744,7 @@ static char* cp437 [] = { /* 0xff */ " ", }; -static char* cp850 [] = { +static const char* cp850 [] = { /* 0x80 */ "ç", /* 0x81 */ "ü", /* 0x82 */ "é", diff --git a/plugins/flp_import/unrtf/malloc.c b/plugins/flp_import/unrtf/malloc.c index ced9c693ec..0cdff5b1ba 100644 --- a/plugins/flp_import/unrtf/malloc.c +++ b/plugins/flp_import/unrtf/malloc.c @@ -34,6 +34,7 @@ * 28 Sep 01, tuorfa@yahoo.com: removed Turbo C support. * 08 Oct 03, daved@physiol.usyd.edu.au: added stdlib.h for linux * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith + * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions *--------------------------------------------------------------------*/ #ifdef HAVE_CONFIG_H @@ -114,7 +115,7 @@ total_malloced (void) { *=======================================================================*/ char * -my_strdup (char *src) { +my_strdup (const char *src) { unsigned long len; char *ptr; diff --git a/plugins/flp_import/unrtf/malloc.h b/plugins/flp_import/unrtf/malloc.h index 991bd17a0f..524f217aea 100644 --- a/plugins/flp_import/unrtf/malloc.h +++ b/plugins/flp_import/unrtf/malloc.h @@ -28,10 +28,11 @@ *---------------------------------------------------------------------- * Changes: * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith + * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions *--------------------------------------------------------------------*/ extern char * my_malloc (unsigned long); extern void my_free (char*); extern unsigned long total_malloced (void); -extern char * my_strdup (char*); +extern char * my_strdup (const char*); diff --git a/plugins/flp_import/unrtf/output.c b/plugins/flp_import/unrtf/output.c index 97057e1f65..b2efb6fdad 100644 --- a/plugins/flp_import/unrtf/output.c +++ b/plugins/flp_import/unrtf/output.c @@ -33,6 +33,7 @@ * 25 Sep 04, st001906@hrz1.hrz.tu-darmstadt.de: added stdlib.h for djgpp * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith * 06 Jan 06, marcossamaral@terra.com.br: changes in STDOUT + * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions *--------------------------------------------------------------------*/ @@ -111,7 +112,7 @@ op_free (OutputPersonality *op) * Returns: String. *=======================================================================*/ -char * +const char * #if 1 /* daved - 0.19.6 */ op_translate_char (OutputPersonality *op, int charset, int ch, int ntable) #else @@ -119,7 +120,7 @@ op_translate_char (OutputPersonality *op, int charset, int ch) #endif { short start; - char *result=NULL; + const char *result=NULL; CHECK_PARAM_NOT_NULL(op); diff --git a/plugins/flp_import/unrtf/output.h b/plugins/flp_import/unrtf/output.h index ae1a5a0b51..dcb30ea49a 100644 --- a/plugins/flp_import/unrtf/output.h +++ b/plugins/flp_import/unrtf/output.h @@ -28,6 +28,7 @@ *---------------------------------------------------------------------- * Changes: * 29 Mar 05, daved@physiol.usyd.edu.au: changes requested by ZT Smith + * 31 Oct 07, jasp00@users.sourceforge.net: replaced deprecated conversions *--------------------------------------------------------------------*/ @@ -35,92 +36,92 @@ typedef struct { - char *comment_begin; - char *comment_end; + const char *comment_begin; + const char *comment_end; - char *document_begin; - char *document_end; + const char *document_begin; + const char *document_end; - char *header_begin; - char *header_end; + const char *header_begin; + const char *header_end; - char *document_title_begin; - char *document_title_end; + const char *document_title_begin; + const char *document_title_end; char *document_keywords_begin; char *document_keywords_end; - char *document_author_begin; - char *document_author_end; + const char *document_author_begin; + const char *document_author_end; - char *document_changedate_begin; - char *document_changedate_end; + const char *document_changedate_begin; + const char *document_changedate_end; - char *body_begin; - char *body_end; + const char *body_begin; + const char *body_end; char *word_begin; char *word_end; - char *paragraph_begin; - char *paragraph_end; + const char *paragraph_begin; + const char *paragraph_end; - char *center_begin; - char *center_end; + const char *center_begin; + const char *center_end; - char *align_left_begin; - char *align_left_end; + const char *align_left_begin; + const char *align_left_end; - char *align_right_begin; - char *align_right_end; + const char *align_right_begin; + const char *align_right_end; - char *justify_begin; - char *justify_end; + const char *justify_begin; + const char *justify_end; - char *forced_space; - char *line_break; - char *page_break; + const char *forced_space; + const char *line_break; + const char *page_break; - char *hyperlink_begin; - char *hyperlink_end; + const char *hyperlink_begin; + const char *hyperlink_end; - char *imagelink_begin; - char *imagelink_end; + const char *imagelink_begin; + const char *imagelink_end; - char *table_begin; - char *table_end; + const char *table_begin; + const char *table_end; - char *table_row_begin; - char *table_row_end; + const char *table_row_begin; + const char *table_row_end; - char *table_cell_begin; - char *table_cell_end; + const char *table_cell_begin; + const char *table_cell_end; /* Character attributes */ - char *font_begin; - char *font_end; + const char *font_begin; + const char *font_end; - char *fontsize_begin; - char *fontsize_end; + const char *fontsize_begin; + const char *fontsize_end; /* standard font sizes are optional */ - char *fontsize8_begin; - char *fontsize8_end; + const char *fontsize8_begin; + const char *fontsize8_end; - char *fontsize10_begin; - char *fontsize10_end; + const char *fontsize10_begin; + const char *fontsize10_end; - char *fontsize12_begin; - char *fontsize12_end; + const char *fontsize12_begin; + const char *fontsize12_end; - char *fontsize14_begin; - char *fontsize14_end; + const char *fontsize14_begin; + const char *fontsize14_end; - char *fontsize18_begin; - char *fontsize18_end; + const char *fontsize18_begin; + const char *fontsize18_end; - char *fontsize24_begin; - char *fontsize24_end; + const char *fontsize24_begin; + const char *fontsize24_end; char *fontsize36_begin; char *fontsize36_end; @@ -128,71 +129,71 @@ typedef struct { char *fontsize48_begin; char *fontsize48_end; - char *smaller_begin; - char *smaller_end; + const char *smaller_begin; + const char *smaller_end; - char *bigger_begin; - char *bigger_end; + const char *bigger_begin; + const char *bigger_end; - char *foreground_begin; - char *foreground_end; + const char *foreground_begin; + const char *foreground_end; - char *background_begin; - char *background_end; + const char *background_begin; + const char *background_end; - char *bold_begin; - char *bold_end; + const char *bold_begin; + const char *bold_end; - char *italic_begin; - char *italic_end; + const char *italic_begin; + const char *italic_end; - char *underline_begin; - char *underline_end; + const char *underline_begin; + const char *underline_end; - char *dbl_underline_begin; - char *dbl_underline_end; + const char *dbl_underline_begin; + const char *dbl_underline_end; - char *superscript_begin; - char *superscript_end; + const char *superscript_begin; + const char *superscript_end; - char *subscript_begin; - char *subscript_end; + const char *subscript_begin; + const char *subscript_end; - char *strikethru_begin; - char *strikethru_end; + const char *strikethru_begin; + const char *strikethru_end; - char *dbl_strikethru_begin; - char *dbl_strikethru_end; + const char *dbl_strikethru_begin; + const char *dbl_strikethru_end; - char *emboss_begin; - char *emboss_end; + const char *emboss_begin; + const char *emboss_end; - char *engrave_begin; - char *engrave_end; + const char *engrave_begin; + const char *engrave_end; - char *shadow_begin; - char *shadow_end; + const char *shadow_begin; + const char *shadow_end; - char *outline_begin; - char *outline_end; + const char *outline_begin; + const char *outline_end; char *small_caps_begin; char *small_caps_end; - char *pointlist_begin; - char *pointlist_end; + const char *pointlist_begin; + const char *pointlist_end; - char *pointlist_item_begin; - char *pointlist_item_end; + const char *pointlist_item_begin; + const char *pointlist_item_end; - char *numericlist_begin; - char *numericlist_end; + const char *numericlist_begin; + const char *numericlist_end; - char *numericlist_item_begin; - char *numericlist_item_end; + const char *numericlist_item_begin; + const char *numericlist_item_end; - char *expand_begin; - char *expand_end; + const char *expand_begin; + const char *expand_end; char *toc_entry_begin; char *toc_entry_end; @@ -204,54 +205,54 @@ typedef struct { * to one of the charsets. */ struct { - char *bullet; - char *left_quote; - char *right_quote; - char *left_dbl_quote; - char *right_dbl_quote; - char *nonbreaking_space; - char *emdash; - char *endash; - char *lessthan; - char *greaterthan; - char *amp; - char *copyright; - char *trademark; + const char *bullet; + const char *left_quote; + const char *right_quote; + const char *left_dbl_quote; + const char *right_dbl_quote; + const char *nonbreaking_space; + const char *emdash; + const char *endash; + const char *lessthan; + const char *greaterthan; + const char *amp; + const char *copyright; + const char *trademark; char *nonbreaking_hyphen; char *optional_hyphen; } chars; - char **ascii_translation_table; + const char **ascii_translation_table; int simulate_small_caps : 1; int simulate_all_caps : 1; int simulate_word_underline : 1; - char **ansi_translation_table; + const char **ansi_translation_table; short ansi_first_char; short ansi_last_char; - char **cp437_translation_table; + const char **cp437_translation_table; short cp437_first_char; short cp437_last_char; - char **cp850_translation_table; + const char **cp850_translation_table; short cp850_first_char; short cp850_last_char; - char **mac_translation_table; + const char **mac_translation_table; short mac_first_char; short mac_last_char; #if 1 /* daved 0.20.0 */ unsigned int unisymbol1_first_char; unsigned int unisymbol1_last_char; - char **unisymbol1_translation_table; + const char **unisymbol1_translation_table; unsigned int unisymbol2_first_char; unsigned int unisymbol2_last_char; - char **unisymbol2_translation_table; + const char **unisymbol2_translation_table; unsigned int unisymbol3_first_char; unsigned int unisymbol3_last_char; - char **unisymbol3_translation_table; + const char **unisymbol3_translation_table; unsigned int unisymbol4_first_char; unsigned int unisymbol4_last_char; - char **unisymbol4_translation_table; + const char **unisymbol4_translation_table; #else #if 1 /* daved 0.19.4 unicode support */ short unisymbol1_first_char; @@ -273,7 +274,7 @@ typedef struct { #if 1 /* daved 0.19.5 SYMBOL font support */ short symbol_first_char; short symbol_last_char; - char **symbol_translation_table; + const char **symbol_translation_table; #endif void (*write_set_foreground) (int,int,int); @@ -284,7 +285,7 @@ OutputPersonality; extern OutputPersonality* op_create(void); extern void op_free (OutputPersonality*); #if 1 /* daved - 0.19.6 */ -extern char* op_translate_char (OutputPersonality*,int,int, int); +extern const char* op_translate_char (OutputPersonality*,int,int, int); #else extern char* op_translate_char (OutputPersonality*,int,int); #endif diff --git a/plugins/ladspa_effect/ladspa_effect.h b/plugins/ladspa_effect/ladspa_effect.h index 4ddd5030e1..020995a59d 100644 --- a/plugins/ladspa_effect/ladspa_effect.h +++ b/plugins/ladspa_effect/ladspa_effect.h @@ -25,14 +25,16 @@ #ifndef _LADSPA_EFFECT_H #define _LADSPA_EFFECT_H +#include + #include "effect.h" #include "engine.h" #include "ladspa_2_lmms.h" -#include "mixer.h" +#include "ladspa_base.h" #include "ladspa_control.h" #include "ladspa_control_dialog.h" -#include "ladspa_base.h" #include "main_window.h" +#include "mixer.h" typedef QVector multi_proc_t; diff --git a/plugins/lb302/lb302.cpp b/plugins/lb302/lb302.cpp index 42f1c4d1d5..787e624bce 100644 --- a/plugins/lb302/lb302.cpp +++ b/plugins/lb302/lb302.cpp @@ -662,8 +662,9 @@ int lb302Synth::process(sampleFrame *outbuf, const Uint32 size) sample_cnt++; vcf_envpos++; - float old_vco_k = vco_k; - bool looking; + // unused variables + //float old_vco_k = vco_k; + //bool looking; int decay_frames = 128; // update vco @@ -747,7 +748,7 @@ int lb302Synth::process(sampleFrame *outbuf, const Uint32 size) } - if(i>=release_frame) { + if((int)i>=release_frame) { vca_mode=1; } diff --git a/plugins/midi_import/midi_import.cpp b/plugins/midi_import/midi_import.cpp index c100580405..a982bc837d 100644 --- a/plugins/midi_import/midi_import.cpp +++ b/plugins/midi_import/midi_import.cpp @@ -560,8 +560,10 @@ bool FASTCALL midiImport::readTrack( int _track_end, QString & _track_name ) { int nominator = readByte(); int denominator = 1 << (int) readByte(); - int clocks = readByte(); - int notes = readByte(); + // clocks + readByte(); + // notes + readByte(); if( nominator == 0 ) { nominator = 4; diff --git a/plugins/singerbot/Makefile.am b/plugins/singerbot/Makefile.am index 85c01546c0..2fe42b81f1 100644 --- a/plugins/singerbot/Makefile.am +++ b/plugins/singerbot/Makefile.am @@ -31,7 +31,10 @@ CLEANFILES = $(MOC_FILES) ./embedded_resources.h pkglib_LTLIBRARIES = libsingerbot.la -libsingerbot_la_SOURCES = singerbot.cpp singerbot.h -libsingerbot_la_LDFLAGS = -lFestival -lestools -lestbase -lesd -lncurses +libsingerbot_la_SOURCES = singerbot.cpp singerbot.h file.h $(libsingerbot_la_SOURCES): ./embedded_resources.h + +pkglib_PROGRAMS = singerbot_proxy +singerbot_proxy_SOURCES = singerbot_proxy.cpp +singerbot_proxy_LDFLAGS = -lFestival -lestools -lestbase -lesd -lncurses -lrt diff --git a/plugins/singerbot/file.h b/plugins/singerbot/file.h new file mode 100644 index 0000000000..17b0e53124 --- /dev/null +++ b/plugins/singerbot/file.h @@ -0,0 +1,72 @@ +/* + * file.h - file descriptor wrapper + * + * Copyright (c) 2007 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 _FILE_H +#define _FILE_H + + +#include +#include + + +class File +{ +public: + File( int _fd ) : + m_fd( _fd ) + { + } + virtual ~File() + { + close( m_fd ); + } + + template + ssize_t read( T * _i, int _n = 1 ) + { + return( ::read( m_fd, _i, _n * sizeof( T ) ) ); + } + + template + ssize_t write( const T * _i, int _n = 1 ) + { + return( ::write( m_fd, _i, _n * sizeof( T ) ) ); + } + + off_t rewind( void ) + { + return( lseek( m_fd, 0, SEEK_SET ) ); + } + + +private: + const int m_fd; + +} ; + + + + +#endif diff --git a/plugins/singerbot/singerbot.cpp b/plugins/singerbot/singerbot.cpp index b522edf6cd..e1ab469e73 100644 --- a/plugins/singerbot/singerbot.cpp +++ b/plugins/singerbot/singerbot.cpp @@ -23,13 +23,20 @@ */ +#include "singerbot.h" + +#include +#include +#include +#include + #include #include #include #include -#include "singerbot.h" #include "engine.h" +#include "file.h" #include "instrument_track.h" #include "note_play_handle.h" #include "pattern.h" @@ -38,9 +45,6 @@ #undef SINGLE_SOURCE_COMPILE #include "embed.cpp" -#undef HAVE_CONFIG_H -#include - @@ -72,19 +76,10 @@ plugin * lmms_plugin_main( void * _data ) -singerBot::synThread * singerBot::s_thread = NULL; - - - - singerBot::singerBot( instrumentTrack * _track ) : instrument( _track, &singerbot_plugin_descriptor ) { - if( !s_thread ) - { - s_thread = new synThread(); - s_thread->start(); - } + synth_init(); setAutoFillBackground( TRUE ); QPalette pal; @@ -116,6 +111,7 @@ singerBot::singerBot( instrumentTrack * _track ) : singerBot::~singerBot() { + synth_destroy(); } @@ -148,7 +144,7 @@ void singerBot::playNote( notePlayHandle * _n, bool ) void singerBot::deleteNotePluginData( notePlayHandle * _n ) { handle_data * hdata = (handle_data *)_n->m_pluginData; - delete hdata->wave; + delete[] hdata->wave; src_delete( hdata->resampling_state ); delete hdata; } @@ -228,9 +224,8 @@ void singerBot::createWave( notePlayHandle * _n ) int word_index = _n->patternIndex() % m_words.size(); hdata->text = m_words[word_index].toAscii().constData(); - s_thread->set_data( hdata ); - s_thread->unlock_synth(); - s_thread->lock_handle(); + synth_send( hdata ); + synth_read( hdata ); if( !hdata->wave ) { @@ -246,7 +241,7 @@ void singerBot::createWave( notePlayHandle * _n ) } hdata->resampling_data.end_of_input = 0; - hdata->remaining_frames = hdata->wave->num_samples(); + hdata->remaining_frames = hdata->num_samples; } @@ -255,11 +250,10 @@ void singerBot::createWave( notePlayHandle * _n ) void singerBot::play( sampleFrame * _ab, handle_data * _hdata, const fpp_t _frames ) { - const f_cnt_t offset = _hdata->wave->num_samples() - - _hdata->remaining_frames; + const f_cnt_t offset = _hdata->num_samples - _hdata->remaining_frames; const double ratio = engine::getMixer()->sampleRate() - / (double)_hdata->wave->sample_rate(); + / (double)_hdata->sample_rate; const f_cnt_t margin = 2; f_cnt_t fragment_size = (f_cnt_t)( _frames / ratio ) + margin; @@ -270,8 +264,7 @@ void singerBot::play( sampleFrame * _ab, handle_data * _hdata, { for( f_cnt_t frame = 0; frame < fragment_size; ++frame ) { - sample_fragment[frame] = _hdata->wave->a( offset - + frame ) + sample_fragment[frame] = _hdata->wave[offset + frame] / OUTPUT_SAMPLE_MULTIPLIER; } } @@ -280,8 +273,7 @@ void singerBot::play( sampleFrame * _ab, handle_data * _hdata, for( f_cnt_t frame = 0; frame < _hdata->remaining_frames; ++frame ) { - sample_fragment[frame] = _hdata->wave->a( offset - + frame ) + sample_fragment[frame] = _hdata->wave[offset + frame] / OUTPUT_SAMPLE_MULTIPLIER; } memset( sample_fragment + _hdata->remaining_frames, 0, @@ -325,141 +317,104 @@ void singerBot::play( sampleFrame * _ab, handle_data * _hdata, - - - - -singerBot::synThread::synThread( void ) : - m_handle_semaphore( 1 ), - m_synth_semaphore( 1 ) +void singerBot::synth_init( void ) { - m_handle_semaphore.acquire(); - m_synth_semaphore.acquire(); + static int suffix_index = 0; + m_file_suffix = '.' + QString::number( getpid() ) + '.' + + QString::number( suffix_index++, 16 ); + + int fd = shm_open( addSuffix( "/lmms_singerbot" ), + O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR ); + m_shm = new File( fd ); + m_handle_semaphore = sem_open( addSuffix( "/lmms_singerbot_s1" ), + O_CREAT | O_EXCL, S_IRUSR | S_IWUSR, 0 ); + m_synth_semaphore = sem_open( addSuffix( "/lmms_singerbot_s2" ), + O_CREAT | O_EXCL, S_IRUSR | S_IWUSR, 0 ); + + pid_t cpid = fork(); + if( cpid == -1 ) + { + perror( "fork" ); + exit( EXIT_FAILURE ); + } + else if( cpid == 0 ) + { + sem_close( m_handle_semaphore ); + sem_close( m_synth_semaphore ); + + QString proxy_exec = configManager::inst()->pluginDir() + + QDir::separator() + + "singerbot_proxy"; + execlp( proxy_exec.toAscii().constData(), + proxy_exec.toAscii().constData(), + m_file_suffix.toAscii().constData(), + NULL ); + exit( EXIT_FAILURE ); + } + + sem_wait( m_handle_semaphore ); } -singerBot::synThread::~synThread() +void singerBot::synth_destroy( void ) { - m_handle_semaphore.release(); - m_synth_semaphore.release(); + m_shm->rewind(); + float stop = -1.0; + m_shm->write( &stop ); + + sem_post( m_synth_semaphore ); + wait( NULL ); + + sem_close( m_handle_semaphore ); + sem_close( m_synth_semaphore ); + sem_unlink( addSuffix( "/lmms_singerbot_s1" ) ); + sem_unlink( addSuffix( "/lmms_singerbot_s2" ) ); + + delete m_shm; + shm_unlink( addSuffix( "/lmms_singerbot" ) ); } -void singerBot::synThread::run( void ) +void singerBot::synth_send( handle_data * _hdata ) { - const int load_init_files = 1; - festival_initialize( load_init_files, FESTIVAL_HEAP_SIZE ); + m_shm->rewind(); + m_shm->write( &_hdata->frequency ); + m_shm->write( &_hdata->duration ); + Uint8 len = strlen( _hdata->text ); + m_shm->write( &len ); + m_shm->write( _hdata->text, len ); - festival_eval_command( - "(define get_segment" - " (lambda (utt) (begin" - " (Initialize utt)" - " (Text utt)" - " (Token_POS utt)" - " (Token utt)" - " (POS utt)" - " (Phrasify utt)" - " (Word utt)" - " ))" - ")" ); - - festival_eval_command( - "(Parameter.set 'Int_Method 'DuffInt)" ); - festival_eval_command( - "(Parameter.set 'Int_Target_Method Int_Targets_Default)" ); - - for( ; ; ) - { - m_synth_semaphore.acquire(); - text_to_wave(); - if( !m_data->wave ) - { - // Damaged SIOD environment? Retrying... - text_to_wave(); - if( !m_data->wave ) - { - printf( "Unsupported frequency?\n" ); - } - } - m_handle_semaphore.release(); - } + sem_post( m_synth_semaphore ); } -void singerBot::synThread::text_to_wave( void ) +void singerBot::synth_read( handle_data * _hdata ) { - //TODO: Heap corruption too -> move to separate process? - char command[80]; - sprintf( command, - "(set! duffint_params '((start %f) (end %f)))", - m_data->frequency, m_data->frequency ); - festival_eval_command( command ); - festival_eval_command( - "(Parameter.set 'Duration_Stretch 1)" ); + sem_wait( m_handle_semaphore ); - sprintf( command, - "(set! total_time (parse-number %f))", m_data->duration ); - festival_eval_command( command ); - festival_eval_command( - "(set! word " + quote_string( m_data->text, "\"", "\\", 1 ) - + ")" ); - if( festival_eval_command( - "(begin" - " (set! my_utt (eval (list 'Utterance 'Text word)))" - " (get_segment my_utt)" - " (if (equal? (length (utt.relation.leafs my_utt 'Segment)) 1)" - " (begin (set! my_utt (eval " - " (list 'Utterance 'Text (string-append word \" \" word))))" - " (get_segment my_utt)" - " ))" - " (Pauses my_utt)" - " (item.delete (utt.relation.first my_utt 'Segment))" - " (item.delete (utt.relation.last my_utt 'Segment))" - " (Intonation my_utt)" - " (PostLex my_utt)" - " (Duration my_utt)" - " (if (not (equal? total_time 0)) (begin" - " (set! utt_time" - " (item.feat (utt.relation.last my_utt 'Segment) 'end))" - " (Parameter.set 'Duration_Stretch (/ total_time utt_time))" - " (Duration my_utt)" - " ))" - " (Int_Targets my_utt)" - ")" ) - - && festival_eval_command( - " (Wave_Synth my_utt)" ) ) + m_shm->rewind(); + m_shm->read( &_hdata->num_samples ); + if( !_hdata->num_samples ) { - m_data->wave = get_wave( "my_utt" ); + return; } + m_shm->read( &_hdata->sample_rate ); + _hdata->wave = new short[_hdata->num_samples]; + m_shm->read( _hdata->wave, _hdata->num_samples ); } -EST_Wave * singerBot::synThread::get_wave( const char * _name ) +const char * singerBot::addSuffix( const char * _s ) { - LISP lutt = siod_get_lval( _name, NULL ); - if( !utterance_p( lutt ) ) - { - return( NULL ); - } - - EST_Relation * r = utterance( lutt )->relation( "Wave" ); - - //TODO: This check is useless. The error is fatal. - if ( !r || !r->head() ) - { - return( NULL ); - } - - return( new EST_Wave( *wave( r->head()->f( "wave" ) ) ) ); + return( QString( _s + m_file_suffix ).toAscii().constData() ); } diff --git a/plugins/singerbot/singerbot.h b/plugins/singerbot/singerbot.h index 513d2b4c91..8f40cf05e6 100644 --- a/plugins/singerbot/singerbot.h +++ b/plugins/singerbot/singerbot.h @@ -26,8 +26,6 @@ #ifndef _SINGERBOT_H #define _SINGERBOT_H -#include - #ifdef HAVE_CONFIG_H #include #endif @@ -38,11 +36,13 @@ #include "src/3rdparty/samplerate/samplerate.h" #endif +#include + #include "instrument.h" #include "mixer.h" -class EST_Wave; +class File; class QTextEdit; class sampleBuffer; @@ -73,7 +73,9 @@ public slots: private: typedef struct { - EST_Wave * wave; + short * wave; + int num_samples; + int sample_rate; f_cnt_t remaining_frames; float frequency; float duration; @@ -83,44 +85,11 @@ private: } handle_data; - class synThread : public QThread - { - public: - synThread( void ); - virtual ~synThread(); + QString m_file_suffix; - void set_data( handle_data * _hdata ) - { - m_data = _hdata; - } - - void unlock_synth( void ) - { - m_synth_semaphore.release(); - } - void lock_handle( void ) - { - m_handle_semaphore.acquire(); - } - - - protected: - virtual void run( void ); - - - private: - QSemaphore m_handle_semaphore; - QSemaphore m_synth_semaphore; - - handle_data * m_data; - - void text_to_wave( void ); - EST_Wave * get_wave( const char * _name ); - - } ; - - - static synThread * s_thread; + File * m_shm; + sem_t * m_handle_semaphore; + sem_t * m_synth_semaphore; QTextEdit * m_lyrics; QStringList m_words; @@ -131,6 +100,14 @@ private: const fpp_t _frames ); void updateWords( void ); + void synth_init( void ); + void synth_destroy( void ); + + void synth_send( handle_data * _hdata ); + void synth_read( handle_data * _hdata ); + + const char * addSuffix( const char * _s ); + } ; diff --git a/plugins/singerbot/singerbot_proxy.cpp b/plugins/singerbot/singerbot_proxy.cpp new file mode 100644 index 0000000000..791f10243f --- /dev/null +++ b/plugins/singerbot/singerbot_proxy.cpp @@ -0,0 +1,225 @@ +/* + * singerbot_proxy.cpp - separate process to deal with Festival + * + * Copyright (c) 2007 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 +#include +#include +#include + +#include "file.h" + +#undef HAVE_CONFIG_H +#include + + +static File * s_shm; +static sem_t * s_handle_semaphore; +static sem_t * s_synth_semaphore; + + +static void run( void ); +static EST_Wave * text_to_wave( float _frequency, float _duration, + const char * _text ); +static EST_Wave * get_wave( const char * _name ); + + + + +int main( int argc, char * * argv ) +{ + string resource = "/lmms_singerbot"; + resource += argv[1]; + int fd = shm_open( resource.c_str(), O_RDWR, S_IRUSR | S_IWUSR ); + s_shm = new File( fd ); + + resource = "/lmms_singerbot_s1"; + resource += argv[1]; + s_handle_semaphore = sem_open( resource.c_str(), 0 ); + + resource = "/lmms_singerbot_s2"; + resource += argv[1]; + s_synth_semaphore = sem_open( resource.c_str(), 0 ); + + sem_post( s_handle_semaphore ); + + run(); + + sem_close( s_handle_semaphore ); + sem_close( s_synth_semaphore ); + + delete s_shm; + + return( EXIT_SUCCESS ); +} + + + + +void run( void ) +{ + const int load_init_files = 1; + festival_initialize( load_init_files, FESTIVAL_HEAP_SIZE ); + + festival_eval_command( + "(define get_segment" + " (lambda (utt) (begin" + " (Initialize utt)" + " (Text utt)" + " (Token_POS utt)" + " (Token utt)" + " (POS utt)" + " (Phrasify utt)" + " (Word utt)" + " ))" + ")" ); + + festival_eval_command( + "(Parameter.set 'Int_Method 'DuffInt)" ); + festival_eval_command( + "(Parameter.set 'Int_Target_Method Int_Targets_Default)" ); + + for( ; ; ) + { + sem_wait( s_synth_semaphore ); + + float frequency; + float duration; + + s_shm->rewind(); + s_shm->read( &frequency ); + if( frequency == -1.0f ) + { + break; + } + s_shm->read( &duration ); + unsigned char len; + s_shm->read( &len ); + char * text = new char[len + 1]; + s_shm->read( text, len ); + text[len] = '\0'; + + EST_Wave * wave = text_to_wave( frequency, duration, text ); + if( !wave ) + { + // Damaged SIOD environment? Retrying... + wave = text_to_wave( frequency, duration, text ); + if( !wave ) + { + printf( "Unsupported frequency?\n" ); + } + } + + s_shm->rewind(); + int num_samples = wave ? wave->num_samples() : 0; + s_shm->write( &num_samples ); + if( num_samples ) + { + int sample_rate = wave->sample_rate(); + s_shm->write( &sample_rate ); + } + + for( int i = 0; i < num_samples; ++i ) + { + short sample = wave->a( i ); + s_shm->write( &sample ); + } + delete wave; + + sem_post( s_handle_semaphore ); + } +} + + + + +EST_Wave * text_to_wave( float _frequency, float _duration, const char * _text ) +{ + char command[80]; + sprintf( command, + "(set! duffint_params '((start %f) (end %f)))", _frequency, + _frequency ); + festival_eval_command( command ); + festival_eval_command( + "(Parameter.set 'Duration_Stretch 1)" ); + + sprintf( command, + "(set! total_time (parse-number %f))", _duration ); + festival_eval_command( command ); + festival_eval_command( + "(set! word " + quote_string( _text, "\"", "\\", 1 ) + ")" ); + if( festival_eval_command( + "(begin" + " (set! my_utt (eval (list 'Utterance 'Text word)))" + " (get_segment my_utt)" + " (if (equal? (length (utt.relation.leafs my_utt 'Segment)) 1)" + " (begin (set! my_utt (eval " + " (list 'Utterance 'Text (string-append word \" \" word))))" + " (get_segment my_utt)" + " ))" + " (Pauses my_utt)" + " (item.delete (utt.relation.first my_utt 'Segment))" + " (item.delete (utt.relation.last my_utt 'Segment))" + " (Intonation my_utt)" + " (PostLex my_utt)" + " (Duration my_utt)" + " (if (not (equal? total_time 0)) (begin" + " (set! utt_time" + " (item.feat (utt.relation.last my_utt 'Segment) 'end))" + " (Parameter.set 'Duration_Stretch (/ total_time utt_time))" + " (Duration my_utt)" + " ))" + " (Int_Targets my_utt)" + ")" ) + + && festival_eval_command( + " (Wave_Synth my_utt)" ) ) + { + return( get_wave( "my_utt" ) ); + } + + return( NULL ); +} + + + + +EST_Wave * get_wave( const char * _name ) +{ + LISP lutt = siod_get_lval( _name, NULL ); + if( !utterance_p( lutt ) ) + { + return( NULL ); + } + + EST_Relation * r = utterance( lutt )->relation( "Wave" ); + + //TODO: This check is useless. The error is fatal. + if ( !r || !r->head() ) + { + return( NULL ); + } + + return( new EST_Wave( *wave( r->head()->f( "wave" ) ) ) ); +} diff --git a/plugins/vibed/impulse_editor.cpp b/plugins/vibed/impulse_editor.cpp index 804393c131..1d0b7c989d 100644 --- a/plugins/vibed/impulse_editor.cpp +++ b/plugins/vibed/impulse_editor.cpp @@ -23,14 +23,14 @@ */ -#include +#include "impulse_editor.h" + #include #include -#include -#include +#include #include -#include "impulse_editor.h" +#include "caption_menu.h" #include "embed.h" #include "engine.h" #include "oscillator.h" @@ -41,7 +41,7 @@ impulseEditor::impulseEditor( QWidget * _parent, int _x, int _y, track * _track, Uint32 _len ) : - QWidget( _parent/*, "impulseEditor"*/ ), + QWidget( _parent ), m_sampleLength( _len ), m_normalizeFactor( 1.0f ), m_forward( TRUE ) @@ -438,16 +438,7 @@ void impulseEditor::setOn( bool _on ) void impulseEditor::contextMenuEvent( QContextMenuEvent * ) { - QMenu contextMenu( this ); - contextMenu.setTitle( accessibleName() ); -#warning TODO: css-formatting -#if 0 - QLabel * caption = new QLabel( "" + - QString( "Impulse Editor" ) + "", this ); - caption->setPaletteBackgroundColor( QColor( 0, 0, 192 ) ); - caption->setAlignment( Qt::AlignCenter ); - contextMenu.addAction( caption ); -#endif + captionMenu contextMenu( accessibleName() ); contextMenu.addAction( embed::getIconPixmap( "help" ), tr( "&Help" ), this, SLOT( displayHelp() ) ); contextMenu.exec( QCursor::pos() ); diff --git a/plugins/vibed/nine_button_selector.cpp b/plugins/vibed/nine_button_selector.cpp index a97a8eef32..b7c5f9a522 100644 --- a/plugins/vibed/nine_button_selector.cpp +++ b/plugins/vibed/nine_button_selector.cpp @@ -23,11 +23,11 @@ */ -#include -#include +#include "nine_button_selector.h" + #include -#include "nine_button_selector.h" +#include "caption_menu.h" #include "embed.h" @@ -53,7 +53,7 @@ nineButtonSelector::nineButtonSelector( QPixmap _button0_on, Uint32 _x, Uint32 _y, QWidget * _parent, track * _track ): - QWidget( _parent/*, "nineButtonSelector"*/ ), + QWidget( _parent ), m_selected( _default ) { setFixedSize( 50, 50 ); @@ -250,16 +250,7 @@ void FASTCALL nineButtonSelector::setSelected( Uint8 _new_button ) void nineButtonSelector::contextMenuEvent( QContextMenuEvent * ) { - QMenu contextMenu( this ); - contextMenu.setTitle( accessibleName() ); -#warning TODO: CSS-formatting -#if 0 - QLabel * caption = new QLabel( "" + - QString( "Selector" ) + "", this ); - caption->setPaletteBackgroundColor( QColor( 0, 0, 192 ) ); - caption->setAlignment( Qt::AlignCenter ); - contextMenu.addAction( caption ); -#endif + captionMenu contextMenu( accessibleName() ); contextMenu.addAction( embed::getIconPixmap( "help" ), tr( "&Help" ), this, SLOT( displayHelp() ) ); contextMenu.exec( QCursor::pos() ); diff --git a/plugins/vibed/vibed.cpp b/plugins/vibed/vibed.cpp index fa305b65f1..3f1d5526c9 100644 --- a/plugins/vibed/vibed.cpp +++ b/plugins/vibed/vibed.cpp @@ -23,14 +23,14 @@ */ +#include "vibed.h" + #include #include -#include -#include #include -#include "vibed.h" #include "base64.h" +#include "caption_menu.h" #include "engine.h" #include "instrument_track.h" #include "knob.h" @@ -78,6 +78,7 @@ vibed::vibed( instrumentTrack * instrument_track ) : for( Uint8 harm = 0; harm < 9; harm++ ) { m_editor = new impulseEditor( this, 76, 21, instrument_track ); + m_editor->setAccessibleName( tr( "Impulse Editor" ) ); m_editor->setOn( FALSE ); m_editor->hide(); m_editors.append( m_editor ); @@ -238,6 +239,7 @@ vibed::vibed( instrumentTrack * instrument_track ) : 21, 127, this, NULL ); + m_harmonic->setAccessibleName( tr( "Octave" ) ); m_harmonic->hide(); m_harmonics.append( m_harmonic ); m_harmonic->setWhatsThis( tr( @@ -271,6 +273,7 @@ vibed::vibed( instrumentTrack * instrument_track ) : 21, 39, this, NULL ); + m_stringSelector->setAccessibleName( tr( "String" ) ); connect( m_stringSelector, SIGNAL( nineButtonSelection( Uint8 ) ), this, SLOT( showString( Uint8 ) ) ); m_stringSelector->setWhatsThis( tr( @@ -588,16 +591,7 @@ void vibed::showString( Uint8 _string ) void vibed::contextMenuEvent( QContextMenuEvent * ) { - QMenu contextMenu( this ); - contextMenu.setTitle( accessibleName() ); -#warning TODO: CSS-formatting -#if 0 - QLabel * caption = new QLabel( "" + - QString( "Vibed" ) + "", this ); - caption->setPaletteBackgroundColor( QColor( 0, 0, 192 ) ); - caption->setAlignment( Qt::AlignCenter ); - contextMenu.addAction( caption ); -#endif + captionMenu contextMenu( publicName() ); contextMenu.addAction( embed::getIconPixmap( "help" ), tr( "&Help" ), this, SLOT( displayHelp() ) ); contextMenu.exec( QCursor::pos() ); diff --git a/plugins/vst_base/lvsl_client.cpp b/plugins/vst_base/lvsl_client.cpp index ba8d7dea2e..26f2c1b7e8 100644 --- a/plugins/vst_base/lvsl_client.cpp +++ b/plugins/vst_base/lvsl_client.cpp @@ -23,9 +23,12 @@ */ +#include "lvsl_client.h" + #include #include #include +#include #include #include @@ -60,11 +63,10 @@ #endif -#include "templates.h" #include "config_mgr.h" #include "engine.h" #include "main_window.h" -#include "lvsl_client.h" +#include "templates.h" diff --git a/plugins/vst_effect/vst_effect.h b/plugins/vst_effect/vst_effect.h index ec35feb0ce..f3a528e84f 100644 --- a/plugins/vst_effect/vst_effect.h +++ b/plugins/vst_effect/vst_effect.h @@ -27,6 +27,7 @@ #define _VST_EFFECT_H #include +#include #include "effect.h" #include "engine.h" diff --git a/src/audio/audio_alsa.cpp b/src/audio/audio_alsa.cpp index 009d6cac7d..0189e4199e 100644 --- a/src/audio/audio_alsa.cpp +++ b/src/audio/audio_alsa.cpp @@ -67,8 +67,8 @@ audioALSA::audioALSA( const sample_rate_t _sample_rate, bool & _success_ful, return; } - snd_pcm_hw_params_alloca( &m_hwParams ); - snd_pcm_sw_params_alloca( &m_swParams ); + snd_pcm_hw_params_malloc( &m_hwParams ); + snd_pcm_sw_params_malloc( &m_swParams ); if( ( err = setHWParams( _sample_rate, channels(), SND_PCM_ACCESS_RW_INTERLEAVED ) ) < 0 ) @@ -97,8 +97,8 @@ audioALSA::~audioALSA() { snd_pcm_close( m_handle ); } - // the following code doesn't work and leads to a crash... -/* if( m_hwParams != NULL ) + + if( m_hwParams != NULL ) { snd_pcm_hw_params_free( m_hwParams ); } @@ -106,7 +106,7 @@ audioALSA::~audioALSA() if( m_swParams != NULL ) { snd_pcm_sw_params_free( m_swParams ); - }*/ + } } diff --git a/src/audio/audio_file_ogg.cpp b/src/audio/audio_file_ogg.cpp index a3637211ca..95e3ce4367 100644 --- a/src/audio/audio_file_ogg.cpp +++ b/src/audio/audio_file_ogg.cpp @@ -80,11 +80,13 @@ inline Sint32 audioFileOgg::writePage( void ) bool audioFileOgg::startEncoding( void ) { vorbis_comment vc; - char * comments = "Cool=This song has been made using Linux " + const char * comments = "Cool=This song has been made using Linux " "MultiMedia Studio"; Sint32 comment_length = strlen( comments ); + char * user_comments = new char[comment_length + 1]; + strcpy( user_comments, comments ); - vc.user_comments = &comments; + vc.user_comments = &user_comments; vc.comment_lengths = &comment_length; vc.comments = 1; vc.vendor = NULL; diff --git a/src/core/automation_editor.cpp b/src/core/automation_editor.cpp index f2f3987b6e..14fe81cedc 100644 --- a/src/core/automation_editor.cpp +++ b/src/core/automation_editor.cpp @@ -26,15 +26,19 @@ */ +#include "automation_editor.h" + + #include #include #include -#include #include -#include -#include #include +#include +#include #include +#include +#include #ifndef __USE_XOPEN @@ -44,7 +48,6 @@ #include -#include "automation_editor.h" #include "song_editor.h" #include "main_window.h" #include "embed.h" diff --git a/src/core/automation_pattern.cpp b/src/core/automation_pattern.cpp index 950e9e8ca9..ffc3555491 100644 --- a/src/core/automation_pattern.cpp +++ b/src/core/automation_pattern.cpp @@ -283,7 +283,7 @@ void automationPattern::processMidiTime( const midiTime & _time ) } -#undef value + #include "automation_pattern.moc" diff --git a/src/core/config_mgr.cpp b/src/core/config_mgr.cpp index 13aad1c16a..9029c641ab 100644 --- a/src/core/config_mgr.cpp +++ b/src/core/config_mgr.cpp @@ -820,15 +820,15 @@ bool configManager::loadConfigFile( void ) ( 0, tr( "Version mismatches" ), tr( "Accordingly to the information in " "your LMMS-configuration-file " - "you seem\nto have run a " + "you seem to have run a " "different (probably older) " "version of LMMS before.\n" "It is recommended to run the " "setup-wizard again to ensure " - "that\nthe latest samples, " + "that the latest samples, " "presets, demo-projects etc. " - "are installed in your\n" - "LMMS-working-directory. " + "are installed in your " + "LMMS-working-directory.\n" "Run the setup-wizard now?" ), QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) @@ -840,6 +840,11 @@ bool configManager::loadConfigFile( void ) } } + QDir::setSearchPaths( "resources", QStringList() << artworkDir() + << defaultArtworkDir() ); + + loadStyleSheet(); + return( TRUE ); } @@ -911,6 +916,16 @@ void configManager::saveConfigFile( void ) + +void configManager::loadStyleSheet( void ) +{ + QFile file( "resources:style.css" ); + file.open( QIODevice::ReadOnly ); + qApp->setStyleSheet( file.readAll() ); +} + + + /* void configManager::processFilesRecursively( const QString & _src_dir, const QString & _dst_dir, @@ -941,7 +956,5 @@ void configManager::processFilesRecursively( const QString & _src_dir, #include "config_mgr.moc" -#undef absolutePath -#undef addButton #endif diff --git a/src/core/file_browser.cpp b/src/core/file_browser.cpp index 9b49a5ff99..4d1ed4e473 100644 --- a/src/core/file_browser.cpp +++ b/src/core/file_browser.cpp @@ -26,15 +26,15 @@ */ -#include +#include "file_browser.h" + + #include #include -#include -class QColorGroup; -#include +#include +#include -#include "file_browser.h" #include "bb_editor.h" #include "config_mgr.h" #include "debug.h" @@ -57,7 +57,6 @@ fileBrowser::fileBrowser( const QString & _directories, const QString & _filter, const QString & _title, const QPixmap & _pm, QWidget * _parent ) : sideBarWidget( _title, _pm, _parent ), - m_contextMenuItem( NULL ), m_directories( _directories ), m_filter( _filter ) { @@ -65,12 +64,6 @@ fileBrowser::fileBrowser( const QString & _directories, const QString & _filter, m_l = new listView( contentParent() ); addContentWidget( m_l ); - connect( m_l, SIGNAL( contextMenuRequested( Q3ListViewItem *, - const QPoint &, int ) ), - this, SLOT( contextMenuRequest( Q3ListViewItem *, - const QPoint &, int ) ) ); - - QPushButton * reload_btn = new QPushButton( embed::getIconPixmap( "reload" ), tr( "Reload (F5)" ), contentParent() ); addContentWidget( reload_btn ); @@ -98,36 +91,6 @@ void fileBrowser::reloadTree( void ) { addItems( *it ); } - - Q3ListViewItem * item = m_l->firstChild(); - bool resort = FALSE; - - // sort merged directories - while( item != NULL ) - { - directory * d = dynamic_cast( item ); - if( d == NULL ) - { - resort = TRUE; - } - else if( resort == TRUE ) - { - Q3ListViewItem * i2 = m_l->firstChild(); - d->moveItem( i2 ); - i2->moveItem( d ); - directory * d2 = NULL; - while( ( d2 = dynamic_cast( i2 ) ) != - NULL ) - { - if( d->text( 0 ) > d2->text( 0 ) ) - { - d->moveItem( d2 ); - } - i2 = i2->nextSibling(); - } - } - item = item->nextSibling(); - } } @@ -136,15 +99,48 @@ void fileBrowser::reloadTree( void ) void fileBrowser::addItems( const QString & _path ) { QDir cdir( _path ); - QStringList files = cdir.entryList( QDir::Files, QDir::Name ); - - // TODO: after dropping qt3-support we can use QStringList's iterator - // which makes it possible to travel through the list in reverse - // direction - - for( int i = 0; i < files.size(); ++i ) + QStringList files = cdir.entryList( QDir::Dirs, QDir::Name ); + for( QStringList::const_iterator it = files.constBegin(); + it != files.constEnd(); ++it ) { - QString cur_file = files[files.size() - i - 1]; + QString cur_file = *it; + if( cur_file[0] != '.' && + isDirWithContent( _path + QDir::separator() + cur_file, + m_filter ) ) + { + bool orphan = TRUE; + for( int i = 0; i < m_l->topLevelItemCount(); ++i ) + { + directory * d = dynamic_cast( + m_l->topLevelItem( i ) ); + if( d == NULL || cur_file < d->text( 0 ) ) + { + m_l->insertTopLevelItem( i, + new directory( cur_file, _path, + m_filter ) ); + orphan = FALSE; + break; + } + else if( cur_file == d->text( 0 ) ) + { + d->addDirectory( _path ); + orphan = FALSE; + break; + } + } + if( orphan ) + { + m_l->addTopLevelItem( new directory( cur_file, + _path, m_filter ) ); + } + } + } + + files = cdir.entryList( QDir::Files, QDir::Name ); + for( QStringList::const_iterator it = files.constBegin(); + it != files.constEnd(); ++it ) + { + QString cur_file = *it; if( cur_file[0] != '.' #warning TODO: add match here #ifdef QT4 @@ -154,33 +150,17 @@ void fileBrowser::addItems( const QString & _path ) #endif ) { + // TODO: don't insert instead of removing, order changed // remove existing file-items - delete m_l->findItem( cur_file, 0 ); + QList existing = m_l->findItems( + cur_file, Qt::MatchFixedString ); + if( !existing.empty() ) + { + delete existing.front(); + } (void) new fileItem( m_l, cur_file, _path ); } } - - files = cdir.entryList( QDir::Dirs, QDir::Name ); - for( int i = 0; i < files.size(); ++i ) - { - QString cur_file = files[files.size() - i - 1]; - if( cur_file[0] != '.' && - isDirWithContent( _path + QDir::separator() + cur_file, - m_filter ) ) - { - Q3ListViewItem * item = m_l->findItem( cur_file, 0 ); - if( item == NULL ) - { - (void) new directory( m_l, cur_file, _path, - m_filter ); - } - else if( dynamic_cast( item ) != NULL ) - { - dynamic_cast( item )-> - addDirectory( _path ); - } - } - } } @@ -196,11 +176,7 @@ bool fileBrowser::isDirWithContent( const QString & _path, QString cur_file = *it; if( cur_file[0] != '.' #warning TODO: add match here -#ifdef QT4 -// TBD -#else -// && QDir::match( _filter, cur_file.lower() ) -#endif + && QDir::match( _filter, cur_file.toLower() ) ) { return( TRUE ); @@ -240,169 +216,30 @@ void fileBrowser::keyPressEvent( QKeyEvent * _ke ) -void fileBrowser::contextMenuRequest( Q3ListViewItem * i, const QPoint &, int ) -{ - fileItem * f = dynamic_cast( i ); - if( f != NULL && ( f->type() == fileItem::SAMPLE_FILE || - f->type() == fileItem::PRESET_FILE ) ) - { - m_contextMenuItem = f; - QMenu * contextMenu = new QMenu( this ); - contextMenu->addAction( tr( "Send to active instrument-track" ), - this, - SLOT( sendToActiveInstrumentTrack() ) ); - contextMenu->addAction( tr( "Open in new instrument-track/" - "Song-Editor" ), - this, - SLOT( openInNewInstrumentTrackSE() ) ); - contextMenu->addAction( tr( "Open in new instrument-track/" - "B+B Editor" ), - this, - SLOT( openInNewInstrumentTrackBBE() ) ); - contextMenu->exec( QCursor::pos() ); - m_contextMenuItem = NULL; - delete contextMenu; - } - -} - - - - -void fileBrowser::contextMenuRequest( QListViewItem * i, const QPoint &, int ) -{ -} - - - - -void fileBrowser::sendToActiveInstrumentTrack( void ) -{ - if( engine::getMainWindow()->workspace() == NULL ) - { - return; - } - - // get all windows opened in the workspace - QWidgetList pl = engine::getMainWindow()->workspace()->windowList( - QWorkspace::StackingOrder ); - QListIterator w( pl ); - w.toBack(); - // now we travel through the window-list until we find an - // instrument-track - while( w.hasPrevious() ) - { - instrumentTrack * ct = dynamic_cast( - w.previous() ); - if( ct != NULL && ct->isHidden() == FALSE ) - { - // ok, it's an instrument-track, so we can apply the - // sample or the preset - engine::getMixer()->lock(); - if( m_contextMenuItem->type() == fileItem::SAMPLE_FILE ) - { - instrument * afp = ct->loadInstrument( - engine::sampleExtensions() - [m_contextMenuItem - ->extension()] ); - if( afp != NULL ) - { - afp->setParameter( "samplefile", - m_contextMenuItem->fullName() ); - } - } - else if( m_contextMenuItem->type() == - fileItem::PRESET_FILE ) - { - multimediaProject mmp( - m_contextMenuItem->fullName() ); - ct->loadTrackSpecificSettings( mmp.content(). - firstChild(). - toElement() ); - } - ct->toggledInstrumentTrackButton( TRUE ); - engine::getMixer()->unlock(); - break; - } - } -} - - - - -void fileBrowser::openInNewInstrumentTrack( trackContainer * _tc ) -{ - engine::getMixer()->lock(); - if( m_contextMenuItem->type() == fileItem::SAMPLE_FILE ) - { - instrumentTrack * ct = dynamic_cast( - track::create( track::INSTRUMENT_TRACK, _tc ) ); -#ifdef LMMS_DEBUG - assert( ct != NULL ); -#endif - instrument * afp = ct->loadInstrument( - engine::sampleExtensions() - [m_contextMenuItem - ->extension()] ); - if( afp != NULL ) - { - afp->setParameter( "samplefile", - m_contextMenuItem->fullName() ); - } - ct->toggledInstrumentTrackButton( TRUE ); - } - else if( m_contextMenuItem->type() == fileItem::PRESET_FILE ) - { - multimediaProject mmp( m_contextMenuItem->fullName() ); - track * t = track::create( track::INSTRUMENT_TRACK, _tc ); - instrumentTrack * ct = dynamic_cast( t ); - if( ct != NULL ) - { - ct->loadTrackSpecificSettings( mmp.content(). - firstChild(). - toElement() ); - ct->toggledInstrumentTrackButton( TRUE ); - } - } - engine::getMixer()->unlock(); -} - - - - -void fileBrowser::openInNewInstrumentTrackSE( void ) -{ - openInNewInstrumentTrack( engine::getSongEditor() ); -} - - - - -void fileBrowser::openInNewInstrumentTrackBBE( void ) -{ - openInNewInstrumentTrack( engine::getBBEditor() ); -} - - - - listView::listView( QWidget * _parent ) : - Q3ListView( _parent ), + QTreeWidget( _parent ), m_mousePressed( FALSE ), m_pressPos(), m_previewPlayHandle( NULL ), - m_pphMutex() + m_pphMutex(), + m_contextMenuItem( NULL ) { - addColumn( tr( "Files" ) ); - setTreeStepSize( 12 ); - setSorting( -1 ); - setShowToolTips( TRUE ); + setColumnCount( 1 ); + setHeaderLabel( tr( "Files" ) ); + setSortingEnabled( FALSE ); setFont( pointSizeF( font(), 7.5f ) ); + + connect( this, SIGNAL( itemDoubleClicked( QTreeWidgetItem *, int ) ), + SLOT( activateListItem( QTreeWidgetItem *, int ) ) ); + connect( this, SIGNAL( itemCollapsed( QTreeWidgetItem * ) ), + SLOT( updateDirectory( QTreeWidgetItem * ) ) ); + connect( this, SIGNAL( itemExpanded( QTreeWidgetItem * ) ), + SLOT( updateDirectory( QTreeWidgetItem * ) ) ); } @@ -415,11 +252,9 @@ listView::~listView() -void listView::contentsMouseDoubleClickEvent( QMouseEvent * _me ) +void listView::activateListItem( QTreeWidgetItem * _item, int _column ) { - Q3ListView::contentsMouseDoubleClickEvent( _me ); - fileItem * f = dynamic_cast( itemAt( - contentsToViewport( _me->pos() ) ) ); + fileItem * f = dynamic_cast( _item ); if( f == NULL ) { return; @@ -474,27 +309,176 @@ void listView::contentsMouseDoubleClickEvent( QMouseEvent * _me ) -void listView::contentsMousePressEvent( QMouseEvent * _me ) +void listView::sendToActiveInstrumentTrack( void ) { - Q3ListView::contentsMousePressEvent( _me ); + if( engine::getMainWindow()->workspace() == NULL ) + { + return; + } + + // get all windows opened in the workspace + QWidgetList pl = engine::getMainWindow()->workspace()->windowList( + QWorkspace::StackingOrder ); + QListIterator w( pl ); + w.toBack(); + // now we travel through the window-list until we find an + // instrument-track + while( w.hasPrevious() ) + { + instrumentTrack * ct = dynamic_cast( + w.previous() ); + if( ct != NULL && ct->isHidden() == FALSE ) + { + // ok, it's an instrument-track, so we can apply the + // sample or the preset + engine::getMixer()->lock(); + if( m_contextMenuItem->type() == fileItem::SAMPLE_FILE ) + { + instrument * afp = ct->loadInstrument( + engine::sampleExtensions() + [m_contextMenuItem + ->extension()] ); + if( afp != NULL ) + { + afp->setParameter( "samplefile", + m_contextMenuItem->fullName() ); + } + } + else if( m_contextMenuItem->type() == + fileItem::PRESET_FILE ) + { + multimediaProject mmp( + m_contextMenuItem->fullName() ); + ct->loadTrackSpecificSettings( mmp.content(). + firstChild(). + toElement() ); + } + ct->toggledInstrumentTrackButton( TRUE ); + engine::getMixer()->unlock(); + break; + } + } +} + + + + +void listView::openInNewInstrumentTrack( trackContainer * _tc ) +{ + engine::getMixer()->lock(); + if( m_contextMenuItem->type() == fileItem::SAMPLE_FILE ) + { + instrumentTrack * ct = dynamic_cast( + track::create( track::INSTRUMENT_TRACK, _tc ) ); +#ifdef LMMS_DEBUG + assert( ct != NULL ); +#endif + instrument * afp = ct->loadInstrument( + engine::sampleExtensions() + [m_contextMenuItem + ->extension()] ); + if( afp != NULL ) + { + afp->setParameter( "samplefile", + m_contextMenuItem->fullName() ); + } + ct->toggledInstrumentTrackButton( TRUE ); + } + else if( m_contextMenuItem->type() == fileItem::PRESET_FILE ) + { + multimediaProject mmp( m_contextMenuItem->fullName() ); + track * t = track::create( track::INSTRUMENT_TRACK, _tc ); + instrumentTrack * ct = dynamic_cast( t ); + if( ct != NULL ) + { + ct->loadTrackSpecificSettings( mmp.content(). + firstChild(). + toElement() ); + ct->toggledInstrumentTrackButton( TRUE ); + } + } + engine::getMixer()->unlock(); +} + + + + +void listView::openInNewInstrumentTrackBBE( void ) +{ + openInNewInstrumentTrack( engine::getBBEditor() ); +} + + + + +void listView::openInNewInstrumentTrackSE( void ) +{ + openInNewInstrumentTrack( engine::getSongEditor() ); +} + + + + +void listView::updateDirectory( QTreeWidgetItem * _item ) +{ + directory * dir = dynamic_cast( _item ); + if( dir != NULL ) + { + dir->update(); + } +} + + + + +void listView::contextMenuEvent( QContextMenuEvent * _e ) +{ + fileItem * f = dynamic_cast( itemAt( _e->pos() ) ); + if( f != NULL && ( f->type() == fileItem::SAMPLE_FILE || + f->type() == fileItem::PRESET_FILE ) ) + { + m_contextMenuItem = f; + QMenu contextMenu( this ); + contextMenu.addAction( tr( "Send to active instrument-track" ), + this, + SLOT( sendToActiveInstrumentTrack() ) ); + contextMenu.addAction( tr( "Open in new instrument-track/" + "Song-Editor" ), + this, + SLOT( openInNewInstrumentTrackSE() ) ); + contextMenu.addAction( tr( "Open in new instrument-track/" + "B+B Editor" ), + this, + SLOT( openInNewInstrumentTrackBBE() ) ); + contextMenu.exec( _e->globalPos() ); + m_contextMenuItem = NULL; + } +} + + + + +void listView::mousePressEvent( QMouseEvent * _me ) +{ + QTreeWidget::mousePressEvent( _me ); if( _me->button() != Qt::LeftButton ) { return; } - QPoint p( contentsToViewport( _me->pos() ) ); - Q3ListViewItem * i = itemAt( p ); + QTreeWidgetItem * i = itemAt( _me->pos() ); if ( i ) { - if ( p.x() > header()->cellPos( header()->mapToActual( 0 ) ) + - treeStepSize() * ( i->depth() + ( rootIsDecorated() ? - 1 : 0 ) ) + itemMargin() || - p.x() < header()->cellPos( - header()->mapToActual( 0 ) ) ) - { + // TODO: Restrict to visible selection +// if ( _me->x() > header()->cellPos( header()->mapToActual( 0 ) ) +// + treeStepSize() * ( i->depth() + ( rootIsDecorated() ? +// 1 : 0 ) ) + itemMargin() || +// _me->x() < header()->cellPos( +// header()->mapToActual( 0 ) ) ) +// { m_pressPos = _me->pos(); m_mousePressed = TRUE; - } +// } } fileItem * f = dynamic_cast( i ); @@ -542,15 +526,14 @@ void listView::contentsMousePressEvent( QMouseEvent * _me ) -void listView::contentsMouseMoveEvent( QMouseEvent * _me ) +void listView::mouseMoveEvent( QMouseEvent * _me ) { if( m_mousePressed == TRUE && ( m_pressPos - _me->pos() ).manhattanLength() > QApplication::startDragDistance() ) { - contentsMouseReleaseEvent( NULL ); - fileItem * f = dynamic_cast( itemAt( - contentsToViewport( m_pressPos ) ) ); + mouseReleaseEvent( NULL ); + fileItem * f = dynamic_cast( itemAt( m_pressPos ) ); if( f != NULL ) { switch( f->type() ) @@ -589,7 +572,7 @@ void listView::contentsMouseMoveEvent( QMouseEvent * _me ) -void listView::contentsMouseReleaseEvent( QMouseEvent * _me ) +void listView::mouseReleaseEvent( QMouseEvent * _me ) { if( !m_pphMutex.tryLock() ) { @@ -632,35 +615,29 @@ QPixmap * directory::s_folderOpenedPixmap = NULL; QPixmap * directory::s_folderLockedPixmap = NULL; -directory::directory( directory * _parent, const QString & _name, - const QString & _path, const QString & _filter ) : - Q3ListViewItem( _parent, _name ), - m_p( _parent ), - m_pix( NULL ), +directory::directory( const QString & _name, const QString & _path, + const QString & _filter ) : m_directories( _path ), m_filter( _filter ) { initPixmapStuff(); + + setText( 0, _name ); + setChildIndicatorPolicy( QTreeWidgetItem::ShowIndicator ); + + if( !QDir( fullName() ).isReadable() ) + { + setIcon( 0, *s_folderLockedPixmap ); + } + else + { + setIcon( 0, *s_folderPixmap ); + } } -directory::directory( Q3ListView * _parent, const QString & _name, - const QString & _path, const QString & _filter ) : - Q3ListViewItem( _parent, _name ), - m_p( NULL ), - m_pix( NULL ), - m_directories( _path ), - m_filter( _filter ) -{ - initPixmapStuff(); -} - - - - - void directory::initPixmapStuff( void ) { if( s_folderPixmap == NULL ) @@ -680,68 +657,39 @@ void directory::initPixmapStuff( void ) s_folderLockedPixmap = new QPixmap( embed::getIconPixmap( "folder_locked" ) ); } - - if( !QDir( fullName() ).isReadable() ) - { - setPixmap( s_folderLockedPixmap ); - } - else - { - setPixmap( s_folderPixmap ); - } } -void directory::setPixmap( const QPixmap * _px ) +void directory::update( void ) { - m_pix = _px; - setup(); - widthChanged( 0 ); - invalidateHeight(); - repaint(); -} - - - - -void directory::setOpen( bool _o ) -{ - if( _o ) + if( !isExpanded() ) { - setPixmap( s_folderOpenedPixmap ); - } - else - { - setPixmap( s_folderPixmap ); + setIcon( 0, *s_folderPixmap ); + return; } - if( _o && !childCount() ) + setIcon( 0, *s_folderOpenedPixmap ); + if( !childCount() ) { for( QStringList::iterator it = m_directories.begin(); it != m_directories.end(); ++it ) { + int top_index = childCount(); if( addItems( fullName( *it ) ) && ( *it ).contains( configManager::inst()->dataDir() ) ) { - ( new Q3ListViewItem( this, - listView::tr( "--- Factory files ---" ) ) )->setPixmap( 0, - embed::getIconPixmap( "factory_files" ) ); + QTreeWidgetItem * sep = new QTreeWidgetItem; + sep->setText( 0, listView::tr( + "--- Factory files ---" ) ); + sep->setIcon( 0, embed::getIconPixmap( + "factory_files" ) ); + insertChild( top_index, sep ); } } } - Q3ListViewItem::setOpen( _o ); -} - - - - -void directory::setup( void ) -{ - setExpandable( TRUE ); - Q3ListViewItem::setup(); } @@ -752,19 +700,56 @@ bool directory::addItems( const QString & _path ) QDir thisDir( _path ); if( !thisDir.isReadable() ) { - //readable = FALSE; - setExpandable( FALSE ); return( FALSE ); } - listView()->setUpdatesEnabled( FALSE ); + treeWidget()->setUpdatesEnabled( FALSE ); bool added_something = FALSE; - QStringList files = thisDir.entryList( QDir::Files, QDir::Name ); - for( int i = 0; i < files.size(); ++i ) + QStringList files = thisDir.entryList( QDir::Dirs, QDir::Name ); + for( QStringList::const_iterator it = files.constBegin(); + it != files.constEnd(); ++it ) { - QString cur_file = files[files.size() - i - 1]; + QString cur_file = *it; + if( cur_file[0] != '.' && fileBrowser::isDirWithContent( + thisDir.absolutePath() + QDir::separator() + + cur_file, m_filter ) ) + { + bool orphan = TRUE; + for( int i = 0; i < childCount(); ++i ) + { + directory * d = dynamic_cast( + child( i ) ); + if( d == NULL || cur_file < d->text( 0 ) ) + { + insertChild( i, new directory( cur_file, + _path, m_filter ) ); + orphan = FALSE; + break; + } + else if( cur_file == d->text( 0 ) ) + { + d->addDirectory( _path ); + orphan = FALSE; + break; + } + } + if( orphan ) + { + addChild( new directory( cur_file, _path, + m_filter ) ); + } + + added_something = TRUE; + } + } + + files = thisDir.entryList( QDir::Files, QDir::Name ); + for( QStringList::const_iterator it = files.constBegin(); + it != files.constEnd(); ++it ) + { + QString cur_file = *it; if( cur_file[0] != '.' && thisDir.match( m_filter, cur_file.toLower() ) /*QDir::match( FILE_FILTER, cur_file )*/ ) @@ -774,44 +759,7 @@ bool directory::addItems( const QString & _path ) } } - files = thisDir.entryList( QDir::Dirs, QDir::Name ); - for( int i = 0; i < files.size(); ++i ) - { - QString cur_file = files[files.size() - i - 1]; - if( cur_file[0] != '.' && fileBrowser::isDirWithContent( - thisDir.absolutePath() + QDir::separator() + - cur_file, m_filter ) ) - { - new directory( this, cur_file, _path, m_filter ); - added_something = TRUE; -#if 0 - if( firstChild() == NULL ) - { - continue; - } - bool moved = FALSE; - QListViewItem * item = firstChild(); - while( item != NULL ) - { - directory * cd = - dynamic_cast( item ); - if( cd != NULL ) - { -/* if( moved == FALSE || - cd->text( 0 ) < cur_file ) - {*/ - printf( "move item %s after %s\n", d->text(0).ascii(), cd->text(0).ascii()); - d->moveItem( cd ); - moved = TRUE; - //} - } - item = item->nextSibling(); - } -#endif - } - } - - listView()->setUpdatesEnabled( TRUE ); + treeWidget()->setUpdatesEnabled( TRUE ); return( added_something ); } @@ -827,29 +775,27 @@ QPixmap * fileItem::s_flpFilePixmap = NULL; QPixmap * fileItem::s_unknownFilePixmap = NULL; -fileItem::fileItem( Q3ListView * _parent, const QString & _name, +fileItem::fileItem( QTreeWidget * _parent, const QString & _name, const QString & _path ) : - Q3ListViewItem( _parent, _name ), - m_pix( NULL ), + QTreeWidgetItem( _parent ), m_path( _path ) { + setText( 0, _name ); determineFileType(); initPixmapStuff(); - setDragEnabled( TRUE ); } -fileItem::fileItem( Q3ListViewItem * _parent, const QString & _name, +fileItem::fileItem( QTreeWidgetItem * _parent, const QString & _name, const QString & _path ) : - Q3ListViewItem( _parent, _name ), - m_pix( NULL ), + QTreeWidgetItem( _parent ), m_path( _path ) { + setText( 0, _name ); determineFileType(); initPixmapStuff(); - setDragEnabled( TRUE ); } @@ -895,14 +841,24 @@ void fileItem::initPixmapStuff( void ) switch( m_type ) { - case PROJECT_FILE: m_pix = s_projectFilePixmap; break; - case PRESET_FILE: m_pix = s_presetFilePixmap; break; - case SAMPLE_FILE: m_pix = s_sampleFilePixmap; break; - case MIDI_FILE: m_pix = s_midiFilePixmap; break; - case FLP_FILE: m_pix = s_flpFilePixmap; break; + case PROJECT_FILE: + setIcon( 0, *s_projectFilePixmap ); + break; + case PRESET_FILE: + setIcon( 0, *s_presetFilePixmap ); + break; + case SAMPLE_FILE: + setIcon( 0, *s_sampleFilePixmap ); + break; + case MIDI_FILE: + setIcon( 0, *s_midiFilePixmap ); + break; + case FLP_FILE: + setIcon( 0, *s_flpFilePixmap ); + break; case UNKNOWN: default: - m_pix = s_unknownFilePixmap; + setIcon( 0, *s_unknownFilePixmap ); break; } } diff --git a/src/core/import_filter.cpp b/src/core/import_filter.cpp index d0eb3b64e4..c97c9b853b 100644 --- a/src/core/import_filter.cpp +++ b/src/core/import_filter.cpp @@ -126,7 +126,6 @@ bool importFilter::openFile( void ) } -#undef fileName #endif diff --git a/src/core/ladspa_manager.cpp b/src/core/ladspa_manager.cpp index 2e3b3eb5e0..6b288cd5cf 100644 --- a/src/core/ladspa_manager.cpp +++ b/src/core/ladspa_manager.cpp @@ -978,7 +978,3 @@ bool FASTCALL ladspaManager::cleanup( const ladspa_key_t & _plugin, } return( FALSE ); } - - -#undef value - diff --git a/src/core/main.cpp b/src/core/main.cpp index 4fa5e3ec22..91ed3a3af4 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -99,7 +99,7 @@ int main( int argc, char * * argv ) "version 2 of the License, or (at your option) any later version.\n\n" "Try \"%s --help\" for more information.\n\n", PACKAGE_VERSION, argv[0] ); - return( 0 ); + return( EXIT_SUCCESS ); } else if( argc > i && ( QString( argv[i] ) == "--help" || QString( argv[i] ) == "-h" ) ) @@ -114,7 +114,7 @@ int main( int argc, char * * argv ) "-v, --version show version information and exit.\n" "-h, --help show this usage message and exit.\n\n", PACKAGE_VERSION ); - return( 0 ); + return( EXIT_SUCCESS ); } else if( argc > i && ( QString( argv[i] ) == "--render" || QString( argv[i] ) == "-r" ) ) @@ -132,7 +132,7 @@ int main( int argc, char * * argv ) { printf( "\nInvalid output format %s.\n\n" "Try \"%s --help\" for more information.\n\n", argv[i + 1], argv[0] ); - return( -1 ); + return( EXIT_FAILURE ); } ++i; } @@ -142,7 +142,7 @@ int main( int argc, char * * argv ) { printf( "\nInvalid option %s.\n\n" "Try \"%s --help\" for more information.\n\n", argv[i], argv[0] ); - return( -1 ); + return( EXIT_FAILURE ); } file_to_load = argv[i]; } @@ -156,12 +156,8 @@ int main( int argc, char * * argv ) QString pos = QLocale::system().name().left( 2 ); // load translation for Qt-widgets/-dialogs -#ifdef QT_TRANSLATIONS_DIR loadTranslation( QString( "qt_" ) + pos, QString( QT_TRANSLATIONS_DIR ) ); -#else - loadTranslation( QString( "qt_" ) + pos ); -#endif // load actual translation for LMMS loadTranslation( pos ); @@ -170,7 +166,7 @@ int main( int argc, char * * argv ) if( !configManager::inst()->loadConfigFile() ) { - return( -1 ); + return( EXIT_FAILURE ); } QPalette pal = app.palette(); diff --git a/src/core/main_window.cpp b/src/core/main_window.cpp index f301830b62..1e0f7110fb 100644 --- a/src/core/main_window.cpp +++ b/src/core/main_window.cpp @@ -28,15 +28,16 @@ #include "main_window.h" +#include #include +#include #include #include -#include -#include -#include -#include #include -#include +#include +#include +#include +#include #ifdef HAVE_CONFIG_H @@ -112,21 +113,21 @@ mainWindow::mainWindow( void ) : QString wdir = configManager::inst()->workingDir(); side_bar->appendTab( new pluginBrowser( splitter ), ++id ); side_bar->appendTab( new fileBrowser( - configManager::inst()->factoryProjectsDir() + "*" + - configManager::inst()->userProjectsDir(), + configManager::inst()->userProjectsDir() + "*" + + configManager::inst()->factoryProjectsDir(), "*.mmp *.mmpz *.xml *.mid *.flp", tr( "My projects" ), embed::getIconPixmap( "project_file" ), splitter ), ++id ); side_bar->appendTab( new fileBrowser( - configManager::inst()->factorySamplesDir() + "*" + - configManager::inst()->userSamplesDir(), + configManager::inst()->userSamplesDir() + "*" + + configManager::inst()->factorySamplesDir(), sample_filter, tr( "My samples" ), embed::getIconPixmap( "sound_file" ), splitter ), ++id ); side_bar->appendTab( new fileBrowser( - configManager::inst()->factoryPresetsDir() + "*" + - configManager::inst()->userPresetsDir(), + configManager::inst()->userPresetsDir() + "*" + + configManager::inst()->factoryPresetsDir(), "*.cs.xml", tr( "My presets" ), embed::getIconPixmap( "preset_file" ), splitter ), ++id ); @@ -143,13 +144,8 @@ mainWindow::mainWindow( void ) : { m_workspace = new QWorkspace( splitter ); m_workspace->setScrollBarsEnabled( TRUE ); - -#warning TODO - m_workspace->setAutoFillBackground( TRUE ); - QPalette pal; - pal.setBrush( m_workspace->backgroundRole(), - embed::getIconPixmap( "background_artwork" ) ); - m_workspace->setPalette( pal ); + m_workspace->setBackground( embed::getIconPixmap( + "background_artwork" ) ); } hbox->addWidget( side_bar ); @@ -158,13 +154,9 @@ mainWindow::mainWindow( void ) : // create global-toolbar at the top of our window m_toolBar = new QWidget( main_widget ); + m_toolBar->setObjectName( "mainToolbar" ); m_toolBar->setFixedHeight( 64 ); m_toolBar->move( 0, 0 ); - m_toolBar->setAutoFillBackground( TRUE ); - QPalette pal; - pal.setBrush( m_toolBar->backgroundRole(), - embed::getIconPixmap( "main_toolbar_bg" ) ); - m_toolBar->setPalette( pal ); // add layout for organizing quite complex toolbar-layouting m_toolBarLayout = new QGridLayout( m_toolBar/*, 2, 1*/ ); @@ -221,8 +213,8 @@ void mainWindow::finalize( void ) m_toolBar ); m_templatesMenu = new QMenu( project_new ); - connect( m_templatesMenu, SIGNAL( aboutToShow( void ) ), - this, SLOT( fillTemplatesMenu( void ) ) ); + connect( m_templatesMenu, SIGNAL( aboutToShow() ), + this, SLOT( fillTemplatesMenu() ) ); connect( m_templatesMenu, SIGNAL( triggered( QAction * ) ), this, SLOT( createNewProjectFromTemplate( QAction * ) ) ); project_new->setMenu( m_templatesMenu ); @@ -357,11 +349,6 @@ 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 ); menuBar()->addMenu( project_menu )->setText( tr( "&Project" ) ); @@ -374,10 +361,14 @@ void mainWindow::finalize( void ) tr( "&Open..." ), this, SLOT( openProject() ), Qt::CTRL + Qt::Key_O ); -/* - project_menu->addAction( embed::getIconPixmap( "project_open" ), - tr( "Recently opened projects" ), - m_recentlyOpenedProjectsMenu );*/ + + m_recentlyOpenedProjectsMenu = project_menu->addMenu( + embed::getIconPixmap( "project_open" ), + tr( "Recently opened projects" ) ); + connect( m_recentlyOpenedProjectsMenu, SIGNAL( aboutToShow() ), + this, SLOT( updateRecentlyOpenedProjectsMenu() ) ); + connect( m_recentlyOpenedProjectsMenu, SIGNAL( triggered( QAction * ) ), + this, SLOT( openRecentlyOpenedProject( QAction * ) ) ); project_menu->addAction( embed::getIconPixmap( "project_save" ), tr( "&Save" ), @@ -649,13 +640,11 @@ void mainWindow::updateRecentlyOpenedProjectsMenu( void ) -void mainWindow::openRecentlyOpenedProject( int _id ) +void mainWindow::openRecentlyOpenedProject( QAction * _action ) { -#warning TODO -/* const QString & f = m_recentlyOpenedProjectsMenu->text( _id ); + const QString & f = _action->text(); engine::getSongEditor()->loadProject( f ); configManager::inst()->addRecentlyOpenedProject( f ); - updateRecentlyOpenedProjectsMenu();*/ } diff --git a/src/core/piano_roll.cpp b/src/core/piano_roll.cpp index eee59a5bbd..82dd53d9a4 100644 --- a/src/core/piano_roll.cpp +++ b/src/core/piano_roll.cpp @@ -26,15 +26,19 @@ */ +#include "piano_roll.h" + + #include #include #include #include -#include #include -#include -#include #include +#include +#include +#include +#include #ifndef __USE_XOPEN @@ -44,7 +48,6 @@ #include -#include "piano_roll.h" #include "automatable_object_templates.h" #include "clipboard.h" #include "combobox.h" diff --git a/src/core/piano_widget.cpp b/src/core/piano_widget.cpp index 479c98356f..683e8dd133 100644 --- a/src/core/piano_widget.cpp +++ b/src/core/piano_widget.cpp @@ -26,16 +26,17 @@ */ +#include "piano_widget.h" + + #include #include -#include -#include #include #include -#include "piano_widget.h" #include "automatable_object_templates.h" +#include "caption_menu.h" #include "embed.h" #include "gui_templates.h" #include "instrument_track.h" @@ -217,17 +218,7 @@ void pianoWidget::contextMenuEvent( QContextMenuEvent * _me ) return; } - QMenu contextMenu( this ); -#warning TODO: use CSS-formatting - contextMenu.setTitle( m_noteKnob->accessibleName() ); -#if 0 - QLabel * caption = new QLabel( "" + - QString( m_noteKnob->accessibleName() ) + "", - this ); - caption->setPaletteBackgroundColor( QColor( 0, 0, 192 ) ); - caption->setAlignment( Qt::AlignCenter ); - contextMenu.addAction( caption ); -#endif + captionMenu contextMenu( m_noteKnob->accessibleName() ); contextMenu.addAction( embed::getIconPixmap( "automation" ), tr( "&Open in automation editor" ), m_noteKnob->getAutomationPattern(), diff --git a/src/core/setup_dialog.cpp b/src/core/setup_dialog.cpp index fe47d335e7..b3445c5824 100644 --- a/src/core/setup_dialog.cpp +++ b/src/core/setup_dialog.cpp @@ -639,7 +639,6 @@ setupDialog::setupDialog( configTabs _tab_to_open ) : m_tabBar->addTab( midi, tr( "MIDI settings" ), 4, TRUE, TRUE )->setIcon( embed::getIconPixmap( "setup_midi" ) ); -#undef setIcon m_tabBar->setActiveTab( _tab_to_open ); diff --git a/src/core/song_editor.cpp b/src/core/song_editor.cpp index d7f74e6e39..e7839a0710 100644 --- a/src/core/song_editor.cpp +++ b/src/core/song_editor.cpp @@ -1499,7 +1499,6 @@ void FASTCALL songEditor::loadProject( const QString & _file_name ) configManager::inst()->addRecentlyOpenedProject( _file_name ); engine::getMainWindow()->resetWindowTitle( "" ); - engine::getMainWindow()->updateRecentlyOpenedProjectsMenu(); engine::getProjectJournal()->setJournalling( TRUE ); } @@ -1525,6 +1524,7 @@ bool songEditor::saveProject( void ) mmp.content() ); m_playPos[PLAY_SONG].m_timeLine->saveState( mmp, mmp.content() ); + m_fileName = mmp.nameWithExtension( m_fileName ); if( mmp.writeFile( m_fileName, m_oldFileName == "" || m_fileName != m_oldFileName ) == TRUE ) { @@ -1537,7 +1537,6 @@ bool songEditor::saveProject( void ) 2000 ); configManager::inst()->addRecentlyOpenedProject( m_fileName ); engine::getMainWindow()->resetWindowTitle( "" ); - engine::getMainWindow()->updateRecentlyOpenedProjectsMenu(); } else { diff --git a/src/core/surround_area.cpp b/src/core/surround_area.cpp index 44ca28dfbd..2314821e3d 100644 --- a/src/core/surround_area.cpp +++ b/src/core/surround_area.cpp @@ -26,18 +26,16 @@ */ +#include "surround_area.h" + + #include -#include -#include -#include #include #include -#include - -#include "surround_area.h" #include "automatable_object_templates.h" +#include "caption_menu.h" #include "embed.h" #include "knob.h" #include "templates.h" @@ -164,8 +162,7 @@ void surroundArea::contextMenuEvent( QContextMenuEvent * ) // an QApplication::restoreOverrideCursor()-call... mouseReleaseEvent( NULL ); - QMenu contextMenu( this ); - contextMenu.setTitle( accessibleName() ); + captionMenu contextMenu( accessibleName() ); contextMenu.addAction( embed::getIconPixmap( "automation" ), tr( "Open &X in automation editor" ), m_position_x->getAutomationPattern(), diff --git a/src/core/tool.cpp b/src/core/tool.cpp index 9b232ee955..c046a8df15 100644 --- a/src/core/tool.cpp +++ b/src/core/tool.cpp @@ -26,9 +26,12 @@ #include "tool.h" -#include "main_window.h" #include +#include + +#include "main_window.h" + diff --git a/src/core/track.cpp b/src/core/track.cpp index 8646f79e9e..4fda1f5ca4 100644 --- a/src/core/track.cpp +++ b/src/core/track.cpp @@ -450,7 +450,6 @@ void trackContentObject::contextMenuEvent( QContextMenuEvent * _cme ) contextMenu.exec( QCursor::pos() ); } -#undef addSeparator diff --git a/src/core/track_container.cpp b/src/core/track_container.cpp index a157494722..60d6612186 100644 --- a/src/core/track_container.cpp +++ b/src/core/track_container.cpp @@ -26,13 +26,16 @@ */ +#include "track_container.h" + + #include #include #include #include +#include -#include "track_container.h" #include "bb_track.h" #include "config_mgr.h" #include "debug.h" @@ -591,7 +594,5 @@ void trackContainer::scrollArea::wheelEvent( QWheelEvent * _we ) #include "track_container.moc" -#undef setValue -#undef maximum #endif diff --git a/src/lib/mmp.cpp b/src/lib/mmp.cpp index 5fae0428c0..0b764b7d56 100644 --- a/src/lib/mmp.cpp +++ b/src/lib/mmp.cpp @@ -188,57 +188,53 @@ multimediaProject::~multimediaProject() +QString multimediaProject::nameWithExtension( const QString & _fn ) const +{ + switch( type() ) + { + case SONG_PROJECT: + if( _fn.section( '.', -1 ) != "mmp" && + _fn.section( '.', -1 ) != "mpt" && + _fn.section( '.', -1 ) != "mmpz" ) + { + if( configManager::inst()->value( "app", + "nommpz" ).toInt() == 0 ) + { + return( _fn + ".mmpz" ); + } + return( _fn + ".mmp" ); + } + break; + case SONG_PROJECT_TEMPLATE: + if( _fn.section( '.',-1 ) != "mpt" ) + { + return( _fn + ".mpt" ); + } + break; + case INSTRUMENT_TRACK_SETTINGS: + if( _fn.section( '.', -2, -1 ) != "cs.xml" ) + { + return( _fn + ".cs.xml" ); + } + break; + default: ; + } + return( _fn ); +} + + + + bool multimediaProject::writeFile( QString & _fn, bool _overwrite_check ) { - bool clean_meta_nodes = FALSE; - QString fn = _fn; - bool compress = FALSE; - if( type() == INSTRUMENT_TRACK_SETTINGS ) - { - if( fn.section( '.', -2, -1 ) != "cs.xml" ) - { - fn += ".cs.xml"; - } - clean_meta_nodes = TRUE; - } - else if( type() == SONG_PROJECT ) - { - if( fn.section( '.', -1 ) != "mmp" && - fn.section( '.', -1 ) != "mpt" && - fn.section( '.', -1 ) != "mmpz" ) - { - compress = configManager::inst()->value( "app", - "nommpz" ).toInt() == 0; - if( compress ) - { - fn += ".mmpz"; - } - else - { - fn += ".mmp"; - } - } - else - { - compress = ( fn.section( '.', -1 ) == "mmpz" ); - } - clean_meta_nodes = TRUE; - } - else if( type() == SONG_PROJECT_TEMPLATE ) - { - if( fn.section( '.',-1 ) != "mpt" ) - { - fn += ".mpt"; - } - clean_meta_nodes = TRUE; - } - - if( clean_meta_nodes == TRUE ) + if( type() == SONG_PROJECT || type() == SONG_PROJECT_TEMPLATE + || type() == INSTRUMENT_TRACK_SETTINGS ) { cleanMetaNodes( documentElement() ); } + QString fn = nameWithExtension( _fn ); QFile outfile( fn ); if( _overwrite_check == TRUE && outfile.exists() == TRUE && @@ -271,7 +267,7 @@ bool multimediaProject::writeFile( QString & _fn, bool _overwrite_check ) return( FALSE ); } QString xml = "\n" + toString( 1 ); - if( compress ) + if( fn.section( '.', -1 ) == "mmpz" ) { outfile.write( qCompress( xml.toAscii() ) ); } diff --git a/src/lib/sample_buffer.cpp b/src/lib/sample_buffer.cpp index 47bfcdfe47..999c34d0a8 100644 --- a/src/lib/sample_buffer.cpp +++ b/src/lib/sample_buffer.cpp @@ -1268,11 +1268,6 @@ sampleBuffer::handleState::~handleState() -#undef write -#undef read -#undef pos - - #include "sample_buffer.moc" diff --git a/src/midi/midi_alsa_seq.cpp b/src/midi/midi_alsa_seq.cpp index bd146ae8a4..5dfabd59e8 100644 --- a/src/midi/midi_alsa_seq.cpp +++ b/src/midi/midi_alsa_seq.cpp @@ -60,11 +60,12 @@ midiALSASeq::midiALSASeq( void ) : m_queueID = snd_seq_alloc_queue( m_seqHandle ); snd_seq_queue_tempo_t * tempo; - snd_seq_queue_tempo_alloca( &tempo ); + snd_seq_queue_tempo_malloc( &tempo ); snd_seq_queue_tempo_set_tempo( tempo, 6000000 / engine::getSongEditor()->getTempo() ); snd_seq_queue_tempo_set_ppq( tempo, 16 ); snd_seq_set_queue_tempo( m_seqHandle, m_queueID, tempo ); + snd_seq_queue_tempo_free( tempo ); snd_seq_start_queue( m_seqHandle, m_queueID, NULL ); changeQueueTempo( engine::getSongEditor()->getTempo() ); @@ -341,8 +342,9 @@ void midiALSASeq::subscribeReadablePort( midiPort * _port, snd_seq_port_info_malloc( &port_info ); snd_seq_get_port_info( m_seqHandle, m_portIDs[_port][0], port_info ); const snd_seq_addr_t * dest = snd_seq_port_info_get_addr( port_info ); + snd_seq_port_info_free( port_info ); snd_seq_port_subscribe_t * subs; - snd_seq_port_subscribe_alloca( &subs ); + snd_seq_port_subscribe_malloc( &subs ); snd_seq_port_subscribe_set_sender( subs, &sender ); snd_seq_port_subscribe_set_dest( subs, dest ); if( _unsubscribe ) @@ -353,7 +355,7 @@ void midiALSASeq::subscribeReadablePort( midiPort * _port, { snd_seq_subscribe_port( m_seqHandle, subs ); } - snd_seq_port_info_free( port_info ); + snd_seq_port_subscribe_free( subs ); } @@ -383,8 +385,9 @@ void midiALSASeq::subscribeWriteablePort( midiPort * _port, m_portIDs[_port][1], port_info ); const snd_seq_addr_t * sender = snd_seq_port_info_get_addr( port_info ); + snd_seq_port_info_free( port_info ); snd_seq_port_subscribe_t * subs; - snd_seq_port_subscribe_alloca( &subs ); + snd_seq_port_subscribe_malloc( &subs ); snd_seq_port_subscribe_set_sender( subs, sender ); snd_seq_port_subscribe_set_dest( subs, &dest ); if( _unsubscribe ) @@ -395,7 +398,7 @@ void midiALSASeq::subscribeWriteablePort( midiPort * _port, { snd_seq_subscribe_port( m_seqHandle, subs ); } - snd_seq_port_info_free( port_info ); + snd_seq_port_subscribe_free( subs ); } @@ -547,8 +550,8 @@ void midiALSASeq::updatePortList( void ) snd_seq_client_info_t * cinfo; snd_seq_port_info_t * pinfo; - snd_seq_client_info_alloca( &cinfo ); - snd_seq_port_info_alloca( &pinfo ); + snd_seq_client_info_malloc( &cinfo ); + snd_seq_port_info_malloc( &pinfo ); snd_seq_client_info_set_client( cinfo, -1 ); while( snd_seq_query_next_client( m_seqHandle, cinfo ) >= 0 ) @@ -597,8 +600,8 @@ void midiALSASeq::updatePortList( void ) } } -/* snd_seq_client_info_free( cinfo ); - snd_seq_port_info_free( pinfo );*/ + snd_seq_client_info_free( cinfo ); + snd_seq_port_info_free( pinfo ); if( m_readablePorts != readable_ports ) { diff --git a/src/midi/midi_mapper.cpp b/src/midi/midi_mapper.cpp index dd809f2d85..849dea5584 100644 --- a/src/midi/midi_mapper.cpp +++ b/src/midi/midi_mapper.cpp @@ -3,7 +3,7 @@ /* * midi_mapper.cpp - MIDI-mapper for any midiDevice * - * Copyright (c) 2005 Tobias Doerffel + * Copyright (c) 2005-2007 Tobias Doerffel * * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net * @@ -213,7 +213,5 @@ void midiMapper::readChannelMap( QFile & _f ) -#undef indexOf - #endif diff --git a/src/tracks/instrument_track.cpp b/src/tracks/instrument_track.cpp index 748af16a4b..958ebe2bd9 100644 --- a/src/tracks/instrument_track.cpp +++ b/src/tracks/instrument_track.cpp @@ -26,6 +26,9 @@ */ +#include "instrument_track.h" + + #include #include #include @@ -37,9 +40,9 @@ #include #include #include +#include -#include "instrument_track.h" #include "arp_and_chords_tab_widget.h" #include "audio_port.h" #include "automation_pattern.h" diff --git a/src/widgets/automatable_button.cpp b/src/widgets/automatable_button.cpp index 40421194c0..6d49b1ef95 100644 --- a/src/widgets/automatable_button.cpp +++ b/src/widgets/automatable_button.cpp @@ -26,17 +26,18 @@ */ +#include "automatable_button.h" + #include -#include -#include #include -#include "automatable_button.h" #include "automatable_object_templates.h" +#include "caption_menu.h" #include "embed.h" + automatableButton::automatableButton( QWidget * _parent, const QString & _name, track * _track ) : QWidget( _parent ), @@ -93,17 +94,7 @@ void automatableButton::contextMenuEvent( QContextMenuEvent * _me ) pattern = getAutomationPattern(); } - QMenu contextMenu( target ); -#warning TODO: set according CSS-formatting - contextMenu.setTitle( target->accessibleName() ); -#if 0 - QLabel * caption = new QLabel( "" + - QString( target->accessibleName() ) + "", - this ); - caption->setPaletteBackgroundColor( QColor( 0, 0, 192 ) ); - caption->setAlignment( Qt::AlignCenter ); - contextMenu.addAction( caption ); -#endif + captionMenu contextMenu( target->accessibleName() ); contextMenu.addAction( embed::getIconPixmap( "automation" ), tr( "&Open in automation editor" ), pattern, diff --git a/src/widgets/automatable_slider.cpp b/src/widgets/automatable_slider.cpp index 4d05889d20..4aa8046796 100644 --- a/src/widgets/automatable_slider.cpp +++ b/src/widgets/automatable_slider.cpp @@ -25,14 +25,13 @@ */ +#include "automatable_slider.h" #include -#include -#include #include -#include "automatable_slider.h" #include "automatable_object_templates.h" +#include "caption_menu.h" #include "embed.h" #include "knob.h" @@ -96,22 +95,7 @@ void automatableSlider::setInitValue( int _value ) void automatableSlider::contextMenuEvent( QContextMenuEvent * _me ) { - // for the case, the user clicked right while pressing left mouse- - // button, the context-menu appears while mouse-cursor is still hidden - // and it isn't shown again until user does something which causes - // an QApplication::restoreOverrideCursor()-call... - mouseReleaseEvent( NULL ); - - QMenu contextMenu( this ); -#warning TODO: use according CSS formatting - contextMenu.setTitle( accessibleName() ); -#if 0 - QLabel * caption = new QLabel( "" + - QString( accessibleName() ) + "", this ); - caption->setPaletteBackgroundColor( QColor( 0, 0, 192 ) ); - caption->setAlignment( Qt::AlignCenter ); - contextMenu.addAction( caption ); -#endif + captionMenu contextMenu( accessibleName() ); contextMenu.addAction( embed::getIconPixmap( "automation" ), tr( "&Open in automation editor" ), m_knob->getAutomationPattern(), diff --git a/src/widgets/caption_menu.cpp b/src/widgets/caption_menu.cpp new file mode 100644 index 0000000000..41a9b0e4d2 --- /dev/null +++ b/src/widgets/caption_menu.cpp @@ -0,0 +1,53 @@ +#ifndef SINGLE_SOURCE_COMPILE + +/* + * caption_menu.cpp - context menu with a caption + * + * Copyright (c) 2007 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 "caption_menu.h" + + + + +captionMenu::captionMenu( const QString & _title, QWidget * _parent ) : + QMenu( _title, _parent ) +{ + QAction * caption = addAction( _title ); + caption->setEnabled( FALSE ); +} + + + + +captionMenu::~captionMenu() +{ +} + + + + +#include "caption_menu.moc" + + +#endif diff --git a/src/widgets/combobox.cpp b/src/widgets/combobox.cpp index f1f7e5cae9..0e30135e35 100644 --- a/src/widgets/combobox.cpp +++ b/src/widgets/combobox.cpp @@ -25,17 +25,17 @@ */ +#include "combobox.h" + #include #include #include -#include #include #include #include -#include "combobox.h" #include "automatable_object_templates.h" -#include "templates.h" +#include "caption_menu.h" #include "embed.h" #include "gui_templates.h" @@ -146,17 +146,7 @@ void comboBox::contextMenuEvent( QContextMenuEvent * _me ) return; } - QMenu contextMenu( this ); - contextMenu.setTitle( accessibleName() ); -#warning TODO: add css-formatting -#if 0 - QLabel * caption = new QLabel( "" + - QString( accessibleName() ) + "", - this ); - caption->setPaletteBackgroundColor( QColor( 0, 0, 192 ) ); - caption->setAlignment( Qt::AlignCenter ); - contextMenu.addAction( caption ); -#endif + captionMenu contextMenu( accessibleName() ); contextMenu.addAction( embed::getIconPixmap( "automation" ), tr( "&Open in automation editor" ), getAutomationPattern(), diff --git a/src/widgets/effect_label.cpp b/src/widgets/effect_label.cpp index bd224d1e2a..41d4f696a0 100644 --- a/src/widgets/effect_label.cpp +++ b/src/widgets/effect_label.cpp @@ -26,17 +26,20 @@ */ -#include -#include - #include "effect_label.h" + +#include +#include +#include + #include "effect_tab_widget.h" -#include "sample_track.h" #include "embed.h" #include "engine.h" #include "gui_templates.h" -#include "rename_dialog.h" #include "main_window.h" +#include "rename_dialog.h" +#include "sample_track.h" + diff --git a/src/widgets/kmultitabbar.cpp b/src/widgets/kmultitabbar.cpp index 39bfba030b..1a404cbb8e 100644 --- a/src/widgets/kmultitabbar.cpp +++ b/src/widgets/kmultitabbar.cpp @@ -1,7 +1,30 @@ #ifndef SINGLE_SOURCE_COMPILE -#include "templates.h" -#include "tooltip.h" +/* + * kmultitabbar.cpp - widget for horizontal and vertical tabs + * + * Copyright (c) 2001-2003 Joseph Wenninger + * Copyright (c) 2004-2007 Tobias Doerffel + * + * 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 "kmultitabbar.h" @@ -16,6 +39,9 @@ #include +#include "templates.h" +#include "tooltip.h" + #define NEARBYINT(i) ((int(float(i) + 0.5))) class KMultiTabBarTabPrivate { @@ -87,7 +113,7 @@ void KMultiTabBarInternal::setStyle(enum KMultiTabBar::KMultiTabBarStyle style) diff=0; \ for (int i2=i;i2neededSize();\ - if ((ulen+l1)>space){\ + if ((ulen+l1)>(int)space){\ if (ulen==0) diff=0;\ else diff=((float)(space-ulen))/(i2-i);\ break;\ diff --git a/src/widgets/knob.cpp b/src/widgets/knob.cpp index 7bddd84c14..10370ce361 100644 --- a/src/widgets/knob.cpp +++ b/src/widgets/knob.cpp @@ -28,12 +28,12 @@ */ +#include "knob.h" + #include #include #include #include -#include -#include #include #include #include @@ -44,17 +44,17 @@ #endif #include -#include "knob.h" #include "automatable_object_templates.h" -#include "embed.h" -#include "spc_bg_hndl_widget.h" +#include "caption_menu.h" #include "config_mgr.h" -#include "text_float.h" -#include "mixer.h" +#include "embed.h" +#include "engine.h" #include "gui_templates.h" -#include "templates.h" -#include "string_pair_drag.h" #include "main_window.h" +#include "spc_bg_hndl_widget.h" +#include "string_pair_drag.h" +#include "templates.h" +#include "text_float.h" @@ -321,16 +321,7 @@ void knob::contextMenuEvent( QContextMenuEvent * ) // an QApplication::restoreOverrideCursor()-call... mouseReleaseEvent( NULL ); - QMenu contextMenu( this ); - contextMenu.setTitle( accessibleName() ); -#warning TODO: css-formatting -#if 0 - QLabel * caption = new QLabel( "" + - QString( accessibleName() ) + "", this ); - caption->setPaletteBackgroundColor( QColor( 0, 0, 192 ) ); - caption->setAlignment( Qt::AlignCenter ); - contextMenu.addAction( caption ); -#endif + captionMenu contextMenu( accessibleName() ); contextMenu.addAction( embed::getIconPixmap( "reload" ), tr( "&Reset (%1%2)" ).arg( m_initValue ).arg( m_hintTextAfterValue ), diff --git a/src/widgets/lcd_spinbox.cpp b/src/widgets/lcd_spinbox.cpp index d682058350..0167469fc8 100644 --- a/src/widgets/lcd_spinbox.cpp +++ b/src/widgets/lcd_spinbox.cpp @@ -25,14 +25,14 @@ */ +#include "lcd_spinbox.h" + #include -#include #include -#include #include -#include "lcd_spinbox.h" #include "automatable_object_templates.h" +#include "caption_menu.h" #include "embed.h" #include "gui_templates.h" #include "templates.h" @@ -171,16 +171,7 @@ void lcdSpinBox::contextMenuEvent( QContextMenuEvent * _me ) // an QApplication::restoreOverrideCursor()-call... mouseReleaseEvent( NULL ); - QMenu contextMenu( this ); - contextMenu.setTitle( accessibleName() ); -#warning TODO: CSS-formatting -#if 0 - QLabel * caption = new QLabel( "" + - QString( accessibleName() ) + "", this ); - caption->setPaletteBackgroundColor( QColor( 0, 0, 192 ) ); - caption->setAlignment( Qt::AlignCenter ); - contextMenu.addAction( caption ); -#endif + captionMenu contextMenu( accessibleName() ); contextMenu.addAction( embed::getIconPixmap( "automation" ), tr( "&Open in automation editor" ), getAutomationPattern(), diff --git a/src/widgets/project_notes.cpp b/src/widgets/project_notes.cpp index 1a34f1497d..716bd36679 100644 --- a/src/widgets/project_notes.cpp +++ b/src/widgets/project_notes.cpp @@ -25,6 +25,8 @@ */ +#include "project_notes.h" + #include #include #include @@ -35,8 +37,8 @@ #include #include #include +#include -#include "project_notes.h" #include "embed.h" #include "engine.h" #include "main_window.h" diff --git a/src/widgets/rack_plugin.cpp b/src/widgets/rack_plugin.cpp index 3b1da70b46..8030048f6a 100644 --- a/src/widgets/rack_plugin.cpp +++ b/src/widgets/rack_plugin.cpp @@ -26,24 +26,23 @@ */ -#include -#include -#include -#include -#include -#include - #include "rack_plugin.h" + +#include +#include +#include + #include "audio_port.h" -#include "knob.h" -#include "led_checkbox.h" -#include "tempo_sync_knob.h" -#include "tooltip.h" +#include "caption_menu.h" #include "effect_control_dialog.h" #include "embed.h" #include "engine.h" #include "gui_templates.h" +#include "knob.h" +#include "led_checkbox.h" #include "main_window.h" +#include "tempo_sync_knob.h" +#include "tooltip.h" rackPlugin::rackPlugin( QWidget * _parent, @@ -239,31 +238,21 @@ void rackPlugin::setGate( float _value ) void rackPlugin::contextMenuEvent( QContextMenuEvent * ) { - QPointer contextMenu = new QMenu( this ); - contextMenu->setTitle( m_effect->publicName() ); -#warning TODO: CSS-formatting -#if 0 - QLabel * caption = new QLabel( "" + - QString( m_effect->publicName() ) + - "", - this ); - caption->setPaletteBackgroundColor( QColor( 0, 0, 192 ) ); - caption->setAlignment( Qt::AlignCenter ); - contextMenu->addAction( caption ); -#endif - contextMenu->addAction( embed::getIconPixmap( "arp_up_on" ), - tr( "Move &up" ), + QPointer contextMenu = new captionMenu( + m_effect->publicName() ); + contextMenu->addAction( embed::getIconPixmap( "arp_up_on" ), + tr( "Move &up" ), this, SLOT( moveUp() ) ); - contextMenu->addAction( embed::getIconPixmap( "arp_down_on" ), + contextMenu->addAction( embed::getIconPixmap( "arp_down_on" ), tr( "Move &down" ), this, SLOT( moveDown() ) ); contextMenu->addSeparator(); - contextMenu->addAction( embed::getIconPixmap( "cancel" ), + contextMenu->addAction( embed::getIconPixmap( "cancel" ), tr( "&Remove this plugin" ), this, SLOT( deletePlugin() ) ); contextMenu->addSeparator(); - contextMenu->addAction( embed::getIconPixmap( "help" ), - tr( "&Help" ), + contextMenu->addAction( embed::getIconPixmap( "help" ), + tr( "&Help" ), this, SLOT( displayHelp() ) ); contextMenu->exec( QCursor::pos() ); delete contextMenu; diff --git a/src/widgets/tab_bar.cpp b/src/widgets/tab_bar.cpp index 3345ece401..58b2e1d7ae 100644 --- a/src/widgets/tab_bar.cpp +++ b/src/widgets/tab_bar.cpp @@ -3,7 +3,7 @@ /* * tab_bar.cpp - implementation of tab-bar * - * Copyright (c) 2004-2006 Tobias Doerffel + * Copyright (c) 2004-2007 Tobias Doerffel * * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net * @@ -241,9 +241,6 @@ bool tabBar::allHidden( void ) -#undef value -#undef removeWidget - #include "tab_bar.moc" #include "tab_button.moc" diff --git a/src/widgets/tempo_sync_knob.cpp b/src/widgets/tempo_sync_knob.cpp index d88f79e09a..233fd4e709 100644 --- a/src/widgets/tempo_sync_knob.cpp +++ b/src/widgets/tempo_sync_knob.cpp @@ -26,12 +26,13 @@ */ -#include -#include -#include - #include "tempo_sync_knob.h" + +#include +#include + #include "automatable_object_templates.h" +#include "caption_menu.h" #include "embed.h" #include "main_window.h" #include "meter_dialog.h" @@ -73,16 +74,7 @@ tempoSyncKnob::~tempoSyncKnob() void tempoSyncKnob::contextMenuEvent( QContextMenuEvent * ) { - QMenu contextMenu( this ); - contextMenu.setTitle( accessibleName() ); -#warning TODO: CSS-formatting -#if 0 - QLabel * caption = new QLabel( "" + - QString( accessibleName() ) + "", this ); - caption->setPaletteBackgroundColor( QColor( 0, 0, 192 ) ); - caption->setAlignment( Qt::AlignCenter ); - contextMenu.addAction( caption ); -#endif + captionMenu contextMenu( accessibleName() ); contextMenu.addAction( embed::getIconPixmap( "reload" ), tr( "&Reset (%1%2)" ).arg( m_initValue ).arg( m_hintTextAfterValue ), diff --git a/src/widgets/text_float.cpp b/src/widgets/text_float.cpp index ee05228cf8..4462574eb5 100644 --- a/src/widgets/text_float.cpp +++ b/src/widgets/text_float.cpp @@ -242,7 +242,5 @@ void textFloat::updateSize( void ) -#undef setParent - #endif