Skip to content

Commit

Permalink
Code fixes for translations and resources
Browse files Browse the repository at this point in the history
  • Loading branch information
redtide committed Jul 10, 2023
1 parent f7ca464 commit 408d699
Show file tree
Hide file tree
Showing 11 changed files with 265 additions and 205 deletions.
6 changes: 3 additions & 3 deletions cmake/QtAppResources.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ if (UNIX AND NOT APPLE)
set(PROJECT_ICON_FILE_NAME "${PROJECT_APPSTREAM_ID}.${PROJECT_ICON_FORMAT}")
set(PROJECT_ICON_FILE_PATH "${CMAKE_INSTALL_FULL_DATADIR}/icons/hicolor/scalable/apps")
configure_file("resources/icons/application.icon.${PROJECT_ICON_FORMAT}"
"${CMAKE_BINARY_DIR}/${PROJECT_ICON_FILE_NAME}" COPYONLY @ONLY
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_ICON_FILE_NAME}" COPYONLY
)
#===========================================================================
# Translations
Expand Down Expand Up @@ -66,13 +66,13 @@ if (UNIX AND NOT APPLE)
#===============================================================================
# Install
#===============================================================================
install(FILES "${PROJECT_APPDATA_FILE_NAME}"
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_APPDATA_FILE_NAME}"
DESTINATION "${CMAKE_INSTALL_DATADIR}/metainfo"
)
install(FILES "${PROJECT_DESKTOP_FILES}"
DESTINATION "${CMAKE_INSTALL_DATADIR}/applications"
)
endif()
install(FILES "${PROJECT_ICON_FILE_NAME}"
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_ICON_FILE_NAME}"
DESTINATION "${PROJECT_ICON_FILE_PATH}"
)
90 changes: 65 additions & 25 deletions src/application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,81 @@

#include <QLibraryInfo>
#include <QLocale>
#include <QTranslator>

QRuler::Application::Application(int &argc, char **argv)
QRuler::Application::Application(int argc, char *argv[])
: QApplication(argc, argv)
{
setApplicationName(APPLICATION_NAME);
setOrganizationName(ORGANIZATION_NAME);
setOrganizationDomain(ORGANIZATION_DOMAIN);

initLocale();

QString icoCurPath = QCoreApplication::applicationDirPath() + '/'
+ QStringLiteral(PROJECT_ICON_NAME);
QString icoSysPath = QStringLiteral(PROJECT_ICON_SYSTEM_PATH);

// Try first to find the app icon in the current directory
appIcon_ = QIcon(icoCurPath);
if (appIcon_.isNull())
appIcon_ = QIcon(icoSysPath);

// UseHighDpiPixmaps is default from Qt6
#if QT_VERSION < 0x060000
setAttribute(Qt::AA_UseHighDpiPixmaps, true);
#endif
initUi();
}

void QRuler::Application::initLocale()
{
#if 1
QLocale locale = QLocale::system();
#else
QLocale locale(QLocale("it_IT"));
QLocale::setDefault(locale);
#endif
// Qt translations (buttons and the like)
QString translationsPath
#if QT_VERSION < 0x060000
= QLibraryInfo::location(QLibraryInfo::TranslationsPath);
#else
= QLibraryInfo::path(QLibraryInfo::TranslationsPath);
#endif
QString translationsFileName = QStringLiteral("qt_") + locale.name();

if (qtTranslator_.load(translationsFileName, translationsPath))
installTranslator(&qtTranslator_);

// E.g. "<appname>_en"
translationsFileName
= QCoreApplication::applicationName().toLower() + '_' + locale.name();

// Try first in the same binary directory, in case we are building,
// otherwise read from system data
translationsPath = QCoreApplication::applicationDirPath();

bool isLoaded = translator_.load(translationsFileName, translationsPath);
if (!isLoaded) {
// "/usr/share/<appname>/translations
isLoaded = translator_.load(translationsFileName,
QStringLiteral(PROJECT_DATA_DIR)
+ QStringLiteral("/translations"));
}
if (isLoaded)
installTranslator(&translator_);
}

void QRuler::Application::initUi()
{
settings_.load();
mainWindow_ = new MainWindow;
dlgPrefs_ = new DialogPrefs(mainWindow_);

mainWindow_ = new QRuler::MainWindow;
dlgPrefs_ = new QRuler::DialogPrefs(mainWindow_);

mainWindow_->move(settings_.position());
mainWindow_->resize(settings_.size());
mainWindow_->show();

connect(dlgPrefs_, &QDialog::accepted, mainWindow_,
&MainWindow::loadSettings);
Expand All @@ -47,8 +107,6 @@ QRuler::Application::Application(int &argc, char **argv)
mainWindow_->saveSettings();
settings_.save();
});
// no need to call mainWindow_->show() because MainWindow::loadSettings()
// does it when setting its flags and it is called in its constructor
}

