Embedding: display a pin at the top left corner of embedded figures

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22439 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Bo Peng 2008-01-08 16:22:05 +00:00
parent e40499d5df
commit 06254d11df
9 changed files with 37 additions and 4 deletions

View File

@ -1428,6 +1428,7 @@ lib_images_files = Split('''
note-next.png note-next.png
paste.png paste.png
promote.png promote.png
pin.png
psnfss1.png psnfss1.png
psnfss2.png psnfss2.png
psnfss3.png psnfss3.png

View File

@ -335,6 +335,7 @@ dist_images_DATA = \
images/note-insert.png \ images/note-insert.png \
images/note-next.png \ images/note-next.png \
images/paste.png \ images/paste.png \
images/pin.png \
images/promote.png \ images/promote.png \
images/psnfss1.png \ images/psnfss1.png \
images/psnfss2.png \ images/psnfss2.png \

BIN
lib/images/pin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

View File

@ -24,7 +24,8 @@ namespace graphics {
Params::Params() Params::Params()
: display(ColorDisplay), : display(ColorDisplay),
scale(100), scale(100),
angle(0) angle(0),
icon("")
{} {}
@ -34,7 +35,8 @@ bool operator==(Params const & a, Params const & b)
a.display == b.display && a.display == b.display &&
a.bb == b.bb && a.bb == b.bb &&
a.scale == b.scale && a.scale == b.scale &&
a.angle == b.angle); a.angle == b.angle &&
a.icon == b.icon);
} }

View File

@ -72,6 +72,12 @@ public:
*/ */
/// Rotation angle. /// Rotation angle.
double angle; double angle;
/** The icon to be displayed to the top-left corner of an image.
* It is mutable because an icon reflects a temporary state of
* the image, and is variable.
*/
mutable std::string icon;
}; };
bool operator==(Params const &, Params const &); bool operator==(Params const &, Params const &);

View File

@ -173,7 +173,7 @@ void InsetGraphics::doDispatch(Cursor & cur, FuncRequest & cmd)
InsetGraphicsMailer::string2params(to_utf8(cmd.argument()), buffer, p); InsetGraphicsMailer::string2params(to_utf8(cmd.argument()), buffer, p);
if (!p.filename.empty()) { if (!p.filename.empty()) {
try { try {
updateEmbeddedFile(buffer, p.filename); p.filename.enable(buffer.embeddedFiles().enabled(), &buffer);
} catch (ExceptionMessage const & message) { } catch (ExceptionMessage const & message) {
Alert::error(message.title_, message.details_); Alert::error(message.title_, message.details_);
// do not set parameter if an error happens // do not set parameter if an error happens

View File

@ -274,6 +274,7 @@ graphics::Params InsetGraphicsParams::as_grfxParams() const
{ {
graphics::Params pars; graphics::Params pars;
pars.filename = filename.availableFile(); pars.filename = filename.availableFile();
pars.icon = filename.embedded() ? "pin.png" : "";
pars.scale = lyxscale; pars.scale = lyxscale;
pars.angle = convert<double>(rotateAngle); pars.angle = convert<double>(rotateAngle);

View File

@ -14,6 +14,8 @@
#include "insets/Inset.h" #include "insets/Inset.h"
#include "support/FileName.h"
#include "support/filetools.h"
#include "support/gettext.h" #include "support/gettext.h"
#include "LyX.h" #include "LyX.h"
#include "LyXRC.h" #include "LyXRC.h"
@ -36,13 +38,16 @@ namespace lyx {
RenderGraphic::RenderGraphic(Inset const * inset) RenderGraphic::RenderGraphic(Inset const * inset)
{ {
loader_.connect(boost::bind(&Inset::updateFrontend, inset)); loader_.connect(boost::bind(&Inset::updateFrontend, inset));
icon_.connect(boost::bind(&Inset::updateFrontend, inset));
} }
RenderGraphic::RenderGraphic(RenderGraphic const & other, Inset const * inset) RenderGraphic::RenderGraphic(RenderGraphic const & other, Inset const * inset)
: RenderBase(other), loader_(other.loader_), params_(other.params_) : RenderBase(other), loader_(other.loader_), icon_(other.icon_),
params_(other.params_)
{ {
loader_.connect(boost::bind(&Inset::updateFrontend, inset)); loader_.connect(boost::bind(&Inset::updateFrontend, inset));
icon_.connect(boost::bind(&Inset::updateFrontend, inset));
} }
@ -58,6 +63,15 @@ void RenderGraphic::update(graphics::Params const & params)
if (!params_.filename.empty()) if (!params_.filename.empty())
loader_.reset(params_.filename, params_); loader_.reset(params_.filename, params_);
// If icon is set to empty, icon_ will not be reset to empty
// but will not be displayed. This is to avoid repeated loading
// of the same icon when figure status changes.
if (!params_.icon.empty()) {
support::FileName const icon = support::libFileSearch("images/",
params_.icon, "png");
if (!icon.empty()) // using an empty bounding box
icon_.reset(icon, graphics::Params());
}
} }
@ -172,6 +186,10 @@ void RenderGraphic::draw(PainterInfo & pi, int x, int y) const
loader_.startLoading(); loader_.startLoading();
if (!loader_.monitoring()) if (!loader_.monitoring())
loader_.startMonitoring(); loader_.startMonitoring();
if (icon_.status() == graphics::WaitingToLoad)
icon_.startLoading();
if (!icon_.monitoring())
icon_.startMonitoring();
} }
// This will draw the graphics. If the graphics has not been // This will draw the graphics. If the graphics has not been
@ -211,6 +229,9 @@ void RenderGraphic::draw(PainterInfo & pi, int x, int y) const
y - 4, msg, msgFont); y - 4, msg, msgFont);
} }
} }
if (!params_.icon.empty() && readyToDisplay(icon_))
pi.pain.image(x + Inset::TEXT_TO_INSET_OFFSET, y - dim_.asc,
10, 10, *icon_.image());
} }

View File

@ -45,6 +45,7 @@ private:
/// The stored data. /// The stored data.
graphics::Loader loader_; graphics::Loader loader_;
graphics::Loader icon_;
graphics::Params params_; graphics::Params params_;
}; };