bugfixes and some small improvements

git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@95 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
Tobias Doerffel
2006-03-01 11:19:33 +00:00
parent 1208dcc435
commit 5e7073b223
14 changed files with 210 additions and 38 deletions

View File

@@ -8,7 +8,7 @@ Danny McRae
Zolo
<the-zolo/at/gmx/dot/de>
dark-expert-theme
theme "Blue Scene"
Sebastian Tilsch
<djcompilation/at/gmx.de>

View File

@@ -1,3 +1,28 @@
2006-02-28 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* data/locale/de.ts:
updated German translation
* src/core/timeline.cpp:
use note::toNearestTact() in timeLine::mouseMoveEvent() instead of own
calculations
* src/core/track.cpp:
per default make TCO-ops (create, move, resize) aligned on tact-
boundaries, free positioning/resizing can be achieved by pressing
<Ctrl> after pressing mouse-button
* include/midi_time.h:
added note::toNearestTact()-method
* include/pattern.h:
* src/core/piano_roll.cpp:
* src/track/pattern.cpp:
do not quantize note-position while moving selection of notes
* src/core/song_editor.cpp:
some layout-fixes for looking good with "Blue Scene" as well
2006-02-27 Zolo <the-zolo/at/gmx/dot/de>
* data/themes/blue_scene/:

View File

@@ -2,8 +2,8 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.50)
AC_INIT(lmms, 0.1.4-cvs20060227, tobydox/at/users/dot/sourceforge/dot/net)
AM_INIT_AUTOMAKE(lmms, 0.1.4-cvs20060227)
AC_INIT(lmms, 0.1.4-cvs20060228, tobydox/at/users/dot/sourceforge/dot/net)
AM_INIT_AUTOMAKE(lmms, 0.1.4-cvs20060228)
AM_CONFIG_HEADER(config.h)

Binary file not shown.

View File

