Compare commits

...

28 Commits

Author SHA1 Message Date
Tobias Doerffel
d88b2959ce 0.2.1 release
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@272 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-28 08:42:40 +00:00
Tobias Doerffel
465ecfba5c fixes
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@271 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-25 12:39:35 +00:00
Javier Serrano Polo
04c2023b2e segfault fixing
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@270 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-24 01:22:33 +00:00
Javier Serrano Polo
c3846777e0 added checks to avoid segfaults when closing the application
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@269 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-24 01:20:38 +00:00
Javier Serrano Polo
e3cac734fa handle notes deleted when keys still pressed
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@268 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-24 01:19:49 +00:00
Javier Serrano Polo
b31baa69ec segfault fixing
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@267 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-23 00:36:33 +00:00
Javier Serrano Polo
3aceeca43c added checks to avoid segfaults when closing the application
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@266 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-23 00:33:55 +00:00
Javier Serrano Polo
b0e556781c initialize m_lastKey, fixes segfault
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@265 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-23 00:33:10 +00:00
Javier Serrano Polo
a9cccac236 automation optimization, graceful shutdown and more fixes
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@264 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:34:44 +00:00
Javier Serrano Polo
1205a0780d updated translation
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@263 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:32:45 +00:00
Javier Serrano Polo
0505adfb42 removed unused signal section
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@262 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:31:53 +00:00
Javier Serrano Polo
4c23cef58f play the automation track only when playing song
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@261 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:31:27 +00:00
Javier Serrano Polo
d21341e487 changed some accelerators
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@260 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:30:57 +00:00
Javier Serrano Polo
2b365743d4 - changed some accelerators
- redirect keyboard events to the piano widget
- fixed segfault when pressing Ctrl with no pattern


git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@259 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:30:27 +00:00
Javier Serrano Polo
5415a3e7ee redirect events to the piano widget
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@258 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:29:26 +00:00
Javier Serrano Polo
5a361f6c08 moved key event handlers to public
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@257 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:28:59 +00:00
Javier Serrano Polo
8fc26a4269 allow access to the piano widget
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@256 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:28:26 +00:00
Javier Serrano Polo
5d52385fbd close the engine rather than delete it
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@255 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:27:54 +00:00
Javier Serrano Polo
a417c3b353 - do the clean-up in close()
- ensure deleted elements aren't accessed


git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@254 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:27:19 +00:00
Javier Serrano Polo
b468d04a98 added checks to avoid segfaults when closing the application
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@253 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:26:25 +00:00
Javier Serrano Polo
0396717d3e - added check to avoid segfaults when closing the application
- reverted processMidiTime(), that processing is needed


git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@252 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:25:45 +00:00
Javier Serrano Polo
c51fd3eb4b added method to avoid segfaults when closing the application
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@251 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:24:43 +00:00
Javier Serrano Polo
485d14ff08 - trigger automation only when time has changed
- remove references from patterns when closing the application


git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@250 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:24:09 +00:00
Javier Serrano Polo
8d2958b56f trigger automation only when time has changed
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@249 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:23:24 +00:00
Javier Serrano Polo
685c7b9ef6 avoid unnecessary level updates
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@248 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-22 03:22:42 +00:00
Danny McRae
4d973ffb97 twoddled with optimization flags
Modified Files:
  ChangeLog configure.in


git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@247 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-21 23:08:51 +00:00
Tobias Doerffel
a76803759c critical fixes
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@246 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-20 09:29:40 +00:00
Tobias Doerffel
5c8a2f9b9f removed vst_sdk23_headers.diff
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@245 0778d3d1-df1d-0410-868b-ea421aaaa00d
2006-07-19 09:46:19 +00:00
30 changed files with 411 additions and 130 deletions

105
ChangeLog
View File

@@ -1,9 +1,114 @@
2006-07-27 Tobias Doerffel <tobydox/at/users/dot/sourceforge/dot/net>
* configure.in:
made 0.2.1 release
* include/mixer.h:
* include/visualization_widget.h:
* src/widgets/visualization_widget.cpp:
fixed a bug in connection between mixer and visualization-widget
2006-07-24 Javier Serrano Polo <jasp00/at/terra/dot/es>
* src/tracks/instrument_track.cpp:
handle notes deleted when keys still pressed
* include/song_editor.h:
* src/core/note.cpp:
* src/core/song_editor.cpp:
added checks to avoid segfaults when closing the application
2006-07-23 Javier Serrano Polo <jasp00/at/terra/dot/es>
* src/core/piano_widget.cpp:
initialize m_lastKey, fixes segfault
* src/core/automation_editor.cpp:
* src/core/note_play_handle.cpp:
added checks to avoid segfaults when closing the application
2006-07-22 Javier Serrano Polo <jasp00/at/terra/dot/es>
* include/automatable_object.h:
avoid unnecessary level updates
* include/track.h:
* src/tracks/instrument_track.cpp:
trigger automation only when time has changed
* src/core/track.cpp:
- trigger automation only when time has changed
- remove references from patterns when closing the application
* include/automation_pattern.h:
added method to avoid segfaults when closing the application
* src/tracks/automation_pattern.cpp:
- added check to avoid segfaults when closing the application
- reverted processMidiTime(), that processing is needed
* src/core/track_container.cpp:
* src/lib/journalling_object.cpp:
added checks to avoid segfaults when closing the application
* include/engine.h:
* src/core/engine.cpp:
- do the clean-up in close()
- ensure deleted elements aren't accessed
* src/core/main_window.cpp:
close the engine rather than delete it
* include/instrument_track.h:
allow access to the piano widget
* include/piano_widget.h:
moved key event handlers to public
* include/piano_roll.h:
redirect events to the piano widget
* src/core/piano_roll.cpp:
- changed some accelerators
- redirect keyboard events to the piano widget
- fixed segfault when pressing Ctrl with no pattern
* src/core/automation_editor.cpp:
changed some accelerators
* src/core/song_editor.cpp:
play the automation track only when playing song
* include/automation_track.h:
removed unused signal section
* data/locale/ca.ts:
updated translation
2006-07-21 Danny McRae <khjklujn/at/users/dot/sourceforge/dot/net>
* configure.in:
- removed -fomit-frame-pointer flag--causes wine to crash on
Ubuntu
- added check for gcc 4.0 for optimization flags--left it
commented out--needs to be tested with 4.1
2006-07-20 Tobias Doerffel <tobydox/at/users/dot/sourceforge/dot/net>
* src/tracks/automation_pattern.cpp:
automationPattern::processMidiTime(): do not start search on time-map if
empty - find() on maps is horribly slow and makes LMMS unusable (still
have to find a better solution without any find()s at all)
2006-07-19 Tobias Doerffel <tobydox/at/users/dot/sourceforge/dot/net>
* configure.in:
- added optimization-flags
- made 0.2.0 release
* vst_sdk23_headers.diff:
- removed as not needed anymore
2006-07-17 Tobias Doerffel <tobydox/at/users/dot/sourceforge/dot/net>
* data/locale/de.ts:

