Improve read-only mode of InsetParams derived dialogs

* Disable "New Inset" button
* Do not disable line edits, but use setReadOnly instead (this allows copying contents)

Fixes: #9408

Note that some dialogs still need some care.
This commit is contained in:
Juergen Spitzmueller 2015-03-30 14:44:11 +02:00
parent 7b72010408
commit 99f7b916e6
17 changed files with 41 additions and 19 deletions

View File

@ -53,8 +53,10 @@ docstring GuiBibitem::dialogToParams() const
} }
bool GuiBibitem::checkWidgets() const bool GuiBibitem::checkWidgets(bool readonly) const
{ {
keyED->setReadOnly(readonly);
labelED->setReadOnly(readonly);
if (!InsetParamsWidget::checkWidgets()) if (!InsetParamsWidget::checkWidgets())
return false; return false;
return !keyED->text().isEmpty(); return !keyED->text().isEmpty();

View File

@ -35,7 +35,7 @@ private:
FuncCode creationCode() const { return LFUN_INSET_INSERT; } FuncCode creationCode() const { return LFUN_INSET_INSERT; }
void paramsToDialog(Inset const *); void paramsToDialog(Inset const *);
docstring dialogToParams() const; docstring dialogToParams() const;
bool checkWidgets() const; bool checkWidgets(bool readonly = false) const;
//@} //@}
}; };

View File

@ -299,8 +299,13 @@ docstring GuiHSpace::dialogToParams() const
} }
bool GuiHSpace::checkWidgets() const bool GuiHSpace::checkWidgets(bool readonly) const
{ {
spacingCO->setEnabled(!readonly);
unitCO->setEnabled(!readonly);
fillPatternCO->setEnabled(!readonly);
keepCB->setEnabled(!readonly);
valueLE->setReadOnly(readonly);
if (!InsetParamsWidget::checkWidgets()) if (!InsetParamsWidget::checkWidgets())
return false; return false;
return spacingCO->itemData(spacingCO->currentIndex()).toString() != "custom" return spacingCO->itemData(spacingCO->currentIndex()).toString() != "custom"

View File

@ -38,7 +38,7 @@ private:
FuncCode creationCode() const { return LFUN_INSET_INSERT; } FuncCode creationCode() const { return LFUN_INSET_INSERT; }
void paramsToDialog(Inset const *); void paramsToDialog(Inset const *);
docstring dialogToParams() const; docstring dialogToParams() const;
bool checkWidgets() const; bool checkWidgets(bool readonly = false) const;
//@} //@}
/// ///
bool const math_mode_; bool const math_mode_;

View File

@ -102,8 +102,11 @@ docstring GuiHyperlink::dialogToParams() const
} }
bool GuiHyperlink::checkWidgets() const bool GuiHyperlink::checkWidgets(bool readonly) const
{ {
targetED->setReadOnly(readonly);
nameED->setReadOnly(readonly);
typeGB->setEnabled(!readonly);
if (!InsetParamsWidget::checkWidgets()) if (!InsetParamsWidget::checkWidgets())
return false; return false;
return !targetED->text().isEmpty() || !nameED->text().isEmpty(); return !targetED->text().isEmpty() || !nameED->text().isEmpty();

View File

@ -34,7 +34,7 @@ private:
FuncCode creationCode() const { return LFUN_INSET_INSERT; } FuncCode creationCode() const { return LFUN_INSET_INSERT; }
void paramsToDialog(Inset const *); void paramsToDialog(Inset const *);
docstring dialogToParams() const; docstring dialogToParams() const;
bool checkWidgets() const; bool checkWidgets(bool readonly = false) const;
bool initialiseParams(std::string const & data); bool initialiseParams(std::string const & data);
//@} //@}
}; };

View File

@ -68,8 +68,9 @@ bool GuiLabel::initialiseParams(std::string const & data)
} }
bool GuiLabel::checkWidgets() const bool GuiLabel::checkWidgets(bool readonly) const
{ {
keywordED->setReadOnly(readonly);
if (!InsetParamsWidget::checkWidgets()) if (!InsetParamsWidget::checkWidgets())
return false; return false;
return !keywordED->text().isEmpty(); return !keywordED->text().isEmpty();

View File

@ -34,7 +34,7 @@ private:
FuncCode creationCode() const { return LFUN_INSET_INSERT; } FuncCode creationCode() const { return LFUN_INSET_INSERT; }
void paramsToDialog(Inset const *); void paramsToDialog(Inset const *);
docstring dialogToParams() const; docstring dialogToParams() const;
bool checkWidgets() const; bool checkWidgets(bool readonly = false) const;
bool initialiseParams(std::string const &); bool initialiseParams(std::string const &);
//@} //@}
}; };

View File

@ -100,8 +100,14 @@ void GuiLine::paramsToDialog(Inset const * inset)
} }
bool GuiLine::checkWidgets() const bool GuiLine::checkWidgets(bool readonly) const
{ {
WidthLE->setReadOnly(readonly);
HeightLE->setReadOnly(readonly);
OffsetLE->setReadOnly(readonly);
OffsetUnitCO->setEnabled(!readonly);
HeightUnitCO->setEnabled(!readonly);
WidthUnitCO->setEnabled(!readonly);
if (!InsetParamsWidget::checkWidgets()) if (!InsetParamsWidget::checkWidgets())
return false; return false;
// FIXME: this should be handled in unsignedGlueLengthValidator! // FIXME: this should be handled in unsignedGlueLengthValidator!

View File

@ -33,7 +33,7 @@ private:
FuncCode creationCode() const { return LFUN_INSET_INSERT; } FuncCode creationCode() const { return LFUN_INSET_INSERT; }
void paramsToDialog(Inset const *); void paramsToDialog(Inset const *);
docstring dialogToParams() const; docstring dialogToParams() const;
bool checkWidgets() const; bool checkWidgets(bool readonly = false) const;
//@} //@}
}; };

