mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
Fix Bug 4053: Update other controls allows invalid listings parameters to be passed in listings-related dialogs.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19224 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
09e05ccf85
commit
3ac3578e2d
@ -1586,6 +1586,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
|
||||
}
|
||||
|
||||
needsUpdate |= (cur.pos() != cur.lastpos()) && cur.selection();
|
||||
theSelection().haveSelection(bv->cursor().selection());
|
||||
|
||||
// FIXME: The cursor flag is reset two lines below
|
||||
// so we need to check here if some of the LFUN did touch that.
|
||||
|
@ -225,9 +225,9 @@ QDocumentDialog::QDocumentDialog(QDocument * form)
|
||||
connect(textLayoutModule->bypassCB, SIGNAL(clicked()),
|
||||
this, SLOT(change_adaptor()));
|
||||
connect(textLayoutModule->bypassCB, SIGNAL(clicked()),
|
||||
this, SLOT(validate_listings_params()));
|
||||
this, SLOT(set_listings_msg()));
|
||||
connect(textLayoutModule->listingsED, SIGNAL(textChanged()),
|
||||
this, SLOT(validate_listings_params()));
|
||||
this, SLOT(set_listings_msg()));
|
||||
textLayoutModule->listingsTB->setPlainText(
|
||||
qt_("Input listings parameters on the right. Enter ? for a list of parameters."));
|
||||
textLayoutModule->lspacingLE->setValidator(new QDoubleValidator(
|
||||
@ -623,13 +623,29 @@ void QDocumentDialog::change_adaptor()
|
||||
}
|
||||
|
||||
|
||||
void QDocumentDialog::validate_listings_params()
|
||||
docstring QDocumentDialog::validate_listings_params()
|
||||
{
|
||||
// use a cache here to avoid repeated validation
|
||||
// of the same parameters
|
||||
static string param_cache = string();
|
||||
static docstring msg_cache = docstring();
|
||||
|
||||
if (textLayoutModule->bypassCB->isChecked())
|
||||
return docstring();
|
||||
|
||||
string params = fromqstr(textLayoutModule->listingsED->toPlainText());
|
||||
if (params != param_cache) {
|
||||
param_cache = params;
|
||||
msg_cache = InsetListingsParams(params).validate();
|
||||
}
|
||||
return msg_cache;
|
||||
}
|
||||
|
||||
|
||||
void QDocumentDialog::set_listings_msg()
|
||||
{
|
||||
static bool isOK = true;
|
||||
InsetListingsParams par(fromqstr(textLayoutModule->listingsED->toPlainText()));
|
||||
docstring msg;
|
||||
if (!textLayoutModule->bypassCB->isChecked())
|
||||
msg = par.validate();
|
||||
docstring msg = validate_listings_params();
|
||||
if (msg.empty()) {
|
||||
if (isOK)
|
||||
return;
|
||||
@ -637,14 +653,10 @@ void QDocumentDialog::validate_listings_params()
|
||||
// listingsTB->setTextColor("black");
|
||||
textLayoutModule->listingsTB->setPlainText(
|
||||
qt_("Input listings parameters on the right. Enter ? for a list of parameters."));
|
||||
okPB->setEnabled(true);
|
||||
applyPB->setEnabled(true);
|
||||
} else {
|
||||
isOK = false;
|
||||
// listingsTB->setTextColor("red");
|
||||
textLayoutModule->listingsTB->setPlainText(toqstr(msg));
|
||||
okPB->setEnabled(false);
|
||||
applyPB->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1449,6 +1461,13 @@ void QDocument::useClassDefaults()
|
||||
update_contents();
|
||||
}
|
||||
|
||||
|
||||
bool QDocument::isValid()
|
||||
{
|
||||
return dialog_->validate_listings_params().empty();
|
||||
}
|
||||
|
||||
|
||||
} // namespace frontend
|
||||
} // namespace lyx
|
||||
|
||||
|
@ -68,11 +68,13 @@ public:
|
||||
void updatePagestyle(std::string const &, std::string const &);
|
||||
|
||||
void showPreamble();
|
||||
/// validate listings parameters and return an error message, if any
|
||||
docstring validate_listings_params();
|
||||
|
||||
public Q_SLOTS:
|
||||
void updateNumbering();
|
||||
void change_adaptor();
|
||||
void validate_listings_params();
|
||||
void set_listings_msg();
|
||||
void saveDefaultClicked();
|
||||
void useDefaultsClicked();
|
||||
|
||||
@ -141,6 +143,9 @@ private:
|
||||
void saveDocDefault();
|
||||
/// reset to default params
|
||||
void useClassDefaults();
|
||||
protected:
|
||||
/// return false if validate_listings_params returns error
|
||||
virtual bool isValid();
|
||||
};
|
||||
|
||||
|
||||
|
@ -64,9 +64,9 @@ QIncludeDialog::QIncludeDialog(QInclude * form)
|
||||
connect(captionLE, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
|
||||
connect(labelLE, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
|
||||
connect(listingsED, SIGNAL(textChanged()), this, SLOT(change_adaptor()));
|
||||
connect(listingsED, SIGNAL(textChanged()), this, SLOT(validate_listings_params()));
|
||||
connect(listingsED, SIGNAL(textChanged()), this, SLOT(set_listings_msg()));
|
||||
connect(bypassCB, SIGNAL(clicked()), this, SLOT(change_adaptor()));
|
||||
connect(bypassCB, SIGNAL(clicked()), this, SLOT(validate_listings_params()));
|
||||
connect(bypassCB, SIGNAL(clicked()), this, SLOT(set_listings_msg()));
|
||||
|
||||
setFocusProxy(filenameED);
|
||||
}
|
||||
@ -84,24 +84,38 @@ void QIncludeDialog::change_adaptor()
|
||||
}
|
||||
|
||||
|
||||
void QIncludeDialog::validate_listings_params()
|
||||
docstring QIncludeDialog::validate_listings_params()
|
||||
{
|
||||
// use a cache here to avoid repeated validation
|
||||
// of the same parameters
|
||||
static string param_cache = string();
|
||||
static docstring msg_cache = docstring();
|
||||
|
||||
if (typeCO->currentIndex() != 3 || bypassCB->isChecked())
|
||||
return docstring();
|
||||
|
||||
string params = fromqstr(listingsED->toPlainText());
|
||||
if (params != param_cache) {
|
||||
param_cache = params;
|
||||
msg_cache = InsetListingsParams(params).validate();
|
||||
}
|
||||
return msg_cache;
|
||||
}
|
||||
|
||||
|
||||
void QIncludeDialog::set_listings_msg()
|
||||
{
|
||||
static bool isOK = true;
|
||||
InsetListingsParams par(fromqstr(listingsED->toPlainText()));
|
||||
docstring msg;
|
||||
if (!bypassCB->isChecked())
|
||||
msg = par.validate();
|
||||
docstring msg = validate_listings_params();
|
||||
if (msg.empty()) {
|
||||
if (isOK)
|
||||
return;
|
||||
isOK = true;
|
||||
listingsTB->setPlainText(
|
||||
qt_("Input listing parameters on the right. Enter ? for a list of parameters."));
|
||||
okPB->setEnabled(true);
|
||||
} else {
|
||||
isOK = false;
|
||||
listingsTB->setPlainText(toqstr(msg));
|
||||
okPB->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
@ -334,7 +348,8 @@ void QInclude::load()
|
||||
|
||||
bool QInclude::isValid()
|
||||
{
|
||||
return !dialog_->filenameED->text().isEmpty();
|
||||
return !dialog_->filenameED->text().isEmpty() &&
|
||||
dialog_->validate_listings_params().empty();
|
||||
}
|
||||
|
||||
} // namespace frontend
|
||||
|
@ -31,12 +31,18 @@ public:
|
||||
void updateLists();
|
||||
|
||||
virtual void show();
|
||||
/// validate listings parameters and return an error message, if any
|
||||
docstring validate_listings_params();
|
||||
protected Q_SLOTS:
|
||||
virtual void change_adaptor();
|
||||
void validate_listings_params();
|
||||
virtual void loadClicked();
|
||||
virtual void browseClicked();
|
||||
virtual void typeChanged(int v);
|
||||
/// AFAIK, QValidator only works for QLineEdit so
|
||||
/// I have to validate listingsED (QTextEdit) manually.
|
||||
/// This function displays a hint or error message returned by
|
||||
/// validate_listings_params
|
||||
void set_listings_msg();
|
||||
protected:
|
||||
virtual void closeEvent(QCloseEvent * e);
|
||||
private:
|
||||
|
@ -190,9 +190,9 @@ QListingsDialog::QListingsDialog(QListings * form)
|
||||
connect(extendedcharsCB, SIGNAL(clicked()), this, SLOT(change_adaptor()));
|
||||
|
||||
connect(listingsED, SIGNAL(textChanged()), this, SLOT(change_adaptor()));
|
||||
connect(listingsED, SIGNAL(textChanged()), this, SLOT(validate_listings_params()));
|
||||
connect(listingsED, SIGNAL(textChanged()), this, SLOT(set_listings_msg()));
|
||||
connect(bypassCB, SIGNAL(clicked()), this, SLOT(change_adaptor()));
|
||||
connect(bypassCB, SIGNAL(clicked()), this, SLOT(validate_listings_params()));
|
||||
connect(bypassCB, SIGNAL(clicked()), this, SLOT(set_listings_msg()));
|
||||
|
||||
for (int n = 0; languages[n][0]; ++n)
|
||||
languageCO->addItem(qt_(languages_gui[n]));
|
||||
@ -319,26 +319,38 @@ string QListingsDialog::construct_params()
|
||||
}
|
||||
|
||||
|
||||
void QListingsDialog::validate_listings_params()
|
||||
docstring QListingsDialog::validate_listings_params()
|
||||
{
|
||||
// use a cache here to avoid repeated validation
|
||||
// of the same parameters
|
||||
static string param_cache = string();
|
||||
static docstring msg_cache = docstring();
|
||||
|
||||
if (bypassCB->isChecked())
|
||||
return docstring();
|
||||
|
||||
string params = construct_params();
|
||||
if (params != param_cache) {
|
||||
param_cache = params;
|
||||
msg_cache = InsetListingsParams(params).validate();
|
||||
}
|
||||
return msg_cache;
|
||||
}
|
||||
|
||||
|
||||
void QListingsDialog::set_listings_msg()
|
||||
{
|
||||
static bool isOK = true;
|
||||
InsetListingsParams par(construct_params());
|
||||
docstring msg;
|
||||
if (!bypassCB->isChecked())
|
||||
msg = par.validate();
|
||||
docstring msg = validate_listings_params();
|
||||
if (msg.empty()) {
|
||||
if (isOK)
|
||||
return;
|
||||
isOK = true;
|
||||
listingsTB->setPlainText(
|
||||
qt_("Input listing parameters on the right. Enter ? for a list of parameters."));
|
||||
okPB->setEnabled(true);
|
||||
applyPB->setEnabled(true);
|
||||
} else {
|
||||
isOK = false;
|
||||
listingsTB->setPlainText(toqstr(msg));
|
||||
okPB->setEnabled(false);
|
||||
applyPB->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
@ -601,6 +613,12 @@ void QListings::update_contents()
|
||||
}
|
||||
|
||||
|
||||
bool QListings::isValid()
|
||||
{
|
||||
return dialog_->validate_listings_params().empty();
|
||||
}
|
||||
|
||||
|
||||
} // namespace frontend
|
||||
} // namespace lyx
|
||||
|
||||
|
@ -29,11 +29,15 @@ public:
|
||||
QListingsDialog(QListings * form);
|
||||
/// get values from all the widgets and form a string
|
||||
std::string construct_params();
|
||||
/// validate listings parameters and return an error message, if any
|
||||
docstring validate_listings_params();
|
||||
protected Q_SLOTS:
|
||||
virtual void change_adaptor();
|
||||
/// AFAIK, QValidator only works for QLineEdit so
|
||||
/// I have to validate listingsED (QTextEdit) manually.
|
||||
void validate_listings_params();
|
||||
/// This function displays a hint or error message returned by
|
||||
/// validate_listings_params
|
||||
void set_listings_msg();
|
||||
/// turn off inline when float is clicked
|
||||
void on_floatCB_stateChanged(int state);
|
||||
/// turn off float when inline is clicked
|
||||
@ -63,6 +67,9 @@ private:
|
||||
virtual void update_contents();
|
||||
/// build the dialog
|
||||
virtual void build_dialog();
|
||||
protected:
|
||||
/// return false if validate_listings_params returns error
|
||||
virtual bool isValid();
|
||||
};
|
||||
|
||||
} // namespace frontend
|
||||
|
@ -3490,6 +3490,7 @@ void InsetTabular::doDispatch(Cursor & cur, FuncRequest & cmd)
|
||||
cell(cur.idx())->dispatch(cur, cmd);
|
||||
break;
|
||||
}
|
||||
theSelection().haveSelection(bvcur.selection());
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user