-----------------------
+2015-05-xx Uwe Stöhr <uwestoehr@web.de>
+ * Format incremented to 489: support to set line thickness, box separation
+ and shadow size in the box dialog
+ New box parameters:
+ - thickness
+ - separation
+ - shadowsize
+
2015-04-21 Jürgen Spitzmüller <spitz@lyx.org>
* Format incremented to 488: Rewrite the Glosse insets (Glosse and Tri-Glosse).
These insets now do not any longer use PassThru. Instead, they use an optional
("1_6", list(range(277,346)), minor_versions("1.6" , 10)),
("2_0", list(range(346,414)), minor_versions("2.0" , 8)),
("2_1", list(range(414,475)), minor_versions("2.1" , 0)),
- ("2_2", list(range(475,489)), minor_versions("2.2" , 0))
+ ("2_2", list(range(475,490)), minor_versions("2.2" , 0))
]
####################################################################
i = endPlain + 1
+def convert_BoxFeatures(document):
+ " adds new box features "
+
+ i = 0
+ while True:
+ i = find_token(document.body, "height_special", i)
+ if i == -1:
+ return
+ document.body.insert(i + 1, 'thickness "0.4pt"\nseparation "3pt"\nshadowsize "4pt"\n')
+ i = i + 1
+
+
+def revert_BoxFeatures(document):
+ " deletes new box features "
+
+ i = 0
+ defaultSep = "3pt"
+ defaultThick = "0.4pt"
+ defaultShadow = "4pt"
+ while True:
+ i = find_token(document.body, "height_special", i)
+ if i == -1:
+ return
+ # read out the values
+ beg = document.body[i+1].find('"');
+ end = document.body[i+1].rfind('"');
+ thickness = document.body[i+1][beg+1:end];
+ beg = document.body[i+2].find('"');
+ end = document.body[i+2].rfind('"');
+ separation = document.body[i+2][beg+1:end];
+ beg = document.body[i+3].find('"');
+ end = document.body[i+3].rfind('"');
+ shadowsize = document.body[i+3][beg+1:end];
+ # delete the specification
+ del document.body[i+1:i+4]
+ # output ERT
+ # first output the closing braces
+ if shadowsize != defaultShadow or separation != defaultSep or thickness != defaultThick:
+ document.body[i + 10 : i + 10] = put_cmd_in_ert("}")
+ # now output the lengths
+ if shadowsize != defaultShadow or separation != defaultSep or thickness != defaultThick:
+ document.body[i - 10 : i - 10] = put_cmd_in_ert("{")
+ if thickness != defaultThick:
+ document.body[i - 5 : i - 4] = ["{\\backslash fboxrule " + thickness]
+ if separation != defaultSep and thickness == defaultThick:
+ document.body[i - 5 : i - 4] = ["{\\backslash fboxsep " + separation]
+ if separation != defaultSep and thickness != defaultThick:
+ document.body[i - 5 : i - 4] = ["{\\backslash fboxrule " + thickness + "\\backslash fboxsep " + separation]
+ if shadowsize != defaultShadow and separation == defaultSep and thickness == defaultThick:
+ document.body[i - 5 : i - 4] = ["{\\backslash shadowsize " + shadowsize]
+ if shadowsize != defaultShadow and separation != defaultSep and thickness == defaultThick:
+ document.body[i - 5 : i - 4] = ["{\\backslash fboxsep " + separation + "\\backslash shadowsize " + shadowsize]
+ if shadowsize != defaultShadow and separation == defaultSep and thickness != defaultThick:
+ document.body[i - 5 : i - 4] = ["{\\backslash fboxrule " + thickness + "\\backslash shadowsize " + shadowsize]
+ if shadowsize != defaultShadow and separation != defaultSep and thickness != defaultThick:
+ document.body[i - 5 : i - 4] = ["{\\backslash fboxrule " + thickness + "\\backslash fboxsep " + separation + "\\backslash shadowsize " + shadowsize]
+ i = i + 11
+
+
##
# Conversion hub
#
[485, []],
[486, []],
[487, []],
- [488, [convert_newgloss]]
+ [488, [convert_newgloss]],
+ [489, [convert_BoxFeatures]]
]
revert = [
+ [488, [revert_BoxFeatures]],
[487, [revert_newgloss, revert_glossgroup]],
[486, [revert_forest]],
[485, [revert_ex_itemargs]],
* \author Jürgen Vigna (Minipage stuff)
* \author Martin Vermeer
* \author Jürgen Spitzmüller
+ * \author Uwe Stöhr
*
* Full author contact details are available in file CREDITS.
*/
this, SIGNAL(changed()));
connect(halignCO, SIGNAL(activated(int)), this, SIGNAL(changed()));
connect(ialignCO, SIGNAL(activated(int)), this, SIGNAL(changed()));
+ connect(thicknessED, SIGNAL(textChanged(QString)), this, SIGNAL(changed()));
+ connect(thicknessUnitsLC, SIGNAL(selectionChanged(lyx::Length::UNIT)),
+ this, SIGNAL(changed()));
+ connect(separationED, SIGNAL(textChanged(QString)), this, SIGNAL(changed()));
+ connect(separationUnitsLC, SIGNAL(selectionChanged(lyx::Length::UNIT)),
+ this, SIGNAL(changed()));
+ connect(shadowsizeED, SIGNAL(textChanged(QString)), this, SIGNAL(changed()));
+ connect(shadowsizeUnitsLC, SIGNAL(selectionChanged(lyx::Length::UNIT)),
+ this, SIGNAL(changed()));
heightED->setValidator(unsignedLengthValidator(heightED));
widthED->setValidator(unsignedLengthValidator(widthED));
+ thicknessED->setValidator(unsignedLengthValidator(thicknessED));
+ separationED->setValidator(unsignedLengthValidator(separationED));
+ shadowsizeED->setValidator(unsignedLengthValidator(shadowsizeED));
// initialize the length validator
addCheckedWidget(widthED, widthCB);
addCheckedWidget(heightED, heightCB);
+ addCheckedWidget(thicknessED, thicknessLA);
+ addCheckedWidget(separationED, separationLA);
+ addCheckedWidget(shadowsizeED, shadowsizeLA);
initDialog();
}
heightCB->setChecked(false);
setSpecial(ibox);
}
- if (type != "Boxed") {
+ if (type != "Boxed")
if (type != "Frameless")
widthCB->setChecked(itype != "none");
pagebreakCB->setChecked(false);
- }
changed();
}
widthUnitsLC->setCurrentItem(Length::PCW);
heightED->setText("1");
heightUnitsLC->setCurrentItem("totalheight");
+ // LaTeX's default for \fboxrule is 0.4 pt
+ thicknessED->setText("0.4");
+ thicknessUnitsLC->setCurrentItem(Length::PT);
+ // LaTeX's default for \fboxsep is 3 pt
+ separationED->setText("3");
+ separationUnitsLC->setCurrentItem(Length::PT);
+ // LaTeX's default for \shadowsize is 4 pt
+ shadowsizeED->setText("4");
+ shadowsizeUnitsLC->setCurrentItem(Length::PT);
}
ialignCO->setEnabled(ibox);
setSpecial(ibox);
- // halign is only allowed without inner box and if a width is used and if
- // pagebreak is not used
- halignCO->setEnabled(!pagebreakCB->isChecked() && widthCB->isChecked()
- && ((!ibox && type == "Boxed") || params.use_makebox));
+ // halign is only allowed if a width is used
+ halignCO->setEnabled(widthCB->isChecked());
+ // add the entry "Stretch" if the box is \makebox or \framebox and if not already there
+ if ((inner_type == "makebox" || (type == "Boxed" && inner_type == "none"))
+ && halignCO->count() < 4)
+ halignCO->addItem(toqstr("Stretch"));
+ else if (inner_type != "makebox" && (type != "Boxed" && inner_type != "none"))
+ halignCO->removeItem(3);
// pagebreak is only allowed for Boxed without inner box
pagebreakCB->setEnabled(!ibox && type == "Boxed");
heightCB->setCheckState(Qt::Checked);
heightCB->setEnabled(ibox);
+
+ // enable line thickness only for the rectangular frame types and drop shadow
+ thicknessED->setEnabled(type == "Boxed" || type == "Doublebox" || type == "Shadowbox");
+ thicknessUnitsLC->setEnabled(type == "Boxed" || type == "Doublebox" || type == "Shadowbox");
+ lengthToWidgets(thicknessED, thicknessUnitsLC,
+ (params.thickness).asString(), default_unit);
+ // enable line separation for the allowed frame types
+ separationED->setEnabled(type == "Boxed" || type == "ovalbox" || type == "Ovalbox"
+ || type == "Doublebox" || type == "Shadowbox");
+ separationUnitsLC->setEnabled(type == "Boxed" || type == "ovalbox" || type == "Ovalbox"
+ || type == "Doublebox" || type == "Shadowbox");
+ lengthToWidgets(separationED, separationUnitsLC,
+ (params.separation).asString(), default_unit);
+ // enable shadow size for drop shadow
+ shadowsizeED->setEnabled(type == "Shadowbox");
+ shadowsizeUnitsLC->setEnabled(type == "Shadowbox");
+ lengthToWidgets(shadowsizeED, shadowsizeUnitsLC,
+ (params.shadowsize).asString(), default_unit);
}
Length(widgetsToLength(heightED, heightUnitsLC));
}
}
+
+ // handle the line thickness, line separation and shadow size
+ if (thicknessED->isEnabled())
+ params.thickness = Length(widgetsToLength(thicknessED, thicknessUnitsLC));
+ else
+ params.thickness = Length();
+ if (separationED->isEnabled())
+ params.separation = Length(widgetsToLength(separationED, separationUnitsLC));
+ else
+ params.separation = Length();
+ if (separationED->isEnabled())
+ params.shadowsize = Length(widgetsToLength(shadowsizeED, shadowsizeUnitsLC));
+ else
+ params.shadowsize = Length();
+
return from_ascii(InsetBox::params2string(params));
}
heightED->setEnabled(false);
heightUnitsLC->setEnabled(false);
heightCB->setEnabled(false);
+ thicknessED->setEnabled(false);
+ thicknessUnitsLC->setEnabled(false);
+ separationED->setEnabled(false);
+ separationUnitsLC->setEnabled(false);
+ shadowsizeED->setEnabled(false);
+ shadowsizeUnitsLC->setEnabled(false);
} else {
QString const outer =
typeCO->itemData(typeCO->currentIndex()).toString();
QString const itype =
innerBoxCO->itemData(innerBoxCO->currentIndex()).toString();
bool const ibox = (itype != "none" && itype != "makebox");
- // pagebreak is only allowed for Boxed without inner box
- pagebreakCB->setEnabled(!ibox && outer == "Boxed");
- innerBoxCO->setEnabled(!pagebreakCB->isChecked());
valignCO->setEnabled(ibox);
ialignCO->setEnabled(ibox);
- // halign is only allowed without inner box and if a width is used and if
- // pagebreak is not used
- halignCO->setEnabled(!pagebreakCB->isChecked() && widthCB->isChecked()
- && ((!ibox && outer == "Boxed") || itype == "makebox"));
+ if (heightCB->isChecked() && !ibox)
+ heightCB->setChecked(false);
+ heightCB->setEnabled(ibox);
// the width can only be selected for makebox or framebox
widthCB->setEnabled(itype == "makebox"
- || (outer == "Boxed"
- && !ibox && !pagebreakCB->isChecked()));
- // except for frameless and boxed, the width cannot be specified if
+ || (outer == "Boxed" && itype == "none")
+ && !pagebreakCB->isChecked());
+ // except for Frameless and Boxed, the width cannot be specified if
// there is no inner box
bool const width_enabled =
ibox || outer == "Frameless" || outer == "Boxed";
- // enable if width_enabled, except if checkbox is active but unset
- widthED->setEnabled(width_enabled || (widthCB->isEnabled() && widthCB->isChecked()));
- widthUnitsLC->setEnabled(width_enabled || (widthCB->isEnabled() && widthCB->isChecked()));
+ // enable if width_enabled
+ widthED->setEnabled(width_enabled);
+ widthUnitsLC->setEnabled(width_enabled);
if (!widthCB->isChecked() && widthCB->isEnabled()) {
widthED->setEnabled(false);
widthUnitsLC->setEnabled(false);
}
+ // halign is only allowed if a width is used
+ halignCO->setEnabled(widthCB->isChecked());
+ // add the entry "Stretch" if the box is \makebox or \framebox and if not already there
+ if ((itype == "makebox" || (outer == "Boxed" && itype == "none"))
+ && halignCO->count() < 4)
+ halignCO->addItem(toqstr("Stretch"));
+ else if (itype != "makebox" && (outer != "Boxed" && itype != "none"))
+ halignCO->removeItem(3);
+ // pagebreak is only allowed for Boxed without inner box
+ pagebreakCB->setEnabled(!ibox && outer == "Boxed");
+
heightED->setEnabled(itype != "none" && heightCB->isChecked());
heightUnitsLC->setEnabled(itype != "none" && heightCB->isChecked());
heightCB->setEnabled(ibox);
+
+ // enable line thickness for the rectangular frame types and drop shadow
+ thicknessED->setEnabled(outer == "Boxed" || outer == "Doublebox" || outer == "Shadowbox");
+ thicknessUnitsLC->setEnabled(outer == "Boxed" || outer == "Doublebox" || outer == "Shadowbox");
+ // set default values if empty
+ if (thicknessED->text().isEmpty() && thicknessED->isEnabled()) {
+ thicknessED->setText("0.4");
+ thicknessUnitsLC->setCurrentItem(Length::PT);
+ }
+ // enable line separation for the allowed frame types
+ separationED->setEnabled(outer == "Boxed" || outer == "ovalbox" || outer == "Ovalbox"
+ || outer == "Doublebox" || outer == "Shadowbox");
+ separationUnitsLC->setEnabled(outer == "Boxed" || outer == "ovalbox" || outer == "Ovalbox"
+ || outer == "Doublebox" || outer == "Shadowbox");
+ // set default values if empty
+ if (separationED->text().isEmpty() && separationED->isEnabled()) {
+ separationED->setText("3");
+ separationUnitsLC->setCurrentItem(Length::PT);
+ }
+ // enable shadow size for drop shadow
+ shadowsizeED->setEnabled(outer == "Shadowbox");
+ shadowsizeUnitsLC->setEnabled(outer == "Shadowbox");
+ // set default values if empty
+ if (shadowsizeED->text().isEmpty() && shadowsizeED->isEnabled()) {
+ shadowsizeED->setText("4");
+ shadowsizeUnitsLC->setCurrentItem(Length::PT);
+ }
}
return InsetParamsWidget::checkWidgets();
<rect>
<x>0</x>
<y>0</y>
- <width>261</width>
- <height>245</height>
+ <width>262</width>
+ <height>411</height>
</rect>
</property>
<property name="windowTitle">
<property name="sizeGripEnabled" stdset="0">
<bool>true</bool>
</property>
- <layout class="QGridLayout">
- <property name="margin">
- <number>9</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
- <item row="4" column="0" colspan="2">
- <widget class="QCheckBox" name="pagebreakCB">
- <property name="toolTip">
- <string>Check this if the box should break across pages</string>
+ <layout class="QGridLayout" name="gridLayout_4">
+ <item row="0" column="0">
+ <widget class="QGroupBox" name="TypesizeGB">
+ <property name="title">
+ <string>Type and size</string>
</property>
- <property name="text">
- <string>Allow &page breaks</string>
+ <property name="flat">
+ <bool>true</bool>
</property>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="0" column="0">
+ <widget class="QLabel" name="innerBoxLA">
+ <property name="toolTip">
+ <string/>
+ </property>
+ <property name="text">
+ <string>Inner Bo&x:</string>
+ </property>
+ <property name="buddy">
+ <cstring>innerBoxCO</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QCheckBox" name="widthCB">
+ <property name="toolTip">
+ <string/>
+ </property>
+ <property name="text">
+ <string>&Width:</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <property name="tristate">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="widthED">
+ <property name="toolTip">
+ <string>Width value</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="lyx::frontend::LengthCombo" name="widthUnitsLC"/>
+ </item>
+ <item row="2" column="0">
+ <widget class="QCheckBox" name="heightCB">
+ <property name="toolTip">
+ <string/>
+ </property>
+ <property name="text">
+ <string>&Height:</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <property name="tristate">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="heightED">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip">
+ <string>Height value</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="lyx::frontend::LengthCombo" name="heightUnitsLC">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0" colspan="2">
+ <widget class="QCheckBox" name="pagebreakCB">
+ <property name="toolTip">
+ <string>Check this if the box should break across pages</string>
+ </property>
+ <property name="text">
+ <string>Allow &page breaks</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" colspan="2">
+ <widget class="QComboBox" name="innerBoxCO">
+ <property name="toolTip">
+ <string>Inner box -- needed for fixed width & line breaks</string>
+ </property>
+ <item>
+ <property name="text">
+ <string>None</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Parbox</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Minipage</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ </layout>
</widget>
</item>
- <item row="5" column="0" colspan="3">
- <widget class="QGroupBox" name="groupBox_2">
+ <item row="1" column="0">
+ <widget class="QGroupBox" name="AlignmentGB">
<property name="title">
<string>Alignment</string>
</property>
<property name="flat">
<bool>true</bool>
</property>
- <layout class="QGridLayout">
- <property name="margin">
- <number>9</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
+ <layout class="QGridLayout" name="gridLayout_2">
<item row="1" column="2">
<widget class="QComboBox" name="halignCO">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<string>Right</string>
</property>
</item>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="ialignLA">
+ <property name="toolTip">
+ <string>Vertical alignment of the content inside the box</string>
+ </property>
+ <property name="text">
+ <string>Vertical</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QLabel" name="halignLA">
+ <property name="toolTip">
+ <string>Horizontal alignment of the content inside the box</string>
+ </property>
+ <property name="text">
+ <string>Horizontal</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QComboBox" name="valignCO">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip">
+ <string>Vertical alignment of the box (with regard to baseline)</string>
+ </property>
<item>
<property name="text">
- <string>Stretch</string>
+ <string>Top</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Middle</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Bottom</string>
</property>
</item>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="ialignCO">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
</item>
</widget>
</item>
- <item row="2" column="1">
- <widget class="QComboBox" name="valignCO">
- <property name="toolTip">
- <string>Vertical alignment of the box (with regard to baseline)</string>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Co&ntent:</string>
+ </property>
+ <property name="buddy">
+ <cstring>ialignCO</cstring>
</property>
- <item>
- <property name="text">
- <string>Top</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Middle</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Bottom</string>
- </property>
- </item>
</widget>
</item>
<item row="2" column="0">
</property>
</widget>
</item>
- <item row="1" column="0">
- <widget class="QLabel" name="label">
+ </layout>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QGroupBox" name="DecorationGB">
+ <property name="title">
+ <string>Decoration</string>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="typeLA">
+ <property name="toolTip">
+ <string/>
+ </property>
<property name="text">
- <string>Co&ntent:</string>
+ <string>&Decoration:</string>
</property>
<property name="buddy">
- <cstring>ialignCO</cstring>
+ <cstring>typeCO</cstring>
</property>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QLabel" name="ialignLA">
+ <item row="0" column="1" colspan="2">
+ <widget class="QComboBox" name="typeCO">
<property name="toolTip">
- <string>Vertical alignment of the content inside the box</string>
+ <string>Supported box types</string>
</property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="thicknessLA">
<property name="text">
- <string>Vertical</string>
+ <string>Line thickness:</string>
</property>
</widget>
</item>
- <item row="0" column="2">
- <widget class="QLabel" name="halignLA">
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="thicknessED">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
<property name="toolTip">
- <string>Horizontal alignment of the content inside the box</string>
+ <string>Width value</string>
</property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="lyx::frontend::LengthCombo" name="thicknessUnitsLC">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="separationLA">
<property name="text">
- <string>Horizontal</string>
+ <string>Box separation:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="separationED">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip">
+ <string>Width value</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="lyx::frontend::LengthCombo" name="separationUnitsLC">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="shadowsizeLA">
+ <property name="text">
+ <string>Shadow size:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLineEdit" name="shadowsizeED">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip">
+ <string>Width value</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="2">
+ <widget class="lyx::frontend::LengthCombo" name="shadowsizeUnitsLC">
+ <property name="enabled">
+ <bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
- <item row="3" column="2">
- <widget class="lyx::frontend::LengthCombo" name="heightUnitsLC">
- <property name="enabled">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="3" column="0">
- <widget class="QCheckBox" name="heightCB">
- <property name="toolTip">
- <string/>
- </property>
- <property name="text">
- <string>&Height:</string>
- </property>
- <property name="checked">
- <bool>false</bool>
- </property>
- <property name="tristate">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="innerBoxLA">
- <property name="toolTip">
- <string/>
- </property>
- <property name="text">
- <string>Inner Bo&x:</string>
- </property>
- <property name="buddy">
- <cstring>innerBoxCO</cstring>
- </property>
- </widget>
- </item>
- <item row="2" column="2">
- <widget class="lyx::frontend::LengthCombo" name="widthUnitsLC"/>
- </item>
- <item row="0" column="0">
- <widget class="QLabel" name="typeLA">
- <property name="toolTip">
- <string/>
- </property>
- <property name="text">
- <string>&Decoration:</string>
- </property>
- <property name="buddy">
- <cstring>typeCO</cstring>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QCheckBox" name="widthCB">
- <property name="toolTip">
- <string/>
- </property>
- <property name="text">
- <string>&Width:</string>
- </property>
- <property name="checked">
- <bool>false</bool>
- </property>
- <property name="tristate">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="3" column="1">
- <widget class="QLineEdit" name="heightED">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="toolTip">
- <string>Height value</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLineEdit" name="widthED">
- <property name="toolTip">
- <string>Width value</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1" colspan="2">
- <widget class="QComboBox" name="innerBoxCO">
- <property name="toolTip">
- <string>Inner box -- needed for fixed width & line breaks</string>
- </property>
- <item>
- <property name="text">
- <string>None</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Parbox</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Minipage</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="0" column="1" colspan="2">
- <widget class="QComboBox" name="typeCO">
- <property name="toolTip">
- <string>Supported box types</string>
- </property>
- </widget>
- </item>
</layout>
</widget>
<customwidgets>
<tabstops>
<tabstop>typeCO</tabstop>
<tabstop>innerBoxCO</tabstop>
- <tabstop>widthED</tabstop>
- <tabstop>widthUnitsLC</tabstop>
<tabstop>heightCB</tabstop>
- <tabstop>heightED</tabstop>
- <tabstop>heightUnitsLC</tabstop>
<tabstop>ialignCO</tabstop>
<tabstop>halignCO</tabstop>
<tabstop>valignCO</tabstop>
* \author Angus Leeming
* \author Martin Vermeer
* \author Jürgen Spitzmüller
+ * \author Uwe Stöhr
*
* Full author contact details are available in file CREDITS.
*/
BoxType btype = boxtranslator().find(params_.type);
string width_string = params_.width.asLatexString();
+ string thickness_string = params_.thickness.asLatexString();
+ string defaultThick = "0.4pt";
+ string separation_string = params_.separation.asLatexString();
+ string defaultSep = "3pt";
+ string shadowsize_string = params_.shadowsize.asLatexString();
+ string defaultShadow = "4pt";
bool stdwidth = false;
- // FIXME: do not test explicitely values of width_string
- if (params_.inner_box &&
- (width_string.find("1.0\\columnwidth") != string::npos
- || width_string.find("1.0\\textwidth") != string::npos)) {
+ // in general the overall width of some decorated boxes is wider thean the inner box
+ // we could therefore calculate the real width for all sizes so that if the user wants
+ // e.g. 0.1\columnwidth or 2cm he gets exactly this size
+ // however this makes problems when importing TeX code
+ // therefore only recalculate for the most common case that the box should not protrude
+ // the page margins
+ if (params_.inner_box
+ && ((width_string.find("1\\columnwidth") != string::npos
+ || width_string.find("1\\textwidth") != string::npos)
+ || width_string.find("1\\paperwidth") != string::npos
+ || width_string.find("1\\linewidth") != string::npos)) {
stdwidth = true;
switch (btype) {
case Frameless:
+ break;
case Framed:
+ width_string += " - 2\\FrameSep - 2\\FrameRule";
break;
case Boxed:
- case Shaded:
width_string += " - 2\\fboxsep - 2\\fboxrule";
break;
+ case Shaded:
+ break;
case ovalbox:
width_string += " - 2\\fboxsep - 0.8pt";
break;
width_string += " - 2\\fboxsep - 1.6pt";
break;
case Shadowbox:
- // Shadow falls outside right margin... opinions?
- width_string += " - 2\\fboxsep - 2\\fboxrule"/* "-\\shadowsize"*/;
+ width_string += " - 2\\fboxsep - 2\\fboxrule - \\shadowsize";
break;
case Doublebox:
width_string += " - 2\\fboxsep - 7.5\\fboxrule - 1pt";
if (runparams.lastid != -1)
os.texrow().start(runparams.lastid, runparams.lastpos);
- // Adapt to column/text width correctly also if paragraphs indented:
- if (stdwidth)
+ // adapt column/text width correctly also if paragraphs indented
+ if (stdwidth && !(buffer().params().paragraph_separation))
os << "\\noindent";
switch (btype) {
case Frameless:
break;
case Framed:
+ if (!(thickness_string.find(defaultThick) != string::npos)) {
+ os << "{\\FrameRule " << from_ascii(thickness_string);
+ if (!(separation_string.find(defaultSep) != string::npos))
+ os << "\\FrameSep " << from_ascii(separation_string);
+ }
+ if (!(separation_string.find(defaultSep) != string::npos)
+ && (thickness_string.find(defaultThick) != string::npos))
+ os << "{\\FrameSep " << from_ascii(separation_string);
+
os << "\\begin{framed}%\n";
break;
case Boxed:
+ if (!(thickness_string.find(defaultThick) != string::npos)) {
+ os << "{\\fboxrule " << from_ascii(thickness_string);
+ if (!(separation_string.find(defaultSep) != string::npos))
+ os << "\\fboxsep " << from_ascii(separation_string);
+ }
+ if (!(separation_string.find(defaultSep) != string::npos)
+ && (thickness_string.find(defaultThick) != string::npos))
+ os << "{\\fboxsep " << from_ascii(separation_string);
if (!width_string.empty()) {
if (!params_.inner_box) {
os << "\\framebox";
os << "{";
break;
case ovalbox:
+ if (!separation_string.empty() && separation_string.find(defaultSep) == string::npos)
+ os << "{\\fboxsep " << from_ascii(separation_string);
os << "\\ovalbox{";
break;
case Ovalbox:
+ if (!separation_string.empty() && separation_string.find(defaultSep) == string::npos)
+ os << "{\\fboxsep " << from_ascii(separation_string);
os << "\\Ovalbox{";
break;
case Shadowbox:
+ if (!(thickness_string.find(defaultThick) != string::npos)) {
+ os << "{\\fboxrule " << from_ascii(thickness_string);
+ if (!(separation_string.find(defaultSep) != string::npos)) {
+ os << "\\fboxsep " << from_ascii(separation_string);
+ if (!(shadowsize_string.find(defaultShadow) != string::npos))
+ os << "\\shadowsize " << from_ascii(shadowsize_string);
+ }
+ if (!(shadowsize_string.find(defaultShadow) != string::npos)
+ && (separation_string.find(defaultSep) != string::npos))
+ os << "\\shadowsize " << from_ascii(shadowsize_string);
+ }
+ if (!(separation_string.find(defaultSep) != string::npos)
+ && (thickness_string.find(defaultThick) != string::npos)) {
+ os << "{\\fboxsep " << from_ascii(separation_string);
+ if (!(shadowsize_string.find(defaultShadow) != string::npos))
+ os << "\\shadowsize " << from_ascii(shadowsize_string);
+ }
+ if (!(shadowsize_string.find(defaultShadow) != string::npos)
+ && (separation_string.find(defaultSep) != string::npos)
+ && (thickness_string.find(defaultThick) != string::npos))
+ os << "{\\shadowsize " << from_ascii(shadowsize_string);
os << "\\shadowbox{";
break;
case Shaded:
// it is inside a minipage or parbox
break;
case Doublebox:
+ if (!(thickness_string.find(defaultThick) != string::npos)) {
+ os << "{\\fboxrule " << from_ascii(thickness_string);
+ if (!(separation_string.find(defaultSep) != string::npos))
+ os << "\\fboxsep " << from_ascii(separation_string);
+ }
+ if (!(separation_string.find(defaultSep) != string::npos)
+ && (thickness_string.find(defaultThick) != string::npos))
+ os << "{\\fboxsep " << from_ascii(separation_string);
os << "\\doublebox{";
break;
}
os << "\\begin{shaded}%\n";
}
+ // \framebox and \makebox handle hor_pos their own way
+ // hor_pos is senseless for \mbox and \fbox
+ if (!(params_.use_makebox)
+ && !(btype == Boxed && !params_.inner_box)) {
+ switch (params_.hor_pos) {
+ case 'l':
+ // do nothing because this is LaTeX's default
+ break;
+ case 'c':
+ os << "\\centering ";
+ break;
+ case 'r':
+ os << "\\raggedleft ";
+ break;
+ }
+ }
+
InsetText::latex(os, runparams);
if (btype == Shaded)
break;
case Framed:
os << "\\end{framed}";
+ if (!(separation_string.find(defaultSep) != string::npos)
+ || !(thickness_string.find(defaultThick) != string::npos))
+ os << "}";
break;
case Boxed:
os << "}";
+ if (!(separation_string.find(defaultSep) != string::npos)
+ || !(thickness_string.find(defaultThick) != string::npos))
+ os << "}";
break;
case ovalbox:
+ os << "}";
+ if (!(separation_string.find(defaultSep) != string::npos))
+ os << "}";
+ break;
case Ovalbox:
+ os << "}";
+ if (!(separation_string.find(defaultSep) != string::npos))
+ os << "}";
+ break;
case Doublebox:
+ os << "}";
+ if (!(separation_string.find(defaultSep) != string::npos)
+ || !(thickness_string.find(defaultThick) != string::npos))
+ os << "}";
+ break;
case Shadowbox:
os << "}";
+ if (!(separation_string.find(defaultSep) != string::npos)
+ || !(thickness_string.find(defaultThick) != string::npos)
+ || !(shadowsize_string.find(defaultShadow) != string::npos))
+ os << "}";
break;
case Shaded:
// already done
case Frameless:
break;
case Framed:
+ features.require("calc");
features.require("framed");
break;
case Boxed:
hor_pos('c'),
inner_pos('t'),
height(Length("1in")),
- height_special("totalheight") // default is 1\\totalheight
+ height_special("totalheight"), // default is 1\\totalheight
+ thickness(Length("0.4pt")),
+ separation(Length("3pt")),
+ shadowsize(Length("4pt"))
{}
os << "special \"" << special << "\"\n";
os << "height \"" << height.asString() << "\"\n";
os << "height_special \"" << height_special << "\"\n";
+ os << "thickness \"" << thickness.asString() << "\"\n";
+ os << "separation \"" << separation.asString() << "\"\n";
+ os << "shadowsize \"" << shadowsize.asString() << "\"\n";
}
lex >> "special" >> special;
lex >> "height" >> height;
lex >> "height_special" >> height_special;
+ lex >> "thickness" >> thickness;
+ lex >> "separation" >> separation;
+ lex >> "shadowsize" >> shadowsize;
}
*
* \author Angus Leeming
* \author Martin Vermeer
+ * \author Uwe Stöhr
*
* Full author contact details are available in file CREDITS.
*/
Length height;
///
std::string height_special;
+ ///
+ Length thickness;
+ ///
+ Length separation;
+ ///
+ Length shadowsize;
};
string width_unit;
string latex_width;
string width_special = "none";
+ string thickness = "0.4pt";
+ string separation = "3pt";
+ string shadowsize = "4pt";
if (!inner_type.empty() && p.hasOpt()) {
if (inner_type != "makebox")
position = p.getArg('[', ']');
os << "special \"" << width_special << "\"\n";
os << "height \"" << height_value << height_unit << "\"\n";
os << "height_special \"" << height_special << "\"\n";
+ os << "thickness \"" << thickness << "\"\n";
+ os << "separation \"" << separation << "\"\n";
+ os << "shadowsize \"" << shadowsize << "\"\n";
os << "status open\n\n";
// Unfortunately we can't use parse_text_in_inset:
// Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own.
-#define LYX_FORMAT_LYX 488 // spitz: rework the Glosse insets
-#define LYX_FORMAT_TEX2LYX 488
+#define LYX_FORMAT_LYX 489 // uwestoehr: new box features
+#define LYX_FORMAT_TEX2LYX 489
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
#ifndef _MSC_VER