mirror of
https://github.com/YACReader/yacreader
synced 2025-05-25 18:00:46 -04:00
151 lines
4.3 KiB
C++
151 lines
4.3 KiB
C++
#include "yacreader_global_gui.h"
|
|
|
|
#include <QtCore>
|
|
#include <QAction>
|
|
#include <QImageReader>
|
|
#include <QFileDialog>
|
|
|
|
using namespace YACReader;
|
|
|
|
void YACReader::addSperator(QWidget *w)
|
|
{
|
|
QAction *separator = new QAction(w);
|
|
separator->setSeparator(true);
|
|
w->addAction(separator);
|
|
}
|
|
|
|
QAction *YACReader::createSeparator()
|
|
{
|
|
QAction *a = new QAction(0);
|
|
a->setSeparator(true);
|
|
return a;
|
|
}
|
|
|
|
QIcon YACReader::noHighlightedIcon(const QString &path)
|
|
{
|
|
QPixmap sp(path);
|
|
QPixmap p = hdpiPixmap(path, sp.size());
|
|
|
|
QIcon icon;
|
|
icon.addFile(path, p.size(), QIcon::Normal);
|
|
icon.addFile(path, p.size(), QIcon::Selected);
|
|
return icon;
|
|
}
|
|
|
|
void YACReader::colorize(QImage &img, QColor &col)
|
|
{
|
|
QRgb *data = (QRgb *)img.bits();
|
|
QRgb *end = data + img.width() * img.height();
|
|
|
|
int rcol = col.red(), gcol = col.green(), bcol = col.blue();
|
|
while (data != end) {
|
|
*data = qRgba(rcol, gcol, bcol, qAlpha(*data));
|
|
++data;
|
|
}
|
|
}
|
|
|
|
QList<qulonglong> YACReader::mimeDataToComicsIds(const QMimeData *data)
|
|
{
|
|
QList<qulonglong> comicIds;
|
|
QByteArray rawData = data->data(YACReader::YACReaderLibrarComiscSelectionMimeDataFormat);
|
|
QDataStream in(&rawData, QIODevice::ReadOnly);
|
|
in >> comicIds; // deserialize the list of indentifiers
|
|
return comicIds;
|
|
}
|
|
|
|
// TODO some SVG assets are missing in macos (WIP)
|
|
// we need two sets of icons, one for the toolbar and one for the context menu because of this bug (QTBUG-96553): https://bugreports.qt.io/browse/QTBUG-96553
|
|
|
|
QString YACReader::addExtensionToIconPath(const QString &path)
|
|
{
|
|
#ifdef YACREADER_LIBRARY
|
|
#ifdef Q_OS_MACOS // TODO_Y_MAC_UI
|
|
return path + ".png";
|
|
#else
|
|
return path + ".svg";
|
|
#endif
|
|
#else
|
|
return path + ".svg";
|
|
#endif
|
|
}
|
|
|
|
QString YACReader::addExtensionToIconPathInToolbar(const QString &path)
|
|
{
|
|
return path + "_18x18.svg";
|
|
}
|
|
|
|
QAction *YACReader::actionWithCustomIcon(const QIcon &icon, QAction *action)
|
|
{
|
|
auto a = new QAction(icon, action->text());
|
|
|
|
a->setEnabled(action->isEnabled());
|
|
a->setCheckable(action->isCheckable());
|
|
|
|
a->setChecked(action->isChecked());
|
|
|
|
QObject::connect(a, &QAction::triggered, action, &QAction::triggered);
|
|
|
|
QObject::connect(action, &QAction::changed, action, [=]() {
|
|
a->setEnabled(action->isEnabled());
|
|
a->setCheckable(action->isCheckable());
|
|
|
|
a->setChecked(action->isChecked());
|
|
});
|
|
QObject::connect(a, &QAction::toggled, action, &QAction::setChecked);
|
|
QObject::connect(action, &QAction::toggled, a, &QAction::setChecked);
|
|
|
|
return a;
|
|
}
|
|
|
|
QPixmap YACReader::hdpiPixmap(const QString &file, QSize size)
|
|
{
|
|
return QIcon(file).pixmap(size);
|
|
}
|
|
|
|
QString YACReader::imageFileLoader(QWidget *parent)
|
|
{
|
|
QString supportedImageFormatsString;
|
|
for (const QByteArray &format : QImageReader::supportedImageFormats()) {
|
|
supportedImageFormatsString += QString("*.%1 ").arg(QString(format));
|
|
}
|
|
|
|
return QFileDialog::getOpenFileName(parent, QObject::tr("Select custom cover"), QDir::homePath(), QObject::tr("Images (%1)").arg(supportedImageFormatsString));
|
|
}
|
|
|
|
QString YACReader::imagePathFromMimeData(const QMimeData *mimeData)
|
|
{
|
|
QString filePath;
|
|
|
|
// Check for URLs (drag from browser or file explorer)
|
|
if (mimeData->hasUrls()) {
|
|
QList<QUrl> urlList = mimeData->urls();
|
|
|
|
// We only handle the first URL for simplicity
|
|
if (!urlList.isEmpty()) {
|
|
QUrl url = urlList.first();
|
|
if (url.isLocalFile()) {
|
|
filePath = url.toLocalFile();
|
|
|
|
// Verify it's an image file using the extension
|
|
QFileInfo fileInfo(filePath);
|
|
QString extension = fileInfo.suffix().toLower();
|
|
QList<QByteArray> supportedFormats = QImageReader::supportedImageFormats();
|
|
bool isSupported = false;
|
|
|
|
for (const QByteArray &format : supportedFormats) {
|
|
if (extension == QString(format).toLower()) {
|
|
isSupported = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!isSupported) {
|
|
filePath.clear(); // Not a supported image format
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return filePath;
|
|
}
|