// -*- 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 Voß
+ *
+ * Full author contact details are available in file CREDITS.
+ */
#ifndef INSET_GRAPHICS_H
#define INSET_GRAPHICS_H
+#include "inset.h"
+#include "insetgraphicsParams.h"
+#include "mailinset.h"
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include "insets/lyxinset.h"
-#include "insets/insetgraphicsParams.h"
-#include "graphics/GraphicsCacheItem.h"
+#include <boost/scoped_ptr.hpp>
+#include <boost/signals/trackable.hpp>
-#include "LaTeXFeatures.h"
-// 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;
-using SigC::slot;
-using SigC::Object;
-#endif
+namespace lyx {
class Dialogs;
+class RenderGraphic;
+class LaTeXFeatures;
///
-#ifdef SIGC_CXX_NAMESPACES
-class InsetGraphics : public Inset, public SigC::Object
-#else
-class InsetGraphics : public Inset, public Object
-#endif
-{
+class InsetGraphics : public InsetOld, public boost::signals::trackable {
public:
///
InsetGraphics();
///
~InsetGraphics();
///
- int ascent(BufferView *, LyXFont const &) const;
- ///
- int descent(BufferView *, LyXFont const &) const;
- ///
- int width(BufferView *, LyXFont const &) const;
+ bool metrics(MetricsInfo &, Dimension &) const;
///
- bool display() const { return true; }
+ EDITABLE editable() const;
///
- void draw(BufferView *, LyXFont const &, int, float &, bool) const;
+ void write(Buffer const &, std::ostream &) const;
///
- void Edit(BufferView *, int, int, unsigned int);
- ///
- EDITABLE Editable() const;
- ///
- void Write(Buffer const *, std::ostream &) const;
- ///
- void Read(Buffer const *, LyXLex & lex);
+ void read(Buffer const &, LyXLex & lex);
/** returns the number of rows (\n's) of generated tex code.
#fragile == true# means, that the inset should take care about
fragile commands by adding a #\protect# before.
*/
- int Latex(Buffer const *, std::ostream &,
- bool fragile, bool free_spc) const;
+ int latex(Buffer const &, odocstream &,
+ OutputParams const &) const;
///
- int Ascii(Buffer const *, std::ostream &, int linelen) const;
+ int plaintext(Buffer const &, odocstream &,
+ OutputParams const &) const;
///
- int Linuxdoc(Buffer const *, std::ostream &) const;
- ///
- int DocBook(Buffer const *, std::ostream &) const;
+ int docbook(Buffer const &, odocstream &,
+ OutputParams const &) const;
/** Tell LyX what the latex features you need i.e. what latex packages
you need to be included.
*/
- void Validate(LaTeXFeatures & features) const;
+ 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;
+ InsetBase::Code lyxCode() const { return InsetBase::GRAPHICS_CODE; }
/** 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 getParams() const;
+ InsetGraphicsParams const & params() const;
+ ///
+ void draw(PainterInfo & pi, int x, int y) const;
+ ///
+ void edit(LCursor & cur, bool left);
+ ///
+ void editGraphics(InsetGraphicsParams const &, Buffer const &) const;
+ ///
+ bool getStatus(LCursor &, FuncRequest const &, FuncStatus &) const;
+protected:
+ InsetGraphics(InsetGraphics const &);
+ ///
+ virtual void doDispatch(LCursor & cur, FuncRequest & cmd);
+private:
+ friend class InsetGraphicsMailer;
- /** This signal is connected by our dialog and called when the inset
- is deleted.
- */
- Signal0 <void> hide;
+ virtual std::auto_ptr<InsetBase> doClone() const;
+
+ /// Read the inset native format
+ void readInsetGraphics(LyXLex & lex, std::string const & bufpath);
+
+ /// Get the status message, depends on the image loading status.
+ std::string const statusMessage() const;
+ /// Create the options for the latex command.
+ std::string const createLatexOptions() const;
+ /// Create length values for docbook export.
+ docstring const toDocbookLength(LyXLength const & len) const;
+ /// Create the atributes for docbook export.
+ docstring const createDocBookAttributes() const;
+ /// Convert the file if needed, and return the location of the file.
+ std::string const prepareFile(Buffer const & buf, OutputParams const &) const;
+
+ ///
+ InsetGraphicsParams params_;
+
+ /// holds the entity name that defines the graphics location (SGML).
+ docstring const graphic_label;
+
+ /// The thing that actually draws the image on LyX's screen.
+ boost::scoped_ptr<RenderGraphic> const graphic_;
+};
+
+
+class InsetGraphicsMailer : public MailInset {
+public:
+ ///
+ InsetGraphicsMailer(InsetGraphics & inset);
+ ///
+ virtual InsetBase & inset() const { return inset_; }
+ ///
+ virtual std::string const & name() const { return name_; }
+ ///
+ virtual std::string const inset2string(Buffer const &) const;
+ ///
+ static void string2params(std::string const & data,
+ Buffer const & buffer,
+ InsetGraphicsParams &);
+ ///
+ static std::string const params2string(InsetGraphicsParams const &,
+ Buffer const &);
private:
- /// 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.
-#ifdef IG_OLDPARAMS
- // 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
- // \includegraphics 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 numbers
- 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;
-
- /** 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;
-
- /// 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;
-#endif
+ ///
+ static std::string const name_;
+ ///
+ InsetGraphics & inset_;
};
-#endif
+
+} // namespace lyx
+
+#endif