#include "lrreporttranslation.h" #include "lrbasedesignintf.h" #include "lrpagedesignintf.h" namespace LimeReport{ ReportTranslation::ReportTranslation(QLocale::Language language, QList pages) : m_language(language) { foreach (PageDesignIntf* page, pages){ m_pagesTranslation.append(createPageTranslation(page)); } } ReportTranslation::ReportTranslation(const ReportTranslation& reportTranslation) :m_language(reportTranslation.m_language) { foreach(PageTranslation* pageTranslation, reportTranslation.m_pagesTranslation){ m_pagesTranslation.append(pageTranslation); } } ReportTranslation::~ReportTranslation() { foreach(PageTranslation* page, m_pagesTranslation){ delete page; } m_pagesTranslation.clear(); } PageTranslation* ReportTranslation::createPageTranslation(PageDesignIntf* page) { PageTranslation* pageTranslation = new PageTranslation; pageTranslation->checked = true; pageTranslation->pageName = page->pageItem()->objectName(); foreach(BaseDesignIntf* item, page->pageItem()->allChildBaseItems()){ createItemTranslation(item, pageTranslation); } return pageTranslation; } void ReportTranslation::createItemTranslation(BaseDesignIntf* item, PageTranslation* pageTranslation){ QMap stringsForTranslation = item->getStringForTranslation(); if (!stringsForTranslation.isEmpty()){ ItemTranslation* itemTranslation = new ItemTranslation; itemTranslation->checked = true; itemTranslation->itemName = item->objectName(); foreach(QString propertyName, stringsForTranslation.keys()){ PropertyTranslation* propertyTranslation = new PropertyTranslation; propertyTranslation->propertyName = propertyName; propertyTranslation->value = stringsForTranslation.value(propertyName); propertyTranslation->sourceValue = stringsForTranslation.value(propertyName); propertyTranslation->checked = false; propertyTranslation->sourceHasBeenChanged = false; itemTranslation->propertyesTranslation.append(propertyTranslation); } pageTranslation->itemsTranslation.insert(itemTranslation->itemName, itemTranslation); } } PageTranslation* ReportTranslation::findPageTranslation(const QString& pageName) { foreach(PageTranslation* page, m_pagesTranslation){ if (page->pageName.compare(pageName) == 0){ return page; } } return 0; } void ReportTranslation::renamePage(const QString &oldName, const QString &newName) { PageTranslation* page = findPageTranslation(oldName); if (page){ page->pageName = newName; } } void ReportTranslation::invalidatePages() { foreach(PageTranslation* page, m_pagesTranslation){ page->checked = false; } } void ReportTranslation::clearInvalidPages() { QList::Iterator it = m_pagesTranslation.begin(); while (it != m_pagesTranslation.end()){ if (!(*it)->checked){ delete *it; it = m_pagesTranslation.erase(it); } else ++it; } } void ReportTranslation::updatePageTranslation(PageDesignIntf* page) { PageTranslation* pageTranslation = findPageTranslation(page->pageItem()->objectName()); if (!pageTranslation){ pageTranslation = createPageTranslation(page); m_pagesTranslation.append(pageTranslation); } if (pageTranslation){ pageTranslation->checked = true; foreach(ItemTranslation* item, pageTranslation->itemsTranslation){ item->checked = false; } foreach(BaseDesignIntf* item, page->pageItem()->allChildBaseItems()){ QMap stringsForTranslation = item->getStringForTranslation(); if (!stringsForTranslation.isEmpty()){ ItemTranslation* itemTranslation = pageTranslation->itemsTranslation.value(item->objectName()); if (itemTranslation){ foreach(QString propertyName, stringsForTranslation.keys()){ PropertyTranslation* propertyTranslation = itemTranslation->findProperty(propertyName); bool translated = propertyTranslation->sourceValue != propertyTranslation->value; if (propertyTranslation->checked) propertyTranslation->sourceHasBeenChanged = propertyTranslation->sourceValue != stringsForTranslation.value(propertyName); if (propertyTranslation->sourceHasBeenChanged) propertyTranslation->checked = false; propertyTranslation->sourceValue = stringsForTranslation.value(propertyName); if (!translated) propertyTranslation->value = propertyTranslation->sourceValue; } itemTranslation->checked = true; } else { createItemTranslation(item, pageTranslation); } } } QHash::Iterator it = pageTranslation->itemsTranslation.begin(); while( it != pageTranslation->itemsTranslation.end()){ if (!it.value()->checked) { delete it.value(); it = pageTranslation->itemsTranslation.erase(it); } else ++it; } } } QList& ReportTranslation::pagesTranslation() { return m_pagesTranslation; } PageTranslation*ReportTranslation::createEmptyPageTranslation() { PageTranslation* pageTranslation = new PageTranslation; m_pagesTranslation.append(pageTranslation); return pageTranslation; } QLocale::Language ReportTranslation::language() const { return m_language; } PropertyTranslation* ItemTranslation::findProperty(const QString& propertyName) { foreach(PropertyTranslation* propertyTranslation, propertyesTranslation){ if (propertyTranslation->propertyName.compare(propertyName) == 0){ return propertyTranslation; } } return 0; } ItemTranslation::~ItemTranslation() { foreach(PropertyTranslation* property, propertyesTranslation){ delete property; } } PageTranslation::~PageTranslation() { foreach(ItemTranslation* item, itemsTranslation){ delete item; } } void PageTranslation::renameItem(const QString &oldName, const QString &newName) { ItemTranslation* item = itemsTranslation.value(oldName); if (item){ itemsTranslation.remove(oldName); item->itemName = newName; itemsTranslation[newName] = item; } } } //namespace LimeReport