1 /****************************************************************************
3 ** Copyright (C) 2012 Takumi Asaki
4 ** All rights reserved.
5 ** Contact: Takumi Asaki (takumi.asaki@gmail.com)
7 ** This file is part of the fontmanager application.
9 ** You may use this file under the terms of the BSD license as follows:
11 ** "Redistribution and use in source and binary forms, with or without
12 ** modification, are permitted provided that the following conditions are
14 ** * Redistributions of source code must retain the above copyright
15 ** notice, this list of conditions and the following disclaimer.
16 ** * Redistributions in binary form must reproduce the above copyright
17 ** notice, this list of conditions and the following disclaimer in
18 ** the documentation and/or other materials provided with the
20 ** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
21 ** the names of its contributors may be used to endorse or promote
22 ** products derived from this software without specific prior written
25 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
37 ****************************************************************************/
39 #include "fontsconfeditorcontroller.h"
41 #include "fontconfigdefs.h"
42 #include "installedfontinfo.h"
44 FontsConfEditorController::FontsConfEditorController(const QString &family, QObject *parent) :
45 QObject(parent), mFromApp(false), mFamily(family)
49 int FontsConfEditorController::count() const
51 return mPrependFamily.count() + mPreferFamily.count() + mAcceptFamily.count();
54 int FontsConfEditorController::countOfFamily(const QString &priority) const
56 if (priority == PREPEND_DEF)
57 return mPrependFamily.count();
58 else if (priority == PREFER_DEF)
59 return mPreferFamily.count();
60 else if (priority == ACCEPT_DEF)
61 return mAcceptFamily.count();
65 int FontsConfEditorController::indexOfFamily(const QString &family, const QString &priority) const
67 if (priority == PREPEND_DEF)
68 return mPrependFamily.indexOf(family);
69 else if (priority == PREFER_DEF)
70 return mPreferFamily.indexOf(family);
71 else if (priority == ACCEPT_DEF)
72 return mAcceptFamily.indexOf(family);
76 void FontsConfEditorController::syncFamilyList()
78 emit clearFamilyList();
79 emit startSection(PREPEND_DEF, tr("Higher"));
80 foreach (const QString &f, mPrependFamily) {
81 InstalledFontInfo *info = mFontInfoMap.value(f);
82 bool systemFont = info ? info->systemFont() : true;
83 emit appendFamilyToList(mFamily, f, PREPEND_DEF, systemFont);
85 emit startSection(PREFER_DEF, tr("Normal"));
86 foreach (const QString &f, mPreferFamily) {
87 InstalledFontInfo *info = mFontInfoMap.value(f);
88 bool systemFont = info ? info->systemFont() : true;
89 emit appendFamilyToList(mFamily, f, PREFER_DEF, systemFont);
91 emit startSection(ACCEPT_DEF, tr("Lower"));
92 foreach (const QString &f, mAcceptFamily) {
93 InstalledFontInfo *info = mFontInfoMap.value(f);
94 bool systemFont = info ? info->systemFont() : true;
95 emit appendFamilyToList(mFamily, f, ACCEPT_DEF, systemFont);
99 void FontsConfEditorController::appendFontsInfo(const QString &family, const QString &priority, InstalledFontInfo *info)
102 mFontInfoMap.insert(family, info);
103 appendFamily(family, priority);
107 void FontsConfEditorController::appendFamily(const QString &family, const QString &priority)
109 if (priority == PREPEND_DEF)
110 mPrependFamily.append(family);
111 else if (priority == PREFER_DEF)
112 mPreferFamily.append(family);
113 else if (priority == ACCEPT_DEF)
114 mAcceptFamily.append(family);
116 emit appendFamilyToConfig(mFamily, family, priority);
120 void FontsConfEditorController::removeFamily(const QString &family, const QString &priority)
122 if (priority.isEmpty() || priority == PREPEND_DEF) {
123 mPrependFamily.removeOne(family);
125 emit removeFamilyFromList(mFamily, family, PREPEND_DEF);
128 if (priority.isEmpty() || priority == PREFER_DEF) {
129 mPreferFamily.removeOne(family);
131 emit removeFamilyFromList(mFamily, family, PREFER_DEF);
134 if (priority.isEmpty() || priority == ACCEPT_DEF) {
135 mAcceptFamily.removeOne(family);
137 emit removeFamilyFromList(mFamily, family, ACCEPT_DEF);
140 if (!mPrependFamily.contains(family) && !mPreferFamily.contains(family) && !mAcceptFamily.contains(family))
141 mFontInfoMap.remove(family);
144 void FontsConfEditorController::insertFamily(const QString &family, const QString &priority, int index)
146 if (priority == PREPEND_DEF)
147 mPrependFamily.insert(index, family);
148 else if (priority == PREFER_DEF)
149 mPreferFamily.insert(index, family);
150 else if (priority == ACCEPT_DEF)
151 mAcceptFamily.insert(index, family);
153 emit insertFamilyToConfig(mFamily, family, priority, index);
157 void FontsConfEditorController::moveFamilyUp(const QString &family, const QString &priority)
159 int index = indexOfFamily(family, priority);
161 removeFamily(family, priority);
162 insertFamily(family, priority, index - 1);
166 void FontsConfEditorController::moveFamilyDown(const QString &family, const QString &priority)
168 int index = indexOfFamily(family, priority);
169 if (index - 1 < countOfFamily(priority)) {
170 removeFamily(family, priority);
171 insertFamily(family, priority, index + 1);
175 void FontsConfEditorController::clear()
177 mFontInfoMap.clear();
178 mPrependFamily.clear();
179 mPreferFamily.clear();
180 mAcceptFamily.clear();
181 emit clearFamilyList();