Add support for global float alignment

It is now possible in the float settings (doc dialog) to specify a global
(inner) alignment for floats, and in the float settings, this can be
overridden (just as with float placement)

Fixes: #8665

File format change.
This commit is contained in:
Juergen Spitzmueller 2018-05-10 20:15:11 +02:00
parent 2389580c27
commit aa9543fa2b
12 changed files with 431 additions and 140 deletions

View File

@ -7,6 +7,14 @@ changes happened in particular if possible. A good example would be
-----------------------
2018-05-10 Jürgen Spitzmüller <spitz@lyx.org>
* format incremented to 552: support for float alignment
- add buffer param \float_alignment [class|left|center|right]
- add buffer param \float_placement class
- add float param alignment [class|document|left|center|right]
- add float param placement class (=> new param)
- add float param placement document(=> like formerly empty param)
2018-05-06 Jürgen Spitzmüller <spitz@lyx.org>
* format incremented to 551: add font info param \nospellcheck that prevents
text from being spellchecked.

View File

@ -213,6 +213,74 @@ def revert_nospellcheck(document):
del document.body[i]
def revert_floatpclass(document):
" Remove float placement params 'document' and 'class' "
i = 0
i = find_token(document.header, "\\float_placement class", 0)
if i != -1:
del document.header[i]
i = 0
while True:
i = find_token(document.body, '\\begin_inset Float', i)
if i == -1:
break
j = find_end_of_inset(document.body, i)
k = find_token(document.body, 'placement class', i, i + 2)
if k == -1:
k = find_token(document.body, 'placement document', i, i + 2)
if k != -1:
del document.body[k]
i = j
continue
del document.body[k]
def revert_floatalignment(document):
" Remove float alignment params "
i = 0
i = find_token(document.header, "\\float_alignment", 0)
galignment = ""
if i != -1:
galignment = get_value(document.header, "\\float_alignment", i)
del document.header[i]
i = 0
while True:
i = find_token(document.body, '\\begin_inset Float', i)
if i == -1:
break
j = find_end_of_inset(document.body, i)
if j == -1:
document.warning("Malformed LyX document: Can't find end of inset at line " + str(i))
i += 1
k = find_token(document.body, 'alignment', i, i + 4)
if k == -1:
i = j
continue
alignment = get_value(document.body, "alignment", k)
if alignment == "document":
alignment = galignment
del document.body[k]
l = find_token(document.body, "\\begin_layout Plain Layout", i, j)
if l == -1:
document.warning("Can't find float layout!")
i = j
continue
alcmd = []
if alignment == "left":
alcmd = put_cmd_in_ert("\\raggedright{}")
elif alignment == "center":
alcmd = put_cmd_in_ert("\\centering{}")
elif alignment == "right":
alcmd = put_cmd_in_ert("\\raggedleft{}")
if len(alcmd) > 0:
document.body[l+1:l+1] = alcmd
i = j
##
# Conversion hub
#
@ -225,11 +293,13 @@ convert = [
[548, []],
[549, []],
[550, [convert_fontenc]],
[551, []]
[551, []],
[552, []]
]
revert = [
[549, [revert_nospellcheck]],
[551, [revert_floatpclass, revert_floatalignment]],
[550, [revert_nospellcheck]],
[549, [revert_fontenc]],
[548, []],# dummy format change
[547, [revert_lscape]],

View File

@ -888,6 +888,7 @@ int Buffer::readHeader(Lexer & lex)
params().options.erase();
params().master.erase();
params().float_placement.erase();
params().float_alignment.erase();
params().paperwidth.erase();
params().paperheight.erase();
params().leftmargin.erase();

View File

@ -1071,6 +1071,8 @@ string BufferParams::readToken(Lexer & lex, string const & token,
spacing().set(spacetranslator().find(nspacing), tmp_val);
} else if (token == "\\float_placement") {
lex >> float_placement;
} else if (token == "\\float_alignment") {
lex >> float_alignment;
} else if (prefixIs(token, "\\pdf_") || token == "\\use_hyperref") {
string toktmp = pdfoptions().readToken(lex, token);
@ -1261,9 +1263,10 @@ void BufferParams::writeFile(ostream & os, Buffer const * buf) const
os << "\\bibtex_command " << bibtex_command << '\n';
os << "\\index_command " << index_command << '\n';
if (!float_placement.empty()) {
if (!float_placement.empty())
os << "\\float_placement " << float_placement << '\n';
}
if (!float_alignment.empty())
os << "\\float_alignment " << float_alignment << '\n';
os << "\\paperfontsize " << fontsize << '\n';
spacing().writeFile(os);

View File

@ -352,6 +352,8 @@ public:
///
std::string float_placement;
///
std::string float_alignment;
///
unsigned int columns;
///
bool justification;

View File

@ -5,6 +5,7 @@
*
* \author Edwin Leuven
* \author John Levon
* \author Jürgen Spitzmüller
*
* Full author contact details are available in file CREDITS.
*/
@ -33,12 +34,13 @@ namespace lyx {
namespace frontend {
FloatPlacement::FloatPlacement(bool show_options, QWidget * parent)
: InsetParamsWidget(parent), standardfloat_ (true),
: InsetParamsWidget(parent), standardfloat_(true),
allows_wide_(true), allows_sideways_(true), float_list_(0)
{
setupUi(this);
connect(floatTypeCO, SIGNAL(activated(int)), this, SLOT(changedSlot()));
connect(placementCO, SIGNAL(activated(int)), this, SLOT(changedSlot()));
connect(topCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
connect(bottomCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
connect(pageCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
@ -47,11 +49,19 @@ FloatPlacement::FloatPlacement(bool show_options, QWidget * parent)
connect(ignoreCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
connect(spanCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
connect(sidewaysCB, SIGNAL(clicked()), this, SLOT(changedSlot()));
connect(alignClassDefaultRB, SIGNAL(clicked()), this, SLOT(changedSlot()));
connect(alignDocDefaultRB, SIGNAL(clicked()), this, SLOT(changedSlot()));
connect(alignLeftRB, SIGNAL(clicked()), this, SLOT(changedSlot()));
connect(alignCenterRB, SIGNAL(clicked()), this, SLOT(changedSlot()));
connect(alignRightRB, SIGNAL(clicked()), this, SLOT(changedSlot()));
floatTypeTitle->setVisible(show_options);
floatTypeCO->setVisible(show_options);
alignDocDefaultRB->setVisible(show_options);
spanCB->setVisible(show_options);
sidewaysCB->setVisible(show_options);
optionsGB->setVisible(show_options);
initFloatPlacementCO(show_options);
}
@ -59,7 +69,10 @@ docstring FloatPlacement::dialogToParams() const
{
InsetFloatParams params;
params.type = fromqstr(floatTypeCO->itemData(floatTypeCO->currentIndex()).toString());
params.placement = get(params.wide, params.sideways);
params.wide = spanCB->isChecked();
params.sideways = sidewaysCB->isChecked();
params.alignment = getAlignment();
params.placement = getPlacement();
return from_ascii(InsetFloat::params2string(params));
}
@ -82,9 +95,10 @@ bool FloatPlacement::possiblePlacement(char const & p) const
}
void FloatPlacement::set(string const & placement)
void FloatPlacement::setPlacement(string const & placement)
{
bool def_placement = false;
bool doc_placement = false;
bool top = false;
bool bottom = false;
bool page = false;
@ -92,9 +106,11 @@ void FloatPlacement::set(string const & placement)
bool force = false;
bool here_definitely = false;
if (placement.empty()) {
if (placement.empty() || placement == "class")
def_placement = true;
} else if (contains(placement, 'H') && possiblePlacement('H')) {
else if (placement == "document")
doc_placement = true;
else if (contains(placement, 'H') && possiblePlacement('H')) {
here_definitely = true;
} else {
if (contains(placement, '!') && possiblePlacement('!')) {
@ -114,7 +130,12 @@ void FloatPlacement::set(string const & placement)
}
}
defaultsCB->setChecked(def_placement);
if (def_placement)
placementCO->setCurrentIndex(placementCO->findData(toqstr("class")));
else if (doc_placement)
placementCO->setCurrentIndex(placementCO->findData(toqstr("document")));
else
placementCO->setCurrentIndex(placementCO->findData(toqstr("custom")));
topCB->setChecked(top);
bottomCB->setChecked(bottom);
pageCB->setChecked(page);
@ -125,6 +146,21 @@ void FloatPlacement::set(string const & placement)
}
void FloatPlacement::setAlignment(string const & alignment)
{
if (alignment == "document")
alignDocDefaultRB->setChecked(true);
else if (alignment == "left")
alignLeftRB->setChecked(true);
else if (alignment == "center")
alignCenterRB->setChecked(true);
else if (alignment == "right")
alignRightRB->setChecked(true);
else
alignClassDefaultRB->setChecked(true);
}
void FloatPlacement::initFloatTypeCO(FloatList const & floats)
{
if (float_list_ == &floats)
@ -141,6 +177,15 @@ void FloatPlacement::initFloatTypeCO(FloatList const & floats)
}
void FloatPlacement::initFloatPlacementCO(bool const local)
{
placementCO->addItem(qt_("Class Defaults"), "class");
if (local)
placementCO->addItem(qt_("Document Defaults"), "document");
placementCO->addItem(qt_("Custom"), "custom");
}
void FloatPlacement::paramsToDialog(Inset const * inset)
{
InsetFloat const * fl = static_cast<InsetFloat const *>(inset);
@ -157,7 +202,8 @@ void FloatPlacement::paramsToDialog(Inset const * inset)
allows_sideways_ = floats.allowsSideways(params.type);
allows_wide_ = floats.allowsWide(params.type);
set(params.placement);
setPlacement(params.placement);
setAlignment(params.alignment);
standardfloat_ = (params.type == "figure"
|| params.type == "table");
@ -175,21 +221,16 @@ void FloatPlacement::paramsToDialog(Inset const * inset)
}
string const FloatPlacement::get(bool & wide, bool & sideways) const
{
wide = spanCB->isChecked();
sideways = sidewaysCB->isChecked();
return get();
}
string const FloatPlacement::get() const
string const FloatPlacement::getPlacement() const
{
string placement;
if (defaultsCB->isChecked())
return placement;
QString const data =
placementCO->itemData(placementCO->currentIndex()).toString();
if (data == "class")
return "class";
if (data == "document")
return "document";
if (heredefinitelyCB->isChecked()) {
placement += 'H';
@ -214,10 +255,24 @@ string const FloatPlacement::get() const
}
void FloatPlacement::on_defaultsCB_stateChanged(int state)
string const FloatPlacement::getAlignment() const
{
if (alignDocDefaultRB->isChecked())
return "document";
if (alignLeftRB->isChecked())
return "left";
if (alignCenterRB->isChecked())
return "center";
if (alignRightRB->isChecked())
return "right";
return "class";
}
void FloatPlacement::on_placementCO_currentIndexChanged(QString const & text)
{
checkAllowed();
if (state == Qt::Checked)
if (text != "custom")
return;
if (topCB->isChecked() || bottomCB->isChecked()
|| pageCB->isChecked() || herepossiblyCB->isChecked()
@ -235,7 +290,8 @@ void FloatPlacement::changedSlot()
void FloatPlacement::checkAllowed() const
{
bool const defaults = defaultsCB->isChecked();
bool const defaults =
placementCO->itemData(placementCO->currentIndex()).toString() != "custom";
bool const ignore = topCB->isChecked() || bottomCB->isChecked()
|| pageCB->isChecked() || herepossiblyCB->isChecked();
bool const heredefinitely = heredefinitelyCB->isChecked();
@ -273,7 +329,7 @@ void FloatPlacement::checkAllowed() const
bottomCB->setChecked(false);
spanCB->setEnabled(allows_wide_ && (!sideways || standardfloat_));
sidewaysCB->setEnabled(allows_sideways_);
defaultsCB->setEnabled(!(sideways && span));
placementCO->setEnabled(!(sideways && span));
} else {
topCB->setEnabled(!defaults && !heredefinitely);
bottomCB->setEnabled(!defaults && !heredefinitely);
@ -289,8 +345,8 @@ bool FloatPlacement::checkWidgets(bool readonly) const
{
if (readonly) {
floatTypeCO->setEnabled(false);
defaultsCB->setEnabled(false);
options->setEnabled(false);
placementCO->setEnabled(false);
aligmentGB->setEnabled(false);
spanCB->setEnabled(false);
sidewaysCB->setEnabled(false);
} else

View File

@ -45,22 +45,26 @@ public:
///
void useSideways();
///
void set(std::string const & placement);
void setPlacement(std::string const & placement);
///
std::string const get() const;
void setAlignment(std::string const & placement);
///
std::string const getPlacement() const;
///
std::string const getAlignment() const;
private Q_SLOTS:
void on_defaultsCB_stateChanged(int state);
void on_placementCO_currentIndexChanged(QString const &);
void changedSlot();
private:
///
void checkAllowed() const;
///
std::string const get(bool & wide, bool & sideways) const;
///
void initFloatTypeCO(FloatList const & floats);
///
void initFloatPlacementCO(bool const);
///
bool possiblePlacement(char const & p) const;
/// one of figure or table?

View File

@ -1556,7 +1556,7 @@ GuiDocument::GuiDocument(GuiView & lv)
docPS->addPanel(indicesModule, N_("Indexes"));
docPS->addPanel(pdfSupportModule, N_("PDF Properties"));
docPS->addPanel(mathsModule, N_("Math Options"));
docPS->addPanel(floatModule, N_("Float Placement"));
docPS->addPanel(floatModule, N_("Float Settings"));
docPS->addPanel(listingsModule, N_("Listings[[inset]]"));
docPS->addPanel(bulletsModule, N_("Bullets"));
docPS->addPanel(branchesModule, N_("Branches"));
@ -3216,8 +3216,9 @@ void GuiDocument::applyView()
bp_.maintain_unincluded_children =
masterChildModule->maintainAuxCB->isChecked();
// Float Placement
bp_.float_placement = floatModule->get();
// Float Settings
bp_.float_placement = floatModule->getPlacement();
bp_.float_alignment = floatModule->getAlignment();
// Listings
// text should have passed validation
@ -3747,7 +3748,8 @@ void GuiDocument::paramsToDialog()
bp_.maintain_unincluded_children);
// Float Settings
floatModule->set(bp_.float_placement);
floatModule->setPlacement(bp_.float_placement);
floatModule->setAlignment(bp_.float_alignment);
// ListingsSettings
// break listings_params to multiple lines

View File

@ -1,121 +1,258 @@
<ui version="4.0" >
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>FloatPlacementUi</class>
<widget class="QWidget" name="FloatPlacementUi" >
<property name="geometry" >
<widget class="QWidget" name="FloatPlacementUi">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>207</width>
<height>382</height>
<width>530</width>
<height>413</height>
</rect>
</property>
<property name="windowTitle" >
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout" >
<item row="0" column="0" >
<widget class="QLabel" name="floatTypeTitle" >
<property name="text" >
<string>Float Type:</string>
</property>
</widget>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="floatTypeTitle">
<property name="text">
<string>Float T&amp;ype:</string>
</property>
<property name="buddy">
<cstring>floatTypeCO</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="floatTypeCO">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="1" colspan="2" >
<widget class="QComboBox" name="floatTypeCO" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
<item row="2" column="3" rowspan="3">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>154</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0" colspan="4" >
<widget class="QCheckBox" name="defaultsCB" >
<property name="text" >
<string>Use &amp;default placement</string>
<item row="4" column="0">
<spacer>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="0" colspan="4" >
<widget class="QGroupBox" name="options" >
<property name="title" >
<string>Advanced Placement Options</string>
<item row="1" column="3">
<widget class="QGroupBox" name="aligmentGB">
<property name="title">
<string>Alignment of Contents</string>
</property>
<layout class="QGridLayout" >
<property name="margin" >
<property name="flat">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="_2">
<property name="leftMargin">
<number>9</number>
</property>
<property name="spacing" >
<property name="topMargin">
<number>9</number>
</property>
<property name="rightMargin">
<number>9</number>
</property>
<property name="bottomMargin">
<number>9</number>
</property>
<property name="spacing">
<number>6</number>
</property>
<item row="0" column="0" >
<widget class="QCheckBox" name="topCB" >
<property name="text" >
<string>&amp;Top of page</string>
<item row="1" column="0">
<widget class="QRadioButton" name="alignDocDefaultRB">
<property name="toolTip">
<string>Use the document's default alignment for floats, as specified in Document Settings.</string>
</property>
<property name="text">
<string>D&amp;ocument Defaults</string>
</property>
</widget>
</item>
<item row="5" column="0" >
<widget class="QCheckBox" name="ignoreCB" >
<property name="text" >
<string>&amp;Ignore LaTeX rules</string>
<item row="2" column="0">
<widget class="QRadioButton" name="alignLeftRB">
<property name="toolTip">
<string>Left-align float contents</string>
</property>
<property name="text">
<string>&amp;Left</string>
</property>
</widget>
</item>
<item row="4" column="0" >
<widget class="QCheckBox" name="heredefinitelyCB" >
<property name="text" >
<string>Here de&amp;finitely</string>
<item row="3" column="0">
<widget class="QRadioButton" name="alignCenterRB">
<property name="toolTip">
<string>Center float contents</string>
</property>
<property name="text">
<string>&amp;Center</string>
</property>
</widget>
</item>
<item row="3" column="0" >
<widget class="QCheckBox" name="herepossiblyCB" >
<property name="text" >
<string>&amp;Here if possible</string>
<item row="4" column="0">
<widget class="QRadioButton" name="alignRightRB">
<property name="toolTip">
<string>Right-align float contents</string>
</property>
<property name="text">
<string>&amp;Right</string>
</property>
</widget>
</item>
<item row="2" column="0" >
<widget class="QCheckBox" name="pageCB" >
<property name="text" >
<string>&amp;Page of floats</string>
<item row="0" column="0">
<widget class="QRadioButton" name="alignClassDefaultRB">
<property name="toolTip">
<string>Use the class' default alignment for floats, whatever it is.</string>
</property>
</widget>
</item>
<item row="1" column="0" >
<widget class="QCheckBox" name="bottomCB" >
<property name="text" >
<string>&amp;Bottom of page</string>
<property name="text">
<string>Class &amp;Defaults</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="3" column="0" colspan="2" >
<widget class="QCheckBox" name="spanCB" >
<property name="text" >
<string>&amp;Span columns</string>
<item row="3" column="0" colspan="2">
<widget class="QGroupBox" name="optionsGB">
<property name="title">
<string>Further Options</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QCheckBox" name="spanCB">
<property name="text">
<string>&amp;Span columns</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="sidewaysCB">
<property name="text">
<string>Rotate side&amp;ways</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="4" column="0" colspan="2" >
<widget class="QCheckBox" name="sidewaysCB" >
<property name="text" >
<string>&amp;Rotate sideways</string>
<item row="1" column="0" rowspan="2" colspan="2">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Position on Page</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="placementLA">
<property name="text">
<string>Place&amp;ment Settings:</string>
</property>
<property name="buddy">
<cstring>placementCO</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="placementCO"/>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="topCB">
<property name="text">
<string>&amp;Top of page</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="bottomCB">
<property name="text">
<string>&amp;Bottom of page</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="pageCB">
<property name="text">
<string>&amp;Page of floats</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="herepossiblyCB">
<property name="text">
<string>&amp;Here if possible</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="heredefinitelyCB">
<property name="text">
<string>Here de&amp;finitely</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QCheckBox" name="ignoreCB">
<property name="text">
<string>&amp;Ignore LaTeX rules</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="5" column="2" colspan="2" >
<spacer>
<property name="orientation" >
<enum>Qt::Vertical</enum>
<item row="0" column="1" colspan="3">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0" >
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<width>303</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="4">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
@ -124,7 +261,6 @@
</layout>
</widget>
<tabstops>
<tabstop>defaultsCB</tabstop>
<tabstop>topCB</tabstop>
<tabstop>bottomCB</tabstop>
<tabstop>pageCB</tabstop>
@ -133,25 +269,8 @@
<tabstop>ignoreCB</tabstop>
</tabstops>
<includes>
<include location="local" >qt_i18n.h</include>
<include location="local">qt_i18n.h</include>
</includes>
<resources/>
<connections>
<connection>
<sender>defaultsCB</sender>
<signal>toggled(bool)</signal>
<receiver>options</receiver>
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel" >
<x>51</x>
<y>20</y>
</hint>
<hint type="destinationlabel" >
<x>201</x>
<y>47</y>
</hint>
</hints>
</connection>
</connections>
<connections/>
</ui>

View File

@ -166,6 +166,7 @@ void InsetFloat::doDispatch(Cursor & cur, FuncRequest & cmd)
params_.wide = params.wide;
params_.sideways = params.sideways;
}
params_.alignment = params.alignment;
setNewLabel();
if (params_.type != params.type)
setCaptionType(params.type);
@ -235,6 +236,8 @@ void InsetFloatParams::write(ostream & os) const
if (!placement.empty())
os << "placement " << placement << "\n";
if (!alignment.empty())
os << "alignment " << alignment << "\n";
if (wide)
os << "wide true\n";
@ -254,6 +257,8 @@ void InsetFloatParams::read(Lexer & lex)
lex >> type;
if (lex.checkFor("placement"))
lex >> placement;
if (lex.checkFor("alignment"))
lex >> alignment;
lex >> "wide" >> wide;
lex >> "sideways" >> sideways;
}
@ -366,13 +371,14 @@ void InsetFloat::latex(otexstream & os, OutputParams const & runparams_in) const
string tmpplacement;
string const buf_placement = buffer().params().float_placement;
string const def_placement = floats.defaultPlacement(params_.type);
if (!params_.placement.empty()
&& params_.placement != def_placement) {
tmpplacement = params_.placement;
} else if (params_.placement.empty()
&& !buf_placement.empty()
&& buf_placement != def_placement) {
if (params_.placement == "document"
&& !buf_placement.empty()
&& buf_placement != def_placement) {
tmpplacement = buf_placement;
} else if (!params_.placement.empty()
&& params_.placement != "document"
&& params_.placement != def_placement) {
tmpplacement = params_.placement;
}
// Check if placement is allowed by this float
@ -386,6 +392,17 @@ void InsetFloat::latex(otexstream & os, OutputParams const & runparams_in) const
placement += *lit;
}
string alignment;
string const buf_alignment = buffer().params().float_alignment;
if (params_.alignment == "document"
&& !buf_alignment.empty()) {
alignment = buf_alignment;
} else if (!params_.alignment.empty()
&& params_.alignment != "class"
&& params_.alignment != "document") {
alignment = params_.alignment;
}
// Force \begin{<floatname>} to appear in a new line.
os << breakln << "\\begin{" << from_ascii(tmptype) << '}';
if (runparams.lastid != -1)
@ -397,6 +414,12 @@ void InsetFloat::latex(otexstream & os, OutputParams const & runparams_in) const
&& (!params_.sideways || (params_.sideways && from_ascii(placement) != "p")))
os << '[' << from_ascii(placement) << ']';
os << '\n';
if (alignment == "left")
os << "\\raggedright" << breakln;
else if (alignment == "center")
os << "\\centering" << breakln;
else if (alignment == "right")
os << "\\raggedleft" << breakln;
InsetText::latex(os, runparams);

View File

@ -25,7 +25,8 @@ class InsetFloatParams
{
public:
///
InsetFloatParams() : type("senseless"), wide(false), sideways(false), subfloat(false) {}
InsetFloatParams() : type("senseless"), placement("document"), alignment("document"),
wide(false), sideways(false), subfloat(false) {}
///
void write(std::ostream & os) const;
///
@ -34,6 +35,8 @@ public:
std::string type;
///
std::string placement;
///
std::string alignment;
/// span columns
bool wide;
///

View File

@ -32,8 +32,8 @@ extern char const * const lyx_version_info;
// Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own.
#define LYX_FORMAT_LYX 551 // spitz: \nospellcheck font param
#define LYX_FORMAT_TEX2LYX 551
#define LYX_FORMAT_LYX 552 // spitz: float alignment
#define LYX_FORMAT_TEX2LYX 552
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
#ifndef _MSC_VER