@@ -671,7 +671,11 @@ http://lmms.sourceforge.net</translation>
</message>
<message>
<source>Beat+Bassline Editor</source>
<translation>Beat+Bassline Editor</translation>
<translation type="obsolete">Beat+Bassline Editor</translation>
</message>
<message>
<source>Beat+Baseline Editor</source>
<translation>Beat+Baseline Editor</translation>
</message>
</context>
<context>
@@ -690,14 +694,22 @@ http://lmms.sourceforge.net</translation>
</message>
<message>
<source>Open in Beat+Bassline-Editor</source>
<translation>Im Beat+Bassline-Editor öffnen</translation>
<translation type="obsolete">Im Beat+Bassline-Editor öffnen</translation>
</message>
<message>
<source>Open in Beat+Baseline-Editor</source>
<translation>Im Beat+Baseline-Editor öffnen</translation>
</message>
</context>
<context>
<name>bbTrack</name>
<message>
<source>Beat/Bassline %1</source>
<translation>Beat/Bassline %1</translation>
<translation type="obsolete">Beat/Bassline %1</translation>
</message>
<message>
<source>Beat/Baseline %1</source>
<translation>Beat/Baseline %1</translation>
</message>
</context>
<context>
@@ -740,7 +752,7 @@ http://lmms.sourceforge.net</translation>
</message>
<message>
<source>Draw your own waveform hereby dragging your mouse onto this graph</source>
<translation type="unfinished"></translation>
<translation>Zeichnen Sie eigene Wellenformen, indem Sie die Maus über den Graph ziehen</translation>
</message>
</context>
<context>
@@ -1649,11 +1661,11 @@ Bitte besuchen Sie http://wiki.mindrules.net für Dokumentationen über LMMS.</t
</message>
<message>
<source>Show/hide Beat+Bassline Editor</source>
<translation>Zeige/verstecke Beat+Bassline Editor</translation>
<translation type="obsolete">Zeige/verstecke Beat+Bassline Editor</translation>
</message>
<message>
<source>By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for setting beats, opening, adding and removing channels, cutting, copying and pasting beat- and bassline-patterns and other things like that.</source>
<translation>Durch das Drücken dieses Knopfes wird der Beat+Bassline Editor ein- oder ausgeblendet. Der Beat+Bassline Editor ist nötig, um Beats zu setzen, um Kanale zu öffnen, hinzuzufügen und zu entfernen, um Bassline-Patterns auszuschneiden, zu kopieren und einzufügen usw.</translation>
<translation type="obsolete">Durch das Drücken dieses Knopfes wird der Beat+Bassline Editor ein- oder ausgeblendet. Der Beat+Bassline Editor ist nötig, um Beats zu setzen, um Kanale zu öffnen, hinzuzufügen und zu entfernen, um Bassline-Patterns auszuschneiden, zu kopieren und einzufügen usw.</translation>
</message>
<message>
<source>Show/hide Piano-Roll</source>
@@ -1773,6 +1785,18 @@ Bitte besuchen Sie http://wiki.mindrules.net für Dokumentationen über LMMS.</t
<source>Setting up main-window and workspace...</source>
<translation>Initialisiere Hauptfenster und Arbeitsbereich...</translation>
</message>
<message>
<source>Show/hide Beat+Baseline Editor</source>
<translation>Zeige/verstecke Beat+Baseline Editor</translation>
</message>
<message>
<source>By pressing this button, you can show or hide the Beat+Baseline Editor. The Beat+Baesline Editor is needed for setting beats, opening, adding and removing channels, cutting, copying and pasting beat- and baseline-patterns and other things like that.</source>
<translation type="obsolete">Durch das Drücken dieses Knopfes wird der Beat+Baseline Editor ein- oder ausgeblendet. Der Beat+Bassline Editor ist nötig, um Beats zu setzen, um Kanale zu öffnen, hinzuzufügen und zu entfernen, um Bassline-Patterns auszuschneiden, zu kopieren und einzufügen usw.</translation>
</message>
<message>
<source>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.</source>
<translation>Durch das Drücken dieses Knopfes wird der Beat+Baseline Editor ein- oder ausgeblendet. Der Beat+Baseline Editor ist nötig, um Beats zu erstellen, Kanale zu öffnen, hinzuzufügen und zu entfernen sowie um Baseline-Patterns auszuschneiden, zu kopieren und einzufügen usw.</translation>
</message>
</context>
<context>
<name>midiClient</name>
@@ -1853,6 +1877,49 @@ Bitte besuchen Sie http://wiki.mindrules.net für Dokumentationen über LMMS.</t
<translation>Alle Bilder (*.png *.jpg *.jpeg *.gif *.bmp)</translation>
</message>
</context>
<context>
<name>organicInstrument</name>
<message>
<source>Osc %1 waveform</source>
<translation>Oszillator %1 Wellenform</translation>
</message>
<message>
<source>Osc %1 waveform:</source>
<translation>Oszillator %1 Wellenform:</translation>
</message>
<message>
<source>Osc %1 volume</source>
<translation>Oszillator %1 Lautstärke</translation>
</message>
<message>
<source>Osc %1 volume:</source>
<translation>Oszillator %1 Lautstärke:</translation>
</message>
<message>
<source>Osc %1 panning</source>
<translation>Oszillator %1 Balance</translation>
</message>
<message>
<source>Osc %1 panning:</source>
<translation>Oszillator %1 Balance:</translation>
</message>
<message>
<source>Osc %1 fine detuning left</source>
<translation>Oszillator %1 Fein-Verstimmung links</translation>
</message>
<message>
<source>Osc %1 fine detuning left:</source>
<translation>Oszillator %1 Fein-Verstimmung links:</translation>
</message>
<message>
<source>cents</source>
<translation>Cent</translation>
</message>
<message>
<source>FX1</source>
<translation>FX1</translation>
</message>
</context>
<context>
<name>pattern</name>
<message>
@@ -2039,6 +2106,10 @@ Lautstärke eines Steps kann mit Mausrad geändert werden</translation>
<source>All selected notes were copied to the clipboard.</source>
<translation>Alle gewählten Noten wurden in die Zwischenablage kopiert.</translation>
</message>
<message>
<source>Last note</source>
<translation>Letzte Note</translation>
</message>
</context>
<context>
<name>pluckedStringSynth</name>
@@ -2071,7 +2142,7 @@ Lautstärke eines Steps kann mit Mausrad geändert werden</translation>
</message>
<message>
<source>You can drag an instrument-plugin into either the Song-Editor, the Beat+Bassline Editor or just into a channel-window or on the corresponding channel-button.</source>
<translation>Sie können ein Instrument-Plugin entweder in den Song-Editor, den Beat+Bassline-Editor oder einfach in ein Kanal-Fenster oder auf den zugehörigen Kanal-Button ziehen.</translation>
<translation type="obsolete">Sie können ein Instrument-Plugin entweder in den Song-Editor, den Beat+Bassline-Editor oder einfach in ein Kanal-Fenster oder auf den zugehörigen Kanal-Button ziehen.</translation>
</message>
<message>
<source>cheap synthesis of guitar/harp-like sounds</source>
@@ -2101,6 +2172,14 @@ Lautstärke eines Steps kann mit Mausrad geändert werden</translation>
<source>Rough &amp; Dirty Wavetable Synthesizer.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>You can drag an instrument-plugin into either the Song-Editor, the Beat+Baseline Editor or just into a channel-window or on the corresponding channel-button.</source>
<translation>Sie können ein Instrument-Plugin entweder in den Song-Editor, den Beat+Baseline-Editor oder einfach in ein Kanal-Fenster oder auf den zugehörigen Kanal-Button ziehen.</translation>
</message>
<message>
<source>Additive Synthesizer for organ-like sounds</source>
<translation>Additiver Synthesizer für orgelähnliche Klänge</translation>
</message>
</context>
<context>
<name>projectNotes</name>
@@ -2419,6 +2498,14 @@ Latency: %2 ms</source>
<translation>Frames: %1
Latenz: %2 ms</translation>
</message>
<message>
<source>Artwork directory</source>
<translation>Artwork-Verzeichnis</translation>
</message>
<message>
<source>Choose artwork-theme directory</source>
<translation>Artwork-Verzeichnis wählen</translation>
</message>
</context>
<context>
<name>setupWidget</name>
@@ -2845,6 +2932,18 @@ Bitte stellen Sie sicher, dass Sie Schreibrechte auf diese Datei und das Verzeic
<source>%1:%2 (%3:%4 to %5:%6)</source>
<translation>%1:%2 (%3:%4 bis %5:%6)</translation>
</message>
<message>
<source>Hint</source>
<translation>Tipp</translation>
</message>
<message>
<source>Press &lt;Ctrl&gt; for free positioning.</source>
<translation>Drücken Sie &lt;Strg&gt; für freie Positionierung.</translation>
</message>
<message>
<source>Press &lt;Ctrl&gt; for free resizing.</source>
<translation>Drücken Sie &lt;Strg&gt; für freie Größenänderung.</translation>
</message>
</context>
<context>
<name>trackOperationsWidget</name>

