#include "insets/InsetListingsParams.h"
#include "support/debug.h"
+#include "support/docstream.h"
#include "support/FileName.h"
#include "support/filetools.h"
#include "support/gettext.h"
#include "support/lassert.h"
#include "support/lstrings.h"
+#include "support/TempFile.h"
#include "frontends/alert.h"
connect(preambleTE, SIGNAL(textChanged()), this, SIGNAL(changed()));
connect(findLE, SIGNAL(textEdited(const QString &)), this, SLOT(checkFindButton()));
connect(findButtonPB, SIGNAL(clicked()), this, SLOT(findText()));
+ connect(editPB, SIGNAL(clicked()), this, SLOT(editExternal()));
connect(findLE, SIGNAL(returnPressed()), this, SLOT(findText()));
checkFindButton();
// https://stackoverflow.com/questions/13027091/how-to-override-tab-width-in-qt
}
+void PreambleModule::editExternal() {
+ if (!current_id_)
+ return;
+
+ if (tempfile_) {
+ preambleTE->setReadOnly(false);
+ FileName const tempfilename = tempfile_->name();
+ docstring const s = tempfilename.fileContents("UTF-8");
+ preambleTE->document()->setPlainText(toqstr(s));
+ tempfile_.reset();
+ editPB->setText(qt_("Edit"));
+ changed();
+ return;
+ }
+
+ string const format =
+ current_id_->params().documentClass().outputFormat();
+ string const ext = theFormats().extension(format);
+ tempfile_.reset(new TempFile("preamble_editXXXXXX" + ext));
+ FileName const tempfilename = tempfile_->name();
+ string const name = tempfilename.toFilesystemEncoding();
+ ofdocstream os(name.c_str());
+ os << qstring_to_ucs4(preambleTE->document()->toPlainText());
+ os.close();
+ preambleTE->setReadOnly(true);
+ theFormats().edit(*current_id_, tempfilename, format);
+ editPB->setText(qt_("End Edit"));
+ changed();
+}
+
/////////////////////////////////////////////////////////////////////
//
// LocalLayout
connect(locallayoutTE, SIGNAL(textChanged()), this, SLOT(textChanged()));
connect(validatePB, SIGNAL(clicked()), this, SLOT(validatePressed()));
connect(convertPB, SIGNAL(clicked()), this, SLOT(convertPressed()));
+ connect(editPB, SIGNAL(clicked()), this, SLOT(editExternal()));
}
}
+void LocalLayout::editExternal() {
+ if (!current_id_)
+ return;
+
+ if (tempfile_) {
+ locallayoutTE->setReadOnly(false);
+ FileName const tempfilename = tempfile_->name();
+ docstring const s = tempfilename.fileContents("UTF-8");
+ locallayoutTE->document()->setPlainText(toqstr(s));
+ tempfile_.reset();
+ editPB->setText(qt_("Edit"));
+ changed();
+ return;
+ }
+
+ string const format =
+ current_id_->params().documentClass().outputFormat();
+ string const ext = theFormats().extension(format);
+ tempfile_.reset(new TempFile("preamble_editXXXXXX" + ext));
+ FileName const tempfilename = tempfile_->name();
+ string const name = tempfilename.toFilesystemEncoding();
+ ofdocstream os(name.c_str());
+ os << qstring_to_ucs4(locallayoutTE->document()->toPlainText());
+ os.close();
+ locallayoutTE->setReadOnly(true);
+ theFormats().edit(*current_id_, tempfilename, format);
+ editPB->setText(qt_("End Edit"));
+ validatePB->setEnabled(false);
+ hideConvert();
+ changed();
+}
+
/////////////////////////////////////////////////////////////////////
//
// DocumentDialog
return
validateListingsParameters().isEmpty() &&
localLayout->isValid() &&
+ !localLayout->editing() &&
+ !preambleModule->editing() &&
(
// if we're asking for skips between paragraphs
!textLayoutModule->skipRB->isChecked() ||
class LyXModule;
class TextClass;
+namespace support {
+ class TempFile;
+}
+
namespace frontend {
class FloatPlacement;
class FontModule;
///
-typedef void const * BufferId;
+typedef Buffer const * BufferId;
template<class UI>
class UiWidget : public QWidget, public UI
PreambleModule(QWidget * parent);
void update(BufferParams const & params, BufferId id);
void apply(BufferParams & params);
+ bool editing() const { return (bool)tempfile_; }
Q_SIGNALS:
/// signal that something's changed in the Widget.
typedef std::map<BufferId, std::pair<int,int> > Coords;
Coords preamble_coords_;
BufferId current_id_;
+ unique_ptr<support::TempFile> tempfile_;
private Q_SLOTS:
///
void checkFindButton();
void findText();
+ void editExternal();
};
void update(BufferParams const & params, BufferId id);
void apply(BufferParams & params);
bool isValid() const { return validated_; }
+ bool editing() const { return (bool)tempfile_; }
Q_SIGNALS:
/// signal that something's changed in the Widget.
void textChanged();
void validatePressed();
void convertPressed();
+ void editExternal();
private:
BufferId current_id_;
bool validated_;
+ unique_ptr<support::TempFile> tempfile_;
};
+<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>LocalLayoutUi</class>
<widget class="QWidget" name="LocalLayoutUi">
<string/>
</property>
<layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0" colspan="2">
- <widget class="QTextEdit" name="locallayoutTE">
+ <item row="3" column="2">
+ <widget class="QLabel" name="convertLB">
+ <property name="contextMenuPolicy">
+ <enum>Qt::NoContextMenu</enum>
+ </property>
<property name="toolTip">
- <string>Document-specific layout information</string>
+ <string>Errors reported in terminal.</string>
</property>
- <property name="statusTip">
+ <property name="text">
<string/>
</property>
- <property name="acceptRichText">
- <bool>false</bool>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
</property>
</widget>
</item>
- <item row="1" column="0">
- <widget class="QPushButton" name="validatePB">
- <property name="toolTip">
- <string/>
- </property>
+ <item row="3" column="0">
+ <widget class="QPushButton" name="convertPB">
<property name="text">
- <string>&Validate</string>
+ <string>Convert</string>
</property>
</widget>
</item>
- <item row="1" column="1">
+ <item row="1" column="2">
<widget class="QLabel" name="validLB">
<property name="contextMenuPolicy">
<enum>Qt::NoContextMenu</enum>
</property>
</widget>
</item>
- <item row="2" column="0">
- <widget class="QPushButton" name="convertPB">
+ <item row="2" column="2">
+ <widget class="QPushButton" name="editPB">
<property name="text">
- <string>Convert</string>
+ <string>Edit</string>
</property>
</widget>
</item>
- <item row="2" column="1">
- <widget class="QLabel" name="convertLB">
- <property name="contextMenuPolicy">
- <enum>Qt::NoContextMenu</enum>
- </property>
+ <item row="2" column="0">
+ <widget class="QPushButton" name="validatePB">
<property name="toolTip">
- <string>Errors reported in terminal.</string>
+ <string/>
</property>
<property name="text">
+ <string>&Validate</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" rowspan="2" colspan="3">
+ <widget class="QTextEdit" name="locallayoutTE">
+ <property name="toolTip">
+ <string>Document-specific layout information</string>
+ </property>
+ <property name="statusTip">
<string/>
</property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
+ <property name="acceptRichText">
+ <bool>false</bool>
</property>
</widget>
</item>