mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-26 11:16:55 +00:00
Embedding: add a check box to InsetGraphic and show/change embedding status
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20297 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
d348b0183b
commit
93196b1f73
@ -179,6 +179,26 @@ def remove_manifest(document):
|
|||||||
document.manifest = None
|
document.manifest = None
|
||||||
|
|
||||||
|
|
||||||
|
def remove_inzip_options(document):
|
||||||
|
"Remove inzipName and embed options from the Graphics inset"
|
||||||
|
i = 0
|
||||||
|
while 1:
|
||||||
|
i = find_token(document.body, "\\begin_inset Graphics", i)
|
||||||
|
if i == -1:
|
||||||
|
return
|
||||||
|
j = find_end_of_inset(document.body, i + 1)
|
||||||
|
if j == -1:
|
||||||
|
# should not happen
|
||||||
|
document.warning("Malformed LyX document: Could not find end of graphics inset.")
|
||||||
|
# If there's a inzip param, just remove that
|
||||||
|
k = find_token(document.body, "\tinzipName", i + 1, j)
|
||||||
|
if k != -1:
|
||||||
|
del document.body[k]
|
||||||
|
# embed option must follow the inzipName option
|
||||||
|
del document.body[k+1]
|
||||||
|
i = i + 1
|
||||||
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Conversion hub
|
# Conversion hub
|
||||||
#
|
#
|
||||||
@ -197,7 +217,7 @@ convert = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
revert = [
|
revert = [
|
||||||
[284, [remove_manifest]],
|
[284, [remove_manifest, remove_inzip_options]],
|
||||||
[283, []],
|
[283, []],
|
||||||
[282, [revert_flex]],
|
[282, [revert_flex]],
|
||||||
[281, []],
|
[281, []],
|
||||||
|
@ -468,7 +468,9 @@ void EmbeddedFiles::writeManifest(ostream & os) const
|
|||||||
EmbeddedFiles::EmbeddedFileList::const_iterator it = begin();
|
EmbeddedFiles::EmbeddedFileList::const_iterator it = begin();
|
||||||
EmbeddedFiles::EmbeddedFileList::const_iterator it_end = end();
|
EmbeddedFiles::EmbeddedFileList::const_iterator it_end = end();
|
||||||
for (; it != it_end; ++it) {
|
for (; it != it_end; ++it) {
|
||||||
if (!it->valid())
|
// only saved 'extra' files. Other embedded files are saved
|
||||||
|
// with insets.
|
||||||
|
if (!it->valid() || it->refCount() > 0)
|
||||||
continue;
|
continue;
|
||||||
// save the relative path
|
// save the relative path
|
||||||
os << "\\filename "
|
os << "\\filename "
|
||||||
|
@ -113,11 +113,14 @@ class ErrorList;
|
|||||||
class EmbeddedFile : public support::DocFileName
|
class EmbeddedFile : public support::DocFileName
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
EmbeddedFile() {};
|
||||||
|
|
||||||
EmbeddedFile(std::string const & file, std::string const & inzip_name,
|
EmbeddedFile(std::string const & file, std::string const & inzip_name,
|
||||||
bool embedded, Inset const * inset);
|
bool embedded, Inset const * inset);
|
||||||
|
|
||||||
/// filename in the zip file, usually the relative path
|
/// filename in the zip file, usually the relative path
|
||||||
std::string inzipName() const { return inzip_name_; }
|
std::string inzipName() const { return inzip_name_; }
|
||||||
|
void setInzipName(std::string name) { inzip_name_ = name; }
|
||||||
/// embedded file, equals to temppath()/inzipName()
|
/// embedded file, equals to temppath()/inzipName()
|
||||||
std::string embeddedFile(Buffer const * buf) const;
|
std::string embeddedFile(Buffer const * buf) const;
|
||||||
/// embeddedFile() or absFilename() depending on embedding status
|
/// embeddedFile() or absFilename() depending on embedding status
|
||||||
|
@ -111,6 +111,9 @@ void ControlEmbeddedFiles::setEmbed(EmbeddedFile & item, bool embed, bool update
|
|||||||
else
|
else
|
||||||
item.extract(&buffer());
|
item.extract(&buffer());
|
||||||
item.updateInsets(&buffer());
|
item.updateInsets(&buffer());
|
||||||
|
// FIXME: unless we record the type of file item, we will
|
||||||
|
// need to update all possible dialogs (bibtex etc).
|
||||||
|
updateDialog("graphics");
|
||||||
}
|
}
|
||||||
if (embed)
|
if (embed)
|
||||||
dispatchMessage("Embed file " + item.outputFilename(buffer().filePath()));
|
dispatchMessage("Embed file " + item.outputFilename(buffer().filePath()));
|
||||||
|
@ -285,6 +285,7 @@ void GuiGraphicsDialog::on_browsePB_clicked()
|
|||||||
controller().browse(qstring_to_ucs4(filename->text()));
|
controller().browse(qstring_to_ucs4(filename->text()));
|
||||||
if(!str.empty()){
|
if(!str.empty()){
|
||||||
filename->setText(toqstr(str));
|
filename->setText(toqstr(str));
|
||||||
|
embedCB->setCheckState(Qt::Unchecked);
|
||||||
changed();
|
changed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -454,6 +455,7 @@ void GuiGraphicsDialog::updateContents()
|
|||||||
string const name =
|
string const name =
|
||||||
igp.filename.outputFilename(controller().bufferFilepath());
|
igp.filename.outputFilename(controller().bufferFilepath());
|
||||||
filename->setText(toqstr(name));
|
filename->setText(toqstr(name));
|
||||||
|
embedCB->setCheckState(igp.filename.embedded() ? Qt::Checked : Qt::Unchecked);
|
||||||
|
|
||||||
// set the bounding box values
|
// set the bounding box values
|
||||||
if (igp.bb.empty()) {
|
if (igp.bb.empty()) {
|
||||||
@ -600,6 +602,7 @@ void GuiGraphicsDialog::applyView()
|
|||||||
|
|
||||||
igp.filename.set(internal_path(fromqstr(filename->text())),
|
igp.filename.set(internal_path(fromqstr(filename->text())),
|
||||||
controller().bufferFilepath());
|
controller().bufferFilepath());
|
||||||
|
igp.filename.setEmbed(embedCB->checkState() == Qt::Checked);
|
||||||
|
|
||||||
// the bb section
|
// the bb section
|
||||||
igp.bb.erase();
|
igp.bb.erase();
|
||||||
|
@ -49,7 +49,7 @@
|
|||||||
<property name="spacing" >
|
<property name="spacing" >
|
||||||
<number>6</number>
|
<number>6</number>
|
||||||
</property>
|
</property>
|
||||||
<item row="0" column="3" >
|
<item row="0" column="4" >
|
||||||
<widget class="QPushButton" name="editPB" >
|
<widget class="QPushButton" name="editPB" >
|
||||||
<property name="text" >
|
<property name="text" >
|
||||||
<string>&Edit</string>
|
<string>&Edit</string>
|
||||||
@ -62,7 +62,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="2" >
|
<item row="0" column="3" >
|
||||||
<widget class="QPushButton" name="browsePB" >
|
<widget class="QPushButton" name="browsePB" >
|
||||||
<property name="toolTip" >
|
<property name="toolTip" >
|
||||||
<string>Select an image file</string>
|
<string>Select an image file</string>
|
||||||
@ -71,6 +71,13 @@
|
|||||||
<string>&Browse...</string>
|
<string>&Browse...</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QCheckBox" name="embedCB" >
|
||||||
|
<property name="text" >
|
||||||
|
<string></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="1" >
|
<item row="0" column="1" >
|
||||||
<widget class="QLineEdit" name="filename" >
|
<widget class="QLineEdit" name="filename" >
|
||||||
@ -92,7 +99,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0" colspan="4" >
|
<item row="1" column="0" colspan="5" >
|
||||||
<widget class="QGroupBox" name="sizeGB" >
|
<widget class="QGroupBox" name="sizeGB" >
|
||||||
<property name="title" >
|
<property name="title" >
|
||||||
<string>Output Size</string>
|
<string>Output Size</string>
|
||||||
@ -214,7 +221,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0" colspan="4" >
|
<item row="2" column="0" colspan="5" >
|
||||||
<widget class="QGroupBox" name="rotationGB" >
|
<widget class="QGroupBox" name="rotationGB" >
|
||||||
<property name="title" >
|
<property name="title" >
|
||||||
<string>Rotate Graphics</string>
|
<string>Rotate Graphics</string>
|
||||||
|
@ -243,13 +243,11 @@ void InsetGraphics::updateEmbeddedFile(Buffer const & buf,
|
|||||||
EmbeddedFile const & file)
|
EmbeddedFile const & file)
|
||||||
{
|
{
|
||||||
BOOST_ASSERT(buf.embeddedFiles().enabled());
|
BOOST_ASSERT(buf.embeddedFiles().enabled());
|
||||||
LYXERR(Debug::FILES) << "Update InsetGraphics file from "
|
params_.filename = file;
|
||||||
<< params_.filename.toFilesystemEncoding() << std::endl;
|
LYXERR(Debug::FILES) << "Update InsetGraphic with File "
|
||||||
params_.filename.set(file.availableFile(&buf), buf.filePath());
|
<< params_.filename.toFilesystemEncoding()
|
||||||
LYXERR(Debug::FILES) << " to "
|
<< ", embedding status: "
|
||||||
<< params_.filename.toFilesystemEncoding() << std::endl;
|
<< params_.filename.embedded() << std::endl;
|
||||||
// FIXME: graphics dialog is not updated even if the underlying
|
|
||||||
// filename is updated. What should I do?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -305,7 +303,7 @@ void InsetGraphics::read(Buffer const & buf, Lexer & lex)
|
|||||||
if (it != buf.embeddedFiles().end())
|
if (it != buf.embeddedFiles().end())
|
||||||
// using available file, embedded or external, depending on file availability and
|
// using available file, embedded or external, depending on file availability and
|
||||||
// embedding status.
|
// embedding status.
|
||||||
params_.filename = DocFileName(it->availableFile(&buf));
|
params_.filename = *it;
|
||||||
}
|
}
|
||||||
graphic_->update(params().as_grfxParams());
|
graphic_->update(params().as_grfxParams());
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
#include "Lexer.h"
|
#include "Lexer.h"
|
||||||
#include "LyXRC.h"
|
#include "LyXRC.h"
|
||||||
#include "Buffer.h"
|
#include "Buffer.h"
|
||||||
#include "EmbeddedFiles.h"
|
|
||||||
|
|
||||||
#include "graphics/GraphicsParams.h"
|
#include "graphics/GraphicsParams.h"
|
||||||
|
|
||||||
@ -154,15 +153,10 @@ bool operator!=(InsetGraphicsParams const & left,
|
|||||||
void InsetGraphicsParams::Write(ostream & os, Buffer const & buffer) const
|
void InsetGraphicsParams::Write(ostream & os, Buffer const & buffer) const
|
||||||
{
|
{
|
||||||
// Do not write the default values
|
// Do not write the default values
|
||||||
|
|
||||||
if (!filename.empty()) {
|
if (!filename.empty()) {
|
||||||
// when we save, we still use the original filename
|
os << "\tfilename " << filename.outputFilename(buffer.filePath()) << '\n';
|
||||||
EmbeddedFiles::EmbeddedFileList::const_iterator it =
|
os << "\tinzipName " << filename.inzipName() << '\n';
|
||||||
buffer.embeddedFiles().find(filename.toFilesystemEncoding());
|
os << "\tembed " << (filename.embedded() ? "true" : "false") << '\n';
|
||||||
if (it != buffer.embeddedFiles().end())
|
|
||||||
os << "\tfilename " << DocFileName(it->absFilename()).outputFilename(buffer.filePath()) << '\n';
|
|
||||||
else
|
|
||||||
os << "\tfilename " << filename.outputFilename(buffer.filePath()) << '\n';
|
|
||||||
}
|
}
|
||||||
if (lyxscale != 100)
|
if (lyxscale != 100)
|
||||||
os << "\tlyxscale " << lyxscale << '\n';
|
os << "\tlyxscale " << lyxscale << '\n';
|
||||||
@ -211,6 +205,12 @@ bool InsetGraphicsParams::Read(Lexer & lex, string const & token, string const &
|
|||||||
if (token == "filename") {
|
if (token == "filename") {
|
||||||
lex.eatLine();
|
lex.eatLine();
|
||||||
filename.set(lex.getString(), bufpath);
|
filename.set(lex.getString(), bufpath);
|
||||||
|
} else if (token == "inzipName") {
|
||||||
|
lex.eatLine();
|
||||||
|
filename.setInzipName(lex.getString());
|
||||||
|
} else if (token == "embed") {
|
||||||
|
lex.next();
|
||||||
|
filename.setEmbed(lex.getBool());
|
||||||
} else if (token == "lyxscale") {
|
} else if (token == "lyxscale") {
|
||||||
lex.next();
|
lex.next();
|
||||||
lyxscale = lex.getInteger();
|
lyxscale = lex.getInteger();
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "graphics/GraphicsTypes.h"
|
#include "graphics/GraphicsTypes.h"
|
||||||
#include "Length.h"
|
#include "Length.h"
|
||||||
#include "support/FileName.h"
|
#include "support/FileName.h"
|
||||||
|
#include "EmbeddedFiles.h"
|
||||||
|
|
||||||
namespace lyx {
|
namespace lyx {
|
||||||
|
|
||||||
@ -31,7 +32,7 @@ class InsetGraphicsParams
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/// Image filename.
|
/// Image filename.
|
||||||
support::DocFileName filename;
|
EmbeddedFile filename;
|
||||||
/// Scaling the Screen inside Lyx
|
/// Scaling the Screen inside Lyx
|
||||||
unsigned int lyxscale;
|
unsigned int lyxscale;
|
||||||
/// How to display the image inside LyX
|
/// How to display the image inside LyX
|
||||||
|
Loading…
Reference in New Issue
Block a user