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.
gwenview/src/gvimagepart/gvimagepart.h

182 lines
3.8 KiB

/*
Copyright 2004 Jonathan Riddell <jr@jriddell.org>
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
of the License, 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.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef __gvimagepart_h__
#define __gvimagepart_h__
#include <kparts/part.h>
#include <kparts/browserextension.h>
#include <ktempfile.h>
// Forward declarations
class QFile;
class QPoint;
class KAboutData;
class KAction;
class KDirLister;
class KFileItem;
namespace Gwenview {
class ImageView;
class Document;
class ImageLoader;
class GVImagePart;
/**
* The browser extension is an attribute of GVImagePart and provides
* some services to Konqueror. All Konqueror KParts have one.
*/
class GVImagePartBrowserExtension: public KParts::BrowserExtension {
Q_OBJECT
public:
GVImagePartBrowserExtension(GVImagePart* viewPart, const char* name=0L);
~GVImagePartBrowserExtension();
public slots:
void print();
private:
GVImagePart* mGVImagePart;
};
/**
* A Read Only KPart to view images using Gwenview
*/
class GVImagePart : public KParts::ReadOnlyPart {
Q_OBJECT
public:
GVImagePart(QWidget*, const char*, QObject*, const char*, const QStringList &);
virtual ~GVImagePart();
/**
* Return information about the part
*/
static KAboutData* createAboutData();
/**
* Returns m_file
*/
QString filePath();
/**
* Print the image being viewed
*/
void print();
public slots:
virtual bool openURL(const KURL& url);
protected slots:
virtual bool openFile() { return false; }
/**
* Rotates the current image 90 degrees counter clockwise
*/
void rotateLeft();
/**
* Rotates the current image 90 degrees clockwise
*/
void rotateRight();
protected:
virtual void partActivateEvent(KParts::PartActivateEvent* event);
virtual void guiActivateEvent( KParts::GUIActivateEvent* event);
private slots:
void dirListerClear();
void dirListerNewItems( const KFileItemList& );
void dirListerDeleteItem(KFileItem*);
void slotSelectNext();
void slotSelectPrevious();
void prefetchDone();
void slotLoading();
void slotLoaded(const KURL& url);
void openContextMenu(const QPoint&);
void saveAs();
void showJobError(KIO::Job* job);
private:
void updateNextPrevious();
KURL nextURL() const;
KURL previousURL() const;
void saveOriginalAs();
/**
* The component's widget
*/
ImageView* mImageView;
/**
* Holds the image
*/
Document* mDocument;
/**
* This inherits from KParts::BrowserExtention and supplies
* some extra functionality to Konqueror.
*/
GVImagePartBrowserExtension* mBrowserExtension;
// for the next/previous actions
KDirLister* mDirLister;
KAction* mNextImage;
KAction* mPreviousImage;
// alphabetically sorted filenames of images in the picture's directory
QStringList mImagesInDirectory;
ImageLoader* mPrefetch;
enum LastDirection { DirectionUnknown, DirectionNext, DirectionPrevious };
LastDirection mLastDirection; // used for prefetching
};
/**
* This simple helper class uploads data to a remote URL asynchronously
*/
class DataUploader : public QObject {
Q_OBJECT
public:
DataUploader(QWidget* dialogParent, const QByteArray& data, const KURL& destURL);
private slots:
void slotJobFinished(KIO::Job*);
private:
KTempFile mTempFile;
QWidget* mDialogParent;
};
} // namespace
#endif