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.
digikam/digikam/utilities/imageeditor/canvas/canvas.h

210 lines
5.4 KiB

/* ============================================================
*
* This file is a part of digiKam project
* http://www.digikam.org
*
* Date : 2003-01-09
* Description : image editor canvas management class
*
* Copyright (C) 2004-2005 by Renchi Raju <renchi@pooh.tam.uiuc.edu>
* Copyright (C) 2004-2008 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 CANVAS_H
#define CANVAS_H
// TQt includes.
#include <tqscrollview.h>
#include <tqrect.h>
// Local includes.
#include "digikam_export.h"
#include "dimg.h"
class TQString;
class TQStringList;
class TQPixmap;
class TQPaintEvent;
class TQResizeEvent;
class TQWheelEvent;
class TQKeyEvent;
class TQColor;
namespace Digikam
{
class CanvasPrivate;
class DImgInterface;
class ExposureSettingsContainer;
class ICCSettingsContainer;
class IOFileSettingsContainer;
class DIGIKAM_EXPORT Canvas : public TQScrollView
{
TQ_OBJECT
public:
Canvas(TQWidget *parent=0);
~Canvas();
void load(const TQString& filename, IOFileSettingsContainer *IOFileSettings);
void preload(const TQString& filename);
void saveAs(const TQString& filename, IOFileSettingsContainer *IOFileSettings,
bool setExifOrientationTag, const TQString& mimeType=TQString());
void resetImage();
void switchToLastSaved(const TQString& newFilename);
void abortSaving();
void setModified();
void readMetadataFromFile(const TQString &file);
void clearUndoHistory();
void setUndoHistoryOrigin();
void updateUndoState();
DImg currentImage();
TQString currentImageFileFormat();
TQString currentImageFilePath();
DImgInterface *interface() const;
void makeDefaultEditingCanvas();
double snapZoom(double z);
void setZoomFactorSnapped(double zoom);
double zoomFactor();
void setZoomFactor(double z);
bool fitToWindow();
bool maxZoom();
bool minZoom();
bool exifRotated();
int imageWidth();
int imageHeight();
TQRect getSelectedArea();
// If current image file format is only available in read only,
// typicially all RAW image file formats.
bool isReadOnly();
void resizeImage(int w, int h);
void setBackgroundColor(const TQColor& color);
void setICCSettings(ICCSettingsContainer *cmSettings);
void setExposureSettings(ExposureSettingsContainer *expoSettings);
void setExifOrient(bool exifOrient);
void increaseGamma();
void decreaseGamma();
void increaseBrightness();
void decreaseBrightness();
void increaseContrast();
void decreaseContrast();
void getUndoHistory(TQStringList &titles);
void getRedoHistory(TQStringList &titles);
void toggleFitToWindow();
void fitToSelect();
signals:
void signalZoomChanged(double zoom);
void signalMaxZoom();
void signalMinZoom();
void signalChanged();
void signalUndoStateChanged(bool, bool, bool);
void signalSelected(bool);
void signalRightButtonClicked();
void signalShowNextImage();
void signalShowPrevImage();
void signalPrepareToLoad();
void signalLoadingStarted(const TQString &filename);
void signalLoadingFinished(const TQString &filename, bool success);
void signalLoadingProgress(const TQString& filePath, float progress);
void signalSavingStarted(const TQString &filename);
void signalSavingFinished(const TQString &filename, bool success);
void signalSavingProgress(const TQString& filePath, float progress);
void signalSelectionChanged(const TQRect&);
void signalToggleOffFitToWindow();
public slots:
void slotIncreaseZoom();
void slotDecreaseZoom();
// image modifiers
void slotRotate90();
void slotRotate180();
void slotRotate270();
void slotFlipHoriz();
void slotFlipVert();
void slotCrop();
void slotRestore();
void slotUndo(int steps=1);
void slotRedo(int steps=1);
void slotCopy();
void slotSelectAll();
void slotSelectNone();
protected:
void resizeEvent(TQResizeEvent* e);
void viewportPaintEvent(TQPaintEvent *e);
void contentsMousePressEvent(TQMouseEvent *e);
void contentsMouseMoveEvent(TQMouseEvent *e);
void contentsMouseReleaseEvent(TQMouseEvent *e);
void contentsWheelEvent(TQWheelEvent *e);
private:
TQRect calcSeletedArea();
double calcAutoZoomFactor();
void updateAutoZoom();
void updateContentsSize(bool deleteRubber);
void drawRubber();
void paintViewport(const TQRect& er, bool antialias);
void reset();
private slots:
void slotSelected();
void slotModified();
void slotImageLoaded(const TQString& filePath, bool success);
void slotImageSaved(const TQString& filePath, bool success);
void slotCornerButtonPressed();
void slotZoomChanged(double);
void slotPanIconSelectionMoved(const TQRect&, bool);
void slotPanIconHiden();
private:
CanvasPrivate *d;
};
} // namespace Digikam
#endif /* CANVAS_H */