Skip to content

Commit

Permalink
show thumbnails for all files
Browse files Browse the repository at this point in the history
  • Loading branch information
wschweer committed Nov 14, 2014
1 parent 3779658 commit 2668d60
Show file tree
Hide file tree
Showing 10 changed files with 86 additions and 56 deletions.
4 changes: 2 additions & 2 deletions libmscore/score.h
Expand Up @@ -1005,15 +1005,15 @@ class Score : public QObject {
void setAccessibleInfo(QString s) { accInfo = s.remove(":").remove(";"); }
QString accessibleInfo() { return accInfo; }

QImage createThumbnail();

friend class ChangeSynthesizerState;
friend class Chord;
};

extern Score* gscore;
extern void fixTicks();

QPixmap extractThumbnail(const QString&);

Q_DECLARE_OPERATORS_FOR_FLAGS(LayoutFlags);

} // namespace Ms
Expand Down
66 changes: 26 additions & 40 deletions libmscore/scorefile.cpp
Expand Up @@ -464,6 +464,31 @@ void Score::saveCompressedFile(QFileInfo& info, bool onlySelection)
fp.close();
}

//---------------------------------------------------------
// createThumbnail
//---------------------------------------------------------

QImage Score::createThumbnail()
{
Page* page = pages().at(0);
QRectF fr = page->abbox();
qreal mag = 256.0 / qMax(fr.width(), fr.height());
int w = int(fr.width() * mag);
int h = int(fr.height() * mag);

QImage pm(w, h, QImage::Format_ARGB32_Premultiplied);
pm.setDotsPerMeterX(lrint((mag * 1000) / INCH));
pm.setDotsPerMeterY(lrint((mag * 1000) / INCH));
pm.fill(0xffffffff);
QPainter p(&pm);
p.setRenderHint(QPainter::Antialiasing, true);
p.setRenderHint(QPainter::TextAntialiasing, true);
p.scale(mag, mag);
print(&p, 0);
p.end();
return pm;
}

//---------------------------------------------------------
// saveCompressedFile
// file is already opened
Expand Down Expand Up @@ -505,23 +530,7 @@ void Score::saveCompressedFile(QIODevice* f, QFileInfo& info, bool onlySelection
}

// create thumbnail
{
Page* page = pages().at(0);
QRectF fr = page->abbox();
qreal mag = 256.0 / qMax(fr.width(), fr.height());
int w = int(fr.width() * mag);
int h = int(fr.height() * mag);

QImage pm(w, h, QImage::Format_ARGB32_Premultiplied);
pm.setDotsPerMeterX(lrint((mag * 1000) / INCH));
pm.setDotsPerMeterY(lrint((mag * 1000) / INCH));
pm.fill(0xffffffff);
QPainter p(&pm);
p.setRenderHint(QPainter::Antialiasing, true);
p.setRenderHint(QPainter::TextAntialiasing, true);
p.scale(mag, mag);
print(&p, 0);
p.end();
QImage pm = createThumbnail();

QByteArray ba;
QBuffer b(&ba);
Expand All @@ -530,8 +539,6 @@ void Score::saveCompressedFile(QIODevice* f, QFileInfo& info, bool onlySelection
if (!pm.save(&b, "PNG"))
qDebug("save failed");
uz.addFile("Thumbnails/thumbnail.png", ba);
printf("thumbnail %dx%d size %d mag %f\n", w, h, ba.size(), mag);
}

#ifdef OMR
//
Expand Down Expand Up @@ -715,27 +722,6 @@ QString readRootFile(MQZipReader* uz, QList<QString>& images)
return rootfile;
}

//---------------------------------------------------------
// extractThumbnail
//---------------------------------------------------------

QPixmap extractThumbnail(const QString& name)
{
QPixmap pm; // = icons[File_ICON].pixmap(QSize(100,140));
if (!name.endsWith(".mscz"))
return pm;
MQZipReader uz(name);
if (!uz.exists()) {
qDebug("extractThumbnail: <%s> not found", qPrintable(name));
return pm;
}
QByteArray ba = uz.fileData("Thumbnails/thumbnail.png");
if (ba.isEmpty())
return pm;
pm.loadFromData(ba, "PNG");
return pm;
}

//---------------------------------------------------------
// loadCompressedMsc
// return false on error
Expand Down
38 changes: 38 additions & 0 deletions mscore/file.cpp
Expand Up @@ -91,6 +91,7 @@
#include "diff/diff_match_patch.h"
#include "libmscore/chordlist.h"
#include "libmscore/mscore.h"
#include "thirdparty/qzip/qzipreader_p.h"

extern Ms::Score::FileError importOve(Ms::Score*, const QString& name);

Expand Down Expand Up @@ -2394,5 +2395,42 @@ bool MuseScore::saveSvg(Score* score, const QString& saveName)
return true;
}

//---------------------------------------------------------
// createThumbnail
//---------------------------------------------------------

static QPixmap createThumbnail(const QString& name)
{
Score* score = new Score;
Score::FileError error = readScore(score, name, true);
if (error != Score::FileError::FILE_NO_ERROR)
return QPixmap();
score->doLayout();
QImage pm = score->createThumbnail();
delete score;
return QPixmap::fromImage(std::move(pm));
}

