• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdegraphics API Reference
  • KDE Home
  • Contact Us
 

libs/libkexiv2/libkexiv2

  • sources
  • kde-4.14
  • kdegraphics
  • libs
  • libkexiv2
  • libkexiv2
subjectwidget.cpp
Go to the documentation of this file.
1 
28 #include "subjectwidget.moc"
29 
30 // Qt includes
31 
32 #include <QCheckBox>
33 #include <QDomDocument>
34 #include <QDomElement>
35 #include <QFile>
36 #include <QGridLayout>
37 #include <QLabel>
38 #include <QPushButton>
39 #include <QRadioButton>
40 #include <QValidator>
41 
42 // KDE includes
43 
44 #include <kcombobox.h>
45 #include <kdialog.h>
46 #include <kglobal.h>
47 #include <khbox.h>
48 #include <kiconloader.h>
49 #include <klineedit.h>
50 #include <klistwidget.h>
51 #include <klocale.h>
52 #include <kstandarddirs.h>
53 #include <kdebug.h>
54 
55 namespace KExiv2Iface
56 {
57 
58 class SubjectWidget::Private
59 {
60 public:
61 
62  enum EditionMode
63  {
64  STANDARD = 0,
65  CUSTOM
66  };
67 
68  Private()
69  {
70  addSubjectButton = 0;
71  delSubjectButton = 0;
72  repSubjectButton = 0;
73  subjectsBox = 0;
74  iprLabel = 0;
75  refLabel = 0;
76  nameLabel = 0;
77  matterLabel = 0;
78  detailLabel = 0;
79  btnGroup = 0;
80  stdBtn = 0;
81  customBtn = 0;
82  refCB = 0;
83  optionsBox = 0;
84  }
85 
86  typedef QMap<QString, SubjectData> SubjectCodesMap;
87 
88  SubjectCodesMap subMap;
89 
90  QStringList subjectsList;
91 
92  QWidget* optionsBox;
93 
94  QPushButton* addSubjectButton;
95  QPushButton* delSubjectButton;
96  QPushButton* repSubjectButton;
97 
98  QLabel* iprLabel;
99  QLabel* refLabel;
100  QLabel* nameLabel;
101  QLabel* matterLabel;
102  QLabel* detailLabel;
103 
104  QButtonGroup* btnGroup;
105 
106  QRadioButton* stdBtn;
107  QRadioButton* customBtn;
108 
109  KComboBox* refCB;
110 
111  KListWidget* subjectsBox;
112 };
113 
114 // --------------------------------------------------------------------------------
115 
116 SubjectWidget::SubjectWidget(QWidget* parent)
117  : QWidget(parent), d(new Private)
118 {
119  // Load subject codes provided by IPTC/NAA as xml file.
120  // See http://iptc.cms.apa.at/std/topicset/topicset.iptc-subjectcode.xml for details.
121 
122  KGlobal::dirs()->addResourceDir("iptcschema", KStandardDirs::installPath("data") +
123  QString("libkexiv2/data"));
124  QString path = KGlobal::dirs()->findResource("iptcschema", "topicset.iptc-subjectcode.xml");
125 
126  if (!loadSubjectCodesFromXML(KUrl(path)))
127  kDebug() << "Cannot load IPTC/NAA subject codes XML database";
128 
129  // --------------------------------------------------------
130 
131  // Subject Reference Number only accept digit.
132  QRegExp refDigitRx("^[0-9]{8}$");
133  QValidator *refValidator = new QRegExpValidator(refDigitRx, this);
134 
135  // --------------------------------------------------------
136 
137  m_subjectsCheck = new QCheckBox(i18n("Use structured definition of the subject matter:"), this);
138  d->optionsBox = new QWidget;
139  d->btnGroup = new QButtonGroup(this);
140  d->stdBtn = new QRadioButton;
141  d->customBtn = new QRadioButton;
142  d->refCB = new KComboBox;
143  QLabel* codeLink = new QLabel(i18n("Use standard "
144  "<b><a href='http://www.iptc.org/site/NewsCodes'>"
145  "reference code</a></b>"));
146  codeLink->setOpenExternalLinks(true);
147  codeLink->setWordWrap(false);
148 
149  // By default, check box is not visible. (digiKam do not use it, kipi-plugins yes).
150  m_subjectsCheck->setVisible(false);
151 
152  QLabel* customLabel = new QLabel(i18n("Use custom definition"));
153 
154  d->btnGroup->addButton(d->stdBtn, Private::STANDARD);
155  d->btnGroup->addButton(d->customBtn, Private::CUSTOM);
156  d->btnGroup->setExclusive(true);
157  d->stdBtn->setChecked(true);
158 
159  for (Private::SubjectCodesMap::Iterator it = d->subMap.begin();
160  it != d->subMap.end(); ++it)
161  d->refCB->addItem(it.key());
162 
163  // --------------------------------------------------------
164 
165  m_iprEdit = new KLineEdit;
166  m_iprEdit->setClearButtonShown(true);
167  m_iprEdit->setMaxLength(32);
168 
169  // --------------------------------------------------------
170 
171  m_refEdit = new KLineEdit;
172  m_refEdit->setClearButtonShown(true);
173  m_refEdit->setValidator(refValidator);
174  m_refEdit->setMaxLength(8);
175 
176  // --------------------------------------------------------
177 
178  m_nameEdit = new KLineEdit;
179  m_nameEdit->setClearButtonShown(true);
180  m_nameEdit->setMaxLength(64);
181 
182  // --------------------------------------------------------
183 
184  m_matterEdit = new KLineEdit;
185  m_matterEdit->setClearButtonShown(true);
186  m_matterEdit->setMaxLength(64);
187 
188  // --------------------------------------------------------
189 
190  m_detailEdit = new KLineEdit;
191  m_detailEdit->setClearButtonShown(true);
192  m_detailEdit->setMaxLength(64);
193 
194  // --------------------------------------------------------
195 
196  d->iprLabel = new QLabel(i18nc("Information Provider Reference: "
197  "A name, registered with the IPTC/NAA, "
198  "identifying the provider that guarantees "
199  "the uniqueness of the UNO", "I.P.R:"));
200  d->refLabel = new QLabel(i18n("Reference:"));
201  d->nameLabel = new QLabel(i18n("Name:"));
202  d->matterLabel = new QLabel(i18n("Matter:"));
203  d->detailLabel = new QLabel(i18n("Detail:"));
204 
205  // --------------------------------------------------------
206 
207  d->subjectsBox = new KListWidget;
208  d->subjectsBox->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
209 
210  d->addSubjectButton = new QPushButton(i18n("&Add"));
211  d->delSubjectButton = new QPushButton(i18n("&Delete"));
212  d->repSubjectButton = new QPushButton(i18n("&Replace"));
213  d->addSubjectButton->setIcon(SmallIcon("list-add"));
214  d->delSubjectButton->setIcon(SmallIcon("edit-delete"));
215  d->repSubjectButton->setIcon(SmallIcon("view-refresh"));
216  d->delSubjectButton->setEnabled(false);
217  d->repSubjectButton->setEnabled(false);
218 
219  // --------------------------------------------------------
220 
221  m_note = new QLabel;
222  m_note->setMaximumWidth(150);
223  m_note->setOpenExternalLinks(true);
224  m_note->setWordWrap(true);
225  m_note->setFrameStyle(QFrame::StyledPanel | QFrame::Raised);
226 
227  // --------------------------------------------------------
228 
229  QGridLayout* optionsBoxLayout = new QGridLayout;
230  optionsBoxLayout->addWidget(d->stdBtn, 0, 0, 1, 1);
231  optionsBoxLayout->addWidget(codeLink, 0, 1, 1, 2);
232  optionsBoxLayout->addWidget(d->refCB, 0, 3, 1, 1);
233  optionsBoxLayout->addWidget(d->customBtn, 1, 0, 1, 4);
234  optionsBoxLayout->addWidget(customLabel, 1, 1, 1, 4);
235  optionsBoxLayout->addWidget(d->iprLabel, 2, 0, 1, 1);
236  optionsBoxLayout->addWidget(m_iprEdit, 2, 1, 1, 4);
237  optionsBoxLayout->addWidget(d->refLabel, 3, 0, 1, 1);
238  optionsBoxLayout->addWidget(m_refEdit, 3, 1, 1, 1);
239  optionsBoxLayout->addWidget(d->nameLabel, 4, 0, 1, 1);
240  optionsBoxLayout->addWidget(m_nameEdit, 4, 1, 1, 4);
241  optionsBoxLayout->addWidget(d->matterLabel, 5, 0, 1, 1);
242  optionsBoxLayout->addWidget(m_matterEdit, 5, 1, 1, 4);
243  optionsBoxLayout->addWidget(d->detailLabel, 6, 0, 1, 1);
244  optionsBoxLayout->addWidget(m_detailEdit, 6, 1, 1, 4);
245  optionsBoxLayout->setColumnStretch(4, 10);
246  optionsBoxLayout->setMargin(0);
247  optionsBoxLayout->setSpacing(KDialog::spacingHint());
248  d->optionsBox->setLayout(optionsBoxLayout);
249 
250  // --------------------------------------------------------
251 
252  QGridLayout* mainLayout = new QGridLayout;
253  mainLayout->setAlignment( Qt::AlignTop );
254  mainLayout->addWidget(m_subjectsCheck, 0, 0, 1, 4);
255  mainLayout->addWidget(d->optionsBox, 1, 0, 1, 4);
256  mainLayout->addWidget(d->subjectsBox, 2, 0, 5, 3);
257  mainLayout->addWidget(d->addSubjectButton, 2, 3, 1, 1);
258  mainLayout->addWidget(d->delSubjectButton, 3, 3, 1, 1);
259  mainLayout->addWidget(d->repSubjectButton, 4, 3, 1, 1);
260  mainLayout->addWidget(m_note, 5, 3, 1, 1);
261  mainLayout->setRowStretch(6, 10);
262  mainLayout->setColumnStretch(2, 1);
263  mainLayout->setMargin(0);
264  mainLayout->setSpacing(KDialog::spacingHint());
265  setLayout(mainLayout);
266 
267  // --------------------------------------------------------
268 
269  connect(d->subjectsBox, SIGNAL(itemSelectionChanged()),
270  this, SLOT(slotSubjectSelectionChanged()));
271 
272  connect(d->addSubjectButton, SIGNAL(clicked()),
273  this, SLOT(slotAddSubject()));
274 
275  connect(d->delSubjectButton, SIGNAL(clicked()),
276  this, SLOT(slotDelSubject()));
277 
278  connect(d->repSubjectButton, SIGNAL(clicked()),
279  this, SLOT(slotRepSubject()));
280 
281  connect(d->btnGroup, SIGNAL(buttonReleased(int)),
282  this, SLOT(slotEditOptionChanged(int)));
283 
284  connect(d->refCB, SIGNAL(activated(int)),
285  this, SLOT(slotRefChanged()));
286 
287  // --------------------------------------------------------
288 
289  connect(m_subjectsCheck, SIGNAL(toggled(bool)),
290  this, SLOT(slotSubjectsToggled(bool)));
291 
292  // --------------------------------------------------------
293 
294  connect(m_subjectsCheck, SIGNAL(toggled(bool)),
295  this, SIGNAL(signalModified()));
296 
297  connect(d->addSubjectButton, SIGNAL(clicked()),
298  this, SIGNAL(signalModified()));
299 
300  connect(d->delSubjectButton, SIGNAL(clicked()),
301  this, SIGNAL(signalModified()));
302 
303  connect(d->repSubjectButton, SIGNAL(clicked()),
304  this, SIGNAL(signalModified()));
305 
306  // --------------------------------------------------------
307 
308  slotEditOptionChanged(d->btnGroup->id(d->btnGroup->checkedButton()));
309 }
310 
311 SubjectWidget::~SubjectWidget()
312 {
313  delete d;
314 }
315 
316 void SubjectWidget::slotSubjectsToggled(bool b)
317 {
318  d->optionsBox->setEnabled(b);
319  d->subjectsBox->setEnabled(b);
320  d->addSubjectButton->setEnabled(b);
321  d->delSubjectButton->setEnabled(b);
322  d->repSubjectButton->setEnabled(b);
323  slotEditOptionChanged(d->btnGroup->id(d->btnGroup->checkedButton()));
324 }
325 
326 void SubjectWidget::slotEditOptionChanged(int b)
327 {
328  if (b == Private::CUSTOM)
329  {
330  d->refCB->setEnabled(false);
331  m_iprEdit->setEnabled(true);
332  m_refEdit->setEnabled(true);
333  m_nameEdit->setEnabled(true);
334  m_matterEdit->setEnabled(true);
335  m_detailEdit->setEnabled(true);
336  }
337  else
338  {
339  d->refCB->setEnabled(true);
340  m_iprEdit->setEnabled(false);
341  m_refEdit->setEnabled(false);
342  m_nameEdit->setEnabled(false);
343  m_matterEdit->setEnabled(false);
344  m_detailEdit->setEnabled(false);
345  slotRefChanged();
346  }
347 }
348 
349 void SubjectWidget::slotRefChanged()
350 {
351  QString key = d->refCB->currentText();
352  QString name, matter, detail;
353 
354  for (Private::SubjectCodesMap::Iterator it = d->subMap.begin();
355  it != d->subMap.end(); ++it)
356  {
357  if (key == it.key())
358  {
359  name = it.value().name;
360  matter = it.value().matter;
361  detail = it.value().detail;
362  }
363  }
364 
365  m_refEdit->setText(key);
366  m_nameEdit->setText(name);
367  m_matterEdit->setText(matter);
368  m_detailEdit->setText(detail);
369 }
370 
371 QString SubjectWidget::buildSubject() const
372 {
373  QString subject = m_iprEdit->text();
374  subject.append(":");
375  subject.append(m_refEdit->text());
376  subject.append(":");
377  subject.append(m_nameEdit->text());
378  subject.append(":");
379  subject.append(m_matterEdit->text());
380  subject.append(":");
381  subject.append(m_detailEdit->text());
382  return subject;
383 }
384 
385 void SubjectWidget::slotDelSubject()
386 {
387  QListWidgetItem* item = d->subjectsBox->currentItem();
388  if (!item) return;
389  d->subjectsBox->takeItem(d->subjectsBox->row(item));
390  delete item;
391 }
392 
393 void SubjectWidget::slotRepSubject()
394 {
395  QString newSubject = buildSubject();
396  if (newSubject.isEmpty()) return;
397 
398  if (!d->subjectsBox->selectedItems().isEmpty())
399  {
400  d->subjectsBox->selectedItems()[0]->setText(newSubject);
401  m_iprEdit->clear();
402  m_refEdit->clear();
403  m_nameEdit->clear();
404  m_matterEdit->clear();
405  m_detailEdit->clear();
406  }
407 }
408 
409 void SubjectWidget::slotSubjectSelectionChanged()
410 {
411  if (!d->subjectsBox->selectedItems().isEmpty())
412  {
413  QString subject = d->subjectsBox->selectedItems()[0]->text();
414  m_iprEdit->setText(subject.section(':', 0, 0));
415  m_refEdit->setText(subject.section(':', 1, 1));
416  m_nameEdit->setText(subject.section(':', 2, 2));
417  m_matterEdit->setText(subject.section(':', 3, 3));
418  m_detailEdit->setText(subject.section(':', 4, 4));
419  d->delSubjectButton->setEnabled(true);
420  d->repSubjectButton->setEnabled(true);
421  }
422  else
423  {
424  d->delSubjectButton->setEnabled(false);
425  d->repSubjectButton->setEnabled(false);
426  }
427 }
428 
429 void SubjectWidget::slotAddSubject()
430 {
431  QString newSubject = buildSubject();
432  if (newSubject.isEmpty()) return;
433 
434  bool found = false;
435  for (int i = 0 ; i < d->subjectsBox->count(); i++)
436  {
437  QListWidgetItem* item = d->subjectsBox->item(i);
438  if (newSubject == item->text())
439  {
440  found = true;
441  break;
442  }
443  }
444 
445  if (!found)
446  {
447  d->subjectsBox->insertItem(d->subjectsBox->count(), newSubject);
448  m_iprEdit->clear();
449  m_refEdit->clear();
450  m_nameEdit->clear();
451  m_matterEdit->clear();
452  m_detailEdit->clear();
453  }
454 }
455 
456 bool SubjectWidget::loadSubjectCodesFromXML(const KUrl& url)
457 {
458  QFile xmlfile(url.toLocalFile());
459 
460  if (!xmlfile.open(QIODevice::ReadOnly))
461  return false;
462 
463  QDomDocument xmlDoc("NewsML");
464  if (!xmlDoc.setContent(&xmlfile))
465  return false;
466 
467  QDomElement xmlDocElem = xmlDoc.documentElement();
468  if (xmlDocElem.tagName()!="NewsML")
469  return false;
470 
471  for (QDomNode nbE1 = xmlDocElem.firstChild();
472  !nbE1.isNull(); nbE1 = nbE1.nextSibling())
473  {
474  QDomElement newsItemElement = nbE1.toElement();
475  if (newsItemElement.isNull()) continue;
476  if (newsItemElement.tagName() != "NewsItem") continue;
477 
478  for (QDomNode nbE2 = newsItemElement.firstChild();
479  !nbE2.isNull(); nbE2 = nbE2.nextSibling())
480  {
481  QDomElement topicSetElement = nbE2.toElement();
482  if (topicSetElement.isNull()) continue;
483  if (topicSetElement.tagName() != "TopicSet") continue;
484 
485  for (QDomNode nbE3 = topicSetElement.firstChild();
486  !nbE3.isNull(); nbE3 = nbE3.nextSibling())
487  {
488  QDomElement topicElement = nbE3.toElement();
489  if (topicElement.isNull()) continue;
490  if (topicElement.tagName() != "Topic") continue;
491 
492  QString type, name, matter, detail, ref;
493  for (QDomNode nbE4 = topicElement.firstChild();
494  !nbE4.isNull(); nbE4 = nbE4.nextSibling())
495  {
496  QDomElement topicSubElement = nbE4.toElement();
497  if (topicSubElement.isNull()) continue;
498 
499  if (topicSubElement.tagName() == "TopicType")
500  type = topicSubElement.attribute("FormalName");
501 
502  if (topicSubElement.tagName() == "FormalName")
503  ref = topicSubElement.text();
504 
505  if (topicSubElement.tagName() == "Description" &&
506  topicSubElement.attribute("Variant") == "Name")
507  {
508  if (type == "Subject")
509  name = topicSubElement.text();
510  else if (type == "SubjectMatter")
511  matter = topicSubElement.text();
512  else if (type == "SubjectDetail")
513  detail = topicSubElement.text();
514  }
515  }
516 
517  d->subMap.insert(ref, SubjectData(name, matter, detail));
518  }
519  }
520  }
521 
522  // Set the Subject Name everywhere on the map.
523 
524  for (Private::SubjectCodesMap::Iterator it = d->subMap.begin();
525  it != d->subMap.end(); ++it)
526  {
527  QString name, keyPrefix;
528  if (it.key().endsWith(QLatin1String("00000")))
529  {
530  keyPrefix = it.key().left(3);
531  name = it.value().name;
532 
533  for (Private::SubjectCodesMap::Iterator it2 = d->subMap.begin();
534  it2 != d->subMap.end(); ++it2)
535  {
536  if (it2.key().startsWith(keyPrefix) &&
537  !it2.key().endsWith(QLatin1String("00000")))
538  {
539  it2.value().name = name;
540  }
541  }
542  }
543  }
544 
545  // Set the Subject Matter Name everywhere on the map.
546 
547  for (Private::SubjectCodesMap::Iterator it = d->subMap.begin();
548  it != d->subMap.end(); ++it)
549  {
550  QString matter, keyPrefix;
551  if (it.key().endsWith(QLatin1String("000")))
552  {
553  keyPrefix = it.key().left(5);
554  matter = it.value().matter;
555 
556  for (Private::SubjectCodesMap::Iterator it2 = d->subMap.begin();
557  it2 != d->subMap.end(); ++it2)
558  {
559  if (it2.key().startsWith(keyPrefix) &&
560  !it2.key().endsWith(QLatin1String("000")))
561  {
562  it2.value().matter = matter;
563  }
564  }
565  }
566  }
567 
568  return true;
569 }
570 
571 void SubjectWidget::setSubjectsList(const QStringList& list)
572 {
573  d->subjectsList = list;
574 
575  blockSignals(true);
576  d->subjectsBox->clear();
577  m_subjectsCheck->setChecked(false);
578  if (!d->subjectsList.isEmpty())
579  {
580  d->subjectsBox->insertItems(0, d->subjectsList);
581  m_subjectsCheck->setChecked(true);
582  }
583 
584  blockSignals(false);
585  slotSubjectsToggled(m_subjectsCheck->isChecked());
586 }
587 
588 QStringList SubjectWidget::subjectsList() const
589 {
590  QStringList newSubjects;
591 
592  for (int i = 0 ; i < d->subjectsBox->count(); i++)
593  {
594  QListWidgetItem* item = d->subjectsBox->item(i);
595  newSubjects.append(item->text());
596  }
597 
598  return newSubjects;
599 }
600 
601 } // namespace KExiv2Iface
QWidget
QString::append
QString & append(QChar ch)
QRegExpValidator
KExiv2Iface::SubjectWidget::m_nameEdit
KLineEdit * m_nameEdit
Definition: subjectwidget.h:110
QGridLayout::addWidget
void addWidget(QWidget *widget, int row, int column, QFlags< Qt::AlignmentFlag > alignment)
KExiv2Iface::SubjectWidget::slotDelSubject
virtual void slotDelSubject()
Definition: subjectwidget.cpp:385
QDomElement::attribute
QString attribute(const QString &name, const QString &defValue) const
KExiv2Iface::SubjectWidget::~SubjectWidget
~SubjectWidget()
Definition: subjectwidget.cpp:311
KExiv2Iface::SubjectWidget::m_subjectsCheck
QCheckBox * m_subjectsCheck
Definition: subjectwidget.h:106
QLabel::setOpenExternalLinks
void setOpenExternalLinks(bool open)
QMap< QString, SubjectData >
QListWidgetItem
QWidget::setVisible
virtual void setVisible(bool visible)
QGridLayout
QDomDocument::documentElement
QDomElement documentElement() const
QDomNode
QFrame::setFrameStyle
void setFrameStyle(int style)
KExiv2Iface::SubjectWidget::signalModified
void signalModified()
QFile
QGridLayout::setSpacing
void setSpacing(int spacing)
QButtonGroup
QDomNode::toElement
QDomElement toElement() const
KExiv2Iface::SubjectWidget::slotSubjectsToggled
virtual void slotSubjectsToggled(bool)
Definition: subjectwidget.cpp:316
KExiv2Iface::SubjectData
Definition: subjectwidget.h:53
QRegExp
QObject::name
const char * name() const
KExiv2Iface::SubjectWidget::m_matterEdit
KLineEdit * m_matterEdit
Definition: subjectwidget.h:111
QList::append
void append(const T &value)
KExiv2Iface::SubjectWidget::slotEditOptionChanged
virtual void slotEditOptionChanged(int)
Definition: subjectwidget.cpp:326
QGridLayout::setRowStretch
void setRowStretch(int row, int stretch)
QWidget::setLayout
void setLayout(QLayout *layout)
QDomElement::text
QString text() const
QCheckBox
KExiv2Iface::SubjectWidget::loadSubjectCodesFromXML
virtual bool loadSubjectCodesFromXML(const KUrl &url)
Definition: subjectwidget.cpp:456
QString::isEmpty
bool isEmpty() const
KExiv2Iface::SubjectWidget::slotRepSubject
virtual void slotRepSubject()
Definition: subjectwidget.cpp:393
KExiv2Iface::SubjectWidget::buildSubject
virtual QString buildSubject() const
Definition: subjectwidget.cpp:371
QString
KExiv2Iface::SubjectWidget::m_refEdit
KLineEdit * m_refEdit
Definition: subjectwidget.h:109
QLayout::setMargin
void setMargin(int margin)
QStringList
KExiv2Iface::SubjectWidget::m_detailEdit
KLineEdit * m_detailEdit
Definition: subjectwidget.h:112
QObject::blockSignals
bool blockSignals(bool block)
QDomDocument
QDomNode::isNull
bool isNull() const
KExiv2Iface::SubjectWidget::slotSubjectSelectionChanged
virtual void slotSubjectSelectionChanged()
Definition: subjectwidget.cpp:409
QAbstractButton::setChecked
void setChecked(bool)
QLayout::setAlignment
bool setAlignment(QWidget *w, QFlags< Qt::AlignmentFlag > alignment)
QDomNode::firstChild
QDomNode firstChild() const
QWidget::setMaximumWidth
void setMaximumWidth(int maxw)
QLatin1String
QRadioButton
QGridLayout::setColumnStretch
void setColumnStretch(int column, int stretch)
QWidget::QWidget
QWidget(QWidget *parent, QFlags< Qt::WindowType > f)
KExiv2Iface::SubjectWidget::SubjectWidget
SubjectWidget(QWidget *parent)
Definition: subjectwidget.cpp:116
KComboBox
KExiv2Iface::SubjectWidget::m_iprEdit
KLineEdit * m_iprEdit
Definition: subjectwidget.h:108
KExiv2Iface::SubjectWidget::slotRefChanged
virtual void slotRefChanged()
Definition: subjectwidget.cpp:349
QString::section
QString section(QChar sep, int start, int end, QFlags< QString::SectionFlag > flags) const
QString::left
QString left(int n) const
QPushButton
QDomElement::tagName
QString tagName() const
KExiv2Iface::SubjectWidget::m_note
QLabel * m_note
Definition: subjectwidget.h:104
QMap< QString, SubjectData >::Iterator
typedef Iterator
KExiv2Iface::SubjectWidget::setSubjectsList
void setSubjectsList(const QStringList &list)
Definition: subjectwidget.cpp:571
KExiv2Iface::SubjectWidget::slotAddSubject
virtual void slotAddSubject()
Definition: subjectwidget.cpp:429
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QLabel
QDomElement
KExiv2Iface::SubjectWidget::subjectsList
QStringList subjectsList() const
Definition: subjectwidget.cpp:588
QLabel::setWordWrap
void setWordWrap(bool on)
QListWidgetItem::text
QString text() const
QValidator
QDomDocument::setContent
bool setContent(const QByteArray &data, bool namespaceProcessing, QString *errorMsg, int *errorLine, int *errorColumn)
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:19:40 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

libs/libkexiv2/libkexiv2

Skip menu "libs/libkexiv2/libkexiv2"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdegraphics API Reference

Skip menu "kdegraphics API Reference"
  •     libkdcraw
  •     libkexiv2
  •     libkipi
  •     libksane
  • okular

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal