diff --git a/filters/karbon/image/ImageExportOptionsWidget.cpp b/filters/karbon/image/ImageExportOptionsWidget.cpp --- a/filters/karbon/image/ImageExportOptionsWidget.cpp +++ b/filters/karbon/image/ImageExportOptionsWidget.cpp @@ -43,8 +43,8 @@ widget.dpi->setSuffix(" DPI"); widget.pxAspect->setKeepAspectRatio(true); widget.unitAspect->setKeepAspectRatio(true); - widget.unit->addItems(KoUnit::listOfUnitNameForUi(KoUnit::HidePixel)); - widget.unit->setCurrentIndex(unit.indexInListForUi(KoUnit::HidePixel)); + widget.unit->addItems(KoUnit::listOfUnitNameForUi()); + widget.unit->setCurrentIndex(unit.indexInListForUi()); widget.backColor->setColor(Qt::white); widget.opacity->setMinimum(0.0); widget.opacity->setMaximum(100.0); @@ -67,7 +67,7 @@ { widget.unitWidth->setUnit(unit); widget.unitHeight->setUnit(unit); - widget.unit->setCurrentIndex(unit.indexInListForUi(KoUnit::HidePixel)); + widget.unit->setCurrentIndex(unit.indexInListForUi()); } QSize ImageExportOptionsWidget::pixelSize() const @@ -195,7 +195,7 @@ { blockChildSignals(true); - const KoUnit unit = KoUnit::fromListForUi(newUnit, KoUnit::HidePixel); + const KoUnit unit = KoUnit::fromListForUi(newUnit); widget.unitWidth->setUnit(unit); widget.unitHeight->setUnit(unit); diff --git a/libs/main/KoView_p.h b/libs/main/KoView_p.h --- a/libs/main/KoView_p.h +++ b/libs/main/KoView_p.h @@ -36,14 +36,13 @@ explicit UnitActionGroup(KoDocument *document, bool addPixelUnit, QObject* parent = 0) : QActionGroup(parent) , m_document(document) - , m_listOptions(addPixelUnit ? KoUnit::ListAll : KoUnit::HidePixel) { setExclusive(true); connect(this, SIGNAL(triggered(QAction*)), SLOT(onTriggered(QAction*))); connect(document, SIGNAL(unitChanged(KoUnit)), SLOT(onUnitChanged(KoUnit))); - const QStringList unitNames = KoUnit::listOfUnitNameForUi(m_listOptions); - const int currentUnitIndex = m_document->unit().indexInListForUi(m_listOptions); + const QStringList unitNames = KoUnit::listOfUnitNameForUi(); + const int currentUnitIndex = m_document->unit().indexInListForUi(); for (int i = 0; i < unitNames.count(); ++i) { QAction* action = new QAction(unitNames.at(i), this); @@ -59,12 +58,12 @@ private Q_SLOTS: void onTriggered(QAction *action) { - m_document->setUnit(KoUnit::fromListForUi(action->data().toInt(), m_listOptions)); + m_document->setUnit(KoUnit::fromListForUi(action->data().toInt())); } void onUnitChanged(const KoUnit &unit) { - const int indexInList = unit.indexInListForUi(m_listOptions); + const int indexInList = unit.indexInListForUi(); foreach (QAction *action, actions()) { if (action->data().toInt() == indexInList) { @@ -82,7 +81,6 @@ private: KoDocument *m_document; - KoUnit::ListOptions m_listOptions; }; #endif diff --git a/libs/main/config/KoConfigMiscPage.cpp b/libs/main/config/KoConfigMiscPage.cpp --- a/libs/main/config/KoConfigMiscPage.cpp +++ b/libs/main/config/KoConfigMiscPage.cpp @@ -85,10 +85,10 @@ //depend from words file => unit can be different from config file d->unit = new KComboBox(miscGroupBox); - d->unit->addItems(KoUnit::listOfUnitNameForUi(KoUnit::HidePixel)); + d->unit->addItems(KoUnit::listOfUnitNameForUi()); miscLayout->addRow(i18n("Units:"), d->unit); d->oldUnit = documentUnit; - d->unit->setCurrentIndex(d->oldUnit.indexInListForUi(KoUnit::HidePixel)); + d->unit->setCurrentIndex(d->oldUnit.indexInListForUi()); d->handleRadius = new QSpinBox(miscGroupBox); d->handleRadius->setRange(3, 20); @@ -131,8 +131,8 @@ KConfigGroup miscGroup = d->config->group("Misc"); int currentUnitIndex = d->unit->currentIndex(); - if (d->oldUnit.indexInListForUi(KoUnit::HidePixel) != currentUnitIndex) { - d->oldUnit = KoUnit::fromListForUi(currentUnitIndex, KoUnit::HidePixel); + if (d->oldUnit.indexInListForUi() != currentUnitIndex) { + d->oldUnit = KoUnit::fromListForUi(currentUnitIndex); d->doc->setUnit(d->oldUnit); miscGroup.writeEntry("Units", d->oldUnit.symbol()); } @@ -169,7 +169,7 @@ void KoConfigMiscPage::slotUnitChanged(int u) { - const KoUnit unit = KoUnit::fromListForUi(u, KoUnit::HidePixel); + const KoUnit unit = KoUnit::fromListForUi(u); d->pasteOffset->blockSignals(true); d->pasteOffset->setUnit(unit); diff --git a/libs/odf/KoUnit.h b/libs/odf/KoUnit.h --- a/libs/odf/KoUnit.h +++ b/libs/odf/KoUnit.h @@ -56,6 +56,8 @@ #define POINT_TO_CC(px) qreal((px)*0.077880997) #define PI_TO_POINT(pi) qreal((pi)*12) #define CC_TO_POINT(cc) qreal((cc)*12.840103) +#define POINT_TO_PX(cc) qreal((cc)*96.0/72.0) +#define PX_TO_POINT(px) qreal((px)*72.0/96.0) /** * %Calligra stores everything in pt (using "qreal") internally. * When displaying a value to the user, the value is converted to the user's unit @@ -64,7 +66,7 @@ * For implementing the selection of a unit type in the UI use the *ForUi() methods. * They ensure the same order of the unit types in all places, with the order not * bound to the order in the enum (so ABI-compatible extension is possible) and - * with the order and scope of listed types controlled by the @c ListOptions parameter. + * with the order and scope of listed types. */ class KOODF_EXPORT KoUnit { @@ -82,16 +84,8 @@ TypeCount ///< @internal }; - /// Used to control the scope of the unit types listed in the UI - enum ListOption { - ListAll = 0, - HidePixel = 1, - HideMask = HidePixel - }; - Q_DECLARE_FLAGS(ListOptions, ListOption) - - /** Returns a KoUnit instance with the type at the @p index of the UI list with the given @p listOptions. */ - static KoUnit fromListForUi(int index, ListOptions listOptions = ListAll, qreal factor = 1.0); + /** Returns a KoUnit instance with the type at the @p index of the UI list. */ + static KoUnit fromListForUi(int index, qreal factor = 1.0); /// Convert a unit symbol string into a KoUnit /// @param symbol symbol to convert @@ -134,6 +128,15 @@ return floor(ptValue * 1000.0) / 1000.0; } + /** + * Prepare ptValue to be displayed in pixels + * This method will round to 0.1 precision, use POINT_TO_PX() for lossless conversion. + */ + static qreal toPixel(qreal ptValue) { + // "cc" values are rounded to 0.1 pixels + return floor(POINT_TO_PX(ptValue) * 10.0) / 10.0; + } + /** * Prepare ptValue to be displayed in mm * This method will round to 0.0001 precision, use POINT_TO_MM() for lossless conversion. @@ -226,12 +229,11 @@ /// Get the symbol string of the unit QString symbol() const; - /// Returns the list of unit types for the UI, controlled with the given @p listOptions. - static QStringList listOfUnitNameForUi(ListOptions listOptions = ListAll); + /// Returns the list of unit types for the UI. + static QStringList listOfUnitNameForUi(); - /// Get the index of this unit in the list of unit types for the UI, - /// if it is controlled with the given @p listOptions. - int indexInListForUi(ListOptions listOptions = ListAll) const; + /// Get the index of this unit in the list of unit types for the UI. + int indexInListForUi() const; /// parse common %Calligra and Odf values, like "10cm", "5mm" to pt static qreal parseValue(const QString &value, qreal defaultVal = 0.0); @@ -271,6 +273,5 @@ #endif Q_DECLARE_METATYPE(KoUnit) -Q_DECLARE_OPERATORS_FOR_FLAGS(KoUnit::ListOptions) #endif diff --git a/libs/odf/KoUnit.cpp b/libs/odf/KoUnit.cpp --- a/libs/odf/KoUnit.cpp +++ b/libs/odf/KoUnit.cpp @@ -80,28 +80,22 @@ KoUnit::Pixel, }; -QStringList KoUnit::listOfUnitNameForUi(ListOptions listOptions) +QStringList KoUnit::listOfUnitNameForUi() { QStringList lst; for (int i = 0; i < KoUnit::TypeCount; ++i) { - const Type type = typesInUi[i]; - if ((type != Pixel) || ((listOptions & HideMask) == ListAll)) - lst.append(unitDescription(type)); + lst.append(unitDescription(typesInUi[i])); } return lst; } -KoUnit KoUnit::fromListForUi(int index, ListOptions listOptions, qreal factor) +KoUnit KoUnit::fromListForUi(int index, qreal factor) { KoUnit::Type type = KoUnit::Point; if ((0 <= index) && (index < KoUnit::TypeCount)) { // iterate through all enums and skip the Pixel enum if needed for (int i = 0; i < KoUnit::TypeCount; ++i) { - if ((listOptions&HidePixel) && (typesInUi[i] == Pixel)) { - ++index; - continue; - } if (i == index) { type = typesInUi[i]; break; @@ -112,22 +106,14 @@ return KoUnit(type, factor); } -int KoUnit::indexInListForUi(ListOptions listOptions) const +int KoUnit::indexInListForUi() const { - if ((listOptions&HidePixel) && (m_type == Pixel)) { - return -1; - } - int result = -1; int skipped = 0; for (int i = 0; i < KoUnit::TypeCount; ++i) { - if ((listOptions&HidePixel) && (typesInUi[i] == Pixel)) { - ++skipped; - continue; - } if (typesInUi[i] == m_type) { - result = i - skipped; + result = i; break; } } @@ -151,7 +137,7 @@ case Cicero: return toCicero(ptValue); case Pixel: - return ptValue * m_pixelConversion; + return toPixel(ptValue) * m_pixelConversion; case Point: default: return toPoint(ptValue); @@ -160,25 +146,7 @@ qreal KoUnit::ptToUnit(const qreal ptValue, const KoUnit &unit) { - switch (unit.m_type) { - case Millimeter: - return POINT_TO_MM(ptValue); - case Centimeter: - return POINT_TO_CM(ptValue); - case Decimeter: - return POINT_TO_DM(ptValue); - case Inch: - return POINT_TO_INCH(ptValue); - case Pica: - return POINT_TO_PI(ptValue); - case Cicero: - return POINT_TO_CC(ptValue); - case Pixel: - return ptValue * unit.m_pixelConversion; - case Point: - default: - return ptValue; - } + return unit.toUserValue(ptValue); } QString KoUnit::toUserStringValue(qreal ptValue) const @@ -202,7 +170,7 @@ case Cicero: return CC_TO_POINT(value); case Pixel: - return value / m_pixelConversion; + return PX_TO_POINT(value) / m_pixelConversion; case Point: default: return value; @@ -283,54 +251,9 @@ qreal KoUnit::convertFromUnitToUnit(const qreal value, const KoUnit &fromUnit, const KoUnit &toUnit, qreal factor) { - qreal pt; - switch (fromUnit.type()) { - case Millimeter: - pt = MM_TO_POINT(value); - break; - case Centimeter: - pt = CM_TO_POINT(value); - break; - case Decimeter: - pt = DM_TO_POINT(value); - break; - case Inch: - pt = INCH_TO_POINT(value); - break; - case Pica: - pt = PI_TO_POINT(value); - break; - case Cicero: - pt = CC_TO_POINT(value); - break; - case Pixel: - pt = value / factor; - break; - case Point: - default: - pt = value; - } - - switch (toUnit.type()) { - case Millimeter: - return POINT_TO_MM(pt); - case Centimeter: - return POINT_TO_CM(pt); - case Decimeter: - return POINT_TO_DM(pt); - case Inch: - return POINT_TO_INCH(pt); - case Pica: - return POINT_TO_PI(pt); - case Cicero: - return POINT_TO_CC(pt); - case Pixel: - return pt * factor; - case Point: - default: - return pt; - } - + const KoUnit from(fromUnit.type(), factor); + const KoUnit result(toUnit.type(), factor); + return result.toUserValue(from.fromUserValue(value)); } QString KoUnit::symbol() const diff --git a/libs/odf/tests/TestKoUnit.cpp b/libs/odf/tests/TestKoUnit.cpp --- a/libs/odf/tests/TestKoUnit.cpp +++ b/libs/odf/tests/TestKoUnit.cpp @@ -25,7 +25,6 @@ #include Q_DECLARE_METATYPE(KoUnit::Type) -Q_DECLARE_METATYPE(KoUnit::ListOptions) void TestKoUnit::testSimpleConstructor() @@ -59,7 +58,7 @@ { KoUnit unit(KoUnit::Pixel, 0.5); QCOMPARE(unit.type(), KoUnit::Pixel); - QCOMPARE(KoUnit::ptToUnit(100, unit), (qreal)50); + QCOMPARE(KoUnit::ptToUnit(100, unit), qreal(66.65)); } void TestKoUnit::testAssignOperator_data() @@ -125,38 +124,28 @@ void TestKoUnit::testListForUi_data() { - QTest::addColumn("listOptions"); QTest::addColumn("index"); - const QVector optionsList = - QVector() << KoUnit::HidePixel << KoUnit::ListAll; - static const char* const optionsName[2] = {"HidePixel", "ListDefault"}; static const char* const indexName[3] = {"-start", "-middle", "-end"}; - for (int o = 0; o < optionsList.count(); ++o) { - const KoUnit::ListOptions options = optionsList.at(o); - const int unitCount = KoUnit::listOfUnitNameForUi(options).count(); - for (int i = 0; i < 3; ++i) { - const int index = - (i == 0) ? 0 : - (i == 1) ? unitCount/2 : - /*i == 2*/ unitCount-1; + const int unitCount = KoUnit::listOfUnitNameForUi().count(); + for (int i = 0; i < 3; ++i) { + const int index = + (i == 0) ? 0 : + (i == 1) ? unitCount/2 : + /*i == 2*/ unitCount-1; - const QString rowName = QLatin1String(optionsName[o]) + QLatin1String(indexName[i]); - - QTest::newRow(rowName.toLatin1().constData()) << options << index; - } + QTest::newRow(indexName[i]) << index; } } void TestKoUnit::testListForUi() { - QFETCH(KoUnit::ListOptions, listOptions); QFETCH(int, index); - KoUnit unit = KoUnit::fromListForUi(index, listOptions); + KoUnit unit = KoUnit::fromListForUi(index); - QCOMPARE(unit.indexInListForUi(listOptions), index); + QCOMPARE(unit.indexInListForUi(), index); } QTEST_GUILESS_MAIN(TestKoUnit) diff --git a/libs/widgets/KoPageLayoutWidget.cpp b/libs/widgets/KoPageLayoutWidget.cpp --- a/libs/widgets/KoPageLayoutWidget.cpp +++ b/libs/widgets/KoPageLayoutWidget.cpp @@ -63,7 +63,7 @@ width = qMax(width, qMax(d->widget.leftLabel->width(), d->widget.rightLabel->width())); d->widget.leftLabel->setMinimumSize(QSize(width, 5)); - d->widget.units->addItems(KoUnit::listOfUnitNameForUi(KoUnit::HidePixel)); + d->widget.units->addItems(KoUnit::listOfUnitNameForUi()); d->widget.sizes->addItems(KoPageFormat::localizedPageFormatNames()); setPageSpread(false); @@ -130,7 +130,7 @@ void KoPageLayoutWidget::unitChanged(int row) { - setUnit(KoUnit::fromListForUi(row, KoUnit::HidePixel)); + setUnit(KoUnit::fromListForUi(row)); } void KoPageLayoutWidget::setUnit(const KoUnit &unit) @@ -145,7 +145,7 @@ d->widget.bottomMargin->setUnit(unit); d->widget.bindingEdgeMargin->setUnit(unit); d->widget.pageEdgeMargin->setUnit(unit); - d->widget.units->setCurrentIndex(unit.indexInListForUi(KoUnit::HidePixel)); + d->widget.units->setCurrentIndex(unit.indexInListForUi()); emit unitChanged(d->unit); } diff --git a/plan/src/libs/main/KoView_p.h b/plan/src/libs/main/KoView_p.h --- a/plan/src/libs/main/KoView_p.h +++ b/plan/src/libs/main/KoView_p.h @@ -36,14 +36,13 @@ explicit UnitActionGroup(KoDocument *document, bool addPixelUnit, QObject* parent = 0) : QActionGroup(parent) , m_document(document) - , m_listOptions(addPixelUnit ? KoUnit::ListAll : KoUnit::HidePixel) { setExclusive(true); connect(this, SIGNAL(triggered(QAction*)), SLOT(onTriggered(QAction*))); connect(document, SIGNAL(unitChanged(KoUnit)), SLOT(onUnitChanged(KoUnit))); - const QStringList unitNames = KoUnit::listOfUnitNameForUi(m_listOptions); - const int currentUnitIndex = m_document->unit().indexInListForUi(m_listOptions); + const QStringList unitNames = KoUnit::listOfUnitNameForUi(); + const int currentUnitIndex = m_document->unit().indexInListForUi(); for (int i = 0; i < unitNames.count(); ++i) { QAction* action = new QAction(unitNames.at(i), this); diff --git a/plan/src/libs/odf/tests/TestKoUnit.cpp b/plan/src/libs/odf/tests/TestKoUnit.cpp --- a/plan/src/libs/odf/tests/TestKoUnit.cpp +++ b/plan/src/libs/odf/tests/TestKoUnit.cpp @@ -25,7 +25,6 @@ #include Q_DECLARE_METATYPE(KoUnit::Type) -Q_DECLARE_METATYPE(KoUnit::ListOptions) void TestKoUnit::testSimpleConstructor() @@ -59,7 +58,7 @@ { KoUnit unit(KoUnit::Pixel, 0.5); QCOMPARE(unit.type(), KoUnit::Pixel); - QCOMPARE(KoUnit::ptToUnit(100, unit), (qreal)50); + QCOMPARE(KoUnit::ptToUnit(100, unit), qreal(66.65)); } void TestKoUnit::testAssignOperator_data() @@ -125,38 +124,28 @@ void TestKoUnit::testListForUi_data() { - QTest::addColumn("listOptions"); QTest::addColumn("index"); - const QVector optionsList = - QVector() << KoUnit::HidePixel << KoUnit::ListAll; - static const char* const optionsName[2] = {"HidePixel", "ListDefault"}; static const char* const indexName[3] = {"-start", "-middle", "-end"}; - for (int o = 0; o < optionsList.count(); ++o) { - const KoUnit::ListOptions options = optionsList.at(o); - const int unitCount = KoUnit::listOfUnitNameForUi(options).count(); - for (int i = 0; i < 3; ++i) { - const int index = - (i == 0) ? 0 : - (i == 1) ? unitCount/2 : - /*i == 2*/ unitCount-1; + const int unitCount = KoUnit::listOfUnitNameForUi().count(); + for (int i = 0; i < 3; ++i) { + const int index = + (i == 0) ? 0 : + (i == 1) ? unitCount/2 : + /*i == 2*/ unitCount-1; - const QString rowName = QLatin1String(optionsName[o]) + QLatin1String(indexName[i]); - - QTest::newRow(rowName.toLatin1().constData()) << options << index; - } + QTest::newRow(indexName[i]) << index; } } void TestKoUnit::testListForUi() { - QFETCH(KoUnit::ListOptions, listOptions); QFETCH(int, index); - KoUnit unit = KoUnit::fromListForUi(index, listOptions); + KoUnit unit = KoUnit::fromListForUi(index); - QCOMPARE(unit.indexInListForUi(listOptions), index); + QCOMPARE(unit.indexInListForUi(), index); } QTEST_GUILESS_MAIN(TestKoUnit) diff --git a/plan/src/libs/widgets/KoPageLayoutWidget.cpp b/plan/src/libs/widgets/KoPageLayoutWidget.cpp --- a/plan/src/libs/widgets/KoPageLayoutWidget.cpp +++ b/plan/src/libs/widgets/KoPageLayoutWidget.cpp @@ -63,7 +63,7 @@ width = qMax(width, qMax(d->widget.leftLabel->width(), d->widget.rightLabel->width())); d->widget.leftLabel->setMinimumSize(QSize(width, 5)); - d->widget.units->addItems(KoUnit::listOfUnitNameForUi(KoUnit::HidePixel)); + d->widget.units->addItems(KoUnit::listOfUnitNameForUi()); d->widget.sizes->addItems(KoPageFormat::localizedPageFormatNames()); setPageSpread(false); @@ -130,7 +130,7 @@ void KoPageLayoutWidget::unitChanged(int row) { - setUnit(KoUnit::fromListForUi(row, KoUnit::HidePixel)); + setUnit(KoUnit::fromListForUi(row)); } void KoPageLayoutWidget::setUnit(const KoUnit &unit) @@ -145,7 +145,7 @@ d->widget.bottomMargin->setUnit(unit); d->widget.bindingEdgeMargin->setUnit(unit); d->widget.pageEdgeMargin->setUnit(unit); - d->widget.units->setCurrentIndex(unit.indexInListForUi(KoUnit::HidePixel)); + d->widget.units->setCurrentIndex(unit.indexInListForUi()); emit unitChanged(d->unit); } diff --git a/sheets/part/Doc.cpp b/sheets/part/Doc.cpp --- a/sheets/part/Doc.cpp +++ b/sheets/part/Doc.cpp @@ -197,7 +197,7 @@ KSharedConfigPtr config = Factory::global().config(); const int page = config->group("Tables Page Layout").readEntry("Default unit page", 0); - setUnit(KoUnit::fromListForUi(page, KoUnit::HidePixel)); + setUnit(KoUnit::fromListForUi(page)); } int Doc::supportedSpecialFormats() const diff --git a/sheets/part/dialogs/PreferenceDialog.cpp b/sheets/part/dialogs/PreferenceDialog.cpp --- a/sheets/part/dialogs/PreferenceDialog.cpp +++ b/sheets/part/dialogs/PreferenceDialog.cpp @@ -140,7 +140,7 @@ } const int unitIndex = interfaceOptions.m_unit->currentIndex(); - const KoUnit unit = KoUnit::fromListForUi(unitIndex, KoUnit::ListAll); + const KoUnit unit = KoUnit::fromListForUi(unitIndex); if (unit != view->doc()->unit()) { view->doc()->setUnit(unit); // TODO: this is never read, still needed? @@ -228,7 +228,7 @@ interfaceOptions.m_cursorMovement->setCurrentIndex(moveToIndex); const int functionIndex = interfaceOptions.m_statusBarFunction->findData(oldFunction); interfaceOptions.m_statusBarFunction->setCurrentIndex(functionIndex); - interfaceOptions.m_unit->setCurrentIndex(oldUnit.indexInListForUi(KoUnit::ListAll)); + interfaceOptions.m_unit->setCurrentIndex(oldUnit.indexInListForUi()); interfaceOptions.m_indentationStep->changeValue(oldIndentationStep); interfaceOptions.m_gridColor->setColor(oldGridColor); interfaceOptions.m_pageOutlineColor->setColor(oldPageOutlineColor); @@ -338,7 +338,7 @@ d->interfaceOptions.m_statusBarFunction->addItem(i18n("None"), NoneCalc); KComboBox* unitComboBox = d->interfaceOptions.m_unit; - unitComboBox->addItems(KoUnit::listOfUnitNameForUi(KoUnit::ListAll)); + unitComboBox->addItems(KoUnit::listOfUnitNameForUi()); connect(unitComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(unitChanged(int))); unitChanged(0); @@ -450,7 +450,7 @@ void PreferenceDialog::unitChanged(int index) { - const KoUnit unit = KoUnit::fromListForUi(index, KoUnit::ListAll); + const KoUnit unit = KoUnit::fromListForUi(index); d->interfaceOptions.m_indentationStep->setUnit(unit); }