Krita Source Code Documentation
Loading...
Searching...
No Matches
KisAutoSaveRecoveryDialog Class Reference

#include <KisAutoSaveRecoveryDialog.h>

+ Inheritance diagram for KisAutoSaveRecoveryDialog:

Classes

class  FileItemModel
 

Public Slots

void slotDeleteAll ()
 
void toggleFileItem (bool toggle)
 
- Public Slots inherited from KoDialog
void delayedDestruct ()
 
void enableButton (ButtonCode id, bool state)
 
void enableButtonApply (bool state)
 
void enableButtonCancel (bool state)
 
void enableButtonOk (bool state)
 
void enableLinkedHelp (bool state)
 
bool isDetailsWidgetVisible () const
 
virtual void setCaption (const QString &caption)
 
virtual void setCaption (const QString &caption, bool modified)
 
void setDetailsWidget (QWidget *detailsWidget)
 
void setDetailsWidgetVisible (bool visible)
 
void setHelp (const QString &anchor, const QString &appname=QString())
 
void setHelpLinkText (const QString &text)
 
virtual void setPlainCaption (const QString &caption)
 

Public Member Functions

 KisAutoSaveRecoveryDialog (const QStringList &filenames, QWidget *parent=0)
 
QStringList recoverableFiles ()
 
 ~KisAutoSaveRecoveryDialog () override
 
- Public Member Functions inherited from KoDialog
QPushButton * button (ButtonCode id) const
 
QIcon buttonIcon (ButtonCode id) const
 
QString buttonText (ButtonCode id) const
 
QString buttonToolTip (ButtonCode id) const
 
QString buttonWhatsThis (ButtonCode id) const
 
ButtonCode defaultButton () const
 
QString helpLinkText () const
 
void incrementInitialSize (const QSize &size)
 
bool isButtonEnabled (ButtonCode id) const
 
 KoDialog (QWidget *parent=0, Qt::WindowFlags f=Qt::WindowFlags())
 
QWidget * mainWidget ()
 
QSize minimumSizeHint () const override
 
void setButtonFocus (ButtonCode id)
 
void setButtonGuiItem (ButtonCode id, const KGuiItem &item)
 
void setButtonIcon (ButtonCode id, const QIcon &icon)
 
void setButtons (ButtonCodes buttonMask)
 
void setButtonsOrientation (Qt::Orientation orientation)
 
void setButtonText (ButtonCode id, const QString &text)
 
void setButtonToolTip (ButtonCode id, const QString &text)
 
void setButtonWhatsThis (ButtonCode id, const QString &text)
 
void setDefaultButton (ButtonCode id)
 
void setEscapeButton (ButtonCode id)
 
void setInitialSize (const QSize &size)
 
void setMainWidget (QWidget *widget)
 
void showButton (ButtonCode id, bool state)
 
void showButtonSeparator (bool state)
 
QSize sizeHint () const override
 
 ~KoDialog () override
 

Static Public Member Functions

static QString autoSaveLocation ()
 
- Static Public Member Functions inherited from KoDialog
static int groupSpacingHint ()
 
static QString makeStandardCaption (const QString &userCaption, QWidget *window=0, CaptionFlags flags=HIGCompliantCaption)
 
static int marginHint ()
 
static void resizeLayout (QLayout *lay, int margin, int spacing)
 
static void resizeLayout (QWidget *widget, int margin, int spacing)
 
static int spacingHint ()
 

Private Attributes

QListView * m_listView
 
FileItemModelm_model
 

Additional Inherited Members

- Public Types inherited from KoDialog
enum  ButtonCode {
  None = 0x00000000 , Help = 0x00000001 , Default = 0x00000002 , Ok = 0x00000004 ,
  Apply = 0x00000008 , Try = 0x00000010 , Cancel = 0x00000020 , Close = 0x00000040 ,
  No = 0x00000080 , Yes = 0x00000100 , Reset = 0x00000200 , Details = 0x00000400 ,
  User1 = 0x00001000 , User2 = 0x00002000 , User3 = 0x00004000 , NoDefault = 0x00008000
}
 
enum  ButtonPopupMode { InstantPopup = 0 , DelayedPopup = 1 }
 
enum  CaptionFlag { NoCaptionFlags = 0 , AppNameCaption = 1 , ModifiedCaption = 2 , HIGCompliantCaption = AppNameCaption }
 
- Signals inherited from KoDialog
void aboutToShowDetails ()
 
void applyClicked ()
 
void buttonClicked (KoDialog::ButtonCode button)
 
void cancelClicked ()
 
void closeClicked ()
 
void defaultClicked ()
 
void finished ()
 
