59 QGridLayout *layout =
new QGridLayout(
this);
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);
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(
",");
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");
91 Ui::KoConfigAuthorPage *aUi = 0;
92 QWidget *w =
new QWidget;
93 d->defaultAuthor = i18n(
"Anonymous");
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();
106 QDomElement root = doc.firstChildElement();
107 aUi =
new Ui::KoConfigAuthorPage();
110 QString profile = root.attribute(
"name");
112 QDomElement el = root.firstChildElement(
"nickname");
114 aUi->leNickName->setText(el.text());
116 el = root.firstChildElement(
"givenname");
118 aUi->leFirstName->setText(el.text());
120 el = root.firstChildElement(
"middlename");
122 aUi->leInitials->setText(el.text());
124 el = root.firstChildElement(
"familyname");
126 aUi->leLastName->setText(el.text());
128 el = root.firstChildElement(
"title");
130 aUi->leTitle->setText(el.text());
132 el = root.firstChildElement(
"position");
134 aUi->lePosition->setText(el.text());
136 el = root.firstChildElement(
"company");
138 aUi->leCompany->setText(el.text());
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");
153 modes->setHorizontalHeaderLabels(headerlabels);
154 QCompleter *positionSuggestions =
new QCompleter(
d->positions);
155 positionSuggestions->setCaseSensitivity(Qt::CaseInsensitive);
156 aUi->lePosition->setCompleter(positionSuggestions);
161 d->cmbAuthorProfiles->addItem(profile);
162 profilesNew.append(profile);
163 d->profileUiList.append(aUi);
164 d->stack->addWidget(w);
169 KConfigGroup authorGroup(KSharedConfig::openConfig(),
"Author");
173 foreach (
const QString &profile , profiles) {
174 if (!profilesNew.contains(profile)) {
175 KConfigGroup cgs(&authorGroup,
"Author-" + profile);
176 aUi =
new Ui::KoConfigAuthorPage();
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"));
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);
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);
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);
215 postal << cgs.readEntry(
"street") << cgs.readEntry(
"postal-code") << cgs.readEntry(
"city") << cgs.readEntry(
"country");
217 Q_FOREACH(QString
part, postal) {
218 if (!
part.isEmpty()) {
219 address+=
part +
"\n";
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);
229 modes->setHorizontalHeaderLabels(headerlabels);
233 d->cmbAuthorProfiles->addItem(profile);
234 d->profileUiList.append(aUi);
235 d->stack->addWidget(w);
241 aUi =
new Ui::KoConfigAuthorPage();
243 if (!profiles.contains(
d->defaultAuthor) || profilesNew.contains(
d->defaultAuthor)) {
246 w->setEnabled(
false);
247 d->cmbAuthorProfiles->insertItem(0,
d->defaultAuthor);
248 d->stack->insertWidget(0, w);
249 d->profileUiList.insert(0, aUi);
261 d->cmbAuthorProfiles->setCurrentIndex(0);
280 QString profileName = QInputDialog::getText(
this, i18n(
"Name of Profile"), i18n(
"Name (not duplicate or blank name):"), QLineEdit::Normal,
"", &ok);
286 Ui::KoConfigAuthorPage *curUi =
d->profileUiList[
d->cmbAuthorProfiles->currentIndex()];
287 Ui::KoConfigAuthorPage *aUi =
new Ui::KoConfigAuthorPage();
288 QWidget *w =
new QWidget;
291 aUi->leNickName->setText(curUi->leNickName->text());
292 aUi->leInitials->setText(curUi->leInitials->text());
293 aUi->leTitle->setText(curUi->leTitle->text());
294 aUi->leCompany->setText(curUi->leCompany->text());
295 aUi->leFirstName->setText(curUi->leFirstName->text());
296 aUi->leLastName->setText(curUi->leLastName->text());
297 aUi->lePosition->setText(curUi->lePosition->text());
298 QCompleter *positionSuggestions =
new QCompleter(
d->positions);
299 positionSuggestions->setCaseSensitivity(Qt::CaseInsensitive);
300 aUi->lePosition->setCompleter(positionSuggestions);
302 QStandardItemModel *modes =
new QStandardItemModel();
303 aUi->tblContactInfo->setModel(modes);
308 int index =
d->cmbAuthorProfiles->currentIndex() + 1;
309 d->cmbAuthorProfiles->insertItem(index, profileName);
310 d->profileUiList.insert(index, aUi);
311 d->stack->insertWidget(index, w);
312 d->cmbAuthorProfiles->setCurrentIndex(index);
349 QDir dir(authorInfo);
350 if (!dir.mkpath(authorInfo)) {
351 qWarning()<<
"We can't make an author info directory, and therefore not save!";
354 for (
int i = 0; i <
d->profileUiList.size(); i++) {
355 if (
d->cmbAuthorProfiles->itemText(i)!=
d->defaultAuthor) {
357 QDomDocument doc = QDomDocument();
358 Ui::KoConfigAuthorPage *aUi =
d->profileUiList[i];
360 QDomElement root = doc.createElement(
"author");
361 root.setAttribute(
"name",
d->cmbAuthorProfiles->itemText(i));
363 QDomElement nickname = doc.createElement(
"nickname");
364 nickname.appendChild(doc.createTextNode(aUi->leNickName->text()));
365 root.appendChild(nickname);
366 QDomElement givenname = doc.createElement(
"givenname");
367 givenname.appendChild(doc.createTextNode(aUi->leFirstName->text()));
368 root.appendChild(givenname);
369 QDomElement familyname = doc.createElement(
"familyname");
370 familyname.appendChild(doc.createTextNode(aUi->leLastName->text()));
371 root.appendChild(familyname);
372 QDomElement middlename = doc.createElement(
"middlename");
373 middlename.appendChild(doc.createTextNode(aUi->leInitials->text()));
374 root.appendChild(middlename);
375 QDomElement title = doc.createElement(
"title");
376 title.appendChild(doc.createTextNode(aUi->leTitle->text()));
377 root.appendChild(title);
378 QDomElement company = doc.createElement(
"company");
379 company.appendChild(doc.createTextNode(aUi->leCompany->text()));
380 root.appendChild(company);
381 QDomElement position = doc.createElement(
"position");
382 position.appendChild(doc.createTextNode(aUi->lePosition->text()));
383 root.appendChild(position);
384 if (aUi->tblContactInfo) {
385 if (aUi->tblContactInfo->model()) {
386 for (
int i=0; i<aUi->tblContactInfo->model()->rowCount(); i++) {
387 QModelIndex index = aUi->tblContactInfo->model()->index(i, 1);
388 QModelIndex typeIndex = aUi->tblContactInfo->model()->index(i, 0);
389 QDomElement contactEl = doc.createElement(
"contact");
390 QString content = QVariant(aUi->tblContactInfo->model()->data(index)).toString();
391 contactEl.appendChild(doc.createTextNode(content));
392 QString type = QVariant(aUi->tblContactInfo->model()->data(typeIndex)).toString();
393 contactEl.setAttribute(
"type",
d->contactKeys.at(
d->contactModes.indexOf(type)));
394 root.appendChild(contactEl);
398 doc.appendChild(root);
399 ba = doc.toByteArray();
401 QFile f(authorInfo +
d->cmbAuthorProfiles->itemText(i) +
".authorinfo");
402 f.open(QFile::WriteOnly);
403 if (f.write(ba) < 0) {
404 qWarning()<<
"Writing author info went wrong:"<<f.errorString();