}
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.
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(
}
-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;
// 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);
}
}
update_contents();
}
+
+bool QDocument::isValid()
+{
+ return dialog_->validate_listings_params().empty();
+}
+
+
} // namespace frontend
} // namespace lyx
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();
void saveDocDefault();
/// reset to default params
void useClassDefaults();
+protected:
+ /// return false if validate_listings_params returns error
+ virtual bool isValid();
};
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);
}
}
-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);
}
}
bool QInclude::isValid()
{
- return !dialog_->filenameED->text().isEmpty();
+ return !dialog_->filenameED->text().isEmpty() &&
+ dialog_->validate_listings_params().empty();
}
} // namespace frontend
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:
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]));
}
-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);
}
}
}
+bool QListings::isValid()
+{
+ return dialog_->validate_listings_params().empty();
+}
+
+
} // namespace frontend
} // namespace lyx
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
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
cell(cur.idx())->dispatch(cur, cmd);
break;
}
+ theSelection().haveSelection(bvcur.selection());
}