void helpClicked ()
 
void hidden ()
 
void layoutHintChanged ()
 
void noClicked ()
 
void okClicked ()
 
void resetClicked ()
 
void tryClicked ()
 
void user1Clicked ()
 
void user2Clicked ()
 
void user3Clicked ()
 
void yesClicked ()
 
- Protected Slots inherited from KoDialog
virtual void slotButtonClicked (int button)
 
- Protected Member Functions inherited from KoDialog
void closeEvent (QCloseEvent *e) override
 
void hideEvent (QHideEvent *) override
 
void keyPressEvent (QKeyEvent *) override
 
void showEvent (QShowEvent *e) override
 

Detailed Description

Definition at line 17 of file KisAutoSaveRecoveryDialog.h.

Constructor & Destructor Documentation

◆ KisAutoSaveRecoveryDialog()

KisAutoSaveRecoveryDialog::KisAutoSaveRecoveryDialog ( const QStringList & filenames,
QWidget * parent = 0 )
explicit

Definition at line 174 of file KisAutoSaveRecoveryDialog.cpp.

174 :
175 KoDialog(parent)
176{
177 setCaption(i18nc("@title:window", "Recover Files"));
179 setButtonText(KoDialog::User1, i18n("Discard All"));
180 setMinimumSize(650, 500);
181 QWidget *page = new QWidget(this);
182 QVBoxLayout *layout = new QVBoxLayout(page);
183 if (filenames.size() == 1) {
184 layout->addWidget(new QLabel(i18n("The following autosave file can be recovered:")));
185 }
186 else {
187 layout->addWidget(new QLabel(i18n("The following autosave files can be recovered:")));
188 }
189
190 m_listView = new QListView();
191 m_listView->setAcceptDrops(false);
192 KWidgetItemDelegate *delegate = new FileItemDelegate(m_listView, this);
193 m_listView->setItemDelegate(delegate);
194
195 QList<FileItem*> fileItems;
196 Q_FOREACH (const QString &filename, filenames) {
197
198 FileItem *file = new FileItem();
199 file->name = filename;
200
201 QString path = autoSaveLocation() + "/" + filename;
202 // get thumbnail -- almost all Krita-supported formats save a thumbnail
204
205 if (store) {
206 QString thumbnailPath = QLatin1String("Thumbnails/thumbnail.png");
207 QString previewPath = QLatin1String("preview.png");
208 bool thumbnailExists = store->hasFile(thumbnailPath);
209 bool previewExists = store->hasFile(previewPath);
210 QString pathToUse = thumbnailExists ? thumbnailPath : (previewExists ? previewPath : "");
211
212 if (!pathToUse.isEmpty() && store->open(pathToUse)) {
213 // Hooray! No long delay for the user...
214 QByteArray bytes = store->read(store->size());
215 store->close();
216 QImage img;
217 img.loadFromData(bytes);
218 file->thumbnail = img.scaled(QSize(200,200), Qt::KeepAspectRatio, Qt::SmoothTransformation);
219 }
220
221 delete store;
222 }
223
224 // get the date
225 QDateTime date = QFileInfo(path).lastModified();
226 file->date = "(" + QLocale::system().toString(date, QLocale::ShortFormat) + ")";
227
228 fileItems.append(file);
229 }
230
231 m_model = new FileItemModel(fileItems, m_listView);
232 m_listView->setModel(m_model);
234 if (scroller) {
235 connect(scroller, &QScroller::stateChanged, this, [&](QScroller::State state) {
237 });
238 }
239
240 layout->addWidget(m_listView);
241 layout->addWidget(new QLabel(i18n("If you select Cancel, all recoverable files will be kept.\nIf you press OK, selected files will be recovered, the unselected files discarded.")));
242 setMainWidget(page);
243
244 setAttribute(Qt::WA_DeleteOnClose, false);
245 connect( this, SIGNAL(user1Clicked()), this, SLOT(slotDeleteAll()) );
246}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void user1Clicked()
void setMainWidget(QWidget *widget)
Definition KoDialog.cpp:354
void setButtonText(ButtonCode id, const QString &text)
Definition KoDialog.cpp:648
virtual void setCaption(const QString &caption)
Definition KoDialog.cpp:498
void setButtons(ButtonCodes buttonMask)
Definition KoDialog.cpp:195
@ Ok
Show Ok button. (this button accept()s the dialog; result set to QDialog::Accepted)
Definition KoDialog.h:127
@ User1
Show User defined button 1.
Definition KoDialog.h:136
@ Cancel
Show Cancel-button. (this button reject()s the dialog; result set to QDialog::Rejected)
Definition KoDialog.h:130
KoDialog(QWidget *parent=0, Qt::WindowFlags f=Qt::WindowFlags())
Definition KoDialog.cpp:176
bool close()
Definition KoStore.cpp:156
@ Read
Definition KoStore.h:29
qint64 size() const
Definition KoStore.cpp:239
static KoStore * createStore(const QString &fileName, Mode mode, const QByteArray &appIdentification=QByteArray(), Backend backend=Auto, bool writeMimetype=true)
Definition KoStore.cpp:39
bool hasFile(const QString &fileName) const
Definition KoStore.cpp:384
bool open(const QString &name)
Definition KoStore.cpp:109
QByteArray read(qint64 max)
Definition KoStore.cpp:181
KRITAWIDGETUTILS_EXPORT void updateCursor(QWidget *source, QScroller::State state)
KRITAWIDGETUTILS_EXPORT QScroller * createPreconfiguredScroller(QAbstractScrollArea *target)

References autoSaveLocation(), KoDialog::Cancel, KoStore::close(), connect(), KisKineticScroller::createPreconfiguredScroller(), KoStore::createStore(), KoStore::hasFile(), m_listView, m_model, KoDialog::Ok, KoStore::open(), KoStore::Read, KoStore::read(), KoDialog::setButtons(), KoDialog::setButtonText(), KoDialog::setCaption(), KoDialog::setMainWidget(), KoStore::size(), slotDeleteAll(), KisKineticScroller::updateCursor(), KoDialog::User1, and KoDialog::user1Clicked().

◆ ~KisAutoSaveRecoveryDialog()

KisAutoSaveRecoveryDialog::~KisAutoSaveRecoveryDialog ( )
override

Definition at line 248 of file KisAutoSaveRecoveryDialog.cpp.

249{
250 delete m_listView->itemDelegate();
251 delete m_model;
252 delete m_listView;
253}

References m_listView, and m_model.

Member Function Documentation

◆ autoSaveLocation()

QString KisAutoSaveRecoveryDialog::autoSaveLocation ( )
static

Definition at line 274 of file KisAutoSaveRecoveryDialog.cpp.

275{
276#if defined(Q_OS_WIN)
277 // On Windows, use the temp location (https://bugs.kde.org/show_bug.cgi?id=314921)
278 return QDir::tempPath();
279#elif defined(Q_OS_ANDROID)
280 QString path = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation).append("/krita-backup");
281 if (!QDir(path).exists()) {
282 QDir().mkpath(path);
283 }
284 return path;
285#else
286 // On Linux, use a temp file in $HOME then. Mark it with the pid so two instances don't overwrite each other's
287 // autosave file
288 return QDir::homePath();
289#endif
290}

◆ recoverableFiles()

QStringList KisAutoSaveRecoveryDialog::recoverableFiles ( )

Definition at line 263 of file KisAutoSaveRecoveryDialog.cpp.

264{
265 QStringList files;
266 Q_FOREACH (FileItem* fileItem, m_model->m_fileItems) {
267 if (fileItem->checked) {
268 files << fileItem->name;
269 }
270 }
271 return files;
272}

References FileItem::checked, KisAutoSaveRecoveryDialog::FileItemModel::m_fileItems, m_model, and FileItem::name.

◆ slotDeleteAll

void KisAutoSaveRecoveryDialog::slotDeleteAll ( )
slot

Definition at line 255 of file KisAutoSaveRecoveryDialog.cpp.

256{
257 foreach(FileItem* fileItem, m_model->m_fileItems) {
258 fileItem->checked = false;
259 }
260 accept();
261}

References FileItem::checked, KisAutoSaveRecoveryDialog::FileItemModel::m_fileItems, and m_model.

◆ toggleFileItem

void KisAutoSaveRecoveryDialog::toggleFileItem ( bool toggle)
slot

Definition at line 292 of file KisAutoSaveRecoveryDialog.cpp.

293{
294 // I've made better man from a piece of putty and matchstick!
295 QVariant v = sender()->property("fileitem") ;
296 if (v.isValid()) {
297 FileItem *fileItem = (FileItem*)v.value<void*>();
298 fileItem->checked = toggle;
299 }
300}
qreal v

References FileItem::checked, and v.

Member Data Documentation

◆ m_listView

QListView* KisAutoSaveRecoveryDialog::m_listView
private

Definition at line 34 of file KisAutoSaveRecoveryDialog.h.

◆ m_model

FileItemModel* KisAutoSaveRecoveryDialog::m_model
private

Definition at line 37 of file KisAutoSaveRecoveryDialog.h.


The documentation for this class was generated from the following files: