OSDN Git Service

Version 0.5
[fontmanager/fontmanager.git] / fontsconfeditorcontroller.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Takumi Asaki
4 ** All rights reserved.
5 ** Contact: Takumi Asaki (takumi.asaki@gmail.com)
6 **
7 ** This file is part of the fontmanager application.
8 **
9 ** You may use this file under the terms of the BSD license as follows:
10 **
11 ** "Redistribution and use in source and binary forms, with or without
12 ** modification, are permitted provided that the following conditions are
13 ** met:
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
19 **     distribution.
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
23 **     permission.
24 **
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."
36 **
37 ****************************************************************************/
38
39 #include "fontsconfeditorcontroller.h"
40
41 #include "fontconfigdefs.h"
42 #include "installedfontinfo.h"
43
44 FontsConfEditorController::FontsConfEditorController(const QString &family, QObject *parent) :
45     QObject(parent), mFromApp(false), mFamily(family)
46 {
47 }
48
49 int FontsConfEditorController::count() const
50 {
51     return mPrependFamily.count() + mPreferFamily.count() + mAcceptFamily.count();
52 }
53
54 int FontsConfEditorController::countOfFamily(const QString &priority) const
55 {
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();
62     return -1;
63 }
64
65 int FontsConfEditorController::indexOfFamily(const QString &family, const QString &priority) const
66 {
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);
73     return -1;
74 }
75
76 void FontsConfEditorController::syncFamilyList()
77 {
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);
84     }
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);
90     }
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);
96     }
97 }
98
99 void FontsConfEditorController::appendFontsInfo(const QString &family, const QString &priority, InstalledFontInfo *info)
100 {
101     mFromApp = true;
102     mFontInfoMap.insert(family, info);
103     appendFamily(family, priority);
104     mFromApp = false;
105 }
106
107 void FontsConfEditorController::appendFamily(const QString &family, const QString &priority)
108 {
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);
115     if (!mFromApp)
116         emit appendFamilyToConfig(mFamily, family, priority);
117     emit countChanged();
118 }
119
120 void FontsConfEditorController::removeFamily(const QString &family, const QString &priority)
121 {
122     if (priority.isEmpty() || priority == PREPEND_DEF) {
123         mPrependFamily.removeOne(family);
124         if (!mFromApp)
125             emit removeFamilyFromList(mFamily, family, PREPEND_DEF);
126         emit countChanged();
127     }
128     if (priority.isEmpty() || priority == PREFER_DEF) {
129         mPreferFamily.removeOne(family);
130         if (!mFromApp)
131             emit removeFamilyFromList(mFamily, family, PREFER_DEF);
132         emit countChanged();
133     }
134     if (priority.isEmpty() || priority == ACCEPT_DEF) {
135         mAcceptFamily.removeOne(family);
136         if (!mFromApp)
137             emit removeFamilyFromList(mFamily, family, ACCEPT_DEF);
138         emit countChanged();
139     }
140     if (!mPrependFamily.contains(family) && !mPreferFamily.contains(family) && !mAcceptFamily.contains(family))
141         mFontInfoMap.remove(family);
142 }
143
144 void FontsConfEditorController::insertFamily(const QString &family, const QString &priority, int index)
145 {
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);
152     if (!mFromApp)
153         emit insertFamilyToConfig(mFamily, family, priority, index);
154     emit countChanged();
155 }
156
157 void FontsConfEditorController::moveFamilyUp(const QString &family, const QString &priority)
158 {
159     int index = indexOfFamily(family, priority);
160     if (index > 0) {
161         removeFamily(family, priority);
162         insertFamily(family, priority, index - 1);
163     }
164 }
165
166 void FontsConfEditorController::moveFamilyDown(const QString &family, const QString &priority)
167 {
168     int index = indexOfFamily(family, priority);
169     if (index - 1 < countOfFamily(priority)) {
170         removeFamily(family, priority);
171         insertFamily(family, priority, index + 1);
172     }
173 }
174
175 void FontsConfEditorController::clear()
176 {
177     mFontInfoMap.clear();
178     mPrependFamily.clear();
179     mPreferFamily.clear();
180     mAcceptFamily.clear();
181     emit clearFamilyList();
182 }