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));
100 if (file.open(QFile::ReadOnly)) {
101 QByteArray ba = file.readAll();
103 QDomDocument doc = QDomDocument();
105 QDomElement root = doc.firstChildElement();
106 aUi =
new Ui::KoConfigAuthorPage();
109 QString profile = root.attribute(
"name");
111 QDomElement el = root.firstChildElement(
"nickname");
113 aUi->leNickName->setText(el.text());
115 el = root.firstChildElement(
"givenname");
117 aUi->leFirstName->setText(el.text());
119 el = root.firstChildElement(
"middlename");
121 aUi->leInitials->setText(el.text());
123 el = root.firstChildElement(
"familyname");
125 aUi->leLastName->setText(el.text());
127 el = root.firstChildElement(
"title");
129 aUi->leTitle->setText(el.text());
131 el = root.firstChildElement(
"position");
133 aUi->lePosition->setText(el.text());
135 el = root.firstChildElement(
"company");
137 aUi->leCompany->setText(el.text());
141 QStandardItemModel *modes =
new QStandardItemModel();
142 aUi->tblContactInfo->setModel(modes);
143 el = root.firstChildElement(
"contact");
144 while (!el.isNull()) {
146 QString type =
d->contactModes.at(
d->contactKeys.indexOf(el.attribute(
"type")));
147 list.append(
new QStandardItem(type));
148 list.append(
new QStandardItem(el.text()));
149 modes->appendRow(list);
150 el = el.nextSiblingElement(
"contact");
152 modes->setHorizontalHeaderLabels(headerlabels);
153 QCompleter *positionSuggestions =
new QCompleter(
d->positions);
154 positionSuggestions->setCaseSensitivity(Qt::CaseInsensitive);
155 aUi->lePosition->setCompleter(positionSuggestions);
157 connect(aUi->btnAdd, SIGNAL(clicked()),
this, SLOT(
addContactEntry()));
160 d->cmbAuthorProfiles->addItem(profile);
161 profilesNew.append(profile);
162 d->profileUiList.append(aUi);
163 d->stack->addWidget(w);
168 KConfigGroup authorGroup(KSharedConfig::openConfig(),
"Author");
172 foreach (
const QString &profile , profiles) {
173 if (!profilesNew.contains(profile)) {
174 KConfigGroup cgs(&authorGroup,
"Author-" + profile);
175 aUi =
new Ui::KoConfigAuthorPage();
178 aUi->leNickName->setText(cgs.readEntry(
"creator"));
179 aUi->leFirstName->setText(cgs.readEntry(
"creator-first-name"));
180 aUi->leLastName->setText(cgs.readEntry(
"creator-last-name"));
181 aUi->leInitials->setText(cgs.readEntry(
"initial"));
182 aUi->leTitle->setText(cgs.readEntry(
"author-title"));
183 aUi->lePosition->setText(cgs.readEntry(
"position"));
184 QCompleter *positionSuggestions =
new QCompleter(
d->positions);
185 positionSuggestions->setCaseSensitivity(Qt::CaseInsensitive);
186 aUi->lePosition->setCompleter(positionSuggestions);
187 aUi->leCompany->setText(cgs.readEntry(
"company"));
190 QStandardItemModel *modes =
new QStandardItemModel();
191 aUi->tblContactInfo->setModel(modes);
192 if (cgs.hasKey(
"email")) {
194 QString email =
d->contactModes.at(
d->contactKeys.indexOf(
"email"));
195 list.append(
new QStandardItem(email));
196 list.append(
new QStandardItem(cgs.readEntry(
"email")));
197 modes->appendRow(list);
199 if (cgs.hasKey(
"telephone-work")) {
201 QString tel =
d->contactModes.at(
d->contactKeys.indexOf(
"telephone"));
202 list.append(
new QStandardItem(tel));
203 list.append(
new QStandardItem(cgs.readEntry(
"telephone-work")));
204 modes->appendRow(list);
206 if (cgs.hasKey(
"fax")) {
208 QString fax =
d->contactModes.at(
d->contactKeys.indexOf(
"fax"));
209 list.append(
new QStandardItem(fax));
210 list.append(
new QStandardItem(cgs.readEntry(
"fax")));
211 modes->appendRow(list);
214 postal << cgs.readEntry(
"street") << cgs.readEntry(
"postal-code") << cgs.readEntry(
"city") << cgs.readEntry(
"country");
216 Q_FOREACH(QString
part, postal) {
217 if (!
part.isEmpty()) {
218 address+=
part +
"\n";
221 if (!address.isEmpty()) {
223 QString add =
d->contactModes.at(
d->contactKeys.indexOf(
"address"));
224 list.append(
new QStandardItem(add));
225 list.append(
new QStandardItem(address));
226 modes->appendRow(list);
228 modes->setHorizontalHeaderLabels(headerlabels);
229 connect(aUi->btnAdd, SIGNAL(clicked()),
this, SLOT(
addContactEntry()));
232 d->cmbAuthorProfiles->addItem(profile);
233 d->profileUiList.append(aUi);
234 d->stack->addWidget(w);
240 aUi =
new Ui::KoConfigAuthorPage();
242 if (!profiles.contains(
d->defaultAuthor) || profilesNew.contains(
d->defaultAuthor)) {
245 w->setEnabled(
false);
246 d->cmbAuthorProfiles->insertItem(0,
d->defaultAuthor);
247 d->stack->insertWidget(0, w);
248 d->profileUiList.insert(0, aUi);
256 connect(
d->cmbAuthorProfiles, SIGNAL(currentIndexChanged(
int)),
this, SLOT(
profileChanged(
int)));
257 connect(newUser, SIGNAL(clicked(
bool)),
this, SLOT(
addUser()));
258 connect(
d->bnDeleteUser, SIGNAL(clicked(
bool)),
this, SLOT(
deleteUser()));
260 d->cmbAuthorProfiles->setCurrentIndex(0);
279 QString profileName = QInputDialog::getText(
this, i18n(
"Name of Profile"), i18n(
"Name (not duplicate or blank name):"), QLineEdit::Normal,
"", &ok);
285 Ui::KoConfigAuthorPage *curUi =
d->profileUiList[
d->cmbAuthorProfiles->currentIndex()];
286 Ui::KoConfigAuthorPage *aUi =
new Ui::KoConfigAuthorPage();
287 QWidget *w =
new QWidget;
290 aUi->leNickName->setText(curUi->leNickName->text());
291 aUi->leInitials->setText(curUi->leInitials->text());
292 aUi->leTitle->setText(curUi->leTitle->text());
293 aUi->leCompany->setText(curUi->leCompany->text());
294 aUi->leFirstName->setText(curUi->leFirstName->text());
295 aUi->leLastName->setText(curUi->leLastName->text());
296 aUi->lePosition->setText(curUi->lePosition->text());
297 QCompleter *positionSuggestions =
new QCompleter(
d->positions);
298 positionSuggestions->setCaseSensitivity(Qt::CaseInsensitive);
299 aUi->lePosition->setCompleter(positionSuggestions);
301 QStandardItemModel *modes =
new QStandardItemModel();
302 aUi->tblContactInfo->setModel(modes);
304 connect(aUi->btnAdd, SIGNAL(clicked()),
this, SLOT(
addContactEntry()));
307 int index =
d->cmbAuthorProfiles->currentIndex() + 1;
308 d->cmbAuthorProfiles->insertItem(index, profileName);
309 d->profileUiList.insert(index, aUi);
310 d->stack->insertWidget(index, w);
311 d->cmbAuthorProfiles->setCurrentIndex(index);
348 QDir dir(authorInfo);
349 if (!dir.mkpath(authorInfo)) {
350 qWarning()<<
"We can't make an author info directory, and therefore not save!";
353 for (
int i = 0; i <
d->profileUiList.size(); i++) {
354 if (
d->cmbAuthorProfiles->itemText(i)!=
d->defaultAuthor) {
356 QDomDocument doc = QDomDocument();
357 Ui::KoConfigAuthorPage *aUi =
d->profileUiList[i];
359 QDomElement root = doc.createElement(
"author");
360 root.setAttribute(
"name",
d->cmbAuthorProfiles->itemText(i));
362 QDomElement nickname = doc.createElement(
"nickname");
363 nickname.appendChild(doc.createTextNode(aUi->leNickName->text()));
364 root.appendChild(nickname);
365 QDomElement givenname = doc.createElement(
"givenname");
366 givenname.appendChild(doc.createTextNode(aUi->leFirstName->text()));
367 root.appendChild(givenname);
368 QDomElement familyname = doc.createElement(
"familyname");
369 familyname.appendChild(doc.createTextNode(aUi->leLastName->text()));
370 root.appendChild(familyname);
371 QDomElement middlename = doc.createElement(
"middlename");
372 middlename.appendChild(doc.createTextNode(aUi->leInitials->text()));
373 root.appendChild(middlename);
374 QDomElement title = doc.createElement(
"title");
375 title.appendChild(doc.createTextNode(aUi->leTitle->text()));
376 root.appendChild(title);
377 QDomElement company = doc.createElement(
"company");
378 company.appendChild(doc.createTextNode(aUi->leCompany->text()));
379 root.appendChild(company);
380 QDomElement position = doc.createElement(
"position");
381 position.appendChild(doc.createTextNode(aUi->lePosition->text()));
382 root.appendChild(position);
383 if (aUi->tblContactInfo) {
384 if (aUi->tblContactInfo->model()) {
385 for (
int i=0; i<aUi->tblContactInfo->model()->rowCount(); i++) {
386 QModelIndex index = aUi->tblContactInfo->model()->index(i, 1);
387 QModelIndex typeIndex = aUi->tblContactInfo->model()->index(i, 0);
388 QDomElement contactEl = doc.createElement(
"contact");
389 QString content = QVariant(aUi->tblContactInfo->model()->data(index)).toString();
390 contactEl.appendChild(doc.createTextNode(content));
391 QString type = QVariant(aUi->tblContactInfo->model()->data(typeIndex)).toString();
392 contactEl.setAttribute(
"type",
d->contactKeys.at(
d->contactModes.indexOf(type)));
393 root.appendChild(contactEl);
397 doc.appendChild(root);
398 ba = doc.toByteArray();
400 QFile f(authorInfo +
d->cmbAuthorProfiles->itemText(i) +
".authorinfo");
401 if(f.open(QFile::WriteOnly)) {
402 if (f.write(ba) < 0) {
403 qWarning() <<
"Writing author info went wrong:" << f.errorString();
407 qWarning() <<
"Writing author info went wrong:" << f.errorString();