X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetfloat.C;h=e31523429f107f9da5c754b0923f0d5a92981d9b;hb=4a5b7a5952ad2381fcdf4830511293e184c7c5a1;hp=551407e8d70b323051b058fc0aa4b3d59a2ceb2b;hpb=67de3b29bc2cab8624d9b8827716dd7fe8889b1c;p=lyx.git diff --git a/src/insets/insetfloat.C b/src/insets/insetfloat.C index 551407e8d7..e31523429f 100644 --- a/src/insets/insetfloat.C +++ b/src/insets/insetfloat.C @@ -20,11 +20,14 @@ #include "lyxtext.h" #include "insets/insettext.h" #include "support/LOstream.h" +#include "support/lstrings.h" #include "FloatList.h" #include "LaTeXFeatures.h" #include "debug.h" #include "Floating.h" #include "buffer.h" +#include "LyXView.h" +#include "frontends/Dialogs.h" using std::ostream; using std::endl; @@ -107,12 +110,23 @@ InsetFloat::InsetFloat(string const & type) font.decSize(); font.setColor(LColor::collapsable); setLabelFont(font); - setAutoCollapse(false); floatType_ = type; setInsetName(type); } +InsetFloat::InsetFloat(InsetFloat const & in, bool same_id) + : InsetCollapsable(in, same_id), floatType_(in.floatType_), + floatPlacement_(in.floatPlacement_), wide_(in.wide_) +{} + + +InsetFloat::~InsetFloat() +{ + hideDialog(); +} + + void InsetFloat::write(Buffer const * buf, ostream & os) const { os << "Float " // getInsetName() @@ -136,21 +150,23 @@ void InsetFloat::write(Buffer const * buf, ostream & os) const void InsetFloat::read(Buffer const * buf, LyXLex & lex) { - if (lex.IsOK()) { + if (lex.isOK()) { lex.next(); - string token = lex.GetString(); + string token = lex.getString(); if (token == "placement") { lex.next(); - floatPlacement_ = lex.GetString(); + floatPlacement_ = lex.getString(); } else { lyxerr << "InsetFloat::Read: Missing placement!" << endl; + // take countermeasures + lex.pushToken(token); } lex.next(); - token = lex.GetString(); + token = lex.getString(); if (token == "wide") { lex.next(); - string const tmptoken = lex.GetString(); + string const tmptoken = lex.getString(); if (tmptoken == "true") wide(true); else @@ -158,6 +174,8 @@ void InsetFloat::read(Buffer const * buf, LyXLex & lex) } else { lyxerr << "InsetFloat::Read:: Missing wide!" << endl; + // take countermeasures + lex.pushToken(token); } } InsetCollapsable::read(buf, lex); @@ -166,20 +184,18 @@ void InsetFloat::read(Buffer const * buf, LyXLex & lex) void InsetFloat::validate(LaTeXFeatures & features) const { - features.usedFloats.insert(floatType_); + if (contains(placement(), "H")) { + features.require("float"); + } + + features.useFloat(floatType_); InsetCollapsable::validate(features); } Inset * InsetFloat::clone(Buffer const &, bool same_id) const { - InsetFloat * result = new InsetFloat(floatType_); - result->inset.init(&inset, same_id); - - result->collapsed_ = collapsed_; - if (same_id) - result->id_ = id_; - return result; + return new InsetFloat(*const_cast(this), same_id); } @@ -224,48 +240,34 @@ int InsetFloat::latex(Buffer const * buf, } -int InsetFloat::docBook(Buffer const * buf, ostream & os) const +int InsetFloat::docbook(Buffer const * buf, ostream & os) const { os << "<" << floatType_ << ">"; - int const i = inset.docBook(buf, os); + int const i = inset.docbook(buf, os); os << ""; return i; } -bool InsetFloat::insertInsetAllowed(Inset * in) const -{ - return insertInsetAllowed(in->lyxCode()); -} - - -bool InsetFloat::insertInsetAllowed(Inset::Code code) const +bool InsetFloat::insetAllowed(Inset::Code code) const { if (code == Inset::FLOAT_CODE) return false; if (inset.getLockingInset() != const_cast(this)) - return inset.insertInsetAllowed(code); + return inset.insetAllowed(code); if ((code == Inset::FOOT_CODE) || (code == Inset::MARGIN_CODE)) return false; return true; } -void InsetFloat::insetButtonRelease(BufferView * bv, int x, int y, int button) +bool InsetFloat::showInsetDialog(BufferView * bv) const { - if (x >= top_x - && x < button_length - && y >= button_top_y - && y < button_bottom_y - && button == 3) { - // This obviously need to change. - lyxerr << "InsetFloat: Let's edit this floats parameters!" - << endl; - //bv->owner()->getDialogs()->showFloat(this); - } else { - InsetCollapsable::insetButtonRelease(bv, x, y, button); + if (!inset.showInsetDialog(bv)) { + bv->owner()->getDialogs()->showFloat(const_cast(this)); } + return true; } @@ -277,11 +279,8 @@ string const & InsetFloat::type() const void InsetFloat::placement(string const & p) { - // Here we should only allow the placement to be set + // FIX: Here we should only allow the placement to be set // if a valid value. -#ifdef WITH_WARNINGS -#warning FIX! -#endif floatPlacement_ = p; }