You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
361 lines
8.8 KiB
361 lines
8.8 KiB
/* ============================================================
|
|
*
|
|
* This file is a part of digiKam project
|
|
* http://www.digikam.org
|
|
*
|
|
* Date : 2006-01-20
|
|
* Description : image file IO threaded interface.
|
|
*
|
|
* Copyright (C) 2005-2007 by Marcel Wiesweg <marcel.wiesweg@gmx.de>
|
|
* Copyright (C) 2005-2007 by Gilles Caulier <caulier dot gilles at gmail dot com>
|
|
*
|
|
* 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.
|
|
*
|
|
* ============================================================ */
|
|
|
|
|
|
#ifndef LOAD_SAVE_TASK_H
|
|
#define LOAD_SAVE_TASK_H
|
|
|
|
// TQt includes.
|
|
|
|
#include <tqevent.h>
|
|
|
|
// Local includes.
|
|
|
|
#include "dimg.h"
|
|
#include "dimgloaderobserver.h"
|
|
#include "loadingdescription.h"
|
|
#include "loadingcache.h"
|
|
|
|
namespace Digikam
|
|
{
|
|
|
|
class LoadSaveThread;
|
|
|
|
class LoadSaveTask
|
|
{
|
|
public:
|
|
|
|
LoadSaveTask(LoadSaveThread* thread)
|
|
: m_thread(thread)
|
|
{};
|
|
virtual ~LoadSaveTask() {};
|
|
|
|
virtual void execute() = 0;
|
|
|
|
enum TaskType
|
|
{
|
|
TaskTypeLoading,
|
|
TaskTypeSaving
|
|
};
|
|
|
|
virtual TaskType type() = 0;
|
|
|
|
protected:
|
|
|
|
LoadSaveThread *m_thread;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
class NotifyEvent : public TQCustomEvent
|
|
{
|
|
public:
|
|
|
|
static TQEvent::Type notifyEventId()
|
|
{ return TQEvent::User; };
|
|
|
|
NotifyEvent() : TQCustomEvent(notifyEventId()) {};
|
|
|
|
virtual void notify(LoadSaveThread *thread) = 0;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
class ProgressEvent : public NotifyEvent
|
|
{
|
|
public:
|
|
|
|
ProgressEvent(float progress)
|
|
: m_progress(progress)
|
|
{};
|
|
|
|
protected:
|
|
|
|
float m_progress;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
class LoadingProgressEvent : public ProgressEvent
|
|
{
|
|
public:
|
|
|
|
LoadingProgressEvent(const LoadingDescription &loadingDescription, float progress)
|
|
: ProgressEvent(progress),
|
|
m_loadingDescription(loadingDescription)
|
|
{};
|
|
|
|
virtual void notify(LoadSaveThread *thread);
|
|
|
|
private:
|
|
|
|
LoadingDescription m_loadingDescription;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
class SavingProgressEvent : public ProgressEvent
|
|
{
|
|
public:
|
|
|
|
SavingProgressEvent(const TQString& filePath, float progress)
|
|
: ProgressEvent(progress),
|
|
m_filePath(filePath)
|
|
{};
|
|
|
|
virtual void notify(LoadSaveThread *thread);
|
|
|
|
private:
|
|
|
|
TQString m_filePath;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
class StartedLoadingEvent : public NotifyEvent
|
|
{
|
|
public:
|
|
|
|
StartedLoadingEvent(const LoadingDescription &loadingDescription)
|
|
: m_loadingDescription(loadingDescription)
|
|
{};
|
|
|
|
virtual void notify(LoadSaveThread *thread);
|
|
|
|
private:
|
|
|
|
LoadingDescription m_loadingDescription;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
class StartedSavingEvent : public NotifyEvent
|
|
{
|
|
public:
|
|
|
|
StartedSavingEvent(const TQString& filePath)
|
|
: m_filePath(filePath)
|
|
{};
|
|
|
|
virtual void notify(LoadSaveThread *thread);
|
|
|
|
private:
|
|
|
|
TQString m_filePath;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
class LoadedEvent : public NotifyEvent
|
|
{
|
|
public:
|
|
|
|
LoadedEvent(const LoadingDescription &loadingDescription, DImg &img)
|
|
: m_loadingDescription(loadingDescription), m_img(img)
|
|
{};
|
|
|
|
virtual void notify(LoadSaveThread *thread);
|
|
|
|
private:
|
|
|
|
LoadingDescription m_loadingDescription;
|
|
DImg m_img;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
class MoreCompleteLoadingAvailableEvent : public NotifyEvent
|
|
{
|
|
public:
|
|
|
|
MoreCompleteLoadingAvailableEvent(const LoadingDescription &oldLoadingDescription,
|
|
const LoadingDescription &newLoadingDescription)
|
|
: m_oldDescription(oldLoadingDescription), m_newDescription(newLoadingDescription)
|
|
{};
|
|
|
|
virtual void notify(LoadSaveThread *thread);
|
|
|
|
private:
|
|
|
|
LoadingDescription m_oldDescription;
|
|
LoadingDescription m_newDescription;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
class LoadingTask : public LoadSaveTask, public DImgLoaderObserver
|
|
{
|
|
public:
|
|
|
|
enum LoadingTaskStatus
|
|
{
|
|
LoadingTaskStatusLoading,
|
|
LoadingTaskStatusPreloading,
|
|
LoadingTaskStatusStopping
|
|
};
|
|
|
|
LoadingTask(LoadSaveThread* thread, LoadingDescription description,
|
|
LoadingTaskStatus loadingTaskStatus = LoadingTaskStatusLoading)
|
|
: LoadSaveTask(thread), m_loadingDescription(description), m_loadingTaskStatus(loadingTaskStatus)
|
|
{}
|
|
|
|
// LoadSaveTask
|
|
|
|
virtual void execute();
|
|
virtual TaskType type();
|
|
|
|
// DImgLoaderObserver
|
|
|
|
virtual void progressInfo(const DImg *, float progress);
|
|
virtual bool continueQuery(const DImg *);
|
|
virtual bool isShuttingDown();
|
|
|
|
virtual void setStatus(LoadingTaskStatus status);
|
|
|
|
LoadingTaskStatus status() const
|
|
{
|
|
return m_loadingTaskStatus;
|
|
}
|
|
|
|
TQString filePath() const
|
|
{
|
|
return m_loadingDescription.filePath;
|
|
}
|
|
|
|
LoadingDescription loadingDescription() const
|
|
{
|
|
return m_loadingDescription;
|
|
}
|
|
|
|
protected:
|
|
|
|
LoadingDescription m_loadingDescription;
|
|
LoadingTaskStatus m_loadingTaskStatus;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
class SharedLoadingTask : public LoadingTask, public LoadingProcess, public LoadingProcessListener
|
|
{
|
|
public:
|
|
|
|
SharedLoadingTask(LoadSaveThread* thread, LoadingDescription description,
|
|
LoadSaveThread::AccessMode mode = LoadSaveThread::AccessModeReadWrite,
|
|
LoadingTaskStatus loadingTaskStatus = LoadingTaskStatusLoading)
|
|
: LoadingTask(thread, description, loadingTaskStatus),
|
|
m_accessMode(mode), m_completed(false), m_usedProcess(0)
|
|
{}
|
|
|
|
virtual void execute();
|
|
virtual void progressInfo(const DImg *, float progress);
|
|
virtual bool continueQuery(const DImg *);
|
|
virtual void setStatus(LoadingTaskStatus status);
|
|
|
|
// LoadingProcess
|
|
|
|
virtual bool completed();
|
|
virtual TQString filePath();
|
|
virtual TQString cacheKey();
|
|
virtual void addListener(LoadingProcessListener *listener);
|
|
virtual void removeListener(LoadingProcessListener *listener);
|
|
virtual void notifyNewLoadingProcess(LoadingProcess *process, LoadingDescription description);
|
|
|
|
// LoadingProcessListener
|
|
|
|
virtual bool querySendNotifyEvent();
|
|
virtual TQObject *eventReceiver();
|
|
virtual LoadSaveThread::AccessMode accessMode();
|
|
|
|
protected:
|
|
|
|
LoadSaveThread::AccessMode m_accessMode;
|
|
bool m_completed;
|
|
LoadingProcess *m_usedProcess;
|
|
TQPtrList<LoadingProcessListener> m_listeners;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
class SavedEvent : public NotifyEvent
|
|
{
|
|
public:
|
|
|
|
SavedEvent(const TQString &filePath, bool success)
|
|
: m_filePath(filePath), m_success(success)
|
|
{};
|
|
|
|
virtual void notify(LoadSaveThread *thread);
|
|
|
|
private:
|
|
|
|
TQString m_filePath;
|
|
bool m_success;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
class SavingTask : public LoadSaveTask, public DImgLoaderObserver
|
|
{
|
|
public:
|
|
|
|
enum SavingTaskStatus
|
|
{
|
|
SavingTaskStatusSaving,
|
|
SavingTaskStatusStopping
|
|
};
|
|
|
|
SavingTask(LoadSaveThread* thread, DImg &img, const TQString &filePath, const TQString &format)
|
|
: LoadSaveTask(thread), m_img(img), m_filePath(filePath), m_format(format)
|
|
{};
|
|
|
|
virtual void execute();
|
|
virtual TaskType type();
|
|
|
|
virtual void progressInfo(const DImg *, float progress);
|
|
virtual bool continueQuery(const DImg *);
|
|
|
|
virtual void setStatus(SavingTaskStatus status);
|
|
|
|
SavingTaskStatus status() const
|
|
{
|
|
return m_savingTaskStatus;
|
|
}
|
|
|
|
TQString filePath() const
|
|
{
|
|
return m_filePath;
|
|
}
|
|
|
|
private:
|
|
|
|
DImg m_img;
|
|
TQString m_filePath;
|
|
TQString m_format;
|
|
SavingTaskStatus m_savingTaskStatus;
|
|
};
|
|
|
|
} // namespace Digikam
|
|
|
|
#endif // LOAD_SAVE_TASK_H
|