1 /* This file is part of the KDE project
2 * Copyright (C) 2007 Thomas Zander <zander@kde.org>
3 * Copyright (C) 2009 Pierre Stirnweiss <pstirnweiss@googlemail.com>
4 * Copyright (C) 2012 Gopalakrishna Bhat A <gopalakbhat@gmail.com>
5 * Copyright (C) 2012 Mojtaba Shahi Senobari <mojtaba.shahi3000@gmail.com>
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Library General Public License for more details.
16 *
17 * You should have received a copy of the GNU Library General Public License
18 * along with this library; see the file COPYING.LIB. If not, write to
19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 * Boston, MA 02110-1301, USA.
21 */
22
23 #include "CharacterGeneral.h"
24 #include "CharacterHighlighting.h"
25 #include "LanguageTab.h"
26 #include "FontDecorations.h"
27 #include "FormattingPreview.h"
28
29 #include "StylesCombo.h"
30 #include "StylesModel.h"
31
32 #include <KoParagraphStyle.h>
33 #include <KoStyleThumbnailer.h>
34 #include <KoStyleManager.h>
35 #include <KoCharacterStyle.h>
36
37 #include <QDebug>
38
CharacterGeneral(QWidget * parent)39 CharacterGeneral::CharacterGeneral(QWidget *parent)
40 : QWidget(parent)
41 , m_style(0)
42 , m_styleManager(0)
43 , m_thumbnail(new KoStyleThumbnailer())
44 , m_paragraphStyleModel(new StylesModel(0, StylesModel::ParagraphStyle))
45 , m_characterInheritedStyleModel(new StylesModel(0, StylesModel::CharacterStyle))
46 {
47 widget.setupUi(this);
48 // we don't have next style for character styles
49 widget.nextStyle->setVisible(false);
50 widget.label_2->setVisible(false);
51 //
52
53 // paragraph style model
54 widget.nextStyle->showEditIcon(false);
55 widget.nextStyle->setStyleIsOriginal(true);
56 m_paragraphStyleModel->setStyleThumbnailer(m_thumbnail);
57 widget.nextStyle->setStylesModel(m_paragraphStyleModel);
58 // inherited style model
59 widget.inheritStyle->showEditIcon(false);
60 widget.inheritStyle->setStyleIsOriginal(true);
61 //for character General
62 m_characterInheritedStyleModel->setStyleThumbnailer(m_thumbnail);
63 widget.inheritStyle->setStylesModel(m_characterInheritedStyleModel);
64 widget.inheritStyle->setEnabled(false);
65
66 m_characterHighlighting = new CharacterHighlighting(true, this);
67 connect(m_characterHighlighting, SIGNAL(charStyleChanged()), this, SIGNAL(styleChanged()));
68 connect(m_characterHighlighting, SIGNAL(charStyleChanged()), this, SLOT(setPreviewCharacterStyle()));
69
70 m_languageTab = new LanguageTab(true, this);
71
72 widget.tabs->addTab(m_characterHighlighting, i18n("Font"));
73
74 m_languageTab->setVisible(false);
75
76 connect(widget.name, SIGNAL(textChanged(QString)), this, SIGNAL(nameChanged(QString)));
77 }
78
hideStyleName(bool hide)79 void CharacterGeneral::hideStyleName(bool hide)
80 {
81 if (hide) {
82 disconnect(widget.name, SIGNAL(textChanged(QString)), this, SIGNAL(nameChanged(QString)));
83 widget.tabs->removeTab(0);
84 m_nameHidden = true;
85 }
86 }
87
setStyle(KoCharacterStyle * style)88 void CharacterGeneral::setStyle(KoCharacterStyle *style)
89 {
90 m_style = style;
91 if (m_style == 0) {
92 return;
93 }
94 blockSignals(true);
95
96 if (!m_nameHidden) {
97 widget.name->setText(style->name());
98 }
99
100 m_characterHighlighting->setDisplay(style);
101 //m_languageTab->setDisplay(style);
102
103 widget.preview->setCharacterStyle(style);
104
105 if (m_styleManager) {
106 KoCharacterStyle *parentStyle = style->parentStyle();
107 if (parentStyle) {
108 widget.inheritStyle->setCurrentIndex(m_characterInheritedStyleModel->indexOf(parentStyle).row());
109 }
110 }
111
112 blockSignals(false);
113 }
114
save(KoCharacterStyle * style)115 void CharacterGeneral::save(KoCharacterStyle *style)
116 {
117 KoCharacterStyle *savingStyle;
118 if (style == 0) {
119 if (m_style == 0) {
120 return;
121 } else {
122 savingStyle = m_style;
123 }
124 } else {
125 savingStyle = style;
126 }
127
128 m_characterHighlighting->save(savingStyle);
129 //m_languageTab->save(savingStyle);
130 savingStyle->setName(widget.name->text());
131
132 if (m_style == savingStyle) {
133 emit styleAltered(savingStyle);
134 }
135 }
136
switchToGeneralTab()137 void CharacterGeneral::switchToGeneralTab()
138 {
139 widget.tabs->setCurrentIndex(0);
140 }
141
selectName()142 void CharacterGeneral::selectName()
143 {
144 widget.tabs->setCurrentIndex(widget.tabs->indexOf(widget.generalTab));
145 widget.name->selectAll();
146 widget.name->setFocus(Qt::OtherFocusReason);
147 }
148
setPreviewCharacterStyle()149 void CharacterGeneral::setPreviewCharacterStyle()
150 {
151 KoCharacterStyle *charStyle = new KoCharacterStyle();
152 save(charStyle);
153 if (charStyle) {
154 widget.preview->setCharacterStyle(charStyle);
155 }
156
157 delete charStyle;
158 }
159
styleName() const160 QString CharacterGeneral::styleName() const
161 {
162 return widget.name->text();
163 }
164
setStyleManager(KoStyleManager * sm)165 void CharacterGeneral::setStyleManager(KoStyleManager *sm)
166 {
167 if (!sm) {
168 return;
169 }
170 m_styleManager = sm;
171 m_paragraphStyleModel->setStyleManager(m_styleManager);
172 m_characterInheritedStyleModel->setStyleManager(m_styleManager);
173 }
174
updateNextStyleCombo(KoParagraphStyle * style)175 void CharacterGeneral::updateNextStyleCombo(KoParagraphStyle *style)
176 {
177 if (!style) {
178 return;
179 }
180
181 widget.nextStyle->setCurrentIndex(m_paragraphStyleModel->indexOf(style).row());
182 m_paragraphStyleModel->setCurrentParagraphStyle(style->styleId());
183 }
184
nextStyleId()185 int CharacterGeneral::nextStyleId()
186 {
187 if (!m_styleManager) {
188 return 0;
189 }
190 int nextStyleIndex = widget.nextStyle->currentIndex();
191 QModelIndex paragraphStyleIndex = m_paragraphStyleModel->index(nextStyleIndex);
192 quint64 internalId = paragraphStyleIndex.internalId();
193 KoParagraphStyle *paragraphStyle = m_styleManager->paragraphStyle(internalId);
194 if (paragraphStyle) {
195 return paragraphStyle->styleId();
196 } else {
197 return 0;
198 }
199 }
200
style() const201 KoCharacterStyle *CharacterGeneral::style() const
202 {
203 return m_style;
204 }
205