void QRuler::Application::preferences()
Expand All @@ -59,24 +117,6 @@ void QRuler::Application::preferences()

int main(int argc, char *argv[])
{
using namespace QRuler;

Application app(argc, argv);
QTranslator qtTranslator, translator;
QString filename = QStringLiteral("qt_") + QLocale::system().name();
#if QT_VERSION < 0x060000
QString dir = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
#else
QString dir = QLibraryInfo::path(QLibraryInfo::TranslationsPath);
#endif
if (qtTranslator.load(filename, dir))
app.installTranslator(&qtTranslator);

filename = QStringLiteral(PROJECT_ID) + '_' + QLocale::system().name();
dir = QStringLiteral(PROJECT_DATA_DIR) + QStringLiteral("/translations");

if (translator.load(filename, dir))
app.installTranslator(&translator);

QRuler::Application app(argc, argv);
return app.exec();
}
12 changes: 11 additions & 1 deletion src/application.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
#include "settings.hpp"

#include <QApplication>
#include <QIcon>
#include <QTranslator>

namespace QRuler {
class MainWindow;
Expand All @@ -29,13 +31,21 @@ class Application : public QApplication
Q_OBJECT

public:
Application(int &argc, char **argv);
Application(int argc, char *argv[]);
Settings &settings() { return settings_; }
QIcon icon() const { return appIcon_; }
void preferences();

private:
void initLocale();
void initUi();

MainWindow *mainWindow_;
DialogPrefs *dlgPrefs_;
Settings settings_;

QIcon appIcon_;
QTranslator qtTranslator_;
QTranslator translator_;
};
} // namespace QRuler
8 changes: 6 additions & 2 deletions src/dialogabout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,16 @@

QRuler::DialogAbout::DialogAbout(QWidget *parent)
: QDialog(parent)
, ui(new Ui::DialogAbout)
, ui(new QRuler::Ui::DialogAbout)
{
ui->setupUi(this);
ui->tabInfo->setLayout(ui->layTabInfo);
ui->tabAuthors->setLayout(ui->layTabAuthors);
ui->tabLicense->setLayout(ui->layTabLicense);

// TODO: Probably needed only on X11
Settings &settings = static_cast<Application *>(qApp)->settings();
Application *theApp = static_cast<Application *>(qApp);
Settings &settings = theApp->settings();
if (settings.alwaysOnTop()) {
Qt::WindowFlags flags = windowFlags();
flags |= Qt::WindowStaysOnTopHint;
Expand All @@ -24,6 +25,9 @@ QRuler::DialogAbout::DialogAbout(QWidget *parent)

connect(ui->buttonBox, &QDialogButtonBox::clicked, this,
&QRuler::DialogAbout::close);

setWindowIcon(theApp->icon());
setWindowTitle(tr("About"));
}

QRuler::DialogAbout::~DialogAbout() { delete ui; }
Expand Down
2 changes: 1 addition & 1 deletion src/dialogabout.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

#include <QDialog>

namespace QRuler {
namespace Ui {
class DialogAbout;
}
namespace QRuler {
class DialogAbout : public QDialog
{
Q_OBJECT
Expand Down
4 changes: 2 additions & 2 deletions src/dialogabout.ui
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DialogAbout</class>
<widget class="QDialog" name="DialogAbout">
<class>QRuler::DialogAbout</class>
<widget class="QDialog" name="QRuler::DialogAbout">
<property name="geometry">
<rect>
<x>0</x>
Expand Down
7 changes: 4 additions & 3 deletions src/dialogprefs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

QRuler::DialogPrefs::DialogPrefs(QWidget *parent)
: QDialog(parent)
, ui(new Ui::DialogPrefs)
, ui(new QRuler::Ui::DialogPrefs)
{
ui->setupUi(this);

Expand All @@ -47,9 +47,10 @@ QRuler::DialogPrefs::DialogPrefs(QWidget *parent)
connect(ui->pbnFg, &QAbstractButton::clicked, this,
[this]() { setColorForLabel(ui->lblColorFg); });

setWindowIcon(QIcon(":/appicon"));
Application *theApp = static_cast<Application *>(qApp);

setWindowIcon(theApp->icon());
setWindowTitle(tr("Preferences"));
setFixedSize(384, 256);
}

QRuler::DialogPrefs::~DialogPrefs() { delete ui; }
Expand Down
2 changes: 1 addition & 1 deletion src/dialogprefs.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@

class QLabel;

namespace QRuler {
namespace Ui {
class DialogPrefs;
}
namespace QRuler {
class DialogPrefs : public QDialog
{
Q_OBJECT
Expand Down
Loading

0 comments on commit 408d699

Please sign in to comment.