mirror of
https://github.com/fralx/LimeReport.git
synced 2024-12-24 00:33:02 +03:00
Translation has been updated
This commit is contained in:
parent
881089fd2f
commit
8c5a9fcd91
@ -72,6 +72,7 @@ class LIMEREPORT_EXPORT ReportEngine : public QObject{
|
||||
Q_OBJECT
|
||||
friend class ReportDesignWidget;
|
||||
friend class PreviewReportWidget;
|
||||
friend class TranslationEditor;
|
||||
public:
|
||||
static void setSettings(QSettings *value){m_settings=value;}
|
||||
public:
|
||||
|
@ -72,6 +72,7 @@ SOURCES += \
|
||||
$$REPORT_PATH/items/lrtextitemeditor.cpp \
|
||||
$$REPORT_PATH/items/lrshapeitem.cpp \
|
||||
$$REPORT_PATH/items/lrtextitem.cpp \
|
||||
$$REPORT_PATH/translationeditor/translationeditor.cpp \
|
||||
$$REPORT_PATH/lrbanddesignintf.cpp \
|
||||
$$REPORT_PATH/lrpageitemdesignintf.cpp \
|
||||
$$REPORT_PATH/lrpagedesignintf.cpp \
|
||||
@ -172,6 +173,7 @@ HEADERS += \
|
||||
$$REPORT_PATH/items/lrshapeitem.h \
|
||||
$$REPORT_PATH/items/lrimageitem.h \
|
||||
$$REPORT_PATH/items/lrsimpletagparser.h \
|
||||
$$REPORT_PATH/translationeditor/translationeditor.h \
|
||||
$$REPORT_PATH/lrfactoryinitializer.h \
|
||||
$$REPORT_PATH/lrbanddesignintf.h \
|
||||
$$REPORT_PATH/lrpageitemdesignintf.h \
|
||||
@ -204,7 +206,7 @@ HEADERS += \
|
||||
$$REPORT_PATH/lrsettingdialog.h \
|
||||
$$REPORT_PATH/lrpreviewreportwidget_p.h \
|
||||
$$REPORT_PATH/lritemscontainerdesignitf.h \
|
||||
$$REPORT_PATH/lrcolorindicator.h \
|
||||
$$REPORT_PATH/lrcolorindicator.h \
|
||||
$$REPORT_PATH/items/lrchartitem.h \
|
||||
$$REPORT_PATH/items/lrchartitemeditor.h \
|
||||
$$REPORT_PATH/lrreporttranslation.h
|
||||
@ -229,12 +231,13 @@ FORMS += \
|
||||
$$REPORT_PATH/lraboutdialog.ui \
|
||||
$$REPORT_PATH/lrsettingdialog.ui \
|
||||
$$REPORT_PATH/scriptbrowser/lrscriptbrowser.ui \
|
||||
$$REPORT_PATH/items/lrchartitemeditor.ui
|
||||
$$REPORT_PATH/items/lrchartitemeditor.ui \
|
||||
$$REPORT_PATH/translationeditor/translationeditor.ui
|
||||
|
||||
RESOURCES += \
|
||||
$$REPORT_PATH/objectinspector/lobjectinspector.qrc \
|
||||
$$REPORT_PATH/databrowser/lrdatabrowser.qrc \
|
||||
$$REPORT_PATH/report.qrc \
|
||||
$$REPORT_PATH/items/items.qrc \
|
||||
$$REPORT_PATH/scriptbrowser/lrscriptbrowser.qrc
|
||||
|
||||
$$REPORT_PATH/scriptbrowser/lrscriptbrowser.qrc \
|
||||
$$REPORT_PATH/translationeditor/translationeditor.qrc
|
||||
|
@ -86,7 +86,6 @@ contains(CONFIG,zint){
|
||||
}
|
||||
}
|
||||
|
||||
#######
|
||||
####Automatically build required translation files (*.qm)
|
||||
|
||||
contains(CONFIG,build_translations){
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include "lrbasedesignintf.h"
|
||||
#include "lrsettingdialog.h"
|
||||
#include "dialogdesigner/lrdialogdesigner.h"
|
||||
#include "translationeditor/translationeditor.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QObject>
|
||||
@ -137,6 +138,7 @@ ReportDesignWidget::EditorTabType ReportDesignWidget::activeTabType()
|
||||
QString tabType = m_tabWidget->tabWhatsThis(m_tabWidget->currentIndex());
|
||||
if ( tabType.compare("dialog") == 0) return Dialog;
|
||||
if ( tabType.compare("script") == 0) return Script;
|
||||
if ( tabType.compare("translations") == 0) return Translations;
|
||||
return Page;
|
||||
}
|
||||
|
||||
@ -245,10 +247,13 @@ void ReportDesignWidget::createTabs(){
|
||||
dialogDesigner = m_dialogDesignerManager->createFormEditor(dialogDesc->description());
|
||||
pageIndex = m_tabWidget->addTab(dialogDesigner,QIcon(),dialogDesc->name());
|
||||
m_tabWidget->setTabWhatsThis(pageIndex,"dialog");
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
m_traslationEditor = new TranslationEditor(this);
|
||||
pageIndex = m_tabWidget->addTab(m_traslationEditor,QIcon(),tr("Translations"));
|
||||
m_tabWidget->setTabWhatsThis(pageIndex,"translations");
|
||||
|
||||
}
|
||||
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
@ -771,6 +776,9 @@ void ReportDesignWidget::slotCurrentTabChanged(int index)
|
||||
}
|
||||
updateDialogs();
|
||||
#endif
|
||||
if (activeTabType() == Translations){
|
||||
m_traslationEditor->setReportEngine(report());
|
||||
}
|
||||
emit activePageChanged();
|
||||
}
|
||||
|
||||
|
@ -50,6 +50,7 @@ class DataBrowser;
|
||||
class ReportDesignWindow;
|
||||
class DialogDesignerManager;
|
||||
class DialogDesigner;
|
||||
class TranslationEditor;
|
||||
|
||||
class ReportDesignWidget : public QWidget
|
||||
{
|
||||
@ -67,7 +68,8 @@ public:
|
||||
enum EditorTabType{
|
||||
Page,
|
||||
Dialog,
|
||||
Script
|
||||
Script,
|
||||
Translations
|
||||
};
|
||||
ReportDesignWidget(ReportEngine* report, QMainWindow *mainWindow, QWidget *parent = 0);
|
||||
~ReportDesignWidget();
|
||||
@ -186,6 +188,7 @@ private:
|
||||
ReportEnginePrivate* m_report;
|
||||
QGraphicsView *m_view;
|
||||
QTextEdit* m_scriptEditor;
|
||||
TranslationEditor* m_traslationEditor;
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
DialogDesignerManager* m_dialogDesignerManager;
|
||||
#endif
|
||||
|
@ -167,6 +167,15 @@ void ReportEnginePrivate::showError(QString message)
|
||||
QMessageBox::critical(0,tr("Error"),message);
|
||||
}
|
||||
|
||||
void ReportEnginePrivate::updateTranslations()
|
||||
{
|
||||
foreach(ReportTranslation* translation, m_translations.values()){
|
||||
foreach(PageDesignIntf* page, m_pages){
|
||||
translation->updatePageTranslation(page);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ReportEnginePrivate::slotDataSourceCollectionLoaded(const QString &collectionName)
|
||||
{
|
||||
emit datasourceCollectionLoadFinished(collectionName);
|
||||
@ -775,11 +784,11 @@ bool ReportEnginePrivate::setReportLanguage(QLocale::Language language){
|
||||
foreach(PageTranslation* pageTranslation, translation->pagesTranslation()){
|
||||
PageDesignIntf* page = getPageByName(pageTranslation->pageName);
|
||||
if (page){
|
||||
foreach(ItemTranslation itemTranslation, pageTranslation->itemsTranslation){
|
||||
BaseDesignIntf* item = page->pageItem()->childByName(itemTranslation.itemName);
|
||||
foreach(ItemTranslation* itemTranslation, pageTranslation->itemsTranslation){
|
||||
BaseDesignIntf* item = page->pageItem()->childByName(itemTranslation->itemName);
|
||||
if (item) {
|
||||
foreach(PropertyTranslation propertyTranslation, itemTranslation.propertyesTranslation){
|
||||
item->setProperty(propertyTranslation.propertyName.toLatin1(),propertyTranslation.value);
|
||||
foreach(PropertyTranslation* propertyTranslation, itemTranslation->propertyesTranslation){
|
||||
item->setProperty(propertyTranslation->propertyName.toLatin1(), propertyTranslation->value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -72,6 +72,7 @@ class LIMEREPORT_EXPORT ReportEngine : public QObject{
|
||||
Q_OBJECT
|
||||
friend class ReportDesignWidget;
|
||||
friend class PreviewReportWidget;
|
||||
friend class TranslationEditor;
|
||||
public:
|
||||
static void setSettings(QSettings *value){m_settings=value;}
|
||||
public:
|
||||
|
@ -135,7 +135,6 @@ public:
|
||||
bool setReportLanguage(QLocale::Language language);
|
||||
QList<QLocale::Language> aviableLanguages();
|
||||
ReportTranslation* reportTranslation(QLocale::Language language);
|
||||
|
||||
signals:
|
||||
void pagesLoadFinished();
|
||||
void datasourceCollectionLoadFinished(const QString& collectionName);
|
||||
@ -166,6 +165,7 @@ private:
|
||||
//ICollectionContainer
|
||||
//ITranslationContainer
|
||||
Translations* translations(){ return &m_translations;}
|
||||
void updateTranslations();
|
||||
//ITranslationContainer
|
||||
ReportPages renderToPages();
|
||||
QString renderToString();
|
||||
|
@ -34,22 +34,65 @@ PageTranslation* ReportTranslation::createPageTranslation(PageDesignIntf* page)
|
||||
PageTranslation* pageTranslation = new PageTranslation;
|
||||
pageTranslation->pageName = page->objectName();
|
||||
foreach(BaseDesignIntf* item, page->pageItem()->allChildBaseItems()){
|
||||
QMap<QString,QString> stringsForTranslation = item->getStringForTranslation();
|
||||
if (!stringsForTranslation.isEmpty()){
|
||||
ItemTranslation itemTranslation;
|
||||
itemTranslation.itemName = item->objectName();
|
||||
foreach(QString propertyName, stringsForTranslation.keys()){
|
||||
PropertyTranslation propertyTranslation;
|
||||
propertyTranslation.propertyName = propertyName;
|
||||
propertyTranslation.value = stringsForTranslation.value(propertyName);
|
||||
itemTranslation.propertyesTranslation.append(propertyTranslation);
|
||||
}
|
||||
pageTranslation->itemsTranslation.append(itemTranslation);
|
||||
}
|
||||
createItemTranslation(item, pageTranslation);
|
||||
}
|
||||
return pageTranslation;
|
||||
}
|
||||
|
||||
void ReportTranslation::createItemTranslation(BaseDesignIntf* item, PageTranslation* pageTranslation){
|
||||
QMap<QString,QString> 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<QString,QString> 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<PageTranslation*> ReportTranslation::pagesTranslation() const
|
||||
{
|
||||
return m_pagesTranslation;
|
||||
@ -67,4 +110,28 @@ 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
|
||||
|
@ -24,16 +24,22 @@ namespace LimeReport{
|
||||
struct PropertyTranslation{
|
||||
QString propertyName;
|
||||
QString value;
|
||||
QString sourceValue;
|
||||
bool checked;
|
||||
bool sourceHasBeenChanged;
|
||||
};
|
||||
|
||||
struct ItemTranslation{
|
||||
QString itemName;
|
||||
QList<PropertyTranslation> propertyesTranslation;
|
||||
PropertyTranslation* findProperty(const QString& propertyName);
|
||||
~ItemTranslation();
|
||||
QList<PropertyTranslation*> propertyesTranslation;
|
||||
};
|
||||
|
||||
struct PageTranslation{
|
||||
QString pageName;
|
||||
QList<ItemTranslation> itemsTranslation;
|
||||
~PageTranslation();
|
||||
QHash<QString,ItemTranslation*> itemsTranslation;
|
||||
};
|
||||
|
||||
class ReportTranslation{
|
||||
@ -45,6 +51,9 @@ public:
|
||||
QLocale::Language language() const;
|
||||
QList<PageTranslation*> pagesTranslation() const;
|
||||
PageTranslation* createEmptyPageTranslation();
|
||||
void updatePageTranslation(PageDesignIntf* page);
|
||||
PageTranslation* findPageTranslation(const QString& page_name);
|
||||
void createItemTranslation(BaseDesignIntf* item, PageTranslation* pageTranslation);
|
||||
private:
|
||||
PageTranslation* createPageTranslation(PageDesignIntf* page);
|
||||
private:
|
||||
@ -58,6 +67,7 @@ typedef QMap<QLocale::Language, ReportTranslation*> Translations;
|
||||
class ITranslationContainer{
|
||||
public:
|
||||
virtual Translations* translations() = 0;
|
||||
virtual void updateTranslations() = 0;
|
||||
};
|
||||
|
||||
} // namespace LimeReport
|
||||
|
@ -217,16 +217,18 @@ void XMLReader::readTranslation(QObject* item, QDomElement* node)
|
||||
pageTranslation->pageName = pageNode.nodeName();
|
||||
for (int itemIndex = 0; itemIndex < pageNode.childNodes().count(); ++itemIndex){
|
||||
QDomElement itemNode = pageNode.childNodes().at(itemIndex).toElement();
|
||||
ItemTranslation itemTranslation;
|
||||
itemTranslation.itemName = itemNode.nodeName();
|
||||
ItemTranslation* itemTranslation = new ItemTranslation();
|
||||
itemTranslation->itemName = itemNode.nodeName();
|
||||
for (int propertyIndex = 0; propertyIndex < itemNode.childNodes().count(); ++propertyIndex){
|
||||
QDomElement propertyNode = itemNode.childNodes().at(propertyIndex).toElement();
|
||||
PropertyTranslation propertyTranslation;
|
||||
propertyTranslation.propertyName = propertyNode.nodeName();
|
||||
propertyTranslation.value = propertyNode.attribute("Value");
|
||||
itemTranslation.propertyesTranslation.append(propertyTranslation);
|
||||
PropertyTranslation* propertyTranslation = new PropertyTranslation;
|
||||
propertyTranslation->propertyName = propertyNode.nodeName();
|
||||
propertyTranslation->value = propertyNode.attribute("Value");
|
||||
propertyTranslation->sourceValue = propertyNode.attribute("SourceValue");
|
||||
propertyTranslation->checked = propertyNode.attribute("Checked").compare("Y") == 0;
|
||||
itemTranslation->propertyesTranslation.append(propertyTranslation);
|
||||
}
|
||||
pageTranslation->itemsTranslation.append(itemTranslation);
|
||||
pageTranslation->itemsTranslation.insert(itemTranslation->itemName, itemTranslation);
|
||||
}
|
||||
}
|
||||
translations->insert(curTranslation->language(),curTranslation);
|
||||
|
@ -230,12 +230,14 @@ void XMLWriter::saveTranslation(QString propertyName, QObject* item, QDomElement
|
||||
foreach(PageTranslation* page, curTranslation->pagesTranslation()){
|
||||
QDomElement pageNode = m_doc->createElement(page->pageName);
|
||||
languageNode.appendChild(pageNode);
|
||||
foreach(ItemTranslation item, page->itemsTranslation){
|
||||
QDomElement itemNode = m_doc->createElement(item.itemName);
|
||||
foreach(ItemTranslation* item, page->itemsTranslation){
|
||||
QDomElement itemNode = m_doc->createElement(item->itemName);
|
||||
pageNode.appendChild(itemNode);
|
||||
foreach(PropertyTranslation property, item.propertyesTranslation){
|
||||
QDomElement propertyNode = m_doc->createElement(property.propertyName);
|
||||
propertyNode.setAttribute("Value",property.value);
|
||||
foreach(PropertyTranslation* property, item->propertyesTranslation){
|
||||
QDomElement propertyNode = m_doc->createElement(property->propertyName);
|
||||
propertyNode.setAttribute("Value",property->value);
|
||||
propertyNode.setAttribute("SourceValue", property->sourceValue);
|
||||
propertyNode.setAttribute("Checked", property->checked ? "Y":"N");
|
||||
itemNode.appendChild(propertyNode);
|
||||
}
|
||||
}
|
||||
|
BIN
limereport/translationeditor/images/add.png
Normal file
BIN
limereport/translationeditor/images/add.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 655 B |
BIN
limereport/translationeditor/images/checked.png
Normal file
BIN
limereport/translationeditor/images/checked.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 265 B |
BIN
limereport/translationeditor/images/green_check.png
Normal file
BIN
limereport/translationeditor/images/green_check.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
BIN
limereport/translationeditor/images/question.png
Normal file
BIN
limereport/translationeditor/images/question.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 542 B |
BIN
limereport/translationeditor/images/remove.png
Normal file
BIN
limereport/translationeditor/images/remove.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 867 B |
165
limereport/translationeditor/translationeditor.cpp
Normal file
165
limereport/translationeditor/translationeditor.cpp
Normal file
@ -0,0 +1,165 @@
|
||||
#include "translationeditor.h"
|
||||
#include "ui_translationeditor.h"
|
||||
#include "lrreportengine.h"
|
||||
#include "lrreportengine_p.h"
|
||||
#include "lrreporttranslation.h"
|
||||
|
||||
namespace LimeReport {
|
||||
|
||||
TranslationEditor::TranslationEditor(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::TranslationEditor), m_translationContainer(0)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->splitter_3->setStretchFactor(1,10);
|
||||
ui->splitter_3->setStretchFactor(0,2);
|
||||
ui->splitter_2->setStretchFactor(1,2);
|
||||
ui->splitter->setStretchFactor(0,2);
|
||||
QTableWidgetItem* item = new QTableWidgetItem();
|
||||
item->setIcon(QIcon(":/translationeditor/images/checked.png"));
|
||||
ui->tbStrings->setColumnCount(4);
|
||||
ui->tbStrings->setColumnWidth(0,30);
|
||||
ui->tbStrings->setColumnWidth(1,100);
|
||||
ui->tbStrings->setColumnWidth(2,100);
|
||||
ui->tbStrings->setHorizontalHeaderItem(0,item);
|
||||
ui->tbStrings->setHorizontalHeaderItem(1,new QTableWidgetItem(tr("Report Item")));
|
||||
ui->tbStrings->setHorizontalHeaderItem(2,new QTableWidgetItem(tr("Property")));
|
||||
ui->tbStrings->setHorizontalHeaderItem(3,new QTableWidgetItem(tr("Source text")));
|
||||
//ui->tbStrings->setSortingEnabled(true);
|
||||
|
||||
}
|
||||
|
||||
void TranslationEditor::setReportEngine(ITranslationContainer* translationContainer)
|
||||
{
|
||||
m_translationContainer = translationContainer;
|
||||
if (m_translationContainer){
|
||||
m_translationContainer->updateTranslations();
|
||||
updateUi();
|
||||
}
|
||||
}
|
||||
|
||||
TranslationEditor::~TranslationEditor()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
||||
void TranslationEditor::updateUi()
|
||||
{
|
||||
ui->lvLanguages->clear();
|
||||
|
||||
Q_ASSERT(m_translationContainer != 0);
|
||||
if (m_translationContainer){
|
||||
Translations* translations = m_translationContainer->translations();
|
||||
Q_ASSERT(translations != 0);
|
||||
if (translations){
|
||||
foreach(QLocale::Language language, translations->keys()){
|
||||
ui->lvLanguages->addItem(QLocale::languageToString(language));
|
||||
}
|
||||
if (!translations->keys().isEmpty()){
|
||||
ui->lvLanguages->item(0)->setSelected(true);
|
||||
activateLanguage(translations->keys().at(0));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TranslationEditor::activateLanguage(QLocale::Language language)
|
||||
{
|
||||
ui->teTranslation->setEnabled(false);
|
||||
ui->cbChecked->setEnabled(false);
|
||||
ui->twPages->clear();
|
||||
Translations* translations = m_translationContainer->translations();
|
||||
Q_ASSERT(translations != 0);
|
||||
if (translations){
|
||||
m_currentReportTranslation = translations->value(language);
|
||||
Q_ASSERT(m_currentReportTranslation != 0);
|
||||
if (m_currentReportTranslation){
|
||||
foreach(PageTranslation* pageTranslation, m_currentReportTranslation->pagesTranslation()){
|
||||
QTreeWidgetItem* pageItem = new QTreeWidgetItem();
|
||||
pageItem->setText(0,pageTranslation->pageName);
|
||||
ui->twPages->addTopLevelItem(pageItem);
|
||||
}
|
||||
}
|
||||
if (ui->twPages->topLevelItem(0)){
|
||||
ui->twPages->topLevelItem(0)->setSelected(true);
|
||||
activatePage(m_currentReportTranslation->findPageTranslation(ui->twPages->topLevelItem(0)->text(0)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TranslationEditor::activatePage(PageTranslation* pageTranslation)
|
||||
{
|
||||
ui->teTranslation->setEnabled(false);
|
||||
ui->cbChecked->setEnabled(false);
|
||||
Q_ASSERT(pageTranslation != 0);
|
||||
if(pageTranslation){
|
||||
ui->tbStrings->clearContents();
|
||||
ui->tbStrings->setRowCount(0);
|
||||
m_currentPageTranslation = pageTranslation;
|
||||
QStringList items = pageTranslation->itemsTranslation.keys();
|
||||
items.sort();
|
||||
foreach(QString itemName, items){
|
||||
ItemTranslation* itemTranslation = pageTranslation->itemsTranslation.value(itemName);
|
||||
int rowIndex = ui->tbStrings->rowCount();
|
||||
ui->tbStrings->setRowCount(rowIndex+1);
|
||||
foreach(PropertyTranslation* propertyTranslation, itemTranslation->propertyesTranslation){
|
||||
QTableWidgetItem* checkItem = new QTableWidgetItem();
|
||||
if (propertyTranslation->checked)
|
||||
checkItem->setIcon(QIcon(":/translationeditor/images/checked.png"));
|
||||
ui->tbStrings->setItem(rowIndex,0,checkItem);
|
||||
ui->tbStrings->setItem(rowIndex,1,new QTableWidgetItem(itemTranslation->itemName));
|
||||
ui->tbStrings->setItem(rowIndex,2,new QTableWidgetItem(propertyTranslation->propertyName));
|
||||
ui->tbStrings->setItem(rowIndex,3,new QTableWidgetItem(propertyTranslation->sourceValue));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void TranslationEditor::activateTranslation(const QString& itemName, const QString& propertyName)
|
||||
{
|
||||
Q_ASSERT(m_currentPageTranslation != 0);
|
||||
if (m_currentPageTranslation){
|
||||
ItemTranslation* itemTranslation = m_currentPageTranslation->itemsTranslation.value(itemName);
|
||||
Q_ASSERT(itemTranslation !=0 );
|
||||
if (itemTranslation){
|
||||
m_currentPropertyTranslation = m_currentPageTranslation->itemsTranslation.value(itemName)->findProperty(propertyName);
|
||||
Q_ASSERT(m_currentPropertyTranslation != 0);
|
||||
if (m_currentPropertyTranslation){
|
||||
ui->teTranslation->setEnabled(true);
|
||||
ui->cbChecked->setEnabled(true);
|
||||
ui->teTranslation->setText(m_currentPropertyTranslation->value);
|
||||
ui->cbChecked->setChecked(m_currentPropertyTranslation->checked);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TranslationEditor::on_tbStrings_itemSelectionChanged()
|
||||
{
|
||||
activateTranslation(ui->tbStrings->item(ui->tbStrings->currentRow(),1)->text(), ui->tbStrings->item(ui->tbStrings->currentRow(),2)->text());
|
||||
}
|
||||
|
||||
void TranslationEditor::on_teTranslation_textChanged()
|
||||
{
|
||||
m_currentPropertyTranslation->value = ui->teTranslation->toPlainText();
|
||||
}
|
||||
|
||||
void TranslationEditor::on_cbChecked_toggled(bool checked)
|
||||
{
|
||||
m_currentPropertyTranslation->checked = checked;
|
||||
ui->tbStrings->item(ui->tbStrings->currentRow(),0)->setIcon(checked ? QIcon(":/translationeditor/images/checked.png"):QIcon());
|
||||
}
|
||||
|
||||
void TranslationEditor::on_twPages_itemSelectionChanged()
|
||||
{
|
||||
if (!ui->twPages->selectedItems().isEmpty()){
|
||||
activatePage(m_currentReportTranslation->findPageTranslation(ui->twPages->selectedItems().at(0)->text(0)));
|
||||
}
|
||||
}
|
||||
|
||||
} //namespace LimeReport
|
||||
|
||||
|
||||
|
45
limereport/translationeditor/translationeditor.h
Normal file
45
limereport/translationeditor/translationeditor.h
Normal file
@ -0,0 +1,45 @@
|
||||
#ifndef TRANSLATIONEDITOR_H
|
||||
#define TRANSLATIONEDITOR_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QLocale>
|
||||
#include <QTreeWidgetItem>
|
||||
#include "lrreporttranslation.h"
|
||||
|
||||
namespace LimeReport {
|
||||
|
||||
namespace Ui {
|
||||
class TranslationEditor;
|
||||
}
|
||||
|
||||
|
||||
class TranslationEditor : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit TranslationEditor(QWidget *parent = 0);
|
||||
void setReportEngine(ITranslationContainer* translationContainer);
|
||||
~TranslationEditor();
|
||||
void updateUi();
|
||||
void activateLanguage(QLocale::Language language);
|
||||
void activatePage(PageTranslation* pageTranslation);
|
||||
void activateTranslation(const QString& itemName, const QString& propertyName);
|
||||
private slots:
|
||||
void on_tbStrings_itemSelectionChanged();
|
||||
void on_teTranslation_textChanged();
|
||||
void on_cbChecked_toggled(bool checked);
|
||||
void on_twPages_itemSelectionChanged();
|
||||
private:
|
||||
Ui::TranslationEditor *ui;
|
||||
ITranslationContainer* m_translationContainer;
|
||||
QMap<QString, ReportTranslation*> m_reportTranslations;
|
||||
QMap<QString, PageTranslation> m_pageTranslations;
|
||||
ReportTranslation* m_currentReportTranslation;
|
||||
PageTranslation* m_currentPageTranslation;
|
||||
PropertyTranslation* m_currentPropertyTranslation;
|
||||
};
|
||||
|
||||
} //namespace LimeReport
|
||||
|
||||
#endif // TRANSLATIONEDITOR_H
|
8
limereport/translationeditor/translationeditor.qrc
Normal file
8
limereport/translationeditor/translationeditor.qrc
Normal file
@ -0,0 +1,8 @@
|
||||
<RCC>
|
||||
<qresource prefix="/translationeditor">
|
||||
<file>images/add.png</file>
|
||||
<file>images/remove.png</file>
|
||||
<file>images/checked.png</file>
|
||||
<file>images/question.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
214
limereport/translationeditor/translationeditor.ui
Normal file
214
limereport/translationeditor/translationeditor.ui
Normal file
@ -0,0 +1,214 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>LimeReport::TranslationEditor</class>
|
||||
<widget class="QWidget" name="LimeReport::TranslationEditor">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>873</width>
|
||||
<height>525</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<widget class="QFrame" name="frame_2">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Languages</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="toolButton">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="translationeditor.qrc">
|
||||
<normaloff>:/translationeditor/images/add.png</normaloff>:/translationeditor/images/add.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="toolButton_2">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="translationeditor.qrc">
|
||||
<normaloff>:/translationeditor/images/remove.png</normaloff>:/translationeditor/images/remove.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QListWidget" name="lvLanguages"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>Pages</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QTreeWidget" name="twPages">
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="headerVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="title">
|
||||
<string>Strings</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<widget class="QTableWidget" name="tbStrings">
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<property name="columnCount">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderStretchLastSection">
|
||||
<bool>true</bool>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Source Text</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QGroupBox" name="groupBox_4">
|
||||
<property name="title">
|
||||
<string>Translation</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<item>
|
||||
<widget class="QTextEdit" name="teTranslation"/>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="cbChecked">
|
||||
<property name="text">
|
||||
<string>Checked</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="translationeditor.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
Loading…
Reference in New Issue
Block a user