1 #include "applicationcontroller.h"
3 #include "fontconfigmanager.h"
4 #include "installedfontinfo.h"
8 ApplicationController::ApplicationController(QObject *parent) :
9 QObject(parent), mFontDirExists(false), mShowSystemFont(false), mNextJob(Nothing), forceOverwrite(false),
15 void ApplicationController::init()
17 mFontConfig = new FontConfigManager(this);
18 setFontDir(QDir::homePath() + QLatin1String("/.fonts"));
21 mLang = curLocale.name();
22 int idx = mLang.indexOf(QLatin1Char('_'));
24 mLang = mLang.left(idx);
25 mFontConfig->setCurrentLanguage(mLang);
27 connect(mFontConfig, SIGNAL(fcCacheFinished()), mFontConfig, SLOT(readFcList()));
28 connect(mFontConfig, SIGNAL(familiesChanged()), SLOT(syncInstalledFonts()));
29 connect(mFontConfig, SIGNAL(warning(QString)), SIGNAL(alertDialog(QString)));
31 mFontConfig->setLocalFontsConfPath(QDir::homePath() + QLatin1String("/.fonts.conf"));
33 mFontConfig->readFontsConf();
34 mFontConfig->readFcList();
37 QString ApplicationController::currentLanguage() const
42 QString ApplicationController::fontDir() const
47 void ApplicationController::setFontDir(const QString &dirpath)
49 if (mFontDirPath != dirpath) {
50 mFontDirPath = dirpath;
51 emit fontDirChanged(mFontDirPath);
52 QDir fontDir(dirpath);
53 // if (mFontDirExists != fontDir.exists())
54 // emit fontDirExistsChanged();
55 mFontDirExists = fontDir.exists();
57 if (!mFontDirExists) {
58 emit alertDialog(tr("Font Dir: %1 is not found!").arg(mFontDirPath));
62 mFontConfig->setLocalFontPath(dirpath);
66 bool ApplicationController::fontDirExists() const
68 return mFontDirExists;
71 bool ApplicationController::showSystemFont() const
73 return mShowSystemFont;
76 void ApplicationController::setShowSystemFont(bool show)
78 if (mShowSystemFont != show) {
79 mShowSystemFont = show;
80 emit showSystemFontChanged();
81 emit fontListChanged();
85 QStringList ApplicationController::fontList() const
88 return mFontConfig->families();
89 return mFontConfig->localFamilies();
92 FontInfo *ApplicationController::checkFontInfo(const QUrl &path)
94 FontInfo *fInfo = new FontInfo(path.toLocalFile(), this);
98 InstalledFontInfo *ApplicationController::fontInfo(const QString &family) const
100 return mFontConfig->fontInfo(family);
103 QStringList ApplicationController::fontCount(const QString &fontpath) const
105 return mFontConfig->fontCount(fontpath);
108 void ApplicationController::installFont()
110 qDebug() << "ApplicationController::installFont()" << mNextJob;
112 FontInfo *info = qobject_cast<FontInfo *>(mJobOption.value<QObject*>());
116 if (mNextJob == Nothing) {
117 if (info->fontPath().isEmpty())
119 mNextJob = StartInstall;
122 QFileInfo srcfont(info->fontPath());
123 if (!srcfont.exists()) {
124 emit alertDialog(tr("Font '%1' does not exists anymore."));
128 if (mNextJob == StartInstall) {
129 if (!mFontDirExists) {
130 mNextJob = CreateFontsDir;
131 emit confirmDialog(tr("Create it?"), tr("Local fonts dir '%1' does not exists!\nCreate it now?").arg(mFontDirPath));
134 mNextJob = CheckDstFont;
137 if (mNextJob == CreateFontsDir) {
138 QDir fontsDir(mFontDirPath);
139 fontsDir.mkpath(mFontDirPath);
140 mNextJob = CheckDstFont;
143 QFileInfo dstfont(mFontDirPath + QLatin1String("/") + srcfont.fileName());
144 if (mNextJob == CheckDstFont) {
145 mNextJob = InstallFont;
146 if (dstfont.exists()) {
147 emit confirmDialog(tr("Overwrite it?"), tr("Local font '%1' already exists!\nOverwrite it?").arg(dstfont.absoluteFilePath()));
152 if (mNextJob == InstallFont) {
153 QFile::copy(srcfont.absoluteFilePath(), dstfont.absoluteFilePath());
157 foreach (const QString &family, info->families()) {
158 FontsConfigProperties *prop = info->fontProperty(family);
159 mFontConfig->appendFontProperty(prop);
162 emit installFinished(srcfont.fileName());
163 mFontConfig->runFcCache();
167 void ApplicationController::installFont(FontInfo *fontinfo)
169 qDebug() << "ApplicationController::installFont(" << fontinfo->families() << ")";
172 mJobOption = QVariant::fromValue<QObject *>(fontinfo);
177 void ApplicationController::postInstall()
182 void ApplicationController::updateFontsConf(InstalledFontInfo *fontInfo)
184 mFontConfig->appendFontProperty(fontInfo);
187 void ApplicationController::uninstallFont(const QString &fontpath)
189 qDebug() << "ApplicationController::uninstallFont(" << fontpath << ")";
190 bool check = QFile::remove(fontpath);
192 emit uninstallFinished(fontpath);
193 mFontConfig->runFcCache();
195 emit alertDialog(tr("Could not remove Font '%1'").arg(fontpath));
198 void ApplicationController::confirm(bool ok)
200 qDebug() << "ApplicationController::confirm(" << ok << ")";
204 forceOverwrite = false;
208 if (forceOverwrite) {
214 void ApplicationController::syncInstalledFonts()
218 emit clearInstalledFontList();
219 for (int i = 0; i < mFontConfig->count(); i++) {
220 InstalledFontInfo *info = mFontConfig->fontInfo(i);
221 if (mShowSystemFont || !info->systemFont())
222 emit appendInstalledFont(info->localefamily(), info->localefullname());
226 void ApplicationController::saveFontsConf()
228 if (!mFontConfig->fontsConfModified())
230 if (mFontConfig->hasUnknownConfig() && !forceOverwrite) {
231 forceOverwrite = true;
232 emit confirmDialog(tr("Overwrite it?"), tr("Current Config file %1 has unsupported configs(s). It will be overwritten. Overwrite it now?").arg(mFontConfig->localFontsConfPath()));
235 mFontConfig->saveFontsConf();
236 forceOverwrite = false;