File indexing completed on 2025-04-27 03:57:27
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2003-03-09 0007 * Description : Captions, Tags, and Rating properties editor - Description view. 0008 * 0009 * SPDX-FileCopyrightText: 2003-2005 by Renchi Raju <renchi dot raju at gmail dot com> 0010 * SPDX-FileCopyrightText: 2003-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0011 * SPDX-FileCopyrightText: 2006-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de> 0012 * SPDX-FileCopyrightText: 2009-2011 by Andi Clemens <andi dot clemens at gmail dot com> 0013 * SPDX-FileCopyrightText: 2009-2011 by Johannes Wienke <languitar at semipol dot de> 0014 * SPDX-FileCopyrightText: 2015 by Veaceslav Munteanu <veaceslav dot munteanu90 at gmail dot com> 0015 * 0016 * SPDX-License-Identifier: GPL-2.0-or-later 0017 * 0018 * ============================================================ */ 0019 0020 #include "itemdescedittab_p.h" 0021 0022 namespace Digikam 0023 { 0024 0025 void ItemDescEditTab::initDescriptionView() 0026 { 0027 QScrollArea* const sv = new QScrollArea(d->tabWidget); 0028 sv->setFrameStyle(QFrame::NoFrame); 0029 sv->setWidgetResizable(true); 0030 0031 QWidget* const captionsArea = new QWidget(sv->viewport()); 0032 QGridLayout* const grid1 = new QGridLayout(captionsArea); 0033 sv->setWidget(captionsArea); 0034 0035 d->titleEdit = new AltLangStrEdit(captionsArea, 0); 0036 d->titleEdit->setTitle(i18nc("@title: comment title string", "Title:")); 0037 resetTitleEditPlaceholderText(); 0038 0039 d->captionsEdit = new CaptionEdit(captionsArea); 0040 resetCaptionEditPlaceholderText(); 0041 0042 DHBox* const dateBox = new DHBox(captionsArea); 0043 new QLabel(i18nc("@label", "Date:"), dateBox); 0044 d->dateTimeEdit = new DDateTimeEdit(dateBox, QLatin1String("datepicker")); 0045 0046 DHBox* const pickBox = new DHBox(captionsArea); 0047 new QLabel(i18nc("@label", "Pick Label:"), pickBox); 0048 d->pickLabelSelector = new PickLabelSelector(pickBox); 0049 pickBox->layout()->setAlignment(d->pickLabelSelector, Qt::AlignVCenter | Qt::AlignRight); 0050 0051 DHBox* const colorBox = new DHBox(captionsArea); 0052 new QLabel(i18nc("@label", "Color Label:"), colorBox); 0053 d->colorLabelSelector = new ColorLabelSelector(colorBox); 0054 colorBox->layout()->setAlignment(d->colorLabelSelector, Qt::AlignVCenter | Qt::AlignRight); 0055 0056 DHBox* const rateBox = new DHBox(captionsArea); 0057 new QLabel(i18nc("@label", "Rating:"), rateBox); 0058 d->ratingWidget = new RatingWidget(rateBox); 0059 rateBox->layout()->setAlignment(d->ratingWidget, Qt::AlignVCenter | Qt::AlignRight); 0060 0061 // Buttons ----------------------------------------- 0062 0063 DHBox* const applyButtonBox = new DHBox(this); 0064 applyButtonBox->setSpacing(d->spacing); 0065 0066 d->applyBtn = new QPushButton(i18nc("@action", "Apply"), applyButtonBox); 0067 d->applyBtn->setIcon(QIcon::fromTheme(QLatin1String("dialog-ok-apply"))); 0068 d->applyBtn->setEnabled(false); 0069 d->applyBtn->setToolTip(i18nc("@info", "Apply all changes to images")); 0070 //buttonsBox->setStretchFactor(d->applyBtn, 10); 0071 0072 DHBox* const buttonsBox = new DHBox(this); 0073 buttonsBox->setSpacing(d->spacing); 0074 0075 d->revertBtn = new QToolButton(buttonsBox); 0076 d->revertBtn->setIcon(QIcon::fromTheme(QLatin1String("document-revert"))); 0077 d->revertBtn->setToolTip(i18nc("@info", "Revert all changes")); 0078 d->revertBtn->setEnabled(false); 0079 0080 d->applyToAllVersionsButton = new QPushButton(i18nc("@action", "Apply to all versions"), buttonsBox); 0081 d->applyToAllVersionsButton->setIcon(QIcon::fromTheme(QLatin1String("dialog-ok-apply"))); 0082 d->applyToAllVersionsButton->setEnabled(false); 0083 d->applyToAllVersionsButton->setToolTip(i18nc("@info", "Apply all changes to all versions of this image")); 0084 0085 d->moreButton = new QPushButton(i18nc("@action: more actions to apply changes", "More"), buttonsBox); 0086 d->moreMenu = new QMenu(captionsArea); 0087 d->moreButton->setMenu(d->moreMenu); 0088 0089 // -------------------------------------------------- 0090 0091 grid1->addWidget(d->titleEdit, 0, 0, 1, 2); 0092 grid1->addWidget(d->captionsEdit, 1, 0, 1, 2); 0093 grid1->addWidget(dateBox, 2, 0, 1, 2); 0094 grid1->addWidget(pickBox, 3, 0, 1, 2); 0095 grid1->addWidget(colorBox, 4, 0, 1, 2); 0096 grid1->addWidget(rateBox, 5, 0, 1, 2); 0097 grid1->setRowStretch(1, 10); 0098 grid1->setContentsMargins(d->spacing, d->spacing, d->spacing, d->spacing); 0099 grid1->setSpacing(d->spacing); 0100 0101 d->tabWidget->insertTab(DESCRIPTIONS, sv, i18nc("@title", "Description")); 0102 } 0103 0104 void ItemDescEditTab::setFocusToTitlesEdit() 0105 { 0106 d->tabWidget->setCurrentIndex(DESCRIPTIONS); 0107 d->titleEdit->textEdit()->setFocus(); 0108 } 0109 0110 void ItemDescEditTab::setFocusToCommentsEdit() 0111 { 0112 d->tabWidget->setCurrentIndex(DESCRIPTIONS); 0113 d->captionsEdit->altLangStrEdit()->textEdit()->setFocus(); 0114 } 0115 0116 void ItemDescEditTab::slotCommentChanged() 0117 { 0118 d->hub->setComments(d->captionsEdit->values()); 0119 d->setMetadataWidgetStatus(d->hub->commentsStatus(), d->captionsEdit); 0120 slotModified(); 0121 } 0122 0123 void ItemDescEditTab::slotTitleChanged() 0124 { 0125 CaptionsMap titles; 0126 0127 titles.fromAltLangMap(d->titleEdit->values()); 0128 d->hub->setTitles(titles); 0129 d->setMetadataWidgetStatus(d->hub->titlesStatus(), d->titleEdit); 0130 slotModified(); 0131 } 0132 0133 void ItemDescEditTab::slotDateTimeChanged(const QDateTime& dateTime) 0134 { 0135 d->hub->setDateTime(dateTime); 0136 d->setMetadataWidgetStatus(d->hub->dateTimeStatus(), d->dateTimeEdit); 0137 slotModified(); 0138 } 0139 0140 void ItemDescEditTab::slotPickLabelChanged(int pickId) 0141 { 0142 d->hub->setPickLabel(pickId); 0143 0144 // no handling for MetadataDisjoint needed for pick label, 0145 // we set it to 0 when disjoint, see below 0146 0147 slotModified(); 0148 } 0149 0150 void ItemDescEditTab::slotColorLabelChanged(int colorId) 0151 { 0152 d->hub->setColorLabel(colorId); 0153 0154 // no handling for MetadataDisjoint needed for color label, 0155 // we set it to 0 when disjoint, see below 0156 0157 slotModified(); 0158 } 0159 0160 void ItemDescEditTab::slotRatingChanged(int rating) 0161 { 0162 d->hub->setRating(rating); 0163 0164 // no handling for MetadataDisjoint needed for rating, 0165 // we set it to 0 when disjoint, see below 0166 0167 slotModified(); 0168 } 0169 0170 void ItemDescEditTab::assignColorLabel(int colorId) 0171 { 0172 d->colorLabelSelector->setColorLabel((ColorLabel)colorId); 0173 } 0174 0175 void ItemDescEditTab::assignPickLabel(int pickId) 0176 { 0177 d->pickLabelSelector->setPickLabel((PickLabel)pickId); 0178 } 0179 0180 void ItemDescEditTab::assignRating(int rating) 0181 { 0182 d->ratingWidget->setRating(rating); 0183 } 0184 0185 void ItemDescEditTab::replaceColorLabel(int colorId) 0186 { 0187 d->hub->replaceColorLabel(colorId); 0188 updateColorLabel(); 0189 } 0190 0191 void ItemDescEditTab::replacePickLabel(int pickId) 0192 { 0193 d->hub->replacePickLabel(pickId); 0194 updatePickLabel(); 0195 } 0196 0197 void ItemDescEditTab::replaceRating(int rating) 0198 { 0199 d->hub->replaceRating(rating); 0200 updateRating(); 0201 } 0202 0203 void ItemDescEditTab::updateComments() 0204 { 0205 d->captionsEdit->blockSignals(true); 0206 d->captionsEdit->setValues(d->hub->comments()); 0207 d->setMetadataWidgetStatus(d->hub->commentsStatus(), d->captionsEdit); 0208 d->captionsEdit->blockSignals(false); 0209 0210 d->titleEdit->blockSignals(true); 0211 d->titleEdit->setValues(d->hub->titles().toAltLangMap()); 0212 d->setMetadataWidgetStatus(d->hub->titlesStatus(), d->titleEdit); 0213 d->titleEdit->blockSignals(false); 0214 } 0215 0216 void ItemDescEditTab::updatePickLabel() 0217 { 0218 d->pickLabelSelector->blockSignals(true); 0219 0220 if (d->hub->pickLabelStatus() == DisjointMetadataDataFields::MetadataDisjoint) 0221 { 0222 d->pickLabelSelector->setPickLabel(NoPickLabel); 0223 } 0224 else 0225 { 0226 d->pickLabelSelector->setPickLabel((PickLabel)d->hub->pickLabel()); 0227 } 0228 0229 d->pickLabelSelector->blockSignals(false); 0230 } 0231 0232 void ItemDescEditTab::updateColorLabel() 0233 { 0234 d->colorLabelSelector->blockSignals(true); 0235 0236 if (d->hub->colorLabelStatus() == DisjointMetadataDataFields::MetadataDisjoint) 0237 { 0238 d->colorLabelSelector->setColorLabel(NoColorLabel); 0239 } 0240 else 0241 { 0242 d->colorLabelSelector->setColorLabel((ColorLabel)d->hub->colorLabel()); 0243 } 0244 0245 d->colorLabelSelector->blockSignals(false); 0246 } 0247 0248 void ItemDescEditTab::updateRating() 0249 { 0250 d->ratingWidget->blockSignals(true); 0251 0252 if (d->hub->ratingStatus() == DisjointMetadataDataFields::MetadataDisjoint) 0253 { 0254 d->ratingWidget->setRating(0); 0255 } 0256 else 0257 { 0258 d->ratingWidget->setRating(d->hub->rating()); 0259 } 0260 0261 d->ratingWidget->blockSignals(false); 0262 } 0263 0264 void ItemDescEditTab::updateDate() 0265 { 0266 d->dateTimeEdit->blockSignals(true); 0267 d->dateTimeEdit->setDateTime(d->hub->dateTime()); 0268 d->setMetadataWidgetStatus(d->hub->dateTimeStatus(), d->dateTimeEdit); 0269 d->dateTimeEdit->blockSignals(false); 0270 } 0271 0272 void ItemDescEditTab::slotImageRatingChanged(qlonglong imageId) 0273 { 0274 d->metadataChange(imageId); 0275 } 0276 0277 void ItemDescEditTab::slotImageCaptionChanged(qlonglong imageId) 0278 { 0279 d->metadataChange(imageId); 0280 } 0281 0282 void ItemDescEditTab::slotImageDateChanged(qlonglong imageId) 0283 { 0284 d->metadataChange(imageId); 0285 } 0286 0287 void ItemDescEditTab::resetTitleEditPlaceholderText() 0288 { 0289 d->titleEdit->setPlaceholderText(i18nc("@info", "Enter title text here.")); 0290 } 0291 0292 void ItemDescEditTab::resetCaptionEditPlaceholderText() 0293 { 0294 d->captionsEdit->setPlaceholderText(i18nc("@info", "Enter caption text here.")); 0295 } 0296 0297 } // namespace Digikam