#include "BufferParams.h"
#include "BufferView.h"
#include "Cursor.h"
-#include "CutAndPaste.h"
#include "DispatchResult.h"
-#include "Format.h"
#include "FuncRequest.h"
#include "FuncStatus.h"
#include "Language.h"
#include "OutputParams.h"
#include "ParagraphParameters.h"
#include "Paragraph.h"
-#include "TextClass.h"
#include "support/docstream.h"
-#include "support/FileName.h"
#include "support/gettext.h"
#include "support/lstrings.h"
#include "support/TempFile.h"
}
-// Do not copy the temp file on purpose: If a copy of an inset which is
-// currently being edited is made, then we simply copy the current contents.
-InsetERT::InsetERT(InsetERT const & that) : InsetCollapsible(that)
+InsetERT::InsetERT(InsetERT const & old)
+ : InsetCollapsible(old)
{}
-InsetERT & InsetERT::operator=(InsetERT const & that)
-{
- if (&that == this)
- return *this;
- tempfile_.reset();
- return *this;
-}
-
-
void InsetERT::write(ostream & os) const
{
os << "ERT" << "\n";
void InsetERT::doDispatch(Cursor & cur, FuncRequest & cmd)
{
switch (cmd.action()) {
- case LFUN_INSET_EDIT: {
- cur.push(*this);
- text().selectAll(cur);
- string const format =
- cur.buffer()->params().documentClass().outputFormat();
- string const ext = theFormats().extension(format);
- tempfile_.reset(new TempFile("ert_editXXXXXX." + ext));
- FileName const tempfilename = tempfile_->name();
- string const name = tempfilename.toFilesystemEncoding();
- ofdocstream os(name.c_str());
- os << cur.selectionAsString(false);
- os.close();
- // Since we lock the inset while the external file is edited,
- // we need to move the cursor outside and clear any selection inside
- cur.clearSelection();
- cur.pop();
- cur.leaveInset(*this);
- theFormats().edit(buffer(), tempfilename, format);
- break;
- }
- case LFUN_INSET_END_EDIT: {
- FileName const tempfilename = tempfile_->name();
- docstring const s = tempfilename.fileContents("UTF-8");
- cur.recordUndoInset(this);
- cur.push(*this);
- text().selectAll(cur);
- cap::replaceSelection(cur);
- cur.text()->insertStringAsLines(cur, s, cur.current_font);
- // FIXME it crashes without this
- cur.fixIfBroken();
- tempfile_.reset();
- cur.pop();
- break;
- }
case LFUN_INSET_MODIFY:
if (cmd.getArg(0) == "ert") {
cur.recordUndoInset(this);
FuncStatus & status) const
{
switch (cmd.action()) {
- case LFUN_INSET_EDIT:
- status.setEnabled(tempfile_ == 0);
- return true;
- case LFUN_INSET_END_EDIT:
- status.setEnabled(tempfile_ != 0);
- return true;
case LFUN_INSET_INSERT:
status.setEnabled(false);
return true;
}
-bool InsetERT::editable() const
-{
- if (tempfile_)
- return false;
- return InsetCollapsible::editable();
-}
-
-
-bool InsetERT::descendable(BufferView const & bv) const
-{
- if (tempfile_)
- return false;
- return InsetCollapsible::descendable(bv);
-}
-
docstring const InsetERT::buttonLabel(BufferView const & bv) const
{