//---------------------------------------------------------
// extractThumbnail
//---------------------------------------------------------

QPixmap MuseScore::extractThumbnail(const QString& name)
{
QPixmap pm; // = icons[File_ICON].pixmap(QSize(100,140));
if (!name.endsWith(".mscz"))
return createThumbnail(name);
MQZipReader uz(name);
if (!uz.exists()) {
qDebug("extractThumbnail: <%s> not found", qPrintable(name));
return pm;
}
QByteArray ba = uz.fileData("Thumbnails/thumbnail.png");
if (ba.isEmpty())
return createThumbnail(name);
pm.loadFromData(ba, "PNG");
return pm;
}

}

1 change: 1 addition & 0 deletions mscore/musescore.cpp
Expand Up @@ -4428,6 +4428,7 @@ QFileInfoList MuseScore::recentScores() const
}
return fil;
}

}

using namespace Ms;
Expand Down
1 change: 1 addition & 0 deletions mscore/musescore.h
Expand Up @@ -667,6 +667,7 @@ class MuseScore : public QMainWindow, public MuseScoreCore {
QFileInfoList recentScores() const;
void saveDialogState(const char* name, QFileDialog* d);
void restoreDialogState(const char* name, QFileDialog* d);
QPixmap extractThumbnail(const QString& name);
};

extern MuseScore* mscore;
Expand Down
2 changes: 1 addition & 1 deletion mscore/scoreBrowser.cpp
Expand Up @@ -64,7 +64,7 @@ void ScoreBrowser::setScores(QFileInfoList s)
{
scoreList->clear();
for (const QFileInfo& fi : s) {
QPixmap pm = extractThumbnail(fi.filePath());
QPixmap pm = mscore->extractThumbnail(fi.filePath());
if (pm.isNull())
pm = icons[int(Icons::file_ICON)]->pixmap(QSize(50,60));
ScoreInfo si(fi);
Expand Down
23 changes: 12 additions & 11 deletions mscore/scorePreview.cpp
Expand Up @@ -12,6 +12,8 @@

#include "scorePreview.h"
#include "libmscore/score.h"
#include "musescore.h"
#include "scoreInfo.h"

namespace Ms {

Expand All @@ -31,19 +33,18 @@ ScorePreview::ScorePreview(QWidget* parent)

void ScorePreview::setScore(const QString& s)
{
printf("setScore %s\n", qPrintable(s));
QFileInfo fi(s);
name->setText(fi.baseName());
creationDate->setText(fi.created().toString());
fileSize->setText(QString("%1 KiB").arg(fi.size() / 1024));
ScoreInfo fi(s);
fi.setPixmap(mscore->extractThumbnail(s));
setScore(fi);
}

void ScorePreview::setScore(const ScoreInfo& si)
{
creationDate->setText(si.created().toString());
fileSize->setText(QString("%1 KiB").arg(si.size() / 1024));
creationDate->setEnabled(true);
fileSize->setEnabled(true);
if (fi.suffix() == "mscz") {
QPixmap pm = extractThumbnail(s);
icon->setPixmap(pm);
}
else
icon->setPixmap(QPixmap());
icon->setPixmap(si.pixmap());
}
}

Expand Down
3 changes: 3 additions & 0 deletions mscore/scorePreview.h
Expand Up @@ -17,6 +17,8 @@

namespace Ms {

class ScoreInfo;

//---------------------------------------------------------
// ScorePreview
//---------------------------------------------------------
Expand All @@ -28,6 +30,7 @@ class ScorePreview : public QWidget, public Ui::ScorePreview

public slots:
void setScore(const QString&);
void setScore(const ScoreInfo&);

public:
ScorePreview(QWidget* parent = 0);
Expand Down
2 changes: 1 addition & 1 deletion mscore/startcenter.cpp
Expand Up @@ -43,7 +43,7 @@ Startcenter::Startcenter()
// setWindowFlags(Qt::WindowStaysOnTopHint | Qt::Popup);
setWindowFlags(Qt::WindowStaysOnTopHint);
setWindowModality(Qt::ApplicationModal);
connect(createNewScore, SIGNAL(clicked()), getAction("file-new"), SLOT(trigger()));
connect(createNewScore, SIGNAL(clicked()), getAction("file-new"), SLOT(trigger()));
connect(recentScores, SIGNAL(toggled(bool)), SLOT(recentScoresToggled(bool)));
connect(templates, SIGNAL(toggled(bool)), SLOT(templatesToggled(bool)));
connect(demos, SIGNAL(toggled(bool)), SLOT(demosToggled(bool)));
Expand Down
2 changes: 1 addition & 1 deletion mscore/startcenter.ui
Expand Up @@ -17,7 +17,7 @@
</sizepolicy>
</property>
<property name="windowTitle">
<string>Dialog</string>
<string>Startcenter</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0" rowspan="2">
Expand Down

0 comments on commit 2668d60

Please sign in to comment.