View File

@@ -50,6 +50,15 @@ public:
*this = _t;
}
inline midiTime toNearestTact( void ) const
{
if( m_tact64th >= 32 )
{
return( m_tact * 64 + 64 );
}
return( m_tact * 64 );
}
inline midiTime & operator=( const midiTime & _t )
{
m_tact = _t.m_tact;

View File

@@ -87,11 +87,13 @@ public:
virtual midiTime length( void ) const;
note * FASTCALL addNote( const note & _new_note );
note * FASTCALL addNote( const note & _new_note,
const bool _quant_pos = TRUE );
void FASTCALL removeNote( const note * _note_to_del );
note * FASTCALL rearrangeNote( const note * _note_to_proc );
note * FASTCALL rearrangeNote( const note * _note_to_proc,
const bool _quant_pos = TRUE );
void clearNotes( void );

View File

@@ -151,6 +151,8 @@ private:
bool m_autoResize;
Sint16 m_initialMouseX;
textFloat * m_hint;
} ;

View File

@@ -328,8 +328,8 @@ void mainWindow::finalize( void )
QWhatsThis::add( bb_editor_window,
#endif
tr( "By pressing this button, you can show or hide the "
"Beat+Baseline Editor. The Beat+Baesline Editor is "
"needed for setting beats, opening, adding and "
"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." ) );

View File

@@ -1779,7 +1779,7 @@ void pianoRoll::mouseMoveEvent( QMouseEvent * _me )
note_tact_64th );
( *it )->setPos( new_note_pos );
( *it )->setKey( ( *it )->key() + key_diff );
*it = m_pattern->rearrangeNote( *it );
*it = m_pattern->rearrangeNote( *it, FALSE );
}
m_moveStartTact64th = pos_tact_64th;

