From 5bed6e4a4c916a97f8fe4d1b07f7eecf4d733b90 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Fri, 22 Nov 2024 18:41:30 +0900 Subject: Rename 'digikam' folder to 'src' Signed-off-by: Michele Calgaro (cherry picked from commit ee0d99607c14cb63d3ebdb3a970b508949fa8219) --- src/libs/dialogs/deletedialog.cpp | 309 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 309 insertions(+) create mode 100644 src/libs/dialogs/deletedialog.cpp (limited to 'src/libs/dialogs/deletedialog.cpp') diff --git a/src/libs/dialogs/deletedialog.cpp b/src/libs/dialogs/deletedialog.cpp new file mode 100644 index 00000000..1db9b9c4 --- /dev/null +++ b/src/libs/dialogs/deletedialog.cpp @@ -0,0 +1,309 @@ +/* ============================================================ + * + * This file is a part of digiKam project + * http://www.digikam.org + * + * Date : 2005-05-07 + * Description : a dialog to delete item. + * + * Copyright (C) 2004 by Michael Pyne + * Copyright (C) 2006 by Ian Monroe + * Copyright (C) 2006-2007 by Marcel Wiesweg + * + * This program is free software; you can redistribute it + * and/or modify it under the terms of the GNU General + * Public License as published by the Free Software Foundation; + * either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * ============================================================ */ + +// TQt includes. + +#include +#include +#include +#include +#include +#include +#include +#include + +// KDE includes. + +#include +#include +#include +#include +#include +#include +#include +#include + +// Local includes. + +#include "deletedialog.h" +#include "albumsettings.h" +#include "deletedialog.moc" + +namespace Digikam +{ + +////////////////////////////////////////////////////////////////////////////// +// DeleteWidget implementation +////////////////////////////////////////////////////////////////////////////// + +DeleteWidget::DeleteWidget(TQWidget *parent, const char *name) + : DeleteDialogBase(parent, name), + m_listMode(DeleteDialogMode::Files), + m_deleteMode(DeleteDialogMode::UseTrash) +{ + ddCheckBoxStack->raiseWidget(ddShouldDeletePage); + + bool deleteInstead = !AlbumSettings::instance()->getUseTrash(); + slotShouldDelete(deleteInstead); + ddShouldDelete->setChecked(deleteInstead); +} + +void DeleteWidget::setFiles(const KURL::List &files) +{ + ddFileList->clear(); + for( KURL::List::ConstIterator it = files.begin(); it != files.end(); it++) + { + if( (*it).isLocalFile() ) //path is nil for non-local + ddFileList->insertItem( (*it).path() ); + else if ( (*it).protocol() == "digikamalbums") + ddFileList->insertItem( (*it).path() ); + else + ddFileList->insertItem( (*it).prettyURL() ); + } + updateText(); +} + +void DeleteWidget::slotShouldDelete(bool shouldDelete) +{ + setDeleteMode(shouldDelete ? DeleteDialogMode::DeletePermanently : DeleteDialogMode::UseTrash); +} + +void DeleteWidget::setDeleteMode(DeleteDialogMode::DeleteMode deleteMode) +{ + m_deleteMode = deleteMode; + updateText(); +} + +void DeleteWidget::setListMode(DeleteDialogMode::ListMode listMode) +{ + m_listMode = listMode; + updateText(); +} + +void DeleteWidget::updateText() +{ + switch (m_listMode) + { + case DeleteDialogMode::Files: + + // Delete files + + if (m_deleteMode == DeleteDialogMode::DeletePermanently) + { + ddDeleteText->setText(i18n("These items will be permanently " + "deleted from your hard disk.")); + ddWarningIcon->setPixmap(TDEGlobal::iconLoader()->loadIcon("messagebox_warning", + TDEIcon::Desktop, TDEIcon::SizeLarge)); + } + else + { + ddDeleteText->setText(i18n("These items will be moved to Trash.")); + ddWarningIcon->setPixmap(TDEGlobal::iconLoader()->loadIcon("trashcan_full", + TDEIcon::Desktop, TDEIcon::SizeLarge)); + } + ddNumFiles->setText(i18n("1 file selected.", "%n files selected.", ddFileList->count())); + break; + + case DeleteDialogMode::Albums: + + // Delete albums = folders + + if (m_deleteMode == DeleteDialogMode::DeletePermanently) + { + ddDeleteText->setText(i18n("These albums will be permanently " + "deleted from your hard disk.")); + ddWarningIcon->setPixmap(TDEGlobal::iconLoader()->loadIcon("messagebox_warning", + TDEIcon::Desktop, TDEIcon::SizeLarge)); + } + else + { + ddDeleteText->setText(i18n("These albums will be moved to Trash.")); + ddWarningIcon->setPixmap(TDEGlobal::iconLoader()->loadIcon("trashcan_full", + TDEIcon::Desktop, TDEIcon::SizeLarge)); + } + ddNumFiles->setText(i18n("1 album selected.", "%n albums selected.", ddFileList->count())); + break; + + case DeleteDialogMode::Subalbums: + + // As above, but display additional warning + + if (m_deleteMode == DeleteDialogMode::DeletePermanently) + { + ddDeleteText->setText(i18n("These albums will be permanently " + "deleted from your hard disk.
" + "Note that all subalbums " + "are included in this list and will " + "be deleted permanently as well.
")); + ddWarningIcon->setPixmap(TDEGlobal::iconLoader()->loadIcon("messagebox_warning", + TDEIcon::Desktop, TDEIcon::SizeLarge)); + } + else + { + ddDeleteText->setText(i18n("These albums will be moved to Trash.
" + "Note that all subalbums " + "are included in this list and will " + "be moved to Trash as well.
")); + ddWarningIcon->setPixmap(TDEGlobal::iconLoader()->loadIcon("trashcan_full", + TDEIcon::Desktop, TDEIcon::SizeLarge)); + } + ddNumFiles->setText(i18n("1 album selected.", "%n albums selected.", ddFileList->count())); + break; + + } +} + +////////////////////////////////////////////////////////////////////////////// +// DeleteDialog implementation +////////////////////////////////////////////////////////////////////////////// + +DeleteDialog::DeleteDialog(TQWidget *parent, const char *name) + : KDialogBase(Swallow, WStyle_DialogBorder, parent, name, + true, // modal + i18n("About to delete selected files"), // caption + Ok | Cancel, // available buttons + Ok, // default button + true // use separator between buttons and the main widget + ), + m_saveShouldDeleteUserPreference(true), + m_saveDoNotShowAgain(false), + m_trashGuiItem(i18n("&Move to Trash"), "trashcan_full") +{ + m_widget = new DeleteWidget(this, "delete_dialog_widget"); + setMainWidget(m_widget); + + m_widget->setMinimumSize(400, 300); + setMinimumSize(410, 326); + adjustSize(); + + slotShouldDelete(shouldDelete()); + connect(m_widget->ddShouldDelete, TQ_SIGNAL(toggled(bool)), + this, TQ_SLOT(slotShouldDelete(bool))); + + actionButton(Ok)->setFocus(); +} + +bool DeleteDialog::confirmDeleteList(const KURL::List& condemnedFiles, + DeleteDialogMode::ListMode listMode, + DeleteDialogMode::DeleteMode deleteMode) +{ + setURLs(condemnedFiles); + presetDeleteMode(deleteMode); + setListMode(listMode); + + if (deleteMode == DeleteDialogMode::NoChoiceTrash) + { + if (!AlbumSettings::instance()->getShowTrashDeleteDialog()) + return true; + } + return exec() == TQDialog::Accepted; +} + +void DeleteDialog::setURLs(const KURL::List &files) +{ + m_widget->setFiles(files); +} + +void DeleteDialog::accept() +{ + // Save user's preference + AlbumSettings *settings = AlbumSettings::instance(); + + if (m_saveShouldDeleteUserPreference) + { + settings->setUseTrash(!shouldDelete()); + } + if (m_saveDoNotShowAgain) + { + settings->setShowTrashDeleteDialog(!m_widget->ddDoNotShowAgain->isChecked()); + } + + settings->saveSettings(); + + KDialogBase::accept(); +} + +void DeleteDialog::slotShouldDelete(bool shouldDelete) +{ + // This is called once from constructor, and then when the user changed the checkbox state. + // In that case, save the user's preference. + m_saveShouldDeleteUserPreference = true; + setButtonGuiItem(Ok, shouldDelete ? KStdGuiItem::del() : m_trashGuiItem); +} + +void DeleteDialog::presetDeleteMode(DeleteDialogMode::DeleteMode mode) +{ + switch (mode) + { + case DeleteDialogMode::NoChoiceTrash: + { + // access the widget directly, signals will be fired to DeleteDialog and DeleteWidget + m_widget->ddShouldDelete->setChecked(false); + m_widget->ddCheckBoxStack->raiseWidget(m_widget->ddDoNotShowAgainPage); + m_saveDoNotShowAgain = true; + break; + } + case DeleteDialogMode::NoChoiceDeletePermanently: + { + m_widget->ddShouldDelete->setChecked(true); + m_widget->ddCheckBoxStack->hide(); + break; + } + case DeleteDialogMode::UserPreference: + { + break; + } + case DeleteDialogMode::UseTrash: + case DeleteDialogMode::DeletePermanently: + { + // toggles signals which do the rest + m_widget->ddShouldDelete->setChecked(mode == DeleteDialogMode::DeletePermanently); + + // the preference set by this preset method will be ignored + // for the next DeleteDialog instance and not stored as user preference. + // Only if the user once changes this value, it will be taken as user preference. + m_saveShouldDeleteUserPreference = false; + break; + } + } +} + +void DeleteDialog::setListMode(DeleteDialogMode::ListMode mode) +{ + m_widget->setListMode(mode); + switch (mode) + { + case DeleteDialogMode::Files: + setCaption(i18n("About to delete selected files")); + break; + + case DeleteDialogMode::Albums: + case DeleteDialogMode::Subalbums: + setCaption(i18n("About to delete selected albums")); + break; + } +} + +} // namespace Digikam -- cgit v1.2.3