Merge pull request #1 from LMMS/master

Rebase from original
This commit is contained in:
Dave
2014-12-06 21:22:19 +00:00
12 changed files with 149 additions and 481 deletions

View File

@@ -45,9 +45,102 @@
#include "interpolation.h"
#include "MemoryManager.h"
//#include <iostream>
//#include <cstdlib>
template<ch_cnt_t CHANNELS> class BasicFilters;
template<ch_cnt_t CHANNELS>
class LinkwitzRiley
{
MM_OPERATORS
public:
LinkwitzRiley( float sampleRate )
{
m_sampleRate = sampleRate;
clearHistory();
}
virtual ~LinkwitzRiley() {}
inline void clearHistory()
{
for( int i = 0; i < CHANNELS; ++i )
{
m_z1[i] = m_z2[i] = m_z3[i] = m_z4[i] = 0.0f;
}
}
inline void setSampleRate( float sampleRate )
{
m_sampleRate = sampleRate;
}
inline void setCoeffs( float freq )
{
// wc
const float wc = F_2PI * freq;
const float wc2 = wc * wc;
const float wc3 = wc2 * wc;
m_wc4 = wc2 * wc2;
// k
const float k = wc / tanf( F_PI * freq / m_sampleRate );
const float k2 = k * k;
const float k3 = k2 * k;
m_k4 = k2 * k2;
// a
static const float sqrt2 = sqrtf( 2.0f );
const float sq_tmp1 = sqrt2 * wc3 * k;
const float sq_tmp2 = sqrt2 * wc * k3;
m_a = 4.0f * wc2 * k2 + 2.0f * sq_tmp1 + m_k4 + 2.0f * sq_tmp2 + m_wc4;
// b
m_b1 = ( 4.0f * ( m_wc4 + sq_tmp1 - m_k4 - sq_tmp2 ) ) / m_a;
m_b2 = ( 6.0f * m_wc4 - 8.0f * wc2 * k2 + 6.0f * m_k4 ) / m_a;
m_b3 = ( 4.0f * ( m_wc4 - sq_tmp1 + sq_tmp2 - m_k4 ) ) / m_a;
m_b4 = ( m_k4 - 2.0f * sq_tmp1 + m_wc4 - 2.0f * sq_tmp2 + 4.0f * wc2 * k2 ) / m_a;
}
inline void setLowpass( float freq )
{
setCoeffs( freq );
m_a0 = m_wc4 / m_a;
m_a1 = 4.0f * m_a0;
m_a2 = 6.0f * m_a0;
}
inline void setHighpass( float freq )
{
setCoeffs( freq );
m_a0 = m_k4 / m_a;
m_a1 = 4.0f * m_a0;
m_a2 = 6.0f * m_a0;
}
inline float update( float in, ch_cnt_t ch )
{
const float a0in = m_a0 * in;
const float a1in = m_a1 * in;
const float out = m_z1[ch] + a0in;
m_z1[ch] = a1in + m_z2[ch] - ( m_b1 * out );
m_z2[ch] = ( m_a2 * in ) + m_z3[ch] - ( m_b2 * out );
m_z3[ch] = a1in + m_z4[ch] - ( m_b3 * out );
m_z4[ch] = a0in - ( m_b4 * out );
return out;
}
private:
float m_sampleRate;
float m_wc4;
float m_k4;
float m_a, m_a0, m_a1, m_a2;
float m_b1, m_b2, m_b3, m_b4;
typedef float frame[CHANNELS];
frame m_z1, m_z2, m_z3, m_z4;
};
typedef LinkwitzRiley<2> StereoLinkwitzRiley;
template<ch_cnt_t CHANNELS>
class BiQuad
{

View File

@@ -69,8 +69,6 @@ public:
virtual QPalette standardPalette( void ) const;
// virtual void drawControl( ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget ) const;
virtual void drawComplexControl(
ComplexControl control,
const QStyleOptionComplex * option,
@@ -85,9 +83,6 @@ public:
const QStyleOption * option = 0,
const QWidget * widget = 0 ) const;
// QSize sizeFromContents( ContentsType type, const QStyleOption* option, const QSize& size, const QWidget* widget ) const;
// QRect subControlRect( ComplexControl control, const QStyleOptionComplex *option, SubControl subControl, const QWidget *widget ) const;
static QPalette * s_palette;
private:

View File

@@ -145,6 +145,7 @@ private:
void finalize();
void toggleWindow( QWidget *window, bool forceShow = false );
void refocus();
QMdiArea * m_workspace;

View File

@@ -50,7 +50,7 @@ MultitapEchoEffect::MultitapEchoEffect( Model* parent, const Descriptor::SubPlug
Effect( &multitapecho_plugin_descriptor, parent, key ),
m_stages( 1 ),
m_controls( this ),
m_buffer( 20100.0f ),
m_buffer( 16100.0f ),
m_sampleRate( Engine::mixer()->processingSampleRate() ),
m_sampleRatio( 1.0f / m_sampleRate )
{

View File

@@ -35,7 +35,7 @@ MultitapEchoControls::MultitapEchoControls( MultitapEchoEffect * eff ) :
EffectControls( eff ),
m_effect( eff ),
m_steps( 16, 4, 32, this, "Steps" ),
m_stepLength( 100.0f, 1.0f, 1000.0f, 0.1f, 1000.0f, this, "Step length" ),
m_stepLength( 100.0f, 1.0f, 500.0f, 0.1f, 500.0f, this, "Step length" ),
m_dryGain( 0.0f, -80.0f, 20.0f, 0.1f, this, "Dry gain" ),
m_swapInputs( false, this, "Swap inputs" ),
m_stages( 1.0f, 1.0f, 4.0f, 1.0f, this, "Lowpass stages" ),

View File

@@ -56,7 +56,7 @@ RingBuffer::RingBuffer( float size ) :
RingBuffer::~RingBuffer()
{
delete m_buffer;
delete[] m_buffer;
}
@@ -308,7 +308,7 @@ void RingBuffer::updateSamplerate()
float newsize = static_cast<float>( ( m_size - m_fpp ) * Engine::mixer()->processingSampleRate() ) / m_samplerate;
m_size = static_cast<f_cnt_t>( ceilf( newsize ) ) + m_fpp;
m_samplerate = Engine::mixer()->processingSampleRate();
delete m_buffer;
delete[] m_buffer;
m_buffer = new sampleFrame[ m_size ];
memset( m_buffer, 0, m_size * sizeof( sampleFrame ) );
m_position = 0;

View File

@@ -149,7 +149,9 @@ SampleBuffer::SampleBuffer( const f_cnt_t _frames ) :
SampleBuffer::~SampleBuffer()
{
MM_FREE( m_origData );
if( m_origData != NULL )
MM_FREE( m_origData );
MM_FREE( m_data );
}
@@ -1477,11 +1479,3 @@ SampleBuffer::handleState::~handleState()
{
src_delete( m_resamplingData );
}
/* vim: set tw=0 noexpandtab: */

View File

@@ -542,6 +542,3 @@ int main( int argc, char * * argv )
return( ret );
}
/* vim: set tw=0 noexpandtab: */

View File

@@ -340,10 +340,3 @@ void ExportProjectDialog::updateTitleBar( int _prog )
Engine::mainWindow()->setWindowTitle(
tr( "Rendering: %1%" ).arg( _prog ) );
}
/* vim: set tw=0 noexpandtab: */

View File

@@ -35,78 +35,6 @@
#include "LmmsStyle.h"
#include "LmmsPalette.h"
const int BUTTON_LENGTH = 24;
static const char * const s_scrollbarArrowUpXpm[] = {
"7 6 8 1",
" g None",
". g #000000",
"+ g #101010",
"@ g #A0A0A0",
"# g #C0C0C0",
"$ g #FFFFFF",
"% g #808080",
"& g #202020",
"..+@+..",
"..#$#..",
".%$$$%.",
"&$$$$$&",
"@$$$$$@",
"@#####@"};
static const char * const s_scrollbarArrowRightXpm[] = {
"6 7 8 1",
" c None",
". c #A0A0A0",
"+ c #202020",
"@ c #000000",
"# c #C0C0C0",
"$ c #FFFFFF",
"% c #808080",
"& c #101010",
"..+@@@",
"#$$%@@",
"#$$$#&",
"#$$$$.",
"#$$$#&",
"#$$%@@",
"..+@@@"};
static const char * const s_scrollbarArrowDownXpm[] = {
"7 6 8 1",
" g None",
". g #000000",
"+ g #101010",
"@ g #A0A0A0",
"# g #C0C0C0",
"$ g #FFFFFF",
"% g #808080",
"& g #202020",
"@#####@",
"@$$$$$@",
"&$$$$$&",
".%$$$%.",
"..#$#..",
"..+@+.."};
static const char * const s_scrollbarArrowLeftXpm[] = {
"6 7 8 1",
" g None",
". g #000000",
"+ g #202020",
"@ g #A0A0A0",
"# g #808080",
"$ g #FFFFFF",
"% g #C0C0C0",
"& g #101010",
"...+@@",
"..#$$%",
"&%$$$%",
"@$$$$%",
"&%$$$%",
"..#$$%",
"...+@@"};
QPalette * LmmsStyle::s_palette = NULL;
QLinearGradient getGradient( const QColor & _col, const QRectF & _rect )
@@ -226,196 +154,6 @@ QPalette LmmsStyle::standardPalette( void ) const
}
/*
void LmmsStyle::drawControl( ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget ) const
{
switch( element )
{
case CE_ScrollBarAddLine:
if( const QStyleOptionSlider * scrollBar = qstyleoption_cast<const QStyleOptionSlider *>( option ) )
{
bool horizontal = scrollBar->orientation == Qt::Horizontal;
bool isEnabled = scrollBar->state & State_Enabled;
bool sunken = scrollBar->state & State_Sunken;
bool hover = scrollBar->state & State_MouseOver;
QString pixmapName = getCacheKey( QLatin1String( "ScrollBarAddLine" ), option, option->rect.size() );
QPixmap cache;
if( !QPixmapCache::find( pixmapName, cache ) )
{
cache = QPixmap( option->rect.size() );
QPainter cachePainter( &cache );
cache.fill( QColor( 48, 48, 48 ) );
QColor sliderColor;
QColor blurColor;
hoverColors(sunken, hover,
scrollBar->activeSubControls & SC_ScrollBarAddLine && isEnabled,
sliderColor, blurColor);
int scrollBarExtent = pixelMetric( PM_ScrollBarExtent, option, widget );
cachePainter.setPen( QPen( sliderColor, 0 ) );
if( horizontal )
{
int r = cache.rect().right();
cachePainter.fillRect(0, 2, BUTTON_LENGTH-2,
scrollBarExtent-4, sliderColor);
cachePainter.drawLine( r, 4, r, scrollBarExtent - 5 );
cachePainter.drawLine( r - 1, 3, r - 1, scrollBarExtent - 4 );
const QPointF points[4] = {
QPoint( r, 3 ), QPoint( r, scrollBarExtent - 4 ),
QPoint( r - 1, 2 ), QPoint( r - 1, scrollBarExtent - 3 )};
cachePainter.setPen( QPen( blurColor, 0 ) );
cachePainter.drawPoints( points, 4 );
QImage arrow = colorizeXpm( s_scrollbarArrowRightXpm, option->palette.foreground().color() );
if( ( scrollBar->activeSubControls & SC_ScrollBarAddLine ) && sunken )
{
cachePainter.translate( 1, 1 );
}
cachePainter.drawImage( cache.rect().center() - QPoint( 3, 3 ), arrow );
}
else
{
int b = cache.rect().bottom();
cachePainter.fillRect( 2, 0, scrollBarExtent - 4, BUTTON_LENGTH - 2, sliderColor );
cachePainter.drawLine( 4, b, scrollBarExtent - 5, b );
cachePainter.drawLine( 3, b - 1, scrollBarExtent - 4, b - 1 );
const QPointF points[4] = {
QPoint( 3, b ), QPoint( scrollBarExtent - 4, b ),
QPoint( 2, b - 1 ), QPoint( scrollBarExtent - 3, b - 1 )};
cachePainter.setPen( QPen( blurColor, 0 ) );
cachePainter.drawPoints( points, 4 );
QImage arrow = colorizeXpm( s_scrollbarArrowDownXpm, option->palette.foreground().color() );
if( ( scrollBar->activeSubControls & SC_ScrollBarAddLine ) && sunken )
{
cachePainter.translate( 1, 1 );
}
cachePainter.drawImage( cache.rect().center() - QPoint( 3, 3 ), arrow );
}
QPixmapCache::insert( pixmapName, cache );
}
painter->drawPixmap( option->rect.topLeft(), cache );
}
break;
case CE_ScrollBarSubLine:
if(const QStyleOptionSlider *scrollBar = qstyleoption_cast<const QStyleOptionSlider *>( option ) )
{
bool horizontal = scrollBar->orientation == Qt::Horizontal;
bool isEnabled = scrollBar->state & State_Enabled;
bool sunken = scrollBar->state & State_Sunken;
bool hover = scrollBar->state & State_MouseOver;
QString pixmapName = getCacheKey( QLatin1String( "ScrollBarSubLine" ), option, option->rect.size() );
QPixmap cache;
if( !QPixmapCache::find( pixmapName, cache ) )
{
cache = QPixmap( option->rect.size() );
QPainter cachePainter( &cache );
cache.fill( QColor( 48, 48, 48 ) ); // TODO: Fill with CSS background
QColor sliderColor;
QColor blurColor;
hoverColors(sunken, hover,
scrollBar->activeSubControls & SC_ScrollBarSubLine && isEnabled,
sliderColor, blurColor);
int scrollBarExtent = pixelMetric( PM_ScrollBarExtent, option, widget );
cachePainter.setPen( QPen( sliderColor, 0 ) );
if( horizontal )
{
cachePainter.fillRect( 2, 2, BUTTON_LENGTH - 2, scrollBarExtent - 4, sliderColor );
cachePainter.drawLine( 0, 4, 0, scrollBarExtent - 5 );
cachePainter.drawLine( 1, 3, 1, scrollBarExtent - 4 );
const QPointF points[4] = {
QPoint( 0, 3 ), QPoint( 0, scrollBarExtent - 4 ),
QPoint( 1, 2 ), QPoint( 1, scrollBarExtent - 3 )};
cachePainter.setPen( QPen( blurColor, 0 ) );
cachePainter.drawPoints( points, 4 );
QImage arrow = colorizeXpm( s_scrollbarArrowLeftXpm, option->palette.foreground().color() );
if( ( scrollBar->activeSubControls & SC_ScrollBarSubLine ) && sunken )
{
cachePainter.translate( 1, 1 );
}
cachePainter.drawImage( cache.rect().center() - QPoint( 3, 3 ), arrow );
}
else
{
cachePainter.fillRect( 2, 2, scrollBarExtent - 4, BUTTON_LENGTH - 2, sliderColor );
cachePainter.drawLine( 4, 0, scrollBarExtent - 5, 0 );
cachePainter.drawLine( 3, 1, scrollBarExtent - 4, 1 );
const QPointF points[4] = {
QPoint( 3, 0 ), QPoint( scrollBarExtent - 4, 0 ),
QPoint( 2, 1 ), QPoint( scrollBarExtent - 3, 1 )};
cachePainter.setPen( QPen( blurColor, 0 ) );
cachePainter.drawPoints( points, 4 );
QImage arrow = colorizeXpm( s_scrollbarArrowUpXpm, option->palette.foreground().color() );
if( ( scrollBar->activeSubControls & SC_ScrollBarSubLine ) && sunken )
{
cachePainter.translate( 1, 1 );
}
cachePainter.drawImage( cache.rect().center() - QPoint( 3, 3 ), arrow );
}
QPixmapCache::insert( pixmapName, cache );
}
painter->drawPixmap( option->rect.topLeft(), cache );
}
break;
case CE_ScrollBarSubPage:
case CE_ScrollBarAddPage:
break;
case CE_ScrollBarSlider:
if( const QStyleOptionSlider* scrollBar = qstyleoption_cast<const QStyleOptionSlider *>( option ) )
{
bool horizontal = scrollBar->orientation == Qt::Horizontal;
bool isEnabled = scrollBar->state & State_Enabled;
bool sunken = scrollBar->state & State_Sunken;
bool hover = scrollBar->state & State_MouseOver;
QColor sliderColor, blendColor;
hoverColors( sunken, hover, (scrollBar->activeSubControls & SC_ScrollBarSlider) && isEnabled, sliderColor, blendColor);
QRect rc = scrollBar->rect;
if( horizontal )
{
painter->fillRect( rc.left(), rc.top() + 2, rc.width(), rc.height() - 4, sliderColor );
}
else
{
painter->fillRect( rc.left() + 2, rc.top(), rc.width() - 4, rc.height(), sliderColor );
}
}
break;
default:
QProxyStyle::drawControl( element, option, painter, widget );
break;
}
}
*/
void LmmsStyle::drawComplexControl( ComplexControl control,
const QStyleOptionComplex * option,
QPainter *painter,
@@ -589,174 +327,6 @@ int LmmsStyle::pixelMetric( PixelMetric _metric, const QStyleOption * _option,
}
}
// QStyle::SH_TitleBar_NoBorder
/*
QSize LmmsStyle::sizeFromContents( ContentsType type, const QStyleOption* option, const QSize& size, const QWidget* widget ) const
{
if( type == CT_ScrollBar )
{
if( const QStyleOptionSlider * scrollBar = qstyleoption_cast<const QStyleOptionSlider *>( option ) )
{
int scrollBarExtent = pixelMetric( PM_ScrollBarExtent, option, widget );
int scrollBarSliderMinimum = pixelMetric( PM_ScrollBarSliderMin, option, widget );
if( scrollBar->orientation == Qt::Horizontal )
{
return QSize( BUTTON_LENGTH * 2 + scrollBarSliderMinimum, scrollBarExtent );
}
else
{
return QSize( scrollBarExtent, BUTTON_LENGTH * 2 + scrollBarSliderMinimum );
}
}
}
return QProxyStyle::sizeFromContents( type, option, size, widget );
}
*/
/*
QRect LmmsStyle::subControlRect( ComplexControl control, const QStyleOptionComplex* option, SubControl subControl, const QWidget* widget ) const
{
QRect rect = QProxyStyle::subControlRect( control, option, subControl, widget );
switch( control )
{
case CC_ScrollBar:
if( const QStyleOptionSlider* scrollBar = qstyleoption_cast<const QStyleOptionSlider *>( option ) )
{
int scrollBarExtent = pixelMetric( PM_ScrollBarExtent, scrollBar, widget );
int sliderMaxLength = (
( scrollBar->orientation == Qt::Horizontal ) ?
scrollBar->rect.width() :
scrollBar->rect.height() ) -
( BUTTON_LENGTH * 2 + 6 );
int sliderMinLength = pixelMetric( PM_ScrollBarSliderMin, scrollBar, widget );
int sliderLength;
// calculate slider length
if( scrollBar->maximum != scrollBar->minimum )
{
uint valueRange = scrollBar->maximum - scrollBar->minimum;
sliderLength = ( scrollBar->pageStep * sliderMaxLength ) /
( valueRange + scrollBar->pageStep );
if( sliderLength < sliderMinLength || valueRange > ( INT_MAX ) / 2 )
{
sliderLength = sliderMinLength;
}
if( sliderLength > sliderMaxLength )
{
sliderLength = sliderMaxLength;
}
}
else
{
sliderLength = sliderMaxLength;
}
int sliderStart = BUTTON_LENGTH + 3 + sliderPositionFromValue(
scrollBar->minimum,
scrollBar->maximum,
scrollBar->sliderPosition,
sliderMaxLength - sliderLength,
scrollBar->upsideDown );
QRect scrollBarRect = scrollBar->rect;
switch( subControl )
{
case SC_ScrollBarSubLine: // top/left button
if( scrollBar->orientation == Qt::Horizontal )
{
rect.setRect( scrollBarRect.left() + 2, scrollBarRect.top(),
BUTTON_LENGTH, scrollBarExtent );
}
else
{
rect.setRect( scrollBarRect.left(), scrollBarRect.top() + 2,
scrollBarExtent, BUTTON_LENGTH );
}
break;
case SC_ScrollBarAddLine: // bottom/right button
if( scrollBar->orientation == Qt::Horizontal )
{
rect.setRect( scrollBarRect.right() - 1 - BUTTON_LENGTH,
scrollBarRect.top(), BUTTON_LENGTH, scrollBarExtent );
}
else
{
rect.setRect( scrollBarRect.left(),
scrollBarRect.bottom() - 1 - BUTTON_LENGTH,
scrollBarExtent, BUTTON_LENGTH );
}
break;
case SC_ScrollBarSubPage:
if( scrollBar->orientation == Qt::Horizontal )
{
rect.setRect( scrollBarRect.left() + 2 + BUTTON_LENGTH,
scrollBarRect.top(),
sliderStart - ( scrollBarRect.left() + 2 + BUTTON_LENGTH ),
scrollBarExtent );
}
else
{
rect.setRect( scrollBarRect.left(),
scrollBarRect.top() + 2 + BUTTON_LENGTH, scrollBarExtent,
sliderStart - ( scrollBarRect.left() + 2 + BUTTON_LENGTH ) );
}
break;
case SC_ScrollBarAddPage:
if( scrollBar->orientation == Qt::Horizontal )
{
rect.setRect( sliderStart + sliderLength, 0,
sliderMaxLength - sliderStart - sliderLength,
scrollBarExtent );
}
else
rect.setRect( 0, sliderStart + sliderLength, scrollBarExtent,
sliderMaxLength - sliderStart - sliderLength );
break;
case SC_ScrollBarGroove:
if( scrollBar->orientation == Qt::Horizontal )
{
rect = scrollBarRect.adjusted( BUTTON_LENGTH, 0, -BUTTON_LENGTH, 0 );
}
else
{
rect = scrollBarRect.adjusted( 0, BUTTON_LENGTH, 0, -BUTTON_LENGTH );
}
break;
case SC_ScrollBarSlider:
if( scrollBar->orientation == Qt::Horizontal )
{
rect.setRect( sliderStart, 0, sliderLength, scrollBarExtent );
}
else
{
rect.setRect( 0, sliderStart, scrollBarExtent, sliderLength );
}
break;
default:
break;
}
rect = visualRect( scrollBar->direction, scrollBarRect, rect );
}
break;
default:
break;
}
return rect;
}
*/
QImage LmmsStyle::colorizeXpm( const char * const * xpm, const QBrush& fill ) const
{

View File

@@ -99,24 +99,24 @@ MainWindow::MainWindow() :
ConfigManager::inst()->userProjectsDir() + "*" +
ConfigManager::inst()->factoryProjectsDir(),
"*.mmp *.mmpz *.xml *.mid *.flp",
tr( "My projects" ),
tr( "My Projects" ),
embed::getIconPixmap( "project_file" ).transformed( QTransform().rotate( 90 ) ),
splitter ) );
sideBar->appendTab( new FileBrowser(
ConfigManager::inst()->userSamplesDir() + "*" +
ConfigManager::inst()->factorySamplesDir(),
"*", tr( "My samples" ),
"*", tr( "My Samples" ),
embed::getIconPixmap( "sample_file" ).transformed( QTransform().rotate( 90 ) ),
splitter ) );
sideBar->appendTab( new FileBrowser(
ConfigManager::inst()->userPresetsDir() + "*" +
ConfigManager::inst()->factoryPresetsDir(),
"*.xpf *.cs.xml *.xiz",
tr( "My presets" ),
tr( "My Presets" ),
embed::getIconPixmap( "preset_file" ).transformed( QTransform().rotate( 90 ) ),
splitter ) );
sideBar->appendTab( new FileBrowser( QDir::homePath(), "*",
tr( "My home" ),
tr( "My Home" ),
embed::getIconPixmap( "home" ).transformed( QTransform().rotate( 90 ) ),
splitter ) );
@@ -132,11 +132,11 @@ MainWindow::MainWindow() :
#endif
sideBar->appendTab( new FileBrowser( root_paths.join( "*" ), "*",
#ifdef LMMS_BUILD_WIN32
tr( "My computer" ),
tr( "My Computer" ),
#elif defined(LMMS_BUILD_APPLE)
tr( "Volumes" ),
#else
tr( "Root directory" ),
tr( "Root Directory" ),
#endif
embed::getIconPixmap( "computer" ).transformed( QTransform().rotate( 90 ) ),
@@ -245,7 +245,7 @@ void MainWindow::finalize()
m_recentlyOpenedProjectsMenu = project_menu->addMenu(
embed::getIconPixmap( "project_open_recent" ),
tr( "&Recently opened projects" ) );
tr( "&Recently Opened Projects" ) );
connect( m_recentlyOpenedProjectsMenu, SIGNAL( aboutToShow() ),
this, SLOT( updateRecentlyOpenedProjectsMenu() ) );
connect( m_recentlyOpenedProjectsMenu, SIGNAL( triggered( QAction * ) ),
@@ -257,7 +257,7 @@ void MainWindow::finalize()
Qt::CTRL + Qt::Key_S );
project_menu->addAction( embed::getIconPixmap( "project_save" ),
tr( "Save as new &version" ),
tr( "Save as New &Version" ),
this, SLOT( saveProjectAsNewVersion() ),
Qt::CTRL + Qt::ALT + Qt::Key_S );
project_menu->addAction( embed::getIconPixmap( "project_saveas" ),
@@ -275,7 +275,7 @@ void MainWindow::finalize()
SLOT( exportProject() ),
Qt::CTRL + Qt::Key_E );
project_menu->addAction( embed::getIconPixmap( "project_export" ),
tr( "E&xport tracks..." ),
tr( "E&xport Tracks..." ),
Engine::getSong(),
SLOT( exportProjectTracks() ),
Qt::CTRL + Qt::SHIFT + Qt::Key_E );
@@ -331,7 +331,7 @@ void MainWindow::finalize()
if( true )
{
help_menu->addAction( embed::getIconPixmap( "help" ),
tr( "Online help" ),
tr( "Online Help" ),
this, SLOT( browseHelp() ) );
}
else
@@ -341,7 +341,7 @@ void MainWindow::finalize()
this, SLOT( help() ) );
}
help_menu->addAction( embed::getIconPixmap( "whatsthis" ),
tr( "What's this?" ),
tr( "What's This?" ),
this, SLOT( enterWhatsThisMode() ) );
help_menu->addSeparator();
@@ -721,7 +721,7 @@ void MainWindow::openProject()
{
if( mayChangeProject() )
{
FileDialog ofd( this, tr( "Open project" ), "", tr( "LMMS (*.mmp *.mmpz)" ) );
FileDialog ofd( this, tr( "Open Project" ), "", tr( "LMMS (*.mmp *.mmpz)" ) );
ofd.setDirectory( ConfigManager::inst()->userProjectsDir() );
ofd.setFileMode( FileDialog::ExistingFiles );
@@ -786,7 +786,7 @@ bool MainWindow::saveProject()
bool MainWindow::saveProjectAs()
{
VersionedSaveDialog sfd( this, tr( "Save project" ), "",
VersionedSaveDialog sfd( this, tr( "Save Project" ), "",
tr( "LMMS Project (*.mmpz *.mmp);;"
"LMMS Project Template (*.mpt)" ) );
QString f = Engine::getSong()->projectFileName();
@@ -879,6 +879,7 @@ void MainWindow::toggleWindow( QWidget *window, bool forceShow )
else
{
parent->hide();
refocus();
}
// Workaround for Qt Bug #260116
@@ -891,6 +892,38 @@ void MainWindow::toggleWindow( QWidget *window, bool forceShow )
/*
* When an editor window with focus is toggled off, attempt to set focus
* to the next visible editor window, or if none are visible, set focus
* to the parent window.
*/
void MainWindow::refocus()
{
QList<QWidget*> editors;
editors
<< Engine::songEditor()->parentWidget()
<< Engine::getBBEditor()->parentWidget()
<< Engine::pianoRoll()->parentWidget()
<< Engine::automationEditor()->parentWidget();
bool found = false;
QList<QWidget*>::Iterator editor;
for( editor = editors.begin(); editor != editors.end(); ++editor )
{
if( ! (*editor)->isHidden() ) {
(*editor)->setFocus();
found = true;
break;
}
}
if( ! found )
this->setFocus();
}
void MainWindow::toggleBBEditorWin( bool forceShow )
{
toggleWindow( Engine::getBBEditor(), forceShow );

View File

@@ -790,11 +790,3 @@ bool SongEditor::allowRubberband() const
{
return( m_editModeButton->isChecked() );
}
/* vim: set tw=0 noexpandtab: */