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));
100 if (
file.open(QFile::ReadOnly)) {
101 QByteArray ba =
file.readAll();
103 QDomDocument doc = QDomDocument();
104 doc.setContent(ba);
105 QDomElement root = doc.firstChildElement();
106 aUi = new Ui::KoConfigAuthorPage();
108 aUi->setupUi(w);
109 QString profile = root.attribute("name");
110
111 QDomElement el = root.firstChildElement("nickname");
112 if (!el.isNull()) {
113 aUi->leNickName->setText(el.text());
114 }
115 el = root.firstChildElement("givenname");
116 if (!el.isNull()) {
117 aUi->leFirstName->setText(el.text());
118 }
119 el = root.firstChildElement("middlename");
120 if (!el.isNull()) {
121 aUi->leInitials->setText(el.text());
122 }
123 el = root.firstChildElement("familyname");
124 if (!el.isNull()) {
125 aUi->leLastName->setText(el.text());
126 }
127 el = root.firstChildElement("title");
128 if (!el.isNull()) {
129 aUi->leTitle->setText(el.text());
130 }
131 el = root.firstChildElement("position");
132 if (!el.isNull()) {
133 aUi->lePosition->setText(el.text());
134 }
135 el = root.firstChildElement("company");
136 if (!el.isNull()) {
137 aUi->leCompany->setText(el.text());
138 }
139
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");
151 }
152 modes->setHorizontalHeaderLabels(headerlabels);
153 QCompleter *positionSuggestions =
new QCompleter(
d->positions);
154 positionSuggestions->setCaseSensitivity(Qt::CaseInsensitive);
155 aUi->lePosition->setCompleter(positionSuggestions);
156
157 connect(aUi->btnAdd, SIGNAL(clicked()),
this, SLOT(
addContactEntry()));
159
160 d->cmbAuthorProfiles->addItem(profile);
161 profilesNew.append(profile);
162 d->profileUiList.append(aUi);
163 d->stack->addWidget(w);
164 }
165 }
166
167
168 KConfigGroup authorGroup(KSharedConfig::openConfig(), "Author");
170
171
172 foreach (const QString &profile , profiles) {
173 if (!profilesNew.contains(profile)) {
174 KConfigGroup cgs(&authorGroup, "Author-" + profile);
175 aUi = new Ui::KoConfigAuthorPage();
177 aUi->setupUi(w);
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"));
188
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);
198 }
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);
205 }
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);
212 }
214 postal << cgs.readEntry("street") << cgs.readEntry("postal-code") << cgs.readEntry("city") << cgs.readEntry("country");
215 QString address;
216 Q_FOREACH(QString
part, postal) {
217 if (!
part.isEmpty()) {
218 address+=
part +
"\n";
219 }
220 }
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);
227 }
228 modes->setHorizontalHeaderLabels(headerlabels);
229 connect(aUi->btnAdd, SIGNAL(clicked()),
this, SLOT(
addContactEntry()));
231
232 d->cmbAuthorProfiles->addItem(profile);
233 d->profileUiList.append(aUi);
234 d->stack->addWidget(w);
235 }
236 }
237
238
239
240 aUi = new Ui::KoConfigAuthorPage();
242 if (!profiles.contains(
d->defaultAuthor) || profilesNew.contains(
d->defaultAuthor)) {
243
244 aUi->setupUi(w);
245 w->setEnabled(
false);
246 d->cmbAuthorProfiles->insertItem(0,
d->defaultAuthor);
247 d->stack->insertWidget(0, w);
248 d->profileUiList.insert(0, aUi);
249 } else {
250 delete aUi;
252 }
253
254
255
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()));
259
260 d->cmbAuthorProfiles->setCurrentIndex(0);
262}
QList< QString > QStringList
quint64 part(quint64 n1, quint64 n2, int p)
void profileChanged(int i)
void removeContactEntry()
static QString getAppDataLocation()
#define koIcon(name)
Use these macros for icons without any issues.