View File

@@ -327,7 +327,7 @@ lmms_SOURCES = \
EXTRA_DIST = $(lmms_EMBEDDED_RESOURCES) vst_sdk23_headers.diff lmms.1
EXTRA_DIST = $(lmms_EMBEDDED_RESOURCES) lmms.1
CLEANFILES = $(lmms_MOC) ./embedded_resources.h

View File

@@ -2,8 +2,8 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.50)
AC_INIT(lmms, 0.2.0, tobydox/at/users/dot/sourceforge/dot/net)
AM_INIT_AUTOMAKE(lmms, 0.2.0)
AC_INIT(lmms, 0.2.1, tobydox/at/users/dot/sourceforge/dot/net)
AM_INIT_AUTOMAKE(lmms, 0.2.1)
AM_CONFIG_HEADER(config.h)
@@ -14,11 +14,18 @@ AC_PROG_LN_S
AC_PROG_GCC_TRADITIONAL
AC_PROG_LIBTOOL
EXTRAFLAGS="-floop-optimize2 -fomit-frame-pointer -fgcse-sm -fgcse-las"
# -fomit-frame-pointer crashes wine on Ubuntu Dapper--Danny 7/21/06
#EXTRAFLAGS="-floop-optimize2 -fomit-frame-pointer -fgcse-sm -fgcse-las"
EXTRAFLAGS="-floop-optimize2 -fgcse-sm -fgcse-las"
# Tested with GCC 4.0--needs to be tested with 4.1--Danny 7/21/06
if test "x`$CC --version|head -1|cut -d\ -f3|cut -d. -f1`" = "x4" ; then
EXTRAFLAGS="$EXTRAFLAGS -ftree-vectorize -funsafe-loop-optimizations -Wunsafe-loop-optimizations -ftree-loop-linear"
EXTRAFLAGS="$EXTRAFLAGS -ftree-vectorize -ftree-loop-linear"
if test "x`$CC --version|head -1|cut -d\ -f3|cut -d. -f2`" != "x0" ; then
EXTRAFLAGS="$EXTRAFLAGS -funsafe-loop-optimizations -Wunsafe-loop-optimizations"
fi
fi
CFLAGS="$CFLAGS $EXTRAFLAGS"
CXXFLAGS="$CXXFLAGS $EXTRAFLAGS"
@@ -432,7 +439,7 @@ AC_SUBST(lmmsdatadir)
#CFLAGS="$CXXFLAGS -g -O2"
#CXXFLAGS="$CXXFLAGS -g -O2"
if test $CXX == "g++" ; then
if test "x$CXX" == "xg++" ; then
CXXFLAGS="$CXXFLAGS -ansi -Wall -fno-exceptions"
fi

Binary file not shown.

View File

