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
paste.png
promote.png
pin.png
psnfss1.png
psnfss2.png
psnfss3.png

View File

@ -335,6 +335,7 @@ dist_images_DATA = \
images/note-insert.png \
images/note-next.png \
images/paste.png \
images/pin.png \
images/promote.png \
images/psnfss1.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()
: display(ColorDisplay),
scale(100),
angle(0)
angle(0),
icon("")
{}
@ -34,7 +35,8 @@ bool operator==(Params const & a, Params const & b)
a.display == b.display &&
a.bb == b.bb &&
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.
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 &);

View File

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

View File

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

View File

@ -14,6 +14,8 @@
#include "insets/Inset.h"
#include "support/FileName.h"
#include "support/filetools.h"
#include "support/gettext.h"
#include "LyX.h"
#include "LyXRC.h"
@ -36,13 +38,16 @@ namespace lyx {
RenderGraphic::RenderGraphic(Inset const * inset)
{
loader_.connect(boost::bind(&Inset::updateFrontend, inset));
icon_.connect(boost::bind(&Inset::updateFrontend, 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));
icon_.connect(boost::bind(&Inset::updateFrontend, inset));
}
@ -58,6 +63,15 @@ void RenderGraphic::update(graphics::Params const & params)
if (!params_.filename.empty())
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();
if (!loader_.monitoring())
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
@ -211,6 +229,9 @@ void RenderGraphic::draw(PainterInfo & pi, int x, int y) const
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.
graphics::Loader loader_;
graphics::Loader icon_;
graphics::Params params_;
};