// -*- C++ -*-
-/* This file is part of
- * ======================================================
- *
- * LyX, The Document Processor
- *
- * Copyright 1995 Matthias Ettrich
- * Copyright 1995-2000 the LyX Team.
+/**
+ * \file insetgraphics.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
*
- * ====================================================== */
+ * \author Baruch Even
+ * \author Herbert Voss
+ *
+ * Full author contact details are available in file CREDITS
+ */
#ifndef INSET_GRAPHICS_H
#define INSET_GRAPHICS_H
-#ifdef __GNUG__
-#pragma interface
-#endif
+#include "inset.h"
+#include "insetgraphicsParams.h"
+
+#include <boost/scoped_ptr.hpp>
+#include <boost/signals/trackable.hpp>
-#include "insets/lyxinset.h"
-#include "LaTeXFeatures.h"
-#include "vspace.h"
-#include "insets/BoundingBox.h"
-struct FD_Graphics;
+class Dialogs;
+class GraphicRenderer;
+class LaTeXFeatures;
///
-class InsetGraphics : public Inset {
+class InsetGraphics : public InsetOld, public boost::signals::trackable {
public:
///
InsetGraphics();
///
- int ascent(Painter &, LyXFont const &) const;
+ InsetGraphics(InsetGraphics const &);
///
- int descent(Painter &, LyXFont const &) const;
+ ~InsetGraphics();
///
- int width(Painter &, LyXFont const &) const;
+ virtual dispatch_result localDispatch(FuncRequest const & cmd);
///
- void draw(Painter &, LyXFont const &,
- int baseline, float & x) const;
+ void metrics(MetricsInfo &, Dimension &) const;
///
- void Edit(BufferView *, int, int, unsigned int);
+ void draw(PainterInfo & pi, int x, int y) const;
///
- EDITABLE Editable() const;
+ EDITABLE editable() const;
///
- void Write(std::ostream &) const;
+ void write(Buffer const *, std::ostream &) const;
///
- void Read(LyXLex & lex);
+ void read(Buffer const *, LyXLex & lex);
+
/** returns the number of rows (\n's) of generated tex code.
- fragile != 0 means, that the inset should take care about
- fragile commands by adding a \protect before.
+ #fragile == true# means, that the inset should take care about
+ fragile commands by adding a #\protect# before.
*/
- int Latex(std::ostream &, signed char fragile, bool free_spc) const;
+ int latex(Buffer const *, std::ostream &,
+ LatexRunParams const &) const;
+ ///
+ int ascii(Buffer const *, std::ostream &, int linelen) const;
///
- int Linuxdoc(std::ostream &) const;
+ int linuxdoc(Buffer const *, std::ostream &) const;
///
- int DocBook(std::ostream &) const;
+ int docbook(Buffer const *, std::ostream &, bool mixcont) const;
- /// Updates needed features for this inset.
- void Validate(LaTeXFeatures & features) const;
+ /** Tell LyX what the latex features you need i.e. what latex packages
+ you need to be included.
+ */
+ void validate(LaTeXFeatures & features) const;
/// returns LyX code associated with the inset. Used for TOC, ...)
- Inset::Code LyxCode() const { return Inset::GRAPHICS_CODE; }
-
- ///
- Inset * Clone() const;
- /// Set the graphics file
- void graphicsFile(string const & f) {
- graphicsfile = f;
- }
- /// Get the graphics file
- string const & graphicsFile() const {
- return graphicsfile;
- }
+ InsetOld::Code lyxCode() const { return InsetOld::GRAPHICS_CODE; }
+
+ ///
+ virtual std::auto_ptr<InsetBase> clone() const;
+
+ /** Set the inset parameters, used by the GUIndependent dialog.
+ Return true of new params are different from what was so far.
+ */
+ bool setParams(InsetGraphicsParams const & params);
+
+ /// Get the inset parameters, used by the GUIndependent dialog.
+ InsetGraphicsParams const & params() const;
+
private:
///
- FD_Graphics * form;
- ///
- string graphicsfile;
- ///
- Pixmap pixmap;
-
- // 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
- // \includegrapichs can handle. (the graphix.sty package)
-
- /** 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;
-
- /** 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
- this to specify more precise bounding boxes, becase the cumbers
- can normally only have integer values. It is a Boolean, either
- "true" or "false". */
- bool hiresbb;
- /** 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;
- /** 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;
- /// Natural height of figure
- LyXLength natheight;
- /// Natural width of figure.
- LyXLength natwidth;
- /// Rotation angle (in degrees, counterclockwise).
- float angle;
- /// This is the different origins that the graphicx package support.
- enum Origin {
- DEFAULT,
- LEFTTOP,
- LEFTCENTER,
- LEFTBASELINE,
- LEFTBOTTOM,
- CENTERTOP,
- CENTER,
- CENTERBASELINE,
- CENTERBOTTOM,
- RIGHTTOP,
- RIGHTCENTER,
- RIGHTBASELINE,
- RIGHTBOTTOM,
- REFERENCE_POINT = LEFTBASELINE
- };
- /** 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;
- /// Required width (the width of the image is scaled to that value).
- LyXLength g_width;
- /// Required height (the height of the image is scaled to that value).
- LyXLength g_height;
- /** 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;
- /** 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;
- /// Scale factor
- float scale;
- /** Clip the graphic to the bounding box. It is a Boolean, either
- "true" or "false". */
- bool clip;
- /// Locally switch to draft mode. A Boolean valued key, like clip.
- bool draft;
- /// The graphics type.
- string type;
- ///x The file extension of the file containing the image data.
- string ext;
- /// The file extension of the file "read" by LaTeX.
- string read;
- /// Any command to be applied to the file.
- string command;
+ friend class InsetGraphicsMailer;
+
+ /** This method is connected to the graphics loader, so we are
+ * informed when the image has been loaded.
+ */
+ void statusChanged();
+
+ /// Read the inset native format
+ void readInsetGraphics(LyXLex & lex, string const & bufpath);
+
+ /// Get the status message, depends on the image loading status.
+ string const statusMessage() const;
+ /// Create the options for the latex command.
+ string const createLatexOptions() const;
+ /// Convert the file if needed, and return the location of the file.
+ string const prepareFile(Buffer const * buf, LatexRunParams const &) const;
+
+ ///
+ InsetGraphicsParams params_;
+
+ /// holds the entity name that defines the graphics location (SGML).
+ string const graphic_label;
+
+ /// The thing that actually draws the image on LyX's screen.
+ boost::scoped_ptr<GraphicRenderer> const graphic_;
+};
+
+
+#include "mailinset.h"
+
+class InsetGraphicsMailer : public MailInset {
+public:
+ ///
+ InsetGraphicsMailer(InsetGraphics & inset);
+ ///
+ virtual InsetBase & inset() const { return inset_; }
+ ///
+ virtual string const & name() const { return name_; }
+ ///
+ virtual string const inset2string(Buffer const &) const;
+ ///
+ static void string2params(string const & data,
+ Buffer const & buffer,
+ InsetGraphicsParams &);
+ ///
+ static string const params2string(InsetGraphicsParams const &,
+ Buffer const &);
+private:
+ ///
+ static string const name_;
+ ///
+ InsetGraphics & inset_;
};
#endif