@@ -677,34 +677,6 @@ http://lmms.sourceforge.net</translation>
<source>Click here, if you want to stop playing of current pattern.</source>
<translation>Pica aquí si vols aturar la reproducció del patró actual.</translation>
</message>
<message>
<source>Draw mode (D)</source>
<translation>Mode dibuixar (D)</translation>
</message>
<message>
<source>Erase mode (E)</source>
<translation>Mode esborrar (E)</translation>
</message>
<message>
<source>Select mode (S)</source>
<translation>Mode seleccionar (S)</translation>
</message>
<message>
<source>Move selection mode (M)</source>
<translation>Mode moure selecció (M)</translation>
</message>
<message>
<source>If you click here, erase-mode will be activated. In this mode you can erase single values. You can also press &apos;E&apos; on your keyboard to activate this mode.</source>
<translation>Si piques aqui, s&apos;activarà el mode esborrar. En aquest mode pots esborrar valors solts. També pots pitjar &apos;E&apos; al teclat per a activar aquest mode.</translation>
</message>
<message>
<source>If you click here, select-mode will be activated. In this mode you can select values. This is neccessary if you want to cut, copy, paste, delete or move values. You can also press &apos;S&apos; on your keyboard to activate this mode.</source>
<translation>Si piques aquí, el mode seleccionar serà activat. En aquest mode pots seleccionar valors. Això és necessari si vols tallar, copiar, enganxar, esborrar o moure valors. També pots pitjar &apos;S&apos; al teclat per a activar aquest mode.</translation>
</message>
<message>
<source>If you click here, move-mode will be activated. In this mode you can move the values you selected in select-mode. You can also press &apos;M&apos; on your keyboard to activate this mode.</source>
<translation>Si piques aqui, el mode moure serà activat. En aquest mode pots moure els valors que has seleccionat en el mode seleccionar. També pots pitjar &apos;M&apos; al teclat per a activar aquest mode.</translation>
</message>
<message>
<source>Cut selected values (Ctrl+X)</source>
<translation>Talla els valors seleccionats (Ctrl+X)</translation>
@@ -750,8 +722,36 @@ http://lmms.sourceforge.net</translation>
<translation>Tots els valors seleccionats s&apos;han copiat al portapapers.</translation>
</message>
<message>
<source>If you click here, draw-mode will be activated. In this mode you can add and move single values. This is the default-mode which is used most of the time. You can also press &apos;D&apos; on your keyboard to activate this mode.</source>
<translation>Si piques aquí, el mode dibuixar serà activat. En aquest mode pots afegir i moure valors solts. Aquest és el mode per defecte que s&apos;utilitza més temps. També pots pitjar &apos;D&apos; al teclat per a activar aquest mode.</translation>
<source>Draw mode (Shift+D)</source>
<translation>Mode dibuixar (Maj+D)</translation>
</message>
<message>
<source>Erase mode (Shift+E)</source>
<translation>Mode esborrar (Maj+E)</translation>
</message>
<message>
<source>Select mode (Shift+S)</source>
<translation>Mode seleccionar (Maj+S)</translation>
</message>
<message>
<source>Move selection mode (Shift+M)</source>
<translation>Mode moure selecció (Maj+M)</translation>
</message>
<message>
<source>If you click here, draw-mode will be activated. In this mode you can add and move single values. This is the default-mode which is used most of the time. You can also press &apos;Shift+D&apos; on your keyboard to activate this mode.</source>
<translation>Si piques aquí, el mode dibuixar serà activat. En aquest mode pots afegir i moure valors solts. Aquest és el mode per defecte que s&apos;utilitza més temps. També pots pitjar &apos;Maj+D&apos; al teclat per a activar aquest mode.</translation>
</message>
<message>
<source>If you click here, erase-mode will be activated. In this mode you can erase single values. You can also press &apos;Shift+E&apos; on your keyboard to activate this mode.</source>
<translation>Si piques aqui, s&apos;activarà el mode esborrar. En aquest mode pots esborrar valors solts. També pots pitjar &apos;Maj+E&apos; al teclat per a activar aquest mode.</translation>
</message>
<message>
<source>If you click here, select-mode will be activated. In this mode you can select values. This is neccessary if you want to cut, copy, paste, delete or move values. You can also press &apos;Shift+S&apos; on your keyboard to activate this mode.</source>
<translation>Si piques aquí, el mode seleccionar serà activat. En aquest mode pots seleccionar valors. Això és necessari si vols tallar, copiar, enganxar, esborrar o moure valors. També pots pitjar &apos;Maj+S&apos; al teclat per a activar aquest mode.</translation>
</message>
<message>
<source>If you click here, move-mode will be activated. In this mode you can move the values you selected in select-mode. You can also press &apos;Shift+M&apos; on your keyboard to activate this mode.</source>
<translation>Si piques aqui, el mode moure serà activat. En aquest mode pots moure els valors que has seleccionat en el mode seleccionar. També pots pitjar &apos;Maj+M&apos; al teclat per a activar aquest mode.</translation>
</message>
</context>
<context>
@@ -2076,10 +2076,6 @@ usa la roda del ratolí per a ajustar el volum d&apos;un pas</translation>
</context>
<context>
<name>pianoRoll</name>
<message>
<source>If you click here, erase-mode will be activated. In this mode you can erase single notes. You can also press &apos;E&apos; on your keyboard to activate this mode.</source>
<translation>Si piques aqui, s&apos;activarà el mode esborrar. En aquest mode pots esborrar notas soltes. També pots pitjar &apos;E&apos; al teclat per a activar aquest mode.</translation>
</message>
<message>
<source>Cut selected notes (Ctrl+X)</source>
<translation>Talla les notes seleccionades (Ctrl+X)</translation>
@@ -2120,10 +2116,6 @@ usa la roda del ratolí per a ajustar el volum d&apos;un pas</translation>
<source>Click here, if you want to stop playing of current pattern.</source>
<translation>Pica aquí si vols aturar la reproducció del patró actual.</translation>
</message>
<message>
<source>If you click here, draw-mode will be activated. In this mode you can add, resize and move single notes. This is the default-mode which is used most of the time. You can also press &apos;D&apos; on your keyboard to activate this mode.</source>
<translation>Si piques aquí, el mode dibuixar serà activat. En aquest mode pots afegir, redimensionar i moure notes soltes. Aquest és el mode per defecte que s&apos;utilitza més temps. També pots pitjar &apos;D&apos; al teclat per a activar aquest mode.</translation>
</message>
<message>
<source>Piano-Roll - no pattern</source>
<translation>Rotlle de Piano - sense patró</translation>
@@ -2132,14 +2124,6 @@ usa la roda del ratolí per a ajustar el volum d&apos;un pas</translation>
<source>Please open a pattern by double-clicking on it!</source>
<translation>Per favor, obre un patró picant-lo dos cops!</translation>
</message>
<message>
<source>If you click here, select-mode will be activated. In this mode you can select notes. This is neccessary if you want to cut, copy, paste, delete or move notes. You can also press &apos;S&apos; on your keyboard to activate this mode.</source>
<translation>Si piques aquí, el mode seleccionar serà activat. En aquest mode pots seleccionar notes. Això és necessari si vols tallar, copiar, enganxar, esborrar o moure notes. També pots pitjar &apos;S&apos; al teclat per a activar aquest mode.</translation>
</message>
<message>
<source>If you click here, move-mode will be activated. In this mode you can move the notes you selected in select-mode. You can also press &apos;M&apos; on your keyboard to activate this mode.</source>
<translation>Si piques aqui, el mode moure serà activat. En aquest mode pots moure les notes que has seleccionat en el mode seleccionar. També pots pitjar &apos;M&apos; al teclat per a activar aquest mode.</translation>
</message>
<message>
<source>Piano-Roll - %1</source>
<translation>Rotlle de Piano - %1</translation>
@@ -2152,22 +2136,6 @@ usa la roda del ratolí per a ajustar el volum d&apos;un pas</translation>
<source>Click here, if you want to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
<translation>Pica aquí si vols enregistrar notes des d&apos;un dispositiu MIDI o el piano virtual de prova de la finestra de canal corresponent al patró actual. Mentre s&apos;enregistra, totes les notes que toquis seran escrites en aquest patró i les podràs reproduir i editar després.</translation>
</message>
<message>
<source>Draw mode (D)</source>
<translation>Mode dibuixar (D)</translation>
</message>
<message>
<source>Erase mode (E)</source>
<translation>Mode esborrar (E)</translation>
</message>
<message>
<source>Select mode (S)</source>
<translation>Mode seleccionar (S)</translation>
</message>
<message>
<source>Move selection mode (M)</source>
<translation>Mode moure selecció (M)</translation>
</message>
<message>
<source>Last note</source>
<translation>Darrera nota</translation>
@@ -2180,6 +2148,38 @@ usa la roda del ratolí per a ajustar el volum d&apos;un pas</translation>
<source>All selected notes were copied to the clipboard.</source>
<translation>Totes les notes seleccionades s&apos;han copiat al portapapers.</translation>
</message>
<message>
<source>Draw mode (Shift+D)</source>
<translation>Mode dibuixar (Maj+D)</translation>
</message>
<message>
<source>Erase mode (Shift+E)</source>
<translation>Mode esborrar (Maj+E)</translation>
</message>
<message>
<source>Select mode (Shift+S)</source>
<translation>Mode seleccionar (Maj+S)</translation>
</message>
<message>
<source>Move selection mode (Shift+M)</source>
<translation>Mode moure selecció (Maj+M)</translation>
</message>
<message>
<source>If you click here, draw-mode will be activated. In this mode you can add, resize and move single notes. This is the default-mode which is used most of the time. You can also press &apos;Shift+D&apos; on your keyboard to activate this mode.</source>
<translation>Si piques aquí, el mode dibuixar serà activat. En aquest mode pots afegir, redimensionar i moure notes soltes. Aquest és el mode per defecte que s&apos;utilitza més temps. També pots pitjar &apos;Maj+D&apos; al teclat per a activar aquest mode.</translation>
</message>
<message>
<source>If you click here, erase-mode will be activated. In this mode you can erase single notes. You can also press &apos;Shift+E&apos; on your keyboard to activate this mode.</source>
<translation>Si piques aqui, s&apos;activarà el mode esborrar. En aquest mode pots esborrar notas soltes. També pots pitjar &apos;Maj+E&apos; al teclat per a activar aquest mode.</translation>
</message>
<message>
<source>If you click here, select-mode will be activated. In this mode you can select notes. This is neccessary if you want to cut, copy, paste, delete or move notes. You can also press &apos;Shift+S&apos; on your keyboard to activate this mode.</source>
<translation>Si piques aquí, el mode seleccionar serà activat. En aquest mode pots seleccionar notes. Això és necessari si vols tallar, copiar, enganxar, esborrar o moure notes. També pots pitjar &apos;Maj+S&apos; al teclat per a activar aquest mode.</translation>
</message>
<message>
<source>If you click here, move-mode will be activated. In this mode you can move the notes you selected in select-mode. You can also press &apos;Shift+M&apos; on your keyboard to activate this mode.</source>
<translation>Si piques aqui, el mode moure serà activat. En aquest mode pots moure les notes que has seleccionat en el mode seleccionar. També pots pitjar &apos;Maj+M&apos; al teclat per a activar aquest mode.</translation>
</message>
</context>
<context>
<name>pianoWidget</name>

