summaryrefslogtreecommitdiffstats
path: root/lib/kofficecore/KoPictureShared.h
blob: f90c91e42ba38785691f22a4e5e9427e29738ec1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
/* This file is part of the KDE project
   Copyright (c) 2001 Simon Hausmann <hausmann@kde.org>
   Copyright (C) 2002, 2003, 2004 Nicolas GOUTTE <goutte@kde.org>

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either
   version 2 of the License, or (at your option) any later version.

   This library 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
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public License
   along with this library; see the file COPYING.LIB.  If not, write to
   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
*/
#ifndef __koPictureShared_h__
#define __koPictureShared_h__

#include <tqshared.h>
#include <tqstring.h>
#include <tqiodevice.h>
#include <tqpixmap.h>

#include "KoPictureKey.h"

class KoXmlWriter;
class TQPainter;
class TQSize;

class KURL;

class KoPictureBase;

/**
 * @internal
 * KoPictureShared is the class that contains the shared part for KoPicture
 *
 * @warning As with all TQShared objects, the sharing is neither automatic nor transparent!
 */
class KoPictureShared : public TQShared
{
public:
    /**
     * Default constructor.
     */
    KoPictureShared(void);

    /**
     * Destructor.
     */
    ~KoPictureShared(void);

    /**
     * @brief Copy constructor
     *
     * This makes a deep copy. Do not use if you want to share!
     */
    KoPictureShared(const KoPictureShared &other);

    /**
     * @brief Assignment operator
     *
     * This makes a deep copy. Do not use if you want to share!
     */
    KoPictureShared& operator=(const KoPictureShared& other);

    KoPictureType::Type getType(void) const;

    /**
     * Returns true if the picture is null.
     */
    bool isNull(void) const;

    /**
     * @brief Draw the image in a painter.
     *
     * The parameter @p fastMode allows the picture to be re-sized and drawn quicker if possible
     *
     * The parameters @p width, @p height define the desired size for the picture
     *
     * The other parameters are very similar to TQPainter::drawPixmap :
     * (@p x, @p y) define the position in the painter,
     * (@p sx, @p sy) specify the top-left point in pixmap that is to be drawn. The default is (0, 0).
     * (@p sw, @p sh) specify the size of the pixmap that is to be drawn. The default, (-1, -1), means all the way to the bottom
     * right of the pixmap.
     */
    void draw(TQPainter& painter, int x, int y, int width, int height, int sx = 0, int sy = 0, int sw = -1, int sh = -1, bool fastMode = false);

    /**
     * Create a dragobject containing this picture.
     * @param dragSource must be 0 when copying to the clipboard
     * @return 0L if the picture is null!
     */
    TQDragObject* dragObject( TQWidget *dragSource = 0L, const char *name = 0L );

    bool load(TQIODevice* io, const TQString& extension);
    bool loadFromBase64( const TQCString& str );

    /**
     * Save picture into a TQIODevice
     * @param io TQIODevice used for saving
     */
    bool save(TQIODevice* io) const;

    /**
     * OASIS FlatXML support:
     * Save picture as base64-encoded data into an XML writer.
     */
    bool saveAsBase64( KoXmlWriter& writer ) const;

    void setExtension(const TQString& extension);

    TQString getExtension(void) const;

    TQSize getOriginalSize(void) const;

    /**
     * Clear and set the mode of this KoPictureShared
     *
     * @param newMode file extension (like "png") giving the wanted mode
     */
    void clearAndSetMode(const TQString& newMode);

    /**
     * Reset the KoPictureShared (but not the key!)
     */
    void clear(void);

    /**
     * Load a file
     *
     * @param fileName the name of the file to load
     */
    bool loadFromFile(const TQString& fileName);

    /**
     * Load a potentially broken XPM file (for KPresenter)
     */
    bool loadXpm(TQIODevice* io);

    /**
     * @deprecated
     * Returns a TQPixmap from an image
     *
     * @param size the wanted size for the TQPixmap
     */
    TQPixmap generatePixmap(const TQSize& size, bool smoothScale = false);

    TQString getMimeType(void) const;

    /**
     * Generate a TQImage
     *
     * (always in slow mode)
     *
     * @param size the wanted size for the TQImage
     */
    TQImage generateImage(const TQSize& size);

    bool hasAlphaBuffer() const;
    void setAlphaBuffer(bool enable);
    TQImage createAlphaMask(int conversion_flags = 0) const;

    /**
     * Clear any cache
     *
     * It is used to avoid using too much memory
     * especially if the application somehow caches the KoPicture too.
     */
    void clearCache(void);

    TQString uniquePictureId() const;
    void assignPictureId( uint _id);

protected:
    /**
     * @internal
     * Load a WMF file
     * \note In %KOffice 1.1, a .wmf file was a TQPicture file
     */
    bool loadWmf(TQIODevice* io);

    /**
     * @internal
     * Loads a temporary file, probably from a downloaded file
     */
    bool loadTmp(TQIODevice* io);

    /// Find type of image, create base accordingly, and load data
    bool identifyAndLoad( TQByteArray data );

    /**
     * @internal
     * Loads a compressed file
     *
     * @warning risk of endless recurision, be careful when it is called from @see load
     *
     * @param io TQIODevice of the compressed file/strea,
     * @param mimeType mimetype of the (de-)compressor
     * @param extension extension of the uncompressed file
     */
    bool loadCompressed( TQIODevice* io, const TQString& mimeType, const TQString& extension );

protected:
    KoPictureBase* m_base;
    TQString m_extension;
    uint m_pictureId;
};

#endif /* __koPictureShared_h__ */