[LyX/2.3.x] Fix bug 4475. Add ability to create child from the include dialog.
Richard Kimberly Heck
rikiheck at lyx.org
Mon Aug 31 15:21:59 UTC 2020
commit 3a7560dcb077d98033a43bc3d523780d605fbb49
Author: Richard Kimberly Heck <rikiheck at lyx.org>
Date: Sat Aug 22 15:15:47 2020 -0400
Fix bug 4475.
Add ability to create child from the include dialog.
(cherry picked from commit a385b7dc2b585ff259f9a9681e5d68168d1dac66)
---
src/frontends/qt4/GuiInclude.cpp | 75 +++++++---
src/frontends/qt4/ui/IncludeUi.ui | 287 ++++++++++++++++++++-----------------
status.23x | 2 +
3 files changed, 215 insertions(+), 149 deletions(-)
diff --git a/src/frontends/qt4/GuiInclude.cpp b/src/frontends/qt4/GuiInclude.cpp
index edbf7a1..d87f78c 100644
--- a/src/frontends/qt4/GuiInclude.cpp
+++ b/src/frontends/qt4/GuiInclude.cpp
@@ -32,6 +32,7 @@
#include "insets/InsetInclude.h"
#include <QCheckBox>
+#include <QFile>
#include <QLineEdit>
#include <QPushButton>
@@ -265,6 +266,61 @@ void GuiInclude::applyView()
else
params_.setCmdName("verbatiminput");
}
+
+ // Do we need to create a LyX file?
+ if (item == 0 || item == 1) {
+ QString fname = filenameED->text();
+ string const mypath = buffer().absFileName();
+ string const bpath = buffer().filePath();
+ QString absfname = makeAbsPath(fname, toqstr(bpath));
+ if (!QFile::exists(absfname)) {
+ dispatch(FuncRequest(LFUN_BUFFER_NEW, fromqstr(absfname)));
+ dispatch(FuncRequest(LFUN_BUFFER_WRITE));
+ dispatch(FuncRequest(LFUN_BUFFER_SWITCH, mypath));
+ }
+ }
+}
+
+
+void GuiInclude::edit()
+{
+ if (!isValid())
+ return;
+ if (bc().policy().buttonStatus(ButtonPolicy::OKAY)) {
+ slotOK();
+ applyView();
+ } else
+ hideView();
+ dispatch(FuncRequest(LFUN_INSET_EDIT));
+}
+
+
+bool GuiInclude::isValid()
+{
+ QString fname = filenameED->text();
+ bool fempty = fname.isEmpty();
+ if (fempty || !validate_listings_params().empty()) {
+ editPB->setEnabled(false);
+ return false;
+ }
+
+ int const item = typeCO->currentIndex();
+ // Are we inputting or including a LyX file?
+ if (item != 0 && item != 1) {
+ okPB->setText("OK");
+ return true;
+ }
+ // Do we have a LyX filename?
+ if (!support::isLyXFileName(fromqstr(fname))) {
+ okPB->setText("OK");
+ return false;
+ }
+ string const bpath = buffer().filePath();
+ QString absfname = makeAbsPath(fname, toqstr(bpath));
+ bool const fexists = QFile::exists(absfname);
+ okPB->setText(fexists ? "OK" : "Create");
+ editPB->setEnabled(fexists);
+ return true;
}
@@ -288,25 +344,6 @@ void GuiInclude::browse()
}
-void GuiInclude::edit()
-{
- if (!isValid())
- return;
- if (bc().policy().buttonStatus(ButtonPolicy::OKAY)) {
- slotOK();
- applyView();
- } else
- hideView();
- dispatch(FuncRequest(LFUN_INSET_EDIT));
-}
-
-
-bool GuiInclude::isValid()
-{
- return !filenameED->text().isEmpty() && validate_listings_params().empty();
-}
-
-
QString GuiInclude::browse(QString const & in_name, Type in_type) const
{
QString const title = qt_("Select document to include");
diff --git a/src/frontends/qt4/ui/IncludeUi.ui b/src/frontends/qt4/ui/IncludeUi.ui
index 0522d3d..bbd2c5b 100644
--- a/src/frontends/qt4/ui/IncludeUi.ui
+++ b/src/frontends/qt4/ui/IncludeUi.ui
@@ -1,58 +1,73 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
<class>IncludeUi</class>
- <widget class="QDialog" name="IncludeUi" >
- <property name="geometry" >
+ <widget class="QDialog" name="IncludeUi">
+ <property name="geometry">
<rect>
<x>0</x>
<y>0</y>
- <width>371</width>
- <height>374</height>
+ <width>440</width>
+ <height>442</height>
</rect>
</property>
- <property name="windowTitle" >
+ <property name="windowTitle">
<string/>
</property>
- <property name="sizeGripEnabled" >
+ <property name="sizeGripEnabled">
<bool>true</bool>
</property>
- <layout class="QGridLayout" >
- <property name="margin" >
+ <layout class="QGridLayout">
+ <property name="leftMargin">
<number>9</number>
</property>
- <property name="spacing" >
+ <property name="topMargin">
+ <number>9</number>
+ </property>
+ <property name="rightMargin">
+ <number>9</number>
+ </property>
+ <property name="bottomMargin">
+ <number>9</number>
+ </property>
+ <property name="spacing">
<number>6</number>
</property>
- <item row="3" column="0" colspan="6" >
- <widget class="QGroupBox" name="listingsGB" >
- <property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>7</hsizetype>
- <vsizetype>7</vsizetype>
+ <item row="3" column="0" colspan="6">
+ <widget class="QGroupBox" name="listingsGB">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="title" >
+ <property name="title">
<string>Listing Parameters</string>
</property>
- <layout class="QGridLayout" >
- <property name="margin" >
+ <layout class="QGridLayout">
+ <property name="leftMargin">
+ <number>9</number>
+ </property>
+ <property name="topMargin">
+ <number>9</number>
+ </property>
+ <property name="rightMargin">
<number>9</number>
</property>
- <property name="spacing" >
+ <property name="bottomMargin">
+ <number>9</number>
+ </property>
+ <property name="spacing">
<number>6</number>
</property>
- <item row="3" column="1" >
- <widget class="QTextEdit" name="listingsED" >
- <property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>7</vsizetype>
+ <item row="3" column="1">
+ <widget class="QTextEdit" name="listingsED">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize" >
+ <property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
@@ -60,19 +75,19 @@
</property>
</widget>
</item>
- <item row="4" column="0" colspan="2" >
- <widget class="QCheckBox" name="bypassCB" >
- <property name="toolTip" >
+ <item row="4" column="0" colspan="2">
+ <widget class="QCheckBox" name="bypassCB">
+ <property name="toolTip">
<string>Check it to enter parameters that are not recognizable by LyX</string>
</property>
- <property name="text" >
+ <property name="text">
<string>&Bypass validation</string>
</property>
</widget>
</item>
- <item row="0" column="1" >
- <widget class="QLineEdit" name="captionLE" >
- <property name="minimumSize" >
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="captionLE">
+ <property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
@@ -80,80 +95,78 @@
</property>
</widget>
</item>
- <item row="0" column="0" >
- <widget class="QLabel" name="captionLabel" >
- <property name="text" >
+ <item row="0" column="0">
+ <widget class="QLabel" name="captionLabel">
+ <property name="text">
<string>C&aption:</string>
</property>
- <property name="buddy" >
+ <property name="buddy">
<cstring>captionLE</cstring>
</property>
</widget>
</item>
- <item row="1" column="1" >
- <widget class="QLineEdit" name="labelLE" />
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="labelLE"/>
</item>
- <item row="1" column="0" >
- <widget class="QLabel" name="labelLabel" >
- <property name="text" >
+ <item row="1" column="0">
+ <widget class="QLabel" name="labelLabel">
+ <property name="text">
<string>La&bel:</string>
</property>
- <property name="buddy" >
+ <property name="buddy">
<cstring>labelLE</cstring>
</property>
</widget>
</item>
- <item row="2" column="0" colspan="2" >
- <widget class="QLabel" name="label_3" >
- <property name="text" >
+ <item row="2" column="0" colspan="2">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
<string>Mo&re parameters</string>
</property>
- <property name="buddy" >
+ <property name="buddy">
<cstring>listingsED</cstring>
</property>
</widget>
</item>
- <item row="3" column="0" >
- <widget class="QTextBrowser" name="listingsTB" >
- <property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>7</vsizetype>
+ <item row="3" column="0">
+ <widget class="QTextBrowser" name="listingsTB">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize" >
+ <property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
- <property name="maximumSize" >
+ <property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
- <property name="cursor" >
- <cursor>0</cursor>
+ <property name="cursor" stdset="0">
+ <cursorShape>ArrowCursor</cursorShape>
</property>
- <property name="focusPolicy" >
+ <property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
- <property name="acceptDrops" >
+ <property name="acceptDrops">
<bool>true</bool>
</property>
- <property name="frameShape" >
+ <property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
- <property name="frameShadow" >
+ <property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
- <property name="lineWidth" >
+ <property name="lineWidth">
<number>0</number>
</property>
- <property name="acceptRichText" >
+ <property name="acceptRichText">
<bool>false</bool>
</property>
</widget>
@@ -161,69 +174,83 @@
</layout>
</widget>
</item>
- <item row="2" column="0" colspan="6" >
- <layout class="QHBoxLayout" >
- <property name="margin" >
+ <item row="2" column="0" colspan="6">
+ <layout class="QHBoxLayout">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="leftMargin">
<number>0</number>
</property>
- <property name="spacing" >
- <number>6</number>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
</property>
<item>
- <widget class="QCheckBox" name="visiblespaceCB" >
- <property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>3</hsizetype>
- <vsizetype>0</vsizetype>
+ <widget class="QCheckBox" name="visiblespaceCB">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Underline spaces in generated output</string>
</property>
- <property name="text" >
+ <property name="text">
<string>&Mark spaces in output</string>
</property>
</widget>
</item>
<item>
- <widget class="QCheckBox" name="previewCB" >
- <property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>3</hsizetype>
- <vsizetype>0</vsizetype>
+ <widget class="QCheckBox" name="previewCB">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Show LaTeX preview</string>
</property>
- <property name="text" >
+ <property name="text">
<string>&Show preview</string>
</property>
</widget>
</item>
</layout>
</item>
- <item row="4" column="0" colspan="6" >
- <layout class="QHBoxLayout" >
- <property name="margin" >
+ <item row="4" column="0" colspan="6">
+ <layout class="QHBoxLayout">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="leftMargin">
<number>0</number>
</property>
- <property name="spacing" >
- <number>6</number>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
</property>
<item>
<spacer>
- <property name="orientation" >
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="sizeType" >
+ <property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
- <property name="sizeHint" >
+ <property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
@@ -232,93 +259,93 @@
</spacer>
</item>
<item>
- <widget class="QPushButton" name="okPB" >
- <property name="text" >
+ <widget class="QPushButton" name="okPB">
+ <property name="text">
<string>&OK</string>
</property>
- <property name="default" >
+ <property name="autoDefault">
<bool>true</bool>
</property>
- <property name="autoDefault" >
+ <property name="default">
<bool>true</bool>
</property>
</widget>
</item>
<item>
- <widget class="QPushButton" name="closePB" >
- <property name="text" >
+ <widget class="QPushButton" name="closePB">
+ <property name="text">
<string>&Close</string>
</property>
- <property name="autoDefault" >
+ <property name="autoDefault">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
- <item row="0" column="0" >
- <widget class="QLabel" name="filenameLA" >
- <property name="toolTip" >
+ <item row="0" column="0">
+ <widget class="QLabel" name="filenameLA">
+ <property name="toolTip">
<string/>
</property>
- <property name="text" >
+ <property name="text">
<string>&File:</string>
</property>
- <property name="buddy" >
+ <property name="buddy">
<cstring>filenameED</cstring>
</property>
</widget>
</item>
- <item row="0" column="1" colspan="4" >
- <widget class="QLineEdit" name="filenameED" >
- <property name="toolTip" >
- <string>File name to include</string>
+ <item row="0" column="1" colspan="4">
+ <widget class="QLineEdit" name="filenameED">
+ <property name="toolTip">
+ <string>File name to include. (You can create a new file by entering the name of one that does not yet exist.)</string>
</property>
</widget>
</item>
- <item row="1" column="0" colspan="2" >
- <widget class="QLabel" name="TextLabel1" >
- <property name="text" >
+ <item row="1" column="0" colspan="2">
+ <widget class="QLabel" name="TextLabel1">
+ <property name="text">
<string>&Include Type:</string>
</property>
- <property name="buddy" >
+ <property name="buddy">
<cstring>typeCO</cstring>
</property>
</widget>
</item>
- <item row="1" column="2" >
- <widget class="QComboBox" name="typeCO" >
+ <item row="1" column="2">
+ <widget class="QComboBox" name="typeCO">
<item>
- <property name="text" >
+ <property name="text">
<string>Include</string>
</property>
</item>
<item>
- <property name="text" >
+ <property name="text">
<string>Input</string>
</property>
</item>
<item>
- <property name="text" >
+ <property name="text">
<string>Verbatim</string>
</property>
</item>
<item>
- <property name="text" >
+ <property name="text">
<string>Program Listing</string>
</property>
</item>
</widget>
</item>
- <item row="1" column="3" >
+ <item row="1" column="3">
<spacer>
- <property name="orientation" >
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="sizeType" >
+ <property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
- <property name="sizeHint" >
+ <property name="sizeHint" stdset="0">
<size>
<width>28</width>
<height>28</height>
@@ -326,22 +353,22 @@
</property>
</spacer>
</item>
- <item row="0" column="5" >
- <widget class="QPushButton" name="browsePB" >
- <property name="toolTip" >
+ <item row="0" column="5">
+ <widget class="QPushButton" name="browsePB">
+ <property name="toolTip">
<string>Select a file</string>
</property>
- <property name="text" >
+ <property name="text">
<string>&Browse...</string>
</property>
</widget>
</item>
- <item row="1" column="5" >
- <widget class="QPushButton" name="editPB" >
- <property name="toolTip" >
+ <item row="1" column="5">
+ <widget class="QPushButton" name="editPB">
+ <property name="toolTip">
<string>Edit the file</string>
</property>
- <property name="text" >
+ <property name="text">
<string>&Edit</string>
</property>
</widget>
@@ -363,7 +390,7 @@
<tabstop>closePB</tabstop>
</tabstops>
<includes>
- <include location="local" >qt_i18n.h</include>
+ <include location="local">qt_i18n.h</include>
</includes>
<resources/>
<connections/>
diff --git a/status.23x b/status.23x
index aef6ca6..b5e54b4 100644
--- a/status.23x
+++ b/status.23x
@@ -30,6 +30,8 @@ What's new
- Focus keyword field in Thesaurus dialog.
+- Allow creation of a child file from the include dialog (bug 4475).
+
* MISCELLANEOUS
More information about the lyx-cvs
mailing list