2000-02-29 02:19:17 +00:00
|
|
|
// -*- C++ -*-
|
|
|
|
/* This file is part of
|
|
|
|
* ======================================================
|
|
|
|
*
|
|
|
|
* LyX, The Document Processor
|
|
|
|
*
|
|
|
|
* Copyright 1995 Matthias Ettrich
|
|
|
|
* Copyright 1995-2000 the LyX Team.
|
|
|
|
*
|
|
|
|
* ====================================================== */
|
|
|
|
|
|
|
|
#ifndef INSET_GRAPHICS_H
|
|
|
|
#define INSET_GRAPHICS_H
|
|
|
|
|
2000-08-08 09:18:39 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
#ifdef __GNUG__
|
|
|
|
#pragma interface
|
2000-08-14 09:44:53 +00:00
|
|
|
#endif
|
2000-08-08 09:18:39 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
#include "insets/lyxinset.h"
|
2000-07-31 12:30:10 +00:00
|
|
|
#include "insets/insetgraphicsParams.h"
|
2000-08-10 13:15:05 +00:00
|
|
|
#include "graphics/GraphicsCacheItem.h"
|
2000-07-31 12:30:10 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
#include "LaTeXFeatures.h"
|
|
|
|
|
2000-07-31 12:30:10 +00:00
|
|
|
// We need a signal here to hide an active dialog when we are deleted.
|
|
|
|
#include "sigc++/signal_system.h"
|
|
|
|
#ifdef SIGC_CXX_NAMESPACES
|
|
|
|
using SigC::Signal0;
|
2000-08-08 09:18:39 +00:00
|
|
|
using SigC::slot;
|
|
|
|
using SigC::Object;
|
2000-08-14 09:44:53 +00:00
|
|
|
#endif
|
2000-07-31 12:30:10 +00:00
|
|
|
|
|
|
|
class Dialogs;
|
2000-03-09 23:58:55 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
///
|
2000-08-08 09:18:39 +00:00
|
|
|
#ifdef SIGC_CXX_NAMESPACES
|
2000-08-14 09:44:53 +00:00
|
|
|
class InsetGraphics : public Inset, public SigC::Object
|
2000-08-08 09:18:39 +00:00
|
|
|
#else
|
2000-08-14 09:44:53 +00:00
|
|
|
class InsetGraphics : public Inset, public Object
|
2000-09-14 17:53:12 +00:00
|
|
|
#endif
|
2000-08-14 09:44:53 +00:00
|
|
|
{
|
2000-02-29 02:19:17 +00:00
|
|
|
public:
|
2000-03-09 23:58:55 +00:00
|
|
|
///
|
|
|
|
InsetGraphics();
|
2000-08-14 09:44:53 +00:00
|
|
|
///
|
|
|
|
~InsetGraphics();
|
2000-02-29 02:19:17 +00:00
|
|
|
///
|
2000-07-05 14:57:48 +00:00
|
|
|
int ascent(BufferView *, LyXFont const &) const;
|
2000-02-29 02:19:17 +00:00
|
|
|
///
|
2000-07-05 14:57:48 +00:00
|
|
|
int descent(BufferView *, LyXFont const &) const;
|
2000-02-29 02:19:17 +00:00
|
|
|
///
|
2000-07-05 14:57:48 +00:00
|
|
|
int width(BufferView *, LyXFont const &) const;
|
2000-02-29 02:19:17 +00:00
|
|
|
///
|
2000-07-31 12:30:10 +00:00
|
|
|
bool display() const { return true; }
|
|
|
|
///
|
2000-06-23 15:02:46 +00:00
|
|
|
void draw(BufferView *, LyXFont const &, int, float &, bool) const;
|
2000-02-29 02:19:17 +00:00
|
|
|
///
|
|
|
|
void Edit(BufferView *, int, int, unsigned int);
|
|
|
|
///
|
2000-03-08 13:52:57 +00:00
|
|
|
EDITABLE Editable() const;
|
2000-02-29 02:19:17 +00:00
|
|
|
///
|
2000-06-12 11:27:15 +00:00
|
|
|
void Write(Buffer const *, std::ostream &) const;
|
2000-02-29 02:19:17 +00:00
|
|
|
///
|
2000-06-12 11:27:15 +00:00
|
|
|
void Read(Buffer const *, LyXLex & lex);
|
2000-07-31 12:30:10 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/** returns the number of rows (\n's) of generated tex code.
|
2000-09-14 17:53:12 +00:00
|
|
|
#fragile == true# means, that the inset should take care about
|
|
|
|
fragile commands by adding a #\protect# before.
|
2000-02-29 02:19:17 +00:00
|
|
|
*/
|
2000-07-15 23:51:46 +00:00
|
|
|
int Latex(Buffer const *, std::ostream &,
|
2000-08-14 09:44:53 +00:00
|
|
|
bool fragile, bool free_spc) const;
|
2000-03-06 02:42:40 +00:00
|
|
|
///
|
2000-06-12 11:27:15 +00:00
|
|
|
int Ascii(Buffer const *, std::ostream &) const;
|
2000-04-24 20:58:23 +00:00
|
|
|
///
|
2000-06-12 11:27:15 +00:00
|
|
|
int Linuxdoc(Buffer const *, std::ostream &) const;
|
2000-03-06 02:42:40 +00:00
|
|
|
///
|
2000-06-12 11:27:15 +00:00
|
|
|
int DocBook(Buffer const *, std::ostream &) const;
|
2000-03-09 23:58:55 +00:00
|
|
|
|
2000-07-31 12:30:10 +00:00
|
|
|
/** Tell LyX what the latex features you need i.e. what latex packages
|
2000-09-14 17:53:12 +00:00
|
|
|
you need to be included.
|
|
|
|
*/
|
2000-02-29 02:19:17 +00:00
|
|
|
void Validate(LaTeXFeatures & features) const;
|
|
|
|
|
|
|
|
/// returns LyX code associated with the inset. Used for TOC, ...)
|
|
|
|
Inset::Code LyxCode() const { return Inset::GRAPHICS_CODE; }
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
///
|
|
|
|
Inset * Clone() const;
|
2000-07-31 12:30:10 +00:00
|
|
|
|
2000-09-14 17:53:12 +00:00
|
|
|
/** Set the inset parameters, used by the GUIndependent dialog.
|
|
|
|
Return true of new params are different from what was so far.
|
|
|
|
*/
|
2000-08-14 09:44:53 +00:00
|
|
|
bool setParams(InsetGraphicsParams const & params);
|
2000-07-31 12:30:10 +00:00
|
|
|
|
2000-08-14 09:44:53 +00:00
|
|
|
/// Get the inset parameters, used by the GUIndependent dialog.
|
|
|
|
InsetGraphicsParams getParams() const;
|
2000-07-31 12:30:10 +00:00
|
|
|
|
2000-09-14 17:53:12 +00:00
|
|
|
/** This signal is connected by our dialog and called when the inset
|
|
|
|
is deleted.
|
|
|
|
*/
|
|
|
|
Signal0 <void> hide;
|
2000-02-29 02:19:17 +00:00
|
|
|
private:
|
2000-08-14 09:44:53 +00:00
|
|
|
/// Update the inset after parameter change.
|
|
|
|
void updateInset();
|
|
|
|
|
|
|
|
/// The graphics cache handle.
|
|
|
|
GraphicsCacheItem * cacheHandle;
|
|
|
|
|
|
|
|
/// The pixmap
|
|
|
|
mutable Pixmap pixmap;
|
|
|
|
/// is the pixmap initialized?
|
|
|
|
mutable bool pixmapInitialized;
|
|
|
|
|
|
|
|
InsetGraphicsParams params;
|
|
|
|
|
|
|
|
// Baruch Even (baruch.even@writeme.com) 2000-07-17
|
|
|
|
// This was the intended way however it is not flexible enough and
|
|
|
|
// only provides for LaTeX output.
|
2000-07-31 12:30:10 +00:00
|
|
|
#ifdef IG_OLDPARAMS
|
2000-02-29 02:19:17 +00:00
|
|
|
// We need variables to store the size of the boundingbox and
|
|
|
|
// to store a pointer to the pixmap in.. The question is if
|
|
|
|
// these should be in a "pixmap" class.
|
|
|
|
// We also need to have variables about rotation and scaling,
|
|
|
|
// width and height. in effect all the paramters that
|
2000-07-31 12:30:10 +00:00
|
|
|
// \includegraphics can handle. (the graphix.sty package)
|
2000-02-29 02:19:17 +00:00
|
|
|
|
|
|
|
/** The "bounding box" of the graphics image. Its value field
|
|
|
|
must contain four dimensions, separated by spaces. */
|
|
|
|
BoundingBox bb;
|
|
|
|
/** The bounding box above is used for display and file both.
|
|
|
|
But we need this variable below to know if we shall use the
|
|
|
|
bounding box in the LaTex command or not. (i.e. if the user
|
|
|
|
has manually set the bb.) */
|
|
|
|
bool use_bb;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/** When a graphics file is parsed we first check for BoundingBox
|
|
|
|
and then for HiResBoundingBox, and set hiresbb depending on this.
|
|
|
|
This key makes LaTeX search for %%HiResBoundingBox comments
|
|
|
|
instead of the normal %%BoundingBox. Some applications use
|
2000-07-31 12:30:10 +00:00
|
|
|
this to specify more precise bounding boxes, becase the numbers
|
2000-02-29 02:19:17 +00:00
|
|
|
can normally only have integer values. It is a Boolean, either
|
|
|
|
"true" or "false". */
|
|
|
|
bool hiresbb;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/** This key takes four arguments (like bb), but in this case the
|
|
|
|
origin is taken with respect to the bounding box specified in
|
|
|
|
the file. So to view a 20 bp square at the lower left-hand corner
|
|
|
|
of the picture, specify viewport=0 0 20 20. */
|
|
|
|
BoundingBox viewport;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/** Similar to the viewport key, but the four dimensions correspond
|
|
|
|
to the amount of space to be trimmed (cut off) at the left-hand
|
|
|
|
side, bottom, right-hand side and top of the included graphics. */
|
|
|
|
BoundingBox trim;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/// Natural height of figure
|
|
|
|
LyXLength natheight;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/// Natural width of figure.
|
|
|
|
LyXLength natwidth;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/// Rotation angle (in degrees, counterclockwise).
|
|
|
|
float angle;
|
2000-07-31 12:30:10 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/** Origin for rotation, similar to the origin parameter of
|
|
|
|
the \rotatebox command described on p.46 and Fig. 2.2 on p.46. */
|
|
|
|
Origin origin;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/// Required width (the width of the image is scaled to that value).
|
|
|
|
LyXLength g_width;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/// Required height (the height of the image is scaled to that value).
|
|
|
|
LyXLength g_height;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/** Required total height (the total height of the image is scaled
|
|
|
|
to that value). This key should be used instead of height if
|
|
|
|
images are rotated over 90 degrees, since the height can
|
|
|
|
disappear (and become the depth) and LaTeX will have difficulties
|
|
|
|
satisfying the user's request. */
|
|
|
|
LyXLength totalheight;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/** Boolean variable that can have the values "true" and "false"
|
|
|
|
(se above for defaults). When true, specifying both width and
|
|
|
|
height parameters does not distort the picture, but the image
|
|
|
|
is scaled so that neither of the width of height exceeds the
|
|
|
|
given dimensions. */
|
|
|
|
bool keepaspectratio;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/// Scale factor
|
|
|
|
float scale;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/** Clip the graphic to the bounding box. It is a Boolean, either
|
|
|
|
"true" or "false". */
|
|
|
|
bool clip;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/// Locally switch to draft mode. A Boolean valued key, like clip.
|
|
|
|
bool draft;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/// The graphics type.
|
|
|
|
string type;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-07-31 12:30:10 +00:00
|
|
|
/// The file extension of the file containing the image data.
|
2000-02-29 02:19:17 +00:00
|
|
|
string ext;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/// The file extension of the file "read" by LaTeX.
|
|
|
|
string read;
|
2000-08-14 09:44:53 +00:00
|
|
|
|
2000-02-29 02:19:17 +00:00
|
|
|
/// Any command to be applied to the file.
|
|
|
|
string command;
|
2000-08-14 09:44:53 +00:00
|
|
|
#endif
|
2000-02-29 02:19:17 +00:00
|
|
|
};
|
|
|
|
|
2000-08-14 09:44:53 +00:00
|
|
|
#endif
|