2012-05-26 14:49:10 +02:00
//=============================================================================
// MuseScore
// Music Composition & Notation
//
2012-12-06 14:21:53 +01:00
// Copyright (C) 2002-2012 Werner Schweer
2012-05-26 14:49:10 +02:00
//
// This program is free software; you can redistribute it and/or modify
2012-12-06 14:21:53 +01:00
// it under the terms of the GNU General Public License version 2
// as published by the Free Software Foundation and appearing in
// the file LICENCE.GPL
2012-05-26 14:49:10 +02:00
//=============================================================================
# include <fenv.h>
2014-05-24 18:11:51 +02:00
# include "palettebox.h"
2013-02-21 11:04:41 +01:00
# include "config.h"
2012-05-26 14:49:10 +02:00
# include "musescore.h"
# include "scoreview.h"
# include "libmscore/style.h"
# include "libmscore/score.h"
# include "instrdialog.h"
# include "preferences.h"
# include "prefsdialog.h"
# include "icons.h"
# include "textstyle.h"
# include "libmscore/xml.h"
# include "seq.h"
# include "libmscore/tempo.h"
# include "libmscore/sym.h"
# include "pagesettings.h"
2013-06-10 11:03:34 +02:00
# include "debugger/debugger.h"
2012-05-26 14:49:10 +02:00
# include "editstyle.h"
# include "playpanel.h"
# include "libmscore/page.h"
# include "mixer.h"
2014-06-02 12:12:53 +02:00
# include "selectionwindow.h"
2012-05-26 14:49:10 +02:00
# include "palette.h"
2013-02-10 14:50:18 +01:00
# include "palettebox.h"
2012-05-26 14:49:10 +02:00
# include "libmscore/part.h"
# include "libmscore/drumset.h"
# include "libmscore/instrtemplate.h"
# include "libmscore/note.h"
# include "libmscore/staff.h"
# include "driver.h"
# include "libmscore/harmony.h"
# include "magbox.h"
# include "libmscore/sig.h"
# include "libmscore/undo.h"
# include "synthcontrol.h"
# include "pianoroll.h"
# include "drumroll.h"
# include "scoretab.h"
# include "timedialog.h"
# include "keyedit.h"
# include "harmonyedit.h"
# include "navigator.h"
2014-11-11 20:48:57 +01:00
# include "importmidi/importmidi_panel.h"
2012-05-26 14:49:10 +02:00
# include "libmscore/chord.h"
# include "mstyle/mstyle.h"
2013-08-13 19:10:08 +02:00
# include "mstyle/mconfig.h"
2012-05-26 14:49:10 +02:00
# include "libmscore/segment.h"
# include "editraster.h"
# include "pianotools.h"
# include "mediadialog.h"
2013-02-06 16:43:25 +01:00
# include "workspace.h"
2012-05-26 14:49:10 +02:00
# include "selectdialog.h"
# include "transposedialog.h"
# include "metaedit.h"
2013-06-10 11:03:34 +02:00
# include "inspector/inspector.h"
2015-02-19 23:17:14 +01:00
# ifdef OMR
2012-05-26 14:49:10 +02:00
# include "omrpanel.h"
2015-02-19 23:17:14 +01:00
# endif
2012-05-26 14:49:10 +02:00
# include "shortcut.h"
2015-01-07 13:47:03 +01:00
# ifdef SCRIPT_INTERFACE
2012-07-02 18:05:10 +02:00
# include "pluginCreator.h"
2013-02-11 14:13:38 +01:00
# include "pluginManager.h"
2015-01-07 13:47:03 +01:00
# endif
2012-07-12 18:46:15 +02:00
# include "helpBrowser.h"
2012-08-15 17:43:31 +02:00
# include "drumtools.h"
2012-08-31 14:03:36 +02:00
# include "editstafftype.h"
2013-02-15 22:39:56 +01:00
# include "texttools.h"
2013-09-30 18:38:05 +02:00
# include "textpalette.h"
# include "resourceManager.h"
2014-07-10 14:13:37 +02:00
# include "scoreaccessibility.h"
2012-05-26 14:49:10 +02:00
# include "libmscore/mscore.h"
# include "libmscore/system.h"
2014-12-18 01:20:52 +01:00
# include "libmscore/measure.h"
2012-05-26 14:49:10 +02:00
# include "libmscore/chordlist.h"
# include "libmscore/volta.h"
2012-07-12 15:35:35 +02:00
# include "libmscore/lasso.h"
2015-05-06 09:08:20 +02:00
# include "libmscore/excerpt.h"
2013-09-30 18:38:05 +02:00
2013-04-02 20:46:07 +02:00
# include "driver.h"
2012-05-26 14:49:10 +02:00
2013-04-02 20:46:07 +02:00
# include "effects/zita1/zita.h"
# include "effects/noeffect/noeffect.h"
2013-03-26 19:59:51 +01:00
# include "synthesizer/synthesizer.h"
2013-04-03 12:13:23 +02:00
# include "synthesizer/synthesizergui.h"
2013-04-02 20:46:07 +02:00
# include "synthesizer/msynthesizer.h"
# include "fluid/fluid.h"
2014-04-25 19:26:22 +02:00
# include "qmlplugin.h"
2014-05-15 19:28:25 +02:00
# include "accessibletoolbutton.h"
2015-02-01 20:50:01 +01:00
# include "searchComboBox.h"
2014-11-12 16:36:40 +01:00
# include "startcenter.h"
2015-02-02 09:30:17 +01:00
# include "help.h"
2014-11-24 20:23:01 +01:00
# include "awl/aslider.h"
2014-11-12 16:36:40 +01:00
2013-05-13 18:49:17 +02:00
# ifdef AEOLUS
extern Ms : : Synthesizer * createAeolus ( ) ;
# endif
# ifdef ZERBERUS
extern Ms : : Synthesizer * createZerberus ( ) ;
# endif
namespace Ms {
2012-05-26 14:49:10 +02:00
MuseScore * mscore ;
2013-03-26 19:59:51 +01:00
MasterSynthesizer * synti ;
2012-05-26 14:49:10 +02:00
bool enableExperimental = false ;
2013-02-06 16:25:27 +01:00
bool enableTestMode = false ;
2012-05-26 14:49:10 +02:00
QString dataPath ;
2013-07-05 18:54:11 +02:00
QString iconPath ;
2012-05-26 14:49:10 +02:00
bool converterMode = false ;
bool externalIcons = false ;
2015-03-04 16:44:03 +01:00
bool pluginMode = false ;
2012-05-26 14:49:10 +02:00
static bool startWithNewScore = false ;
double converterDpi = 0 ;
2014-11-20 09:15:17 +01:00
double guiScaling = 1.0 ;
2014-12-07 17:46:57 +01:00
int trimMargin = - 1 ;
2015-05-04 11:50:03 +02:00
bool noWebView = false ;
2015-05-06 09:08:20 +02:00
bool exportScoreParts = false ;
2012-05-26 14:49:10 +02:00
QString mscoreGlobalShare ;
2014-11-12 15:01:08 +01:00
2012-05-26 14:49:10 +02:00
static QString outFileName ;
2013-04-15 19:56:59 +02:00
static QString audioDriver ;
2012-05-26 14:49:10 +02:00
static QString pluginName ;
static QString styleFile ;
2014-11-20 12:49:51 +01:00
static bool scoresOnCommandline { false } ;
2012-12-05 08:45:47 +01:00
QString localeName ;
2012-05-26 14:49:10 +02:00
bool useFactorySettings = false ;
2014-05-13 14:47:18 +02:00
bool deletePreferences = false ;
2012-05-26 14:49:10 +02:00
QString styleName ;
QString revision ;
2013-07-17 14:36:34 +02:00
QErrorMessage * errorMessage ;
2014-03-27 11:34:12 +01:00
const char * voiceActions [ ] = { " voice-1 " , " voice-2 " , " voice-3 " , " voice-4 " } ;
2012-05-26 14:49:10 +02:00
2014-07-13 18:33:26 +02:00
extern bool savePositions ( Score * , const QString & name , bool segments ) ;
2013-02-25 21:57:11 +01:00
extern TextPalette * textPalette ;
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
// cmdInsertMeasure
//---------------------------------------------------------
void MuseScore : : cmdInsertMeasures ( )
{
2015-02-03 13:42:37 +01:00
if ( cs ) {
if ( cs - > selection ( ) . isNone ( ) & & ! cs - > selection ( ) . findMeasure ( ) ) {
QMessageBox : : warning ( 0 , " MuseScore " ,
tr ( " No measure selected: \n " " Please select a measure and try again " ) ) ;
}
else {
insertMeasuresDialog = new InsertMeasuresDialog ;
insertMeasuresDialog - > show ( ) ;
}
2013-04-13 23:53:44 +02:00
}
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
// InsertMeasuresDialog
//---------------------------------------------------------
InsertMeasuresDialog : : InsertMeasuresDialog ( QWidget * parent )
: QDialog ( parent )
{
2013-02-07 13:10:46 +01:00
setupUi ( this ) ;
setWindowFlags ( this - > windowFlags ( ) & ~ Qt : : WindowContextHelpButtonHint ) ;
2013-11-28 21:39:17 +01:00
insmeasures - > selectAll ( ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
// Insert Measure --> accept
//---------------------------------------------------------
void InsertMeasuresDialog : : accept ( )
{
2013-04-28 21:29:12 +02:00
int n = insmeasures - > value ( ) ;
if ( mscore - > currentScore ( ) )
2014-06-24 18:36:02 +02:00
mscore - > currentScoreView ( ) - > cmdInsertMeasures ( n , Element : : Type : : MEASURE ) ;
2013-04-28 21:29:12 +02:00
done ( 1 ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
// getSharePath
//---------------------------------------------------------
2015-02-02 09:30:17 +01:00
QString getSharePath ( )
2012-05-26 14:49:10 +02:00
{
2013-05-16 16:12:22 +02:00
# ifdef Q_OS_WIN
2012-05-26 14:49:10 +02:00
QDir dir ( QCoreApplication : : applicationDirPath ( ) + QString ( " /../ " INSTALL_NAME ) ) ;
return dir . absolutePath ( ) + " / " ;
# else
2013-05-16 16:12:22 +02:00
# ifdef Q_OS_MAC
2012-05-26 14:49:10 +02:00
QDir dir ( QCoreApplication : : applicationDirPath ( ) + QString ( " /../Resources " ) ) ;
return dir . absolutePath ( ) + " / " ;
# else
return QString ( INSTPREFIX " /share/ " INSTALL_NAME ) ;
# endif
# endif
}
//---------------------------------------------------------
// printVersion
//---------------------------------------------------------
static void printVersion ( const char * prog )
{
2015-05-06 17:38:18 +02:00
if ( MuseScore : : unstable ( ) )
fprintf ( stderr , " %s: Music Score Editor \n Unstable Prerelease for Version %s; Build %s \n " ,
2012-05-26 14:49:10 +02:00
prog , VERSION , qPrintable ( revision ) ) ;
2015-05-06 17:38:18 +02:00
else
fprintf ( stderr , " %s: Music Score Editor; Version %s; Build %s \n " , prog , VERSION , qPrintable ( revision ) ) ;
2012-05-26 14:49:10 +02:00
}
2014-11-13 09:52:12 +01:00
static const int RECENT_LIST_SIZE = 20 ;
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
// closeEvent
//---------------------------------------------------------
void MuseScore : : closeEvent ( QCloseEvent * ev )
{
unloadPlugins ( ) ;
QList < Score * > removeList ;
foreach ( Score * score , scoreList ) {
if ( score - > created ( ) & & ! score - > dirty ( ) )
removeList . append ( score ) ;
else {
if ( checkDirty ( score ) ) { // ask user if file is dirty
ev - > ignore ( ) ;
return ;
}
//
// if score is still dirty, then the user has discarded the
// score and we can remove it from the list
//
if ( score - > created ( ) & & score - > dirty ( ) )
removeList . append ( score ) ;
}
}
// remove all new created/not save score so they are
// note saved as session data
foreach ( Score * score , removeList )
scoreList . removeAll ( score ) ;
writeSessionFile ( true ) ;
foreach ( Score * score , scoreList ) {
if ( ! score - > tmpName ( ) . isEmpty ( ) ) {
QFile f ( score - > tmpName ( ) ) ;
f . remove ( ) ;
}
}
writeSettings ( ) ;
2014-11-17 13:06:34 +01:00
2014-11-14 21:03:46 +01:00
_loginManager - > save ( ) ;
2013-04-12 10:56:17 +02:00
2012-05-26 14:49:10 +02:00
ev - > accept ( ) ;
if ( preferences . dirty )
preferences . write ( ) ;
2012-06-11 16:26:37 +02:00
this - > deleteLater ( ) ; //this is necessary on windows http://musescore.org/node/16713
2012-05-26 14:49:10 +02:00
qApp - > quit ( ) ;
}
//---------------------------------------------------------
// preferencesChanged
//---------------------------------------------------------
void MuseScore : : preferencesChanged ( )
{
for ( int i = 0 ; i < tab1 - > count ( ) ; + + i ) {
ScoreView * canvas = tab1 - > view ( i ) ;
if ( canvas = = 0 )
continue ;
if ( preferences . bgUseColor )
canvas - > setBackground ( MScore : : bgColor ) ;
else {
QPixmap * pm = new QPixmap ( preferences . bgWallpaper ) ;
canvas - > setBackground ( pm ) ;
}
if ( preferences . fgUseColor )
canvas - > setForeground ( preferences . fgColor ) ;
else {
QPixmap * pm = new QPixmap ( preferences . fgWallpaper ) ;
if ( pm = = 0 | | pm - > isNull ( ) )
qDebug ( " no valid pixmap %s " , preferences . fgWallpaper . toLatin1 ( ) . data ( ) ) ;
canvas - > setForeground ( pm ) ;
}
}
if ( tab2 ) {
for ( int i = 0 ; i < tab2 - > count ( ) ; + + i ) {
ScoreView * canvas = tab2 - > view ( i ) ;
if ( canvas = = 0 )
continue ;
if ( preferences . bgUseColor )
canvas - > setBackground ( MScore : : bgColor ) ;
else {
QPixmap * pm = new QPixmap ( preferences . bgWallpaper ) ;
canvas - > setBackground ( pm ) ;
}
if ( preferences . fgUseColor )
canvas - > setForeground ( preferences . fgColor ) ;
else {
QPixmap * pm = new QPixmap ( preferences . fgWallpaper ) ;
if ( pm = = 0 | | pm - > isNull ( ) )
qDebug ( " no valid pixmap %s " , preferences . fgWallpaper . toLatin1 ( ) . data ( ) ) ;
canvas - > setForeground ( pm ) ;
}
}
}
2014-10-11 15:32:34 +02:00
transportTools - > setEnabled ( ! noSeq & & seq & & seq - > isRunning ( ) ) ;
playId - > setEnabled ( ! noSeq & & seq & & seq - > isRunning ( ) ) ;
2012-05-26 14:49:10 +02:00
getAction ( " midi-on " ) - > setEnabled ( preferences . enableMidiInput ) ;
2012-05-31 16:24:35 +02:00
_statusBar - > setVisible ( preferences . showStatusBar ) ;
2015-01-12 00:55:47 +01:00
updateNewWizard ( ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
// MuseScore
//---------------------------------------------------------
MuseScore : : MuseScore ( )
: QMainWindow ( )
{
_sstate = STATE_INIT ;
setWindowTitle ( QString ( " MuseScore " ) ) ;
2014-11-20 09:15:17 +01:00
setIconSize ( QSize ( preferences . iconWidth * guiScaling , preferences . iconHeight * guiScaling ) ) ;
2012-05-26 14:49:10 +02:00
2014-11-12 18:57:15 +01:00
ucheck = new UpdateChecker ( ) ;
2012-05-26 14:49:10 +02:00
setAcceptDrops ( true ) ;
2014-11-12 18:57:15 +01:00
setFocusPolicy ( Qt : : NoFocus ) ;
2012-05-26 14:49:10 +02:00
if ( ! preferences . styleName . isEmpty ( ) ) {
QFile f ( preferences . styleName ) ;
if ( f . open ( QIODevice : : ReadOnly ) ) {
MScore : : defaultStyle ( ) - > load ( & f ) ;
f . close ( ) ;
}
}
2015-03-04 15:54:50 +01:00
if ( ! converterMode & & ! pluginMode ) {
2015-02-19 17:29:30 +01:00
_loginManager = new LoginManager ( this ) ;
// initialize help engine
QString lang = mscore - > getLocaleISOCode ( ) ;
if ( lang = = " en_US " ) // HACK
lang = " en " ;
QString s = getSharePath ( ) + " manual/doc_ " + lang + " .qhc " ;
qDebug ( " init Help from: <%s> " , qPrintable ( s ) ) ;
_helpEngine = new QHelpEngine ( s , this ) ;
if ( ! _helpEngine - > setupData ( ) ) {
qDebug ( " cannot setup data for help engine: %s " , qPrintable ( _helpEngine - > error ( ) ) ) ;
delete _helpEngine ;
_helpEngine = 0 ;
}
}
2012-05-26 14:49:10 +02:00
_positionLabel = new QLabel ;
_positionLabel - > setObjectName ( " decoration widget " ) ; // this prevents animations
2014-10-15 20:43:06 +02:00
_positionLabel - > setToolTip ( tr ( " Measure:Beat:Tick " ) ) ;
2012-05-26 14:49:10 +02:00
_modeText = new QLabel ;
2013-07-04 21:07:38 +02:00
_modeText - > setAutoFillBackground ( false ) ;
_modeText - > setObjectName ( " modeLabel " ) ;
2014-07-10 14:13:37 +02:00
2012-05-26 14:49:10 +02:00
_statusBar = new QStatusBar ;
2014-07-10 14:13:37 +02:00
2014-11-14 11:44:48 +01:00
hRasterAction = getAction ( " hraster " ) ;
vRasterAction = getAction ( " vraster " ) ;
loopAction = getAction ( " loop " ) ;
loopInAction = getAction ( " loop-in " ) ;
loopOutAction = getAction ( " loop-out " ) ;
2012-05-26 14:49:10 +02:00
metronomeAction = getAction ( " metronome " ) ;
2014-11-14 11:44:48 +01:00
countInAction = getAction ( " countin " ) ;
panAction = getAction ( " pan " ) ;
2013-10-15 09:36:17 +02:00
2012-05-26 14:49:10 +02:00
_statusBar - > addPermanentWidget ( new QWidget ( this ) , 2 ) ;
_statusBar - > addPermanentWidget ( new QWidget ( this ) , 100 ) ;
_statusBar - > addPermanentWidget ( _modeText , 0 ) ;
2014-08-26 16:38:33 +02:00
2014-08-12 21:28:40 +02:00
if ( enableExperimental ) {
layerSwitch = new QComboBox ( this ) ;
2014-10-15 20:43:06 +02:00
layerSwitch - > setToolTip ( tr ( " Switch layer " ) ) ;
2014-08-12 21:28:40 +02:00
connect ( layerSwitch , SIGNAL ( activated ( const QString & ) ) , SLOT ( switchLayer ( const QString & ) ) ) ;
playMode = new QComboBox ( this ) ;
playMode - > addItem ( tr ( " synthesizer " ) ) ;
playMode - > addItem ( tr ( " audio track " ) ) ;
2014-10-15 20:43:06 +02:00
playMode - > setToolTip ( tr ( " Switch play mode " ) ) ;
2014-08-12 21:28:40 +02:00
connect ( playMode , SIGNAL ( activated ( int ) ) , SLOT ( switchPlayMode ( int ) ) ) ;
_statusBar - > addPermanentWidget ( playMode ) ;
_statusBar - > addPermanentWidget ( layerSwitch ) ;
}
2012-05-26 14:49:10 +02:00
_statusBar - > addPermanentWidget ( _positionLabel , 0 ) ;
setStatusBar ( _statusBar ) ;
2014-07-10 14:13:37 +02:00
ScoreAccessibility : : createInstance ( this ) ;
2012-05-26 14:49:10 +02:00
// otherwise unused actions:
// must be added somewere to work
2014-06-10 23:41:30 +02:00
QActionGroup * ag = Shortcut : : getActionGroupForWidget ( MsWidget : : MAIN_WINDOW ) ;
ag - > setParent ( this ) ;
2014-11-14 11:44:48 +01:00
addActions ( ag - > actions ( ) ) ;
2012-05-26 14:49:10 +02:00
connect ( ag , SIGNAL ( triggered ( QAction * ) ) , SLOT ( cmd ( QAction * ) ) ) ;
mainWindow = new QSplitter ;
2013-05-08 10:54:06 +02:00
mainWindow - > setChildrenCollapsible ( false ) ;
2012-05-26 14:49:10 +02:00
mainWindow - > setOrientation ( Qt : : Vertical ) ;
2013-05-08 10:54:06 +02:00
2012-05-26 14:49:10 +02:00
QWidget * mainScore = new QWidget ;
mainScore - > setSizePolicy ( QSizePolicy : : Expanding , QSizePolicy : : Expanding ) ;
mainWindow - > addWidget ( mainScore ) ;
layout = new QVBoxLayout ;
layout - > setMargin ( 0 ) ;
layout - > setSpacing ( 0 ) ;
mainScore - > setLayout ( layout ) ;
_navigator = new NScrollArea ;
2014-06-15 20:52:21 +02:00
_navigator - > setFocusPolicy ( Qt : : NoFocus ) ;
2012-05-26 14:49:10 +02:00
mainWindow - > addWidget ( _navigator ) ;
showNavigator ( preferences . showNavigator ) ;
2013-05-09 18:46:51 +02:00
mainWindow - > setStretchFactor ( 0 , 1 ) ;
mainWindow - > setStretchFactor ( 1 , 0 ) ;
2014-11-12 18:57:15 +01:00
mainWindow - > setSizes ( QList < int > ( { 500 , 50 } ) ) ;
2013-05-09 18:46:51 +02:00
QSplitter * envelope = new QSplitter ;
envelope - > setChildrenCollapsible ( false ) ;
envelope - > setOrientation ( Qt : : Vertical ) ;
envelope - > addWidget ( mainWindow ) ;
2015-01-13 17:27:58 +01:00
2013-09-25 21:53:52 +02:00
importmidiPanel = new ImportMidiPanel ( this ) ;
importmidiPanel - > setVisible ( false ) ;
envelope - > addWidget ( importmidiPanel ) ;
2013-07-22 01:33:56 +02:00
2013-09-25 21:53:52 +02:00
{
importmidiShowPanel = new QFrame ;
QHBoxLayout * hl = new QHBoxLayout ;
hl - > setMargin ( 0 ) ;
hl - > setSpacing ( 0 ) ;
importmidiShowPanel - > setLayout ( hl ) ;
2014-10-07 19:38:12 +02:00
QPushButton * b = new QPushButton ( tr ( " Show MIDI import panel " ) ) ;
2014-05-24 18:11:51 +02:00
b - > setFocusPolicy ( Qt : : ClickFocus ) ;
2013-09-25 21:53:52 +02:00
importmidiShowPanel - > setVisible ( false ) ;
connect ( b , SIGNAL ( clicked ( ) ) , SLOT ( showMidiImportPanel ( ) ) ) ;
connect ( importmidiPanel , SIGNAL ( closeClicked ( ) ) , importmidiShowPanel , SLOT ( show ( ) ) ) ;
hl - > addWidget ( b ) ;
QSpacerItem * item = new QSpacerItem ( 1 , 1 , QSizePolicy : : Expanding , QSizePolicy : : Fixed ) ;
hl - > addSpacerItem ( item ) ;
envelope - > addWidget ( importmidiShowPanel ) ;
}
2015-01-13 17:27:58 +01:00
2014-11-12 18:57:15 +01:00
envelope - > setSizes ( QList < int > ( { 550 , 180 } ) ) ;
2012-05-26 14:49:10 +02:00
splitter = new QSplitter ;
2014-05-28 22:35:23 +02:00
tab1 = new ScoreTab ( & scoreList , this ) ;
2012-05-26 14:49:10 +02:00
tab1 - > setSizePolicy ( QSizePolicy : : Expanding , QSizePolicy : : Expanding ) ;
connect ( tab1 , SIGNAL ( currentScoreViewChanged ( ScoreView * ) ) , SLOT ( setCurrentScoreView ( ScoreView * ) ) ) ;
connect ( tab1 , SIGNAL ( tabCloseRequested ( int ) ) , SLOT ( removeTab ( int ) ) ) ;
2014-06-10 23:41:30 +02:00
connect ( tab1 , SIGNAL ( actionTriggered ( QAction * ) ) , SLOT ( cmd ( QAction * ) ) ) ;
2012-05-26 14:49:10 +02:00
splitter - > addWidget ( tab1 ) ;
if ( splitScreen ( ) ) {
2014-05-28 22:35:23 +02:00
tab2 = new ScoreTab ( & scoreList , this ) ;
2012-05-26 14:49:10 +02:00
tab2 - > setSizePolicy ( QSizePolicy : : Expanding , QSizePolicy : : Expanding ) ;
connect ( tab2 , SIGNAL ( currentScoreViewChanged ( ScoreView * ) ) , SLOT ( setCurrentScoreView ( ScoreView * ) ) ) ;
2014-06-18 17:36:28 +02:00
connect ( tab2 , SIGNAL ( tabCloseRequested ( int ) ) , SLOT ( removeTab ( int ) ) ) ;
2014-06-10 23:41:30 +02:00
connect ( tab2 , SIGNAL ( actionTriggered ( QAction * ) ) , SLOT ( cmd ( QAction * ) ) ) ;
2012-05-26 14:49:10 +02:00
splitter - > addWidget ( tab2 ) ;
tab2 - > setVisible ( false ) ;
}
else
tab2 = 0 ;
layout - > addWidget ( splitter ) ;
//---------------------------------------------------
// Transport Action
//---------------------------------------------------
QAction * a ;
# ifdef HAS_MIDI
a = getAction ( " midi-on " ) ;
a - > setEnabled ( preferences . enableMidiInput ) ;
a - > setChecked ( _midiinEnabled ) ;
# endif
2014-11-14 11:44:48 +01:00
getAction ( " undo " ) - > setEnabled ( false ) ;
getAction ( " redo " ) - > setEnabled ( false ) ;
getAction ( " paste " ) - > setEnabled ( false ) ;
selectionChanged ( SelState : : NONE ) ;
2012-05-26 14:49:10 +02:00
//---------------------------------------------------
// File Action
//---------------------------------------------------
//---------------------
// Tool Bar
//---------------------
fileTools = addToolBar ( tr ( " File Operations " ) ) ;
fileTools - > setObjectName ( " file-operations " ) ;
2014-12-19 13:52:52 +01:00
for ( auto i : { " file-new " , " file-open " , " file-save " , " print " , " undo " , " redo " } )
2014-11-14 11:44:48 +01:00
fileTools - > addWidget ( new AccessibleToolButton ( fileTools , getAction ( i ) ) ) ;
2012-05-26 14:49:10 +02:00
fileTools - > addSeparator ( ) ;
2014-06-06 14:17:19 +02:00
mag = new MagBox ;
2014-06-15 20:52:21 +02:00
mag - > setFocusPolicy ( Qt : : StrongFocus ) ;
mag - > setAccessibleName ( tr ( " Zoom " ) ) ;
2014-06-06 14:17:19 +02:00
mag - > setFixedHeight ( preferences . iconHeight + 10 ) ; // hack
connect ( mag , SIGNAL ( magChanged ( int ) ) , SLOT ( magChanged ( int ) ) ) ;
2015-02-02 01:25:35 +01:00
connect ( mag - > lineEdit ( ) , SIGNAL ( editingFinished ( ) ) , SLOT ( magTextChanged ( ) ) ) ;
2014-06-06 14:17:19 +02:00
fileTools - > addWidget ( mag ) ;
viewModeCombo = new QComboBox ( this ) ;
2014-08-12 15:49:18 +02:00
# if defined(Q_OS_MAC)
viewModeCombo - > setFocusPolicy ( Qt : : StrongFocus ) ;
# else
2014-06-15 20:52:21 +02:00
viewModeCombo - > setFocusPolicy ( Qt : : TabFocus ) ;
2014-08-12 15:49:18 +02:00
# endif
2014-06-15 20:52:21 +02:00
viewModeCombo - > setAccessibleName ( tr ( " View Mode " ) ) ;
2014-06-06 14:17:19 +02:00
viewModeCombo - > setFixedHeight ( preferences . iconHeight + 8 ) ; // hack
viewModeCombo - > addItem ( tr ( " Page View " ) ) ;
viewModeCombo - > addItem ( tr ( " Continuous View " ) ) ;
connect ( viewModeCombo , SIGNAL ( activated ( int ) ) , SLOT ( switchLayoutMode ( int ) ) ) ;
fileTools - > addWidget ( viewModeCombo ) ;
2012-05-26 14:49:10 +02:00
transportTools = addToolBar ( tr ( " Transport Tools " ) ) ;
transportTools - > setObjectName ( " transport-tools " ) ;
# ifdef HAS_MIDI
2014-05-15 19:28:25 +02:00
transportTools - > addWidget ( new AccessibleToolButton ( transportTools , getAction ( " midi-on " ) ) ) ;
2012-05-26 14:49:10 +02:00
transportTools - > addSeparator ( ) ;
2014-11-14 11:44:48 +01:00
# endif
2014-05-15 19:28:25 +02:00
transportTools - > addWidget ( new AccessibleToolButton ( transportTools , getAction ( " rewind " ) ) ) ;
2014-11-24 20:23:01 +01:00
_playButton = new AccessibleToolButton ( transportTools , getAction ( " play " ) ) ;
transportTools - > addWidget ( _playButton ) ;
2014-05-15 19:28:25 +02:00
transportTools - > addWidget ( new AccessibleToolButton ( transportTools , getAction ( " loop " ) ) ) ;
2012-05-26 14:49:10 +02:00
transportTools - > addSeparator ( ) ;
2014-11-14 11:44:48 +01:00
transportTools - > addWidget ( new AccessibleToolButton ( transportTools , getAction ( " repeat " ) ) ) ;
transportTools - > addWidget ( new AccessibleToolButton ( transportTools , getAction ( " pan " ) ) ) ;
2014-05-15 19:28:25 +02:00
transportTools - > addWidget ( new AccessibleToolButton ( transportTools , metronomeAction ) ) ;
2012-05-26 14:49:10 +02:00
cpitchTools = addToolBar ( tr ( " Concert Pitch " ) ) ;
cpitchTools - > setObjectName ( " pitch-tools " ) ;
2014-06-06 14:17:19 +02:00
cpitchTools - > addWidget ( new AccessibleToolButton ( cpitchTools , getAction ( " concert-pitch " ) ) ) ;
2012-05-26 14:49:10 +02:00
2015-03-03 11:28:54 +01:00
QToolBar * foto = addToolBar ( tr ( " Image Capture " ) ) ;
2012-05-26 14:49:10 +02:00
foto - > setObjectName ( " foto-tools " ) ;
2014-11-14 11:44:48 +01:00
foto - > addWidget ( new AccessibleToolButton ( foto , getAction ( " fotomode " ) ) ) ;
2012-05-26 14:49:10 +02:00
2013-07-04 21:07:38 +02:00
addToolBarBreak ( ) ;
2012-05-26 14:49:10 +02:00
//-------------------------------
2015-03-03 11:28:54 +01:00
// Note Input Tool Bar
2012-05-26 14:49:10 +02:00
//-------------------------------
2015-03-03 11:28:54 +01:00
entryTools = addToolBar ( tr ( " Note Input " ) ) ;
2012-05-26 14:49:10 +02:00
entryTools - > setObjectName ( " entry-tools " ) ;
2013-05-31 17:48:47 +02:00
static const char * sl1 [ ] = {
2014-11-14 11:44:48 +01:00
" note-input " ,
2013-05-31 17:48:47 +02:00
" repitch " , " pad-note-128 " , " pad-note-64 " , " pad-note-32 " , " pad-note-16 " ,
" pad-note-8 " ,
" pad-note-4 " , " pad-note-2 " , " pad-note-1 " , " note-breve " , " note-longa " ,
" pad-dot " ,
2014-11-14 11:44:48 +01:00
" pad-dotdot " , " tie " , " " , " pad-rest " , " " ,
" sharp2 " , " sharp " , " nat " , " flat " , " flat2 " , " flip " , " "
2013-05-31 17:48:47 +02:00
} ;
2014-11-14 11:44:48 +01:00
for ( auto s : sl1 ) {
if ( ! * s )
2012-05-26 14:49:10 +02:00
entryTools - > addSeparator ( ) ;
2014-11-14 11:44:48 +01:00
else
entryTools - > addAction ( getAction ( s ) ) ;
2012-05-26 14:49:10 +02:00
}
2015-03-03 22:09:31 +01:00
static const char * vbsh { " QToolButton:checked, QToolButton:pressed { color: white;} " } ;
2015-03-03 21:06:46 +01:00
2014-03-27 11:34:12 +01:00
for ( int i = 0 ; i < VOICES ; + + i ) {
2013-07-03 16:32:38 +02:00
QToolButton * tb = new QToolButton ( this ) ;
2015-03-03 21:06:46 +01:00
if ( preferences . globalStyle = = MuseScoreStyleType : : LIGHT )
tb - > setStyleSheet ( vbsh ) ;
2013-07-03 16:32:38 +02:00
tb - > setToolButtonStyle ( Qt : : ToolButtonTextOnly ) ;
QPalette p ( tb - > palette ( ) ) ;
p . setColor ( QPalette : : Base , MScore : : selectColor [ i ] ) ;
tb - > setPalette ( p ) ;
2014-03-27 11:34:12 +01:00
QAction * a = getAction ( voiceActions [ i ] ) ;
2013-05-31 17:48:47 +02:00
a - > setCheckable ( true ) ;
2013-07-03 16:32:38 +02:00
tb - > setDefaultAction ( a ) ;
2014-05-15 20:36:07 +02:00
tb - > setFocusPolicy ( Qt : : ClickFocus ) ;
2013-07-03 16:32:38 +02:00
entryTools - > addWidget ( tb ) ;
2013-05-31 17:48:47 +02:00
}
2012-05-26 14:49:10 +02:00
2015-02-02 09:30:17 +01:00
2012-05-26 14:49:10 +02:00
//---------------------
// Menus
//---------------------
QMenuBar * mb = menuBar ( ) ;
//---------------------
// Menu File
//---------------------
_fileMenu = mb - > addMenu ( tr ( " &File " ) ) ;
_fileMenu - > setObjectName ( " File " ) ;
_fileMenu - > addAction ( getAction ( " file-new " ) ) ;
_fileMenu - > addAction ( getAction ( " file-open " ) ) ;
2014-11-14 11:44:48 +01:00
2013-05-12 10:28:07 +02:00
openRecent = _fileMenu - > addMenu ( tr ( " Open &Recent " ) ) ;
2014-11-14 11:44:48 +01:00
2012-05-26 14:49:10 +02:00
connect ( openRecent , SIGNAL ( aboutToShow ( ) ) , SLOT ( openRecentMenu ( ) ) ) ;
connect ( openRecent , SIGNAL ( triggered ( QAction * ) ) , SLOT ( selectScore ( QAction * ) ) ) ;
2014-08-12 21:28:40 +02:00
2014-11-14 11:44:48 +01:00
for ( auto i : {
2015-03-09 10:46:23 +01:00
" " , " file-save " , " file-save-as " , " file-save-a-copy " ,
2015-03-10 19:43:22 +01:00
" file-save-selection " , " file-save-online " , " file-export " , " file-part-export " , " file-import-pdf " ,
2014-11-14 11:44:48 +01:00
" " , " file-close " , " " , " parts " , " album " } ) {
if ( ! * i )
_fileMenu - > addSeparator ( ) ;
2015-03-09 10:46:23 +01:00
else
2014-11-14 11:44:48 +01:00
_fileMenu - > addAction ( getAction ( i ) ) ;
}
2014-08-12 21:28:40 +02:00
if ( enableExperimental )
_fileMenu - > addAction ( getAction ( " layer " ) ) ;
2012-05-26 14:49:10 +02:00
_fileMenu - > addSeparator ( ) ;
_fileMenu - > addAction ( getAction ( " edit-info " ) ) ;
2013-05-24 16:35:48 +02:00
if ( enableExperimental )
2013-02-05 16:13:05 +01:00
_fileMenu - > addAction ( getAction ( " media " ) ) ;
2012-05-26 14:49:10 +02:00
_fileMenu - > addSeparator ( ) ;
_fileMenu - > addAction ( getAction ( " print " ) ) ;
2013-07-18 10:54:38 +02:00
# ifndef Q_OS_MAC
2012-05-26 14:49:10 +02:00
_fileMenu - > addSeparator ( ) ;
_fileMenu - > addAction ( getAction ( " quit " ) ) ;
2013-07-18 10:54:38 +02:00
# endif
2014-11-14 11:44:48 +01:00
2012-05-26 14:49:10 +02:00
//---------------------
// Menu Edit
//---------------------
menuEdit = mb - > addMenu ( tr ( " &Edit " ) ) ;
menuEdit - > setObjectName ( " Edit " ) ;
menuEdit - > addAction ( getAction ( " undo " ) ) ;
menuEdit - > addAction ( getAction ( " redo " ) ) ;
menuEdit - > addSeparator ( ) ;
menuEdit - > addAction ( getAction ( " cut " ) ) ;
menuEdit - > addAction ( getAction ( " copy " ) ) ;
2014-11-14 11:44:48 +01:00
menuEdit - > addAction ( getAction ( " paste " ) ) ;
2012-05-26 14:49:10 +02:00
menuEdit - > addSeparator ( ) ;
menuEdit - > addAction ( getAction ( " select-all " ) ) ;
menuEdit - > addAction ( getAction ( " select-section " ) ) ;
menuEdit - > addAction ( getAction ( " find " ) ) ;
2012-09-12 16:19:03 +02:00
menuEdit - > addSeparator ( ) ;
2014-11-09 02:02:37 +01:00
2015-02-10 15:45:31 +01:00
menuEdit - > addAction ( getAction ( " instruments " ) ) ;
2012-05-26 14:49:10 +02:00
QMenu * menuMeasure = new QMenu ( tr ( " &Measure " ) ) ;
2014-11-14 11:44:48 +01:00
for ( auto i : { " delete-measures " , " split-measure " , " join-measure " } )
menuMeasure - > addAction ( getAction ( i ) ) ;
2012-05-26 14:49:10 +02:00
menuEdit - > addMenu ( menuMeasure ) ;
2014-11-09 02:02:37 +01:00
QMenu * menuTools = new QMenu ( tr ( " &Tools " ) ) ;
2014-12-09 08:45:30 +01:00
for ( auto i : { " add-remove-breaks " , " explode " , " implode " , " slash-fill " , " slash-rhythm " , " resequence-rehearsal-marks " } )
2014-11-09 02:02:37 +01:00
menuTools - > addAction ( getAction ( i ) ) ;
menuEdit - > addMenu ( menuTools ) ;
2012-05-26 14:49:10 +02:00
QMenu * menuVoices = new QMenu ( tr ( " &Voices " ) ) ;
2014-11-14 11:44:48 +01:00
for ( auto i : { " voice-x12 " , " voice-x13 " , " voice-x14 " , " voice-x23 " , " voice-x24 " , " voice-x34 " } )
menuVoices - > addAction ( getAction ( i ) ) ;
2012-05-26 14:49:10 +02:00
menuEdit - > addMenu ( menuVoices ) ;
2014-10-31 14:11:53 +01:00
# ifdef NDEBUG
2014-10-30 15:32:37 +01:00
if ( enableExperimental ) {
2014-10-31 14:11:53 +01:00
# endif
2014-10-30 15:32:37 +01:00
menuEdit - > addSeparator ( ) ;
menuEdit - > addAction ( getAction ( " debugger " ) ) ;
2014-10-31 14:11:53 +01:00
# ifdef NDEBUG
2014-10-30 15:32:37 +01:00
}
2014-10-31 14:11:53 +01:00
# endif
2012-05-26 14:49:10 +02:00
2012-09-12 16:19:03 +02:00
menuEdit - > addSeparator ( ) ;
2013-02-06 16:43:25 +01:00
menuWorkspaces = new QMenu ( tr ( " W&orkspaces " ) ) ;
connect ( menuWorkspaces , SIGNAL ( aboutToShow ( ) ) , SLOT ( showWorkspaceMenu ( ) ) ) ;
menuEdit - > addMenu ( menuWorkspaces ) ;
2012-05-26 14:49:10 +02:00
QAction * pref = menuEdit - > addAction ( tr ( " &Preferences... " ) , this , SLOT ( startPreferenceDialog ( ) ) ) ;
pref - > setMenuRole ( QAction : : PreferencesRole ) ;
2013-06-18 13:10:50 +02:00
//---------------------
// Menu View
//---------------------
menuView = mb - > addMenu ( tr ( " &View " ) ) ;
menuView - > setObjectName ( " View " ) ;
2014-11-10 10:05:25 +01:00
a = getAction ( " startcenter " ) ;
a - > setCheckable ( true ) ;
menuView - > addAction ( a ) ;
2013-06-18 13:10:50 +02:00
a = getAction ( " toggle-palette " ) ;
a - > setCheckable ( true ) ;
menuView - > addAction ( a ) ;
a = getAction ( " masterpalette " ) ;
a - > setCheckable ( true ) ;
menuView - > addAction ( a ) ;
a = getAction ( " inspector " ) ;
a - > setCheckable ( true ) ;
menuView - > addAction ( a ) ;
# ifdef OMR
a = getAction ( " omr " ) ;
a - > setCheckable ( true ) ;
menuView - > addAction ( a ) ;
# endif
playId = getAction ( " toggle-playpanel " ) ;
playId - > setCheckable ( true ) ;
menuView - > addAction ( playId ) ;
a = getAction ( " toggle-navigator " ) ;
a - > setCheckable ( true ) ;
a - > setChecked ( preferences . showNavigator ) ;
menuView - > addAction ( a ) ;
a = getAction ( " toggle-mixer " ) ;
a - > setCheckable ( true ) ;
menuView - > addAction ( a ) ;
a = getAction ( " synth-control " ) ;
a - > setCheckable ( true ) ;
menuView - > addAction ( a ) ;
2014-06-02 12:12:53 +02:00
a = getAction ( " toggle-selection-window " ) ;
a - > setCheckable ( true ) ;
menuView - > addAction ( a ) ;
2014-12-22 09:56:39 +01:00
a = getAction ( " toggle-piano " ) ;
2013-06-18 13:10:50 +02:00
a - > setCheckable ( true ) ;
menuView - > addAction ( a ) ;
menuView - > addSeparator ( ) ;
menuView - > addAction ( getAction ( " zoomin " ) ) ;
menuView - > addAction ( getAction ( " zoomout " ) ) ;
menuView - > addSeparator ( ) ;
2014-12-05 13:56:15 +01:00
// a = getAction("toggle-transport");
// a->setCheckable(true);
// a->setChecked(transportTools->isVisible());
// connect(transportTools, SIGNAL(visibilityChanged(bool)), a, SLOT(setChecked(bool)));
// menuView->addAction(a);
2013-06-18 13:10:50 +02:00
2014-12-05 13:56:15 +01:00
// a = getAction("toggle-noteinput");
// a->setCheckable(true);
// a->setChecked(true);
// menuView->addAction(a);
2013-06-18 13:10:50 +02:00
a = getAction ( " toggle-statusbar " ) ;
a - > setCheckable ( true ) ;
a - > setChecked ( true ) ;
menuView - > addAction ( a ) ;
menuView - > addSeparator ( ) ;
a = getAction ( " split-h " ) ;
a - > setCheckable ( true ) ;
menuView - > addAction ( a ) ;
a = getAction ( " split-v " ) ;
a - > setCheckable ( true ) ;
menuView - > addAction ( a ) ;
menuView - > addSeparator ( ) ;
menuView - > addAction ( getAction ( " show-invisible " ) ) ;
menuView - > addAction ( getAction ( " show-unprintable " ) ) ;
menuView - > addAction ( getAction ( " show-frames " ) ) ;
menuView - > addAction ( getAction ( " show-pageborders " ) ) ;
menuView - > addSeparator ( ) ;
a = getAction ( " fullscreen " ) ;
a - > setCheckable ( true ) ;
a - > setChecked ( false ) ;
menuView - > addAction ( a ) ;
2012-05-26 14:49:10 +02:00
//---------------------
// Menu Create
//---------------------
2013-09-04 10:26:12 +02:00
mb - > addMenu ( genCreateMenu ( mb ) ) ;
2012-05-26 14:49:10 +02:00
//---------------------
// Menu Notes
//---------------------
menuNotes = mb - > addMenu ( qApp - > translate ( " MenuNotes " , " &Notes " ) ) ;
menuNotes - > setObjectName ( " Notes " ) ;
menuNotes - > addAction ( getAction ( " note-input " ) ) ;
menuNotes - > addAction ( getAction ( " pitch-spell " ) ) ;
menuNotes - > addSeparator ( ) ;
QMenu * menuAddPitch = new QMenu ( tr ( " Add N&ote " ) ) ;
2014-11-14 11:44:48 +01:00
2012-05-26 14:49:10 +02:00
for ( int i = 0 ; i < 7 ; + + i ) {
char buffer [ 8 ] ;
sprintf ( buffer , " note-%c " , " cdefgab " [ i ] ) ;
a = getAction ( buffer ) ;
menuAddPitch - > addAction ( a ) ;
}
2014-11-14 11:44:48 +01:00
2012-05-26 14:49:10 +02:00
menuNotes - > addMenu ( menuAddPitch ) ;
for ( int i = 0 ; i < 7 ; + + i ) {
char buffer [ 8 ] ;
sprintf ( buffer , " chord-%c " , " cdefgab " [ i ] ) ;
a = getAction ( buffer ) ;
menuAddPitch - > addAction ( a ) ;
}
QMenu * menuAddInterval = new QMenu ( tr ( " Add &Interval " ) ) ;
for ( int i = 1 ; i < 10 ; + + i ) {
char buffer [ 16 ] ;
sprintf ( buffer , " interval%d " , i ) ;
a = getAction ( buffer ) ;
menuAddInterval - > addAction ( a ) ;
}
menuAddInterval - > addSeparator ( ) ;
for ( int i = 2 ; i < 10 ; + + i ) {
char buffer [ 16 ] ;
sprintf ( buffer , " interval-%d " , i ) ;
a = getAction ( buffer ) ;
menuAddInterval - > addAction ( a ) ;
}
menuNotes - > addMenu ( menuAddInterval ) ;
QMenu * menuNtole = new QMenu ( tr ( " T&uplets " ) ) ;
2014-11-14 11:44:48 +01:00
for ( auto i : { " duplet " , " triplet " , " quadruplet " , " quintuplet " , " sextuplet " ,
2014-11-16 22:04:37 +01:00
" septuplet " , " octuplet " , " nonuplet " , " tuplet-dialog " } )
2014-11-14 11:44:48 +01:00
menuNtole - > addAction ( getAction ( i ) ) ;
2012-05-26 14:49:10 +02:00
menuNotes - > addMenu ( menuNtole ) ;
menuNotes - > addSeparator ( ) ;
menuNotes - > addAction ( getAction ( " transpose " ) ) ;
a = getAction ( " concert-pitch " ) ;
a - > setCheckable ( true ) ;
menuNotes - > addAction ( a ) ;
//---------------------
// Menu Layout
//---------------------
menuLayout = mb - > addMenu ( tr ( " &Layout " ) ) ;
menuLayout - > setObjectName ( " Layout " ) ;
2015-02-23 15:21:57 +01:00
for ( auto i : { " page-settings " , " reset " , " stretch+ " , " stretch- " , " reset-stretch " , " reset-beammode " } ) {
QAction * action = getAction ( i ) ;
action - > setMenuRole ( QAction : : NoRole ) ;
menuLayout - > addAction ( action ) ;
}
2012-05-26 14:49:10 +02:00
//---------------------
// Menu Style
//---------------------
menuStyle = mb - > addMenu ( tr ( " &Style " ) ) ;
menuStyle - > setObjectName ( " Style " ) ;
menuStyle - > addAction ( getAction ( " edit-style " ) ) ;
menuStyle - > addAction ( getAction ( " edit-text-style " ) ) ;
2013-11-28 21:38:22 +01:00
if ( enableExperimental )
menuStyle - > addAction ( getAction ( " edit-harmony " ) ) ;
2012-10-29 16:37:24 +01:00
2012-05-26 14:49:10 +02:00
menuStyle - > addSeparator ( ) ;
menuStyle - > addAction ( getAction ( " load-style " ) ) ;
menuStyle - > addAction ( getAction ( " save-style " ) ) ;
2012-07-13 13:08:54 +02:00
//---------------------
// Menu Plugins
//---------------------
QMenu * menuPlugins = mb - > addMenu ( tr ( " &Plugins " ) ) ;
menuPlugins - > setObjectName ( " Plugins " ) ;
2013-10-05 12:03:30 +02:00
2014-07-20 20:47:18 +02:00
menuPlugins - > addAction ( getAction ( " plugin-manager " ) ) ;
2013-02-11 14:13:38 +01:00
2012-07-13 13:08:54 +02:00
a = getAction ( " plugin-creator " ) ;
a - > setCheckable ( true ) ;
menuPlugins - > addAction ( a ) ;
2013-02-11 14:13:38 +01:00
2012-07-13 13:08:54 +02:00
menuPlugins - > addSeparator ( ) ;
2012-07-19 16:47:23 +02:00
2013-09-30 18:38:05 +02:00
2012-05-26 14:49:10 +02:00
//---------------------
// Menu Help
//---------------------
mb - > addSeparator ( ) ;
QMenu * menuHelp = mb - > addMenu ( tr ( " &Help " ) ) ;
menuHelp - > setObjectName ( " Help " ) ;
2015-02-20 14:01:22 +01:00
#if 0
2015-02-19 17:29:30 +01:00
if ( _helpEngine ) {
HelpQuery * hw = new HelpQuery ( menuHelp ) ;
menuHelp - > addAction ( hw ) ;
connect ( menuHelp , SIGNAL ( aboutToShow ( ) ) , hw , SLOT ( setFocus ( ) ) ) ;
}
2015-02-09 10:54:12 +01:00
# endif
2015-03-13 09:27:35 +01:00
//menuHelp->addAction(getAction("local-help"));
2012-05-26 14:49:10 +02:00
menuHelp - > addAction ( tr ( " &Online Handbook " ) , this , SLOT ( helpBrowser1 ( ) ) ) ;
menuHelp - > addSeparator ( ) ;
2015-02-27 12:59:27 +01:00
QAction * aboutAction = new QAction ( tr ( " &About... " ) , 0 ) ;
2014-04-29 17:30:14 +02:00
2012-05-26 14:49:10 +02:00
aboutAction - > setMenuRole ( QAction : : AboutRole ) ;
connect ( aboutAction , SIGNAL ( triggered ( ) ) , this , SLOT ( about ( ) ) ) ;
menuHelp - > addAction ( aboutAction ) ;
2015-02-27 12:59:27 +01:00
QAction * aboutQtAction = new QAction ( tr ( " About &Qt... " ) , 0 ) ;
2013-07-20 18:22:44 +02:00
aboutQtAction - > setMenuRole ( QAction : : AboutQtRole ) ;
connect ( aboutQtAction , SIGNAL ( triggered ( ) ) , this , SLOT ( aboutQt ( ) ) ) ;
menuHelp - > addAction ( aboutQtAction ) ;
2012-05-26 14:49:10 +02:00
2015-02-27 12:59:27 +01:00
QAction * aboutMusicXMLAction = new QAction ( tr ( " About &MusicXML... " ) , 0 ) ;
2012-05-26 14:49:10 +02:00
aboutMusicXMLAction - > setMenuRole ( QAction : : ApplicationSpecificRole ) ;
connect ( aboutMusicXMLAction , SIGNAL ( triggered ( ) ) , this , SLOT ( aboutMusicXML ( ) ) ) ;
menuHelp - > addAction ( aboutMusicXMLAction ) ;
2013-05-16 16:12:22 +02:00
# if defined(Q_OS_MAC) || defined(Q_OS_WIN)
2012-05-26 14:49:10 +02:00
menuHelp - > addAction ( tr ( " Check for &Update " ) , this , SLOT ( checkForUpdate ( ) ) ) ;
# endif
2012-05-30 17:12:30 +02:00
2012-05-30 00:54:53 +02:00
menuHelp - > addSeparator ( ) ;
2015-07-01 14:16:55 +02:00
menuHelp - > addAction ( tr ( " Ask for Help " ) , this , SLOT ( askForHelp ( ) ) ) ;
2014-01-13 16:37:02 +01:00
menuHelp - > addAction ( tr ( " Report a Bug " ) , this , SLOT ( reportBug ( ) ) ) ;
2012-05-30 00:54:53 +02:00
2013-09-30 18:38:05 +02:00
menuHelp - > addSeparator ( ) ;
menuHelp - > addAction ( getAction ( " resource-manager " ) ) ;
2014-04-29 17:30:14 +02:00
//accessibility for menus
foreach ( QMenu * menu , mb - > findChildren < QMenu * > ( ) ) {
menu - > setAccessibleName ( menu - > objectName ( ) ) ;
menu - > setAccessibleDescription ( Shortcut : : getMenuShortcutString ( menu ) ) ;
}
2013-05-09 18:46:51 +02:00
setCentralWidget ( envelope ) ;
2014-05-28 23:20:01 +02:00
2012-07-26 14:35:13 +02:00
// load cascading instrument templates
loadInstrumentTemplates ( preferences . instrumentList1 ) ;
if ( ! preferences . instrumentList2 . isEmpty ( ) )
loadInstrumentTemplates ( preferences . instrumentList2 ) ;
2012-05-26 14:49:10 +02:00
preferencesChanged ( ) ;
if ( seq ) {
connect ( seq , SIGNAL ( started ( ) ) , SLOT ( seqStarted ( ) ) ) ;
connect ( seq , SIGNAL ( stopped ( ) ) , SLOT ( seqStopped ( ) ) ) ;
}
loadScoreList ( ) ;
QClipboard * cb = QApplication : : clipboard ( ) ;
connect ( cb , SIGNAL ( dataChanged ( ) ) , SLOT ( clipboardChanged ( ) ) ) ;
connect ( cb , SIGNAL ( selectionChanged ( ) ) , SLOT ( clipboardChanged ( ) ) ) ;
autoSaveTimer = new QTimer ( this ) ;
autoSaveTimer - > setSingleShot ( true ) ;
connect ( autoSaveTimer , SIGNAL ( timeout ( ) ) , this , SLOT ( autoSaveTimerTimeout ( ) ) ) ;
initOsc ( ) ;
startAutoSave ( ) ;
2015-02-12 11:55:43 +01:00
2012-05-26 14:49:10 +02:00
if ( enableExperimental ) {
cornerLabel = new QLabel ( this ) ;
cornerLabel - > setScaledContents ( true ) ;
cornerLabel - > setPixmap ( QPixmap ( " :/data/mscore.png " ) ) ;
cornerLabel - > setGeometry ( width ( ) - 48 , 0 , 48 , 48 ) ;
}
}
2014-12-11 12:01:30 +01:00
MuseScore : : ~ MuseScore ( )
{
delete synti ;
}
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
// resizeEvent
//---------------------------------------------------------
void MuseScore : : resizeEvent ( QResizeEvent * )
{
if ( enableExperimental ) {
cornerLabel - > setGeometry ( width ( ) - 48 , 0 , 48 , 48 ) ;
}
}
//---------------------------------------------------------
// startAutoSave
//---------------------------------------------------------
void MuseScore : : startAutoSave ( )
{
if ( preferences . autoSave ) {
int t = preferences . autoSaveTime * 60 * 1000 ;
autoSaveTimer - > start ( t ) ;
}
else
autoSaveTimer - > stop ( ) ;
}
//---------------------------------------------------------
// getLocaleISOCode
//---------------------------------------------------------
2012-07-12 18:46:15 +02:00
QString MuseScore : : getLocaleISOCode ( ) const
2012-05-26 14:49:10 +02:00
{
QString lang ;
if ( localeName . toLower ( ) = = " system " )
lang = QLocale : : system ( ) . name ( ) ;
else
lang = localeName ;
return lang ;
}
//---------------------------------------------------------
// helpBrowser1
// show online help
//---------------------------------------------------------
2012-07-12 18:46:15 +02:00
void MuseScore : : helpBrowser1 ( ) const
2012-05-26 14:49:10 +02:00
{
QString lang = getLocaleISOCode ( ) ;
if ( MScore : : debugMode )
qDebug ( " open online handbook for language <%s> " , qPrintable ( lang ) ) ;
2015-03-13 09:27:35 +01:00
QString help = QString ( " https://musescore.org/redirect/help?tag=handbook&locale=%1 " ) . arg ( getLocaleISOCode ( ) ) ;
2012-05-26 14:49:10 +02:00
//try to find an exact match
bool found = false ;
foreach ( LanguageItem item , _languages ) {
2012-07-12 18:46:15 +02:00
if ( item . key = = lang ) {
2012-05-26 14:49:10 +02:00
QString handbook = item . handbook ;
if ( ! handbook . isNull ( ) ) {
help = item . handbook ;
found = true ;
}
break ;
}
}
//try a to find a match on first two letters
if ( ! found & & lang . size ( ) > 2 ) {
lang = lang . left ( 2 ) ;
foreach ( LanguageItem item , _languages ) {
if ( item . key = = lang ) {
QString handbook = item . handbook ;
if ( ! handbook . isNull ( ) )
help = item . handbook ;
break ;
}
}
}
//track visits. see: http://www.google.com/support/googleanalytics/bin/answer.py?answer=55578
2015-03-13 09:27:35 +01:00
help + = QString ( " &utm_source=desktop&utm_medium=menu&utm_content=%1&utm_campaign=MuseScore%2 " ) . arg ( rev . trimmed ( ) ) . arg ( QString ( VERSION ) ) ;
2015-02-06 16:36:43 +01:00
QDesktopServices : : openUrl ( QUrl ( help ) ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
// aboutQt
//---------------------------------------------------------
void MuseScore : : aboutQt ( )
{
QMessageBox : : aboutQt ( this , QString ( " About Qt " ) ) ;
}
//---------------------------------------------------------
// aboutMusicXML
//---------------------------------------------------------
void MuseScore : : aboutMusicXML ( )
{
AboutMusicXMLBoxDialog ab ;
ab . show ( ) ;
ab . exec ( ) ;
}
//---------------------------------------------------------
// selectScore
// "open recent"
//---------------------------------------------------------
void MuseScore : : selectScore ( QAction * action )
{
QString a = action - > data ( ) . toString ( ) ;
if ( ! a . isEmpty ( ) ) {
2014-04-16 18:46:25 +02:00
if ( a = = " clear-recent " ) {
2014-11-13 10:22:05 +01:00
_recentScores . clear ( ) ;
2014-12-16 18:02:41 +01:00
if ( startcenter )
startcenter - > updateRecentScores ( ) ;
2014-04-16 18:46:25 +02:00
}
else {
2014-12-08 14:41:36 +01:00
Score * score = readScore ( a ) ;
2014-04-16 18:46:25 +02:00
if ( score ) {
setCurrentScoreView ( appendScore ( score ) ) ;
2014-12-08 14:41:36 +01:00
addRecentScore ( score ) ;
2014-04-16 18:46:25 +02:00
writeSessionFile ( false ) ;
}
2012-07-05 11:54:45 +02:00
}
2012-05-26 14:49:10 +02:00
}
}
//---------------------------------------------------------
// selectionChanged
//---------------------------------------------------------
2014-05-26 20:21:45 +02:00
void MuseScore : : selectionChanged ( SelState selectionState )
2012-05-26 14:49:10 +02:00
{
2014-05-26 13:21:04 +02:00
bool enable = selectionState ! = SelState : : NONE ;
2012-05-26 14:49:10 +02:00
getAction ( " cut " ) - > setEnabled ( enable ) ;
getAction ( " copy " ) - > setEnabled ( enable ) ;
2014-07-14 13:24:47 +02:00
getAction ( " select-similar-range " ) - > setEnabled ( selectionState = = SelState : : RANGE ) ;
2012-05-26 14:49:10 +02:00
if ( pianorollEditor )
2012-06-04 12:57:26 +02:00
pianorollEditor - > changeSelection ( selectionState ) ;
2012-05-26 14:49:10 +02:00
if ( drumrollEditor )
2012-06-04 12:57:26 +02:00
drumrollEditor - > changeSelection ( selectionState ) ;
2012-07-12 15:35:35 +02:00
updateInspector ( ) ;
}
//---------------------------------------------------------
// updateInspector
//---------------------------------------------------------
void MuseScore : : updateInspector ( )
{
2014-08-29 19:18:39 +02:00
if ( ! _inspector )
2012-07-12 15:35:35 +02:00
return ;
if ( cs ) {
if ( state ( ) = = STATE_EDIT )
2014-08-29 19:18:39 +02:00
_inspector - > setElement ( cv - > getEditObject ( ) ) ;
2012-07-12 15:35:35 +02:00
else if ( state ( ) = = STATE_FOTO )
2014-08-29 19:18:39 +02:00
_inspector - > setElement ( cv - > fotoLasso ( ) ) ;
2012-07-12 15:35:35 +02:00
else {
2014-08-29 19:18:39 +02:00
_inspector - > setElements ( cs - > selection ( ) . elements ( ) ) ;
2012-05-26 14:49:10 +02:00
}
}
2012-07-12 15:35:35 +02:00
else
2014-08-29 19:18:39 +02:00
_inspector - > setElement ( 0 ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
// appendScore
// append score to project list
//---------------------------------------------------------
int MuseScore : : appendScore ( Score * score )
{
int index = scoreList . size ( ) ;
for ( int i = 0 ; i < scoreList . size ( ) ; + + i ) {
2014-12-01 10:04:56 +01:00
if ( ( ! score - > importedFilePath ( ) . isEmpty ( )
& & scoreList [ i ] - > importedFilePath ( ) = = score - > importedFilePath ( ) )
2014-12-08 14:41:36 +01:00
| | ( scoreList [ i ] - > fileInfo ( ) - > canonicalFilePath ( ) = = score - > fileInfo ( ) - > canonicalFilePath ( ) & & score - > fileInfo ( ) - > exists ( ) ) ) {
2012-05-26 14:49:10 +02:00
removeTab ( i ) ;
index = i ;
break ;
}
}
scoreList . insert ( index , score ) ;
tab1 - > blockSignals ( true ) ;
if ( tab2 )
tab2 - > blockSignals ( true ) ;
tab1 - > insertTab ( score ) ;
if ( tab2 )
tab2 - > insertTab ( score ) ;
tab1 - > blockSignals ( false ) ;
if ( tab2 )
tab2 - > blockSignals ( false ) ;
return index ;
}
//---------------------------------------------------------
2014-12-08 14:41:36 +01:00
// addRecentScore
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2014-12-08 14:41:36 +01:00
void MuseScore : : addRecentScore ( Score * score )
2012-05-26 14:49:10 +02:00
{
2014-12-01 13:17:55 +01:00
QString path = score - > importedFilePath ( ) ; // defined for scores imported from e.g. MIDI files
addRecentScore ( path ) ;
2014-12-20 18:19:21 +01:00
path = score - > fileInfo ( ) - > absoluteFilePath ( ) ;
2014-12-01 13:17:55 +01:00
addRecentScore ( path ) ;
2014-12-08 14:41:36 +01:00
if ( startcenter )
startcenter - > updateRecentScores ( ) ;
2014-12-01 13:17:55 +01:00
}
void MuseScore : : addRecentScore ( const QString & scorePath )
{
2014-12-08 14:41:36 +01:00
if ( scorePath . isEmpty ( ) )
2014-12-01 13:17:55 +01:00
return ;
2015-03-17 14:23:36 +01:00
QFileInfo fi ( scorePath ) ;
QString absoluteFilePath = fi . absoluteFilePath ( ) ;
_recentScores . removeAll ( absoluteFilePath ) ;
_recentScores . prepend ( absoluteFilePath ) ;
2014-11-14 12:29:17 +01:00
if ( _recentScores . size ( ) > RECENT_LIST_SIZE )
2014-11-13 10:22:05 +01:00
_recentScores . removeLast ( ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
// updateTabNames
//---------------------------------------------------------
void MuseScore : : updateTabNames ( )
{
for ( int i = 0 ; i < tab1 - > count ( ) ; + + i ) {
ScoreView * view = tab1 - > view ( i ) ;
if ( view )
tab1 - > setTabText ( i , view - > score ( ) - > name ( ) ) ;
}
if ( tab2 ) {
for ( int i = 0 ; i < tab2 - > count ( ) ; + + i ) {
ScoreView * view = tab2 - > view ( i ) ;
if ( view )
tab2 - > setTabText ( i , view - > score ( ) - > name ( ) ) ;
}
}
}
//---------------------------------------------------------
// loadScoreList
// read list of "Recent Scores"
//---------------------------------------------------------
void MuseScore : : loadScoreList ( )
{
if ( useFactorySettings )
return ;
QSettings s ;
for ( int i = RECENT_LIST_SIZE - 1 ; i > = 0 ; - - i ) {
QString path = s . value ( QString ( " recent-%1 " ) . arg ( i ) , " " ) . toString ( ) ;
if ( ! path . isEmpty ( ) & & QFileInfo ( path ) . exists ( ) ) {
2014-11-13 10:22:05 +01:00
_recentScores . removeAll ( path ) ;
_recentScores . prepend ( path ) ;
2012-05-26 14:49:10 +02:00
}
}
}
//---------------------------------------------------------
// openRecentMenu
//---------------------------------------------------------
void MuseScore : : openRecentMenu ( )
{
openRecent - > clear ( ) ;
2014-04-16 18:46:25 +02:00
bool one = false ;
2014-11-13 10:22:05 +01:00
for ( const QFileInfo & fi : recentScores ( ) ) {
QAction * action = openRecent - > addAction ( fi . fileName ( ) . replace ( " & " , " && " ) ) ; // show filename only
QString data ( fi . canonicalFilePath ( ) ) ;
action - > setData ( data ) ;
action - > setToolTip ( data ) ;
one = true ;
2014-04-16 18:46:25 +02:00
}
if ( one ) {
openRecent - > addSeparator ( ) ;
QAction * action = openRecent - > addAction ( tr ( " Clear Recent Files " ) ) ;
action - > setData ( " clear-recent " ) ;
2012-05-26 14:49:10 +02:00
}
}
//---------------------------------------------------------
// setCurrentView
//---------------------------------------------------------
void MuseScore : : setCurrentScoreView ( int idx )
{
setCurrentView ( 0 , idx ) ;
2014-09-12 10:19:28 +02:00
if ( tab2 )
setCurrentView ( 1 , idx ) ;
2012-05-26 14:49:10 +02:00
}
void MuseScore : : setCurrentView ( int tabIdx , int idx )
{
if ( idx = = - 1 )
2013-02-15 22:39:56 +01:00
setCurrentScoreView ( nullptr ) ;
2012-05-26 14:49:10 +02:00
else {
ScoreTab * tab = tabIdx ? tab2 : tab1 ;
2013-02-15 22:39:56 +01:00
if ( tab )
2012-05-26 14:49:10 +02:00
tab - > setCurrentIndex ( idx ) ;
}
}
//---------------------------------------------------------
// setCurrentScoreView
//---------------------------------------------------------
void MuseScore : : setCurrentScoreView ( ScoreView * view )
{
cv = view ;
if ( cv ) {
2014-07-28 10:56:50 +02:00
if ( cv - > score ( ) & & ( cs ! = cv - > score ( ) ) ) {
// exit note entry mode
if ( cv - > noteEntryMode ( ) ) {
cv - > cmd ( getAction ( " escape " ) ) ;
qApp - > processEvents ( ) ;
}
2012-05-26 14:49:10 +02:00
updateInputState ( cv - > score ( ) ) ;
2014-07-28 10:56:50 +02:00
}
2012-05-26 14:49:10 +02:00
cs = cv - > score ( ) ;
view - > setFocusRect ( ) ;
}
else
cs = 0 ;
2013-07-22 01:33:56 +02:00
// set midi import panel
2014-11-01 10:52:35 +01:00
QString fileName = cs ? cs - > importedFilePath ( ) : " " ;
2013-07-22 01:33:56 +02:00
midiPanelOnSwitchToFile ( fileName ) ;
2014-08-26 16:38:33 +02:00
2014-08-12 21:28:40 +02:00
if ( enableExperimental ) {
updateLayer ( ) ;
updatePlayMode ( ) ;
}
2013-07-22 01:33:56 +02:00
2012-05-26 14:49:10 +02:00
if ( seq )
seq - > setScoreView ( cv ) ;
if ( playPanel )
playPanel - > setScore ( cs ) ;
if ( synthControl )
synthControl - > setScore ( cs ) ;
2014-06-26 22:55:07 +02:00
if ( selectionWindow )
selectionWindow - > setScore ( cs ) ;
2013-04-03 12:13:23 +02:00
if ( mixer )
mixer - > updateAll ( cs ) ;
2012-05-26 14:49:10 +02:00
# ifdef OMR
if ( omrPanel ) {
if ( cv & & cv - > omrView ( ) )
omrPanel - > setOmrView ( cv - > omrView ( ) ) ;
else
omrPanel - > setOmrView ( 0 ) ;
}
# endif
if ( ! cs ) {
setWindowTitle ( " MuseScore " ) ;
2014-05-19 13:57:37 +02:00
if ( _navigator & & _navigator - > widget ( ) ) {
navigator ( ) - > setScoreView ( view ) ;
2013-05-08 10:54:06 +02:00
navigator ( ) - > setScore ( 0 ) ;
2014-05-19 13:57:37 +02:00
}
2014-08-29 19:18:39 +02:00
if ( _inspector )
_inspector - > setElement ( 0 ) ;
2012-05-26 14:49:10 +02:00
viewModeCombo - > setEnabled ( false ) ;
2013-02-25 21:57:11 +01:00
if ( _textTools ) {
2013-02-15 22:39:56 +01:00
_textTools - > hide ( ) ;
2013-02-25 21:57:11 +01:00
if ( textPalette )
textPalette - > hide ( ) ;
}
2013-02-15 22:39:56 +01:00
if ( _pianoTools )
_pianoTools - > hide ( ) ;
if ( _drumTools )
_drumTools - > hide ( ) ;
2014-05-19 13:57:37 +02:00
changeState ( STATE_DISABLED ) ;
2012-05-26 14:49:10 +02:00
return ;
}
viewModeCombo - > setEnabled ( true ) ;
2014-05-30 10:15:36 +02:00
if ( cs - > layoutMode ( ) = = LayoutMode : : PAGE )
2012-05-26 14:49:10 +02:00
viewModeCombo - > setCurrentIndex ( 0 ) ;
else
viewModeCombo - > setCurrentIndex ( 1 ) ;
selectionChanged ( cs - > selection ( ) . state ( ) ) ;
2013-02-15 22:39:56 +01:00
_sstate = STATE_DISABLED ; // defeat optimization
2012-05-26 14:49:10 +02:00
changeState ( view - > mscoreState ( ) ) ;
view - > setFocus ( Qt : : OtherFocusReason ) ;
2015-01-29 00:19:44 +01:00
setFocusProxy ( view ) ;
2012-05-26 14:49:10 +02:00
getAction ( " file-save " ) - > setEnabled ( cs - > isSavable ( ) ) ;
2014-11-14 21:03:46 +01:00
getAction ( " file-part-export " ) - > setEnabled ( cs - > rootScore ( ) - > excerpts ( ) . size ( ) > 0 ) ;
2012-05-26 14:49:10 +02:00
getAction ( " show-invisible " ) - > setChecked ( cs - > showInvisible ( ) ) ;
getAction ( " show-unprintable " ) - > setChecked ( cs - > showUnprintable ( ) ) ;
getAction ( " show-frames " ) - > setChecked ( cs - > showFrames ( ) ) ;
getAction ( " show-pageborders " ) - > setChecked ( cs - > showPageborders ( ) ) ;
2015-03-04 12:59:21 +01:00
getAction ( " fotomode " ) - > setChecked ( cv - > fotoMode ( ) ) ;
2015-03-19 15:36:51 +01:00
getAction ( " join-measure " ) - > setEnabled ( cs - > rootScore ( ) - > excerpts ( ) . size ( ) = = 0 ) ;
getAction ( " split-measure " ) - > setEnabled ( cs - > rootScore ( ) - > excerpts ( ) . size ( ) = = 0 ) ;
2012-05-26 14:49:10 +02:00
updateUndoRedo ( ) ;
2014-06-30 15:15:03 +02:00
if ( view - > magIdx ( ) = = MagIdx : : MAG_FREE )
2012-05-26 14:49:10 +02:00
mag - > setMag ( view - > mag ( ) ) ;
else
2014-06-30 15:15:03 +02:00
mag - > setCurrentIndex ( int ( view - > magIdx ( ) ) ) ;
2012-05-26 14:49:10 +02:00
2014-12-21 14:40:09 +01:00
if ( cs - > parentScore ( ) )
setWindowTitle ( " MuseScore: " + cs - > parentScore ( ) - > name ( ) + " - " + cs - > name ( ) ) ;
else
setWindowTitle ( " MuseScore: " + cs - > name ( ) ) ;
2012-05-26 14:49:10 +02:00
QAction * a = getAction ( " concert-pitch " ) ;
2014-05-26 15:31:36 +02:00
a - > setChecked ( cs - > styleB ( StyleIdx : : concertPitch ) ) ;
2012-05-26 14:49:10 +02:00
setPos ( cs - > inputPos ( ) ) ;
2014-07-10 14:13:37 +02:00
//showMessage(cs->filePath(), 2000);
2012-05-26 14:49:10 +02:00
if ( _navigator & & _navigator - > widget ( ) )
2013-05-08 10:54:06 +02:00
navigator ( ) - > setScoreView ( view ) ;
2014-07-10 14:13:37 +02:00
ScoreAccessibility : : instance ( ) - > updateAccessibilityInfo ( ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-24 18:40:15 +02:00
//---------------------------------------------------------
// showMessage
//---------------------------------------------------------
void MuseScore : : showMessage ( const QString & s , int timeout )
{
_statusBar - > showMessage ( s , timeout ) ;
}
2013-05-17 20:11:36 +02:00
//---------------------------------------------------------
2013-07-22 01:33:56 +02:00
// midiPanel
2013-05-17 20:11:36 +02:00
//---------------------------------------------------------
2013-07-22 01:33:56 +02:00
void MuseScore : : midiPanelOnSwitchToFile ( const QString & file )
2013-05-17 20:11:36 +02:00
{
2013-07-22 01:33:56 +02:00
bool isMidiFile = ImportMidiPanel : : isMidiFile ( file ) ;
if ( isMidiFile ) {
2013-09-25 21:53:52 +02:00
importmidiPanel - > setMidiFile ( file ) ;
2014-07-29 21:58:36 +02:00
if ( importmidiPanel - > isPreferredVisible ( ) )
2013-09-25 21:53:52 +02:00
importmidiPanel - > setVisible ( true ) ;
2013-05-17 20:11:36 +02:00
}
2013-07-22 01:33:56 +02:00
else
2013-09-25 21:53:52 +02:00
importmidiPanel - > setVisible ( false ) ;
2014-07-29 21:58:36 +02:00
importmidiShowPanel - > setVisible ( ! importmidiPanel - > isPreferredVisible ( ) & & isMidiFile ) ;
2013-07-22 01:33:56 +02:00
}
2014-11-14 11:44:48 +01:00
//---------------------------------------------------------
// midiPanelOnCloseFile
//---------------------------------------------------------
2013-07-22 01:33:56 +02:00
void MuseScore : : midiPanelOnCloseFile ( const QString & file )
{
if ( ImportMidiPanel : : isMidiFile ( file ) )
2013-09-25 21:53:52 +02:00
importmidiPanel - > excludeMidiFile ( file ) ;
2013-07-22 01:33:56 +02:00
}
2014-11-14 11:44:48 +01:00
//---------------------------------------------------------
// allowShowMidiPanel
//---------------------------------------------------------
2013-07-22 01:33:56 +02:00
void MuseScore : : allowShowMidiPanel ( const QString & file )
{
if ( ImportMidiPanel : : isMidiFile ( file ) )
2014-07-29 21:58:36 +02:00
importmidiPanel - > setPreferredVisible ( true ) ;
2013-05-17 20:11:36 +02:00
}
2014-11-14 11:44:48 +01:00
//---------------------------------------------------------
// setMidiReopenInProgress
//---------------------------------------------------------
2014-07-29 21:58:36 +02:00
void MuseScore : : setMidiReopenInProgress ( const QString & file )
2013-07-23 13:05:19 +02:00
{
if ( ImportMidiPanel : : isMidiFile ( file ) )
2014-06-21 20:50:33 +02:00
importmidiPanel - > setReopenInProgress ( ) ;
2013-09-25 21:53:52 +02:00
}
2014-11-14 11:44:48 +01:00
//---------------------------------------------------------
// showMidiImportPanel
//---------------------------------------------------------
2013-09-25 21:53:52 +02:00
void MuseScore : : showMidiImportPanel ( )
{
2014-07-29 21:58:36 +02:00
importmidiPanel - > setPreferredVisible ( true ) ;
2014-11-01 10:52:35 +01:00
QString fileName = cs ? cs - > importedFilePath ( ) : " " ;
2013-09-25 21:53:52 +02:00
if ( ImportMidiPanel : : isMidiFile ( fileName ) )
importmidiPanel - > setVisible ( true ) ;
importmidiShowPanel - > hide ( ) ;
2013-07-23 13:05:19 +02:00
}
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
// dragEnterEvent
//---------------------------------------------------------
void MuseScore : : dragEnterEvent ( QDragEnterEvent * event )
{
const QMimeData * data = event - > mimeData ( ) ;
if ( data - > hasUrls ( ) ) {
QList < QUrl > ul = event - > mimeData ( ) - > urls ( ) ;
foreach ( const QUrl & u , ul ) {
if ( MScore : : debugMode )
2014-10-16 18:12:58 +02:00
qDebug ( " drag Url: %s scheme <%s> " , qPrintable ( u . toString ( ) ) , qPrintable ( u . scheme ( ) ) ) ;
2012-05-26 14:49:10 +02:00
if ( u . scheme ( ) = = " file " ) {
2014-10-16 18:12:58 +02:00
// QFileInfo fi(u.toLocalFile());
2012-05-26 14:49:10 +02:00
event - > acceptProposedAction ( ) ;
break ;
}
}
}
}
//---------------------------------------------------------
// dropEvent
//---------------------------------------------------------
void MuseScore : : dropEvent ( QDropEvent * event )
{
const QMimeData * data = event - > mimeData ( ) ;
if ( data - > hasUrls ( ) ) {
int view = - 1 ;
foreach ( const QUrl & u , event - > mimeData ( ) - > urls ( ) ) {
if ( u . scheme ( ) = = " file " ) {
2013-04-28 21:29:12 +02:00
QString file = u . toLocalFile ( ) ;
Score * score = readScore ( file ) ;
2012-09-29 16:46:45 +02:00
if ( score ) {
2012-05-26 14:49:10 +02:00
view = appendScore ( score ) ;
2014-12-08 14:41:36 +01:00
addRecentScore ( score ) ;
2012-07-04 19:37:53 +02:00
}
2012-05-26 14:49:10 +02:00
}
}
2014-10-16 18:12:58 +02:00
if ( view ! = - 1 ) {
2012-05-26 14:49:10 +02:00
setCurrentScoreView ( view ) ;
2012-07-04 19:37:53 +02:00
writeSessionFile ( false ) ;
}
2012-05-26 14:49:10 +02:00
event - > acceptProposedAction ( ) ;
}
}
//---------------------------------------------------------
// showPageSettings
//---------------------------------------------------------
void MuseScore : : showPageSettings ( )
{
if ( pageSettings = = 0 )
pageSettings = new PageSettings ( ) ;
pageSettings - > setScore ( cs ) ;
pageSettings - > show ( ) ;
pageSettings - > raise ( ) ;
}
//---------------------------------------------------------
// startDebugger
//---------------------------------------------------------
void MuseScore : : startDebugger ( )
{
if ( ! cs )
return ;
if ( debugger = = 0 )
debugger = new Debugger ( this ) ;
debugger - > updateList ( cs ) ;
debugger - > show ( ) ;
}
//---------------------------------------------------------
// showElementContext
//---------------------------------------------------------
void MuseScore : : showElementContext ( Element * el )
{
if ( el = = 0 )
return ;
startDebugger ( ) ;
debugger - > setElement ( el ) ;
}
//---------------------------------------------------------
// showPlayPanel
//---------------------------------------------------------
void MuseScore : : showPlayPanel ( bool visible )
{
2014-10-11 15:32:34 +02:00
if ( noSeq | | ! ( seq & & seq - > isRunning ( ) ) )
2012-05-26 14:49:10 +02:00
return ;
if ( playPanel = = 0 ) {
if ( ! visible )
return ;
playPanel = new PlayPanel ( this ) ;
2013-04-03 12:49:55 +02:00
connect ( playPanel , SIGNAL ( gainChange ( float ) ) , synti , SLOT ( setGain ( float ) ) ) ;
2012-05-26 14:49:10 +02:00
connect ( playPanel , SIGNAL ( relTempoChanged ( double ) ) , seq , SLOT ( setRelTempo ( double ) ) ) ;
connect ( playPanel , SIGNAL ( posChange ( int ) ) , seq , SLOT ( seek ( int ) ) ) ;
2013-05-12 23:13:28 +02:00
connect ( playPanel , SIGNAL ( closed ( bool ) ) , playId , SLOT ( setChecked ( bool ) ) ) ;
2013-04-03 12:49:55 +02:00
connect ( synti , SIGNAL ( gainChanged ( float ) ) , playPanel , SLOT ( setGain ( float ) ) ) ;
playPanel - > setGain ( synti - > gain ( ) ) ;
2012-05-26 14:49:10 +02:00
playPanel - > setScore ( cs ) ;
2015-01-07 15:33:24 +01:00
mscore - > stackUnder ( playPanel ) ;
2012-05-26 14:49:10 +02:00
}
playPanel - > setVisible ( visible ) ;
playId - > setChecked ( visible ) ;
}
//---------------------------------------------------------
// cmdAppendMeasures
//---------------------------------------------------------
void MuseScore : : cmdAppendMeasures ( )
{
if ( cs ) {
2013-04-28 21:29:12 +02:00
if ( measuresDialog = = 0 )
2012-05-26 14:49:10 +02:00
measuresDialog = new MeasuresDialog ;
measuresDialog - > show ( ) ;
}
}
//---------------------------------------------------------
// MeasuresDialog
//---------------------------------------------------------
MeasuresDialog : : MeasuresDialog ( QWidget * parent )
: QDialog ( parent )
2013-02-07 13:10:46 +01:00
{
2012-05-26 14:49:10 +02:00
setupUi ( this ) ;
2013-02-07 13:10:46 +01:00
setWindowFlags ( this - > windowFlags ( ) & ~ Qt : : WindowContextHelpButtonHint ) ;
2013-11-28 21:39:17 +01:00
measures - > selectAll ( ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
// accept
//---------------------------------------------------------
void MeasuresDialog : : accept ( )
2013-04-28 21:29:12 +02:00
{
int n = measures - > value ( ) ;
2012-05-26 14:49:10 +02:00
if ( mscore - > currentScore ( ) )
2014-06-24 18:36:02 +02:00
mscore - > currentScoreView ( ) - > cmdAppendMeasures ( n , Element : : Type : : MEASURE ) ;
2012-05-26 14:49:10 +02:00
done ( 1 ) ;
2013-04-28 21:29:12 +02:00
}
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
// midiinToggled
//---------------------------------------------------------
void MuseScore : : midiinToggled ( bool val )
{
_midiinEnabled = val ;
}
//---------------------------------------------------------
// midiinEnabled
//---------------------------------------------------------
bool MuseScore : : midiinEnabled ( ) const
{
return preferences . enableMidiInput & & _midiinEnabled ;
}
//---------------------------------------------------------
// processMidiRemote
// return if midi remote command detected
//---------------------------------------------------------
bool MuseScore : : processMidiRemote ( MidiRemoteType type , int data )
{
if ( ! preferences . useMidiRemote )
return false ;
for ( int i = 0 ; i < MIDI_REMOTES ; + + i ) {
if ( preferences . midiRemote [ i ] . type = = type & & preferences . midiRemote [ i ] . data = = data ) {
if ( cv = = 0 )
return false ;
QAction * a = 0 ;
switch ( i ) {
case RMIDI_REWIND : a = getAction ( " rewind " ) ; break ;
case RMIDI_TOGGLE_PLAY : a = getAction ( " play " ) ; break ;
case RMIDI_PLAY :
a = getAction ( " play " ) ;
if ( a - > isChecked ( ) )
return true ;
break ;
case RMIDI_STOP :
a = getAction ( " play " ) ;
if ( ! a - > isChecked ( ) )
return true ;
break ;
case RMIDI_NOTE1 : a = getAction ( " pad-note-1 " ) ; break ;
case RMIDI_NOTE2 : a = getAction ( " pad-note-2 " ) ; break ;
case RMIDI_NOTE4 : a = getAction ( " pad-note-4 " ) ; break ;
case RMIDI_NOTE8 : a = getAction ( " pad-note-8 " ) ; break ;
case RMIDI_NOTE16 : a = getAction ( " pad-note-16 " ) ; break ;
case RMIDI_NOTE32 : a = getAction ( " pad-note-32 " ) ; break ;
case RMIDI_NOTE64 : a = getAction ( " pad-note-64 " ) ; break ;
case RMIDI_REST : a = getAction ( " rest " ) ; break ;
2014-12-08 15:14:29 +01:00
case RMIDI_DOT : a = getAction ( " pad-dot " ) ; break ;
case RMIDI_DOTDOT : a = getAction ( " pad-dotdot " ) ; break ;
2012-05-26 14:49:10 +02:00
case RMIDI_TIE : a = getAction ( " tie " ) ; break ;
2014-12-15 13:25:43 +01:00
case RMIDI_UNDO : a = getAction ( " undo " ) ; break ;
2012-05-26 14:49:10 +02:00
case RMIDI_NOTE_EDIT_MODE : a = getAction ( " note-input " ) ; break ;
}
if ( a )
a - > trigger ( ) ;
return true ;
}
}
return false ;
}
//---------------------------------------------------------
// midiNoteReceived
//---------------------------------------------------------
void MuseScore : : midiNoteReceived ( int channel , int pitch , int velo )
{
static const int THRESHOLD = 3 ; // iterations required before consecutive drum notes
// are not considered part of a chord
static int active = 0 ;
static int iter = 0 ;
if ( ! midiinEnabled ( ) )
return ;
// qDebug("midiNoteReceived %d %d %d", channel, pitch, velo);
if ( _midiRecordId ! = - 1 ) {
preferences . midiRemote [ _midiRecordId ] . type = MIDI_REMOTE_TYPE_NOTEON ;
preferences . midiRemote [ _midiRecordId ] . data = pitch ;
_midiRecordId = - 1 ;
if ( preferenceDialog )
preferenceDialog - > updateRemote ( ) ;
return ;
}
2012-10-29 16:37:24 +01:00
2012-10-10 16:50:52 +02:00
if ( velo & & processMidiRemote ( MIDI_REMOTE_TYPE_NOTEON , pitch ) ) {
2012-05-26 14:49:10 +02:00
active = 0 ;
return ;
}
2012-10-29 16:37:24 +01:00
2012-05-26 14:49:10 +02:00
QWidget * w = QApplication : : activeModalWidget ( ) ;
if ( ! cv | | w ) {
2014-12-15 13:25:43 +01:00
active = 1 ;
2012-05-26 14:49:10 +02:00
return ;
}
if ( velo ) {
/*
* Since some drum modules do not overlap note on / off messages
* we need to take a bit of a different tactic to allow chords
* to be entered .
*
* Rather than decrement active for drums ( midi on ch10 ) ,
* we ' ll just assume that if read ( ) has been called a couple
* times in a row without a drum note , that this note is not
* part of a cord .
*/
if ( channel = = 0x09 ) {
if ( iter > = THRESHOLD )
active = 0 ;
iter = 0 ;
}
// qDebug(" midiNoteReceived %d active %d", pitch, active);
2015-04-20 00:24:35 +02:00
cv - > midiNoteReceived ( pitch , active > 0 , velo ) ;
2012-05-26 14:49:10 +02:00
+ + active ;
}
else {
2014-12-17 14:17:09 +01:00
/*
2014-12-15 13:25:43 +01:00
* Since a note may be assigned to a midi_remote , don ' t decrease active below zero
* on noteoff .
*/
if ( ( channel ! = 0x09 ) & & ( active > 0 ) )
2012-05-26 14:49:10 +02:00
- - active ;
2015-04-20 00:24:35 +02:00
cv - > midiNoteReceived ( pitch , false , velo ) ;
2012-05-26 14:49:10 +02:00
}
}
//---------------------------------------------------------
// midiCtrlReceived
//---------------------------------------------------------
2014-12-15 13:24:54 +01:00
void MuseScore : : midiCtrlReceived ( int controller , int value )
2012-05-26 14:49:10 +02:00
{
if ( ! midiinEnabled ( ) )
return ;
if ( _midiRecordId ! = - 1 ) {
preferences . midiRemote [ _midiRecordId ] . type = MIDI_REMOTE_TYPE_CTRL ;
preferences . midiRemote [ _midiRecordId ] . data = controller ;
_midiRecordId = - 1 ;
if ( preferenceDialog )
preferenceDialog - > updateRemote ( ) ;
return ;
}
2014-12-15 13:24:54 +01:00
// when value is 0 (usually when a key is released ) nothing happens
if ( value & & processMidiRemote ( MIDI_REMOTE_TYPE_CTRL , controller ) )
2012-05-26 14:49:10 +02:00
return ;
}
//---------------------------------------------------------
// removeTab
//---------------------------------------------------------
void MuseScore : : removeTab ( )
{
int n = scoreList . indexOf ( cs ) ;
if ( n = = - 1 ) {
qDebug ( " removeTab: %p not found " , cs ) ;
return ;
}
removeTab ( n ) ;
}
void MuseScore : : removeTab ( int i )
{
Score * score = scoreList . value ( i ) ;
2012-09-12 16:19:03 +02:00
2012-05-26 14:49:10 +02:00
if ( score = = 0 )
return ;
2012-09-03 14:43:36 +02:00
QString tmpName = score - > tmpName ( ) ;
2012-05-26 14:49:10 +02:00
if ( checkDirty ( score ) )
return ;
2013-05-15 13:34:50 +02:00
if ( seq & & seq - > score ( ) = = score ) {
2013-02-12 11:48:50 +01:00
seq - > stopWait ( ) ;
2012-05-26 14:49:10 +02:00
seq - > setScoreView ( 0 ) ;
2013-02-07 00:19:53 +01:00
}
2012-05-26 14:49:10 +02:00
int idx1 = tab1 - > currentIndex ( ) ;
bool firstTab = tab1 - > view ( idx1 ) = = cv ;
2014-11-01 10:52:35 +01:00
midiPanelOnCloseFile ( score - > importedFilePath ( ) ) ;
2012-05-26 14:49:10 +02:00
scoreList . removeAt ( i ) ;
2013-07-22 01:33:56 +02:00
2012-05-26 14:49:10 +02:00
tab1 - > blockSignals ( true ) ;
tab1 - > removeTab ( i ) ;
tab1 - > blockSignals ( false ) ;
if ( tab2 ) {
tab2 - > blockSignals ( true ) ;
tab2 - > removeTab ( i ) ;
tab2 - > blockSignals ( false ) ;
}
cs = 0 ;
cv = 0 ;
int n = scoreList . size ( ) ;
2013-02-15 22:39:56 +01:00
if ( n = = 0 )
setCurrentScoreView ( nullptr ) ;
else
2012-05-26 14:49:10 +02:00
setCurrentScoreView ( ( firstTab ? tab1 : tab2 ) - > view ( ) ) ;
writeSessionFile ( false ) ;
2012-09-03 14:43:36 +02:00
if ( ! tmpName . isEmpty ( ) ) {
QFile f ( tmpName ) ;
2012-05-26 14:49:10 +02:00
f . remove ( ) ;
}
delete score ;
2014-05-19 13:57:37 +02:00
// Shouldn't be necessary... but fix #21841
update ( ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2014-08-07 10:28:13 +02:00
// loadTranslation
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2014-08-08 20:54:00 +02:00
2014-08-07 10:28:13 +02:00
void loadTranslation ( QString filename , QString localeName )
2012-05-26 14:49:10 +02:00
{
static QList < QTranslator * > translatorList ;
QTranslator * translator = new QTranslator ;
2014-08-07 10:28:13 +02:00
QString userPrefix = dataPath + " /locale/ " + filename + " _ " ;
QString defaultPrefix = mscoreGlobalShare + " locale/ " + filename + " _ " ;
2013-11-14 20:06:58 +01:00
QString userlp = userPrefix + localeName ;
2014-08-08 20:54:00 +02:00
2013-11-14 20:06:58 +01:00
QString defaultlp = defaultPrefix + localeName ;
2013-10-29 18:14:39 +01:00
QString lp = defaultlp ;
2014-08-08 20:54:00 +02:00
2013-10-29 18:14:39 +01:00
QFileInfo userFi ( userlp + " .qm " ) ;
QFileInfo defaultFi ( defaultlp + " .qm " ) ;
2014-08-08 20:54:00 +02:00
2013-11-14 20:06:58 +01:00
if ( ! defaultFi . exists ( ) ) { // try with a shorter locale name
2014-08-07 10:28:13 +02:00
QString shortLocaleName = localeName . left ( localeName . lastIndexOf ( " _ " ) ) ;
2013-11-14 20:06:58 +01:00
QString shortDefaultlp = defaultPrefix + shortLocaleName ;
QFileInfo shortDefaultFi ( shortDefaultlp + " .qm " ) ;
if ( shortDefaultFi . exists ( ) ) {
userlp = userPrefix + shortLocaleName ;
userFi = QFileInfo ( userlp + " .qm " ) ;
defaultFi = shortDefaultFi ;
defaultlp = shortDefaultlp ;
2014-08-07 10:28:13 +02:00
}
2014-09-06 07:52:20 +02:00
}
2014-08-08 20:54:00 +02:00
2014-08-07 10:28:13 +02:00
// qDebug() << userFi.exists();
// qDebug() << userFi.lastModified() << defaultFi.lastModified();
2014-08-28 14:50:17 +02:00
if ( userFi . exists ( ) ) {
if ( userFi . lastModified ( ) > defaultFi . lastModified ( ) )
lp = userlp ;
else
QFile : : remove ( userlp + " .qm " ) ;
}
2014-08-08 20:54:00 +02:00
2013-09-30 18:38:05 +02:00
if ( MScore : : debugMode ) qDebug ( " load translator <%s> " , qPrintable ( lp ) ) ;
bool success = translator - > load ( lp ) ;
2013-10-29 18:14:39 +01:00
if ( ! success & & MScore : : debugMode ) {
qDebug ( " load translator <%s> failed " , qPrintable ( lp ) ) ;
2014-08-07 10:28:13 +02:00
}
2013-09-30 18:38:05 +02:00
if ( success ) {
2014-08-07 10:28:13 +02:00
qApp - > installTranslator ( translator ) ;
translatorList . append ( translator ) ;
}
}
2014-08-08 20:54:00 +02:00
2014-08-07 10:28:13 +02:00
//---------------------------------------------------------
// setLocale
//---------------------------------------------------------
void setMscoreLocale ( QString localeName )
{
static QList < QTranslator * > translatorList ;
foreach ( QTranslator * t , translatorList ) {
qApp - > removeTranslator ( t ) ;
delete t ;
}
translatorList . clear ( ) ;
if ( MScore : : debugMode )
qDebug ( " configured localeName <%s> " , qPrintable ( localeName ) ) ;
if ( localeName . toLower ( ) = = " system " ) {
localeName = QLocale : : system ( ) . name ( ) ;
if ( MScore : : debugMode )
qDebug ( " real localeName <%s> " , qPrintable ( localeName ) ) ;
}
2012-05-26 14:49:10 +02:00
2014-08-07 10:28:13 +02:00
// find the most recent translation file
// try to replicate QTranslator.load algorithm in our particular case
loadTranslation ( " mscore " , localeName ) ;
loadTranslation ( " instruments " , localeName ) ;
2014-08-08 20:54:00 +02:00
2012-05-26 14:49:10 +02:00
QString resourceDir ;
2013-05-16 16:12:22 +02:00
# if defined(Q_OS_MAC) || defined(Q_OS_WIN)
2012-05-26 14:49:10 +02:00
resourceDir = mscoreGlobalShare + " locale/ " ;
# else
resourceDir = QLibraryInfo : : location ( QLibraryInfo : : TranslationsPath ) ;
# endif
QTranslator * qtTranslator = new QTranslator ;
if ( MScore : : debugMode )
qDebug ( " load translator <qt_%s> from <%s> " ,
qPrintable ( localeName ) , qPrintable ( resourceDir ) ) ;
if ( ! qtTranslator - > load ( QLatin1String ( " qt_ " ) + localeName , resourceDir ) & & MScore : : debugMode )
qDebug ( " load translator <qt_%s> failed " , qPrintable ( localeName ) ) ;
else {
qApp - > installTranslator ( qtTranslator ) ;
translatorList . append ( qtTranslator ) ;
}
2013-10-08 19:25:04 +02:00
QLocale : : setDefault ( QLocale ( localeName ) ) ;
2012-05-26 14:49:10 +02:00
// initShortcuts();
}
//---------------------------------------------------------
// loadScores
// load scores for a new session
//---------------------------------------------------------
static void loadScores ( const QStringList & argv )
{
int currentScoreView = 0 ;
if ( argv . isEmpty ( ) ) {
if ( startWithNewScore )
mscore - > newFile ( ) ;
else {
switch ( preferences . sessionStart ) {
2014-07-01 14:44:45 +02:00
case SessionStart : : LAST :
2012-05-26 14:49:10 +02:00
{
QSettings settings ;
int n = settings . value ( " scores " , 0 ) . toInt ( ) ;
int c = settings . value ( " currentScore " , 0 ) . toInt ( ) ;
for ( int i = 0 ; i < n ; + + i ) {
QString s = settings . value ( QString ( " score-%1 " ) . arg ( i ) , " " ) . toString ( ) ;
2012-09-29 16:46:45 +02:00
Score * score = mscore - > readScore ( s ) ;
if ( score ) {
2012-05-26 14:49:10 +02:00
int view = mscore - > appendScore ( score ) ;
if ( i = = c )
currentScoreView = view ;
}
}
}
break ;
2014-07-01 14:44:45 +02:00
case SessionStart : : EMPTY :
2012-05-26 14:49:10 +02:00
break ;
2014-07-01 14:44:45 +02:00
case SessionStart : : NEW :
2012-05-26 14:49:10 +02:00
mscore - > newFile ( ) ;
break ;
2014-07-01 14:44:45 +02:00
case SessionStart : : SCORE :
2012-05-26 14:49:10 +02:00
{
2012-09-29 16:46:45 +02:00
Score * score = mscore - > readScore ( preferences . startScore ) ;
2015-03-08 03:26:44 +01:00
if ( preferences . startScore . startsWith ( " :/ " ) & & score ) {
score - > setPageFormat ( * MScore : : defaultStyle ( ) - > pageFormat ( ) ) ;
2015-06-22 22:04:23 +02:00
score - > doLayout ( ) ;
2014-08-19 17:44:02 +02:00
score - > setCreated ( true ) ;
2015-03-08 03:26:44 +01:00
}
2014-08-19 17:44:02 +02:00
if ( score = = 0 ) {
2014-11-14 12:29:17 +01:00
score = mscore - > readScore ( " :/data/My_First_Score.mscz " ) ;
2015-06-22 22:04:23 +02:00
if ( score ) {
score - > setPageFormat ( * MScore : : defaultStyle ( ) - > pageFormat ( ) ) ;
score - > doLayout ( ) ;
score - > setCreated ( true ) ;
}
2014-08-19 17:44:02 +02:00
}
2012-09-29 16:46:45 +02:00
if ( score )
2012-05-26 14:49:10 +02:00
currentScoreView = mscore - > appendScore ( score ) ;
}
break ;
}
}
}
else {
foreach ( const QString & name , argv ) {
if ( name . isEmpty ( ) )
continue ;
2012-09-29 16:46:45 +02:00
Score * score = mscore - > readScore ( name ) ;
if ( score ) {
2012-05-26 14:49:10 +02:00
mscore - > appendScore ( score ) ;
2014-11-20 12:49:51 +01:00
scoresOnCommandline = true ;
2014-02-28 11:14:43 +01:00
if ( ! MScore : : noGui ) {
2014-12-08 14:41:36 +01:00
mscore - > addRecentScore ( score ) ;
2012-11-25 19:15:35 +01:00
mscore - > writeSessionFile ( false ) ;
}
2012-05-26 14:49:10 +02:00
}
}
}
if ( mscore - > noScore ( ) )
currentScoreView = - 1 ;
mscore - > setCurrentView ( 0 , currentScoreView ) ;
mscore - > setCurrentView ( 1 , currentScoreView ) ;
}
//---------------------------------------------------------
// processNonGui
//---------------------------------------------------------
static bool processNonGui ( )
{
if ( pluginMode ) {
QString pn ( pluginName ) ;
bool res = false ;
if ( mscore - > loadPlugin ( pn ) ) {
Score * cs = mscore - > currentScore ( ) ;
2015-07-08 10:35:08 +02:00
LayoutMode layoutMode = cs - > layoutMode ( ) ;
2012-05-26 14:49:10 +02:00
if ( ! styleFile . isEmpty ( ) ) {
QFile f ( styleFile ) ;
if ( f . open ( QIODevice : : ReadOnly ) )
cs - > style ( ) - > load ( & f ) ;
}
cs - > startCmd ( ) ;
cs - > setLayoutAll ( true ) ;
cs - > endCmd ( ) ;
2015-07-08 10:35:08 +02:00
if ( layoutMode ! = LayoutMode : : PAGE ) {
cs - > startCmd ( ) ;
cs - > undo ( new ChangeLayoutMode ( cs , LayoutMode : : PAGE ) ) ;
cs - > doLayout ( ) ;
}
2012-05-26 14:49:10 +02:00
mscore - > pluginTriggered ( 0 ) ;
2015-07-08 10:35:08 +02:00
if ( layoutMode ! = cs - > layoutMode ( ) )
cs - > endCmd ( true ) ; // rollback
2012-05-26 14:49:10 +02:00
res = true ;
}
if ( ! converterMode )
return res ;
}
2015-07-08 08:09:14 +02:00
bool rv = true ;
2012-05-26 14:49:10 +02:00
if ( converterMode ) {
QString fn ( outFileName ) ;
Score * cs = mscore - > currentScore ( ) ;
2015-01-22 08:18:56 +01:00
if ( ! cs )
return false ;
2015-07-08 08:09:14 +02:00
LayoutMode layoutMode = cs - > layoutMode ( ) ;
2012-05-26 14:49:10 +02:00
if ( ! styleFile . isEmpty ( ) ) {
QFile f ( styleFile ) ;
if ( f . open ( QIODevice : : ReadOnly ) ) {
cs - > style ( ) - > load ( & f ) ;
}
}
if ( fn . endsWith ( " .mscx " ) ) {
QFileInfo fi ( fn ) ;
try {
cs - > saveFile ( fi ) ;
}
catch ( QString ) {
return false ;
}
return true ;
}
2015-07-08 08:09:14 +02:00
else if ( fn . endsWith ( " .mscz " ) ) {
2012-05-26 14:49:10 +02:00
QFileInfo fi ( fn ) ;
try {
cs - > saveCompressedFile ( fi , false ) ;
}
catch ( QString ) {
return false ;
}
return true ;
}
2015-07-08 08:09:14 +02:00
else if ( fn . endsWith ( " .xml " ) ) {
if ( layoutMode ! = LayoutMode : : PAGE ) {
cs - > startCmd ( ) ;
cs - > undo ( new ChangeLayoutMode ( cs , LayoutMode : : PAGE ) ) ;
cs - > doLayout ( ) ;
}
rv = saveXml ( cs , fn ) ;
}
else if ( fn . endsWith ( " .mxl " ) ) {
if ( layoutMode ! = LayoutMode : : PAGE ) {
cs - > startCmd ( ) ;
cs - > undo ( new ChangeLayoutMode ( cs , LayoutMode : : PAGE ) ) ;
cs - > doLayout ( ) ;
}
rv = saveMxl ( cs , fn ) ;
}
else if ( fn . endsWith ( " .mid " ) )
2012-06-11 17:48:20 +02:00
return mscore - > saveMidi ( cs , fn ) ;
2015-07-08 08:09:14 +02:00
else if ( fn . endsWith ( " .pdf " ) ) {
if ( ! exportScoreParts ) {
if ( layoutMode ! = LayoutMode : : PAGE ) {
cs - > startCmd ( ) ;
cs - > undo ( new ChangeLayoutMode ( cs , LayoutMode : : PAGE ) ) ;
cs - > doLayout ( ) ;
}
rv = mscore - > savePdf ( fn ) ;
}
2015-05-06 09:08:20 +02:00
else {
if ( cs - > excerpts ( ) . size ( ) = = 0 ) {
QList < Excerpt * > exceprts = Excerpt : : createAllExcerpt ( cs ) ;
2015-07-08 15:56:05 +02:00
2015-05-06 09:08:20 +02:00
foreach ( Excerpt * e , exceprts ) {
Score * nscore = new Score ( e - > oscore ( ) ) ;
e - > setPartScore ( nscore ) ;
nscore - > setName ( e - > title ( ) ) ; // needed before AddExcerpt
nscore - > style ( ) - > set ( StyleIdx : : createMultiMeasureRests , true ) ;
cs - > startCmd ( ) ;
cs - > undo ( new AddExcerpt ( nscore ) ) ;
createExcerpt ( e ) ;
cs - > endCmd ( ) ;
}
}
QList < Score * > scores ;
scores . append ( cs ) ;
foreach ( Excerpt * e , cs - > excerpts ( ) )
scores . append ( e - > partScore ( ) ) ;
return mscore - > savePdf ( scores , fn ) ;
}
}
2015-07-08 08:09:14 +02:00
else if ( fn . endsWith ( " .png " ) ) {
if ( layoutMode ! = LayoutMode : : PAGE ) {
cs - > startCmd ( ) ;
cs - > undo ( new ChangeLayoutMode ( cs , LayoutMode : : PAGE ) ) ;
cs - > doLayout ( ) ;
}
rv = mscore - > savePng ( cs , fn ) ;
}
else if ( fn . endsWith ( " .svg " ) ) {
if ( layoutMode ! = LayoutMode : : PAGE ) {
cs - > startCmd ( ) ;
cs - > undo ( new ChangeLayoutMode ( cs , LayoutMode : : PAGE ) ) ;
cs - > doLayout ( ) ;
}
rv = mscore - > saveSvg ( cs , fn ) ;
}
2012-05-26 14:49:10 +02:00
# ifdef HAS_AUDIOFILE
2015-07-08 08:09:14 +02:00
else if ( fn . endsWith ( " .wav " ) | | fn . endsWith ( " .ogg " ) | | fn . endsWith ( " .flac " ) )
2014-11-14 11:44:48 +01:00
return mscore - > saveAudio ( cs , fn ) ;
2012-05-26 14:49:10 +02:00
# endif
2015-06-01 18:09:55 +02:00
# ifdef USE_LAME
2015-07-08 08:09:14 +02:00
else if ( fn . endsWith ( " .mp3 " ) )
2012-05-26 14:49:10 +02:00
return mscore - > saveMp3 ( cs , fn ) ;
2015-06-01 18:09:55 +02:00
# endif
2015-07-08 08:09:14 +02:00
else if ( fn . endsWith ( " .spos " ) ) {
if ( layoutMode ! = LayoutMode : : PAGE ) {
cs - > startCmd ( ) ;
cs - > undo ( new ChangeLayoutMode ( cs , LayoutMode : : PAGE ) ) ;
cs - > doLayout ( ) ;
}
rv = savePositions ( cs , fn , true ) ;
}
else if ( fn . endsWith ( " .mpos " ) ) {
if ( layoutMode ! = LayoutMode : : PAGE ) {
cs - > startCmd ( ) ;
cs - > undo ( new ChangeLayoutMode ( cs , LayoutMode : : PAGE ) ) ;
cs - > doLayout ( ) ;
}
rv = savePositions ( cs , fn , false ) ;
}
else if ( fn . endsWith ( " .mlog " ) )
2015-02-24 16:54:47 +01:00
return cs - > sanityCheck ( fn ) ;
2012-05-26 14:49:10 +02:00
else {
qDebug ( " dont know how to convert to %s " , qPrintable ( outFileName ) ) ;
return false ;
}
2015-07-08 08:09:14 +02:00
if ( layoutMode ! = cs - > layoutMode ( ) )
cs - > endCmd ( true ) ; // rollback
2012-05-26 14:49:10 +02:00
}
2015-07-08 08:09:14 +02:00
return rv ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
// StartDialog
//---------------------------------------------------------
StartDialog : : StartDialog ( QWidget * parent )
: QDialog ( parent )
{
2013-02-07 13:10:46 +01:00
setupUi ( this ) ;
setWindowFlags ( this - > windowFlags ( ) & ~ Qt : : WindowContextHelpButtonHint ) ;
2012-05-26 14:49:10 +02:00
setWindowTitle ( tr ( " MuseScore Startup Dialog " ) ) ;
connect ( createScore , SIGNAL ( clicked ( ) ) , SLOT ( createScoreClicked ( ) ) ) ;
connect ( loadScore , SIGNAL ( clicked ( ) ) , SLOT ( loadScoreClicked ( ) ) ) ;
}
//---------------------------------------------------------
// createScoreClicked
//---------------------------------------------------------
void StartDialog : : createScoreClicked ( )
{
2012-07-03 15:32:16 +02:00
done ( 1 ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
// loadScoreClicked
//---------------------------------------------------------
void StartDialog : : loadScoreClicked ( )
{
2012-07-03 15:32:16 +02:00
done ( 2 ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
// Message handler
//---------------------------------------------------------
2013-05-16 16:12:22 +02:00
# if defined(QT_DEBUG) && defined(Q_OS_WIN)
2014-03-04 13:06:23 +01:00
static void mscoreMessageHandler ( QtMsgType type , const QMessageLogContext & context , const QString & msg )
2012-05-26 14:49:10 +02:00
{
2014-03-04 13:06:23 +01:00
QTextStream cerr ( stderr ) ;
QByteArray localMsg = msg . toLocal8Bit ( ) ;
2014-02-28 14:25:47 +01:00
2012-05-26 14:49:10 +02:00
switch ( type ) {
case QtDebugMsg :
2014-03-04 13:06:23 +01:00
cerr < < " Debug: " < < localMsg . constData ( ) < < " ( " < < context . file < < " : " < < context . line < < " , " < < context . function < < " ) " < < endl ;
2012-05-26 14:49:10 +02:00
break ;
case QtWarningMsg :
2014-03-04 13:06:23 +01:00
cerr < < " Warning: " < < localMsg . constData ( ) < < " ( " < < context . file < < " : " < < context . line < < " , " < < context . function < < " ) " < < endl ;
2012-05-26 14:49:10 +02:00
break ;
case QtCriticalMsg :
2014-03-04 13:06:23 +01:00
cerr < < " Critical: " < < localMsg . constData ( ) < < " ( " < < context . file < < " : " < < context . line < < " , " < < context . function < < " ) " < < endl ;
2012-05-26 14:49:10 +02:00
break ;
2014-03-04 13:06:23 +01:00
case QtFatalMsg : // set your breakpoint here, if you want to catch the abort
cerr < < " Fatal: " < < localMsg . constData ( ) < < " ( " < < context . file < < " : " < < context . line < < " , " < < context . function < < " ) " < < endl ;
2012-05-26 14:49:10 +02:00
abort ( ) ;
}
}
# endif
2013-04-02 20:46:07 +02:00
//---------------------------------------------------------
// synthesizerFactory
// create and initialize the master synthesizer
//---------------------------------------------------------
MasterSynthesizer * synthesizerFactory ( )
{
MasterSynthesizer * ms = new MasterSynthesizer ( ) ;
2013-04-03 12:13:23 +02:00
FluidS : : Fluid * fluid = new FluidS : : Fluid ( ) ;
ms - > registerSynthesizer ( fluid ) ;
2013-04-03 20:20:36 +02:00
# ifdef AEOLUS
2013-05-13 18:49:17 +02:00
ms - > registerSynthesizer ( : : createAeolus ( ) ) ;
2013-04-03 20:20:36 +02:00
# endif
# ifdef ZERBERUS
2013-04-29 15:31:22 +02:00
ms - > registerSynthesizer ( createZerberus ( ) ) ;
2013-04-03 20:20:36 +02:00
# endif
2013-04-02 20:46:07 +02:00
ms - > registerEffect ( 0 , new NoEffect ) ;
ms - > registerEffect ( 0 , new ZitaReverb ) ;
2013-05-13 18:49:17 +02:00
// ms->registerEffect(0, new Freeverb);
2013-04-02 20:46:07 +02:00
ms - > registerEffect ( 1 , new NoEffect ) ;
ms - > registerEffect ( 1 , new ZitaReverb ) ;
2013-05-13 18:49:17 +02:00
// ms->registerEffect(1, new Freeverb);
2013-04-03 18:11:38 +02:00
ms - > setEffect ( 0 , 1 ) ;
2013-04-02 20:46:07 +02:00
ms - > setEffect ( 1 , 0 ) ;
return ms ;
}
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// unstable
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
bool MuseScore : : unstable ( )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
# ifdef MSCORE_UNSTABLE
return true ;
2012-05-26 14:49:10 +02:00
# else
2013-05-13 18:49:17 +02:00
return false ;
2012-05-26 14:49:10 +02:00
# endif
2013-05-13 18:49:17 +02:00
}
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
// MuseScoreApplication::event (mac only)
//---------------------------------------------------------
2013-04-17 14:00:26 +02:00
2015-02-19 19:55:17 +01:00
bool MuseScoreApplication : : event ( QEvent * event )
2013-05-13 18:49:17 +02:00
{
switch ( event - > type ( ) ) {
case QEvent : : FileOpen :
2013-06-24 22:07:44 +02:00
// store names of files requested to be loaded by OS X to be handled later
// this event is generated when a file is dragged onto the MuseScore icon
// in the dock and MuseScore is not running yet
2013-05-13 18:49:17 +02:00
paths . append ( static_cast < QFileOpenEvent * > ( event ) - > file ( ) ) ;
return true ;
default :
2014-07-10 14:13:37 +02:00
return QtSingleApplication : : event ( event ) ;
2013-05-08 15:27:43 +02:00
}
2013-05-13 18:49:17 +02:00
}
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
2015-01-29 00:19:44 +01:00
// eventFilter
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
bool MuseScore : : eventFilter ( QObject * obj , QEvent * event )
{
switch ( event - > type ( ) ) {
2015-01-29 00:19:44 +01:00
# ifdef Q_OS_MAC
2013-05-13 18:49:17 +02:00
case QEvent : : FileOpen :
2013-06-24 22:07:44 +02:00
// open files requested to be loaded by OS X
// this event is generated when a file is dragged onto the MuseScore icon
// in the dock when MuseScore is already running
2015-02-23 17:34:40 +01:00
scoresOnCommandline = true ;
2013-05-13 18:49:17 +02:00
handleMessage ( static_cast < QFileOpenEvent * > ( event ) - > file ( ) ) ;
return true ;
2015-01-29 00:19:44 +01:00
# endif
2015-02-19 19:55:17 +01:00
case QEvent : : MouseMove : {
QMouseEvent * me = static_cast < QMouseEvent * > ( event ) ;
globalX = me - > globalX ( ) ;
globalY = me - > globalY ( ) ;
return QMainWindow : : eventFilter ( obj , event ) ;
}
2015-02-20 19:34:40 +01:00
case QEvent : : StatusTip :
return true ; // prevent updates to the status bar
2015-01-29 00:19:44 +01:00
case QEvent : : KeyPress :
{
QKeyEvent * e = static_cast < QKeyEvent * > ( event ) ;
if ( obj - > isWidgetType ( ) & & e - > key ( ) = = Qt : : Key_Escape & & e - > modifiers ( ) = = Qt : : NoModifier ) {
if ( isActiveWindow ( ) ) {
2015-02-16 22:43:17 +01:00
obj - > event ( e ) ;
2015-01-29 00:19:44 +01:00
if ( currentScoreView ( ) )
currentScoreView ( ) - > setFocus ( ) ;
else
mscore - > setFocus ( ) ;
return true ;
}
QWidget * w = static_cast < QWidget * > ( obj ) ;
if ( getPaletteBox ( ) - > isAncestorOf ( w ) | |
2015-02-03 01:55:16 +01:00
inspector ( ) - > isAncestorOf ( w ) | |
( selectionWindow & & selectionWindow - > isAncestorOf ( w ) ) ) {
2015-01-29 00:19:44 +01:00
activateWindow ( ) ;
if ( currentScoreView ( ) )
currentScoreView ( ) - > setFocus ( ) ;
else
mscore - > setFocus ( ) ;
return true ;
}
}
2015-02-20 19:34:40 +01:00
break ;
2015-01-29 00:19:44 +01:00
}
2013-05-13 18:49:17 +02:00
default :
2014-07-10 14:13:37 +02:00
return QMainWindow : : eventFilter ( obj , event ) ;
2012-05-26 14:49:10 +02:00
}
2015-02-20 19:34:40 +01:00
return QMainWindow : : eventFilter ( obj , event ) ;
2013-05-13 18:49:17 +02:00
}
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
// hasToCheckForUpdate
//---------------------------------------------------------
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
bool MuseScore : : hasToCheckForUpdate ( )
{
if ( ucheck )
return ucheck - > hasToCheck ( ) ;
else
return false ;
}
2013-03-01 17:14:21 +01:00
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
// checkForUpdate
//---------------------------------------------------------
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
void MuseScore : : checkForUpdate ( )
{
if ( ucheck )
2015-03-09 17:20:23 +01:00
ucheck - > check ( version ( ) , sender ( ) ! = 0 ) ;
2013-05-13 18:49:17 +02:00
}
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
// readLanguages
//---------------------------------------------------------
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
bool MuseScore : : readLanguages ( const QString & path )
{
2014-02-24 22:42:07 +01:00
//: The default language of the operating system. NOT a music system.
_languages . append ( LanguageItem ( " system " , tr ( " System " ) ) ) ;
2013-05-13 18:49:17 +02:00
QFile qf ( path ) ;
if ( qf . exists ( ) ) {
QDomDocument doc ;
int line , column ;
QString err ;
if ( ! doc . setContent ( & qf , false , & err , & line , & column ) ) {
QString error ;
2014-02-27 19:57:24 +01:00
error . sprintf ( qPrintable ( tr ( " Error reading language file %s at line %d column %d: %s \n " ) ) ,
2013-05-13 18:49:17 +02:00
qPrintable ( qf . fileName ( ) ) , line , column , qPrintable ( err ) ) ;
QMessageBox : : warning ( 0 ,
2014-02-27 19:57:24 +01:00
QWidget : : tr ( " MuseScore: Load Languages Failed: " ) ,
2013-05-13 18:49:17 +02:00
error ,
QString : : null , QWidget : : tr ( " Quit " ) , QString : : null , 0 , 1 ) ;
return false ;
}
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
for ( QDomElement e = doc . documentElement ( ) ; ! e . isNull ( ) ; e = e . nextSiblingElement ( ) ) {
if ( e . tagName ( ) = = " languages " ) {
for ( e = e . firstChildElement ( ) ; ! e . isNull ( ) ; e = e . nextSiblingElement ( ) ) {
if ( e . tagName ( ) = = " language " ) {
QString code = e . attribute ( QString ( " code " ) ) ;
QString name = e . attribute ( QString ( " name " ) ) ;
QString handbook = e . attribute ( QString ( " handbook " ) ) ;
_languages . append ( LanguageItem ( code , name , handbook ) ) ;
}
}
}
}
return true ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
return false ;
}
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
// clipboardChanged
//---------------------------------------------------------
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
void MuseScore : : clipboardChanged ( )
{
#if 0
const QMimeData * ms = QApplication : : clipboard ( ) - > mimeData ( ) ;
QStringList formats = ms - > formats ( ) ;
2012-06-11 14:38:33 +02:00
2013-05-13 18:49:17 +02:00
bool flag = ms - > hasFormat ( mimeSymbolFormat )
| | ms - > hasFormat ( mimeStaffListFormat )
| | ms - > hasFormat ( mimeSymbolListFormat )
| | ms - > hasText ( ) ;
// TODO: depends on selection state
# endif
2012-06-11 14:38:33 +02:00
2013-05-13 18:49:17 +02:00
bool flag = true ;
getAction ( " paste " ) - > setEnabled ( flag ) ;
}
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
// showModeText
//---------------------------------------------------------
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
void MuseScore : : showModeText ( const QString & s )
{
_modeText - > setText ( s ) ;
_modeText - > show ( ) ;
}
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
// changeState
//---------------------------------------------------------
2013-02-21 21:57:01 +01:00
2013-05-13 18:49:17 +02:00
void MuseScore : : changeState ( ScoreState val )
{
// printf("MuseScore::changeState: %s\n", stateName(val));
if ( MScore : : debugMode )
qDebug ( " MuseScore::changeState: %s " , stateName ( val ) ) ;
2013-02-21 21:57:01 +01:00
2013-05-13 18:49:17 +02:00
// if (_sstate == val)
// return;
2015-01-01 21:15:38 +01:00
// disallow change to edit modes if currently in play mode
if ( _sstate = = STATE_PLAY & & ( val = = STATE_EDIT | | val & STATE_ALLTEXTUAL_EDIT | | val & STATE_NOTE_ENTRY ) )
return ;
2013-05-13 18:49:17 +02:00
static const char * stdNames [ ] = {
" note-longa " , " note-breve " , " pad-note-1 " , " pad-note-2 " , " pad-note-4 " ,
2013-09-28 00:36:08 +02:00
" pad-note-8 " , " pad-note-16 " , " pad-note-32 " , " pad-note-64 " , " pad-note-128 " , " pad-rest " , " rest " } ;
2013-05-13 18:49:17 +02:00
static const char * tabNames [ ] = {
" note-longa-TAB " , " note-breve-TAB " , " pad-note-1-TAB " , " pad-note-2-TAB " , " pad-note-4-TAB " ,
2013-09-28 00:36:08 +02:00
" pad-note-8-TAB " , " pad-note-16-TAB " , " pad-note-32-TAB " , " pad-note-64-TAB " , " pad-note-128-TAB " , " pad-rest-TAB " , " rest-TAB " } ;
2013-05-13 18:49:17 +02:00
bool intoTAB = ( _sstate ! = STATE_NOTE_ENTRY_TAB ) & & ( val = = STATE_NOTE_ENTRY_TAB ) ;
bool fromTAB = ( _sstate = = STATE_NOTE_ENTRY_TAB ) & & ( val ! = STATE_NOTE_ENTRY_TAB ) ;
// if activating TAB note entry, swap "pad-note-...-TAB" shorctuts into "pad-note-..." actions
if ( intoTAB ) {
for ( unsigned i = 0 ; i < sizeof ( stdNames ) / sizeof ( char * ) ; + + i ) {
QAction * act = getAction ( stdNames [ i ] ) ;
2014-11-14 11:44:48 +01:00
const Shortcut * srt = Shortcut : : getShortcut ( tabNames [ i ] ) ;
2013-05-13 18:49:17 +02:00
act - > setShortcuts ( srt - > keys ( ) ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
}
// if de-ativating TAB note entry, restore shortcuts for "pad-note-..." actions
else if ( fromTAB ) {
for ( unsigned i = 0 ; i < sizeof ( stdNames ) / sizeof ( char * ) ; + + i ) {
QAction * act = getAction ( stdNames [ i ] ) ;
2014-11-14 11:44:48 +01:00
const Shortcut * srt = Shortcut : : getShortcut ( stdNames [ i ] ) ;
2013-05-13 18:49:17 +02:00
act - > setShortcuts ( srt - > keys ( ) ) ;
}
}
2013-04-02 20:46:07 +02:00
2013-10-05 14:03:34 +02:00
bool enable = ( val ! = STATE_DISABLED ) & & ( val ! = STATE_LOCK ) ;
2013-05-13 18:49:17 +02:00
foreach ( const Shortcut * s , Shortcut : : shortcuts ( ) ) {
QAction * a = s - > action ( ) ;
if ( ! a )
continue ;
2014-11-14 18:08:02 +01:00
if ( enable & & ( s - > key ( ) = = " undo " ) )
2013-05-13 18:49:17 +02:00
a - > setEnabled ( ( s - > state ( ) & val ) & & ( cs ? cs - > undo ( ) - > canUndo ( ) : false ) ) ;
2014-11-14 18:08:02 +01:00
else if ( enable & & ( s - > key ( ) = = " redo " ) )
2013-05-13 18:49:17 +02:00
a - > setEnabled ( ( s - > state ( ) & val ) & & ( cs ? cs - > undo ( ) - > canRedo ( ) : false ) ) ;
2014-11-14 18:08:02 +01:00
else if ( enable & & ( s - > key ( ) = = " cut " ) )
2014-05-26 20:21:45 +02:00
a - > setEnabled ( cs & & cs - > selection ( ) . state ( ) ! = SelState : : NONE ) ;
2014-11-14 18:08:02 +01:00
else if ( enable & & ( s - > key ( ) = = " copy " ) )
2014-11-21 12:41:13 +01:00
a - > setEnabled ( cs & & ( cs - > selection ( ) . state ( ) ! = SelState : : NONE | | val = = STATE_FOTO ) ) ;
2014-11-14 18:08:02 +01:00
else if ( enable & & ( s - > key ( ) = = " select-similar-range " ) )
2014-07-14 13:24:47 +02:00
a - > setEnabled ( cs & & cs - > selection ( ) . state ( ) = = SelState : : RANGE ) ;
2014-11-14 18:08:02 +01:00
else if ( enable & & ( s - > key ( ) = = " synth-control " ) ) {
2013-05-13 18:49:17 +02:00
Driver * driver = seq ? seq - > driver ( ) : 0 ;
// a->setEnabled(driver && driver->getSynth());
if ( MScore : : debugMode )
qDebug ( " disable synth control " ) ;
a - > setEnabled ( driver ) ;
2013-04-12 10:21:13 +02:00
}
2015-03-12 16:08:01 +01:00
else if ( s - > key ( ) = = " pad-dot " | | s - > key ( ) = = " pad-dot-dot " )
a - > setEnabled ( ! ( val & ( STATE_ALLTEXTUAL_EDIT | STATE_EDIT ) ) ) ;
2013-04-12 10:21:13 +02:00
else {
2014-08-26 16:38:33 +02:00
a - > setEnabled ( s - > state ( ) & val ) ;
2013-04-12 10:21:13 +02:00
}
2012-05-26 14:49:10 +02:00
}
2014-11-17 13:06:34 +01:00
2014-11-14 21:03:46 +01:00
if ( getAction ( " file-part-export " ) - > isEnabled ( ) )
2014-11-27 22:57:12 +01:00
getAction ( " file-part-export " ) - > setEnabled ( cs & & cs - > rootScore ( ) - > excerpts ( ) . size ( ) > 0 ) ;
2015-03-19 18:13:02 +01:00
if ( getAction ( " join-measure " ) - > isEnabled ( ) )
getAction ( " join-measure " ) - > setEnabled ( cs & & cs - > rootScore ( ) - > excerpts ( ) . size ( ) = = 0 ) ;
if ( getAction ( " split-measure " ) - > isEnabled ( ) )
getAction ( " split-measure " ) - > setEnabled ( cs & & cs - > rootScore ( ) - > excerpts ( ) . size ( ) = = 0 ) ;
2015-04-03 18:23:51 +02:00
2015-03-19 18:13:02 +01:00
//getAction("split-measure")->setEnabled(cs->rootScore()->excerpts().size() == 0);
2014-11-14 21:03:46 +01:00
2013-05-13 18:49:17 +02:00
// disabling top level menu entries does not
// work for MAC
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
QList < QObject * > ol = menuBar ( ) - > children ( ) ;
foreach ( QObject * o , ol ) {
QMenu * menu = qobject_cast < QMenu * > ( o ) ;
if ( ! menu )
continue ;
QString s ( menu - > objectName ( ) ) ;
2015-03-18 12:30:46 +01:00
if ( s = = " File " | | s = = " Help " | | s = = " Edit " | | s = = " Plugins " | | s = = " View " )
2013-05-13 18:49:17 +02:00
continue ;
menu - > setEnabled ( enable ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
menuWorkspaces - > setEnabled ( enable ) ;
2012-05-26 14:49:10 +02:00
2014-10-11 15:32:34 +02:00
transportTools - > setEnabled ( enable & & ! noSeq & & seq & & seq - > isRunning ( ) ) ;
2013-05-13 18:49:17 +02:00
cpitchTools - > setEnabled ( enable ) ;
mag - > setEnabled ( enable ) ;
entryTools - > setEnabled ( enable ) ;
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
if ( _sstate = = STATE_FOTO )
updateInspector ( ) ;
if ( _sstate = = STATE_NOTE_ENTRY_DRUM )
showDrumTools ( 0 , 0 ) ;
2013-03-01 17:14:21 +01:00
2013-05-13 18:49:17 +02:00
switch ( val ) {
case STATE_DISABLED :
2015-01-26 21:12:29 +01:00
showModeText ( tr ( " No score " ) ) ;
2013-05-13 18:49:17 +02:00
if ( debugger )
debugger - > hide ( ) ;
showPianoKeyboard ( false ) ;
break ;
case STATE_NORMAL :
_modeText - > hide ( ) ;
break ;
case STATE_NOTE_ENTRY_PITCHED :
2015-03-03 11:28:54 +01:00
showModeText ( tr ( " Note input mode " ) ) ;
2013-05-13 18:49:17 +02:00
break ;
case STATE_NOTE_ENTRY_DRUM :
{
2015-03-03 11:28:54 +01:00
showModeText ( tr ( " Drum input mode " ) ) ;
2013-05-13 18:49:17 +02:00
InputState & is = cs - > inputState ( ) ;
showDrumTools ( is . drumset ( ) , cs - > staff ( is . track ( ) / VOICES ) ) ;
2014-11-18 20:28:53 +01:00
if ( _drumTools )
is . setDrumNote ( _drumTools - > selectedDrumNote ( ) ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
break ;
case STATE_NOTE_ENTRY_TAB :
2015-03-03 11:28:54 +01:00
showModeText ( tr ( " TAB input mode " ) ) ;
2013-05-13 18:49:17 +02:00
break ;
case STATE_EDIT :
2015-01-26 21:12:29 +01:00
showModeText ( tr ( " Edit mode " ) ) ;
2013-05-13 18:49:17 +02:00
break ;
case STATE_TEXT_EDIT :
2015-01-26 21:12:29 +01:00
showModeText ( tr ( " Text edit mode " ) ) ;
2013-05-13 18:49:17 +02:00
break ;
case STATE_LYRICS_EDIT :
2015-01-26 21:12:29 +01:00
showModeText ( tr ( " Lyrics edit mode " ) ) ;
2013-05-13 18:49:17 +02:00
break ;
case STATE_HARMONY_FIGBASS_EDIT :
2015-01-26 21:12:29 +01:00
showModeText ( tr ( " Chord symbol/figured bass edit mode " ) ) ;
2013-05-13 18:49:17 +02:00
break ;
case STATE_PLAY :
2015-01-26 21:12:29 +01:00
showModeText ( tr ( " Play " ) ) ;
2013-05-13 18:49:17 +02:00
break ;
case STATE_FOTO :
2015-03-03 11:28:54 +01:00
showModeText ( tr ( " Image capture mode " ) ) ;
2013-05-13 18:49:17 +02:00
updateInspector ( ) ;
break ;
case STATE_LOCK :
2015-01-26 21:12:29 +01:00
showModeText ( tr ( " Score locked " ) ) ;
2013-05-13 18:49:17 +02:00
break ;
default :
qFatal ( " MuseScore::changeState: illegal state %d " , val ) ;
break ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
if ( paletteBox )
paletteBox - > setDisabled ( val = = STATE_PLAY | | val = = STATE_DISABLED ) ;
2014-09-15 09:44:27 +02:00
if ( selectionWindow )
selectionWindow - > setDisabled ( val = = STATE_PLAY | | val = = STATE_DISABLED ) ;
2013-05-13 18:49:17 +02:00
QAction * a = getAction ( " note-input " ) ;
bool noteEntry = val = = STATE_NOTE_ENTRY_PITCHED | | val = = STATE_NOTE_ENTRY_TAB | | val = = STATE_NOTE_ENTRY_DRUM ;
a - > setChecked ( noteEntry ) ;
_sstate = val ;
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
Element * e = 0 ;
2013-08-08 23:08:22 +02:00
if ( _sstate & STATE_ALLTEXTUAL_EDIT | | _sstate = = STATE_EDIT ) {
2013-05-13 18:49:17 +02:00
if ( cv )
e = cv - > getEditObject ( ) ;
}
if ( ! e ) {
textTools ( ) - > hide ( ) ;
if ( textPalette )
textPalette - > hide ( ) ;
2012-05-26 14:49:10 +02:00
}
else {
2013-05-13 18:49:17 +02:00
if ( e - > isText ( ) ) {
textTools ( ) - > setText ( static_cast < Text * > ( e ) ) ;
textTools ( ) - > updateTools ( ) ;
2014-06-24 18:36:02 +02:00
if ( e - > type ( ) ! = Element : : Type : : FIGURED_BASS & & e - > type ( ) ! = Element : : Type : : HARMONY ) // do not show text tools for f.b.
2014-03-28 10:49:19 +01:00
textTools ( ) - > show ( ) ;
2012-07-21 16:27:31 +02:00
}
2014-08-29 19:18:39 +02:00
if ( _inspector )
_inspector - > setElement ( e ) ;
2012-05-26 14:49:10 +02:00
}
}
2014-11-13 13:04:04 +01:00
//---------------------------------------------------------
// saveDialogState
//---------------------------------------------------------
void MuseScore : : saveDialogState ( const char * name , QFileDialog * d )
{
if ( d ) {
settings . beginGroup ( name ) ;
settings . setValue ( " size " , d - > size ( ) ) ;
settings . setValue ( " pos " , d - > pos ( ) ) ;
settings . setValue ( " state " , d - > saveState ( ) ) ;
settings . endGroup ( ) ;
}
}
//---------------------------------------------------------
// restoreDialogState
//---------------------------------------------------------
void MuseScore : : restoreDialogState ( const char * name , QFileDialog * d )
{
settings . beginGroup ( name ) ;
d - > resize ( settings . value ( " size " , QSize ( 860 , 489 ) ) . toSize ( ) ) ;
d - > restoreState ( settings . value ( " state " ) . toByteArray ( ) ) ;
d - > move ( settings . value ( " pos " , QPoint ( 200 , 200 ) ) . toPoint ( ) ) ;
settings . endGroup ( ) ;
}
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// writeSettings
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : writeSettings ( )
2012-05-26 14:49:10 +02:00
{
2014-11-13 13:04:04 +01:00
// save score list
for ( int i = 0 ; i < RECENT_LIST_SIZE ; + + i )
settings . setValue ( QString ( " recent-%1 " ) . arg ( i ) , _recentScores . value ( i ) ) ;
settings . setValue ( " scores " , scoreList . size ( ) ) ;
int curScore = scoreList . indexOf ( cs ) ;
if ( curScore = = - 1 ) // cs removed if new created and not modified
curScore = 0 ;
settings . setValue ( " currentScore " , curScore ) ;
for ( int idx = 0 ; idx < scoreList . size ( ) ; + + idx )
settings . setValue ( QString ( " score-%1 " ) . arg ( idx ) , scoreList [ idx ] - > fileInfo ( ) - > absoluteFilePath ( ) ) ;
settings . setValue ( " lastSaveCopyDirectory " , lastSaveCopyDirectory ) ;
2015-06-19 13:18:03 +02:00
settings . setValue ( " lastSaveCopyFormat " , lastSaveCopyFormat ) ;
2014-11-13 13:04:04 +01:00
settings . setValue ( " lastSaveDirectory " , lastSaveDirectory ) ;
2013-05-13 18:49:17 +02:00
settings . beginGroup ( " MainWindow " ) ;
settings . setValue ( " size " , size ( ) ) ;
settings . setValue ( " pos " , pos ( ) ) ;
settings . setValue ( " maximized " , isMaximized ( ) ) ;
settings . setValue ( " showPanel " , paletteBox & & paletteBox - > isVisible ( ) ) ;
2014-08-29 19:18:39 +02:00
settings . setValue ( " showInspector " , _inspector & & _inspector - > isVisible ( ) ) ;
2013-05-13 18:49:17 +02:00
settings . setValue ( " showPianoKeyboard " , _pianoTools & & _pianoTools - > isVisible ( ) ) ;
2014-09-15 09:44:27 +02:00
settings . setValue ( " showSelectionWindow " , selectionWindow & & selectionWindow - > isVisible ( ) ) ;
2013-05-13 18:49:17 +02:00
settings . setValue ( " state " , saveState ( ) ) ;
settings . setValue ( " splitScreen " , _splitScreen ) ;
settings . setValue ( " debuggerSplitter " , mainWindow - > saveState ( ) ) ;
2014-11-13 13:04:04 +01:00
settings . setValue ( " split " , _horizontalSplit ) ;
settings . setValue ( " splitter " , splitter - > saveState ( ) ) ;
2013-05-13 18:49:17 +02:00
settings . endGroup ( ) ;
2014-11-13 13:04:04 +01:00
2013-05-13 18:49:17 +02:00
Workspace : : currentWorkspace - > save ( ) ;
if ( keyEditor & & keyEditor - > dirty ( ) )
keyEditor - > save ( ) ;
if ( chordStyleEditor )
chordStyleEditor - > save ( ) ;
2014-11-12 15:01:08 +01:00
2014-11-13 13:04:04 +01:00
saveDialogState ( " loadScoreDialog " , loadScoreDialog ) ;
saveDialogState ( " saveScoreDialog " , saveScoreDialog ) ;
saveDialogState ( " loadStyleDialog " , loadStyleDialog ) ;
saveDialogState ( " saveStyleDialog " , saveStyleDialog ) ;
saveDialogState ( " saveImageDialog " , saveImageDialog ) ;
saveDialogState ( " loadChordStyleDialog " , loadChordStyleDialog ) ;
saveDialogState ( " saveChordStyleDialog " , saveChordStyleDialog ) ;
saveDialogState ( " loadScanDialog " , loadScanDialog ) ;
saveDialogState ( " loadAudioDialog " , loadAudioDialog ) ;
saveDialogState ( " loadDrumsetDialog " , loadDrumsetDialog ) ;
saveDialogState ( " saveDrumsetDialog " , saveDrumsetDialog ) ;
saveDialogState ( " loadPaletteDialog " , loadPaletteDialog ) ;
saveDialogState ( " savePaletteDialog " , savePaletteDialog ) ;
if ( debugger )
debugger - > writeSettings ( ) ;
# ifdef SCRIPT_INTERFACE
if ( _pluginCreator )
_pluginCreator - > writeSettings ( ) ;
# endif
if ( synthControl )
synthControl - > writeSettings ( ) ;
if ( mixer )
mixer - > writeSettings ( ) ;
if ( seq ) {
seq - > stopWait ( ) ;
seq - > exit ( ) ;
}
if ( instrList )
instrList - > writeSettings ( ) ;
if ( pianorollEditor )
pianorollEditor - > writeSettings ( ) ;
if ( drumrollEditor )
drumrollEditor - > writeSettings ( ) ;
2014-11-14 11:44:48 +01:00
if ( startcenter )
startcenter - > writeSettings ( settings ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// readSettings
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : readSettings ( )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( useFactorySettings ) {
resize ( QSize ( 1024 , 768 ) ) ;
QList < int > sizes ;
sizes < < 500 < < 100 ;
mainWindow - > setSizes ( sizes ) ;
mscore - > showPalette ( true ) ;
2014-12-19 21:12:48 +01:00
mscore - > showInspector ( true ) ;
2013-05-13 18:49:17 +02:00
return ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
settings . beginGroup ( " MainWindow " ) ;
resize ( settings . value ( " size " , QSize ( 1024 , 768 ) ) . toSize ( ) ) ;
mainWindow - > restoreState ( settings . value ( " debuggerSplitter " ) . toByteArray ( ) ) ;
mainWindow - > setOpaqueResize ( false ) ;
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
move ( settings . value ( " pos " , QPoint ( 10 , 10 ) ) . toPoint ( ) ) ;
2014-07-10 14:13:37 +02:00
//for some reason when MuseScore starts maximized the screen-reader
//doesn't respond to QAccessibleEvents
if ( settings . value ( " maximized " , false ) . toBool ( ) & & ! QAccessible : : isActive ( ) )
2013-05-13 18:49:17 +02:00
showMaximized ( ) ;
mscore - > showPalette ( settings . value ( " showPanel " , " 1 " ) . toBool ( ) ) ;
2014-12-19 21:12:48 +01:00
mscore - > showInspector ( settings . value ( " showInspector " , " 1 " ) . toBool ( ) ) ;
2013-05-13 18:49:17 +02:00
mscore - > showPianoKeyboard ( settings . value ( " showPianoKeyboard " , " 0 " ) . toBool ( ) ) ;
2014-09-15 09:44:27 +02:00
mscore - > showSelectionWindow ( settings . value ( " showSelectionWindow " , " 0 " ) . toBool ( ) ) ;
2013-05-13 18:49:17 +02:00
restoreState ( settings . value ( " state " ) . toByteArray ( ) ) ;
_horizontalSplit = settings . value ( " split " , true ) . toBool ( ) ;
bool splitScreen = settings . value ( " splitScreen " , false ) . toBool ( ) ;
if ( splitScreen ) {
splitWindow ( _horizontalSplit ) ;
QAction * a = getAction ( _horizontalSplit ? " split-h " : " split-v " ) ;
a - > setChecked ( true ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
splitter - > restoreState ( settings . value ( " splitter " ) . toByteArray ( ) ) ;
settings . endGroup ( ) ;
2014-12-05 13:56:15 +01:00
// QAction* a = getAction("toggle-transport");
// a->setChecked(!transportTools->isHidden());
// a = getAction("toggle-noteinput");
// a->setChecked(!entryTools->isHidden());
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// play
// play note for preferences.defaultPlayDuration
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : play ( Element * e ) const
2012-05-26 14:49:10 +02:00
{
2015-03-05 16:46:37 +01:00
if ( noSeq | | ! ( seq & & seq - > isRunning ( ) ) | | ! preferences . playNotes )
2013-05-13 18:49:17 +02:00
return ;
2012-05-26 14:49:10 +02:00
2014-06-24 18:36:02 +02:00
if ( e - > type ( ) = = Element : : Type : : NOTE ) {
2013-05-13 18:49:17 +02:00
Note * note = static_cast < Note * > ( e ) ;
play ( e , note - > ppitch ( ) ) ;
}
2014-06-24 18:36:02 +02:00
else if ( e - > type ( ) = = Element : : Type : : CHORD ) {
2013-05-13 18:49:17 +02:00
seq - > stopNotes ( ) ;
Chord * c = static_cast < Chord * > ( e ) ;
Part * part = c - > staff ( ) - > part ( ) ;
int tick = c - > segment ( ) ? c - > segment ( ) - > tick ( ) : 0 ;
seq - > seek ( tick ) ;
2015-03-13 11:16:43 +01:00
Instrument * instr = part - > instrument ( tick ) ;
2013-05-13 18:49:17 +02:00
foreach ( Note * n , c - > notes ( ) ) {
2015-03-05 16:46:37 +01:00
const Channel * channel = instr - > channel ( n - > subchannel ( ) ) ;
seq - > startNote ( channel - > channel , n - > ppitch ( ) , 80 , n - > tuning ( ) ) ;
2013-05-13 18:49:17 +02:00
}
seq - > startNoteTimer ( MScore : : defaultPlayDuration ) ;
2012-05-26 14:49:10 +02:00
}
}
2013-05-13 18:49:17 +02:00
void MuseScore : : play ( Element * e , int pitch ) const
2012-05-26 14:49:10 +02:00
{
2014-10-11 15:32:34 +02:00
if ( noSeq | | ! ( seq & & seq - > isRunning ( ) ) )
2013-10-29 09:54:53 +01:00
return ;
2015-03-05 16:46:37 +01:00
if ( preferences . playNotes & & e - > type ( ) = = Element : : Type : : NOTE ) {
2013-05-13 18:49:17 +02:00
Note * note = static_cast < Note * > ( e ) ;
int tick = note - > chord ( ) - > tick ( ) ;
if ( tick < 0 )
tick = 0 ;
2015-03-13 11:16:43 +01:00
Instrument * instr = note - > part ( ) - > instrument ( tick ) ;
2015-03-05 16:46:37 +01:00
const Channel * channel = instr - > channel ( note - > subchannel ( ) ) ;
seq - > startNote ( channel - > channel , pitch , 80 , MScore : : defaultPlayDuration , note - > tuning ( ) ) ;
2013-05-13 18:49:17 +02:00
}
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// reportBug
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : reportBug ( )
2012-05-26 14:49:10 +02:00
{
2015-07-01 14:17:22 +02:00
QString url = QString ( " https://musescore.org/redirect/post/bug-report?sha=%1&locale=%2 " ) . arg ( revision ( ) ) . arg ( getLocaleISOCode ( ) ) ;
QDesktopServices : : openUrl ( QUrl ( url . trimmed ( ) ) ) ;
2015-07-01 14:16:55 +02:00
}
//---------------------------------------------------------
// askForHelp
//---------------------------------------------------------
void MuseScore : : askForHelp ( )
{
2015-07-01 14:17:22 +02:00
QString url = QString ( " https://musescore.org/redirect/post/question?locale=%1 " ) . arg ( getLocaleISOCode ( ) ) ;
QDesktopServices : : openUrl ( QUrl ( url . trimmed ( ) ) ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// about
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : about ( )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
AboutBoxDialog ab ;
ab . show ( ) ;
ab . exec ( ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// AboutBoxDialog
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
AboutBoxDialog : : AboutBoxDialog ( )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
setupUi ( this ) ;
2015-02-27 12:59:27 +01:00
museLogo - > setPixmap ( QPixmap ( preferences . globalStyle = = MuseScoreStyleType : : DARK ?
" :/data/musescore-logo-transbg-m.png " : " :/data/musescore_logo_full.png " ) ) ;
2013-07-09 18:26:23 +02:00
2015-05-06 17:38:18 +02:00
if ( MuseScore : : unstable ( ) )
versionLabel - > setText ( tr ( " Unstable Prerelease for Version: " ) + VERSION ) ;
else
versionLabel - > setText ( tr ( " Version: " ) + VERSION ) ;
2013-05-13 18:49:17 +02:00
revisionLabel - > setText ( tr ( " Revision: %1 " ) . arg ( revision ) ) ;
setWindowFlags ( this - > windowFlags ( ) & ~ Qt : : WindowContextHelpButtonHint ) ;
2015-03-24 23:15:33 +01:00
2014-06-02 18:13:14 +02:00
copyRevisionButton - > setIcon ( * icons [ int ( Icons : : copy_ICON ) ] ) ;
2013-05-13 18:49:17 +02:00
connect ( copyRevisionButton , SIGNAL ( clicked ( ) ) , this , SLOT ( copyRevisionToClipboard ( ) ) ) ;
}
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
// copyRevisionToClipboard
//---------------------------------------------------------
void AboutBoxDialog : : copyRevisionToClipboard ( )
{
QClipboard * cb = QApplication : : clipboard ( ) ;
cb - > setText ( QString ( " github-musescore-musescore- " ) + revision ) ;
2012-05-26 14:49:10 +02:00
}
2013-02-21 11:04:41 +01:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// AboutBoxDialog
2013-02-21 11:04:41 +01:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
AboutMusicXMLBoxDialog : : AboutMusicXMLBoxDialog ( )
2013-02-21 11:04:41 +01:00
{
2013-05-13 18:49:17 +02:00
setupUi ( this ) ;
setWindowFlags ( this - > windowFlags ( ) & ~ Qt : : WindowContextHelpButtonHint ) ;
2013-02-21 11:04:41 +01:00
}
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// dirtyChanged
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : dirtyChanged ( Score * s )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
Score * score = s - > rootScore ( ) ;
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
int idx = scoreList . indexOf ( score ) ;
if ( idx = = - 1 ) {
qDebug ( " score not in list " ) ;
return ;
2013-04-15 02:04:01 +02:00
}
2013-05-13 18:49:17 +02:00
QString label ( score - > name ( ) ) ;
if ( score - > dirty ( ) )
label + = " * " ;
tab1 - > setTabText ( idx , label ) ;
if ( tab2 )
tab2 - > setTabText ( idx , label ) ;
}
//---------------------------------------------------------
// magChanged
//---------------------------------------------------------
2014-07-17 16:52:27 +02:00
void MuseScore : : magChanged ( int idx )
2013-05-13 18:49:17 +02:00
{
if ( cv )
2014-07-17 16:52:27 +02:00
cv - > setMag ( ( MagIdx ) idx , mag - > getMag ( cv ) ) ;
2013-05-13 18:49:17 +02:00
}
2015-02-02 01:25:35 +01:00
//---------------------------------------------------------
// magTextChanged
//---------------------------------------------------------
void MuseScore : : magTextChanged ( )
{
if ( ! cv | | mag - > currentText ( ) . isEmpty ( ) )
return ;
QString s = mag - > currentText ( ) ;
if ( s . right ( 1 ) = = " % " )
s = s . left ( s . length ( ) - 1 ) ;
bool ok ;
qreal magVal = s . toFloat ( & ok ) ;
if ( ok ) {
mag - > setMag ( ( double ) ( magVal / 100.0 ) ) ;
cv - > setMag ( MagIdx : : MAG_FREE , magVal / 100.0 ) ;
}
//prevent the list from growing
if ( mag - > count ( ) - 1 > ( int ) MagIdx : : MAG_FREE )
mag - > removeItem ( mag - > count ( ) - 1 ) ;
}
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
// incMag
//---------------------------------------------------------
void MuseScore : : incMag ( )
{
if ( cv ) {
qreal _mag = cv - > mag ( ) * 1.7 ;
if ( _mag > 16.0 )
_mag = 16.0 ;
2014-06-30 15:15:03 +02:00
cv - > setMag ( MagIdx : : MAG_FREE , _mag ) ;
2013-05-13 18:49:17 +02:00
setMag ( _mag ) ;
2013-04-15 02:04:01 +02:00
}
2013-05-13 18:49:17 +02:00
}
2013-04-15 02:04:01 +02:00
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
// decMag
//---------------------------------------------------------
void MuseScore : : decMag ( )
{
if ( cv ) {
qreal _mag = cv - > mag ( ) / 1.7 ;
if ( _mag < 0.05 )
_mag = 0.05 ;
2014-06-30 15:15:03 +02:00
cv - > setMag ( MagIdx : : MAG_FREE , _mag ) ;
2013-05-13 18:49:17 +02:00
setMag ( _mag ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
}
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
// getMag
//---------------------------------------------------------
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
double MuseScore : : getMag ( ScoreView * canvas ) const
{
return mag - > getMag ( canvas ) ;
}
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
// setMag
//---------------------------------------------------------
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
void MuseScore : : setMag ( double d )
{
mag - > setMag ( d ) ;
2014-06-30 15:15:03 +02:00
mag - > setMagIdx ( MagIdx : : MAG_FREE ) ;
2013-05-13 18:49:17 +02:00
}
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
// setPos
// set position label
//---------------------------------------------------------
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
void MuseScore : : setPos ( int t )
{
if ( cs = = 0 | | t < 0 )
return ;
2012-07-12 15:35:35 +02:00
2013-05-13 18:49:17 +02:00
TimeSigMap * s = cs - > sigmap ( ) ;
int bar , beat , tick ;
s - > tickValues ( t , & bar , & beat , & tick ) ;
2013-10-24 13:32:53 +02:00
_positionLabel - > setText ( QString ( " %1:%2:%3 " )
2013-05-13 18:49:17 +02:00
. arg ( bar + 1 , 3 , 10 , QLatin1Char ( ' ' ) )
2013-10-24 13:32:53 +02:00
. arg ( beat + 1 , 2 , 10 , QLatin1Char ( ' 0 ' ) )
2013-05-13 18:49:17 +02:00
. arg ( tick , 3 , 10 , QLatin1Char ( ' 0 ' ) )
) ;
}
2013-02-15 22:39:56 +01:00
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
2014-12-15 13:31:59 +01:00
// undoRedo
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
2014-12-15 13:31:59 +01:00
void MuseScore : : undoRedo ( bool undo )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( _sstate = = STATE_EDIT
| | _sstate = = STATE_TEXT_EDIT
| | _sstate = = STATE_HARMONY_FIGBASS_EDIT
| | _sstate = = STATE_LYRICS_EDIT ) {
cv - > postCmd ( " escape " ) ;
qApp - > processEvents ( ) ;
}
if ( cv )
cv - > startUndoRedo ( ) ;
2014-12-15 13:31:59 +01:00
if ( cs ) {
if ( undo )
cs - > undo ( ) - > undo ( ) ;
else
cs - > undo ( ) - > redo ( ) ;
}
2013-05-13 18:49:17 +02:00
if ( cv ) {
if ( cs - > inputState ( ) . segment ( ) )
setPos ( cs - > inputState ( ) . tick ( ) ) ;
if ( cs - > noteEntryMode ( ) & & ! cv - > noteEntryMode ( ) ) {
// enter note entry mode
cv - > postCmd ( " note-input " ) ;
}
2013-10-24 12:09:00 +02:00
else if ( ! cs - > noteEntryMode ( ) & & cv - > noteEntryMode ( ) ) {
2013-05-13 18:49:17 +02:00
// leave note entry mode
cv - > postCmd ( " escape " ) ;
}
cs - > endUndoRedo ( ) ;
updateInputState ( cs ) ;
}
endCmd ( ) ;
2014-12-15 13:31:59 +01:00
if ( _inspector )
_inspector - > reset ( ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// showProgressBar
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
QProgressBar * MuseScore : : showProgressBar ( )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( _progressBar = = 0 )
_progressBar = new QProgressBar ( this ) ;
_statusBar - > addWidget ( _progressBar ) ;
_progressBar - > show ( ) ;
return _progressBar ;
}
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
//---------------------------------------------------------
// hideProgressBar
//---------------------------------------------------------
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
void MuseScore : : hideProgressBar ( )
{
if ( _progressBar )
_statusBar - > removeWidget ( _progressBar ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// handleMessage
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : handleMessage ( const QString & message )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( message . isEmpty ( ) )
return ;
2015-02-23 17:34:40 +01:00
if ( startcenter )
showStartcenter ( false ) ;
2013-05-13 18:49:17 +02:00
( ( QtSingleApplication * ) ( qApp ) ) - > activateWindow ( ) ;
Score * score = readScore ( message ) ;
if ( score ) {
setCurrentScoreView ( appendScore ( score ) ) ;
2014-12-08 14:41:36 +01:00
addRecentScore ( score ) ;
2013-05-13 18:49:17 +02:00
writeSessionFile ( false ) ;
2012-05-26 14:49:10 +02:00
}
2012-05-30 02:12:37 +02:00
}
2012-05-30 17:12:30 +02:00
2012-05-30 02:12:37 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// editInPianoroll
2012-05-30 02:12:37 +02:00
//---------------------------------------------------------
2013-01-22 12:30:51 +01:00
2013-05-13 18:49:17 +02:00
void MuseScore : : editInPianoroll ( Staff * staff )
2012-05-30 02:12:37 +02:00
{
2013-05-13 18:49:17 +02:00
if ( pianorollEditor = = 0 )
pianorollEditor = new PianorollEditor ;
pianorollEditor - > setScore ( staff - > score ( ) ) ;
pianorollEditor - > setStaff ( staff ) ;
pianorollEditor - > show ( ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// editInDrumroll
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : editInDrumroll ( Staff * staff )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( drumrollEditor = = 0 )
drumrollEditor = new DrumrollEditor ;
drumrollEditor - > setStaff ( staff ) ;
drumrollEditor - > show ( ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// writeSessionFile
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : writeSessionFile ( bool cleanExit )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
// qDebug("write session file");
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
QDir dir ;
dir . mkpath ( dataPath ) ;
QFile f ( dataPath + " /session " ) ;
if ( ! f . open ( QIODevice : : WriteOnly ) ) {
qDebug ( " cannot create session file <%s> " , qPrintable ( f . fileName ( ) ) ) ;
2012-05-26 14:49:10 +02:00
return ;
}
2013-05-13 18:49:17 +02:00
Xml xml ( & f ) ;
xml . header ( ) ;
xml . stag ( " museScore version= \" " MSC_VERSION " \" " ) ;
xml . tagE ( cleanExit ? " clean " : " dirty " ) ;
foreach ( Score * score , scoreList ) {
xml . stag ( " Score " ) ;
xml . tag ( " created " , score - > created ( ) ) ;
xml . tag ( " dirty " , score - > dirty ( ) ) ;
2014-12-01 15:13:22 +01:00
QString path ;
if ( score - > importedFilePath ( ) . isEmpty ( ) ) {
// score was not imported from another format, e.g. MIDI file
path = score - > fileInfo ( ) - > absoluteFilePath ( ) ;
}
else if ( score - > fileInfo ( ) - > exists ( ) ) { // score was saved
path = score - > fileInfo ( ) - > absoluteFilePath ( ) ;
}
else { // score was imported but not saved - store original file (e.g. MIDI) path
path = score - > importedFilePath ( ) ;
}
2013-07-11 19:19:01 +02:00
if ( cleanExit | | score - > tmpName ( ) . isEmpty ( ) ) {
2014-12-01 15:13:22 +01:00
xml . tag ( " path " , path ) ;
2013-05-13 18:49:17 +02:00
}
else {
2014-12-01 15:13:22 +01:00
xml . tag ( " name " , path ) ;
2013-05-13 18:49:17 +02:00
xml . tag ( " path " , score - > tmpName ( ) ) ;
}
xml . etag ( ) ;
}
int tab = 0 ;
int idx = 0 ;
for ( int i = 0 ; i < tab1 - > count ( ) ; + + i ) {
ScoreView * v = tab1 - > view ( i ) ;
if ( v ) {
if ( v = = cv ) {
tab = 0 ;
idx = i ;
}
xml . stag ( " ScoreView " ) ;
xml . tag ( " tab " , tab ) ; // 0 instead of "tab" does not work
xml . tag ( " idx " , i ) ;
2014-06-30 15:15:03 +02:00
if ( v - > magIdx ( ) = = MagIdx : : MAG_FREE )
2013-05-13 18:49:17 +02:00
xml . tag ( " mag " , v - > mag ( ) ) ;
else
2014-06-30 15:15:03 +02:00
xml . tag ( " magIdx " , int ( v - > magIdx ( ) ) ) ;
2013-05-13 18:49:17 +02:00
xml . tag ( " x " , v - > xoffset ( ) / MScore : : DPMM ) ;
xml . tag ( " y " , v - > yoffset ( ) / MScore : : DPMM ) ;
xml . etag ( ) ;
}
}
if ( splitScreen ( ) ) {
for ( int i = 0 ; i < tab2 - > count ( ) ; + + i ) {
ScoreView * v = tab2 - > view ( i ) ;
if ( v ) {
if ( v = = cv ) {
tab = 1 ;
idx = i ;
}
xml . stag ( " ScoreView " ) ;
xml . tag ( " tab " , 1 ) ;
xml . tag ( " idx " , i ) ;
2014-06-30 15:15:03 +02:00
if ( v - > magIdx ( ) = = MagIdx : : MAG_FREE )
2013-05-13 18:49:17 +02:00
xml . tag ( " mag " , v - > mag ( ) ) ;
else
2014-06-30 15:15:03 +02:00
xml . tag ( " magIdx " , int ( v - > magIdx ( ) ) ) ;
2013-05-13 18:49:17 +02:00
xml . tag ( " x " , v - > xoffset ( ) / MScore : : DPMM ) ;
xml . tag ( " y " , v - > yoffset ( ) / MScore : : DPMM ) ;
xml . etag ( ) ;
}
}
}
xml . tag ( " tab " , tab ) ;
xml . tag ( " idx " , idx ) ;
xml . etag ( ) ;
f . close ( ) ;
if ( cleanExit ) {
// TODO: remove all temporary session backup files
2012-05-26 14:49:10 +02:00
}
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// removeSessionFile
// remove temp files and session file
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : removeSessionFile ( )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
QFile f ( dataPath + " /session " ) ;
if ( ! f . exists ( ) )
return ;
if ( ! f . remove ( ) ) {
qDebug ( " cannot remove session file <%s> " , qPrintable ( f . fileName ( ) ) ) ;
2012-05-26 14:49:10 +02:00
}
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// autoSaveTimerTimeout
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : autoSaveTimerTimeout ( )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
bool sessionChanged = false ;
2014-08-26 19:31:04 +02:00
foreach ( Score * s , scoreList ) {
2013-05-13 18:49:17 +02:00
if ( s - > autosaveDirty ( ) ) {
QString tmp = s - > tmpName ( ) ;
if ( ! tmp . isEmpty ( ) ) {
QFileInfo fi ( tmp ) ;
// TODO: cannot catch exeption here:
2014-08-26 19:31:04 +02:00
s - > saveCompressedFile ( fi , false ) ;
2013-05-13 18:49:17 +02:00
}
else {
QDir dir ;
dir . mkpath ( dataPath ) ;
QTemporaryFile tf ( dataPath + " /scXXXXXX.mscz " ) ;
tf . setAutoRemove ( false ) ;
if ( ! tf . open ( ) ) {
qDebug ( " autoSaveTimerTimeout(): create temporary file failed " ) ;
return ;
}
s - > setTmpName ( tf . fileName ( ) ) ;
QFileInfo info ( tf . fileName ( ) ) ;
s - > saveCompressedFile ( & tf , info , false ) ;
tf . close ( ) ;
sessionChanged = true ;
}
s - > setAutosaveDirty ( false ) ;
}
}
if ( sessionChanged )
writeSessionFile ( false ) ;
if ( preferences . autoSave ) {
int t = preferences . autoSaveTime * 60 * 1000 ;
autoSaveTimer - > start ( t ) ;
2012-05-26 14:49:10 +02:00
}
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// restoreSession
// Restore last session. If "always" is true, then restore
// last session even on a clean exit else only if last
// session ended abnormal.
// Return true if a session was found and restored.
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
bool MuseScore : : restoreSession ( bool always )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
QFile f ( dataPath + " /session " ) ;
if ( ! f . exists ( ) )
return false ;
if ( ! f . open ( QIODevice : : ReadOnly ) ) {
2014-02-27 19:57:24 +01:00
qDebug ( " Cannot open session file <%s> " , qPrintable ( f . fileName ( ) ) ) ;
2013-05-13 18:49:17 +02:00
return false ;
}
XmlReader e ( & f ) ;
int tab = 0 ;
int idx = - 1 ;
bool cleanExit = false ;
while ( e . readNextStartElement ( ) ) {
if ( e . name ( ) = = " museScore " ) {
/* QString version = e.attribute(QString("version"));
QStringList sl = version . split ( ' . ' ) ;
int v = sl [ 0 ] . toInt ( ) * 100 + sl [ 1 ] . toInt ( ) ;
*/
while ( e . readNextStartElement ( ) ) {
const QStringRef & tag ( e . name ( ) ) ;
if ( tag = = " clean " ) {
if ( ! always )
return false ;
cleanExit = true ;
e . readNext ( ) ;
}
else if ( tag = = " dirty " ) {
QMessageBox : : StandardButton b = QMessageBox : : question ( 0 ,
tr ( " MuseScore " ) ,
tr ( " The previous session quit unexpectedly. \n \n Restore session? " ) ,
QMessageBox : : Yes | QMessageBox : : No ,
QMessageBox : : Yes
) ;
if ( b ! = QMessageBox : : Yes )
return false ;
e . readNext ( ) ;
}
else if ( tag = = " Score " ) {
QString name ;
bool created = false ;
while ( e . readNextStartElement ( ) ) {
const QStringRef & tag ( e . name ( ) ) ;
if ( tag = = " name " )
name = e . readElementText ( ) ;
else if ( tag = = " created " )
created = e . readInt ( ) ;
else if ( tag = = " dirty " )
2015-01-30 17:03:51 +01:00
/*int dirty =*/ e . readInt ( ) ;
2013-05-13 18:49:17 +02:00
else if ( tag = = " path " ) {
Score * score = readScore ( e . readElementText ( ) ) ;
if ( score ) {
if ( ! name . isEmpty ( ) )
score - > setName ( name ) ;
if ( cleanExit ) {
// override if last session did a clean exit
created = false ;
}
appendScore ( score ) ;
score - > setCreated ( created ) ;
}
}
else {
e . unknown ( ) ;
return false ;
}
}
}
else if ( tag = = " ScoreView " ) {
double x = .0 , y = .0 , vmag = .0 ;
2014-06-30 15:15:03 +02:00
MagIdx magIdx = MagIdx : : MAG_FREE ;
2013-05-13 18:49:17 +02:00
int tab = 0 , idx = 0 ;
while ( e . readNextStartElement ( ) ) {
const QStringRef & tag ( e . name ( ) ) ;
if ( tag = = " tab " )
tab = e . readInt ( ) ;
else if ( tag = = " idx " )
idx = e . readInt ( ) ;
else if ( tag = = " mag " )
vmag = e . readDouble ( ) ;
else if ( tag = = " magIdx " )
2014-06-30 15:15:03 +02:00
magIdx = MagIdx ( e . readInt ( ) ) ;
2013-05-13 18:49:17 +02:00
else if ( tag = = " x " )
x = e . readDouble ( ) * MScore : : DPMM ;
else if ( tag = = " y " )
y = e . readDouble ( ) * MScore : : DPMM ;
else {
e . unknown ( ) ;
return false ;
}
}
2014-06-30 15:15:03 +02:00
if ( magIdx ! = MagIdx : : MAG_FREE )
2013-05-13 18:49:17 +02:00
vmag = mag - > getMag ( cv ) ;
( tab = = 0 ? tab1 : tab2 ) - > initScoreView ( idx , vmag , magIdx , x , y ) ;
}
else if ( tag = = " tab " )
tab = e . readInt ( ) ;
else if ( tag = = " idx " )
idx = e . readInt ( ) ;
else {
e . unknown ( ) ;
return false ;
}
}
}
else {
e . unknown ( ) ;
return false ;
}
}
setCurrentView ( tab , idx ) ;
return true ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// splitWindow
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : splitWindow ( bool horizontal )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( ! _splitScreen ) {
if ( tab2 = = 0 ) {
2014-05-28 22:35:23 +02:00
tab2 = new ScoreTab ( & scoreList , this ) ;
2013-05-13 18:49:17 +02:00
tab2 - > setSizePolicy ( QSizePolicy : : Expanding , QSizePolicy : : Expanding ) ;
connect ( tab2 , SIGNAL ( currentScoreViewChanged ( ScoreView * ) ) , SLOT ( setCurrentScoreView ( ScoreView * ) ) ) ;
connect ( tab2 , SIGNAL ( tabCloseRequested ( int ) ) , SLOT ( removeTab ( int ) ) ) ;
2014-06-10 23:41:30 +02:00
connect ( tab2 , SIGNAL ( actionTriggered ( QAction * ) ) , SLOT ( cmd ( QAction * ) ) ) ;
2013-05-13 18:49:17 +02:00
splitter - > addWidget ( tab2 ) ;
}
tab2 - > setVisible ( true ) ;
_splitScreen = true ;
_horizontalSplit = horizontal ;
splitter - > setOrientation ( _horizontalSplit ? Qt : : Horizontal : Qt : : Vertical ) ;
if ( ! scoreList . isEmpty ( ) ) {
tab2 - > setCurrentIndex ( 0 ) ;
Score * s = scoreList [ 0 ] ;
s - > setLayoutAll ( true ) ;
s - > end ( ) ;
setCurrentView ( 1 , 0 ) ;
}
}
else {
if ( _horizontalSplit = = horizontal ) {
_splitScreen = false ;
tab2 - > setVisible ( false ) ;
}
else {
_horizontalSplit = horizontal ;
QAction * a ;
if ( _horizontalSplit )
a = getAction ( " split-v " ) ;
else
a = getAction ( " split-h " ) ;
a - > setChecked ( false ) ;
splitter - > setOrientation ( _horizontalSplit ? Qt : : Horizontal : Qt : : Vertical ) ;
}
}
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// stateName
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
const char * stateName ( ScoreState s )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
switch ( s ) {
case STATE_DISABLED : return " STATE_DISABLED " ;
case STATE_NORMAL : return " STATE_NORMAL " ;
case STATE_NOTE_ENTRY_PITCHED : return " STATE_NOTE_ENTRY_PITCHED " ;
case STATE_NOTE_ENTRY_DRUM : return " STATE_NOTE_ENTRY_DRUM " ;
case STATE_NOTE_ENTRY_TAB : return " STATE_NOTE_ENTRY_TAB " ;
case STATE_NOTE_ENTRY : return " STATE_NOTE_ENTRY " ;
case STATE_EDIT : return " STATE_EDIT " ;
case STATE_TEXT_EDIT : return " STATE_TEXT_EDIT " ;
case STATE_LYRICS_EDIT : return " STATE_LYRICS_EDIT " ;
case STATE_HARMONY_FIGBASS_EDIT : return " STATE_HARMONY_FIGBASS_EDIT " ;
case STATE_PLAY : return " STATE_PLAY " ;
case STATE_FOTO : return " STATE_FOTO " ;
default : return " ?? " ;
2012-05-26 14:49:10 +02:00
}
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// excerptsChanged
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : excerptsChanged ( Score * s )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( tab2 ) {
// ScoreView* v = tab2->view();
// if (v && v->score() == s) {
tab2 - > updateExcerpts ( ) ;
// }
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
if ( tab1 ) {
ScoreView * v = tab1 - > view ( ) ;
if ( v & & v - > score ( ) - > rootScore ( ) = = s ) {
tab1 - > updateExcerpts ( ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
else if ( v = = 0 ) {
tab1 - > setExcerpt ( 0 ) ;
tab1 - > updateExcerpts ( ) ;
2012-05-26 14:49:10 +02:00
}
}
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// editRaster
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : editRaster ( )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( editRasterDialog = = 0 ) {
editRasterDialog = new EditRaster ( this ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
if ( editRasterDialog - > exec ( ) ) {
qDebug ( " =====accept config raster " ) ;
2012-05-26 14:49:10 +02:00
}
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// showPianoKeyboard
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : showPianoKeyboard ( bool on )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( _pianoTools = = 0 ) {
2014-12-22 09:56:39 +01:00
QAction * a = getAction ( " toggle-piano " ) ;
2013-05-13 18:49:17 +02:00
_pianoTools = new PianoTools ( this ) ;
addDockWidget ( Qt : : BottomDockWidgetArea , _pianoTools ) ;
2015-05-10 10:01:01 +02:00
connect ( _pianoTools , SIGNAL ( keyPressed ( int , bool , int ) ) , SLOT ( midiNoteReceived ( int , bool , int ) ) ) ;
connect ( _pianoTools , SIGNAL ( keyReleased ( int , bool , int ) ) , SLOT ( midiNoteReceived ( int , bool , int ) ) ) ;
2013-05-13 18:49:17 +02:00
connect ( _pianoTools , SIGNAL ( visibilityChanged ( bool ) ) , a , SLOT ( setChecked ( bool ) ) ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
if ( on ) {
_pianoTools - > show ( ) ;
}
else {
if ( _pianoTools )
_pianoTools - > hide ( ) ;
2012-05-26 14:49:10 +02:00
}
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// showPluginCreator
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : showPluginCreator ( QAction * a )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
# ifdef SCRIPT_INTERFACE
bool on = a - > isChecked ( ) ;
if ( on ) {
2014-08-29 19:18:39 +02:00
if ( _pluginCreator = = 0 ) {
_pluginCreator = new PluginCreator ( 0 ) ;
connect ( _pluginCreator , SIGNAL ( closed ( bool ) ) , a , SLOT ( setChecked ( bool ) ) ) ;
2013-05-13 18:49:17 +02:00
}
2014-08-29 19:18:39 +02:00
_pluginCreator - > show ( ) ;
2013-05-13 18:49:17 +02:00
}
else {
2014-08-29 19:18:39 +02:00
if ( _pluginCreator )
_pluginCreator - > hide ( ) ;
2013-05-13 18:49:17 +02:00
}
# endif
2012-05-26 14:49:10 +02:00
}
2013-10-05 12:03:30 +02:00
//---------------------------------------------------------
// showPluginManager
//---------------------------------------------------------
2014-09-01 22:35:04 +02:00
void MuseScore : : showPluginManager ( )
2013-10-05 12:03:30 +02:00
{
# ifdef SCRIPT_INTERFACE
2015-03-04 14:32:38 +01:00
if ( ! pluginManager )
pluginManager = new PluginManager ( 0 ) ;
pluginManager - > init ( ) ;
pluginManager - > show ( ) ;
2013-10-05 12:03:30 +02:00
# endif
}
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// showMediaDialog
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : showMediaDialog ( )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( _mediaDialog = = 0 )
_mediaDialog = new MediaDialog ( this ) ;
_mediaDialog - > setScore ( cs ) ;
_mediaDialog - > exec ( ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// getPaletteBox
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
PaletteBox * MuseScore : : getPaletteBox ( )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( paletteBox = = 0 ) {
paletteBox = new PaletteBox ( this ) ;
QAction * a = getAction ( " toggle-palette " ) ;
connect ( paletteBox , SIGNAL ( visibilityChanged ( bool ) ) , a , SLOT ( setChecked ( bool ) ) ) ;
addDockWidget ( Qt : : LeftDockWidgetArea , paletteBox ) ;
}
return paletteBox ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// midiNoteReceived
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2015-05-10 10:01:01 +02:00
void MuseScore : : midiNoteReceived ( int pitch , bool ctrl , int vel )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( cv )
2015-05-10 10:01:01 +02:00
cv - > midiNoteReceived ( pitch , ctrl , vel ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// switchLayer
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : switchLayer ( const QString & s )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( cs - > switchLayer ( s ) ) {
cs - > setLayoutAll ( true ) ;
cs - > update ( ) ;
2012-05-26 14:49:10 +02:00
}
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// switchPlayMode
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : switchPlayMode ( int mode )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( cs )
cs - > setPlayMode ( PlayMode ( mode ) ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// networkFinished
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : networkFinished ( QNetworkReply * reply )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( reply - > error ( ) ! = QNetworkReply : : NoError ) {
qDebug ( " Error while checking update [%s] " , qPrintable ( reply - > errorString ( ) ) ) ;
2012-05-26 14:49:10 +02:00
return ;
}
2013-05-13 18:49:17 +02:00
QByteArray ha = reply - > rawHeader ( " Content-Disposition " ) ;
QString s ( ha ) ;
QString name ;
QRegExp re ( " .*filename= \" (.*) \ " " ) ;
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
if ( ! s . isEmpty ( ) & & re . indexIn ( s ) ! = - 1 ) {
name = re . cap ( 1 ) ;
}
else {
QUrl url = reply - > url ( ) ;
QString path = url . path ( ) ;
qDebug ( " Path <%s> " , qPrintable ( path ) ) ;
QFileInfo fi ( path ) ;
name = fi . fileName ( ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
qDebug ( " header <%s> " , qPrintable ( s ) ) ;
qDebug ( " name <%s> " , qPrintable ( name ) ) ;
QByteArray data = reply - > readAll ( ) ;
QString tmpName = QDir : : tempPath ( ) + " / " + name ;
QFile f ( tmpName ) ;
f . open ( QIODevice : : WriteOnly ) ;
f . write ( data ) ;
2012-05-26 14:49:10 +02:00
f . close ( ) ;
2013-05-13 18:49:17 +02:00
Score * score = readScore ( tmpName ) ;
if ( ! score ) {
qDebug ( " readScore failed " ) ;
return ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
score - > setCreated ( true ) ;
setCurrentScoreView ( appendScore ( score ) ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// loadFile
// load file from url
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : loadFile ( const QString & s )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
loadFile ( QUrl ( s ) ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
void MuseScore : : loadFile ( const QUrl & url )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( ! networkManager ) {
networkManager = new QNetworkAccessManager ( this ) ;
connect ( networkManager , SIGNAL ( finished ( QNetworkReply * ) ) ,
SLOT ( networkFinished ( QNetworkReply * ) ) ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
networkManager - > get ( QNetworkRequest ( url ) ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// selectSimilar
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : selectSimilar ( Element * e , bool sameStaff )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
Score * score = e - > score ( ) ;
2014-07-15 00:28:31 +02:00
score - > selectSimilar ( e , sameStaff ) ;
2012-05-26 14:49:10 +02:00
2013-12-24 12:31:11 +01:00
if ( score - > selectionChanged ( ) ) {
score - > setSelectionChanged ( false ) ;
SelState ss = score - > selection ( ) . state ( ) ;
selectionChanged ( ss ) ;
}
2012-05-26 14:49:10 +02:00
}
2014-07-14 13:24:47 +02:00
void MuseScore : : selectSimilarInRange ( Element * e )
{
Score * score = e - > score ( ) ;
2014-07-15 00:28:31 +02:00
score - > selectSimilarInRange ( e ) ;
2014-07-14 13:24:47 +02:00
if ( score - > selectionChanged ( ) ) {
score - > setSelectionChanged ( false ) ;
SelState ss = score - > selection ( ) . state ( ) ;
selectionChanged ( ss ) ;
}
}
2014-11-22 12:03:22 +01:00
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// selectElementDialog
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : selectElementDialog ( Element * e )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
Score * score = e - > score ( ) ;
SelectDialog sd ( e , 0 ) ;
if ( sd . exec ( ) ) {
ElementPattern pattern ;
sd . setPattern ( & pattern ) ;
2014-07-24 19:00:54 +02:00
if ( sd . isInSelection ( ) )
score - > scanElementsInRange ( & pattern , Score : : collectMatch ) ;
else
score - > scanElements ( & pattern , Score : : collectMatch ) ;
2013-05-13 18:49:17 +02:00
if ( sd . doReplace ( ) ) {
2014-05-27 10:34:08 +02:00
score - > select ( 0 , SelectType : : SINGLE , 0 ) ;
2013-05-13 18:49:17 +02:00
foreach ( Element * ee , pattern . el )
2014-05-27 10:34:08 +02:00
score - > select ( ee , SelectType : : ADD , 0 ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
else if ( sd . doSubtract ( ) ) {
QList < Element * > sl ( score - > selection ( ) . elements ( ) ) ;
foreach ( Element * ee , pattern . el )
sl . removeOne ( ee ) ;
2014-05-27 10:34:08 +02:00
score - > select ( 0 , SelectType : : SINGLE , 0 ) ;
2013-05-13 18:49:17 +02:00
foreach ( Element * ee , sl )
2014-05-27 10:34:08 +02:00
score - > select ( ee , SelectType : : ADD , 0 ) ;
2013-05-13 18:49:17 +02:00
}
else if ( sd . doAdd ( ) ) {
QList < Element * > sl ( score - > selection ( ) . elements ( ) ) ;
foreach ( Element * ee , pattern . el ) {
if ( ! sl . contains ( ee ) )
2014-05-27 10:34:08 +02:00
score - > select ( ee , SelectType : : ADD , 0 ) ;
2013-05-13 18:49:17 +02:00
}
2012-05-26 14:49:10 +02:00
}
2013-12-24 12:31:11 +01:00
if ( score - > selectionChanged ( ) ) {
score - > setSelectionChanged ( false ) ;
SelState ss = score - > selection ( ) . state ( ) ;
selectionChanged ( ss ) ;
}
2012-05-26 14:49:10 +02:00
}
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// RecordButton
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
RecordButton : : RecordButton ( QWidget * parent )
: SimpleButton ( " :/data/recordOn.svg " , " :/data/recordOff.svg " , parent )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
setCheckable ( true ) ;
defaultAction ( ) - > setCheckable ( true ) ;
2014-10-15 20:43:06 +02:00
setToolTip ( qApp - > translate ( " RecordButton " , " Record " ) ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// GreendotButton
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
GreendotButton : : GreendotButton ( QWidget * parent )
: SimpleButton ( " :/data/greendot.svg " , " :/data/darkgreendot.svg " , parent )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
setCheckable ( true ) ;
2014-10-15 20:43:06 +02:00
setToolTip ( qApp - > translate ( " GreendotButton " , " Record " ) ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// drawHandle
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
QRectF drawHandle ( QPainter & p , const QPointF & pos , bool active )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
p . save ( ) ;
2013-07-04 21:07:38 +02:00
p . setPen ( QPen ( QColor ( MScore : : selectColor [ 0 ] ) , 2.0 / p . matrix ( ) . m11 ( ) ) ) ;
2013-05-13 18:49:17 +02:00
if ( active )
2013-07-04 21:07:38 +02:00
p . setBrush ( MScore : : selectColor [ 0 ] ) ;
2013-05-13 18:49:17 +02:00
else
p . setBrush ( Qt : : NoBrush ) ;
qreal w = 8.0 / p . matrix ( ) . m11 ( ) ;
qreal h = 8.0 / p . matrix ( ) . m22 ( ) ;
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
QRectF r ( - w / 2 , - h / 2 , w , h ) ;
r . translate ( pos ) ;
p . drawRect ( r ) ;
p . restore ( ) ;
return r ;
2012-05-26 14:49:10 +02:00
}
2012-07-02 18:05:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// transpose
2012-07-02 18:05:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : transpose ( )
2012-07-02 18:05:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( cs - > last ( ) = = 0 ) // empty score?
return ;
2014-12-15 17:44:32 +01:00
bool noSelection = cs - > selection ( ) . isNone ( ) ;
2014-12-15 18:00:54 +01:00
if ( noSelection )
2014-08-08 20:54:00 +02:00
cs - > cmdSelectAll ( ) ;
2014-05-24 12:53:50 +02:00
bool rangeSelection = cs - > selection ( ) . isRange ( ) ;
2013-05-13 18:49:17 +02:00
TransposeDialog td ;
2012-07-02 18:05:10 +02:00
2014-05-26 13:21:04 +02:00
// TRANSPOSE_BY_KEY and "transpose keys" is only possible if selection state is SelState::RANGE
2013-05-13 18:49:17 +02:00
td . enableTransposeKeys ( rangeSelection ) ;
td . enableTransposeByKey ( rangeSelection ) ;
2014-12-15 17:44:32 +01:00
td . enableTransposeChordNames ( rangeSelection ) ;
2012-07-02 18:05:10 +02:00
2013-05-13 18:49:17 +02:00
int startStaffIdx = 0 ;
2015-07-06 07:01:58 +02:00
int endStaffIdx = 0 ;
2013-05-13 18:49:17 +02:00
int startTick = 0 ;
if ( rangeSelection ) {
startStaffIdx = cs - > selection ( ) . staffStart ( ) ;
2015-07-06 07:01:58 +02:00
endStaffIdx = cs - > selection ( ) . staffEnd ( ) ;
2013-05-13 18:49:17 +02:00
startTick = cs - > selection ( ) . tickStart ( ) ;
2012-05-26 14:49:10 +02:00
}
2015-07-06 07:01:58 +02:00
// find the key of the first pitched staff
Key key = Key : : C ;
for ( int i = startStaffIdx ; i < endStaffIdx ; + + i ) {
Staff * staff = cs - > staff ( i ) ;
if ( staff - > isPitchedStaff ( ) ) {
key = staff - > key ( startTick ) ;
if ( ! cs - > styleB ( StyleIdx : : concertPitch ) ) {
int diff = staff - > part ( ) - > instrument ( startTick ) - > transpose ( ) . chromatic ;
if ( diff )
key = transposeKey ( key , diff ) ;
}
break ;
}
2015-01-18 16:35:18 +01:00
}
2015-07-06 07:01:58 +02:00
2014-11-25 20:58:05 +01:00
td . setKey ( key ) ;
2013-05-13 18:49:17 +02:00
if ( ! td . exec ( ) )
return ;
2015-07-06 07:01:58 +02:00
2013-05-13 18:49:17 +02:00
cs - > transpose ( td . mode ( ) , td . direction ( ) , td . transposeKey ( ) , td . transposeInterval ( ) ,
td . getTransposeKeys ( ) , td . getTransposeChordNames ( ) , td . useDoubleSharpsFlats ( ) ) ;
2014-12-15 17:44:32 +01:00
if ( noSelection )
cs - > deselectAll ( ) ;
2012-07-02 18:05:10 +02:00
}
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// cmd
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : cmd ( QAction * a )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( inChordEditor ) // HACK
return ;
2014-06-15 21:08:04 +02:00
2013-05-13 18:49:17 +02:00
QString cmdn ( a - > data ( ) . toString ( ) ) ;
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
if ( MScore : : debugMode )
qDebug ( " MuseScore::cmd <%s> " , cmdn . toLatin1 ( ) . data ( ) ) ;
2012-05-26 14:49:10 +02:00
2014-11-14 11:44:48 +01:00
const Shortcut * sc = Shortcut : : getShortcut ( cmdn . toLatin1 ( ) . data ( ) ) ;
2013-05-13 18:49:17 +02:00
if ( sc = = 0 ) {
qDebug ( " MuseScore::cmd(): unknown action <%s> " , qPrintable ( cmdn ) ) ;
2012-05-26 14:49:10 +02:00
return ;
}
2013-05-13 18:49:17 +02:00
if ( cs & & ( sc - > state ( ) & _sstate ) = = 0 ) {
QMessageBox : : warning ( 0 ,
2014-02-27 19:57:24 +01:00
QWidget : : tr ( " MuseScore: Invalid Command " ) ,
2013-05-13 18:49:17 +02:00
QString ( " Command %1 not valid in current state " ) . arg ( cmdn ) ) ;
2012-05-26 14:49:10 +02:00
return ;
}
2013-05-13 18:49:17 +02:00
if ( cmdn = = " repeat-cmd " ) {
a = lastCmd ;
sc = lastShortcut ;
if ( a = = 0 )
2012-05-26 14:49:10 +02:00
return ;
2013-05-13 18:49:17 +02:00
cmdn = a - > data ( ) . toString ( ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
else {
lastCmd = a ;
lastShortcut = sc ;
2012-05-26 14:49:10 +02:00
}
2014-11-14 11:44:48 +01:00
if ( sc - > needsScore ( ) & & ! cs ) {
2013-05-13 18:49:17 +02:00
qDebug ( " no score " ) ;
return ;
}
2014-11-14 11:44:48 +01:00
if ( sc - > isCmd ( ) ) {
2013-05-13 18:49:17 +02:00
if ( ! cv - > editMode ( ) )
cs - > startCmd ( ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
cmd ( a , cmdn ) ;
2014-11-14 11:44:48 +01:00
if ( lastShortcut - > isCmd ( ) )
2013-05-13 18:49:17 +02:00
cs - > endCmd ( ) ;
endCmd ( ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// endCmd
2015-02-03 13:42:37 +01:00
// Called after every command action (including every
// mouse action).
// Updates the UI after a possible score change.
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : endCmd ( )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
if ( cs ) {
setPos ( cs - > inputState ( ) . tick ( ) ) ;
updateInputState ( cs ) ;
updateUndoRedo ( ) ;
dirtyChanged ( cs ) ;
Element * e = cs - > selection ( ) . element ( ) ;
2015-02-08 21:06:26 +01:00
if ( e & & ( cs - > playNote ( ) | | cs - > playChord ( ) ) ) {
2015-02-08 22:26:40 +01:00
if ( cs - > playChord ( ) & & preferences . playChordOnAddNote & & e - > type ( ) = = Element : : Type : : NOTE )
2015-02-08 21:06:26 +01:00
play ( static_cast < Note * > ( e ) - > chord ( ) ) ;
else
play ( e ) ;
2013-05-13 18:49:17 +02:00
cs - > setPlayNote ( false ) ;
2015-02-08 21:06:26 +01:00
cs - > setPlayChord ( false ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
if ( cs - > rootScore ( ) - > excerptsChanged ( ) ) {
//Q_ASSERT(cs == cs->rootScore());
excerptsChanged ( cs - > rootScore ( ) ) ;
cs - > rootScore ( ) - > setExcerptsChanged ( false ) ;
2012-05-26 14:49:10 +02:00
}
2015-01-26 21:10:56 +01:00
if ( cs - > instrumentsChanged ( ) ) {
if ( ! noSeq & & ( seq & & seq - > isRunning ( ) ) )
seq - > initInstruments ( ) ;
2015-03-05 16:46:37 +01:00
instrumentChanged ( ) ; // update mixer
2013-05-13 18:49:17 +02:00
cs - > setInstrumentsChanged ( false ) ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
if ( cs - > selectionChanged ( ) ) {
cs - > setSelectionChanged ( false ) ;
SelState ss = cs - > selection ( ) . state ( ) ;
selectionChanged ( ss ) ;
}
2014-05-26 15:31:36 +02:00
getAction ( " concert-pitch " ) - > setChecked ( cs - > styleB ( StyleIdx : : concertPitch ) ) ;
2012-05-26 14:49:10 +02:00
2013-10-24 12:09:00 +02:00
if ( e = = 0 & & cs - > noteEntryMode ( ) )
2013-05-13 18:49:17 +02:00
e = cs - > inputState ( ) . cr ( ) ;
2014-11-17 13:06:34 +01:00
if ( cs - > layoutMode ( ) = = LayoutMode : : PAGE )
viewModeCombo - > setCurrentIndex ( 0 ) ;
else
viewModeCombo - > setCurrentIndex ( 1 ) ;
2013-05-13 18:49:17 +02:00
cs - > end ( ) ;
2014-07-10 14:13:37 +02:00
ScoreAccessibility : : instance ( ) - > updateAccessibilityInfo ( ) ;
2012-05-26 14:49:10 +02:00
}
else {
2014-08-29 19:18:39 +02:00
if ( _inspector )
_inspector - > setElement ( 0 ) ;
2014-05-26 13:21:04 +02:00
selectionChanged ( SelState : : NONE ) ;
2012-05-26 14:49:10 +02:00
}
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// updateUndoRedo
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : updateUndoRedo ( )
2012-05-26 14:49:10 +02:00
{
2013-05-13 18:49:17 +02:00
QAction * a = getAction ( " undo " ) ;
a - > setEnabled ( cs ? cs - > undo ( ) - > canUndo ( ) : false ) ;
a = getAction ( " redo " ) ;
a - > setEnabled ( cs ? cs - > undo ( ) - > canRedo ( ) : false ) ;
2012-05-26 14:49:10 +02:00
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// cmd
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : cmd ( QAction * a , const QString & cmd )
2012-05-26 14:49:10 +02:00
{
if ( cmd = = " instruments " ) {
editInstrList ( ) ;
2013-04-03 12:13:23 +02:00
if ( mixer )
mixer - > updateAll ( cs ) ;
2012-05-26 14:49:10 +02:00
}
else if ( cmd = = " rewind " ) {
seq - > rewindStart ( ) ;
if ( playPanel )
2013-05-03 11:37:28 +02:00
playPanel - > heartBeat ( 0 , 0 , 0 ) ;
2012-05-26 14:49:10 +02:00
}
else if ( cmd = = " play-next-measure " )
seq - > nextMeasure ( ) ;
else if ( cmd = = " play-next-chord " )
seq - > nextChord ( ) ;
else if ( cmd = = " play-prev-measure " )
seq - > prevMeasure ( ) ;
else if ( cmd = = " play-prev-chord " )
seq - > prevChord ( ) ;
else if ( cmd = = " seek-begin " )
seq - > rewindStart ( ) ;
else if ( cmd = = " seek-end " )
seq - > seekEnd ( ) ;
else if ( cmd = = " keys " )
showKeyEditor ( ) ;
else if ( cmd = = " file-open " )
loadFiles ( ) ;
else if ( cmd = = " file-save " )
saveFile ( ) ;
2014-11-14 21:03:46 +01:00
else if ( cmd = = " file-save-online " )
showUploadScoreDialog ( ) ;
2012-05-26 14:49:10 +02:00
else if ( cmd = = " file-export " )
exportFile ( ) ;
else if ( cmd = = " file-part-export " )
exportParts ( ) ;
2015-03-10 19:43:22 +01:00
else if ( cmd = = " file-import-pdf " )
openExternalLink ( " https://musescore.com/import " ) ;
2012-05-26 14:49:10 +02:00
else if ( cmd = = " file-close " )
closeScore ( cs ) ;
2013-04-02 20:46:07 +02:00
else if ( cmd = = " file-save-as " )
2012-05-26 14:49:10 +02:00
saveAs ( cs , false ) ;
2013-04-02 20:46:07 +02:00
else if ( cmd = = " file-save-selection " )
2012-05-26 14:49:10 +02:00
saveSelection ( cs ) ;
2013-04-02 20:46:07 +02:00
else if ( cmd = = " file-save-a-copy " )
2012-05-26 14:49:10 +02:00
saveAs ( cs , true ) ;
else if ( cmd = = " file-new " )
newFile ( ) ;
2014-08-20 00:02:57 +02:00
else if ( cmd = = " quit " )
2012-05-26 14:49:10 +02:00
close ( ) ;
else if ( cmd = = " masterpalette " )
showMasterPalette ( ) ;
2014-08-20 00:02:57 +02:00
else if ( cmd = = " key-signatures " )
showMasterPalette ( tr ( " Key Signatures " ) ) ;
else if ( cmd = = " time-signatures " )
showMasterPalette ( tr ( " Time Signatures " ) ) ;
else if ( cmd = = " symbols " )
showMasterPalette ( tr ( " Symbols " ) ) ;
2012-05-26 14:49:10 +02:00
else if ( cmd = = " toggle-statusbar " ) {
preferences . showStatusBar = a - > isChecked ( ) ;
2012-05-31 16:24:35 +02:00
_statusBar - > setVisible ( preferences . showStatusBar ) ;
2012-05-26 14:49:10 +02:00
preferences . write ( ) ;
}
else if ( cmd = = " append-measures " )
cmdAppendMeasures ( ) ;
else if ( cmd = = " insert-measures " )
cmdInsertMeasures ( ) ;
else if ( cmd = = " debugger " )
startDebugger ( ) ;
else if ( cmd = = " album " )
showAlbumManager ( ) ;
else if ( cmd = = " layer " )
showLayerManager ( ) ;
2014-01-31 10:10:21 +01:00
else if ( cmd = = " backspace " ) {
2014-12-03 16:49:28 +01:00
if ( _sstate ! = STATE_NORMAL )
2014-12-15 13:31:59 +01:00
undoRedo ( true ) ;
2014-01-31 10:10:21 +01:00
# ifdef Q_OS_MAC
2014-12-03 16:49:28 +01:00
else if ( cs ) {
cs - > startCmd ( ) ;
2014-01-31 10:10:21 +01:00
cs - > cmdDeleteSelection ( ) ;
2014-12-03 16:49:28 +01:00
cs - > endCmd ( ) ;
}
2014-01-31 10:10:21 +01:00
# endif
}
2012-05-26 14:49:10 +02:00
else if ( cmd = = " zoomin " )
incMag ( ) ;
else if ( cmd = = " zoomout " )
decMag ( ) ;
2015-07-08 15:56:05 +02:00
else if ( cmd = = " zoom100 " ) {
2015-07-08 18:02:16 +02:00
if ( cv )
2015-07-08 15:56:05 +02:00
cv - > setMag ( MagIdx : : MAG_100 , 1.0 ) ;
setMag ( 1.0 ) ;
}
2012-05-26 14:49:10 +02:00
else if ( cmd = = " midi-on " )
midiinToggled ( a - > isChecked ( ) ) ;
2014-12-15 13:31:59 +01:00
else if ( cmd = = " undo " )
undoRedo ( true ) ;
else if ( cmd = = " redo " )
undoRedo ( false ) ;
2012-05-26 14:49:10 +02:00
else if ( cmd = = " toggle-palette " )
showPalette ( a - > isChecked ( ) ) ;
2014-11-10 10:05:25 +01:00
else if ( cmd = = " startcenter " )
showStartcenter ( a - > isChecked ( ) ) ;
2012-05-26 14:49:10 +02:00
else if ( cmd = = " inspector " )
showInspector ( a - > isChecked ( ) ) ;
# ifdef OMR
else if ( cmd = = " omr " )
showOmrPanel ( a - > isChecked ( ) ) ;
# endif
else if ( cmd = = " toggle-playpanel " )
showPlayPanel ( a - > isChecked ( ) ) ;
else if ( cmd = = " toggle-navigator " )
showNavigator ( a - > isChecked ( ) ) ;
2013-04-28 21:29:12 +02:00
else if ( cmd = = " toggle-midiimportpanel " )
2013-09-25 21:53:52 +02:00
importmidiPanel - > setVisible ( a - > isChecked ( ) ) ;
2012-05-26 14:49:10 +02:00
else if ( cmd = = " toggle-mixer " )
showMixer ( a - > isChecked ( ) ) ;
else if ( cmd = = " synth-control " )
2013-04-24 12:41:38 +02:00
showSynthControl ( a - > isChecked ( ) ) ;
2014-06-02 12:12:53 +02:00
else if ( cmd = = " toggle-selection-window " )
showSelectionWindow ( a - > isChecked ( ) ) ;
2012-05-26 14:49:10 +02:00
else if ( cmd = = " show-keys " )
;
2014-12-05 13:56:15 +01:00
// else if (cmd == "toggle-transport")
// transportTools->setVisible(!transportTools->isVisible());
// else if (cmd == "toggle-noteinput")
// entryTools->setVisible(!entryTools->isVisible());
2015-02-19 19:55:17 +01:00
else if ( cmd = = " local-help " )
showContextHelp ( ) ;
2012-05-26 14:49:10 +02:00
else if ( cmd = = " follow " )
preferences . followSong = a - > isChecked ( ) ;
else if ( cmd = = " split-h " )
splitWindow ( true ) ;
else if ( cmd = = " split-v " )
splitWindow ( false ) ;
else if ( cmd = = " edit-harmony " )
editChordStyle ( ) ;
else if ( cmd = = " parts " )
startExcerptsDialog ( ) ;
else if ( cmd = = " fullscreen " ) {
_fullscreen = a - > isChecked ( ) ;
if ( _fullscreen )
showFullScreen ( ) ;
else
showNormal ( ) ;
2013-05-16 16:12:22 +02:00
# ifdef Q_OS_MAC
2012-05-26 14:49:10 +02:00
// Qt Bug: Toolbar goes into unified mode
// after switching back from fullscreen
setUnifiedTitleAndToolBarOnMac ( false ) ;
# endif
}
else if ( cmd = = " config-raster " )
editRaster ( ) ;
else if ( cmd = = " hraster " | | cmd = = " vraster " ) // value in [hv]RasterAction already set
;
2014-12-22 09:56:39 +01:00
else if ( cmd = = " toggle-piano " )
2012-05-26 14:49:10 +02:00
showPianoKeyboard ( a - > isChecked ( ) ) ;
2012-07-02 18:05:10 +02:00
else if ( cmd = = " plugin-creator " )
showPluginCreator ( a ) ;
2013-10-05 12:03:30 +02:00
else if ( cmd = = " plugin-manager " )
2014-09-01 22:35:04 +02:00
showPluginManager ( ) ;
2013-09-30 18:38:05 +02:00
else if ( cmd = = " resource-manager " ) {
ResourceManager r ( 0 ) ;
r . exec ( ) ;
}
2012-05-26 14:49:10 +02:00
else if ( cmd = = " media " )
showMediaDialog ( ) ;
else if ( cmd = = " page-settings " )
showPageSettings ( ) ;
else if ( cmd = = " next-score " )
2012-08-20 14:34:10 +02:00
changeScore ( 1 ) ;
2012-05-26 14:49:10 +02:00
else if ( cmd = = " previous-score " )
2012-08-20 14:34:10 +02:00
changeScore ( 1 ) ;
2012-05-26 14:49:10 +02:00
else if ( cmd = = " transpose " )
transpose ( ) ;
else if ( cmd = = " save-style " ) {
QString name = getStyleFilename ( false ) ;
if ( ! name . isEmpty ( ) ) {
if ( ! cs - > saveStyle ( name ) ) {
QMessageBox : : critical ( this ,
2014-02-27 19:57:24 +01:00
tr ( " MuseScore: Save Style " ) , MScore : : lastError ) ;
2012-05-26 14:49:10 +02:00
}
}
}
else if ( cmd = = " load-style " ) {
QString name = mscore - > getStyleFilename ( true ) ;
if ( ! name . isEmpty ( ) ) {
cs - > startCmd ( ) ;
if ( ! cs - > loadStyle ( name ) ) {
QMessageBox : : critical ( this ,
2014-02-27 19:57:24 +01:00
tr ( " MuseScore: Load Style " ) , MScore : : lastError ) ;
2012-05-26 14:49:10 +02:00
}
cs - > endCmd ( ) ;
}
}
else if ( cmd = = " edit-style " ) {
EditStyle es ( cs , this ) ;
es . exec ( ) ;
}
else if ( cmd = = " edit-text-style " ) {
TextStyleDialog es ( 0 , cs ) ;
es . exec ( ) ;
}
else if ( cmd = = " edit-info " ) {
MetaEditDialog med ( cs , 0 ) ;
med . exec ( ) ;
}
else if ( cmd = = " print " )
printFile ( ) ;
else if ( cmd = = " repeat " ) {
MScore : : playRepeats = ! MScore : : playRepeats ;
cs - > updateRepeatList ( MScore : : playRepeats ) ;
2014-06-30 16:53:36 +02:00
emit cs - > playlistChanged ( ) ;
2012-05-26 14:49:10 +02:00
}
else if ( cmd = = " pan " )
MScore : : panPlayback = ! MScore : : panPlayback ;
else if ( cmd = = " show-invisible " )
cs - > setShowInvisible ( a - > isChecked ( ) ) ;
else if ( cmd = = " show-unprintable " )
cs - > setShowUnprintable ( a - > isChecked ( ) ) ;
else if ( cmd = = " show-frames " )
cs - > setShowFrames ( getAction ( cmd . toLatin1 ( ) . data ( ) ) - > isChecked ( ) ) ;
else if ( cmd = = " show-pageborders " )
cs - > setShowPageborders ( getAction ( cmd . toLatin1 ( ) . data ( ) ) - > isChecked ( ) ) ;
else if ( cmd = = " tempo " )
addTempo ( ) ;
2013-08-09 01:20:07 +02:00
else if ( cmd = = " loop " ) {
2013-08-23 03:32:16 +02:00
if ( loop ( ) ) {
2014-05-24 12:53:50 +02:00
if ( cs - > selection ( ) . isRange ( ) )
2013-08-22 18:29:25 +02:00
seq - > setLoopSelection ( ) ;
2013-08-19 08:53:30 +02:00
}
}
2013-08-09 01:20:07 +02:00
else if ( cmd = = " loop-in " ) {
2013-08-23 03:32:16 +02:00
seq - > setLoopIn ( ) ;
2013-10-18 12:21:01 +02:00
loopAction - > setChecked ( true ) ;
2013-08-19 08:53:30 +02:00
}
2013-08-09 01:20:07 +02:00
else if ( cmd = = " loop-out " ) {
2013-08-23 03:32:16 +02:00
seq - > setLoopOut ( ) ;
2013-10-18 12:21:01 +02:00
loopAction - > setChecked ( true ) ;
2013-08-19 08:53:30 +02:00
}
2012-05-26 14:49:10 +02:00
else if ( cmd = = " metronome " ) // no action
;
2013-10-15 09:36:17 +02:00
else if ( cmd = = " countin " ) // no action
;
2013-02-21 11:04:41 +01:00
else if ( cmd = = " lock " ) {
if ( _sstate = = STATE_LOCK )
changeState ( STATE_NORMAL ) ;
else
changeState ( STATE_LOCK ) ;
}
2013-04-23 16:20:02 +02:00
else if ( cmd = = " find " )
showSearchDialog ( ) ;
2014-02-12 14:39:44 +01:00
else if ( cmd = = " text-b " ) {
if ( _textTools )
_textTools - > toggleBold ( ) ;
}
else if ( cmd = = " text-i " ) {
if ( _textTools )
_textTools - > toggleItalic ( ) ;
}
else if ( cmd = = " text-u " ) {
if ( _textTools )
_textTools - > toggleUnderline ( ) ;
}
2014-11-17 13:06:34 +01:00
else if ( cmd = = " viewmode " ) {
if ( cs ) {
if ( cs - > layoutMode ( ) = = LayoutMode : : PAGE )
switchLayoutMode ( 1 ) ;
else
switchLayoutMode ( 0 ) ;
}
}
2012-05-26 14:49:10 +02:00
else {
if ( cv ) {
2014-05-29 21:28:20 +02:00
//isAncestorOf is called to see if a widget from inspector has focus
//if so, the focus doesn't get shifted to the score, unless escape is
//pressed, or the user clicks in the score
2014-08-29 19:18:39 +02:00
if ( ! inspector ( ) - > isAncestorOf ( qApp - > focusWidget ( ) ) | | cmd = = " escape " )
2014-05-29 21:28:20 +02:00
cv - > setFocus ( ) ;
2012-05-26 14:49:10 +02:00
cv - > cmd ( a ) ;
}
else
qDebug ( " 2:unknown cmd <%s> " , qPrintable ( cmd ) ) ;
}
if ( debugger )
debugger - > reloadClicked ( ) ;
}
//---------------------------------------------------------
// openExternalLink
//---------------------------------------------------------
void MuseScore : : openExternalLink ( const QString & url )
{
QDesktopServices : : openUrl ( url ) ;
}
//---------------------------------------------------------
// navigator
//---------------------------------------------------------
Navigator * MuseScore : : navigator ( ) const
{
return _navigator ? static_cast < Navigator * > ( _navigator - > widget ( ) ) : 0 ;
}
2014-08-27 21:38:00 +02:00
//---------------------------------------------------------
// getSearchDialog
//---------------------------------------------------------
2014-08-30 09:04:40 +02:00
QWidget * MuseScore : : searchDialog ( ) const
2014-08-27 21:38:00 +02:00
{
2014-08-30 09:04:40 +02:00
return _searchDialog ;
2014-08-27 21:38:00 +02:00
}
2012-05-26 14:49:10 +02:00
//---------------------------------------------------------
// updateLayer
//---------------------------------------------------------
void MuseScore : : updateLayer ( )
{
layerSwitch - > clear ( ) ;
bool enable ;
if ( cs ) {
enable = cs - > layer ( ) . size ( ) > 1 ;
if ( enable ) {
foreach ( const Layer & l , cs - > layer ( ) )
layerSwitch - > addItem ( l . name ) ;
layerSwitch - > setCurrentIndex ( cs - > currentLayer ( ) ) ;
}
}
else
enable = false ;
layerSwitch - > setVisible ( enable ) ;
}
//---------------------------------------------------------
// updatePlayMode
//---------------------------------------------------------
void MuseScore : : updatePlayMode ( )
{
bool enable = false ;
if ( cs ) {
enable = cs - > audio ( ) ! = 0 ;
playMode - > setCurrentIndex ( int ( cs - > playMode ( ) ) ) ;
}
playMode - > setVisible ( enable ) ;
}
//---------------------------------------------------------
// closeScore
//---------------------------------------------------------
void MuseScore : : closeScore ( Score * score )
{
2014-11-29 11:09:56 +01:00
// Let's compute maximum count of ports in remaining scores
if ( seq )
seq - > recomputeMaxMidiOutPort ( ) ;
2012-05-26 14:49:10 +02:00
removeTab ( scoreList . indexOf ( score - > rootScore ( ) ) ) ;
}
//---------------------------------------------------------
// noteTooShortForTupletDialog
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
void MuseScore : : noteTooShortForTupletDialog ( )
{
2014-02-27 19:57:24 +01:00
QMessageBox : : warning ( this , tr ( " MuseScore: Warning " ) ,
2014-08-22 16:25:50 +02:00
tr ( " Cannot create tuplet: Note value is too short " )
2013-05-13 18:49:17 +02:00
) ;
}
//---------------------------------------------------------
// instrumentChanged
//---------------------------------------------------------
void MuseScore : : instrumentChanged ( )
{
if ( mixer )
mixer - > updateAll ( cs ) ;
}
//---------------------------------------------------------
// changeScore
// switch current score
// step = 1 switch to next score
// step = -1 switch to previous score
//---------------------------------------------------------
void MuseScore : : changeScore ( int step )
{
int index = tab1 - > currentIndex ( ) ;
int n = tab1 - > count ( ) ;
if ( n = = 1 )
return ;
index + = step ;
if ( index > = n )
index = 0 ;
if ( index < 0 )
index = n - 1 ;
setCurrentScoreView ( index ) ;
}
//---------------------------------------------------------
// switchLayoutMode
//---------------------------------------------------------
void MuseScore : : switchLayoutMode ( int val )
{
if ( cs ) {
2014-11-17 13:06:34 +01:00
cs - > startCmd ( ) ;
LayoutMode mode ;
2014-12-14 23:17:24 +01:00
// find a measure to use as reference, if possible
QRectF view = cv - > toLogical ( QRect ( 0.0 , 0.0 , width ( ) , height ( ) ) ) ;
2014-12-18 01:20:52 +01:00
Measure * m = cs - > firstMeasure ( ) ;
2014-12-14 23:17:24 +01:00
while ( m & & ! view . intersects ( m - > canvasBoundingRect ( ) ) )
2014-12-18 01:20:52 +01:00
m = m - > nextMeasureMM ( ) ;
2013-05-13 18:49:17 +02:00
if ( val = = 0 )
2014-11-17 13:06:34 +01:00
mode = LayoutMode : : PAGE ;
2013-05-13 18:49:17 +02:00
else
2014-11-17 13:06:34 +01:00
mode = LayoutMode : : LINE ;
cs - > undo ( new ChangeLayoutMode ( cs , mode ) ) ;
2014-05-05 22:07:54 +02:00
cv - > loopUpdate ( getAction ( " loop " ) - > isChecked ( ) ) ;
2014-11-17 13:06:34 +01:00
cs - > endCmd ( ) ;
2014-12-14 23:17:24 +01:00
// adjustCanvasPosition often tries to preserve Y position
// but this doesn't make sense when switching modes
// also, better positioning is usually achieved if you start from the top
// and there is really no better place to position canvas if we were all the way off page previously
cv - > pageTop ( ) ;
2014-12-18 01:20:52 +01:00
if ( m & & m ! = cs - > firstMeasure ( ) )
2014-12-14 23:17:24 +01:00
cv - > adjustCanvasPosition ( m , false ) ;
2013-05-13 18:49:17 +02:00
}
}
//---------------------------------------------------------
// showDrumTools
//---------------------------------------------------------
2015-02-04 19:51:24 +01:00
void MuseScore : : showDrumTools ( const Drumset * drumset , Staff * staff )
2013-05-13 18:49:17 +02:00
{
if ( drumset ) {
if ( ! _drumTools ) {
_drumTools = new DrumTools ( this ) ;
addDockWidget ( Qt : : BottomDockWidgetArea , _drumTools ) ;
}
_drumTools - > setDrumset ( cs , staff , drumset ) ;
_drumTools - > show ( ) ;
}
else {
if ( _drumTools )
_drumTools - > hide ( ) ;
}
}
//---------------------------------------------------------
// updateDrumTools
//---------------------------------------------------------
2015-03-17 11:50:59 +01:00
void MuseScore : : updateDrumTools ( const Drumset * ds )
2013-05-13 18:49:17 +02:00
{
if ( _drumTools )
2015-03-17 11:50:59 +01:00
_drumTools - > updateDrumset ( ds ) ;
2013-05-13 18:49:17 +02:00
}
2014-11-15 16:29:48 +01:00
//---------------------------------------------------------
// endSearch
//---------------------------------------------------------
void MuseScore : : endSearch ( )
{
_searchDialog - > hide ( ) ;
if ( cv )
cv - > setFocus ( ) ;
}
//---------------------------------------------------------
2013-05-13 18:49:17 +02:00
// showSearchDialog
//---------------------------------------------------------
void MuseScore : : showSearchDialog ( )
{
2014-08-30 09:04:40 +02:00
if ( _searchDialog = = 0 ) {
_searchDialog = new QWidget ;
_searchDialog - > setSizePolicy ( QSizePolicy : : Expanding , QSizePolicy : : Maximum ) ;
2013-05-13 18:49:17 +02:00
QHBoxLayout * searchDialogLayout = new QHBoxLayout ;
2014-08-30 09:04:40 +02:00
_searchDialog - > setLayout ( searchDialogLayout ) ;
layout - > insertWidget ( 2 , _searchDialog ) ;
2013-05-13 18:49:17 +02:00
QToolButton * searchExit = new QToolButton ;
2013-05-09 18:46:51 +02:00
searchExit - > setAutoRaise ( true ) ;
2014-09-18 00:12:21 +02:00
searchExit - > setIcon ( * icons [ int ( Icons : : close_ICON ) ] ) ;
2013-05-13 18:49:17 +02:00
connect ( searchExit , SIGNAL ( clicked ( ) ) , SLOT ( endSearch ( ) ) ) ;
searchDialogLayout - > addWidget ( searchExit ) ;
2013-05-09 18:46:51 +02:00
searchDialogLayout - > addSpacing ( 10 ) ;
2013-05-13 18:49:17 +02:00
searchDialogLayout - > addWidget ( new QLabel ( tr ( " Go To: " ) ) ) ;
2015-02-01 20:50:01 +01:00
searchCombo = new SearchComboBox ;
2013-05-13 18:49:17 +02:00
searchDialogLayout - > addWidget ( searchCombo ) ;
searchDialogLayout - > addStretch ( 10 ) ;
2014-08-30 09:04:40 +02:00
_searchDialog - > hide ( ) ;
2013-05-13 18:49:17 +02:00
2014-03-04 16:48:06 +01:00
qDebug ( " Line edit %p " , searchCombo - > lineEdit ( ) ) ;
2013-05-13 18:49:17 +02:00
// does not work: connect(searchCombo->lineEdit(), SIGNAL(returnPressed()), SLOT(endSearch()));
connect ( searchCombo - > lineEdit ( ) , SIGNAL ( editingFinished ( ) ) , SLOT ( endSearch ( ) ) ) ;
}
searchCombo - > clearEditText ( ) ;
searchCombo - > setFocus ( ) ;
2014-08-30 09:04:40 +02:00
_searchDialog - > show ( ) ;
2013-05-13 18:49:17 +02:00
}
# ifndef SCRIPT_INTERFACE
void MuseScore : : pluginTriggered ( int ) { }
void MuseScore : : loadPlugins ( ) { }
bool MuseScore : : loadPlugin ( const QString & ) { return false ; }
void MuseScore : : unloadPlugins ( ) { }
# endif
2014-11-13 10:22:05 +01:00
//---------------------------------------------------------
// recentScores
2014-12-08 14:41:36 +01:00
// return a list of recent scores
// omit loaded scores
2014-11-13 10:22:05 +01:00
//---------------------------------------------------------
QFileInfoList MuseScore : : recentScores ( ) const
{
QFileInfoList fil ;
for ( const QString & s : _recentScores ) {
if ( s . isEmpty ( ) )
continue ;
QString data ( s ) ;
QFileInfo fi ( s ) ;
bool alreadyLoaded = false ;
QString fp = fi . canonicalFilePath ( ) ;
for ( Score * s : mscore - > scores ( ) ) {
2014-12-08 14:41:36 +01:00
if ( ( s - > fileInfo ( ) - > canonicalFilePath ( ) = = fp ) | | ( s - > importedFilePath ( ) = = fp ) ) {
2014-11-13 10:22:05 +01:00
alreadyLoaded = true ;
break ;
}
}
if ( ! alreadyLoaded & & fi . exists ( ) )
fil . append ( fi ) ;
}
return fil ;
}
2014-11-14 13:17:56 +01:00
2013-05-13 18:49:17 +02:00
}
using namespace Ms ;
//---------------------------------------------------------
// main
//---------------------------------------------------------
int main ( int argc , char * av [ ] )
{
2015-01-07 17:16:58 +01:00
QApplication : : setDesktopSettingsAware ( true ) ;
2013-05-16 16:12:22 +02:00
# if defined(QT_DEBUG) && defined(Q_OS_WIN)
2014-03-04 13:06:23 +01:00
qInstallMessageHandler ( mscoreMessageHandler ) ;
2013-05-13 18:49:17 +02:00
# endif
QFile f ( " :/revision.h " ) ;
f . open ( QIODevice : : ReadOnly ) ;
revision = QString ( f . readAll ( ) ) . trimmed ( ) ;
f . close ( ) ;
2015-05-06 17:38:18 +02:00
MuseScoreApplication * app ;
if ( MuseScore : : unstable ( ) ) {
app = new MuseScoreApplication ( " mscore-dev " , argc , av ) ;
QCoreApplication : : setApplicationName ( " MuseScoreDevelopment " ) ;
}
else {
app = new MuseScoreApplication ( " mscore2 " , argc , av ) ;
QCoreApplication : : setApplicationName ( " MuseScore2 " ) ;
}
2013-05-13 18:49:17 +02:00
QCoreApplication : : setOrganizationName ( " MuseScore " ) ;
QCoreApplication : : setOrganizationDomain ( " musescore.org " ) ;
2015-03-09 17:20:23 +01:00
QCoreApplication : : setApplicationVersion ( VERSION ) ;
2014-07-10 14:13:37 +02:00
QAccessible : : installFactory ( AccessibleScoreView : : ScoreViewFactory ) ;
2015-02-01 20:50:01 +01:00
QAccessible : : installFactory ( AccessibleSearchBox : : SearchBoxFactory ) ;
2014-11-24 20:23:01 +01:00
QAccessible : : installFactory ( Awl : : AccessibleAbstractSlider : : AbstractSliderFactory ) ;
2013-05-13 18:49:17 +02:00
Q_INIT_RESOURCE ( zita ) ;
2013-05-16 16:12:22 +02:00
# ifndef Q_OS_MAC
2013-05-13 18:49:17 +02:00
QSettings : : setDefaultFormat ( QSettings : : IniFormat ) ;
# endif
2015-05-06 17:38:18 +02:00
QCommandLineParser parser ;
parser . addHelpOption ( ) ; // -?, -h, --help
parser . addVersionOption ( ) ; // -v, --version
2015-05-06 09:08:20 +02:00
2015-05-06 19:31:32 +02:00
//parser.addOption(QCommandLineOption({"v", "version"}, "Print version")); // see above
parser . addOption ( QCommandLineOption ( " long-version " , " Print detailed version information " ) ) ;
parser . addOption ( QCommandLineOption ( { " d " , " debug " } , " Debug mode " ) ) ;
parser . addOption ( QCommandLineOption ( { " L " , " layout-debug " } , " Layout debug " ) ) ;
parser . addOption ( QCommandLineOption ( { " s " , " no-synthesizer " } , " No internal synthesizer " ) ) ;
parser . addOption ( QCommandLineOption ( { " m " , " no-midi " } , " No midi " ) ) ;
parser . addOption ( QCommandLineOption ( { " a " , " use-audio " } , " Use audio driver: jack, alsa, pulse, or portaudio " , " driver " ) ) ;
parser . addOption ( QCommandLineOption ( { " n " , " new-score " } , " Start with new score " ) ) ;
parser . addOption ( QCommandLineOption ( { " I " , " dump-midi-in " } , " Dump midi input " ) ) ;
parser . addOption ( QCommandLineOption ( { " O " , " dump-midi-out " } , " Dump midi output " ) ) ;
parser . addOption ( QCommandLineOption ( { " o " , " export-to " } , " Export to 'file'; format depends on file extension " , " file " ) ) ;
parser . addOption ( QCommandLineOption ( { " r " , " image-resolution " } , " Set output resolution for image export " , " dpi " ) ) ;
parser . addOption ( QCommandLineOption ( { " T " , " trim-image " } , " Trim exported image with specified margin (in pixels) " , " margin " ) ) ;
parser . addOption ( QCommandLineOption ( { " x " , " gui-scaling " } , " Set scaling factor for GUI elements " , " factor " ) ) ;
parser . addOption ( QCommandLineOption ( { " S " , " style " } , " Load style file " , " style " ) ) ;
parser . addOption ( QCommandLineOption ( { " p " , " plugin " } , " Execure named plugin " , " name " ) ) ;
parser . addOption ( QCommandLineOption ( " template-mode " , " Save template mode, no page size " ) ) ;
parser . addOption ( QCommandLineOption ( { " F " , " factory-settings " } , " Use factory settings " ) ) ;
parser . addOption ( QCommandLineOption ( { " R " , " revert-settings " } , " Revert to default preferences " ) ) ;
parser . addOption ( QCommandLineOption ( { " i " , " load-icons " } , " Load icons from INSTALLPATH/icons " ) ) ;
parser . addOption ( QCommandLineOption ( { " e " , " experimental " } , " Enable experimental features " ) ) ;
parser . addOption ( QCommandLineOption ( { " c " , " config-folder " } , " Override config/settings folder " , " dir " ) ) ;
parser . addOption ( QCommandLineOption ( { " t " , " test-mode " } , " Set testMode flag for all files " ) ) ;
parser . addOption ( QCommandLineOption ( { " M " , " midi-operations " } , " Specify MIDI import operations file " , " file " ) ) ;
parser . addOption ( QCommandLineOption ( { " w " , " no-webview " } , " No web view in start center " ) ) ;
2015-05-06 09:08:20 +02:00
parser . addOption ( QCommandLineOption ( { " P " , " export-score-parts " } , " used with -o <file>.pdf, export score + parts " ) ) ;
2015-05-06 17:38:18 +02:00
parser . addPositionalArgument ( " scorefiles " , " The files to open " , " [scorefile...] " ) ;
parser . process ( QCoreApplication : : arguments ( ) ) ;
//if (parser.isSet("v")) parser.showVersion(); // a) needs Qt >= 5.4 , b) instead we use addVersionOption()
if ( parser . isSet ( " long-version " ) ) {
printVersion ( " MuseScore " ) ;
return EXIT_SUCCESS ;
}
MScore : : debugMode = parser . isSet ( " d " ) ;
MScore : : layoutDebug = parser . isSet ( " L " ) ;
noSeq = parser . isSet ( " s " ) ;
noMidi = parser . isSet ( " m " ) ;
if ( parser . isSet ( " a " ) ) {
audioDriver = parser . value ( " a " ) ;
if ( audioDriver . isEmpty ( ) )
parser . showHelp ( EXIT_FAILURE ) ;
}
startWithNewScore = parser . isSet ( " n " ) ;
externalIcons = parser . isSet ( " i " ) ;
midiInputTrace = parser . isSet ( " I " ) ;
midiOutputTrace = parser . isSet ( " O " ) ;
if ( ( converterMode = parser . isSet ( " o " ) ) ) {
MScore : : noGui = true ;
outFileName = parser . value ( " o " ) ;
if ( outFileName . isEmpty ( ) )
parser . showHelp ( EXIT_FAILURE ) ;
}
if ( ( pluginMode = parser . isSet ( " p " ) ) ) {
MScore : : noGui = true ;
pluginName = parser . value ( " p " ) ;
if ( pluginName . isEmpty ( ) )
parser . showHelp ( EXIT_FAILURE ) ;
}
MScore : : saveTemplateMode = parser . isSet ( " template-mode " ) ;
if ( parser . isSet ( " r " ) ) {
QString temp = parser . value ( " r " ) ;
if ( temp . isEmpty ( ) )
parser . showHelp ( EXIT_FAILURE ) ;
converterDpi = temp . toDouble ( ) ;
}
if ( parser . isSet ( " T " ) ) {
QString temp = parser . value ( " T " ) ;
if ( temp . isEmpty ( ) )
parser . showHelp ( EXIT_FAILURE ) ;
trimMargin = temp . toInt ( ) ; // ToDo: check whether conversion went OK, set to -1 if not
}
if ( parser . isSet ( " x " ) ) {
QString temp = parser . value ( " x " ) ;
if ( temp . isEmpty ( ) )
parser . showHelp ( EXIT_FAILURE ) ;
guiScaling = temp . toDouble ( ) ; // ToDo: check whether conversion went OK, set to 1.0 if not
}
if ( parser . isSet ( " S " ) ) {
styleFile = parser . value ( " S " ) ;
if ( styleFile . isEmpty ( ) )
parser . showHelp ( EXIT_FAILURE ) ;
}
useFactorySettings = parser . isSet ( " F " ) ;
deletePreferences = ( useFactorySettings | | parser . isSet ( " R " ) ) ;
enableExperimental = parser . isSet ( " e " ) ;
if ( parser . isSet ( " c " ) ) {
QString path = parser . value ( " c " ) ;
if ( path . isEmpty ( ) )
parser . showHelp ( EXIT_FAILURE ) ;
QDir dir ;
if ( dir . exists ( path ) ) {
QSettings : : setPath ( QSettings : : IniFormat , QSettings : : UserScope , path ) ;
QSettings : : setPath ( QSettings : : IniFormat , QSettings : : SystemScope , path ) ;
dataPath = path ;
2013-05-13 18:49:17 +02:00
}
2013-02-21 11:04:41 +01:00
}
2015-05-06 17:38:18 +02:00
enableTestMode = parser . isSet ( " t " ) ;
if ( parser . isSet ( " M " ) ) {
QString temp = parser . value ( " M " ) ;
if ( temp . isEmpty ( ) )
parser . showHelp ( EXIT_FAILURE ) ;
preferences . midiImportOperations . setOperationsFile ( temp ) ;
}
noWebView = parser . isSet ( " w " ) ;
2015-05-06 09:08:20 +02:00
exportScoreParts = parser . isSet ( " export-score-parts " ) ;
if ( exportScoreParts & & ! converterMode )
parser . showHelp ( EXIT_FAILURE ) ;
2015-05-06 17:38:18 +02:00
QStringList argv = parser . positionalArguments ( ) ;
2013-05-13 18:49:17 +02:00
mscoreGlobalShare = getSharePath ( ) ;
2013-07-05 18:54:11 +02:00
iconPath = externalIcons ? mscoreGlobalShare + QString ( " icons/ " ) : QString ( " :/data/icons/ " ) ;
2013-05-13 18:49:17 +02:00
2015-03-04 16:44:03 +01:00
if ( ! converterMode & & ! pluginMode ) {
2013-05-13 18:49:17 +02:00
if ( ! argv . isEmpty ( ) ) {
int ok = true ;
foreach ( QString message , argv ) {
QFileInfo fi ( message ) ;
if ( ! app - > sendMessage ( fi . absoluteFilePath ( ) ) ) {
ok = false ;
break ;
}
}
if ( ok )
return 0 ;
2012-05-26 14:49:10 +02:00
}
else
2015-01-07 13:47:03 +01:00
if ( app - > sendMessage ( QString ( " " ) ) )
2013-05-13 18:49:17 +02:00
return 0 ;
2012-05-26 14:49:10 +02:00
}
2013-05-13 18:49:17 +02:00
if ( dataPath . isEmpty ( ) )
dataPath = QDesktopServices : : storageLocation ( QDesktopServices : : DataLocation ) ;
2014-06-03 15:28:10 +02:00
2014-05-13 14:47:18 +02:00
if ( deletePreferences ) {
QDir ( dataPath ) . removeRecursively ( ) ;
QSettings settings ;
QFile : : remove ( settings . fileName ( ) ) ;
}
2014-06-03 15:28:10 +02:00
2013-05-13 18:49:17 +02:00
// create local plugin directory
// if not already there:
2015-01-07 13:47:03 +01:00
QDir ( ) . mkpath ( dataPath + " /plugins " ) ;
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
if ( MScore : : debugMode )
qDebug ( " global share: <%s> " , qPrintable ( mscoreGlobalShare ) ) ;
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
// set translator before preferences are read to get
// translations for all shortcuts
//
if ( useFactorySettings )
localeName = " system " ;
2012-05-26 14:49:10 +02:00
else {
2013-05-13 18:49:17 +02:00
QSettings s ;
localeName = s . value ( " language " , " system " ) . toString ( ) ;
2012-05-26 14:49:10 +02:00
}
2014-06-03 15:28:10 +02:00
2013-05-13 18:49:17 +02:00
setMscoreLocale ( localeName ) ;
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
Shortcut : : init ( ) ;
preferences . init ( ) ;
2012-05-26 14:49:10 +02:00
2013-10-02 10:05:54 +02:00
QNetworkProxyFactory : : setUseSystemConfiguration ( true ) ;
2013-10-07 14:32:42 +02:00
QScreen * screen = QGuiApplication : : primaryScreen ( ) ;
MScore : : PDPI = screen - > physicalDotsPerInch ( ) ; // physical resolution
2013-10-20 18:46:46 +02:00
MScore : : DPI = screen - > logicalDotsPerInch ( ) ; // logical drawing resolution
2014-11-20 09:15:17 +01:00
MScore : : DPI * = guiScaling ;
2014-04-25 19:26:22 +02:00
MScore : : init ( ) ; // initialize libmscore
2014-05-19 15:19:36 +02:00
if ( ! MScore : : testMode ) {
QSizeF psf = QPrinter ( ) . paperSize ( QPrinter : : Inch ) ;
PaperSize ps ( " system " , psf . width ( ) , psf . height ( ) ) ;
PageFormat pf ;
pf . setSize ( & ps ) ;
2015-02-24 22:52:27 +01:00
pf . setPrintableWidth ( psf . width ( ) - 20.0 / INCH ) ;
2014-05-19 15:19:36 +02:00
MScore : : defaultStyle ( ) - > setPageFormat ( pf ) ;
}
2012-05-26 14:49:10 +02:00
2014-04-25 19:26:22 +02:00
# ifdef SCRIPT_INTERFACE
qmlRegisterType < QmlPlugin > ( " MuseScore " , 1 , 0 , " MuseScore " ) ;
# endif
2013-10-30 09:42:08 +01:00
if ( MScore : : debugMode ) {
2013-05-13 18:49:17 +02:00
qDebug ( " DPI %f " , MScore : : DPI ) ;
2012-05-26 14:49:10 +02:00
2013-10-30 09:42:08 +01:00
qDebug ( ) < < " Information for screen: " < < screen - > name ( ) ;
qDebug ( ) < < " Available geometry: " < < screen - > availableGeometry ( ) . x ( ) < < screen - > availableGeometry ( ) . y ( ) < < screen - > availableGeometry ( ) . width ( ) < < " x " < < screen - > availableGeometry ( ) . height ( ) ;
qDebug ( ) < < " Available size: " < < screen - > availableSize ( ) . width ( ) < < " x " < < screen - > availableSize ( ) . height ( ) ;
qDebug ( ) < < " Available virtual geometry: " < < screen - > availableVirtualGeometry ( ) . x ( ) < < screen - > availableVirtualGeometry ( ) . y ( ) < < screen - > availableVirtualGeometry ( ) . width ( ) < < " x " < < screen - > availableVirtualGeometry ( ) . height ( ) ;
qDebug ( ) < < " Available virtual size: " < < screen - > availableVirtualSize ( ) . width ( ) < < " x " < < screen - > availableVirtualSize ( ) . height ( ) ;
qDebug ( ) < < " Depth: " < < screen - > depth ( ) < < " bits " ;
qDebug ( ) < < " Geometry: " < < screen - > geometry ( ) . x ( ) < < screen - > geometry ( ) . y ( ) < < screen - > geometry ( ) . width ( ) < < " x " < < screen - > geometry ( ) . height ( ) ;
qDebug ( ) < < " Logical DPI: " < < screen - > logicalDotsPerInch ( ) ;
qDebug ( ) < < " Logical DPI X: " < < screen - > logicalDotsPerInchX ( ) ;
qDebug ( ) < < " Logical DPI Y: " < < screen - > logicalDotsPerInchY ( ) ;
qDebug ( ) < < " Physical DPI: " < < screen - > physicalDotsPerInch ( ) ;
qDebug ( ) < < " Physical DPI X: " < < screen - > physicalDotsPerInchX ( ) ;
qDebug ( ) < < " Physical DPI Y: " < < screen - > physicalDotsPerInchY ( ) ;
qDebug ( ) < < " Physical size: " < < screen - > physicalSize ( ) . width ( ) < < " x " < < screen - > physicalSize ( ) . height ( ) < < " mm " ;
qDebug ( ) < < " Refresh rate: " < < screen - > refreshRate ( ) < < " Hz " ;
qDebug ( ) < < " Size: " < < screen - > size ( ) . width ( ) < < " x " < < screen - > size ( ) . height ( ) ;
qDebug ( ) < < " Virtual geometry: " < < screen - > virtualGeometry ( ) . x ( ) < < screen - > virtualGeometry ( ) . y ( ) < < screen - > virtualGeometry ( ) . width ( ) < < " x " < < screen - > virtualGeometry ( ) . height ( ) ;
qDebug ( ) < < " Virtual size: " < < screen - > virtualSize ( ) . width ( ) < < " x " < < screen - > virtualSize ( ) . height ( ) ;
}
2013-10-08 20:03:34 +02:00
2013-05-13 18:49:17 +02:00
if ( ! useFactorySettings )
preferences . read ( ) ;
2012-05-26 14:49:10 +02:00
2013-11-12 15:10:08 +01:00
preferences . readDefaultStyle ( ) ;
2013-05-13 18:49:17 +02:00
if ( converterDpi = = 0 )
converterDpi = preferences . pngResolution ;
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
QSplashScreen * sc = 0 ;
2014-11-10 10:05:25 +01:00
QTimer * stimer = 0 ;
2014-02-28 11:14:43 +01:00
if ( ! MScore : : noGui & & preferences . showSplashScreen ) {
2014-12-18 21:02:04 +01:00
QPixmap pm ( " :/data/splash.png " ) ;
2013-05-13 18:49:17 +02:00
sc = new QSplashScreen ( pm ) ;
sc - > setWindowTitle ( QString ( " MuseScore Startup " ) ) ;
2014-05-12 15:58:57 +02:00
# ifdef Q_OS_MAC // to have session dialog on top of splashscreen on mac
sc - > setWindowFlags ( Qt : : FramelessWindowHint ) ;
# endif
2014-11-14 11:44:48 +01:00
// show splash screen for 5 sec
2014-11-10 10:05:25 +01:00
stimer = new QTimer ( 0 ) ;
qApp - > connect ( stimer , SIGNAL ( timeout ( ) ) , sc , SLOT ( close ( ) ) ) ;
stimer - > start ( 5000 ) ;
2013-05-13 18:49:17 +02:00
sc - > show ( ) ;
qApp - > processEvents ( ) ;
2012-05-26 14:49:10 +02:00
}
2015-03-04 15:54:50 +01:00
if ( ! converterMode & & ! pluginMode ) {
2014-11-14 11:44:48 +01:00
struct PaletteItem {
QPalette : : ColorRole role ;
const char * name ;
const char * color ;
} ;
MgStyle * st = new MgStyle ;
QApplication : : setStyle ( st ) ;
QPalette p ( QApplication : : palette ( ) ) ;
QSettings s ;
2012-05-26 14:49:10 +02:00
2014-11-14 11:44:48 +01:00
switch ( preferences . globalStyle ) {
case MuseScoreStyleType : : DARK : {
static const PaletteItem pi [ ] = {
{ QPalette : : Window , " WindowColor " , " #525252 " } ,
{ QPalette : : WindowText , " WindowTextColor " , " #FFFFFF " } ,
{ QPalette : : Base , " BaseColor " , " #424242 " } ,
{ QPalette : : AlternateBase , " AlternateBaseColor " , " #626262 " } ,
{ QPalette : : Text , " TextColor " , " #FFFFFF " } ,
{ QPalette : : Button , " ButtonColor " , " #525252 " } ,
{ QPalette : : ButtonText , " ButtonTextColor " , " #FFFFFF " } ,
{ QPalette : : BrightText , " BrightTextColor " , " #000000 " } ,
// { QPalette::Light, "LightColor", "#00FF00" },
// { QPalette::Midlight, "MidlightTextColor", "#00FF00" },
// { QPalette::Dark, "DarkTextColor", "#00FF00" },
// { QPalette::Mid, "MidColor", "#00FF00" },
// { QPalette::Shadow, "ShadowColor", "#00FF00" },
{ QPalette : : Highlight , " HighlightColor " , " #88bff6 " } ,
// { QPalette::HighlightedText, "HighlightedTextColor", "#00FF00" },
2015-02-18 11:35:09 +01:00
{ QPalette : : Link , " HighlightedTextColor " , " #00ffff " } ,
2015-02-27 12:59:27 +01:00
{ QPalette : : LinkVisited , " HighlightedTextColor " , " #00ffff " } ,
2014-11-14 11:44:48 +01:00
{ QPalette : : ToolTipBase , " ToolTipBaseColor " , " #808080 " } ,
{ QPalette : : ToolTipText , " ToolTipTextColor " , " #000000 " } ,
} ;
for ( auto i : pi )
p . setColor ( i . role , s . value ( i . name , i . color ) . value < QColor > ( ) ) ;
2013-05-13 18:49:17 +02:00
break ;
}
2014-07-01 15:06:21 +02:00
case MuseScoreStyleType : : LIGHT :
2014-11-14 11:44:48 +01:00
static const PaletteItem pi [ ] = {
{ QPalette : : Window , " WindowColor " , " #e3e3e3 " } ,
{ QPalette : : WindowText , " WindowTextColor " , " #333333 " } ,
{ QPalette : : Base , " BaseColor " , " #f9f9f9 " } ,
{ QPalette : : AlternateBase , " AlternateBaseColor " , " #eeeeee " } ,
{ QPalette : : Text , " TextColor " , " #333333 " } ,
{ QPalette : : Button , " ButtonColor " , " #c9c9c9 " } ,
{ QPalette : : ButtonText , " ButtonTextColor " , " #333333 " } ,
{ QPalette : : BrightText , " BrightTextColor " , " #000000 " } ,
{ QPalette : : ToolTipBase , " ToolTipBaseColor " , " #fefac2 " } ,
{ QPalette : : ToolTipText , " ToolTipTextColor " , " #000000 " } ,
2014-11-14 21:03:46 +01:00
{ QPalette : : Link , " LinkColor " , " #3a80c6 " } ,
2014-12-19 18:27:30 +01:00
{ QPalette : : LinkVisited , " LinkVisitedColor " , " #3a80c6 " } ,
2014-11-14 11:44:48 +01:00
} ;
for ( auto i : pi )
p . setColor ( i . role , s . value ( i . name , i . color ) . value < QColor > ( ) ) ;
2013-07-01 12:03:13 +02:00
break ;
2013-05-13 18:49:17 +02:00
}
2014-11-14 11:44:48 +01:00
QApplication : : setPalette ( p ) ;
2013-07-11 19:19:01 +02:00
qApp - > setStyleSheet (
" *:disabled { \n "
" color: gray \n "
" } \n "
2014-07-13 18:14:54 +02:00
" QGroupBox { \n "
" font-weight: bold; \n "
" } \n "
2013-07-11 19:19:01 +02:00
" QGroupBox::title { \n "
" subcontrol-origin: margin; subcontrol-position: top left; padding: 5px 5px; \n "
2014-09-12 11:34:57 +02:00
" } \n "
" QDockWidget { \n "
2014-04-16 18:46:25 +02:00
" border: 1px solid lightgray; \n "
2014-09-18 00:12:21 +02:00
" titlebar-close-icon: url(:/data/icons/png/window-close.png); \n "
" titlebar-normal-icon: url(:/data/icons/png/window-float.png); \n "
2014-04-16 18:46:25 +02:00
" } \n "
" QTabBar::close-button { \n "
2014-09-18 00:12:21 +02:00
" image: url(:/data/icons/png/window-close.png); \n "
2014-10-07 19:38:12 +02:00
" } \n "
2014-09-12 11:34:57 +02:00
" QTabBar::close-button:hover { \n "
2014-10-07 19:38:12 +02:00
" image: url(:/data/icons/png/window-close-hover.png); \n "
" } " ) ;
2013-08-13 19:10:08 +02:00
MgStyleConfigData : : animationsEnabled = preferences . animations ;
2014-03-14 15:39:37 +01:00
qApp - > setAttribute ( Qt : : AA_UseHighDpiPixmaps ) ;
2014-10-17 19:22:58 +02:00
}
else
noSeq = true ;
2013-07-16 18:16:16 +02:00
2014-10-17 19:22:58 +02:00
// Do not create sequencer and audio drivers if run with '-s'
if ( ! noSeq ) {
2013-05-13 18:49:17 +02:00
seq = new Seq ( ) ;
MScore : : seq = seq ;
Driver * driver = driverFactory ( seq , audioDriver ) ;
2014-10-17 19:22:58 +02:00
synti = synthesizerFactory ( ) ;
2013-05-13 18:49:17 +02:00
if ( driver ) {
MScore : : sampleRate = driver - > sampleRate ( ) ;
synti - > setSampleRate ( MScore : : sampleRate ) ;
synti - > init ( ) ;
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
seq - > setDriver ( driver ) ;
}
else {
2014-10-11 15:32:34 +02:00
// Do not delete the sequencer If we can't load driver.
// Allow user to select the working driver later.
MScore : : sampleRate = 44100 ; // Would be changed when user changes driver
synti - > setSampleRate ( MScore : : sampleRate ) ;
synti - > init ( ) ;
2013-05-13 18:49:17 +02:00
}
2014-10-11 15:32:34 +02:00
seq - > setMasterSynthesizer ( synti ) ;
2013-05-13 18:49:17 +02:00
}
2014-10-17 19:22:58 +02:00
else {
seq = 0 ;
MScore : : seq = 0 ;
}
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
//
// avoid font problems by overriding the environment
// fall back to "C" locale
//
2012-05-26 14:49:10 +02:00
2013-10-08 19:25:04 +02:00
//#ifndef Q_OS_WIN
//setenv("LANG", "C", 1);
//#endif
//QLocale::setDefault(QLocale(QLocale::C));
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
if ( MScore : : debugMode ) {
QStringList sl ( QCoreApplication : : libraryPaths ( ) ) ;
foreach ( const QString & s , sl )
qDebug ( " LibraryPath: <%s> " , qPrintable ( s ) ) ;
}
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
// rastral size of font is 20pt = 20/72 inch = 20*DPI/72 dots
// staff has 5 lines = 4 * _spatium
// _spatium = SPATIUM20 * DPI; // 20.0 / 72.0 * DPI / 4.0;
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
genIcons ( ) ;
2012-05-26 14:49:10 +02:00
2014-11-18 16:17:28 +01:00
if ( ! MScore : : noGui ) {
2015-02-10 16:15:56 +01:00
# ifndef Q_OS_MAC
2014-06-02 18:13:14 +02:00
qApp - > setWindowIcon ( * icons [ int ( Icons : : window_ICON ) ] ) ;
2015-02-10 16:15:56 +01:00
# endif
2014-11-18 16:17:28 +01:00
Workspace : : initWorkspace ( ) ;
}
2013-05-13 18:49:17 +02:00
mscore = new MuseScore ( ) ;
2014-07-23 17:08:48 +02:00
// create a score for internal use
gscore = new Score ( MScore : : baseStyle ( ) ) ;
2014-07-26 11:55:29 +02:00
gscore - > style ( ) - > set ( StyleIdx : : MusicalTextFont , QString ( " Bravura Text " ) ) ;
2014-03-20 20:02:17 +01:00
ScoreFont * scoreFont = ScoreFont : : fontFactory ( " Bravura " ) ;
gscore - > setScoreFont ( scoreFont ) ;
gscore - > setNoteHeadWidth ( scoreFont - > width ( SymId : : noteheadBlack , gscore - > spatium ( ) ) / ( MScore : : DPI * SPATIUM20 ) ) ;
2012-05-26 14:49:10 +02:00
2013-05-13 18:49:17 +02:00
if ( ! noSeq ) {
2014-10-11 15:32:34 +02:00
if ( ! seq - > init ( ) )
2013-05-13 18:49:17 +02:00
qDebug ( " sequencer init failed " ) ;
2012-08-15 17:43:31 +02:00
}
2013-05-13 18:49:17 +02:00
//read languages list
mscore - > readLanguages ( mscoreGlobalShare + " locale/languages.xml " ) ;
2013-04-23 16:20:02 +02:00
2013-05-13 18:49:17 +02:00
QApplication : : instance ( ) - > installEventFilter ( mscore ) ;
2015-01-29 00:19:44 +01:00
2013-05-13 18:49:17 +02:00
mscore - > setRevision ( revision ) ;
2013-04-23 16:20:02 +02:00
2013-05-13 18:49:17 +02:00
int files = 0 ;
2015-02-23 14:48:26 +01:00
bool restoredSession = false ;
2014-02-28 11:14:43 +01:00
if ( MScore : : noGui ) {
2014-08-17 12:43:16 +02:00
# ifdef Q_OS_MAC
// see issue #28706: Hangup in converter mode with MusicXML source
qApp - > processEvents ( ) ;
# endif
2013-05-13 18:49:17 +02:00
loadScores ( argv ) ;
2015-05-06 17:38:18 +02:00
exit ( processNonGui ( ) ? 0 : EXIT_FAILURE ) ;
2013-05-13 18:49:17 +02:00
}
else {
mscore - > readSettings ( ) ;
QObject : : connect ( qApp , SIGNAL ( messageReceived ( const QString & ) ) ,
mscore , SLOT ( handleMessage ( const QString & ) ) ) ;
2013-04-23 16:20:02 +02:00
2013-07-10 17:00:21 +02:00
static_cast < QtSingleApplication * > ( qApp ) - > setActivationWindow ( mscore , false ) ;
2013-06-24 22:07:44 +02:00
// count filenames specified on the command line
// these are the non-empty strings remaining in argv
2013-05-13 18:49:17 +02:00
foreach ( const QString & name , argv ) {
if ( ! name . isEmpty ( ) )
+ + files ;
}
# ifdef Q_WS_MAC
2013-06-24 22:07:44 +02:00
// app->paths contains files requested to be loaded by OS X
// append these to argv and update file count
foreach ( const QString & name , app - > paths ) {
if ( ! name . isEmpty ( ) ) {
argv < < name ;
+ + files ;
}
2013-05-13 18:49:17 +02:00
}
2013-06-24 22:07:44 +02:00
# endif
2013-05-13 18:49:17 +02:00
//
// TODO: delete old session backups
//
2015-02-23 14:48:26 +01:00
restoredSession = mscore - > restoreSession ( ( preferences . sessionStart = = SessionStart : : LAST & & ( files = = 0 ) ) ) ;
if ( ! restoredSession | | files )
2013-05-13 18:49:17 +02:00
loadScores ( argv ) ;
}
2013-07-17 14:36:34 +02:00
errorMessage = new QErrorMessage ( mscore ) ;
2013-05-13 18:49:17 +02:00
mscore - > loadPlugins ( ) ;
mscore - > writeSessionFile ( false ) ;
2013-04-23 16:20:02 +02:00
2013-05-16 16:12:22 +02:00
# ifdef Q_OS_MAC
2013-05-13 18:49:17 +02:00
// there's a bug in Qt showing the toolbar unified after switching showFullScreen(), showMaximized(),
// showNormal()...
mscore - > setUnifiedTitleAndToolBarOnMac ( false ) ;
# endif
2013-04-23 16:20:02 +02:00
2013-05-13 18:49:17 +02:00
mscore - > changeState ( mscore - > noScore ( ) ? STATE_DISABLED : STATE_NORMAL ) ;
mscore - > show ( ) ;
2013-04-23 16:20:02 +02:00
2013-05-13 18:49:17 +02:00
if ( mscore - > hasToCheckForUpdate ( ) )
mscore - > checkForUpdate ( ) ;
2014-11-14 11:44:48 +01:00
2015-06-26 15:59:29 +02:00
if ( ! scoresOnCommandline & & preferences . showStartcenter & & ( ! restoredSession | | mscore - > scores ( ) . size ( ) = = 0 ) ) {
2015-02-23 17:34:40 +01:00
# ifdef Q_OS_MAC
// ugly, but on mac we get an event when a file is open.
// We can't get the event when the startcenter is shown.
// So we let the event loop run a bit before showing the start center.
2015-02-23 18:11:14 +01:00
QTimer * timer = new QTimer ( ) ;
timer - > setSingleShot ( true ) ;
QObject : : connect ( timer , & QTimer : : timeout , [ = ] ( ) {
2015-02-23 17:34:40 +01:00
if ( ! scoresOnCommandline ) {
getAction ( " startcenter " ) - > setChecked ( true ) ;
mscore - > showStartcenter ( true ) ;
}
2015-02-23 18:11:14 +01:00
timer - > deleteLater ( ) ;
} ) ;
timer - > start ( 500 ) ;
2015-02-23 17:34:40 +01:00
# else
2015-02-26 14:34:07 +01:00
2014-11-10 12:30:53 +01:00
getAction ( " startcenter " ) - > setChecked ( true ) ;
2014-11-10 10:05:25 +01:00
mscore - > showStartcenter ( true ) ;
2015-02-23 17:34:40 +01:00
# endif
2014-11-10 12:30:53 +01:00
}
2015-02-23 17:34:40 +01:00
2015-02-26 14:34:07 +01:00
mscore - > showPlayPanel ( preferences . showPlayPanel ) ;
2015-02-23 17:34:40 +01:00
2013-05-13 18:49:17 +02:00
return qApp - > exec ( ) ;
2013-04-23 16:20:02 +02:00
}