X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FinsetgraphicsParams.C;h=c0cdd5fae8826669aa6d68d3e2c1ae08c78acc69;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=eb7d423074722edcd4d85b9edd43b99580420730;hpb=cf216cd7fc8ec452e3147171ab6a107c88906b06;p=lyx.git diff --git a/src/insets/insetgraphicsParams.C b/src/insets/insetgraphicsParams.C index eb7d423074..c0cdd5fae8 100644 --- a/src/insets/insetgraphicsParams.C +++ b/src/insets/insetgraphicsParams.C @@ -1,72 +1,48 @@ -/* This file is part of - * ================================================= - * - * LyX, The Document Processor - * Copyright 1995 Matthias Ettrich. - * Copyright 1995-2001 The LyX Team. +/** + * \file insetgraphicsParams.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * * \author Baruch Even - * \author Herbert Voss + * \author Herbert Voß * - * ================================================= */ + * Full author contact details are available in file CREDITS. + */ #include -#ifdef __GNUG__ -#pragma implementation -#endif - #include "insetgraphicsParams.h" +#include "debug.h" +#include "lyx_main.h" // for use_gui +#include "lyxlex.h" +#include "lyxrc.h" + #include "graphics/GraphicsParams.h" -#include "support/translator.h" +#include "support/convert.h" #include "support/filetools.h" #include "support/lyxlib.h" -#include "support/LOstream.h" -#include "support/LAssert.h" #include "support/lstrings.h" -#include "lyxrc.h" -#include "debug.h" -#include "lyxlex.h" - -using std::ostream; - +#include "support/translator.h" -namespace { -/// This variable keeps a tab on whether the translator was set with the -/// translations. -bool translatorsSet = false; +namespace lyx { -/// This is the translator between the Display enum and corresponding lyx -/// file strings. -Translator< grfx::DisplayType, string > -displayTranslator(grfx::DefaultDisplay, "default"); +using support::float_equal; +using support::readBB_from_PSFile; +using support::token; -} // namespace anon +using std::string; +using std::ostream; InsetGraphicsParams::InsetGraphicsParams() { init(); - // Set translators - if (! translatorsSet) { - translatorsSet = true; - // Fill the display translator - displayTranslator.addPair(grfx::DefaultDisplay, "default"); - displayTranslator.addPair(grfx::MonochromeDisplay, "monochrome"); - displayTranslator.addPair(grfx::GrayscaleDisplay, "grayscale"); - displayTranslator.addPair(grfx::ColorDisplay, "color"); - displayTranslator.addPair(grfx::NoDisplay, "none"); - - // backward compatibility for old lyxrc.display_graphics - displayTranslator.addPair(grfx::MonochromeDisplay, "mono"); - displayTranslator.addPair(grfx::GrayscaleDisplay, "gray"); - displayTranslator.addPair(grfx::NoDisplay, "no"); - } } + InsetGraphicsParams::InsetGraphicsParams(InsetGraphicsParams const & igp) { // I decided to skip the initialization since the copy will overwrite @@ -75,38 +51,41 @@ InsetGraphicsParams::InsetGraphicsParams(InsetGraphicsParams const & igp) copy(igp); } + InsetGraphicsParams & InsetGraphicsParams::operator=(InsetGraphicsParams const & params) { // Are we assigning the object into itself? if (this == ¶ms) - return * this; + return *this; copy(params); return *this; } + void InsetGraphicsParams::init() { - subcaptionText = filename = string(); + filename.erase(); lyxscale = 100; // lyx scaling in percentage - display = grfx::DefaultDisplay; // see pref - scale = 100; // output scaling in percentage + display = graphics::DefaultDisplay; // display mode; see preferences + scale = string(); // output scaling in percentage width = LyXLength(); height = LyXLength(); - keepAspectRatio = false; // for latex + keepAspectRatio = false; // for LaTeX output draft = false; // draft mode noUnzip = false; // unzip files bb = string(); // bounding box clip = false; // clip image - rotateOrigin = "leftBaseline"; // Origin - rotateAngle = 0.0; // in degrees + rotateAngle = "0"; // angle of rotation in degrees + rotateOrigin.erase(); // Origin of rotation subcaption = false; // subfigure - subcaptionText = string(); // subfigure caption - special = string(); // userdefined stuff + subcaptionText.erase(); // subfigure caption + special.erase(); // additional userdefined stuff } + void InsetGraphicsParams::copy(InsetGraphicsParams const & igp) { filename = igp.filename; @@ -129,6 +108,7 @@ void InsetGraphicsParams::copy(InsetGraphicsParams const & igp) special = igp.special; } + bool operator==(InsetGraphicsParams const & left, InsetGraphicsParams const & right) { @@ -146,7 +126,7 @@ bool operator==(InsetGraphicsParams const & left, left.bb == right.bb && left.clip == right.clip && - lyx::float_equal(left.rotateAngle, right.rotateAngle, 0.001) && + left.rotateAngle == right.rotateAngle && left.rotateOrigin == right.rotateOrigin && left.subcaption == right.subcaption && left.subcaptionText == right.subcaptionText && @@ -157,33 +137,35 @@ bool operator==(InsetGraphicsParams const & left, return false; } + bool operator!=(InsetGraphicsParams const & left, InsetGraphicsParams const & right) { return !(left == right); } -void InsetGraphicsParams::Write(ostream & os) const + +void InsetGraphicsParams::Write(ostream & os, string const & bufpath) const { // Do not write the default values if (!filename.empty()) { - os << "\tfilename " << filename << '\n'; + os << "\tfilename " << filename.outputFilename(bufpath) << '\n'; } if (lyxscale != 100) os << "\tlyxscale " << lyxscale << '\n'; - if (display != grfx::DefaultDisplay) - os << "\tdisplay " << displayTranslator.find(display) << '\n'; - if (scale) { - if (scale != 100) + if (display != graphics::DefaultDisplay) + os << "\tdisplay " << graphics::displayTranslator().find(display) << '\n'; + if (!scale.empty() && !float_equal(convert(scale), 0.0, 0.05)) { + if (!float_equal(convert(scale), 100.0, 0.05)) os << "\tscale " << scale << '\n'; } else { if (!width.zero()) os << "\twidth " << width.asString() << '\n'; + if (!height.zero()) + os << "\theight " << height.asString() << '\n'; } - if (!height.zero()) - os << "\theight " << height.asString() << '\n'; if (keepAspectRatio) os << "\tkeepAspectRatio\n"; if (draft) // draft mode @@ -196,9 +178,10 @@ void InsetGraphicsParams::Write(ostream & os) const if (clip) // clip image os << "\tclip\n"; - if (rotateAngle != 0.0) + if (!rotateAngle.empty() + && !float_equal(convert(rotateAngle), 0.0, 0.001)) os << "\trotateAngle " << rotateAngle << '\n'; - if (rotateOrigin != "leftBaseline") + if (!rotateOrigin.empty()) os << "\trotateOrigin " << rotateOrigin << '\n'; if (subcaption) os << "\tsubcaption\n"; @@ -209,28 +192,29 @@ void InsetGraphicsParams::Write(ostream & os) const } -bool InsetGraphicsParams::Read(LyXLex & lex, string const & token) +bool InsetGraphicsParams::Read(LyXLex & lex, string const & token, string const & bufpath) { if (token == "filename") { lex.eatLine(); - filename = lex.getString(); + filename.set(lex.getString(), bufpath); } else if (token == "lyxscale") { lex.next(); lyxscale = lex.getInteger(); } else if (token == "display") { lex.next(); string const type = lex.getString(); - display = displayTranslator.find(type); + display = graphics::displayTranslator().find(type); } else if (token == "scale") { lex.next(); - scale = lex.getInteger(); + scale = lex.getString(); } else if (token == "width") { lex.next(); width = LyXLength(lex.getString()); - scale = 0; + scale = string(); } else if (token == "height") { lex.next(); height = LyXLength(lex.getString()); + scale = string(); } else if (token == "keepAspectRatio") { keepAspectRatio = true; } else if (token == "draft") { @@ -238,48 +222,53 @@ bool InsetGraphicsParams::Read(LyXLex & lex, string const & token) } else if (token == "noUnzip") { noUnzip = true; } else if (token == "BoundingBox") { - for (int i=0; i<4 ;i++) { + bb.erase(); + for (int i = 0; i < 4; ++i) { + if (i != 0) + bb += ' '; lex.next(); - bb += (lex.getString()+" "); + bb += lex.getString(); } } else if (token == "clip") { clip = true; } else if (token == "rotateAngle") { lex.next(); - rotateAngle = lex.getFloat(); + rotateAngle = lex.getString(); } else if (token == "rotateOrigin") { lex.next(); rotateOrigin=lex.getString(); } else if (token == "subcaption") { subcaption = true; } else if (token == "subcaptionText") { - lex.next(); - subcaptionText = lex.getString(); + lex.eatLine(); + string sub = lex.getString(); + // strip surrounding " " + subcaptionText = sub.substr(1, sub.length() - 2); } else if (token == "special") { lex.eatLine(); special = lex.getString(); // catch and ignore following two old-format tokens and their arguments. - // e.g. "size_kind scale" clashes with the setting of the "scale" keyword. + // e.g. "size_kind scale" clashes with the setting of the + // "scale " keyword. } else if (token == "size_kind" || token == "lyxsize_kind") { lex.next(); lex.getString(); - } else { // If it's none of the above, it's not ours. + + } else { + // If it's none of the above, it's not ours. return false; } return true; } -grfx::Params InsetGraphicsParams::as_grfxParams(string const & filepath) const +graphics::Params InsetGraphicsParams::as_grfxParams() const { - grfx::Params pars; + graphics::Params pars; pars.filename = filename; pars.scale = lyxscale; - pars.angle = rotateAngle; - - if (!filepath.empty()) - pars.filename = MakeAbsPath(pars.filename, filepath); + pars.angle = convert(rotateAngle); if (clip) { pars.bb = bb; @@ -288,25 +277,28 @@ grfx::Params InsetGraphicsParams::as_grfxParams(string const & filepath) const string const tmp = readBB_from_PSFile(filename); lyxerr[Debug::GRAPHICS] << "BB_from_File: " << tmp << std::endl; if (!tmp.empty()) { - unsigned int const bb_orig_xl = strToInt(token(tmp, ' ', 0)); - unsigned int const bb_orig_yb = strToInt(token(tmp, ' ', 1)); +#ifdef WITH_WARNINGS +# warning why not convert to unsigned int? (Lgb) +#endif + unsigned int const bb_orig_xl = convert(token(tmp, ' ', 0)); + unsigned int const bb_orig_yb = convert(token(tmp, ' ', 1)); - // new pars.bb values must be >= zero + // new pars.bb values must be >= zero if (pars.bb.xl > bb_orig_xl) pars.bb.xl -= bb_orig_xl; else pars.bb.xl = 0; - + if (pars.bb.xr > bb_orig_xl) pars.bb.xr -= bb_orig_xl; else pars.bb.xr = 0; - + if (pars.bb.yb > bb_orig_yb) pars.bb.yb -= bb_orig_yb; else pars.bb.yb = 0; - + if (pars.bb.yt > bb_orig_yb) pars.bb.yt -= bb_orig_yb; else @@ -324,18 +316,20 @@ grfx::Params InsetGraphicsParams::as_grfxParams(string const & filepath) const pars.bb.yt = 0; } } - - string mode; - if (display != grfx::DefaultDisplay) - mode = displayTranslator.find(display); - else - mode = displayTranslator.find(lyxrc.display_graphics); - pars.display = displayTranslator.find(mode); - + + if (display == graphics::DefaultDisplay) { + pars.display = lyxrc.display_graphics; + } else { + pars.display = display; + } + // Override the above if we're not using a gui - if (!lyxrc.use_gui) { - pars.display = grfx::NoDisplay; + if (!use_gui) { + pars.display = graphics::NoDisplay; } return pars; } + + +} // namespace lyx