A dynamic_cast is necessary when:
- the object to be casted is from an external library because we can't add Qxxx::asXxxx() to Qt e.g.:
* QAbstractListModel to GuiIdListModel,
* QValidator to PathValidator,
* QWidget to TabWorkArea,
* QWidget to GuiWorkArea;
- the object is to be casted from an interface to the implementing class, because the Interface does not know by whom it is implemented:
* ProgressInterface to GuiProgress,
* Application to GuiApplication.
A dynamic_cast can be replaced by:
- already existing as***Inset() functions, e.g.:
* asHullInset(),
* asInsetMath()->asMacro(),
* asInsetText();
- a static_cast when we are sure this can't go wrong, e.g.:
* we are sure that CellData::inset->clone() is an InsetTableCell,
* in cases where we explicitly check it->lyxCode().
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@35855
a592a061-630c-0410-9148-
cb99ea01b6c8
bool success = false;
for (; it != end; ++it) {
if (it->lyxCode() == BRANCH_CODE) {
- InsetBranch & ins = dynamic_cast<InsetBranch &>(*it);
+ InsetBranch & ins = static_cast<InsetBranch &>(*it);
if (ins.branch() == oldname) {
undo().recordUndo(it);
ins.rename(newname);
InsetIterator const end = inset_iterator_end(inset());
for (; it != end; ++it) {
if (it->lyxCode() == BRANCH_CODE) {
- InsetBranch & br = dynamic_cast<InsetBranch &>(*it);
+ InsetBranch & br = static_cast<InsetBranch &>(*it);
docstring const name = br.branch();
if (!from_master && !params().branchlist().find(name))
result.push_back(name);
case LABEL_CODE: {
// check for duplicates
- InsetLabel & lab = dynamic_cast<InsetLabel &>(*it);
+ InsetLabel & lab = static_cast<InsetLabel &>(*it);
docstring const oldname = lab.getParam("name");
lab.updateCommand(oldname, false);
// We need to update the buffer reference cache.
case BIBITEM_CODE: {
// check for duplicates
- InsetBibitem & bib = dynamic_cast<InsetBibitem &>(*it);
+ InsetBibitem & bib = static_cast<InsetBibitem &>(*it);
docstring const oldkey = bib.getParam("key");
bib.updateCommand(oldkey, false);
// We need to update the buffer reference cache.
bool DocIterator::inRegexped() const
{
- InsetMathHull * i = dynamic_cast<InsetMathHull *>(inset().asInsetMath());
+ InsetMathHull * i = inset().asInsetMath()->asHullInset();
return i && i->getType() == hullRegexp;
}
cur.buffer()->errors("Paste");
cur.clearSelection(); // bug 393
cur.finishUndo();
- InsetText * insetText = dynamic_cast<InsetText *>(inset);
- if (insetText) {
- insetText->fixParagraphsFont();
- if (!insetText->allowMultiPar() || cur.lastpit() == 0) {
+ InsetText * inset_text = inset->asInsetText();
+ if (inset_text) {
+ inset_text->fixParagraphsFont();
+ if (!inset_text->allowMultiPar() || cur.lastpit() == 0) {
// reset first par to default
cur.text()->paragraphs().begin()
->setPlainOrDefaultLayout(bparams.documentClass());
rotate(cs.rotate),
align_special(cs.align_special),
p_width(cs.p_width),
- inset(dynamic_cast<InsetTableCell *>(cs.inset->clone()))
+ inset(static_cast<InsetTableCell *>(cs.inset->clone()))
{
}
}
case LFUN_REGEXP_MODE: {
- InsetMathHull * i = dynamic_cast<InsetMathHull *>(cur.inset().asInsetMath());
+ InsetMathHull * i = cur.inset().asInsetMath()->asHullInset();
if (i && i->getType() == hullRegexp) {
cur.message(_("Already in regular expression mode"));
break;
// look if there is no other macro in edit mode above
++i;
for (; i != cur.depth(); ++i) {
- MathMacro const * macro = dynamic_cast<MathMacro const *>(&cur[i].inset());
+ MathMacro const * macro = cur[i].asInsetMath()->asMacro();
if (macro && macro->displayMode() == DISPLAY_NORMAL)
return false;
}