256 lines
6.7 KiB
C++
256 lines
6.7 KiB
C++
//=============================================================================
|
|
// MuseScore
|
|
// Linux Music Score Editor
|
|
//
|
|
// Copyright (C) 2009-2012 Werner Schweer and others
|
|
//
|
|
// This program is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License version 2.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program; if not, write to the Free Software
|
|
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
//=============================================================================
|
|
|
|
#include "config.h"
|
|
#include "plugins.h"
|
|
|
|
#ifdef SCRIPT_INTERFACE
|
|
#include "libmscore/score.h"
|
|
#include "libmscore/undo.h"
|
|
#include "libmscore/chord.h"
|
|
#include "libmscore/note.h"
|
|
#include "libmscore/utils.h"
|
|
#include "libmscore/mscore.h"
|
|
#include "libmscore/measurebase.h"
|
|
#include "libmscore/measure.h"
|
|
#include "libmscore/segment.h"
|
|
#include "libmscore/rest.h"
|
|
#include "libmscore/stafftext.h"
|
|
#include "libmscore/cursor.h"
|
|
#include "libmscore/page.h"
|
|
#include "libmscore/system.h"
|
|
#include "libmscore/staff.h"
|
|
#include "libmscore/part.h"
|
|
#include "libmscore/timesig.h"
|
|
#include "libmscore/keysig.h"
|
|
#include "libmscore/harmony.h"
|
|
#include "libmscore/slur.h"
|
|
#include "libmscore/tie.h"
|
|
#include "libmscore/notedot.h"
|
|
#include "libmscore/figuredbass.h"
|
|
#include "libmscore/accidental.h"
|
|
#include "libmscore/lyrics.h"
|
|
#include "libmscore/layoutbreak.h"
|
|
|
|
namespace Ms {
|
|
|
|
//---------------------------------------------------------
|
|
// MsScoreView
|
|
//---------------------------------------------------------
|
|
|
|
MsScoreView::MsScoreView(QQuickItem* parent)
|
|
: QQuickPaintedItem(parent)
|
|
{
|
|
setAcceptedMouseButtons(Qt::LeftButton);
|
|
score = 0;
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// FileIO
|
|
//---------------------------------------------------------
|
|
|
|
FileIO::FileIO(QObject *parent) :
|
|
QObject(parent)
|
|
{
|
|
}
|
|
|
|
QString FileIO::read()
|
|
{
|
|
if (mSource.isEmpty()) {
|
|
emit error("source is empty");
|
|
return QString();
|
|
}
|
|
QUrl url(mSource);
|
|
QString source(mSource);
|
|
if(url.isValid() && url.isLocalFile()) {
|
|
source = url.toLocalFile();
|
|
}
|
|
QFile file(source);
|
|
QString fileContent;
|
|
if ( file.open(QIODevice::ReadOnly) ) {
|
|
QString line;
|
|
QTextStream t( &file );
|
|
do {
|
|
line = t.readLine();
|
|
fileContent += line + "\n";
|
|
} while (!line.isNull());
|
|
file.close();
|
|
}
|
|
else {
|
|
emit error("Unable to open the file");
|
|
return QString();
|
|
}
|
|
return fileContent;
|
|
}
|
|
|
|
bool FileIO::write(const QString& data)
|
|
{
|
|
if (mSource.isEmpty())
|
|
return false;
|
|
|
|
QFile file(mSource);
|
|
if (!file.open(QFile::WriteOnly | QFile::Truncate))
|
|
return false;
|
|
|
|
QTextStream out(&file);
|
|
out << data;
|
|
file.close();
|
|
return true;
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// remove
|
|
//---------------------------------------------------------
|
|
|
|
bool FileIO::remove()
|
|
{
|
|
if (mSource.isEmpty())
|
|
return false;
|
|
|
|
QFile file(mSource);
|
|
return file.remove();
|
|
}
|
|
|
|
bool FileIO::exists()
|
|
{
|
|
QFile file(mSource);
|
|
return file.exists();
|
|
}
|
|
|
|
int FileIO::modifiedTime()
|
|
{
|
|
if (mSource.isEmpty()) {
|
|
emit error("source is empty");
|
|
return 0;
|
|
}
|
|
QUrl url(mSource);
|
|
QString source(mSource);
|
|
if(url.isValid() && url.isLocalFile()) {
|
|
source = url.toLocalFile();
|
|
}
|
|
QFileInfo fileInfo(source);
|
|
return fileInfo.lastModified().toTime_t();
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// setScore
|
|
//---------------------------------------------------------
|
|
|
|
void MsScoreView::setScore(Score* s)
|
|
{
|
|
_currentPage = 0;
|
|
score = s;
|
|
|
|
if (score) {
|
|
score->doLayout();
|
|
|
|
Page* page = score->pages()[_currentPage];
|
|
QRectF pr(page->abbox());
|
|
qreal m1 = width() / pr.width();
|
|
qreal m2 = height() / pr.height();
|
|
mag = qMax(m1, m2);
|
|
|
|
_boundingRect = QRectF(0.0, 0.0, pr.width() * mag, pr.height() * mag);
|
|
|
|
setWidth(pr.width() * mag);
|
|
setHeight(pr.height() * mag);
|
|
}
|
|
update();
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// paint
|
|
//---------------------------------------------------------
|
|
|
|
void MsScoreView::paint(QPainter* p)
|
|
{
|
|
p->setRenderHint(QPainter::Antialiasing, true);
|
|
p->setRenderHint(QPainter::TextAntialiasing, true);
|
|
p->fillRect(QRect(0, 0, width(), height()), _color);
|
|
if (!score)
|
|
return;
|
|
p->scale(mag, mag);
|
|
|
|
Page* page = score->pages()[_currentPage];
|
|
QList<const Element*> el;
|
|
for (System* s : page->systems()) {
|
|
for (MeasureBase* m : s->measures())
|
|
m->scanElements(&el, collectElements, false);
|
|
}
|
|
page->scanElements(&el, collectElements, false);
|
|
|
|
foreach(const Element* e, el) {
|
|
QPointF pos(e->pagePos());
|
|
p->translate(pos);
|
|
e->draw(p);
|
|
p->translate(-pos);
|
|
}
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// setCurrentPage
|
|
//---------------------------------------------------------
|
|
|
|
void MsScoreView::setCurrentPage(int n)
|
|
{
|
|
if (score == 0)
|
|
return;
|
|
if (n < 0)
|
|
n = 0;
|
|
int nn = score->pages().size();
|
|
if (nn == 0)
|
|
return;
|
|
if (n >= nn)
|
|
n = nn - 1;
|
|
_currentPage = n;
|
|
update();
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// nextPage
|
|
//---------------------------------------------------------
|
|
|
|
void MsScoreView::nextPage()
|
|
{
|
|
setCurrentPage(_currentPage + 1);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// prevPage
|
|
//---------------------------------------------------------
|
|
|
|
void MsScoreView::prevPage()
|
|
{
|
|
setCurrentPage(_currentPage - 1);
|
|
}
|
|
|
|
const QRectF& MsScoreView::getGrip(Grip) const
|
|
{
|
|
static const QRectF a;
|
|
return a;
|
|
}
|
|
|
|
const QTransform& MsScoreView::matrix() const
|
|
{
|
|
static const QTransform t;
|
|
return t; // _matrix;
|
|
}
|
|
|
|
}
|
|
#endif
|