View File

@@ -460,6 +460,10 @@ private:
void setLevel( int _level )
{
if( m_curLevel == _level )
{
return;
}
saveJournallingState( FALSE );
m_automation_pattern->setUpdateFirst( FALSE );
setValue( _level * m_step );

View File

@@ -99,6 +99,11 @@ public:
m_update_first = _update;
}
void forgetTrack()
{
m_track = NULL;
}
public slots:
void openInAutomationEditor( void );

View File

@@ -38,9 +38,6 @@ public:
virtual ~automationTrack();
signals:
private:
inline QString nodeName( void ) const
{

View File

@@ -103,6 +103,8 @@ public:
return( m_automationEditor );
}
void close( void );
private:
bool m_hasGUI;

View File

@@ -166,6 +166,11 @@ public:
return( m_tabWidget );
}
pianoWidget * getPianoWidget( void )
{
return( m_pianoWidget );
}
public slots:
void surroundAreaPosChanged( const QPoint & _new_p );

View File

@@ -289,8 +289,7 @@ public slots:
signals:
void sampleRateChanged( void );
void nextAudioBuffer( const surroundSampleFrame *,
const fpab_t _frames );
void nextAudioBuffer( const surroundSampleFrame *, int _frames );
private:

View File

@@ -109,6 +109,7 @@ protected:
virtual void paintEvent( QPaintEvent * _pe );
virtual void resizeEvent( QResizeEvent * _re );
virtual void wheelEvent( QWheelEvent * _we );
virtual bool x11Event( XEvent * _xe );
int FASTCALL getKey( int _y );
static inline void drawNoteRect( QPainter & _p, Uint16 _x, Uint16 _y,

View File

@@ -79,6 +79,10 @@ public:
virtual void loadSettings( const QDomElement & _this,
const QString & _name );
virtual void keyPressEvent( QKeyEvent * ke );
virtual void keyReleaseEvent( QKeyEvent * ke );
virtual bool x11Event( XEvent * _xe );
protected:
virtual void contextMenuEvent( QContextMenuEvent * _me );
@@ -86,10 +90,7 @@ protected:
virtual void mousePressEvent( QMouseEvent * me );
virtual void mouseReleaseEvent( QMouseEvent * me );
virtual void mouseMoveEvent( QMouseEvent * me );
virtual void keyPressEvent( QKeyEvent * ke );
virtual void keyReleaseEvent( QKeyEvent * ke );
virtual void focusOutEvent( QFocusEvent * _fe );
virtual bool x11Event( XEvent * _xe );
private:

View File

@@ -296,6 +296,8 @@ private:
track * m_automation_track;
bool m_destroyed;
enum ACTIONS

View File

@@ -501,7 +501,7 @@ public:
protected:
void sendMidiTime( const midiTime & _time );
bool sendMidiTime( const midiTime & _time );
QString m_name;
@@ -509,6 +509,7 @@ private:
trackContainer * m_trackContainer;
trackWidget * m_trackWidget;
QPtrList<automationPattern> m_automation_patterns;
midiTime m_last_time_sent;
} ;