View File

@@ -224,6 +224,7 @@ songEditor::songEditor( engine * _engine ) :
QLabel * master_pitch_lbl = new QLabel( tb );
master_pitch_lbl->setPixmap( embed::getIconPixmap( "master_pitch" ) );
master_pitch_lbl->setFixedHeight( 64 );
#ifdef QT4
m_masterPitchSlider = new QSlider( Qt::Vertical, tb );
@@ -262,7 +263,7 @@ songEditor::songEditor( engine * _engine ) :
vcw_layout->setMargin( 0 );
vcw_layout->setSpacing( 0 );
vcw_layout->addStretch();
//vcw_layout->addStretch();
vcw_layout->addWidget( new visualizationWidget(
embed::getIconPixmap( "output_graph" ), vc_w, eng() ) );

View File

@@ -373,11 +373,7 @@ void timeLine::mouseMoveEvent( QMouseEvent * _me )
}
else
{
m_loopPos[i] = t.getTact() * 64;
if( t.getTact64th() >= 32 )
{
m_loopPos[i] += 64;
}
m_loopPos[i] = t.toNearestTact();
}
update();
break;

View File

@@ -93,7 +93,8 @@ trackContentObject::trackContentObject( track * _track ) :
m_length(),
m_action( NONE ),
m_autoResize( FALSE ),
m_initialMouseX( 0 )
m_initialMouseX( 0 ),
m_hint( NULL )
{
if( s_textFloat == NULL )
{
@@ -122,6 +123,7 @@ trackContentObject::trackContentObject( track * _track ) :
trackContentObject::~trackContentObject()
{
delete m_hint;
}
@@ -278,7 +280,7 @@ void trackContentObject::mousePressEvent( QMouseEvent * _me )
m_track->eng() );
}
else if( _me->button() == Qt::LeftButton &&
/* eng()->getMainWindow()->isShiftPressed() == FALSE &&*/
/* eng()->getMainWindow()->isShiftPressed() == FALSE &&*/
fixedTCOs() == FALSE )
{
m_initialMouseX = _me->x();
@@ -289,6 +291,11 @@ void trackContentObject::mousePressEvent( QMouseEvent * _me )
QCursor c( Qt::SizeAllCursor );
QApplication::setOverrideCursor( c );
s_textFloat->setTitle( tr( "Current position" ) );
delete m_hint;
m_hint = textFloat::displayMessage( tr( "Hint" ),
tr( "Press <Ctrl> for free "
"positioning." ),
embed::getIconPixmap( "hint" ), 0 );
}
else if( m_autoResize == FALSE )
{
@@ -296,15 +303,21 @@ void trackContentObject::mousePressEvent( QMouseEvent * _me )
QCursor c( Qt::SizeHorCursor );
QApplication::setOverrideCursor( c );
s_textFloat->setTitle( tr( "Current length" ) );
delete m_hint;
m_hint = textFloat::displayMessage( tr( "Hint" ),
tr( "Press <Ctrl> for free "
"resizing." ),
embed::getIconPixmap( "hint" ), 0 );
}
s_textFloat->reparent( this );
// setup text-float as if TCO was already moved/resized
mouseMoveEvent( _me );
s_textFloat->show();
}
else if( ( _me->button() == Qt::MidButton/* ||
( _me->button() == Qt::LeftButton &&
eng()->getMainWindow()->isShiftPressed() == TRUE )*/ ) &&
eng()->getMainWindow()->isShiftPressed() == TRUE )*/ ) &&
fixedTCOs() == FALSE )
{
close();
@@ -316,13 +329,25 @@ void trackContentObject::mousePressEvent( QMouseEvent * _me )
void trackContentObject::mouseMoveEvent( QMouseEvent * _me )
{
if( getTrack()->eng()->getMainWindow()->isCtrlPressed() == TRUE )
{
delete m_hint;
m_hint = NULL;
}
const float ppt = m_track->getTrackContainer()->pixelsPerTact();
if( m_action == MOVE )
{
const int x = mapToParent( _me->pos() ).x() - m_initialMouseX;
movePosition( tMax( 0, (Sint32) m_track->getTrackContainer()->
midiTime t = tMax( 0, (Sint32) m_track->getTrackContainer()->
currentPosition() +
static_cast<int>( x * 64 / ppt ) ) );
static_cast<int>( x * 64 / ppt ) );
if( getTrack()->eng()->getMainWindow()->isCtrlPressed() ==
FALSE && _me->button() == Qt::NoButton )
{
t = t.toNearestTact();
}
movePosition( t );
m_track->getTrackWidget()->changePosition();
s_textFloat->setText( QString( "%1:%2" ).
arg( m_startPosition.getTact() + 1 ).
@@ -363,8 +388,14 @@ void trackContentObject::mouseMoveEvent( QMouseEvent * _me )
}
else if( m_action == RESIZE )
{
changeLength( tMax( 64,
static_cast<int>( _me->x() * 64 / ppt ) ) );
midiTime t = tMax( 64,
static_cast<int>( _me->x() * 64 / ppt ) );
if( getTrack()->eng()->getMainWindow()->isCtrlPressed() ==
FALSE && _me->button() == Qt::NoButton )
{
t = t.toNearestTact();
}
changeLength( t );
s_textFloat->setText( tr( "%1:%2 (%3:%4 to %5:%6)" ).
arg( length().getTact() ).
arg( length().getTact64th() ).
@@ -404,6 +435,8 @@ void trackContentObject::mouseMoveEvent( QMouseEvent * _me )
void trackContentObject::mouseReleaseEvent( QMouseEvent * _me )
{
m_action = NONE;
delete m_hint;
m_hint = NULL;
s_textFloat->hide();
leaveEvent( NULL );
selectableObject::mouseReleaseEvent( _me );
@@ -691,16 +724,17 @@ void trackContentWidget::dropEvent( QDropEvent * _de )
if( type == ( "tco_" + QString::number( getTrack()->type() ) ) &&
getTrack()->getTrackContainer()->fixedTCOs() == FALSE )
{
const midiTime position = getPosition( _de->pos().x() );
const midiTime pos = getPosition( _de->pos().x()
).toNearestTact();
trackContentObject * tco = addTCO( getTrack()->createTCO(
position ) );
pos ) );
// value contains our XML-data so simply create a
// multimediaProject which does the rest for us...
multimediaProject mmp( value, FALSE );
// at least save position before getting moved to somewhere
// the user doesn't expect...
tco->loadSettings( mmp.content().firstChild().toElement() );
tco->movePosition( position );
tco->movePosition( pos );
_de->accept();
}
}
@@ -723,10 +757,10 @@ void trackContentWidget::mousePressEvent( QMouseEvent * _me )
else if( _me->button() == Qt::LeftButton &&
getTrack()->getTrackContainer()->fixedTCOs() == FALSE )
{
const midiTime position = getPosition( _me->x() );
const midiTime pos = getPosition( _me->x() ).toNearestTact();
trackContentObject * tco = addTCO( getTrack()->createTCO(
position ) );
tco->movePosition( position );
pos ) );
tco->movePosition( pos );
}
}

View File

@@ -237,10 +237,13 @@ midiTime pattern::length( void ) const
note * pattern::addNote( const note & _new_note )
note * pattern::addNote( const note & _new_note, const bool _quant_pos )
{
note * new_note = new note( _new_note );
new_note->quantizePos( eng()->getPianoRoll()->quantization() );
if( _quant_pos )
{
new_note->quantizePos( eng()->getPianoRoll()->quantization() );
}
if( m_notes.size() == 0 || m_notes.back()->pos() <= new_note->pos() )
{
@@ -301,14 +304,15 @@ void pattern::removeNote( const note * _note_to_del )
note * pattern::rearrangeNote( const note * _note_to_proc )
note * pattern::rearrangeNote( const note * _note_to_proc,
const bool _quant_pos )
{
// just rearrange the position of the note by removing it and adding
// a copy of it -> addNote inserts it at the correct position
note copy_of_note( *_note_to_proc );
removeNote( _note_to_proc );
return( addNote( copy_of_note ) );
return( addNote( copy_of_note, _quant_pos ) );
}