58{
59 QGridLayout *
layout =
new QGridLayout(
this);
60
61 d->cmbAuthorProfiles =
new QComboBox();
62 layout->addWidget(
d->cmbAuthorProfiles, 0, 0);
63 QToolButton *newUser = new QToolButton();
64 newUser->setIcon(
koIcon(
"list-add"));
65 newUser->setToolTip(i18n("Add new author profile (starts out as a copy of current)"));
66 layout->addWidget(newUser, 0, 1);
67 d->bnDeleteUser =
new QToolButton();
68 d->bnDeleteUser->setIcon(
koIcon(
"edit-delete"));
69 d->bnDeleteUser->setToolTip(i18n(
"Delete the author profile"));
70 layout->addWidget(
d->bnDeleteUser, 0, 2);
71 QFrame *
f =
new QFrame();
72 f->setFrameStyle(QFrame::HLine | QFrame::Sunken);
73 layout->addWidget(f, 1, 0);
74 d->stack =
new QStackedWidget();
75 layout->addWidget(
d->stack, 2, 0, 1, 3);
76
77
78 d->positions << QString(i18nc(
"This is a list of suggestions for positions an artist can take, comma-separated",
"Adapter,Animator,Artist,Art Director,Author,Assistant,"
79 "Editor,Background,Cartoonist,Colorist,Concept Artist,"
80 "Corrector,Cover Artist,Creator,Designer,Inker,"
81 "Letterer,Matte Painter,Painter,Penciller,Proofreader,"
82 "Pixel Artist,Redliner,Sprite Artist,Typographer,Texture Artist,"
83 "Translator,Writer,Other")).split(",");
84
85
86 d->contactModes << i18n(
"Homepage") << i18n(
"Email") << i18n(
"Post Address") << i18n(
"Telephone") << i18n(
"Fax");
87 d->contactKeys <<
"homepage" <<
"email" <<
"address" <<
"telephone" <<
"fax";
89 headerlabels<< i18n("Type") << i18n("Entry");
90
91 Ui::KoConfigAuthorPage *aUi = 0;
92 QWidget *
w =
new QWidget;
93 d->defaultAuthor = i18n(
"Anonymous");
94
98 Q_FOREACH(const QString &entry, dir.entryList(filters)) {
99 QFile
file(dir.absoluteFilePath(entry));
101 file.open(QFile::ReadOnly);
102 QByteArray ba =
file.readAll();
104 QDomDocument doc = QDomDocument();
105 doc.setContent(ba);
106 QDomElement root = doc.firstChildElement();
107 aUi = new Ui::KoConfigAuthorPage();
109 aUi->setupUi(w);
110 QString profile = root.attribute("name");
111
112 QDomElement el = root.firstChildElement("nickname");
113 if (!el.isNull()) {
114 aUi->leNickName->setText(el.text());
115 }
116 el = root.firstChildElement("givenname");
117 if (!el.isNull()) {
118 aUi->leFirstName->setText(el.text());
119 }
120 el = root.firstChildElement("middlename");
121 if (!el.isNull()) {
122 aUi->leInitials->setText(el.text());
123 }
124 el = root.firstChildElement("familyname");
125 if (!el.isNull()) {
126 aUi->leLastName->setText(el.text());
127 }
128 el = root.firstChildElement("title");
129 if (!el.isNull()) {
130 aUi->leTitle->setText(el.text());
131 }
132 el = root.firstChildElement("position");
133 if (!el.isNull()) {
134 aUi->lePosition->setText(el.text());
135 }
136 el = root.firstChildElement("company");
137 if (!el.isNull()) {
138 aUi->leCompany->setText(el.text());
139 }
140
142 QStandardItemModel *modes = new QStandardItemModel();
143 aUi->tblContactInfo->setModel(modes);
144 el = root.firstChildElement("contact");
145 while (!el.isNull()) {
147 QString type =
d->contactModes.at(
d->contactKeys.indexOf(el.attribute(
"type")));
148 list.append(new QStandardItem(type));
149 list.append(new QStandardItem(el.text()));
150 modes->appendRow(list);
151 el = el.nextSiblingElement("contact");
152 }
153 modes->setHorizontalHeaderLabels(headerlabels);
154 QCompleter *positionSuggestions =
new QCompleter(
d->positions);
155 positionSuggestions->setCaseSensitivity(Qt::CaseInsensitive);
156 aUi->lePosition->setCompleter(positionSuggestions);
157
160
161 d->cmbAuthorProfiles->addItem(profile);
162 profilesNew.append(profile);
163 d->profileUiList.append(aUi);
164 d->stack->addWidget(w);
165 }
166 }
167
168
169 KConfigGroup authorGroup(KSharedConfig::openConfig(), "Author");
171
172
173 foreach (const QString &profile , profiles) {
174 if (!profilesNew.contains(profile)) {
175 KConfigGroup cgs(&authorGroup, "Author-" + profile);
176 aUi = new Ui::KoConfigAuthorPage();
178 aUi->setupUi(w);
179 aUi->leNickName->setText(cgs.readEntry("creator"));
180 aUi->leFirstName->setText(cgs.readEntry("creator-first-name"));
181 aUi->leLastName->setText(cgs.readEntry("creator-last-name"));
182 aUi->leInitials->setText(cgs.readEntry("initial"));
183 aUi->leTitle->setText(cgs.readEntry("author-title"));
184 aUi->lePosition->setText(cgs.readEntry("position"));
185 QCompleter *positionSuggestions =
new QCompleter(
d->positions);
186 positionSuggestions->setCaseSensitivity(Qt::CaseInsensitive);
187 aUi->lePosition->setCompleter(positionSuggestions);
188 aUi->leCompany->setText(cgs.readEntry("company"));
189
191 QStandardItemModel *modes = new QStandardItemModel();
192 aUi->tblContactInfo->setModel(modes);
193 if (cgs.hasKey("email")) {
195 QString email =
d->contactModes.at(
d->contactKeys.indexOf(
"email"));
196 list.append(new QStandardItem(email));
197 list.append(new QStandardItem(cgs.readEntry("email")));
198 modes->appendRow(list);
199 }
200 if (cgs.hasKey("telephone-work")) {
202 QString tel =
d->contactModes.at(
d->contactKeys.indexOf(
"telephone"));
203 list.append(new QStandardItem(tel));
204 list.append(new QStandardItem(cgs.readEntry("telephone-work")));
205 modes->appendRow(list);
206 }
207 if (cgs.hasKey("fax")) {
209 QString fax =
d->contactModes.at(
d->contactKeys.indexOf(
"fax"));
210 list.append(new QStandardItem(fax));
211 list.append(new QStandardItem(cgs.readEntry("fax")));
212 modes->appendRow(list);
213 }
215 postal << cgs.readEntry("street") << cgs.readEntry("postal-code") << cgs.readEntry("city") << cgs.readEntry("country");
216 QString address;
217 Q_FOREACH(QString
part, postal) {
218 if (!
part.isEmpty()) {
219 address+=
part +
"\n";
220 }
221 }
222 if (!address.isEmpty()) {
224 QString add =
d->contactModes.at(
d->contactKeys.indexOf(
"address"));
225 list.append(new QStandardItem(add));
226 list.append(new QStandardItem(address));
227 modes->appendRow(list);
228 }
229 modes->setHorizontalHeaderLabels(headerlabels);
232
233 d->cmbAuthorProfiles->addItem(profile);
234 d->profileUiList.append(aUi);
235 d->stack->addWidget(w);
236 }
237 }
238
239
240
241 aUi = new Ui::KoConfigAuthorPage();
243 if (!profiles.contains(
d->defaultAuthor) || profilesNew.contains(
d->defaultAuthor)) {
244
245 aUi->setupUi(w);
246 w->setEnabled(
false);
247 d->cmbAuthorProfiles->insertItem(0,
d->defaultAuthor);
248 d->stack->insertWidget(0, w);
249 d->profileUiList.insert(0, aUi);
250 } else {
251 delete aUi;
253 }
254
255
256
260
261 d->cmbAuthorProfiles->setCurrentIndex(0);
263}
QList< QString > QStringList
quint64 part(quint64 n1, quint64 n2, int p)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void profileChanged(int i)
void removeContactEntry()
static QString getAppDataLocation()
#define koIcon(name)
Use these macros for icons without any issues.