LyX file-format changes
-----------------------
+2008-03-09 Bo Peng <ben.bob@gmail.com>
+ * Format incremented to 318: add \extra_embedded_files to buffer params
+
2008-03-02 Uwe Stöhr <uwestoehr@web.de>
* Format incremented to 317: support floating placements for wrap floats
("1_3", [221], minor_versions("1.3" , 7)),
("1_4", range(222,246), minor_versions("1.4" , 5)),
("1_5", range(246,277), minor_versions("1.5" , 2)),
- ("1_6", range(277,318), minor_versions("1.6" , 0))] # Uwe: wrap placement
+ ("1_6", range(277,319), minor_versions("1.6" , 0))]
def formats_list():
i = i + 1
+def remove_extra_embedded_files(document):
+ "Remove \extra_embedded_files from buffer params"
+ i = find_token(document.header, '\\extra_embedded_files', 0)
+ if i == -1:
+ document.warning("Malformed lyx document: Missing '\\extra_embedded_files'.")
+ return
+ document.header.pop(i)
+
##
# Conversion hub
#
[314, []],
[315, []],
[316, [convert_subfig]],
- [317, []]
+ [317, []],
+ [318, []],
]
-revert = [[316, [revert_wrapplacement]],
+revert = [[317, [remove_extra_embedded_files]],
+ [316, [revert_wrapplacement]],
[315, [revert_subfig]],
[314, [revert_colsep]],
[313, []],
namespace {
-int const LYX_FORMAT = 317; // Uwe Stöhr: float placement support for wrap floats
+int const LYX_FORMAT = 318;
typedef map<string, bool> DepClean;
typedef map<docstring, pair<InsetLabel const *, Buffer::References> > RefCache;
AuthorList authorlist;
BranchList branchlist;
+ vector<string> extraEmbeddedFiles;
Bullet temp_bullets[4];
Bullet user_defined_bullets[4];
Spacing spacing;
}
+vector<string> & BufferParams::extraEmbeddedFiles()
+{
+ return pimpl_->extraEmbeddedFiles;
+}
+
+
+vector<string> const & BufferParams::extraEmbeddedFiles() const
+{
+ return pimpl_->extraEmbeddedFiles;
+}
+
+
BranchList & BufferParams::branchlist()
{
return pimpl_->branchlist;
toktmp << endl;
return toktmp;
}
+ } else if (token == "\\extra_embedded_files") {
+ extraEmbeddedFiles().clear();
+ string par;
+ lex >> par;
+ string tmp;
+ par = split(par, tmp, ',');
+ while (!tmp.empty()) {
+ extraEmbeddedFiles().push_back(tmp);
+ par = split(par, tmp, ',');
+ }
} else {
lyxerr << "BufferParams::readToken(): Unknown token: " <<
token << endl;
else
os << "\\author " << Author() << "\n";
}
+
+ vector<string>::const_iterator e_it = extraEmbeddedFiles().begin();
+ vector<string>::const_iterator e_end = extraEmbeddedFiles().end();
+ os << "\\extra_embedded_files \"";
+ bool first = true;
+ for (; e_it != e_end; ++e_it) {
+ if (!first)
+ os << ",";
+ else
+ first = false;
+ os << *e_it;
+ }
+ os << "\"\n";
}
bool compressed;
///
bool embedded;
+ ///
+ std::vector<std::string> & extraEmbeddedFiles();
+ std::vector<std::string> const & extraEmbeddedFiles() const;
/// the author list for the document
AuthorList & authors();
if (filename.empty())
return;
- inzip_name_ = calcInzipName(buffer_path);
+ if (!buffer_path.empty())
+ inzip_name_ = calcInzipName(buffer_path);
}
int count_embedded = 0;
int count_external = 0;
- std::vector<EmbeddedFile>::iterator it = begin();
- std::vector<EmbeddedFile>::iterator it_end = end();
+ iterator it = begin();
+ iterator it_end = end();
// an exception may be thrown
for (; it != it_end; ++it) {
it->enable(flag, &buffer, updateFile);
return;
}
//
+ file.clearInsets();
push_back(file);
back().addInset(inset);
}
for (InsetIterator it = inset_iterator_begin(buffer.inset()); it; ++it)
it->registerEmbeddedFiles(*this);
+
+ // add extra embedded files
+ vector<string> extra = buffer.params().extraEmbeddedFiles();
+ vector<string>::iterator it = extra.begin();
+ vector<string>::iterator it_end = extra.end();
+ for (; it != it_end; ++it) {
+ EmbeddedFile file = EmbeddedFile(*it, buffer.filePath());
+ file.setEmbed(true);
+ file.enable(buffer.embedded(), &buffer, true);
+ insert(end(), file);
+ }
}
filenames.push_back(make_pair(content, "content.lyx"));
// prepare list of embedded file
update(buffer);
- std::vector<EmbeddedFile>::iterator it = begin();
- std::vector<EmbeddedFile>::iterator it_end = end();
+ //
+ iterator it = begin();
+ iterator it_end = end();
for (; it != it_end; ++it) {
if (it->embedded()) {
string file = it->embeddedFile();
/// add an inset that refers to this file
void addInset(Inset const * inset);
- int refCount() const { return inset_list_.size(); }
+ void clearInsets() const { inset_list_.clear(); }
/// embedding status of this file
bool embedded() const { return embedded_; }
bool embedded_;
/// Insets that contains this file item. Because a
/// file item can be referred by several Insets, a vector is used.
- std::vector<Inset const *> inset_list_;
+ mutable std::vector<Inset const *> inset_list_;
/// Embedded file needs to know whether enbedding is enabled,
/// and where is the lyx temporary directory. Such information can
/// be retrived from a buffer, but a buffer is not always available when
#include "BufferParams.h"
#include "BufferView.h"
#include "Color.h"
-#include "EmbeddedFiles.h"
#include "Encoding.h"
#include "FloatPlacement.h"
#include "FuncRequest.h"
#include "support/debug.h"
#include "support/FileName.h"
+#include "support/FileFilterList.h"
#include "support/filetools.h"
#include "support/lstrings.h"
// embedded files
embeddedFilesModule = new UiWidget<Ui::EmbeddedFilesUi>;
- connect(embeddedFilesModule->bundleCB, SIGNAL(toggled(bool)),
- this, SLOT(change_adaptor()));
connect(embeddedFilesModule->addPB, SIGNAL(clicked()),
- this, SLOT(change_adaptor()));
+ this, SLOT(addExtraEmbeddedFile()));
connect(embeddedFilesModule->removePB, SIGNAL(clicked()),
- this, SLOT(change_adaptor()));
+ this, SLOT(removeExtraEmbeddedFile()));
// PDF support
pdfSupportModule = new UiWidget<Ui::PDFSupportUi>;
}
-void GuiDocument::updateEmbeddedFileList()
+void GuiDocument::setExtraEmbeddedFileList()
{
- embeddedFilesModule->filesLW->clear();
+ embeddedFilesModule->extraLW->clear();
// add current embedded files
- EmbeddedFileList & files = buffer().embeddedFiles();
- files.update(buffer());
- EmbeddedFileList::iterator fit = files.begin();
- EmbeddedFileList::iterator fit_end = files.end();
- for (; fit != fit_end; ++fit) {
- QString label = toqstr(fit->relFilename(buffer().filePath()));
- if (fit->refCount() > 1)
- label += " (" + QString::number(fit->refCount()) + ")";
- QListWidgetItem * item = new QListWidgetItem(label);
- item->setFlags(item->flags() | Qt::ItemIsSelectable
- | Qt::ItemIsUserCheckable);
- if(fit->embedded())
- item->setCheckState(Qt::Checked);
- else
- item->setCheckState(Qt::Unchecked);
- // index of the currently used ParConstIterator
- embeddedFilesModule->filesLW->addItem(item);
- }
+ vector<string> const & files = buffer().params().extraEmbeddedFiles();
+ vector<string>::const_iterator fit = files.begin();
+ vector<string>::const_iterator fit_end = files.end();
+ for (; fit != fit_end; ++fit)
+ embeddedFilesModule->extraLW->addItem(toqstr(*fit));
+}
+
+
+void GuiDocument::addExtraEmbeddedFile()
+{
+ QString file = browseRelFile(QString(), bufferFilepath(),
+ qt_("Extra embedded file"), FileFilterList(), true);
+
+ if (embeddedFilesModule->extraLW->findItems(file, Qt::MatchExactly).empty())
+ embeddedFilesModule->extraLW->addItem(file);
+}
+
+
+void GuiDocument::removeExtraEmbeddedFile()
+{
+ int index = embeddedFilesModule->extraLW->currentRow();
+ delete embeddedFilesModule->extraLW->takeItem(index);
}
fromqstr(pdfSupportModule->optionsLE->text()));
// Embedded files
- // FIXME
+ vector<string> & files = params.extraEmbeddedFiles();
+ files.clear();
+ for (size_t i = 0; i < embeddedFilesModule->extraLW->count(); ++i) {
+ QListWidgetItem * item = embeddedFilesModule->extraLW->item(i);
+ files.push_back(fromqstr(item->text()));
+ }
}
pdfSupportModule->optionsLE->setText(
toqstr(pdf.quoted_options));
-
- // embedded files
- updateEmbeddedFileList();
+
+ setExtraEmbeddedFileList();
}
void portraitChanged();
void classChanged();
void updateModuleInfo();
- void updateEmbeddedFileList();
+ void setExtraEmbeddedFileList();
+ void addExtraEmbeddedFile();
+ void removeExtraEmbeddedFile();
private:
UiWidget<Ui::TextLayoutUi> *textLayoutModule;
<property name="spacing" >
<number>6</number>
</property>
- <item row="6" column="1" >
- <spacer>
- <property name="orientation" >
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" >
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="5" column="1" >
- <widget class="QPushButton" name="removePB" >
+ <item row="0" column="0" >
+ <widget class="QLabel" name="extraLBL" >
<property name="text" >
- <string>Remove</string>
+ <string>Extra embedded files:</string>
</property>
</widget>
</item>
- <item row="4" column="1" >
+ <item rowspan="3" row="1" column="0" >
+ <widget class="QListWidget" name="extraLW" />
+ </item>
+ <item row="1" column="1" >
<widget class="QPushButton" name="addPB" >
<property name="text" >
<string>Add</string>
</property>
</widget>
</item>
- <item rowspan="3" row="4" column="0" >
- <widget class="QListWidget" name="extraLW" />
- </item>
- <item row="3" column="0" >
- <widget class="QLabel" name="extraLBL" >
+ <item row="2" column="1" >
+ <widget class="QPushButton" name="removePB" >
<property name="text" >
- <string>Extra embedded files:</string>
+ <string>Remove</string>
</property>
</widget>
</item>
- <item row="2" column="0" >
- <widget class="QListWidget" name="filesLW" />
- </item>
- <item row="0" column="0" >
- <widget class="QCheckBox" name="bundleCB" >
- <property name="text" >
- <string>Save this document in bundled format</string>
+ <item row="3" column="1" >
+ <spacer>
+ <property name="orientation" >
+ <enum>Qt::Vertical</enum>
</property>
- </widget>
- </item>
- <item row="1" column="0" >
- <widget class="QLabel" name="filesLBL" >
- <property name="text" >
- <string>Embedded files:</string>
+ <property name="sizeHint" >
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
</property>
- </widget>
+ </spacer>
</item>
</layout>
</widget>