View File

@ -70,8 +70,10 @@ bool GuiNomenclature::initialiseParams(std::string const & data)
} }
bool GuiNomenclature::checkWidgets() const bool GuiNomenclature::checkWidgets(bool readonly) const
{ {
symbolED->setReadOnly(readonly);
descriptionTE->setReadOnly(readonly);
if (!InsetParamsWidget::checkWidgets()) if (!InsetParamsWidget::checkWidgets())
return false; return false;
QString const description = descriptionTE->toPlainText(); QString const description = descriptionTE->toPlainText();

View File

@ -35,7 +35,7 @@ private:
FuncCode creationCode() const { return LFUN_INSET_INSERT; } FuncCode creationCode() const { return LFUN_INSET_INSERT; }
void paramsToDialog(Inset const *); void paramsToDialog(Inset const *);
docstring dialogToParams() const; docstring dialogToParams() const;
bool checkWidgets() const; bool checkWidgets(bool readonly = false) const;
bool initialiseParams(std::string const &); bool initialiseParams(std::string const &);
//@} //@}
}; };

View File

@ -101,8 +101,11 @@ docstring GuiPrintNomencl::dialogToParams() const
} }
bool GuiPrintNomencl::checkWidgets() const bool GuiPrintNomencl::checkWidgets(bool readonly) const
{ {
valueLE->setReadOnly(readonly);
setWidthCO->setEnabled(!readonly);
unitLC->setEnabled(!readonly);
if (!InsetParamsWidget::checkWidgets()) if (!InsetParamsWidget::checkWidgets())
return false; return false;
return setWidthCO->itemData( return setWidthCO->itemData(

View File

@ -40,7 +40,7 @@ private:
void paramsToDialog(Inset const *); void paramsToDialog(Inset const *);
void paramsToDialog(InsetCommandParams const &); void paramsToDialog(InsetCommandParams const &);
docstring dialogToParams() const; docstring dialogToParams() const;
bool checkWidgets() const; bool checkWidgets(bool readonly = false) const;
//@} //@}
}; };

View File

@ -166,7 +166,8 @@ void InsetParamsDialog::on_synchronizedCB_stateChanged(int)
docstring InsetParamsDialog::checkWidgets(bool immediate) docstring InsetParamsDialog::checkWidgets(bool immediate)
{ {
bool const widget_ok = d->widget_->checkWidgets(); bool const read_only = buffer().isReadonly();
bool const widget_ok = d->widget_->checkWidgets(read_only);
Inset const * ins = inset(d->widget_->insetCode()); Inset const * ins = inset(d->widget_->insetCode());
docstring const argument = d->widget_->dialogToParams(); docstring const argument = d->widget_->dialogToParams();
bool valid_argument = !argument.empty(); bool valid_argument = !argument.empty();
@ -175,14 +176,13 @@ docstring InsetParamsDialog::checkWidgets(bool immediate)
FuncCode const code = immediate FuncCode const code = immediate
? d->widget_->creationCode() : LFUN_INSET_MODIFY; ? d->widget_->creationCode() : LFUN_INSET_MODIFY;
bool const lfun_ok = lyx::getStatus(FuncRequest(code, argument)).enabled(); bool const lfun_ok = lyx::getStatus(FuncRequest(code, argument)).enabled();
bool const read_only = buffer().isReadonly();
okPB->setEnabled(!immediate && widget_ok && !read_only && valid_argument); okPB->setEnabled(!immediate && widget_ok && !read_only && valid_argument);
bool const can_be_restored = !immediate && !read_only bool const can_be_restored = !immediate && !read_only
&& ins && (ins != d->inset_ || d->changed_); && ins && (ins != d->inset_ || d->changed_);
restorePB->setEnabled(can_be_restored); restorePB->setEnabled(can_be_restored);
applyPB->setEnabled(!immediate && lfun_ok && widget_ok && !read_only && valid_argument); applyPB->setEnabled(!immediate && lfun_ok && widget_ok && !read_only && valid_argument);
d->widget_->setEnabled(!read_only); newPB->setEnabled(widget_ok && !read_only && valid_argument);
synchronizedCB->setEnabled(!immediate); synchronizedCB->setEnabled(!immediate);
return argument; return argument;
} }

View File

@ -54,7 +54,7 @@ void InsetParamsWidget::addCheckedWidget(QLineEdit * input, QWidget * label)
} }
bool InsetParamsWidget::checkWidgets() const bool InsetParamsWidget::checkWidgets(bool readonly) const
{ {
bool valid = true; bool valid = true;
Q_FOREACH(CheckedWidget const & le, checked_widgets_) Q_FOREACH(CheckedWidget const & le, checked_widgets_)

View File

@ -70,7 +70,7 @@ public:
{ return false; } { return false; }
/// \return true if all CheckedWidgets are in a valid state. /// \return true if all CheckedWidgets are in a valid state.
virtual bool checkWidgets() const; virtual bool checkWidgets(bool readonly = false) const;
protected: protected:
/// Add a widget to the list of all widgets whose validity should /// Add a widget to the list of all widgets whose validity should