View File

@@ -67,7 +67,7 @@ protected:
protected slots:
void setAudioBuffer( const surroundSampleFrame * _ab, const fpab_t _frames );
void setAudioBuffer( const surroundSampleFrame * _ab, int _frames );
private:

View File

@@ -201,27 +201,27 @@ automationEditor::automationEditor( engine * _engine ) :
// init edit-buttons at the top
m_drawButton = new toolButton( embed::getIconPixmap( "edit_draw" ),
tr( "Draw mode (D)" ),
tr( "Draw mode (Shift+D)" ),
this, SLOT( drawButtonToggled() ),
m_toolBar );
m_drawButton->setCheckable( TRUE );
m_drawButton->setChecked( TRUE );
m_eraseButton = new toolButton( embed::getIconPixmap( "edit_erase" ),
tr( "Erase mode (E)" ),
tr( "Erase mode (Shift+E)" ),
this, SLOT( eraseButtonToggled() ),
m_toolBar );
m_eraseButton->setCheckable( TRUE );
m_selectButton = new toolButton( embed::getIconPixmap(
"edit_select" ),
tr( "Select mode (S)" ),
tr( "Select mode (Shift+S)" ),
this, SLOT( selectButtonToggled() ),
m_toolBar );
m_selectButton->setCheckable( TRUE );
m_moveButton = new toolButton( embed::getIconPixmap( "edit_move" ),
tr( "Move selection mode (M)" ),
tr( "Move selection mode (Shift+M)" ),
this, SLOT( moveButtonToggled() ),
m_toolBar );
m_moveButton->setCheckable( TRUE );
@@ -244,8 +244,8 @@ automationEditor::automationEditor( engine * _engine ) :
tr( "If you click here, draw-mode will be activated. In this "
"mode you can add and move single values. This "
"is the default-mode which is used most of the time. "
"You can also press 'D' on your keyboard to activate "
"this mode." ) );
"You can also press 'Shift+D' on your keyboard to "
"activate this mode." ) );
#ifdef QT4
m_eraseButton->setWhatsThis(
#else
@@ -253,7 +253,7 @@ automationEditor::automationEditor( engine * _engine ) :
#endif
tr( "If you click here, erase-mode will be activated. In this "
"mode you can erase single values. You can also press "
"'E' on your keyboard to activate this mode." ) );
"'Shift+E' on your keyboard to activate this mode." ) );
#ifdef QT4
m_selectButton->setWhatsThis(
#else
@@ -262,8 +262,8 @@ automationEditor::automationEditor( engine * _engine ) :
tr( "If you click here, select-mode will be activated. In this "
"mode you can select values. This is neccessary "
"if you want to cut, copy, paste, delete or move "
"values. You can also press 'S' on your keyboard to "
"activate this mode." ) );
"values. You can also press 'Shift+S' on your keyboard "
"to activate this mode." ) );
#ifdef QT4
m_moveButton->setWhatsThis(
#else
@@ -271,8 +271,8 @@ automationEditor::automationEditor( engine * _engine ) :
#endif
tr( "If you click here, move-mode will be activated. In this "
"mode you can move the values you selected in select-"
"mode. You can also press 'M' on your keyboard to "
"activate this mode." ) );
"mode. You can also press 'Shift+M' on your keyboard "
"to activate this mode." ) );
m_cutButton = new toolButton( embed::getIconPixmap( "edit_cut" ),
tr( "Cut selected values (Ctrl+X)" ),
@@ -848,19 +848,47 @@ void automationEditor::keyPressEvent( QKeyEvent * _ke )
break;
case Qt::Key_D:
m_drawButton->setChecked( TRUE );
if( _ke->modifiers() & Qt::ShiftModifier )
{
m_drawButton->setChecked( TRUE );
}
else
{
_ke->ignore();
}
break;
case Qt::Key_E:
m_eraseButton->setChecked( TRUE );
if( _ke->modifiers() & Qt::ShiftModifier )
{
m_eraseButton->setChecked( TRUE );
}
else
{
_ke->ignore();
}
break;
case Qt::Key_S:
m_selectButton->setChecked( TRUE );
if( _ke->modifiers() & Qt::ShiftModifier )
{
m_selectButton->setChecked( TRUE );
}
else
{
_ke->ignore();
}
break;
case Qt::Key_M:
m_moveButton->setChecked( TRUE );
if( _ke->modifiers() & Qt::ShiftModifier )
{
m_moveButton->setChecked( TRUE );
}
else
{
_ke->ignore();
}
break;
case Qt::Key_Delete:
@@ -1535,8 +1563,12 @@ void automationEditor::resizeEvent( QResizeEvent * )
m_topBottomScroll->setValue( m_scroll_level );
eng()->getSongEditor()->getPlayPos( songEditor::PLAY_AUTOMATION_PATTERN
if( eng()->getSongEditor() )
{
eng()->getSongEditor()->getPlayPos(
songEditor::PLAY_AUTOMATION_PATTERN
).m_timeLine->setFixedWidth( width() );
}
m_toolBar->setFixedWidth( width() );
updateTopBottomLevels();

View File

@@ -67,14 +67,26 @@ engine::engine( const bool _has_gui ) :
engine::~engine()
{
}
void engine::close( void )
{
m_mixer->stopProcessing();
delete m_projectNotes;
m_projectNotes = NULL;
delete m_songEditor;
m_songEditor = NULL;
delete m_bbEditor;
m_bbEditor = NULL;
delete m_pianoRoll;
m_pianoRoll = NULL;
delete m_automationEditor;
m_automationEditor = NULL;
presetPreviewPlayHandle::cleanUp( this );
@@ -83,8 +95,11 @@ engine::~engine()
delete m_mixer;
m_mixer = NULL;
//delete configManager::inst();
delete m_projectJournal;
m_projectJournal = NULL;
m_mainWindow = NULL;
}

View File

@@ -229,7 +229,7 @@ mainWindow::~mainWindow()
// destroy config-manager (which automatically saves config-file)
*/
delete eng();
eng()->close();
}

View File

@@ -226,7 +226,7 @@ void note::saveSettings( QDomDocument & _doc, QDomElement & _this )
_this.setAttribute( "pan", m_panning );
_this.setAttribute( "len", m_length );
_this.setAttribute( "pos", m_pos );
if( m_length > 0 )
if( m_length > 0 && m_detuning )
{
m_detuning->saveSettings( _doc, _this, "detuning" );
}

View File

@@ -274,12 +274,17 @@ void notePlayHandle::noteOff( const f_cnt_t _s )
FALSE );
}
// send MIDI-note-off-event
m_instrumentTrack->processOutEvent( midiEvent( NOTE_OFF,
// TODO: move framesPerTact() to engine
if( m_instrumentTrack->eng()->getSongEditor() )
{
m_instrumentTrack->processOutEvent( midiEvent( NOTE_OFF,
m_instrumentTrack->m_midiPort->outputChannel(),
key(), 0 ),
midiTime::fromFrames(
m_framesBeforeRelease,
m_instrumentTrack->eng()->getSongEditor()->framesPerTact() ) );
m_instrumentTrack->eng()->getSongEditor()
->framesPerTact() ) );
}
}
else
{

View File

@@ -76,6 +76,7 @@
#include "tool_button.h"
#include "text_float.h"
#include "combobox.h"
#include "piano_widget.h"
extern tones whiteKeys[]; // defined in piano_widget.cpp
@@ -284,27 +285,27 @@ pianoRoll::pianoRoll( engine * _engine ) :
// init edit-buttons at the top
m_drawButton = new toolButton( embed::getIconPixmap( "edit_draw" ),
tr( "Draw mode (D)" ),
tr( "Draw mode (Shift+D)" ),
this, SLOT( drawButtonToggled() ),
m_toolBar );
m_drawButton->setCheckable( TRUE );
m_drawButton->setChecked( TRUE );
m_eraseButton = new toolButton( embed::getIconPixmap( "edit_erase" ),
tr( "Erase mode (E)" ),
tr( "Erase mode (Shift+E)" ),
this, SLOT( eraseButtonToggled() ),
m_toolBar );
m_eraseButton->setCheckable( TRUE );
m_selectButton = new toolButton( embed::getIconPixmap(
"edit_select" ),
tr( "Select mode (S)" ),
tr( "Select mode (Shift+S)" ),
this, SLOT( selectButtonToggled() ),
m_toolBar );
m_selectButton->setCheckable( TRUE );
m_moveButton = new toolButton( embed::getIconPixmap( "edit_move" ),
tr( "Move selection mode (M)" ),
tr( "Move selection mode (Shift+M)" ),
this, SLOT( moveButtonToggled() ),
m_toolBar );
m_moveButton->setCheckable( TRUE );
@@ -327,8 +328,8 @@ pianoRoll::pianoRoll( engine * _engine ) :
tr( "If you click here, draw-mode will be activated. In this "
"mode you can add, resize and move single notes. This "
"is the default-mode which is used most of the time. "
"You can also press 'D' on your keyboard to activate "
"this mode." ) );
"You can also press 'Shift+D' on your keyboard to "
"activate this mode." ) );
#ifdef QT4
m_eraseButton->setWhatsThis(
#else
@@ -336,7 +337,7 @@ pianoRoll::pianoRoll( engine * _engine ) :
#endif
tr( "If you click here, erase-mode will be activated. In this "
"mode you can erase single notes. You can also press "
"'E' on your keyboard to activate this mode." ) );
"'Shift+E' on your keyboard to activate this mode." ) );
#ifdef QT4
m_selectButton->setWhatsThis(
#else
@@ -345,8 +346,8 @@ pianoRoll::pianoRoll( engine * _engine ) :
tr( "If you click here, select-mode will be activated. "
"In this mode you can select notes. This is neccessary "
"if you want to cut, copy, paste, delete or move "
"notes. You can also press 'S' on your keyboard to "
"activate this mode." ) );
"notes. You can also press 'Shift+S' on your keyboard "
"to activate this mode." ) );
#ifdef QT4
m_moveButton->setWhatsThis(
#else
@@ -354,8 +355,8 @@ pianoRoll::pianoRoll( engine * _engine ) :
#endif
tr( "If you click here, move-mode will be activated. In this "
"mode you can move the notes you selected in select-"
"mode. You can also press 'M' on your keyboard to "
"activate this mode." ) );
"mode. You can also press 'Shift+M' on your keyboard "
"to activate this mode." ) );
m_cutButton = new toolButton( embed::getIconPixmap( "edit_cut" ),
tr( "Cut selected notes (Ctrl+X)" ),
@@ -1020,6 +1021,11 @@ void pianoRoll::enterEvent( QEvent * _e )
void pianoRoll::keyPressEvent( QKeyEvent * _ke )
{
if( validPattern() )
{
m_pattern->getInstrumentTrack()->getPianoWidget()
->keyPressEvent( _ke );
}
switch( _ke->key() )
{
case Qt::Key_Up:
@@ -1096,19 +1102,47 @@ void pianoRoll::keyPressEvent( QKeyEvent * _ke )
break;
case Qt::Key_D:
m_drawButton->setChecked( TRUE );
if( _ke->modifiers() & Qt::ShiftModifier )
{
m_drawButton->setChecked( TRUE );
}
else
{
_ke->ignore();
}
break;
case Qt::Key_E:
m_eraseButton->setChecked( TRUE );
if( _ke->modifiers() & Qt::ShiftModifier )
{
m_eraseButton->setChecked( TRUE );
}
else
{
_ke->ignore();
}
break;
case Qt::Key_S:
m_selectButton->setChecked( TRUE );
if( _ke->modifiers() & Qt::ShiftModifier )
{
m_selectButton->setChecked( TRUE );
}
else
{
_ke->ignore();
}
break;
case Qt::Key_M:
m_moveButton->setChecked( TRUE );
if( _ke->modifiers() & Qt::ShiftModifier )
{
m_moveButton->setChecked( TRUE );
}
else
{
_ke->ignore();
}
break;
case Qt::Key_Delete:
@@ -1152,6 +1186,11 @@ void pianoRoll::keyPressEvent( QKeyEvent * _ke )
void pianoRoll::keyReleaseEvent( QKeyEvent * _ke )
{
if( validPattern() )
{
m_pattern->getInstrumentTrack()->getPianoWidget()
->keyReleaseEvent( _ke );
}
switch( _ke->key() )
{
case Key_Control:
@@ -2579,7 +2618,8 @@ midiTime pianoRoll::newNoteLen( void ) const
bool pianoRoll::mouseOverNote( void )
{
return( noteIteratorUnderMouse() != m_pattern->notes().end() );
return( validPattern()
&& noteIteratorUnderMouse() != m_pattern->notes().end() );
}
@@ -2634,6 +2674,19 @@ noteVector::iterator pianoRoll::noteIteratorUnderMouse( void )
bool pianoRoll::x11Event( XEvent * _xe )
{
if( validPattern() )
{
return( m_pattern->getInstrumentTrack()->getPianoWidget()
->x11Event( _xe ) );
}
return( FALSE );
}
#include "piano_roll.moc"

View File

@@ -93,7 +93,8 @@ pianoWidget::pianoWidget( instrumentTrack * _parent ) :
QWidget( _parent ),
m_instrumentTrack( _parent ),
m_startTone( C ),
m_startOctave( OCTAVE_3 )
m_startOctave( OCTAVE_3 ),
m_lastKey( -1 )
{
#ifdef QT4
setFocusPolicy( Qt::StrongFocus );
@@ -360,7 +361,10 @@ void pianoWidget::mouseMoveEvent( QMouseEvent * _me )
m_instrumentTrack->processInEvent(
midiEvent( NOTE_OFF, 0, released_key, 0 ),
midiTime() );
m_pressedKeys[released_key] = FALSE;
if( released_key >= 0 )
{
m_pressedKeys[released_key] = FALSE;
}
#ifdef QT4
if( _me->buttons() & Qt::LeftButton )
#else

View File

@@ -113,7 +113,8 @@ songEditor::songEditor( engine * _engine ) :
m_trackToPlay( NULL ),
m_patternToPlay( NULL ),
m_loopPattern( FALSE ),
m_scrollBack( FALSE )
m_scrollBack( FALSE ),
m_destroyed( FALSE )
{
setWindowTitle( tr( "Song-Editor" ) );
setWindowIcon( embed::getIconPixmap( "songeditor" ) );
@@ -446,6 +447,7 @@ songEditor::songEditor( engine * _engine ) :
songEditor::~songEditor()
{
delete m_automation_track;
m_destroyed = TRUE;
}
@@ -1033,10 +1035,13 @@ void songEditor::processNextBuffer( void )
m_playPos[m_playMode].currentFrame();
}
m_automation_track->play( m_playPos[m_playMode],
if( m_playMode == PLAY_SONG )
{
m_automation_track->play( m_playPos[m_playMode],
m_playPos[m_playMode].currentFrame(),
played_frames, total_frames_played,
tco_num );
}
// loop through all tracks and play them if they're not muted
for( trackVector::iterator it = tv.begin(); it != tv.end();
@@ -1196,6 +1201,10 @@ void songEditor::updateTimeLinePosition( void )
void songEditor::stop( void )
{
if( m_destroyed )
{
return;
}
m_actions.push_back( ACT_STOP_PLAY );
#ifdef QT4
m_playButton->setIcon( embed::getIconPixmap( "play" ) );

View File

@@ -1500,6 +1500,14 @@ track::~track()
delete m_trackWidget;
m_trackWidget = NULL;
}
QPtrListIterator<automationPattern> it( m_automation_patterns );
automationPattern * pattern ;
while( ( pattern = it.current() ) )
{
++it;
pattern->forgetTrack();
}
}
@@ -1757,8 +1765,14 @@ void track::removeAutomationPattern( automationPattern * _pattern )
void track::sendMidiTime( const midiTime & _time )
bool track::sendMidiTime( const midiTime & _time )
{
if( m_last_time_sent == _time )
{
return( FALSE );
}
m_last_time_sent = _time;
QPtrListIterator<automationPattern> it( m_automation_patterns );
automationPattern * pattern ;
while( ( pattern = it.current() ) )
@@ -1766,6 +1780,7 @@ void track::sendMidiTime( const midiTime & _time )
++it;
pattern->processMidiTime( _time );
}
return( TRUE );
}

View File

@@ -248,7 +248,10 @@ void trackContainer::removeTrack( track * _track )
eng()->getMixer()->play();
realignTracks();
eng()->getSongEditor()->setModified();
if( eng()->getSongEditor() )
{
eng()->getSongEditor()->setModified();
}
}
}

View File

@@ -58,7 +58,7 @@ journallingObject::journallingObject( engine * _engine ) :
journallingObject::~journallingObject()
{
if( eng() != NULL )
if( eng() && eng()->getProjectJournal() )
{
eng()->getProjectJournal()->freeID( id() );
}

View File

@@ -96,12 +96,11 @@ automationPattern::~automationPattern()
m_track->removeAutomationPattern( this );
}
if( eng()->getAutomationEditor()->currentPattern() == this )
if( eng()->getAutomationEditor()
&& eng()->getAutomationEditor()->currentPattern() == this )
{
eng()->getAutomationEditor()->setCurrentPattern( NULL );
}
m_time_map.clear();
}

View File

@@ -749,6 +749,21 @@ void instrumentTrack::deleteNotePluginData( notePlayHandle * _n )
{
m_instrument->deleteNotePluginData( _n );
}
m_notesMutex.lock();
// Notes deleted when keys still pressed
if( m_notes[_n->key()] == _n )
{
note done_note( NULL, midiTime( static_cast<f_cnt_t>(
_n->totalFramesPlayed() * 64 /
eng()->getSongEditor()->framesPerTact() ) ),
0, _n->tone(), _n->octave(),
_n->getVolume(), _n->getPanning() );
_n->noteOff();
m_notes[_n->key()] = NULL;
emit noteDone( done_note );
}
m_notesMutex.unlock();
}
@@ -872,8 +887,10 @@ bool FASTCALL instrumentTrack::play( const midiTime & _start,
const f_cnt_t _frame_base,
Sint16 _tco_num )
{
sendMidiTime( _start );
emit sentMidiTime( _start );
if( sendMidiTime( _start ) )
{
emit sentMidiTime( _start );
}
// calculate samples per tact; need that later when calculating
// sample-pos of a note

View File

@@ -82,9 +82,9 @@ visualizationWidget::visualizationWidget( const QPixmap & _bg, QWidget * _p,
}
connect( eng()->getMixer(), SIGNAL( nextAudioBuffer(
const surroundSampleFrame *, const fpab_t ) ),
const surroundSampleFrame *, int ) ),
this, SLOT( setAudioBuffer(
const surroundSampleFrame *, const fpab_t ) ) );
const surroundSampleFrame *, int ) ) );
toolTip::add( this, tr( "click to enable/disable visualization of "
"master-output" ) );
@@ -101,7 +101,7 @@ visualizationWidget::~visualizationWidget()
void visualizationWidget::setAudioBuffer( const surroundSampleFrame * _ab,
const fpab_t _frames )
int _frames )
{
if( m_enabled == TRUE )
{