* InsetBox and GuiBox: Use proper empty length instead of the broken -9.99col% trick
* some slight changes to the logic of GuiBox to make sure that values are set as needed.
* lengthToWidget(): handle properly the empty length case. All the other related Qt helpers did it already, it was probably an oversight. Also set the default_unit parameter as optional (not needed in this patch actually, but I got carried away :)
* allow generating LaTeX code for an empty length, since some broken code does that.
2013-03-22 Uwe Stöhr <uwestoehr@web.de>
* Format incremented to 468: support for \mbox and \fbox
New checkbox in the box dialog to avoid using an explicit
2013-03-22 Uwe Stöhr <uwestoehr@web.de>
* Format incremented to 468: support for \mbox and \fbox
New checkbox in the box dialog to avoid using an explicit
+ width. An empty/missing length can be specified as "".
2013-03-19 Uwe Stöhr <uwestoehr@web.de>
* Format incremented to 467: support for iwona fonts
2013-03-19 Uwe Stöhr <uwestoehr@web.de>
* Format incremented to 467: support for iwona fonts
continue
BeginLayout = find_token(document.body, "\\begin_layout Plain Layout", j)
EndLayout = find_token(document.body, "\\end_layout", BeginLayout)
continue
BeginLayout = find_token(document.body, "\\begin_layout Plain Layout", j)
EndLayout = find_token(document.body, "\\end_layout", BeginLayout)
- # replace if width is "-999col%"
- if (width == '"-999col%"'):
+ # replace if width is ""
+ if (width == '""'):
document.body[EndLayout:k + 1] = put_cmd_in_ert("}")
if document.body[i] == "\\begin_inset Box Frameless":
document.body[i:BeginLayout + 1] = put_cmd_in_ert("\\mbox{")
document.body[EndLayout:k + 1] = put_cmd_in_ert("}")
if document.body[i] == "\\begin_inset Box Frameless":
document.body[i:BeginLayout + 1] = put_cmd_in_ert("\\mbox{")
#include "LyXRC.h"
#include "support/docstream.h"
#include "LyXRC.h"
#include "support/docstream.h"
-#include "support/lassert.h"
#include <sstream>
#include <iomanip>
#include <sstream>
#include <iomanip>
os << val_ / 100.0 << "\\paperheight";
break;
case UNIT_NONE:
os << val_ / 100.0 << "\\paperheight";
break;
case UNIT_NONE:
- // One should not try to ouput latex code for an empty length
- LASSERT(false, break);
default:
os << val_ << unit_name[unit_];
break;
default:
os << val_ << unit_name[unit_];
break;
heightCB->setChecked(false);
heightCB->setEnabled(ibox);
// the width can only be selected for makebox or framebox
heightCB->setChecked(false);
heightCB->setEnabled(ibox);
// the width can only be selected for makebox or framebox
- widthCB->setEnabled(itype == "makebox"
+ widthCB->setEnabled(itype == "makebox"
|| (outer == "Boxed" && itype == "none"));
widthCB->setChecked(itype != "none" && !widthCB->isEnabled());
// except for frameless and boxed, the width cannot be specified if
|| (outer == "Boxed" && itype == "none"));
widthCB->setChecked(itype != "none" && !widthCB->isEnabled());
// except for frameless and boxed, the width cannot be specified if
setSpecial(ibox);
}
// the width can only be selected for makebox or framebox
setSpecial(ibox);
}
// the width can only be selected for makebox or framebox
- widthCB->setEnabled(itype == "makebox"
+ widthCB->setEnabled(itype == "makebox"
|| (type == "Boxed" && itype == "none"));
widthCB->setChecked(itype != "none" && !widthCB->isEnabled());
// except for frameless and boxed, the width cannot be specified if
// there is no inner box
|| (type == "Boxed" && itype == "none"));
widthCB->setChecked(itype != "none" && !widthCB->isEnabled());
// except for frameless and boxed, the width cannot be specified if
// there is no inner box
- bool const width_enabled =
+ bool const width_enabled =
itype != "none" || frameless || type == "Boxed";
// enable if width_enabled, except if checkbaox is active but unset
widthED->setEnabled(width_enabled || (widthCB->isEnabled() && widthCB->isChecked()));
itype != "none" || frameless || type == "Boxed";
// enable if width_enabled, except if checkbaox is active but unset
widthED->setEnabled(width_enabled || (widthCB->isEnabled() && widthCB->isChecked()));
Length::UNIT const default_unit = Length::defaultUnit();
// the width can only be selected for makebox or framebox
Length::UNIT const default_unit = Length::defaultUnit();
// the width can only be selected for makebox or framebox
- widthCB->setEnabled(inner_type == "makebox"
- || (type == "Boxed" && !ibox && !pagebreakCB->isChecked()));
- // "-999col%" is the code for no width
- if ((params.width).asString() == "-999col%")
- widthCB->setCheckState(Qt::Unchecked);
- else {
+ widthCB->setEnabled(inner_type == "makebox"
+ || (type == "Boxed"
+ && !ibox && !pagebreakCB->isChecked()));
+ if (params.width.empty()) {
+ widthCB->setChecked(false);
+ lengthToWidgets(widthED, widthUnitsLC,
+ params.width, default_unit);
+ } else {
if (widthCB->isEnabled())
widthCB->setChecked(true);
lengthToWidgets(widthED, widthUnitsLC,
if (widthCB->isEnabled())
widthCB->setChecked(true);
lengthToWidgets(widthED, widthUnitsLC,
- (params.width).asString(), default_unit);
+ params.width, default_unit);
QString const special = toqstr(params.special);
if (!special.isEmpty() && special != "none")
widthUnitsLC->setCurrentItem(special);
QString const special = toqstr(params.special);
if (!special.isEmpty() && special != "none")
widthUnitsLC->setCurrentItem(special);
lengthToWidgets(heightED, heightUnitsLC,
(params.height).asString(), default_unit);
lengthToWidgets(heightED, heightUnitsLC,
(params.height).asString(), default_unit);
QString const height_special = toqstr(params.height_special);
if (!height_special.isEmpty() && height_special != "none")
heightUnitsLC->setCurrentItem(height_special);
QString const height_special = toqstr(params.height_special);
if (!height_special.isEmpty() && height_special != "none")
heightUnitsLC->setCurrentItem(height_special);
widthUnitsLC->itemData(widthUnitsLC->currentIndex()).toString();
QString value = widthED->text();
widthUnitsLC->itemData(widthUnitsLC->currentIndex()).toString();
QString value = widthED->text();
- if (widthCB->isChecked()) {
- if (ids_spec_.contains(unit) && !isValidLength(fromqstr(value))) {
- params.special = fromqstr(unit);
- // Note: the unit is simply ignored in this case
- params.width = Length(value.toDouble(), Length::IN);
- } else {
- params.special = "none";
- params.width = Length(widgetsToLength(widthED, widthUnitsLC));
- }
- } else {
- if (widthCB->isEnabled()) {
- // use the code "-999col%" for the case that no width was selected
+ if (widthED->isEnabled()) {
+ if (ids_spec_.contains(unit) && !isValidLength(fromqstr(value))) {
+ params.special = fromqstr(unit);
+ // Note: the unit is simply ignored in this case
+ params.width = Length(value.toDouble(), Length::IN);
+ } else {
- params.width = Length("-999col%");
+ params.width = Length(widgetsToLength(widthED, widthUnitsLC));
+ } else {
+ params.special = "none";
+ params.width = Length();
}
// the height parameter is omitted if the value
}
// the height parameter is omitted if the value
void lengthToWidgets(QLineEdit * input, LengthCombo * combo,
void lengthToWidgets(QLineEdit * input, LengthCombo * combo,
- Length const & len, Length::UNIT /*defaultUnit*/)
+ Length const & len, Length::UNIT /*defaultUnit*/)
- combo->setCurrentItem(len.unit());
- QLocale loc;
- loc.setNumberOptions(QLocale::OmitGroupSeparator);
- input->setText(loc.toString(Length(len).value()));
+ if (len.empty()) {
+ // no length (UNIT_NONE)
+ combo->setCurrentItem(Length::defaultUnit());
+ input->setText("");
+ } else {
+ combo->setCurrentItem(len.unit());
+ QLocale loc;
+ loc.setNumberOptions(QLocale::OmitGroupSeparator);
+ input->setText(loc.toString(Length(len).value()));
+ }
QString const text = input->text();
if (text.isEmpty())
return 0.0;
QString const text = input->text();
if (text.isEmpty())
return 0.0;
return text.trimmed().toDouble();
}
return text.trimmed().toDouble();
}
QString const text = input->text();
if (text.isEmpty())
return string();
QString const text = input->text();
if (text.isEmpty())
return string();
return convert<string>(text.trimmed().toDouble());
}
return convert<string>(text.trimmed().toDouble());
}
namespace support { class FileName; }
class BufferParams;
namespace support { class FileName; }
class BufferParams;
namespace frontend {
class LengthCombo;
namespace frontend {
class LengthCombo;
/// method to get a Length from widgets (QComboBox)
Length widgetsToLength(QLineEdit const * input, QComboBox const * combo);
/// method to get a Length from widgets (QComboBox)
Length widgetsToLength(QLineEdit const * input, QComboBox const * combo);
-//FIXME It would be nice if defaultUnit were a default argument
/// method to set widgets from a Length
/// method to set widgets from a Length
+//FIXME Remove default_unit argument for the first form. FIXME Change
+// all the code to remove default_unit argument when equal to the
+// default.
void lengthToWidgets(QLineEdit * input, LengthCombo * combo,
void lengthToWidgets(QLineEdit * input, LengthCombo * combo,
-Length const & len, Length::UNIT default_unit);
+ Length const & len,
+ Length::UNIT default_unit = Length::defaultUnit());
/// method to set widgets from a string
void lengthToWidgets(QLineEdit * input, LengthCombo * combo,
/// method to set widgets from a string
void lengthToWidgets(QLineEdit * input, LengthCombo * combo,
-std::string const & len, Length::UNIT default_unit);
+ std::string const & len,
+ Length::UNIT default_unit = Length::defaultUnit());
/// method to set widgets from a docstring
void lengthToWidgets(QLineEdit * input, LengthCombo * combo,
docstring const & len, Length::UNIT default_unit);
/// method to set widgets from a docstring
void lengthToWidgets(QLineEdit * input, LengthCombo * combo,
docstring const & len, Length::UNIT default_unit);
bool InsetBox::hasFixedWidth() const
{
bool InsetBox::hasFixedWidth() const
{
- return from_ascii(params_.width.asLatexString()) != "-9.99\\columnwidth";
+ return !params_.width.empty();
string width_string = params_.width.asLatexString();
bool stdwidth = false;
string width_string = params_.width.asLatexString();
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)) {
if (params_.inner_box &&
(width_string.find("1.0\\columnwidth") != string::npos
|| width_string.find("1.0\\textwidth") != string::npos)) {
os << "\\begin{framed}%\n";
break;
case Boxed:
os << "\\begin{framed}%\n";
break;
case Boxed:
- // "-999col%" is the code for no width
- if (from_ascii(width_string) != "-9.99\\columnwidth") {
+ if (width_string.empty()) {
os << "\\framebox";
if (!params_.inner_box) {
// Special widths, see usrguide sec. 3.5
os << "\\framebox";
if (!params_.inner_box) {
// Special widths, see usrguide sec. 3.5
if (params_.use_parbox)
os << "\\parbox";
else if (params_.use_makebox) {
if (params_.use_parbox)
os << "\\parbox";
else if (params_.use_makebox) {
- // "-999col%" is the code for no width
- if (from_ascii(width_string) != "-9.99\\columnwidth") {
+ if (!width_string.empty()) {
os << "\\makebox";
// FIXME UNICODE
// output the width and horizontal position
os << "\\makebox";
// FIXME UNICODE
// output the width and horizontal position
width_unit = "in";
width_special = "width";
} else if (latex_width.empty() && outer_type == "framebox") {
width_unit = "in";
width_special = "width";
} else if (latex_width.empty() && outer_type == "framebox") {
- outer_type == "fbox";
- width_value = "-999";
- width_unit = "col%";
+ width_value.clear();
+ width_unit.clear();
width_special = "none";
}
if (use_ert) {
width_special = "none";
}
if (use_ert) {
else
os << "use_makebox " << (inner_type == "makebox") << '\n';
if (outer_type == "fbox" || outer_type == "mbox")
else
os << "use_makebox " << (inner_type == "makebox") << '\n';
if (outer_type == "fbox" || outer_type == "mbox")
- os << "width \"-999col%\"\n";
else
os << "width \"" << width_value << width_unit << "\"\n";
os << "special \"" << width_special << "\"\n";
else
os << "width \"" << width_value << width_unit << "\"\n";
os << "special \"" << width_special << "\"\n";