X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiExternal.cpp;h=38443e8db5d30872f70a7a4888a6d84d67165084;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=82bed17a3ff1b09fc4922939d87bd0b72078f5a7;hpb=75788329198d6cc1532f4d3b694a08a6ae913fe3;p=lyx.git diff --git a/src/frontends/qt4/GuiExternal.cpp b/src/frontends/qt4/GuiExternal.cpp index 82bed17a3f..38443e8db5 100644 --- a/src/frontends/qt4/GuiExternal.cpp +++ b/src/frontends/qt4/GuiExternal.cpp @@ -80,6 +80,8 @@ char const * const origin_gui_strs[] = { external::Template getTemplate(int i) { + if (external::TemplateManager::get().getTemplates().empty()) + return Template(); external::TemplateManager::Templates::const_iterator i1 = external::TemplateManager::get().getTemplates().begin(); advance(i1, i); @@ -98,12 +100,10 @@ GuiExternal::GuiExternal(GuiView & lv) connect(applyPB, SIGNAL(clicked()), this, SLOT(slotApply())); connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose())); - connect(displayGB, SIGNAL(toggled(bool)), - showCO, SLOT(setEnabled(bool))); + /* connect(displayGB, SIGNAL(toggled(bool)), displayscaleED, SLOT(setEnabled(bool))); - connect(showCO, SIGNAL(activated(QString)), - this, SLOT(change_adaptor())); + */ connect(originCO, SIGNAL(activated(int)), this, SLOT(change_adaptor())); connect(aspectratioCB, SIGNAL(stateChanged(int)), @@ -168,7 +168,6 @@ GuiExternal::GuiExternal(GuiView & lv) bc().addReadOnly(externalCO); bc().addReadOnly(draftCB); bc().addReadOnly(displayscaleED); - bc().addReadOnly(showCO); bc().addReadOnly(displayGB); bc().addReadOnly(angleED); bc().addReadOnly(originCO); @@ -206,41 +205,48 @@ GuiExternal::GuiExternal(GuiView & lv) for (size_t i = 0; i != sizeof(origins) / sizeof(origins[0]); ++i) originCO->addItem(qt_(origin_gui_strs[i])); - // Fill the width combo - widthUnitCO->addItem(qt_("Scale%")); - for (int i = 0; i < num_units; i++) - widthUnitCO->addItem(qt_(unit_name_gui[i])); + // add scale item + widthUnitCO->insertItem(0, qt_("Scale%"), "scale"); } bool GuiExternal::activateAspectratio() const { - if (widthUnitCO->currentIndex() == 0) + if (usingScale()) return false; - string const wstr = fromqstr(widthED->text()); - if (wstr.empty()) + QString const wstr = widthED->text(); + if (wstr.isEmpty()) return false; - bool const wIsDbl = isStrDbl(wstr); - if (wIsDbl && float_equal(convert(wstr), 0.0, 0.05)) + bool wIsDbl; + double val = wstr.trimmed().toDouble(&wIsDbl); + if (wIsDbl && float_equal(val, 0.0, 0.05)) return false; Length l; - if (!wIsDbl && (!isValidLength(wstr, &l) || l.zero())) + if (!wIsDbl && (!isValidLength(fromqstr(wstr), &l) || l.zero())) return false; - string const hstr = fromqstr(heightED->text()); - if (hstr.empty()) + QString const hstr = heightED->text(); + if (hstr.isEmpty()) return false; - bool const hIsDbl = isStrDbl(hstr); - if (hIsDbl && float_equal(convert(hstr), 0.0, 0.05)) + bool hIsDbl; + val = hstr.trimmed().toDouble(&hIsDbl); + if (hIsDbl && float_equal(val, 0.0, 0.05)) return false; - if (!hIsDbl && (!isValidLength(hstr, &l) || l.zero())) + if (!hIsDbl && (!isValidLength(fromqstr(hstr), &l) || l.zero())) return false; return true; } +bool GuiExternal::usingScale() const +{ + return (widthUnitCO->itemData( + widthUnitCO->currentIndex()).toString() == "scale"); +} + + void GuiExternal::bbChanged() { bbChanged_ = true; @@ -336,96 +342,22 @@ void GuiExternal::templateChanged() void GuiExternal::widthUnitChanged() { - bool useHeight = (widthUnitCO->currentIndex() > 0); - - if (useHeight) - widthED->setValidator(unsignedLengthValidator(widthED)); - else + if (usingScale()) widthED->setValidator(new QDoubleValidator(0, 1000, 2, widthED)); + else + widthED->setValidator(unsignedLengthValidator(widthED)); - heightED->setEnabled(useHeight); - heightUnitCO->setEnabled(useHeight); + heightED->setEnabled(!usingScale()); + heightUnitCO->setEnabled(!usingScale()); changed(); } -static Length::UNIT defaultUnit() -{ - Length::UNIT default_unit = Length::CM; - switch (lyxrc.default_papersize) { - case PAPER_USLETTER: - case PAPER_USLEGAL: - case PAPER_USEXECUTIVE: - default_unit = Length::IN; - break; - default: - break; - } - return default_unit; -} - - -static void setDisplay( - QGroupBox & displayGB, QComboBox & showCO, QLineEdit & scaleED, - external::DisplayType display, unsigned int scale, bool read_only) -{ - int item = 0; - switch (display) { - case external::DefaultDisplay: - item = 0; - break; - case external::MonochromeDisplay: - item = 1; - break; - case external::GrayscaleDisplay: - item = 2; - break; - case external::ColorDisplay: - item = 3; - break; - case external::PreviewDisplay: - item = 4; - break; - case external::NoDisplay: - item = 0; - break; - } - - showCO.setCurrentIndex(item); - bool const no_display = display == external::NoDisplay; - showCO.setEnabled(!no_display && !read_only); - displayGB.setChecked(!no_display); - scaleED.setEnabled(!no_display && !read_only); - scaleED.setText(QString::number(scale)); -} - - -static external::DisplayType display(QGroupBox const & displayGB, - QComboBox const & showCO) -{ - if (!displayGB.isChecked()) - return external::NoDisplay; - switch (showCO.currentIndex()) { - default: - case 0: - return external::DefaultDisplay; - case 1: - return external::MonochromeDisplay; - case 2: - return external::GrayscaleDisplay; - case 3: - return external::ColorDisplay; - case 4: - return external::PreviewDisplay; - } -} - - static void setRotation(QLineEdit & angleED, QComboBox & originCO, external::RotationData const & data) { originCO.setCurrentIndex(int(data.origin())); - angleED.setText(toqstr(data.angle)); + doubleToWidget(&angleED, data.angle); } @@ -435,11 +367,11 @@ static void getRotation(external::RotationData & data, typedef external::RotationData::OriginType OriginType; data.origin(static_cast(originCO.currentIndex())); - data.angle = fromqstr(angleED.text()); + data.angle = widgetToDoubleStr(&angleED); } -static void setSize(QLineEdit & widthED, QComboBox & widthUnitCO, +static void setSize(QLineEdit & widthED, LengthCombo & widthUnitCO, QLineEdit & heightED, LengthCombo & heightUnitCO, QCheckBox & aspectratioCB, external::ResizeData const & data) @@ -453,19 +385,15 @@ static void setSize(QLineEdit & widthED, QComboBox & widthUnitCO, } if (using_scale) { - widthED.setText(toqstr(scale)); - widthUnitCO.setCurrentIndex(0); - } else { - widthED.setText(QString::number(data.width.value())); - // Because 'Scale' is position 0... - // Note also that width cannot be zero here, so - // we don't need to worry about the default unit. - widthUnitCO.setCurrentIndex(data.width.unit() + 1); - } + doubleToWidget(&widthED, scale); + widthUnitCO.setCurrentItem("scale"); + } else + lengthToWidgets(&widthED, &widthUnitCO, + data.width.asString(), Length::defaultUnit()); string const h = data.height.zero() ? string() : data.height.asString(); - Length::UNIT default_unit = data.width.zero() ? - defaultUnit() : data.width.unit(); + Length::UNIT const default_unit = data.width.zero() ? + Length::defaultUnit() : data.width.unit(); lengthToWidgets(&heightED, &heightUnitCO, h, default_unit); heightED.setEnabled(!using_scale); @@ -482,33 +410,17 @@ static void setSize(QLineEdit & widthED, QComboBox & widthUnitCO, static void getSize(external::ResizeData & data, QLineEdit const & widthED, QComboBox const & widthUnitCO, QLineEdit const & heightED, LengthCombo const & heightUnitCO, - QCheckBox const & aspectratioCB) + QCheckBox const & aspectratioCB, bool const scaling) { - string const width = fromqstr(widthED.text()); - - if (widthUnitCO.currentIndex() > 0) { - // Subtract one, because scale is 0. - int const unit = widthUnitCO.currentIndex() - 1; - - Length w; - if (isValidLength(width, &w)) - data.width = w; - else if (isStrDbl(width)) - data.width = Length(convert(width), - static_cast(unit)); - else - data.width = Length(); - - data.scale = string(); - - } else { + if (scaling) { // scaling instead of a width - data.scale = width; + data.scale = widgetToDoubleStr(&widthED); data.width = Length(); + } else { + data.width = Length(widgetsToLength(&widthED, &widthUnitCO)); + data.scale = string(); } - data.height = Length(widgetsToLength(&heightED, &heightUnitCO)); - data.keepAspectRatio = aspectratioCB.isChecked(); } @@ -547,13 +459,11 @@ static void getCrop(external::ClipData & data, void GuiExternal::updateContents() { - tab->setCurrentIndex(0); - string const name = params_.filename.outputFilename(fromqstr(bufferFilepath())); fileED->setText(toqstr(name)); - int index = -1; + int index = 0; external::TemplateManager::Templates::const_iterator i1, i2; i1 = external::TemplateManager::get().getTemplates().begin(); i2 = external::TemplateManager::get().getTemplates().end(); @@ -569,8 +479,14 @@ void GuiExternal::updateContents() draftCB->setChecked(params_.draft); - setDisplay(*displayGB, *showCO, *displayscaleED, - params_.display, params_.lyxscale, isBufferReadonly()); + displayGB->setChecked(params_.display); + displayscaleED->setText(QString::number(params_.lyxscale)); + bool scaled = params_.display && !isBufferReadonly() && + (params_.preview_mode != PREVIEW_INSTANT); + displayscaleED->setEnabled(scaled); + scaleLA->setEnabled(scaled); + displayGB->setEnabled(lyxrc.display_graphics); + setRotation(*angleED, *originCO, params_.rotationdata); @@ -613,6 +529,11 @@ void GuiExternal::updateTemplate() found = std::find(tr_begin, tr_end, external::Extra) != tr_end; optionsGB->setEnabled(found); + bool scaled = displayGB->isChecked() && displayGB->isEnabled() && + !isBufferReadonly() && (templ.preview_mode != PREVIEW_INSTANT); + displayscaleED->setEnabled(scaled); + scaleLA->setEnabled(scaled); + if (!found) return; @@ -654,14 +575,14 @@ void GuiExternal::applyView() params_.draft = draftCB->isChecked(); params_.lyxscale = displayscaleED->text().toInt(); - params_.display = display(*displayGB, *showCO); + params_.display = displayGB->isChecked(); if (rotationGB->isEnabled()) getRotation(params_.rotationdata, *angleED, *originCO); if (scaleGB->isEnabled()) getSize(params_.resizedata, *widthED, *widthUnitCO, - *heightED, *heightUnitCO, *aspectratioCB); + *heightED, *heightUnitCO, *aspectratioCB, usingScale()); if (cropGB->isEnabled()) getCrop(params_.clipdata, *clipCB, *xlED, *ybED, @@ -728,4 +649,4 @@ Dialog * createGuiExternal(GuiView & lv) { return new GuiExternal(lv); } } // namespace frontend } // namespace lyx -#include "GuiExternal_moc.cpp" +#include "moc_GuiExternal.cpp"