#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->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->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& page_name) { foreach(PageTranslation* page, m_pagesTranslation){ if (page->pageName.compare(page_name) == 0){ return page; } } return 0; } void ReportTranslation::updatePageTranslation(PageDesignIntf* page) { PageTranslation* pageTranslation = findPageTranslation(page->objectName()); if (!pageTranslation){ pageTranslation = createPageTranslation(page); m_pagesTranslation.append(pageTranslation); } if (pageTranslation){ 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); propertyTranslation->sourceValue = stringsForTranslation.value(propertyName); propertyTranslation->sourceHasBeenChanged = propertyTranslation->value != propertyTranslation->sourceValue; } } else { createItemTranslation(item, pageTranslation); } } } } } QList ReportTranslation::pagesTranslation() const { 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; } } } //namespace LimeReport