]> git.lyx.org Git - lyx.git/blob - src/insets/insetgraphics.h
Baruch's graphic-inset patch.
[lyx.git] / src / insets / insetgraphics.h
1 // -*- C++ -*-
2 /* This file is part of
3  * ====================================================== 
4  * 
5  *           LyX, The Document Processor
6  *       
7  *           Copyright 1995 Matthias Ettrich
8  *           Copyright 1995-2000 the LyX Team.
9  *
10  * ====================================================== */
11
12 #ifndef INSET_GRAPHICS_H
13 #define INSET_GRAPHICS_H
14
15
16 #ifdef __GNUG__
17 #pragma interface
18 #endif
19
20 #include <config.h>
21
22 #include "insets/lyxinset.h"
23 #include "insets/insetgraphicsParams.h"
24
25 #include "LaTeXFeatures.h"
26
27 // We need a signal here to hide an active dialog when we are deleted.
28 #include "sigc++/signal_system.h"
29 #ifdef SIGC_CXX_NAMESPACES
30 using SigC::Signal0;
31 using SigC::slot;
32 using SigC::Object;
33 #endif
34
35 class Dialogs;
36 class GraphicsCacheItem;
37
38 ///
39 #ifdef SIGC_CXX_NAMESPACES
40 class InsetGraphics : public Inset, public SigC::Object {
41 #else
42 class InsetGraphics : public Inset, public Object {
43 #endif
44 public:
45         ///
46         InsetGraphics();
47     ///
48     ~InsetGraphics();
49         ///
50         int ascent(BufferView *, LyXFont const &) const;
51         ///
52         int descent(BufferView *, LyXFont const &) const;
53         ///
54         int width(BufferView *, LyXFont const &) const;
55         ///
56         bool display() const { return true; }
57         ///
58         void draw(BufferView *, LyXFont const &, int, float &, bool) const;
59         ///
60         void Edit(BufferView *, int, int, unsigned int);
61         ///
62         EDITABLE Editable() const;
63         ///
64         void Write(Buffer const *, std::ostream &) const;
65         ///
66         void Read(Buffer const *, LyXLex & lex);
67
68         /** returns the number of rows (\n's) of generated tex code.
69          fragile == true means, that the inset should take care about
70          fragile commands by adding a \protect before.
71          */
72         int Latex(Buffer const *, std::ostream &,
73                   bool fragile, bool free_spc) const;
74         ///
75         int Ascii(Buffer const *, std::ostream &) const;
76         ///
77         int Linuxdoc(Buffer const *, std::ostream &) const;
78         ///
79         int DocBook(Buffer const *, std::ostream &) const;
80
81         /** Tell LyX what the latex features you need i.e. what latex packages
82      * you need to be included.
83      */
84         void Validate(LaTeXFeatures & features) const;
85
86         /// returns LyX code associated with the inset. Used for TOC, ...)
87         Inset::Code LyxCode() const { return Inset::GRAPHICS_CODE; }
88   
89         ///
90         Inset * Clone() const;
91
92     /// Set the inset parameters, used by the GUIndependent dialog.
93     /// Return true of new params are different from what was so far.
94     bool setParams(InsetGraphicsParams const & params);
95
96     /// Get the inset parameters, used by the GUIndependent dialog.
97     InsetGraphicsParams getParams() const;
98
99     /// This signal is connected by our dialog and called when the inset
100     /// is deleted.
101     Signal0<void> hide;
102 private:
103     /// Update the inset after parameter change.
104     void updateInset();
105
106         /// Get notified when the inline image processing has finished.
107         void imageDone();
108
109     /// The graphics cache handle.
110     GraphicsCacheItem * cachehandle;
111
112         /// Holds the buffer view that we are associated with.
113         BufferView * bv_;
114
115     InsetGraphicsParams params;
116
117     // Baruch Even (baruch.even@writeme.com) 2000-07-17
118     // This was the intended way however it is not flexible enough and
119     // only provides for LaTeX output.
120 #ifdef IG_OLDPARAMS
121         // We need variables to store the size of the boundingbox and
122         // to store a pointer to the pixmap in.. The question is if
123         // these should be in a "pixmap" class.
124         // We also need to have variables about rotation and scaling,
125         // width and height. in effect all the paramters that
126         // \includegraphics can handle. (the graphix.sty package)
127
128         /** The "bounding box" of the graphics image. Its value field
129             must contain four dimensions, separated by spaces.  */
130         BoundingBox bb;
131         /** The bounding box above is used for display and file both.
132             But we need this variable below to know if we shall use the
133             bounding box in the LaTex command or not. (i.e. if the user
134             has manually set the bb.) */
135         bool use_bb;
136         
137         /** When a graphics file is parsed we first check for BoundingBox
138             and then for HiResBoundingBox, and set hiresbb depending on this.
139             This key makes LaTeX search for %%HiResBoundingBox comments
140             instead of the normal %%BoundingBox. Some applications use
141             this to specify more precise bounding boxes, becase the numbers
142             can normally only have integer values. It is a Boolean, either
143             "true" or "false". */
144         bool hiresbb;
145     
146         /** This key takes four arguments (like bb), but in this case the
147             origin is taken with respect to the bounding box specified in
148             the file. So to view a 20 bp square at the lower left-hand corner
149             of the picture, specify viewport=0 0 20 20. */
150         BoundingBox viewport;
151     
152         /** Similar to the viewport key, but the four dimensions correspond
153             to the amount of space to be trimmed (cut off) at the left-hand
154             side, bottom, right-hand side and top of the included graphics. */
155         BoundingBox trim;
156     
157         /// Natural height of figure
158         LyXLength natheight;
159     
160         /// Natural width of figure.
161         LyXLength natwidth;
162    
163         /// Rotation angle (in degrees, counterclockwise).
164         float angle;
165
166         /** Origin for rotation, similar to the origin parameter of
167             the \rotatebox command described on p.46 and Fig. 2.2 on p.46. */
168         Origin origin;
169     
170         /// Required width (the width of the image is scaled to that value).
171         LyXLength g_width;
172     
173         /// Required height (the height of the image is scaled to that value).
174         LyXLength g_height;
175     
176         /** Required total height (the total height of the image is scaled
177             to that value). This key should be used instead of height if
178             images are rotated over 90 degrees, since the height can
179             disappear (and become the depth) and LaTeX will have difficulties
180             satisfying the user's request. */
181         LyXLength totalheight;
182     
183         /** Boolean variable that can have the values "true" and "false"
184             (se above for defaults). When true, specifying both width and
185             height parameters does not distort the picture, but the image
186             is scaled so that neither of the width of height exceeds the
187             given dimensions. */
188         bool keepaspectratio;
189     
190         /// Scale factor
191         float scale;
192     
193         /** Clip the graphic to the bounding box. It is a Boolean, either
194             "true" or "false". */
195         bool clip;
196     
197         /// Locally switch to draft mode. A Boolean valued key, like clip.
198         bool draft;
199     
200         /// The graphics type.
201         string type;
202     
203         /// The file extension of the file containing the image data.
204         string ext;
205     
206         /// The file extension of the file "read" by LaTeX.
207         string read;
208     
209         /// Any command to be applied to the file.
210         string command;
211 #endif    
212 };
213
214 #endif