From 01aa493e29a3114b396b9855207a1dc242f79a5e Mon Sep 17 00:00:00 2001 From: shibakaneki Date: Wed, 1 Feb 2012 14:03:36 +0100 Subject: [PATCH 01/24] Implemented the Teacher Bar Document Preview widget --- src/adaptors/UBMetadataDcSubsetAdaptor.cpp | 3 +- src/core/UBSettings.cpp | 1 + src/core/UBSettings.h | 1 + src/document/UBDocumentProxy.cpp | 9 ++ src/document/UBDocumentProxy.h | 1 + src/gui/UBTBDocumentPreviewWidget.cpp | 134 ++++++++++++++++++--- src/gui/UBTBDocumentPreviewWidget.h | 29 ++++- src/gui/UBTeacherBarDataMgr.cpp | 10 +- src/gui/UBTeacherBarDataMgr.h | 9 ++ 9 files changed, 177 insertions(+), 20 deletions(-) diff --git a/src/adaptors/UBMetadataDcSubsetAdaptor.cpp b/src/adaptors/UBMetadataDcSubsetAdaptor.cpp index 0dbdd5c5..10ee3cc4 100644 --- a/src/adaptors/UBMetadataDcSubsetAdaptor.cpp +++ b/src/adaptors/UBMetadataDcSubsetAdaptor.cpp @@ -276,7 +276,6 @@ QMap UBMetadataDcSubsetAdaptor::load(QString pPath) qWarning() << "Document size not found, using default view size" << docSize; metadata.insert(UBSettings::documentSize, QVariant(docSize)); - } if (!updatedAtFound) @@ -284,6 +283,8 @@ QMap UBMetadataDcSubsetAdaptor::load(QString pPath) metadata.insert(UBSettings::documentUpdatedAt, date + "T00:00:00Z"); } + metadata.insert(UBSettings::documentDate, QVariant(date)); + return metadata; } diff --git a/src/core/UBSettings.cpp b/src/core/UBSettings.cpp index b9819d52..f218f22c 100644 --- a/src/core/UBSettings.cpp +++ b/src/core/UBSettings.cpp @@ -43,6 +43,7 @@ QString UBSettings::sessionKeywords = QString("sessionKeywords"); QString UBSettings::sessionLevel = QString("sessionLevel"); QString UBSettings::sessionTopic = QString("sessionTopic"); QString UBSettings::sessionAuthors = QString("sessionAuthors"); +QString UBSettings::documentDate = QString("date"); QString UBSettings::trashedDocumentGroupNamePrefix = QString("_Trash:"); diff --git a/src/core/UBSettings.h b/src/core/UBSettings.h index 21b4d4e1..fd25cd4b 100644 --- a/src/core/UBSettings.h +++ b/src/core/UBSettings.h @@ -160,6 +160,7 @@ class UBSettings : public QObject static QString sessionLevel; static QString sessionTopic; static QString sessionAuthors; + static QString documentDate; static QString trashedDocumentGroupNamePrefix; diff --git a/src/document/UBDocumentProxy.cpp b/src/document/UBDocumentProxy.cpp index aafcfeda..add97241 100644 --- a/src/document/UBDocumentProxy.cpp +++ b/src/document/UBDocumentProxy.cpp @@ -295,6 +295,15 @@ QString UBDocumentProxy::sessionAuthors() return QString(); } +QString UBDocumentProxy::documentDate() +{ + if(mMetaDatas.contains(UBSettings::documentDate)){ + return metaData(UBSettings::documentDate).toString(); + }else{ + return QString(); + } +} + bool UBDocumentProxy::isModified() const { return mIsModified; diff --git a/src/document/UBDocumentProxy.h b/src/document/UBDocumentProxy.h index a8ec9b3b..6686a4f3 100644 --- a/src/document/UBDocumentProxy.h +++ b/src/document/UBDocumentProxy.h @@ -59,6 +59,7 @@ class UBDocumentProxy : public QObject QString sessionTopic(); void setSessionAuthor(const QString& authors); QString sessionAuthors(); + QString documentDate(); QSize defaultDocumentSize() const; diff --git a/src/gui/UBTBDocumentPreviewWidget.cpp b/src/gui/UBTBDocumentPreviewWidget.cpp index 39d75199..e5610061 100644 --- a/src/gui/UBTBDocumentPreviewWidget.cpp +++ b/src/gui/UBTBDocumentPreviewWidget.cpp @@ -4,27 +4,119 @@ UBTBDocumentPreviewWidget::UBTBDocumentPreviewWidget(UBTeacherBarDataMgr *pDataMgr, QWidget *parent, const char *name):QWidget(parent) , mpPageViewButton(NULL) , mpEditButton(NULL) + , mpSessionLabel(NULL) + , mpSessionTitle(NULL) + , mpAuthorLabel(NULL) + , mpAuthors(NULL) + , mpCreationDate(NULL) + , mpTargetLabel(NULL) + , mpTarget(NULL) + , mpMetadataLabel(NULL) + , mpKeywordLabel(NULL) + , mpKeyword(NULL) + , mpLevelLabel(NULL) + , mpLevel(NULL) + , mpTopicLabel(NULL) + , mpTopic(NULL) + , mpLicense(NULL) + , mpContainer(NULL) { setObjectName(name); mpDataMgr = pDataMgr; setLayout(&mLayout); + mLayout.setContentsMargins(0, 0, 0, 0); - mpPageViewButton = new QPushButton(tr("Page View"), this); - mpPageViewButton->setObjectName("DockPaletteWidgetButton"); - mPageLayout.addStretch(1); - mPageLayout.addWidget(mpPageViewButton, 0); - mPageLayout.addStretch(1); - mLayout.addLayout(&mPageLayout); + mpContainer = new QWidget(this); + mpContainer->setLayout(&mContainerLayout); + mpContainer->setObjectName("UBTeacherBarPreviewWidget"); + + // Session Title + mpSessionLabel = new QLabel(tr("Session"), mpContainer); + mpSessionLabel->setAlignment(Qt::AlignRight); + mpSessionLabel->setObjectName("UBTeacherBarPreviewSubtitle"); + mContainerLayout.addWidget(mpSessionLabel, 0); + mpSessionTitle = new QLabel(mpContainer); + mpSessionTitle->setWordWrap(true); + mpSessionTitle->setAlignment(Qt::AlignRight); + mpSessionTitle->setObjectName("UBTeacherBarPreviewTitle"); + mContainerLayout.addWidget(mpSessionTitle, 0); + mContainerLayout.addWidget(&mTitleSeparator, 0); + + // Author(s) + mpAuthorLabel = new QLabel(tr("Author(s)"), mpContainer); + mpAuthorLabel->setObjectName("UBTeacherBarPreviewSubtitle"); + mContainerLayout.addWidget(mpAuthorLabel, 0); + mpAuthors = new QLabel(mpContainer); + mpAuthors->setWordWrap(true); + mpAuthors->setStyleSheet("padding-left:5px;"); + mContainerLayout.addWidget(mpAuthors, 0); + mContainerLayout.addWidget(&mAuthorSeparator, 0); + + // Dates + mpCreationDate = new QLabel(tr("Created on: "), mpContainer); + mpCreationDate->setStyleSheet("padding-left:5px;"); + mContainerLayout.addWidget(mpCreationDate); + mContainerLayout.addWidget(&mDateSeparator, 0); + + // Target + mpTargetLabel = new QLabel(tr("Target"), mpContainer); + mpTargetLabel->setObjectName("UBTeacherBarPreviewSubtitle"); + mContainerLayout.addWidget(mpTargetLabel,0); + mpTarget = new QTextEdit(mpContainer); + mpTarget->setReadOnly(true); + mContainerLayout.addWidget(mpTarget, 1); + mContainerLayout.addWidget(&mTargetSeparator, 0); + + // Metadata + mpMetadataLabel = new QLabel(tr("Metadata"), mpContainer); + mpMetadataLabel->setObjectName("UBTeacherBarPreviewSubtitle"); + mContainerLayout.addWidget(mpMetadataLabel, 0); + + // Keyword + mpKeywordLabel = new QLabel(tr("Keywords:"), mpContainer); + mpKeywordLabel->setStyleSheet("padding-left:5px;"); + mpKeyword = new QLabel(mpContainer); + mpKeyword->setWordWrap(true); + mKeywordLayout.addWidget(mpKeywordLabel, 0); + mKeywordLayout.addWidget(mpKeyword, 1); + mContainerLayout.addLayout(&mKeywordLayout, 0); + + // Level + mpLevelLabel = new QLabel(tr("Level:"), mpContainer); + mpLevelLabel->setStyleSheet("padding-left:5px;"); + mpLevel = new QLabel(mpContainer); + mpLevel->setWordWrap(true); + mLevelLayout.addWidget(mpLevelLabel, 0); + mLevelLayout.addWidget(mpLevel, 1); + mContainerLayout.addLayout(&mLevelLayout, 0); - // TODO : Add the elements here + // Topic + mpTopicLabel = new QLabel(tr("Topic:"), mpContainer); + mpTopicLabel->setStyleSheet("padding-left:5px;"); + mpTopic = new QLabel(mpContainer); + mpTopic->setWordWrap(true); + mTopicLayout.addWidget(mpTopicLabel, 0); + mTopicLayout.addWidget(mpTopic, 1); + mContainerLayout.addLayout(&mTopicLayout, 0); + mContainerLayout.addWidget(&mMetadataSeparator, 0); + // License + mpLicense = new UBTBLicenseWidget(mpContainer); + mContainerLayout.addWidget(mpLicense, 0); + + mLayout.addWidget(mpContainer, 1); + + mpPageViewButton = new QPushButton(tr("Page View"), this); + mpPageViewButton->setObjectName("DockPaletteWidgetButton"); mpEditButton = new QPushButton(tr("Edit"), this); mpEditButton->setObjectName("DockPaletteWidgetButton"); - mPreviewLayout.addStretch(1); - mPreviewLayout.addWidget(mpEditButton, 0); - mPreviewLayout.addStretch(1); - mLayout.addLayout(&mPreviewLayout); + + mButtonsLayout.addWidget(mpPageViewButton, 0); + mButtonsLayout.addWidget(mpEditButton, 0); + mButtonsLayout.addStretch(1); + + mLayout.addLayout(&mButtonsLayout, 0); connect(mpPageViewButton, SIGNAL(clicked()), this, SLOT(onPageView())); connect(mpEditButton, SIGNAL(clicked()), this, SLOT(onEdit())); @@ -32,8 +124,7 @@ UBTBDocumentPreviewWidget::UBTBDocumentPreviewWidget(UBTeacherBarDataMgr *pDataM UBTBDocumentPreviewWidget::~UBTBDocumentPreviewWidget() { - DELETEPTR(mpPageViewButton); - DELETEPTR(mpEditButton); + } void UBTBDocumentPreviewWidget::onEdit() @@ -48,10 +139,23 @@ void UBTBDocumentPreviewWidget::onPageView() void UBTBDocumentPreviewWidget::updateFields() { - + mpSessionTitle->setText(mpDataMgr->sessionTitle()); + mpAuthors->setText(mpDataMgr->authors()); + mpCreationDate->setText(tr("Creation Date: %0").arg(mpDataMgr->creationDate())); + mpTarget->setText(mpDataMgr->sessionTarget()); + mpLicense->setLicense(mpDataMgr->sessionLicence()); + mpKeyword->setText(mpDataMgr->keywords()); + mpLevel->setText(mpDataMgr->level()); + mpTopic->setText(mpDataMgr->topic()); } void UBTBDocumentPreviewWidget::clearFields() { - + mpSessionTitle->setText(""); + mpAuthors->setText(""); + mpCreationDate->setText(""); + mpTarget->setText(""); + mpKeyword->setText(""); + mpLevel->setText(""); + mpTopic->setText(""); } diff --git a/src/gui/UBTBDocumentPreviewWidget.h b/src/gui/UBTBDocumentPreviewWidget.h index 99959afa..f2115c72 100644 --- a/src/gui/UBTBDocumentPreviewWidget.h +++ b/src/gui/UBTBDocumentPreviewWidget.h @@ -24,10 +24,35 @@ private slots: private: QVBoxLayout mLayout; - QHBoxLayout mPageLayout; - QHBoxLayout mPreviewLayout; + QHBoxLayout mButtonsLayout; + + QWidget* mpContainer; + QVBoxLayout mContainerLayout; QPushButton* mpPageViewButton; QPushButton* mpEditButton; + QLabel* mpSessionLabel; + QLabel* mpSessionTitle; + UBTBSeparator mTitleSeparator; + QLabel* mpAuthorLabel; + QLabel* mpAuthors; + UBTBSeparator mAuthorSeparator; + QLabel* mpCreationDate; + UBTBSeparator mDateSeparator; + QLabel* mpTargetLabel; + QTextEdit* mpTarget; + UBTBSeparator mTargetSeparator; + QLabel* mpMetadataLabel; + QHBoxLayout mKeywordLayout; + QLabel* mpKeywordLabel; + QLabel* mpKeyword; + QHBoxLayout mLevelLayout; + QLabel* mpLevelLabel; + QLabel* mpLevel; + QHBoxLayout mTopicLayout; + QLabel* mpTopicLabel; + QLabel* mpTopic; + UBTBSeparator mMetadataSeparator; + UBTBLicenseWidget* mpLicense; UBTeacherBarDataMgr* mpDataMgr; }; diff --git a/src/gui/UBTeacherBarDataMgr.cpp b/src/gui/UBTeacherBarDataMgr.cpp index 5d951d77..dd1f2b44 100644 --- a/src/gui/UBTeacherBarDataMgr.cpp +++ b/src/gui/UBTeacherBarDataMgr.cpp @@ -1,3 +1,5 @@ +#include + #include "UBTeacherBarDataMgr.h" #include "core/UBApplication.h" @@ -59,7 +61,6 @@ void UBTeacherBarDataMgr::saveContent() documentProxy->setSessionTitle(mSessionTitle); documentProxy->setSessionTarget(mSessionTarget); documentProxy->setSessionLicence(QString("%0").arg(mSessionLicence)); - qDebug() << "Saving keywords: " << mKeywords; documentProxy->setSessionKeywords(mKeywords); documentProxy->setSessionLevel(mLevel); documentProxy->setSessionTopic(mTopic); @@ -82,10 +83,15 @@ void UBTeacherBarDataMgr::loadContent(bool docChanged) mSessionTarget = documentProxy->sessionTarget(); mSessionLicence = (eLicense)documentProxy->sessionLicence().toInt(); mKeywords = documentProxy->sessionKeywords(); - qDebug() << "Keywords loaded: " << mKeywords << " (" << documentProxy->sessionKeywords() << ")"; mLevel = documentProxy->sessionLevel(); mTopic = documentProxy->sessionTopic(); mAuthors = documentProxy->sessionAuthors(); + if("" != documentProxy->documentDate()){ + mCreationDate = documentProxy->documentDate(); + }else{ + mCreationDate = QDate::currentDate().toString("yyyy-MM-dd"); + } + } // Page Title diff --git a/src/gui/UBTeacherBarDataMgr.h b/src/gui/UBTeacherBarDataMgr.h index b182e892..900dfb38 100644 --- a/src/gui/UBTeacherBarDataMgr.h +++ b/src/gui/UBTeacherBarDataMgr.h @@ -115,6 +115,13 @@ public: void setAuthors(const QString& authors){mAuthors = authors;} QString authors(){return mAuthors;} + // Creation Date + void setCreationDate(const QString& date){mCreationDate = date;} + QString creationDate(){return mCreationDate;} + + // Last Modification + void setLastModificationDate(const QString& date){mLastModif = date;} + QString lastModificationDate(){return mLastModif;} // Others void clearLists(); @@ -131,6 +138,8 @@ private: QString mLevel; QString mTopic; QString mAuthors; + QString mCreationDate; + QString mLastModif; QVector mActionList; QVector mUrlList; From c905eb387908a6463d48213bf18aefe85016d1e6 Mon Sep 17 00:00:00 2001 From: shibakaneki Date: Wed, 1 Feb 2012 15:03:25 +0100 Subject: [PATCH 02/24] Updated some minor EOU (Ease Of Use) in the teacher bar --- resources/style.qss | 3 +- src/gui/UBTBDocumentEditWidget.cpp | 1 - src/gui/UBTBDocumentPreviewWidget.cpp | 2 +- src/gui/UBTeacherBarPreviewWidget.cpp | 42 +++++++++++++++++++-------- src/gui/UBTeacherBarPreviewWidget.h | 7 ++++- src/gui/UBTeacherBarWidget.cpp | 6 ++++ src/gui/UBTeacherBarWidget.h | 1 + 7 files changed, 46 insertions(+), 16 deletions(-) diff --git a/resources/style.qss b/resources/style.qss index 8ce2d992..c542d934 100644 --- a/resources/style.qss +++ b/resources/style.qss @@ -27,7 +27,8 @@ QWidget#UBMediaVideoContainer border: 2px solid #999999; } -QWidget#UBTeacherBarPreviewWidget + +QWidget#UBTBPreviewWidget { background: #FFFFFF; border-radius: 10px; diff --git a/src/gui/UBTBDocumentEditWidget.cpp b/src/gui/UBTBDocumentEditWidget.cpp index 30f3438e..97c00521 100644 --- a/src/gui/UBTBDocumentEditWidget.cpp +++ b/src/gui/UBTBDocumentEditWidget.cpp @@ -192,7 +192,6 @@ void UBTBDocumentEditWidget::clearFields() void UBTBDocumentEditWidget::onKeywordChanged(const QString &kw) { mpDataMgr->setKeywords(kw); - qDebug() << ">>> KEYWORD CHANGED: " << kw; emit valueChanged(); } diff --git a/src/gui/UBTBDocumentPreviewWidget.cpp b/src/gui/UBTBDocumentPreviewWidget.cpp index e5610061..81dbad2e 100644 --- a/src/gui/UBTBDocumentPreviewWidget.cpp +++ b/src/gui/UBTBDocumentPreviewWidget.cpp @@ -29,7 +29,7 @@ UBTBDocumentPreviewWidget::UBTBDocumentPreviewWidget(UBTeacherBarDataMgr *pDataM mpContainer = new QWidget(this); mpContainer->setLayout(&mContainerLayout); - mpContainer->setObjectName("UBTeacherBarPreviewWidget"); + mpContainer->setObjectName("UBTBPreviewWidget"); // Session Title mpSessionLabel = new QLabel(tr("Session"), mpContainer); diff --git a/src/gui/UBTeacherBarPreviewWidget.cpp b/src/gui/UBTeacherBarPreviewWidget.cpp index 1a7feefc..39b8eb15 100644 --- a/src/gui/UBTeacherBarPreviewWidget.cpp +++ b/src/gui/UBTeacherBarPreviewWidget.cpp @@ -144,6 +144,7 @@ UBTBPreviewContainer::~UBTBPreviewContainer() // ------------------------------------------------------------------------------------ UBTeacherBarPreviewWidget::UBTeacherBarPreviewWidget(UBTeacherBarDataMgr* pDataMgr, QWidget *parent, const char *name):QWidget(parent) , mpEditButton(NULL) + , mpDocumentButton(NULL) , mpSessionTitle(NULL) , mpTitle(NULL) , mpTitleLabel(NULL) @@ -155,20 +156,27 @@ UBTeacherBarPreviewWidget::UBTeacherBarPreviewWidget(UBTeacherBarDataMgr* pDataM setObjectName(name); mpDataMgr = pDataMgr; setLayout(&mLayout); + mLayout.setContentsMargins(0, 0, 0, 0); setAttribute(Qt::WA_StyledBackground, true); setStyleSheet(UBApplication::globalStyleSheet()); // Build the Preview widget + mpContainer = new QWidget(this); + mpContainer->setObjectName("UBTBPreviewWidget"); + mpContainer->setLayout(&mContainerLayout); + mLayout.addWidget(mpContainer, 1); + + // Session Title - mpTitleContainer = new QWidget(this); + mpTitleContainer = new QWidget(mpContainer); mpTitleContainer->setLayout(&mTitleLayout); - mpSessionTitle = new QLabel(this); + mpSessionTitle = new QLabel(mpContainer); mpSessionTitle->setText(tr("Session: ")); mpSessionTitle->setWordWrap(true); mpSessionTitle->setAlignment(Qt::AlignRight); mpSessionTitle->setObjectName("UBTBPreviewSessionTitle"); - mLayout.addWidget(mpSessionTitle); + mContainerLayout.addWidget(mpSessionTitle); // Title mpTitleContainer->setLayout(&mTitleLayout); @@ -187,27 +195,32 @@ UBTeacherBarPreviewWidget::UBTeacherBarPreviewWidget(UBTeacherBarDataMgr* pDataM mpPageNbrLabel->setObjectName("UBTBPreviewSessionTitle"); mTitleLayout.addWidget(mpPageNbrLabel); mTitleLayout.addWidget(&mTitleSeparator); - mLayout.addWidget(mpTitleContainer); + mContainerLayout.addWidget(mpTitleContainer); // Content - mpContentContainer = new UBTBPreviewContainer(this); - mLayout.addWidget(mpContentContainer, 1); + mpContentContainer = new UBTBPreviewContainer(mpContainer); + mContainerLayout.addWidget(mpContentContainer, 1); // License - mLayout.addWidget(&mLicenseSeparator); - mpLicenseLabel = new UBTBLicenseWidget(this); - mLayout.addWidget(mpLicenseLabel); + mContainerLayout.addWidget(&mLicenseSeparator); + mpLicenseLabel = new UBTBLicenseWidget(mpContainer); + mContainerLayout.addWidget(mpLicenseLabel); - // Edit button - mpEditButton = new QPushButton(tr("Edit infos"), this); + // Document Button + mpDocumentButton = new QPushButton(tr("Document View"), this); + mpDocumentButton->setObjectName("DockPaletteWidgetButton"); + + // Edit Button + mpEditButton = new QPushButton(tr("Edit"), this); mpEditButton->setObjectName("DockPaletteWidgetButton"); - mEditLayout.addStretch(1); + mEditLayout.addWidget(mpDocumentButton, 0); mEditLayout.addWidget(mpEditButton, 0); mEditLayout.addStretch(1); mLayout.addLayout(&mEditLayout, 0); connect(mpEditButton, SIGNAL(clicked()), this, SLOT(onEdit())); + connect(mpDocumentButton, SIGNAL(clicked()), this, SLOT(onDocumentClicked())); connect(UBApplication::boardController, SIGNAL(activeSceneChanged()), this, SLOT(onActiveSceneChanged())); } @@ -225,6 +238,11 @@ void UBTeacherBarPreviewWidget::onEdit() emit showEditMode(); } +void UBTeacherBarPreviewWidget::onDocumentClicked() +{ + emit showDocumentPreview(); +} + void UBTeacherBarPreviewWidget::updateFields() { // Session Title diff --git a/src/gui/UBTeacherBarPreviewWidget.h b/src/gui/UBTeacherBarPreviewWidget.h index 7fb2f92b..61d4a892 100644 --- a/src/gui/UBTeacherBarPreviewWidget.h +++ b/src/gui/UBTeacherBarPreviewWidget.h @@ -62,6 +62,7 @@ public: signals: void showEditMode(); + void showDocumentPreview(); protected: void showEvent(QShowEvent* ev); @@ -69,6 +70,7 @@ protected: private slots: void onEdit(); void onActiveSceneChanged(); + void onDocumentClicked(); private: void generateActions(); @@ -77,8 +79,12 @@ private: void generateComments(); QVBoxLayout mLayout; + QVBoxLayout mContainerLayout; QHBoxLayout mEditLayout; QPushButton* mpEditButton; + QPushButton* mpDocumentButton; + + QWidget* mpContainer; // Titles QVBoxLayout mTitleLayout; @@ -95,7 +101,6 @@ private: // License UBTBSeparator mLicenseSeparator; - // TODO : replace the QLabel of the license by a widget done for that! UBTBLicenseWidget* mpLicenseLabel; diff --git a/src/gui/UBTeacherBarWidget.cpp b/src/gui/UBTeacherBarWidget.cpp index 5aeb80a4..1596b6b0 100644 --- a/src/gui/UBTeacherBarWidget.cpp +++ b/src/gui/UBTeacherBarWidget.cpp @@ -57,6 +57,7 @@ UBTeacherBarWidget::UBTeacherBarWidget(QWidget *parent, const char *name):UBDock connect(UBApplication::boardController, SIGNAL(activeDocumentChanged()), this, SLOT(onActiveDocumentChanged())); connect(mpPreview, SIGNAL(showEditMode()), this, SLOT(onShowEditMode())); + connect(mpPreview, SIGNAL(showDocumentPreview()), this, SLOT(onShowDocumentPreview())); connect(mpDocPreviewWidget, SIGNAL(changeTBState(eTeacherBarState)), this, SLOT(onTBStateChanged(eTeacherBarState))); connect(mpDocEditWidget, SIGNAL(changeTBState(eTeacherBarState)), this, SLOT(onTBStateChanged(eTeacherBarState))); connect(mpPageEditWidget, SIGNAL(changeTBState(eTeacherBarState)), this, SLOT(onTBStateChanged(eTeacherBarState))); @@ -150,6 +151,11 @@ void UBTeacherBarWidget::onShowEditMode() onTBStateChanged(eTeacherBarState_PageEdit); } +void UBTeacherBarWidget::onShowDocumentPreview() +{ + onTBStateChanged(eTeacherBarState_DocumentPreview); +} + void UBTeacherBarWidget::onTBStateChanged(eTeacherBarState state) { switch(state){ diff --git a/src/gui/UBTeacherBarWidget.h b/src/gui/UBTeacherBarWidget.h index 26831bfe..a97a4626 100644 --- a/src/gui/UBTeacherBarWidget.h +++ b/src/gui/UBTeacherBarWidget.h @@ -48,6 +48,7 @@ private slots: void onShowEditMode(); void onTBStateChanged(eTeacherBarState state); void onActiveDocumentChanged(); + void onShowDocumentPreview(); private: bool isEmpty(); From 8c5b96b2405fcc0007bf5f15542c0f44cb57fc8a Mon Sep 17 00:00:00 2001 From: shibakaneki Date: Thu, 2 Feb 2012 09:58:31 +0100 Subject: [PATCH 03/24] Changed the combobx into a textfield in the teacher bar --- src/gui/UBTBDocumentEditWidget.cpp | 6 +++--- src/gui/UBTBDocumentEditWidget.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/UBTBDocumentEditWidget.cpp b/src/gui/UBTBDocumentEditWidget.cpp index 97c00521..2b4e358a 100644 --- a/src/gui/UBTBDocumentEditWidget.cpp +++ b/src/gui/UBTBDocumentEditWidget.cpp @@ -62,8 +62,8 @@ UBTBDocumentEditWidget::UBTBDocumentEditWidget(UBTeacherBarDataMgr* pDataMgr, QW mpKeywords->setObjectName("DockPaletteWidgetLineEdit"); mpLevel = new QComboBox(this); mpLevel->setObjectName("DockPaletteWidgetComboBox"); - mpTopic = new QComboBox(this); - mpTopic->setObjectName("DockPaletteWidgetComboBox"); + mpTopic = new QLineEdit(this); + mpTopic->setObjectName("DockPaletteWidgetLineEdit"); mpAuthor = new QLineEdit(this); mpAuthor->setObjectName("DockPaletteWidgetLineEdit"); mpKeywordLabel = new QLabel(tr("Keywords:"), this); @@ -179,7 +179,7 @@ void UBTBDocumentEditWidget::updateFields() mpTarget->setPlainText(mpDataMgr->sessionTarget()); mpKeywords->setText(mpDataMgr->keywords()); // TODO: retrieve the level - // TODO retrieve the topic + mpTopic->setText(mpDataMgr->topic()); mpAuthor->setText(mpDataMgr->authors()); } diff --git a/src/gui/UBTBDocumentEditWidget.h b/src/gui/UBTBDocumentEditWidget.h index 7d782247..4b49a973 100644 --- a/src/gui/UBTBDocumentEditWidget.h +++ b/src/gui/UBTBDocumentEditWidget.h @@ -60,7 +60,7 @@ private: QComboBox* mpLicenseCombox; QLineEdit* mpKeywords; QComboBox* mpLevel; - QComboBox* mpTopic; + QLineEdit* mpTopic; QLineEdit* mpAuthor; QLabel* mpKeywordLabel; QLabel* mpLevelLabel; From 03fa177d5579ca22048b73ec62be83662acd22c5 Mon Sep 17 00:00:00 2001 From: shibakaneki Date: Thu, 2 Feb 2012 14:03:25 +0100 Subject: [PATCH 04/24] Resolved an issue with the links in the teacherbar --- src/gui/UBTBPageEditWidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/UBTBPageEditWidget.cpp b/src/gui/UBTBPageEditWidget.cpp index 39f6716c..e2142b13 100644 --- a/src/gui/UBTBPageEditWidget.cpp +++ b/src/gui/UBTBPageEditWidget.cpp @@ -320,7 +320,7 @@ QString UBUrlWidget::url() QString str; if(NULL != mpUrl){ - str = mpUrl->text() + ";" + mpTitle->text(); + str = mpUrl->text();// + ";" + mpTitle->text(); } return str; From 2d102026a718118a9161c289bab88e75575bff35 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Thu, 2 Feb 2012 15:27:44 +0200 Subject: [PATCH 05/24] Fix for SANKORE-490 and SANKORE-491. --- src/desktop/UBDesktopAnnotationController.cpp | 2 +- src/gui/UBLibraryWidget.cpp | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/desktop/UBDesktopAnnotationController.cpp b/src/desktop/UBDesktopAnnotationController.cpp index a2a4eac0..70983bab 100644 --- a/src/desktop/UBDesktopAnnotationController.cpp +++ b/src/desktop/UBDesktopAnnotationController.cpp @@ -81,7 +81,7 @@ UBDesktopAnnotationController::UBDesktopAnnotationController(QObject *parent) mTransparentDrawingView->setMouseTracking(true); - mTransparentDrawingView->setAcceptDrops(false); + mTransparentDrawingView->setAcceptDrops(true); QString backgroundStyle = "QWidget {background-color: rgba(127, 127, 127, 0)}"; mTransparentDrawingView->setStyleSheet(backgroundStyle); diff --git a/src/gui/UBLibraryWidget.cpp b/src/gui/UBLibraryWidget.cpp index 31371a83..568b0c4d 100644 --- a/src/gui/UBLibraryWidget.cpp +++ b/src/gui/UBLibraryWidget.cpp @@ -361,15 +361,12 @@ void UBLibraryWidget::dropEvent(QDropEvent *event) QString filePath; QString crntPath = urlList.at(i).toString(); -#ifdef Q_WS_MACX - filePath = QUrl(urlList.at(i)).toString(); -#else if(crntPath.startsWith("file:") || crntPath.startsWith("/")){ filePath = QUrl(crntPath).toLocalFile(); }else{ filePath = crntPath; } -#endif + mLibraryController->importItemOnLibrary(filePath); bDropAccepted = true; } From 45184923f3165eb1bf59dd955c5f6a031a5b16f5 Mon Sep 17 00:00:00 2001 From: shibakaneki Date: Thu, 2 Feb 2012 14:30:52 +0100 Subject: [PATCH 06/24] Fixed a signal slot error --- src/customWidgets/UBWidgetList.cpp | 9 +++++++++ src/customWidgets/UBWidgetList.h | 4 ++++ src/gui/UBTBDocumentEditWidget.cpp | 2 +- src/gui/UBTeacherBarPreviewWidget.cpp | 1 + 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/customWidgets/UBWidgetList.cpp b/src/customWidgets/UBWidgetList.cpp index 6481acb4..8b099b5a 100644 --- a/src/customWidgets/UBWidgetList.cpp +++ b/src/customWidgets/UBWidgetList.cpp @@ -10,6 +10,8 @@ UBWidgetList::UBWidgetList(QWidget* parent, eWidgetListOrientation orientation, , mMargin(5) , mListElementsSpacing(10) , mpEmptyLabel(NULL) + , mCanRemove(true) + , mpCurrentWidget(NULL) { setObjectName(name); mOrientation = orientation; @@ -130,6 +132,13 @@ void UBWidgetList::resizeEvent(QResizeEvent *ev) updateSizes(); } +void UBWidgetList::mousePressEvent(QMouseEvent *ev) +{ + if(mCanRemove){ + + } +} + void UBWidgetList::updateSizes() { // Resize all the widgets diff --git a/src/customWidgets/UBWidgetList.h b/src/customWidgets/UBWidgetList.h index 865386ad..c4137178 100644 --- a/src/customWidgets/UBWidgetList.h +++ b/src/customWidgets/UBWidgetList.h @@ -41,7 +41,10 @@ public: int listElementsSpacing() {return mListElementsSpacing; } protected: + bool mCanRemove; + void resizeEvent(QResizeEvent* ev); + void mousePressEvent(QMouseEvent* ev); private: int scaleWidgets(QSize pSize); @@ -55,6 +58,7 @@ private: int mListElementsSpacing; QMap mWidgetInfo; QLabel* mpEmptyLabel; + QWidget* mpCurrentWidget; }; #endif // UBWIDGETLIST_H diff --git a/src/gui/UBTBDocumentEditWidget.cpp b/src/gui/UBTBDocumentEditWidget.cpp index 2b4e358a..4139a9d2 100644 --- a/src/gui/UBTBDocumentEditWidget.cpp +++ b/src/gui/UBTBDocumentEditWidget.cpp @@ -120,7 +120,7 @@ UBTBDocumentEditWidget::UBTBDocumentEditWidget(UBTeacherBarDataMgr* pDataMgr, QW connect(mpLicenseCombox, SIGNAL(currentIndexChanged(int)), this, SLOT(onLicenseCurrentIndexChanged(int))); connect(mpKeywords, SIGNAL(textChanged(QString)), this, SLOT(onKeywordChanged(QString))); connect(mpLevel, SIGNAL(currentIndexChanged(QString)), this, SLOT(onLevelChanged(QString))); - connect(mpTopic, SIGNAL(currentIndexChanged(QString)), this, SLOT(onTopicChanged(QString))); + connect(mpTopic, SIGNAL(textChanged(QString)), this, SLOT(onTopicChanged(QString))); connect(mpAuthor, SIGNAL(textChanged(QString)), this, SLOT(onAuthorChanged(QString))); } diff --git a/src/gui/UBTeacherBarPreviewWidget.cpp b/src/gui/UBTeacherBarPreviewWidget.cpp index 39b8eb15..a02794b8 100644 --- a/src/gui/UBTeacherBarPreviewWidget.cpp +++ b/src/gui/UBTeacherBarPreviewWidget.cpp @@ -134,6 +134,7 @@ void UBActionPreview::setContent(const QString &content) UBTBPreviewContainer::UBTBPreviewContainer(QWidget *parent, const char *name):UBWidgetList(parent) { setObjectName(name); + mCanRemove = false; } UBTBPreviewContainer::~UBTBPreviewContainer() From c4b5e2a54dfae8ee89ee17450b12753c0accc311 Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Thu, 2 Feb 2012 15:28:49 +0100 Subject: [PATCH 07/24] removed unused cursor --- src/gui/UBResources.cpp | 3 +-- src/gui/UBResources.h | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/gui/UBResources.cpp b/src/gui/UBResources.cpp index be2e7dcc..f1eb64ab 100644 --- a/src/gui/UBResources.cpp +++ b/src/gui/UBResources.cpp @@ -51,7 +51,6 @@ void UBResources::init() // Cursors penCursor = QCursor(Qt::CrossCursor); eraserCursor = QCursor(QPixmap(":/images/cursors/eraser.png"), 21, 21); - magnifierCursor = QCursor(QPixmap(":/images/cursors/magnifier.png"), 9, 9); markerCursor = QCursor(QPixmap(":/images/cursors/marker.png"), 3, 30); pointerCursor = QCursor(QPixmap(":/images/cursors/laser.png"), 2, 1); handCursor = QCursor(Qt::OpenHandCursor); @@ -60,5 +59,5 @@ void UBResources::init() arrowCursor = QCursor(Qt::ArrowCursor); textCursor = QCursor(Qt::ArrowCursor); rotateCursor = QCursor(QPixmap(":/images/cursors/rotate.png"), 16, 16); - drawLineRulerCursor = QCursor(QPixmap(":/images/cursors/drawRulerLine.png"), 3, 12); + drawLineRulerCursor = QCursor(QPixmap(":/images/cursors/drawRulerLine.png"), 3, 12); } diff --git a/src/gui/UBResources.h b/src/gui/UBResources.h index fd32fa6d..bae4eee6 100644 --- a/src/gui/UBResources.h +++ b/src/gui/UBResources.h @@ -37,7 +37,6 @@ class UBResources : public QObject QCursor penCursor; QCursor eraserCursor; - QCursor magnifierCursor; QCursor markerCursor; QCursor pointerCursor; QCursor handCursor; From 9df0997b31fa234fbf088cd808d5f6121562ff99 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Thu, 2 Feb 2012 17:44:57 +0200 Subject: [PATCH 08/24] Fix for SANKORE-495 --- src/gui/UBDockPalette.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/UBDockPalette.cpp b/src/gui/UBDockPalette.cpp index 82f28d76..b168663f 100644 --- a/src/gui/UBDockPalette.cpp +++ b/src/gui/UBDockPalette.cpp @@ -697,7 +697,7 @@ void UBDockPalette::moveTabs() void UBDockPalette::resizeTabs() { int numTabs = mTabWidgets.size(); - mTabPalette->resize(2 * border(), (numTabs * TABSIZE) + qMax(numTabs - 1, 0) * tabSpacing()); + mTabPalette->setFixedSize(2 * border(), (numTabs * TABSIZE) + qMax(numTabs - 1, 0) * tabSpacing()); } QRect UBDockPalette::getTabPaletteRect() { From d05325330cf58957a3f5c936d2f66c232ee81636 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Thu, 2 Feb 2012 18:04:18 +0200 Subject: [PATCH 09/24] Fix to SANKORE-408. --- src/domain/UBGraphicsTextItemDelegate.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/domain/UBGraphicsTextItemDelegate.cpp b/src/domain/UBGraphicsTextItemDelegate.cpp index c430d84d..55eed451 100644 --- a/src/domain/UBGraphicsTextItemDelegate.cpp +++ b/src/domain/UBGraphicsTextItemDelegate.cpp @@ -309,6 +309,7 @@ void UBGraphicsTextItemDelegate::ChangeTextSize(int delta) int iCursorPos = startPos; // we search continuous blocks of the text with the same PointSize and allpy new settings for them. + cursor.setPosition (startPos, QTextCursor::MoveAnchor); while(iCursorPos < endPos) { bEndofTheSameBlock = false; From f2ee1360350098c8d8de9abe66d9728598708c19 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Thu, 2 Feb 2012 18:14:22 +0200 Subject: [PATCH 10/24] Addition to SANKORE-408. --- src/domain/UBGraphicsTextItemDelegate.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/domain/UBGraphicsTextItemDelegate.cpp b/src/domain/UBGraphicsTextItemDelegate.cpp index 55eed451..ea031cf1 100644 --- a/src/domain/UBGraphicsTextItemDelegate.cpp +++ b/src/domain/UBGraphicsTextItemDelegate.cpp @@ -305,7 +305,7 @@ void UBGraphicsTextItemDelegate::ChangeTextSize(int delta) bool bEndofTheSameBlock; int iBlockLen; int iPointSize; - int inewPointSize; + int iNextPointSize; int iCursorPos = startPos; // we search continuous blocks of the text with the same PointSize and allpy new settings for them. @@ -327,17 +327,18 @@ void UBGraphicsTextItemDelegate::ChangeTextSize(int delta) iBlockLen++; cursor.setPosition (iCursorPos+iBlockLen+1, QTextCursor::KeepAnchor); - inewPointSize = cursor.charFormat().font().pointSize(); + iNextPointSize = cursor.charFormat().font().pointSize(); cursor.setPosition (iCursorPos+iBlockLen, QTextCursor::KeepAnchor); - if ((iPointSize != inewPointSize)||(iCursorPos+iBlockLen >= endPos)) + if ((iPointSize != iNextPointSize)||(iCursorPos+iBlockLen >= endPos)) bEndofTheSameBlock = true; }while(!bEndofTheSameBlock); //setting new parameners - curFont.setPointSize(iPointSize + delta); + int iNewPointSize = iPointSize + delta; + curFont.setPointSize( (iNewPointSize > 0)?iNewPointSize:1); textFormat.setFont(curFont); cursor.mergeCharFormat(textFormat); From a2ee87b010cf4e6439d82529f3c265709ca6d5a6 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Thu, 2 Feb 2012 19:09:48 +0200 Subject: [PATCH 11/24] Fix for SANKORE-496 --- src/gui/UBLibPathViewer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/UBLibPathViewer.cpp b/src/gui/UBLibPathViewer.cpp index 2dff5098..ca79f7c0 100644 --- a/src/gui/UBLibPathViewer.cpp +++ b/src/gui/UBLibPathViewer.cpp @@ -284,7 +284,7 @@ void UBLibPathViewer::showBack() if(NULL != pLastElem) { mpBackElem->setPath(pLastElem->element()->path()); - mpBackElem->setType(eUBLibElementType_Folder); + mpBackElem->setType(pLastElem->element()->type()); mpBackElem->setName(pLastElem->element()->name()); } From edbbe38c7fdf5f3d247fc3c12d170975ccd6c320 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Fri, 3 Feb 2012 13:12:30 +0200 Subject: [PATCH 12/24] Fix to SANKORE-498 --- src/board/UBBoardPaletteManager.cpp | 35 ----------------------------- 1 file changed, 35 deletions(-) diff --git a/src/board/UBBoardPaletteManager.cpp b/src/board/UBBoardPaletteManager.cpp index 1fefd94b..54fe2a33 100644 --- a/src/board/UBBoardPaletteManager.cpp +++ b/src/board/UBBoardPaletteManager.cpp @@ -92,43 +92,8 @@ UBBoardPaletteManager::UBBoardPaletteManager(QWidget* container, UBBoardControll UBBoardPaletteManager::~UBBoardPaletteManager() { - if(NULL != mpDownloadWidget) - { - delete mpDownloadWidget; - mpDownloadWidget = NULL; - } - if(NULL != mpTeacherBarWidget) - { - delete mpTeacherBarWidget; - mpTeacherBarWidget = NULL; - } - if(NULL != mpPageNavigWidget) - { - delete mpPageNavigWidget; - mpPageNavigWidget = NULL; - } - if(NULL != mpLibWidget) - { - delete mpLibWidget; - mpLibWidget = NULL; - } - if(NULL != mpCachePropWidget) - { - delete mpCachePropWidget; - mpCachePropWidget = NULL; - } delete mAddItemPalette; - if(NULL != mLeftPalette) - { - delete mLeftPalette; - mLeftPalette = NULL; - } - if(NULL != mRightPalette) - { - delete mRightPalette; - mRightPalette = NULL; - } if(NULL != mStylusPalette) { From ead5cff1b28802cf858558e2be35cd1e3d1895eb Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Fri, 3 Feb 2012 18:57:04 +0300 Subject: [PATCH 13/24] enhancements for document navigator --- src/gui/UBDocumentNavigator.cpp | 6 +--- src/gui/UBThumbnailWidget.cpp | 63 ++++++++------------------------- src/gui/UBThumbnailWidget.h | 2 -- 3 files changed, 16 insertions(+), 55 deletions(-) diff --git a/src/gui/UBDocumentNavigator.cpp b/src/gui/UBDocumentNavigator.cpp index 4efea020..74c1d67f 100644 --- a/src/gui/UBDocumentNavigator.cpp +++ b/src/gui/UBDocumentNavigator.cpp @@ -391,17 +391,13 @@ void UBDocumentNavigator::mousePressEvent(QMouseEvent *event) mCrntItem = pCrntItem; } - // HACK: for an unknown reason, the mousePressEvent of the item is not - // called when a click occurs on it. So I created this method in - // order to handle the click. - mCrntItem->notifyClick(mapToScene(event->pos())); - // Then display the related page emit changeCurrentPage(); refreshScene(); } bNavig = false; } + QGraphicsView::mousePressEvent(event); } /** diff --git a/src/gui/UBThumbnailWidget.cpp b/src/gui/UBThumbnailWidget.cpp index e589300b..c7821ab9 100644 --- a/src/gui/UBThumbnailWidget.cpp +++ b/src/gui/UBThumbnailWidget.cpp @@ -740,25 +740,21 @@ void UBSceneThumbnailNavigPixmap::paint(QPainter *painter, const QStyleOptionGra void UBSceneThumbnailNavigPixmap::mousePressEvent(QGraphicsSceneMouseEvent *event) { - // INFO: This implementation should work but this method is not called on a mousePressEvent, why? - // PLEASE DO NOT REMOVE THIS METHOD! We should reactivate this code when we will fix - // the mousePressEvent-not-called issue! - -// QPointF p = event->pos(); - -// // Here we check the position of the click and verify if it has to trig an action or not. -// if(bCanDelete && p.x() >= 0 && p.x() <= BUTTONSIZE && p.y() >= 0 && p.y() <= BUTTONSIZE) -// { -// deletePage(); -// } -// if(bCanMoveUp && p.x() >= BUTTONSIZE + BUTTONSPACING && p.x() <= 2*BUTTONSIZE + BUTTONSPACING && p.y() >= 0 && p.y() <= BUTTONSIZE) -// { -// moveUpPage(); -// } -// if(bCanMoveDown && p.x() >= 2*(BUTTONSIZE + BUTTONSPACING) && p.x() <= 2*(BUTTONSIZE + BUTTONSPACING) + BUTTONSIZE && p.y() >= 0 && p.y() <= BUTTONSIZE) -// { -// moveDownPage(); -// } + QPointF p = event->pos(); + + // Here we check the position of the click and verify if it has to trig an action or not. + if(bCanDelete && p.x() >= 0 && p.x() <= BUTTONSIZE && p.y() >= 0 && p.y() <= BUTTONSIZE) + { + deletePage(); + } + if(bCanMoveUp && p.x() >= BUTTONSIZE + BUTTONSPACING && p.x() <= 2*BUTTONSIZE + BUTTONSPACING && p.y() >= 0 && p.y() <= BUTTONSIZE) + { + moveUpPage(); + } + if(bCanMoveDown && p.x() >= 2*(BUTTONSIZE + BUTTONSPACING) && p.x() <= 2*(BUTTONSIZE + BUTTONSPACING) + BUTTONSIZE && p.y() >= 0 && p.y() <= BUTTONSIZE) + { + moveDownPage(); + } event->accept(); } @@ -809,32 +805,3 @@ void UBSceneThumbnailNavigPixmap::moveDownPage() { UBApplication::documentController->moveSceneToIndex(proxy(), sceneIndex(), sceneIndex() + 1); } - -void UBSceneThumbnailNavigPixmap::notifyClick(QPointF clickedScenePos) -{ - QPointF p = clickedPos(clickedScenePos); - - // Here we check the position of the click and verify if it has to trig an action or not. - if(bCanDelete && p.x() >= 0 && p.x() <= BUTTONSIZE/2 && p.y() >= 0 && p.y() <= BUTTONSIZE/2) - { - deletePage(); - } - if(bCanMoveUp && p.x() >= (BUTTONSIZE + BUTTONSPACING)/2 && p.x() <= BUTTONSIZE + BUTTONSPACING && p.y() >= 0 && p.y() <= BUTTONSIZE/2) - { - moveUpPage(); - } - if(bCanMoveDown && p.x() >= BUTTONSIZE + BUTTONSPACING && p.x() <= BUTTONSIZE + BUTTONSPACING + BUTTONSIZE/2 && p.y() >= 0 && p.y() <= BUTTONSIZE/2) - { - moveDownPage(); - } -} - -QPointF UBSceneThumbnailNavigPixmap::clickedPos(QPointF clickedScenePos) -{ - QPointF p; - - p.setX(clickedScenePos.x() - scenePos().x()); - p.setY(clickedScenePos.y() - scenePos().y()); - - return p; -} diff --git a/src/gui/UBThumbnailWidget.h b/src/gui/UBThumbnailWidget.h index f3f25d6a..ed47869b 100644 --- a/src/gui/UBThumbnailWidget.h +++ b/src/gui/UBThumbnailWidget.h @@ -292,7 +292,6 @@ class UBSceneThumbnailNavigPixmap : public UBSceneThumbnailPixmap public: UBSceneThumbnailNavigPixmap(const QPixmap& pix, UBDocumentProxy* proxy, int pSceneIndex); ~UBSceneThumbnailNavigPixmap(); - void notifyClick(QPointF clickedScenePos); protected: void hoverEnterEvent(QGraphicsSceneHoverEvent *event); @@ -305,7 +304,6 @@ class UBSceneThumbnailNavigPixmap : public UBSceneThumbnailPixmap void deletePage(); void moveUpPage(); void moveDownPage(); - QPointF clickedPos(QPointF clickedScenePos); bool bButtonsVisible; bool bCanDelete; From 5761ddb0ead859d60e5c3fa1bbde4c22f32e73d8 Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Fri, 3 Feb 2012 19:24:02 +0300 Subject: [PATCH 14/24] Fixed selection issues in document navigator. --- src/document/UBDocumentController.cpp | 5 ++--- src/gui/UBDocumentNavigator.cpp | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/document/UBDocumentController.cpp b/src/document/UBDocumentController.cpp index 9d1f8d42..5aafded1 100644 --- a/src/document/UBDocumentController.cpp +++ b/src/document/UBDocumentController.cpp @@ -1150,11 +1150,10 @@ void UBDocumentController::moveSceneToIndex(UBDocumentProxy* proxy, int source, UBMetadataDcSubsetAdaptor::persist(proxy); refreshDocumentThumbnailsView(); - // NOTE [Didier]: I think that selecting the thumbnail is not the role of the documentController - mDocumentUI->thumbnailWidget->selectItemAt(target); - // Notify the move to anyone interested in knowing it emit movedToIndex(target); + + UBApplication::boardController->setActiveDocumentScene(proxy, target); } diff --git a/src/gui/UBDocumentNavigator.cpp b/src/gui/UBDocumentNavigator.cpp index 74c1d67f..0f6b6eff 100644 --- a/src/gui/UBDocumentNavigator.cpp +++ b/src/gui/UBDocumentNavigator.cpp @@ -444,7 +444,8 @@ void UBDocumentNavigator::onMovedToIndex(int index) UBSceneThumbnailNavigPixmap* pItem = dynamic_cast(mThumbnails.at(index)); if(NULL != pItem) { - mCrntItem = pItem; + if(mCrntItem) mCrntItem->setSelected(false);//deselecting previous one + mCrntItem = pItem; mCrntItem->setSelected(true); centerOn(mCrntItem); } From a5a728d4d142945d8250b1daa71f2b563b1c9b5d Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Mon, 6 Feb 2012 09:00:27 +0100 Subject: [PATCH 15/24] =?UTF-8?q?Thanks=20to=20G=C3=A9rard=20Vidal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildDebianPackage | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/buildDebianPackage b/buildDebianPackage index 9eb6010e..7056a1d7 100755 --- a/buildDebianPackage +++ b/buildDebianPackage @@ -49,8 +49,8 @@ else LAST_COMMITED_VERSION="`git describe $(git rev-list --tags --max-count=1)`" if [ "v$VERSION" != "$LAST_COMMITED_VERSION" ]; then echo creating a tag with the version $VERSION - git tag -a "v$VERSION" -m "Generating setup for v$VERSION" - git push origin --tags +# git tag -a "v$VERSION" -m "Generating setup for v$VERSION" +# git push origin --tags fi fi @@ -191,7 +191,7 @@ CHANGE_LOG_FILE="$BASE_WORKING_DIR/DEBIAN/changelog-sankore-$VERSION.txt" CONTROL_FILE="$BASE_WORKING_DIR/DEBIAN/control" CHANGE_LOG_TEXT="changelog.txt" -ARCHITECTURE=`uname -i` +ARCHITECTURE=`uname -m` if [ "$ARCHITECTURE" == "x86_64" ]; then ARCHITECTURE="amd64" fi From 3bfc3ceb0dbdf8e04b93f41c1e1c7942c9067f95 Mon Sep 17 00:00:00 2001 From: shibakaneki Date: Mon, 6 Feb 2012 11:22:45 +0100 Subject: [PATCH 16/24] added the ability to delete an image in the media container of the teacherbar --- src/customWidgets/UBActionableWidget.cpp | 70 ++++++++++++++++++++++++ src/customWidgets/UBActionableWidget.h | 35 ++++++++++++ src/customWidgets/UBMediaWidget.cpp | 5 +- src/customWidgets/UBMediaWidget.h | 3 +- src/customWidgets/UBWidgetList.cpp | 41 ++++++++++++++ src/customWidgets/UBWidgetList.h | 7 ++- src/customWidgets/customWidgets.pri | 6 +- src/gui/UBTBPageEditWidget.cpp | 70 ++++++++++++++++++++---- src/gui/UBTBPageEditWidget.h | 22 +++++++- 9 files changed, 239 insertions(+), 20 deletions(-) create mode 100644 src/customWidgets/UBActionableWidget.cpp create mode 100644 src/customWidgets/UBActionableWidget.h diff --git a/src/customWidgets/UBActionableWidget.cpp b/src/customWidgets/UBActionableWidget.cpp new file mode 100644 index 00000000..47af2621 --- /dev/null +++ b/src/customWidgets/UBActionableWidget.cpp @@ -0,0 +1,70 @@ +#include +#include + +#include "UBActionableWidget.h" + +UBActionableWidget::UBActionableWidget(QWidget *parent, const char *name):QWidget(parent) + , mShowActions(false) +{ + setObjectName(name); + mActions.clear(); +} + +UBActionableWidget::~UBActionableWidget() +{ + +} + +void UBActionableWidget::addAction(eAction act) +{ + if(!mActions.contains(act)){ + mActions << act; + } +} + +void UBActionableWidget::removeAction(eAction act) +{ + if(mActions.contains(act)){ + mActions.remove(mActions.indexOf(act)); + } +} + +void UBActionableWidget::removeAllActions() +{ + mActions.clear(); +} + +void UBActionableWidget::setActionsVisible(bool bVisible) +{ + mShowActions = bVisible; +} + +bool UBActionableWidget::shouldClose(QPoint p) +{ + qDebug() << "Should close: " << p.x() << "," << p.y(); + bool close = false; + + if(mShowActions && + p.x() >= 0 && + p.x() <= ACTIONSIZE && + p.y() >= 0 && + p.y() <= ACTIONSIZE){ + close = true; + } + + return close; +} + +void UBActionableWidget::paintEvent(QPaintEvent* ev) +{ + if(mShowActions){ + QPainter p(this); + if(mActions.contains(eAction_Close)){ + p.drawPixmap(0, 0, 16, 16, QPixmap(":images/close.svg")); + }else if(mActions.contains(eAction_MoveUp)){ + // Implement me later + }else if(mActions.contains(eAction_MoveDown)){ + // Implement me later + } + } +} diff --git a/src/customWidgets/UBActionableWidget.h b/src/customWidgets/UBActionableWidget.h new file mode 100644 index 00000000..12b2a2fb --- /dev/null +++ b/src/customWidgets/UBActionableWidget.h @@ -0,0 +1,35 @@ +#ifndef UBACTIONABLEWIDGET_H +#define UBACTIONABLEWIDGET_H + +#include +#include + +#define ACTIONSIZE 16 + +typedef enum{ + eAction_Close, + eAction_MoveUp, + eAction_MoveDown +}eAction; + +class UBActionableWidget : public QWidget +{ + Q_OBJECT +public: + UBActionableWidget(QWidget* parent=0, const char* name="UBActionableWidget"); + ~UBActionableWidget(); + void addAction(eAction act); + void removeAction(eAction act); + void removeAllActions(); + void setActionsVisible(bool bVisible); + bool shouldClose(QPoint p); + +protected: + void paintEvent(QPaintEvent* ev); + QVector mActions; + +private: + bool mShowActions; +}; + +#endif // UBACTIONABLEWIDGET_H diff --git a/src/customWidgets/UBMediaWidget.cpp b/src/customWidgets/UBMediaWidget.cpp index c1809d93..ee71a664 100644 --- a/src/customWidgets/UBMediaWidget.cpp +++ b/src/customWidgets/UBMediaWidget.cpp @@ -22,7 +22,7 @@ * @param parent as the parent widget * @param name as the object name */ -UBMediaWidget::UBMediaWidget(eMediaType type, QWidget *parent, const char *name):QWidget(parent) +UBMediaWidget::UBMediaWidget(eMediaType type, QWidget *parent, const char *name):UBActionableWidget(parent, name) , mpMediaObject(NULL) , mpVideoWidget(NULL) , mpAudioOutput(NULL) @@ -35,11 +35,10 @@ UBMediaWidget::UBMediaWidget(eMediaType type, QWidget *parent, const char *name) , mpMediaContainer(NULL) , mpCover(NULL) { - setObjectName(name); - setAttribute(Qt::WA_StyledBackground, true); setStyleSheet(UBApplication::globalStyleSheet()); + addAction(eAction_Close); mType = type; setLayout(&mLayout); diff --git a/src/customWidgets/UBMediaWidget.h b/src/customWidgets/UBMediaWidget.h index 5192c3c7..01b0a0b6 100644 --- a/src/customWidgets/UBMediaWidget.h +++ b/src/customWidgets/UBMediaWidget.h @@ -27,6 +27,7 @@ #include #include "interfaces/IResizeable.h" +#include "UBActionableWidget.h" #define UBMEDIABUTTON_SIZE 32 #define TICK_INTERVAL 1000 @@ -58,7 +59,7 @@ private: bool mPressed; }; -class UBMediaWidget : public QWidget +class UBMediaWidget : public UBActionableWidget { Q_OBJECT public: diff --git a/src/customWidgets/UBWidgetList.cpp b/src/customWidgets/UBWidgetList.cpp index 8b099b5a..62ed6677 100644 --- a/src/customWidgets/UBWidgetList.cpp +++ b/src/customWidgets/UBWidgetList.cpp @@ -1,5 +1,7 @@ #include #include +#include +#include #include "UBGlobals.h" #include "UBWidgetList.h" @@ -135,8 +137,47 @@ void UBWidgetList::resizeEvent(QResizeEvent *ev) void UBWidgetList::mousePressEvent(QMouseEvent *ev) { if(mCanRemove){ + QWidget* pWAt = widgetAt(ev->pos()); + if(NULL != mpCurrentWidget){ + if(pWAt == mpCurrentWidget){ + QPoint p; + p.setX(ev->x()); + p.setY(ev->y()); + if(mpCurrentWidget->shouldClose(p)){ + emit closeWidget(mpCurrentWidget); + return; + } + + }else{ + mpCurrentWidget->setActionsVisible(false); + } + } + mpCurrentWidget = dynamic_cast(pWAt); + if(NULL != mpCurrentWidget){ + mpCurrentWidget->setActionsVisible(true); + } + } + update(); +} +QWidget* UBWidgetList::widgetAt(QPoint p) +{ + QWidget* pW = NULL; + pW = childAt(p); + if(NULL != pW){ + do{ + if( "UBTeacherStudentAction" == pW->objectName() || + "UBUrlWidget" == pW->objectName() || + "UBTBMediaPicture" == pW->objectName() || + "UBMediaWidget" == pW->objectName()){ + return pW; + }else{ + pW = pW->parentWidget(); + } + }while(NULL != pW && this != pW); } + + return pW; } void UBWidgetList::updateSizes() diff --git a/src/customWidgets/UBWidgetList.h b/src/customWidgets/UBWidgetList.h index c4137178..d2cd3a6c 100644 --- a/src/customWidgets/UBWidgetList.h +++ b/src/customWidgets/UBWidgetList.h @@ -11,6 +11,7 @@ #include #include "interfaces/IResizeable.h" +#include "customWidgets/UBActionableWidget.h" typedef enum{ eWidgetListOrientation_Vertical, @@ -40,6 +41,9 @@ public: void setListElementSpacing(int margin) { mListElementsSpacing = margin; } int listElementsSpacing() {return mListElementsSpacing; } +signals: + void closeWidget(QWidget* w); + protected: bool mCanRemove; @@ -47,6 +51,7 @@ protected: void mousePressEvent(QMouseEvent* ev); private: + QWidget* widgetAt(QPoint p); int scaleWidgets(QSize pSize); void scaleContainer(QSize pSize, int updateValue); void updateView(QSize pSize); @@ -58,7 +63,7 @@ private: int mListElementsSpacing; QMap mWidgetInfo; QLabel* mpEmptyLabel; - QWidget* mpCurrentWidget; + UBActionableWidget* mpCurrentWidget; }; #endif // UBWIDGETLIST_H diff --git a/src/customWidgets/customWidgets.pri b/src/customWidgets/customWidgets.pri index aa7b0255..5fe74b8c 100644 --- a/src/customWidgets/customWidgets.pri +++ b/src/customWidgets/customWidgets.pri @@ -3,9 +3,11 @@ HEADERS += src/customWidgets/UBWidgetList.h \ src/customWidgets/UBDraggableLabel.h \ src/customWidgets/UBMediaWidget.h \ src/customWidgets/UBGlobals.h \ - src/customWidgets/UBDraggableMedia.h + src/customWidgets/UBDraggableMedia.h \ + src/customWidgets/UBActionableWidget.h SOURCES += src/customWidgets/UBWidgetList.cpp \ src/customWidgets/UBDraggableLabel.cpp \ src/customWidgets/UBMediaWidget.cpp \ - src/customWidgets/UBDraggableMedia.cpp + src/customWidgets/UBDraggableMedia.cpp \ + src/customWidgets/UBActionableWidget.cpp diff --git a/src/gui/UBTBPageEditWidget.cpp b/src/gui/UBTBPageEditWidget.cpp index e2142b13..12424a1a 100644 --- a/src/gui/UBTBPageEditWidget.cpp +++ b/src/gui/UBTBPageEditWidget.cpp @@ -100,6 +100,9 @@ UBTBPageEditWidget::UBTBPageEditWidget(UBTeacherBarDataMgr *pDataMgr, QWidget *p connect(mpDocumentEditbutton, SIGNAL(clicked()), this, SLOT(onDocumentEditClicked())); connect(mpPagePreviewButton, SIGNAL(clicked()), this, SLOT(onPagePreviewClicked())); connect(mpMediaContainer, SIGNAL(mediaDropped(QString)), this, SLOT(onMediaDropped(QString))); + connect(mpActions, SIGNAL(closeWidget(QWidget*)), this, SLOT(onCloseWidget(QWidget*))); + connect(mpLinks, SIGNAL(closeWidget(QWidget*)), this, SLOT(onCloseWidget(QWidget*))); + connect(mpMediaContainer, SIGNAL(closeWidget(QWidget*)), this, SLOT(onCloseWidget(QWidget*))); } UBTBPageEditWidget::~UBTBPageEditWidget() @@ -271,15 +274,36 @@ void UBTBPageEditWidget::clearFields() mClearingFields = false; } +void UBTBPageEditWidget::onCloseWidget(QWidget *w) +{ + if(NULL != w){ + if("UBTeacherStudentAction" == w->objectName()){ + UBTeacherStudentAction* pW = dynamic_cast(w); + mpActions->removeWidget(pW); + mActions.remove(mActions.indexOf(pW)); + DELETEPTR(w); + }else if("UBUrlWidget" == w->objectName()){ + UBUrlWidget* pW = dynamic_cast(w); + mpLinks->removeWidget(pW); + mUrls.remove(mUrls.indexOf(pW)); + DELETEPTR(w); + }else if("UBTBMediaPicture" == w->objectName() || "UBMediaWidget" == w->objectName()){ + mpMediaContainer->removeWidget(w); + mMedias.remove(mMedias.indexOf(w)); + DELETEPTR(w); + } + } +} + // --------------------------------------------------------------------------------------------- -UBUrlWidget::UBUrlWidget(QWidget *parent, const char *name):QWidget(parent) +UBUrlWidget::UBUrlWidget(QWidget *parent, const char *name):UBActionableWidget(parent, name) , mpLayout(NULL) , mpUrlLabel(NULL) , mpUrl(NULL) { - setObjectName(name); setAttribute(Qt::WA_StyledBackground, true); setStyleSheet(UBApplication::globalStyleSheet()); + addAction(eAction_Close); mpLayout = new QVBoxLayout(this); setLayout(mpLayout); @@ -435,12 +459,13 @@ QWidget* UBTBMediaContainer::generateMediaWidget(const QString& url) QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(url); if(mimeType.contains("image")){ QPixmap pix = QPixmap(url); - QLabel* label = new QLabel(); - pix.scaledToWidth(label->width()); - label->resize(pix.width(), pix.height()); - label->setPixmap(pix); - label->setScaledContents(true); - pW = label; + UBPictureWidget* pic = new UBPictureWidget(); + pix.scaledToWidth(pic->label()->width()); + pic->label()->resize(pix.width(), pix.height()); + pic->label()->setPixmap(pix); + pic->label()->setScaledContents(true); + pic->setObjectName("UBTBMediaPicture"); + pW = pic; } else if(mimeType.contains("video") || mimeType.contains("audio")){ UBMediaWidget* mediaPlayer = new UBMediaWidget(mimeType.contains("audio")?eMediaType_Audio:eMediaType_Video); @@ -455,16 +480,15 @@ QWidget* UBTBMediaContainer::generateMediaWidget(const QString& url) return pW; } -UBTeacherStudentAction::UBTeacherStudentAction(QWidget *parent, const char *name):QWidget(parent) +UBTeacherStudentAction::UBTeacherStudentAction(QWidget *parent, const char *name):UBActionableWidget(parent, name) , mpText(NULL) , mpLayout(NULL) , mpComboLayout(NULL) , mpCombo(NULL) { - setObjectName(name); - setAttribute(Qt::WA_StyledBackground, true); setStyleSheet(UBApplication::globalStyleSheet()); + addAction(eAction_Close); // Create the GUI mpLayout = new QHBoxLayout(this); @@ -532,3 +556,27 @@ void UBTeacherStudentAction::setText(const QString& text) } } +// ------------------------------------------------------------- +UBPictureWidget::UBPictureWidget(QWidget *parent, const char *name):UBActionableWidget(parent, name) + , mpLayout(NULL) + , mpLabel(NULL) +{ + addAction(eAction_Close); + mpLayout = new QVBoxLayout(this); + setLayout(mpLayout); + mpLayout->setContentsMargins(10, 0, 10, 0); + mpLabel = new QLabel(this); + mpLayout->addWidget(mpLabel); + mpLabel->setGeometry( 10, 10, width()-2*10, height()); +} + +UBPictureWidget::~UBPictureWidget() +{ + DELETEPTR(mpLabel); + DELETEPTR(mpLayout); +} + +void UBPictureWidget::resizeEvent(QResizeEvent *ev) +{ + mpLabel->setGeometry( 10, 10, width()-2*10, height()); +} diff --git a/src/gui/UBTBPageEditWidget.h b/src/gui/UBTBPageEditWidget.h index 0f3c61b9..0521c847 100644 --- a/src/gui/UBTBPageEditWidget.h +++ b/src/gui/UBTBPageEditWidget.h @@ -11,10 +11,11 @@ #include "core/UBPersistenceManager.h" #include "customWidgets/UBWidgetList.h" +#include "customWidgets/UBActionableWidget.h" #include "interfaces/IDropable.h" #include "UBTeacherBarDataMgr.h" -class UBTeacherStudentAction : public QWidget +class UBTeacherStudentAction : public UBActionableWidget { Q_OBJECT @@ -33,7 +34,7 @@ private: QComboBox* mpCombo; }; -class UBUrlWidget : public QWidget +class UBUrlWidget : public UBActionableWidget { public: UBUrlWidget(QWidget* parent=0, const char* name="UBUrlWidget"); @@ -56,6 +57,22 @@ private: QLineEdit* mpTitle; }; +class UBPictureWidget : public UBActionableWidget +{ +public: + UBPictureWidget(QWidget* parent=0, const char* name="UBPictureWidget"); + ~UBPictureWidget(); + + QLabel* label(){return mpLabel;} + +protected: + void resizeEvent(QResizeEvent* ev); + +private: + QVBoxLayout* mpLayout; + QLabel* mpLabel; +}; + class UBTBMediaContainer : public UBWidgetList , public IDropable { @@ -104,6 +121,7 @@ private slots: void onMediaDropped(const QString& url); void onDocumentEditClicked(); void onPagePreviewClicked(); + void onCloseWidget(QWidget* w); private: QVBoxLayout mLayout; From d05e5f11396a517a212443fd2fa70672d09778ff Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Mon, 6 Feb 2012 13:29:17 +0200 Subject: [PATCH 17/24] Added a mechanism to disabling and enabling warnings in third-party code and in any part of code. globals.h moved to /src/globals --- Sankore_3.1.pro | 2 + src/adaptors/UBExportDocument.cpp | 4 ++ src/adaptors/UBExportWeb.cpp | 4 ++ src/adaptors/UBImportCFF.cpp | 4 ++ src/adaptors/UBImportDocument.cpp | 4 ++ .../publishing/UBDocumentPublisher.cpp | 4 ++ src/customWidgets/UBGlobals.h | 9 ---- src/customWidgets/UBMediaWidget.cpp | 2 +- src/customWidgets/UBWidgetList.cpp | 2 +- src/customWidgets/customWidgets.pri | 2 +- src/globals/UBGlobals.h | 46 +++++++++++++++++++ src/gui/UBTBDocumentEditWidget.cpp | 2 +- src/gui/UBTBDocumentPreviewWidget.cpp | 2 +- src/gui/UBTBPageEditWidget.cpp | 2 +- src/gui/UBTeacherBarDataMgr.cpp | 2 +- src/gui/UBTeacherBarPreviewWidget.cpp | 2 +- src/gui/UBTeacherBarWidget.cpp | 2 +- src/pdf/XPDFRenderer.h | 5 ++ 18 files changed, 82 insertions(+), 18 deletions(-) delete mode 100644 src/customWidgets/UBGlobals.h create mode 100644 src/globals/UBGlobals.h diff --git a/Sankore_3.1.pro b/Sankore_3.1.pro index bdc7704c..e17a120a 100644 --- a/Sankore_3.1.pro +++ b/Sankore_3.1.pro @@ -35,6 +35,7 @@ QT += script QT += xmlpatterns INCLUDEPATH += src +INCLUDEPATH += globals include($$THIRD_PARTY_PATH/libs.pri) include(src/adaptors/adaptors.pri) @@ -83,6 +84,7 @@ UB_LIBRARY.files = resources/library UB_FONTS.files = resources/fonts UB_THIRDPARTY_INTERACTIVE.files = thirdparty/interactive +DEFINES += NO_THIRD_PARTY_WARNINGS DEFINES += UBVERSION=\"\\\"$${LONG_VERSION}\"\\\" \ UBVERSION_RC=$$VERSION_RC ALPHA_BETA_STR = $$find(VERSION, "[ab]") diff --git a/src/adaptors/UBExportDocument.cpp b/src/adaptors/UBExportDocument.cpp index 27ea87d7..95a8e4bc 100644 --- a/src/adaptors/UBExportDocument.cpp +++ b/src/adaptors/UBExportDocument.cpp @@ -22,8 +22,12 @@ #include "document/UBDocumentProxy.h" +#include "globals/UBGlobals.h" + +THIRD_PARTY_WARNINGS_DISABLE #include "quazip.h" #include "quazipfile.h" +THIRD_PARTY_WARNINGS_ENABLE #include "transition/UniboardSankoreTransition.h" diff --git a/src/adaptors/UBExportWeb.cpp b/src/adaptors/UBExportWeb.cpp index bfdedfe5..59a9c31b 100644 --- a/src/adaptors/UBExportWeb.cpp +++ b/src/adaptors/UBExportWeb.cpp @@ -23,8 +23,12 @@ #include "document/UBDocumentProxy.h" +#include "globals/UBGlobals.h" + +THIRD_PARTY_WARNINGS_DISABLE #include "quazip.h" #include "quazipfile.h" +THIRD_PARTY_WARNINGS_ENABLE #include "core/memcheck.h" diff --git a/src/adaptors/UBImportCFF.cpp b/src/adaptors/UBImportCFF.cpp index 448e2834..6b4fa318 100644 --- a/src/adaptors/UBImportCFF.cpp +++ b/src/adaptors/UBImportCFF.cpp @@ -27,9 +27,13 @@ #include "UBCFFSubsetAdaptor.h" #include "UBImportCFF.h" +#include "globals/UBGlobals.h" + +THIRD_PARTY_WARNINGS_DISABLE #include "quazip.h" #include "quazipfile.h" #include "quazipfileinfo.h" +THIRD_PARTY_WARNINGS_ENABLE #include "core/memcheck.h" diff --git a/src/adaptors/UBImportDocument.cpp b/src/adaptors/UBImportDocument.cpp index f441b980..3e7808cf 100644 --- a/src/adaptors/UBImportDocument.cpp +++ b/src/adaptors/UBImportDocument.cpp @@ -22,9 +22,13 @@ #include "core/UBSettings.h" #include "core/UBPersistenceManager.h" +#include "globals/UBGlobals.h" + +THIRD_PARTY_WARNINGS_DISABLE #include "quazip.h" #include "quazipfile.h" #include "quazipfileinfo.h" +THIRD_PARTY_WARNINGS_ENABLE #include "core/memcheck.h" diff --git a/src/adaptors/publishing/UBDocumentPublisher.cpp b/src/adaptors/publishing/UBDocumentPublisher.cpp index d3ec39dd..686b9d94 100644 --- a/src/adaptors/publishing/UBDocumentPublisher.cpp +++ b/src/adaptors/publishing/UBDocumentPublisher.cpp @@ -34,8 +34,12 @@ #include "domain/UBGraphicsWidgetItem.h" +#include "globals/UBGlobals.h" + +THIRD_PARTY_WARNINGS_DISABLE #include "quazip.h" #include "quazipfile.h" +THIRD_PARTY_WARNINGS_ENABLE #include "adaptors/UBExportFullPDF.h" #include "adaptors/UBExportDocument.h" diff --git a/src/customWidgets/UBGlobals.h b/src/customWidgets/UBGlobals.h deleted file mode 100644 index 1707ceac..00000000 --- a/src/customWidgets/UBGlobals.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef UBGLOBALS_H -#define UBGLOBALS_H - -#define DELETEPTR(ptr) if(NULL != ptr){ \ - delete ptr; \ - ptr = NULL; \ - } - -#endif // UBGLOBALS_H diff --git a/src/customWidgets/UBMediaWidget.cpp b/src/customWidgets/UBMediaWidget.cpp index c1809d93..0d1b5fd2 100644 --- a/src/customWidgets/UBMediaWidget.cpp +++ b/src/customWidgets/UBMediaWidget.cpp @@ -13,7 +13,7 @@ * along with this program. If not, see . */ #include "core/UBApplication.h" -#include "UBGlobals.h" +#include "globals/UBGlobals.h" #include "UBMediaWidget.h" /** diff --git a/src/customWidgets/UBWidgetList.cpp b/src/customWidgets/UBWidgetList.cpp index 8b099b5a..e15bb2e0 100644 --- a/src/customWidgets/UBWidgetList.cpp +++ b/src/customWidgets/UBWidgetList.cpp @@ -1,7 +1,7 @@ #include #include -#include "UBGlobals.h" +#include "globals/UBGlobals.h" #include "UBWidgetList.h" UBWidgetList::UBWidgetList(QWidget* parent, eWidgetListOrientation orientation, const char* name):QScrollArea(parent) diff --git a/src/customWidgets/customWidgets.pri b/src/customWidgets/customWidgets.pri index aa7b0255..cd14ff64 100644 --- a/src/customWidgets/customWidgets.pri +++ b/src/customWidgets/customWidgets.pri @@ -2,7 +2,7 @@ HEADERS += src/customWidgets/UBWidgetList.h \ src/customWidgets/UBDraggableLabel.h \ src/customWidgets/UBMediaWidget.h \ - src/customWidgets/UBGlobals.h \ + src/globals/UBGlobals.h \ src/customWidgets/UBDraggableMedia.h SOURCES += src/customWidgets/UBWidgetList.cpp \ diff --git a/src/globals/UBGlobals.h b/src/globals/UBGlobals.h new file mode 100644 index 00000000..a76d6cad --- /dev/null +++ b/src/globals/UBGlobals.h @@ -0,0 +1,46 @@ +#ifndef UBGLOBALS_H +#define UBGLOBALS_H + +#define DELETEPTR(ptr) if(NULL != ptr){ \ + delete ptr; \ + ptr = NULL; \ + } + +#ifdef Q_WS_WIN + +#define WARNINGS_DISABLE __pragma(warning(push, 0)); +#define WARNINGS_ENABLE __pragma(warning(pop)); + +#ifdef NO_THIRD_PARTY_WARNINGS +// disabling warning level to 0 and save old state +#define THIRD_PARTY_WARNINGS_DISABLE WARNINGS_DISABLE +#else +// just save old state (needs for not empty define) +#define THIRD_PARTY_WARNINGS_DISABLE __pragma(warning(push)); +#endif //#ifdef NO_THIRD_PARTY_WARNINGS +// anyway on WIN +#define THIRD_PARTY_WARNINGS_ENABLE WARNINGS_ENABLE + +#else //#ifdef Q_WS_WIN + +#define WARNINGS_DISABLE _Pragma("GCC diagnostic push"); \ +_Pragma("GCC diagnostic ignored \"-Wunused-parameter\""); \ +_Pragma("GCC diagnostic ignored \"-Wunused-variable\""); \ +_Pragma("GCC diagnostic ignored \"-Wsign-compare\""); + +#define WARNINGS_ENABLE _Pragma("GCC diagnostic pop"); + +#ifdef NO_THIRD_PARTY_WARNINGS +//disabling some warnings +#define THIRD_PARTY_WARNINGS_DISABLE WARNINGS_DISABLE + +#else +// just save old state (needs for not empty define) +#define THIRD_PARTY_WARNINGS_ENABLE WARNINGS_ENABLE + +#endif //#ifdef NO_THIRD_PARTY_WARNINGS + +#endif //#ifdef Q_WS_WIN + +#endif // UBGLOBALS_H + \ No newline at end of file diff --git a/src/gui/UBTBDocumentEditWidget.cpp b/src/gui/UBTBDocumentEditWidget.cpp index 4139a9d2..261372b3 100644 --- a/src/gui/UBTBDocumentEditWidget.cpp +++ b/src/gui/UBTBDocumentEditWidget.cpp @@ -1,7 +1,7 @@ #include #include "UBTBDocumentEditWidget.h" -#include "customWidgets/UBGlobals.h" +#include "globals/UBGlobals.h" UBTBDocumentEditWidget::UBTBDocumentEditWidget(UBTeacherBarDataMgr* pDataMgr, QWidget *parent, const char *name):QWidget(parent) , mpPageViewButton(NULL) diff --git a/src/gui/UBTBDocumentPreviewWidget.cpp b/src/gui/UBTBDocumentPreviewWidget.cpp index 81dbad2e..9f2ca0d8 100644 --- a/src/gui/UBTBDocumentPreviewWidget.cpp +++ b/src/gui/UBTBDocumentPreviewWidget.cpp @@ -1,4 +1,4 @@ -#include "customWidgets/UBGlobals.h" +#include "globals/UBGlobals.h" #include "UBTBDocumentPreviewWidget.h" UBTBDocumentPreviewWidget::UBTBDocumentPreviewWidget(UBTeacherBarDataMgr *pDataMgr, QWidget *parent, const char *name):QWidget(parent) diff --git a/src/gui/UBTBPageEditWidget.cpp b/src/gui/UBTBPageEditWidget.cpp index e2142b13..141c706f 100644 --- a/src/gui/UBTBPageEditWidget.cpp +++ b/src/gui/UBTBPageEditWidget.cpp @@ -1,4 +1,4 @@ -#include "customWidgets/UBGlobals.h" +#include "globals/UBGlobals.h" #include "core/UBApplication.h" #include "frameworks/UBFileSystemUtils.h" #include "gui/UBMediaPlayer.h" diff --git a/src/gui/UBTeacherBarDataMgr.cpp b/src/gui/UBTeacherBarDataMgr.cpp index dd1f2b44..e2e2bdad 100644 --- a/src/gui/UBTeacherBarDataMgr.cpp +++ b/src/gui/UBTeacherBarDataMgr.cpp @@ -7,7 +7,7 @@ #include "board/UBBoardController.h" -#include "customWidgets/UBGlobals.h" +#include "globals/UBGlobals.h" #include "adaptors/UBMetadataDcSubsetAdaptor.h" diff --git a/src/gui/UBTeacherBarPreviewWidget.cpp b/src/gui/UBTeacherBarPreviewWidget.cpp index a02794b8..e82acd30 100644 --- a/src/gui/UBTeacherBarPreviewWidget.cpp +++ b/src/gui/UBTeacherBarPreviewWidget.cpp @@ -1,5 +1,5 @@ #include "core/UBApplication.h" -#include "customWidgets/UBGlobals.h" +#include "globals/UBGlobals.h" #include "board/UBBoardController.h" #include "frameworks/UBFileSystemUtils.h" diff --git a/src/gui/UBTeacherBarWidget.cpp b/src/gui/UBTeacherBarWidget.cpp index 1596b6b0..7ee9a70b 100644 --- a/src/gui/UBTeacherBarWidget.cpp +++ b/src/gui/UBTeacherBarWidget.cpp @@ -15,7 +15,7 @@ #include "customWidgets/UBDraggableLabel.h" #include "customWidgets/UBMediaWidget.h" -#include "customWidgets/UBGlobals.h" +#include "globals/UBGlobals.h" #include "core/memcheck.h" diff --git a/src/pdf/XPDFRenderer.h b/src/pdf/XPDFRenderer.h index b8ad475e..3b6d48c3 100644 --- a/src/pdf/XPDFRenderer.h +++ b/src/pdf/XPDFRenderer.h @@ -18,10 +18,15 @@ #include #include "PDFRenderer.h" #include + +#include "globals/UBGlobals.h" + +THIRD_PARTY_WARNINGS_DISABLE #include #include #include #include +THIRD_PARTY_WARNINGS_ENABLE class PDFDoc; From f5e37779d4a10f5ae708adf94150b432c94c6820 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Mon, 6 Feb 2012 13:46:52 +0200 Subject: [PATCH 18/24] Fix to disabling warnings. --- src/globals/UBGlobals.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/globals/UBGlobals.h b/src/globals/UBGlobals.h index a76d6cad..97b667bb 100644 --- a/src/globals/UBGlobals.h +++ b/src/globals/UBGlobals.h @@ -33,7 +33,7 @@ _Pragma("GCC diagnostic ignored \"-Wsign-compare\""); #ifdef NO_THIRD_PARTY_WARNINGS //disabling some warnings #define THIRD_PARTY_WARNINGS_DISABLE WARNINGS_DISABLE - +#define THIRD_PARTY_WARNINGS_ENABLE WARNINGS_ENABLE #else // just save old state (needs for not empty define) #define THIRD_PARTY_WARNINGS_ENABLE WARNINGS_ENABLE From 65dc04227a430f5c9aad4429125661e68c4bfce5 Mon Sep 17 00:00:00 2001 From: shibakaneki Date: Mon, 6 Feb 2012 13:48:07 +0100 Subject: [PATCH 19/24] Merge branch 'master' of github.com:Sankore/Sankore-3.1 src/customWidgets/customWidgets.pri --- Sankore_3.1.pro | 2 + src/adaptors/UBExportDocument.cpp | 4 ++ src/adaptors/UBExportWeb.cpp | 4 ++ src/adaptors/UBImportCFF.cpp | 4 ++ src/adaptors/UBImportDocument.cpp | 4 ++ .../publishing/UBDocumentPublisher.cpp | 4 ++ src/board/UBBoardPaletteManager.cpp | 35 -------------- src/customWidgets/UBGlobals.h | 9 ---- src/customWidgets/UBMediaWidget.cpp | 2 +- src/customWidgets/UBWidgetList.cpp | 2 +- src/customWidgets/customWidgets.pri | 2 +- src/globals/UBGlobals.h | 46 +++++++++++++++++++ src/gui/UBTBDocumentEditWidget.cpp | 2 +- src/gui/UBTBDocumentPreviewWidget.cpp | 2 +- src/gui/UBTBPageEditWidget.cpp | 2 +- src/gui/UBTeacherBarDataMgr.cpp | 2 +- src/gui/UBTeacherBarPreviewWidget.cpp | 2 +- src/gui/UBTeacherBarWidget.cpp | 2 +- src/pdf/XPDFRenderer.h | 5 ++ 19 files changed, 82 insertions(+), 53 deletions(-) delete mode 100644 src/customWidgets/UBGlobals.h create mode 100644 src/globals/UBGlobals.h diff --git a/Sankore_3.1.pro b/Sankore_3.1.pro index bdc7704c..e17a120a 100644 --- a/Sankore_3.1.pro +++ b/Sankore_3.1.pro @@ -35,6 +35,7 @@ QT += script QT += xmlpatterns INCLUDEPATH += src +INCLUDEPATH += globals include($$THIRD_PARTY_PATH/libs.pri) include(src/adaptors/adaptors.pri) @@ -83,6 +84,7 @@ UB_LIBRARY.files = resources/library UB_FONTS.files = resources/fonts UB_THIRDPARTY_INTERACTIVE.files = thirdparty/interactive +DEFINES += NO_THIRD_PARTY_WARNINGS DEFINES += UBVERSION=\"\\\"$${LONG_VERSION}\"\\\" \ UBVERSION_RC=$$VERSION_RC ALPHA_BETA_STR = $$find(VERSION, "[ab]") diff --git a/src/adaptors/UBExportDocument.cpp b/src/adaptors/UBExportDocument.cpp index 27ea87d7..95a8e4bc 100644 --- a/src/adaptors/UBExportDocument.cpp +++ b/src/adaptors/UBExportDocument.cpp @@ -22,8 +22,12 @@ #include "document/UBDocumentProxy.h" +#include "globals/UBGlobals.h" + +THIRD_PARTY_WARNINGS_DISABLE #include "quazip.h" #include "quazipfile.h" +THIRD_PARTY_WARNINGS_ENABLE #include "transition/UniboardSankoreTransition.h" diff --git a/src/adaptors/UBExportWeb.cpp b/src/adaptors/UBExportWeb.cpp index bfdedfe5..59a9c31b 100644 --- a/src/adaptors/UBExportWeb.cpp +++ b/src/adaptors/UBExportWeb.cpp @@ -23,8 +23,12 @@ #include "document/UBDocumentProxy.h" +#include "globals/UBGlobals.h" + +THIRD_PARTY_WARNINGS_DISABLE #include "quazip.h" #include "quazipfile.h" +THIRD_PARTY_WARNINGS_ENABLE #include "core/memcheck.h" diff --git a/src/adaptors/UBImportCFF.cpp b/src/adaptors/UBImportCFF.cpp index 448e2834..6b4fa318 100644 --- a/src/adaptors/UBImportCFF.cpp +++ b/src/adaptors/UBImportCFF.cpp @@ -27,9 +27,13 @@ #include "UBCFFSubsetAdaptor.h" #include "UBImportCFF.h" +#include "globals/UBGlobals.h" + +THIRD_PARTY_WARNINGS_DISABLE #include "quazip.h" #include "quazipfile.h" #include "quazipfileinfo.h" +THIRD_PARTY_WARNINGS_ENABLE #include "core/memcheck.h" diff --git a/src/adaptors/UBImportDocument.cpp b/src/adaptors/UBImportDocument.cpp index f441b980..3e7808cf 100644 --- a/src/adaptors/UBImportDocument.cpp +++ b/src/adaptors/UBImportDocument.cpp @@ -22,9 +22,13 @@ #include "core/UBSettings.h" #include "core/UBPersistenceManager.h" +#include "globals/UBGlobals.h" + +THIRD_PARTY_WARNINGS_DISABLE #include "quazip.h" #include "quazipfile.h" #include "quazipfileinfo.h" +THIRD_PARTY_WARNINGS_ENABLE #include "core/memcheck.h" diff --git a/src/adaptors/publishing/UBDocumentPublisher.cpp b/src/adaptors/publishing/UBDocumentPublisher.cpp index d3ec39dd..686b9d94 100644 --- a/src/adaptors/publishing/UBDocumentPublisher.cpp +++ b/src/adaptors/publishing/UBDocumentPublisher.cpp @@ -34,8 +34,12 @@ #include "domain/UBGraphicsWidgetItem.h" +#include "globals/UBGlobals.h" + +THIRD_PARTY_WARNINGS_DISABLE #include "quazip.h" #include "quazipfile.h" +THIRD_PARTY_WARNINGS_ENABLE #include "adaptors/UBExportFullPDF.h" #include "adaptors/UBExportDocument.h" diff --git a/src/board/UBBoardPaletteManager.cpp b/src/board/UBBoardPaletteManager.cpp index 1fefd94b..54fe2a33 100644 --- a/src/board/UBBoardPaletteManager.cpp +++ b/src/board/UBBoardPaletteManager.cpp @@ -92,43 +92,8 @@ UBBoardPaletteManager::UBBoardPaletteManager(QWidget* container, UBBoardControll UBBoardPaletteManager::~UBBoardPaletteManager() { - if(NULL != mpDownloadWidget) - { - delete mpDownloadWidget; - mpDownloadWidget = NULL; - } - if(NULL != mpTeacherBarWidget) - { - delete mpTeacherBarWidget; - mpTeacherBarWidget = NULL; - } - if(NULL != mpPageNavigWidget) - { - delete mpPageNavigWidget; - mpPageNavigWidget = NULL; - } - if(NULL != mpLibWidget) - { - delete mpLibWidget; - mpLibWidget = NULL; - } - if(NULL != mpCachePropWidget) - { - delete mpCachePropWidget; - mpCachePropWidget = NULL; - } delete mAddItemPalette; - if(NULL != mLeftPalette) - { - delete mLeftPalette; - mLeftPalette = NULL; - } - if(NULL != mRightPalette) - { - delete mRightPalette; - mRightPalette = NULL; - } if(NULL != mStylusPalette) { diff --git a/src/customWidgets/UBGlobals.h b/src/customWidgets/UBGlobals.h deleted file mode 100644 index 1707ceac..00000000 --- a/src/customWidgets/UBGlobals.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef UBGLOBALS_H -#define UBGLOBALS_H - -#define DELETEPTR(ptr) if(NULL != ptr){ \ - delete ptr; \ - ptr = NULL; \ - } - -#endif // UBGLOBALS_H diff --git a/src/customWidgets/UBMediaWidget.cpp b/src/customWidgets/UBMediaWidget.cpp index ee71a664..8fb69cc3 100644 --- a/src/customWidgets/UBMediaWidget.cpp +++ b/src/customWidgets/UBMediaWidget.cpp @@ -13,7 +13,7 @@ * along with this program. If not, see . */ #include "core/UBApplication.h" -#include "UBGlobals.h" +#include "globals/UBGlobals.h" #include "UBMediaWidget.h" /** diff --git a/src/customWidgets/UBWidgetList.cpp b/src/customWidgets/UBWidgetList.cpp index 62ed6677..dce108e1 100644 --- a/src/customWidgets/UBWidgetList.cpp +++ b/src/customWidgets/UBWidgetList.cpp @@ -3,7 +3,7 @@ #include #include -#include "UBGlobals.h" +#include "globals/UBGlobals.h" #include "UBWidgetList.h" UBWidgetList::UBWidgetList(QWidget* parent, eWidgetListOrientation orientation, const char* name):QScrollArea(parent) diff --git a/src/customWidgets/customWidgets.pri b/src/customWidgets/customWidgets.pri index 5fe74b8c..c531d4b3 100644 --- a/src/customWidgets/customWidgets.pri +++ b/src/customWidgets/customWidgets.pri @@ -2,7 +2,7 @@ HEADERS += src/customWidgets/UBWidgetList.h \ src/customWidgets/UBDraggableLabel.h \ src/customWidgets/UBMediaWidget.h \ - src/customWidgets/UBGlobals.h \ + src/globals/UBGlobals.h \ src/customWidgets/UBDraggableMedia.h \ src/customWidgets/UBActionableWidget.h diff --git a/src/globals/UBGlobals.h b/src/globals/UBGlobals.h new file mode 100644 index 00000000..a76d6cad --- /dev/null +++ b/src/globals/UBGlobals.h @@ -0,0 +1,46 @@ +#ifndef UBGLOBALS_H +#define UBGLOBALS_H + +#define DELETEPTR(ptr) if(NULL != ptr){ \ + delete ptr; \ + ptr = NULL; \ + } + +#ifdef Q_WS_WIN + +#define WARNINGS_DISABLE __pragma(warning(push, 0)); +#define WARNINGS_ENABLE __pragma(warning(pop)); + +#ifdef NO_THIRD_PARTY_WARNINGS +// disabling warning level to 0 and save old state +#define THIRD_PARTY_WARNINGS_DISABLE WARNINGS_DISABLE +#else +// just save old state (needs for not empty define) +#define THIRD_PARTY_WARNINGS_DISABLE __pragma(warning(push)); +#endif //#ifdef NO_THIRD_PARTY_WARNINGS +// anyway on WIN +#define THIRD_PARTY_WARNINGS_ENABLE WARNINGS_ENABLE + +#else //#ifdef Q_WS_WIN + +#define WARNINGS_DISABLE _Pragma("GCC diagnostic push"); \ +_Pragma("GCC diagnostic ignored \"-Wunused-parameter\""); \ +_Pragma("GCC diagnostic ignored \"-Wunused-variable\""); \ +_Pragma("GCC diagnostic ignored \"-Wsign-compare\""); + +#define WARNINGS_ENABLE _Pragma("GCC diagnostic pop"); + +#ifdef NO_THIRD_PARTY_WARNINGS +//disabling some warnings +#define THIRD_PARTY_WARNINGS_DISABLE WARNINGS_DISABLE + +#else +// just save old state (needs for not empty define) +#define THIRD_PARTY_WARNINGS_ENABLE WARNINGS_ENABLE + +#endif //#ifdef NO_THIRD_PARTY_WARNINGS + +#endif //#ifdef Q_WS_WIN + +#endif // UBGLOBALS_H + \ No newline at end of file diff --git a/src/gui/UBTBDocumentEditWidget.cpp b/src/gui/UBTBDocumentEditWidget.cpp index 4139a9d2..261372b3 100644 --- a/src/gui/UBTBDocumentEditWidget.cpp +++ b/src/gui/UBTBDocumentEditWidget.cpp @@ -1,7 +1,7 @@ #include #include "UBTBDocumentEditWidget.h" -#include "customWidgets/UBGlobals.h" +#include "globals/UBGlobals.h" UBTBDocumentEditWidget::UBTBDocumentEditWidget(UBTeacherBarDataMgr* pDataMgr, QWidget *parent, const char *name):QWidget(parent) , mpPageViewButton(NULL) diff --git a/src/gui/UBTBDocumentPreviewWidget.cpp b/src/gui/UBTBDocumentPreviewWidget.cpp index 81dbad2e..9f2ca0d8 100644 --- a/src/gui/UBTBDocumentPreviewWidget.cpp +++ b/src/gui/UBTBDocumentPreviewWidget.cpp @@ -1,4 +1,4 @@ -#include "customWidgets/UBGlobals.h" +#include "globals/UBGlobals.h" #include "UBTBDocumentPreviewWidget.h" UBTBDocumentPreviewWidget::UBTBDocumentPreviewWidget(UBTeacherBarDataMgr *pDataMgr, QWidget *parent, const char *name):QWidget(parent) diff --git a/src/gui/UBTBPageEditWidget.cpp b/src/gui/UBTBPageEditWidget.cpp index 12424a1a..68928bce 100644 --- a/src/gui/UBTBPageEditWidget.cpp +++ b/src/gui/UBTBPageEditWidget.cpp @@ -1,4 +1,4 @@ -#include "customWidgets/UBGlobals.h" +#include "globals/UBGlobals.h" #include "core/UBApplication.h" #include "frameworks/UBFileSystemUtils.h" #include "gui/UBMediaPlayer.h" diff --git a/src/gui/UBTeacherBarDataMgr.cpp b/src/gui/UBTeacherBarDataMgr.cpp index dd1f2b44..e2e2bdad 100644 --- a/src/gui/UBTeacherBarDataMgr.cpp +++ b/src/gui/UBTeacherBarDataMgr.cpp @@ -7,7 +7,7 @@ #include "board/UBBoardController.h" -#include "customWidgets/UBGlobals.h" +#include "globals/UBGlobals.h" #include "adaptors/UBMetadataDcSubsetAdaptor.h" diff --git a/src/gui/UBTeacherBarPreviewWidget.cpp b/src/gui/UBTeacherBarPreviewWidget.cpp index a02794b8..e82acd30 100644 --- a/src/gui/UBTeacherBarPreviewWidget.cpp +++ b/src/gui/UBTeacherBarPreviewWidget.cpp @@ -1,5 +1,5 @@ #include "core/UBApplication.h" -#include "customWidgets/UBGlobals.h" +#include "globals/UBGlobals.h" #include "board/UBBoardController.h" #include "frameworks/UBFileSystemUtils.h" diff --git a/src/gui/UBTeacherBarWidget.cpp b/src/gui/UBTeacherBarWidget.cpp index 1596b6b0..7ee9a70b 100644 --- a/src/gui/UBTeacherBarWidget.cpp +++ b/src/gui/UBTeacherBarWidget.cpp @@ -15,7 +15,7 @@ #include "customWidgets/UBDraggableLabel.h" #include "customWidgets/UBMediaWidget.h" -#include "customWidgets/UBGlobals.h" +#include "globals/UBGlobals.h" #include "core/memcheck.h" diff --git a/src/pdf/XPDFRenderer.h b/src/pdf/XPDFRenderer.h index b8ad475e..3b6d48c3 100644 --- a/src/pdf/XPDFRenderer.h +++ b/src/pdf/XPDFRenderer.h @@ -18,10 +18,15 @@ #include #include "PDFRenderer.h" #include + +#include "globals/UBGlobals.h" + +THIRD_PARTY_WARNINGS_DISABLE #include #include #include #include +THIRD_PARTY_WARNINGS_ENABLE class PDFDoc; From c570dce91a8217ef08bfb1d0275154dc2c8ff627 Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Mon, 6 Feb 2012 15:01:39 +0100 Subject: [PATCH 20/24] removing warning act 1 --- src/adaptors/UBExportFullPDF.cpp | 3 --- src/customWidgets/UBWidgetList.cpp | 3 ++- src/frameworks/UBBase32.cpp | 2 +- src/gui/UBDockPalette.h | 2 +- src/gui/UBTBDocumentPreviewWidget.cpp | 2 +- src/gui/UBTeacherBarDataMgr.cpp | 2 ++ src/gui/UBTeacherBarPreviewWidget.cpp | 2 ++ src/podcast/youtube/UBYouTubePublisher.cpp | 3 ++- src/web/UBOEmbedParser.cpp | 2 +- src/web/browser/WBSearchLineEdit.cpp | 1 - 10 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/adaptors/UBExportFullPDF.cpp b/src/adaptors/UBExportFullPDF.cpp index 402ef9cb..858809c6 100644 --- a/src/adaptors/UBExportFullPDF.cpp +++ b/src/adaptors/UBExportFullPDF.cpp @@ -179,9 +179,6 @@ void UBExportFullPDF::persistsDocument(UBDocumentProxy* pDocumentProxy, const QS QString pdfName = UBPersistenceManager::objectDirectory + "/" + pdfItem->fileUuid().toString() + ".pdf"; QString backgroundPath = pDocumentProxy->persistencePath() + "/" + pdfName; - QPointF boudingRectBottomLeft = scene->itemsBoundingRect().bottomLeft(); - QPointF pdfItemBottomLeft = pdfItem->sceneBoundingRect().bottomLeft(); - qDebug() << "scene->itemsBoundingRect()" << scene->itemsBoundingRect(); qDebug() << "pdfItem->boundingRect()" << pdfItem->boundingRect(); qDebug() << "pdfItem->sceneBoundingRect()" << pdfItem->sceneBoundingRect(); diff --git a/src/customWidgets/UBWidgetList.cpp b/src/customWidgets/UBWidgetList.cpp index e15bb2e0..1cebaa49 100644 --- a/src/customWidgets/UBWidgetList.cpp +++ b/src/customWidgets/UBWidgetList.cpp @@ -5,12 +5,12 @@ #include "UBWidgetList.h" UBWidgetList::UBWidgetList(QWidget* parent, eWidgetListOrientation orientation, const char* name):QScrollArea(parent) + , mCanRemove(true) , mpLayout(NULL) , mpContainer(NULL) , mMargin(5) , mListElementsSpacing(10) , mpEmptyLabel(NULL) - , mCanRemove(true) , mpCurrentWidget(NULL) { setObjectName(name); @@ -134,6 +134,7 @@ void UBWidgetList::resizeEvent(QResizeEvent *ev) void UBWidgetList::mousePressEvent(QMouseEvent *ev) { + Q_UNUSED(ev); if(mCanRemove){ } diff --git a/src/frameworks/UBBase32.cpp b/src/frameworks/UBBase32.cpp index efd0b614..29fcb75c 100644 --- a/src/frameworks/UBBase32.cpp +++ b/src/frameworks/UBBase32.cpp @@ -47,7 +47,7 @@ QByteArray UBBase32::decode(const QString& base32String) if (lookup < 0 || lookup >= 80) continue; - int digit = sBase32Lookup[lookup]; + int digit = sBase32Lookup[(int)lookup]; /* If this digit is not in the table, ignore it */ if (digit == 0xFF) diff --git a/src/gui/UBDockPalette.h b/src/gui/UBDockPalette.h index ff3b546d..0d660e0a 100644 --- a/src/gui/UBDockPalette.h +++ b/src/gui/UBDockPalette.h @@ -191,8 +191,8 @@ private: void resizeTabs(); private: - UBTabDockPalete *mTabPalette; eUBDockPaletteType mPaletteType; + UBTabDockPalete *mTabPalette; }; #endif // UBDOCKPALETTE_H diff --git a/src/gui/UBTBDocumentPreviewWidget.cpp b/src/gui/UBTBDocumentPreviewWidget.cpp index 9f2ca0d8..ed54ee1b 100644 --- a/src/gui/UBTBDocumentPreviewWidget.cpp +++ b/src/gui/UBTBDocumentPreviewWidget.cpp @@ -2,6 +2,7 @@ #include "UBTBDocumentPreviewWidget.h" UBTBDocumentPreviewWidget::UBTBDocumentPreviewWidget(UBTeacherBarDataMgr *pDataMgr, QWidget *parent, const char *name):QWidget(parent) + , mpContainer(NULL) , mpPageViewButton(NULL) , mpEditButton(NULL) , mpSessionLabel(NULL) @@ -19,7 +20,6 @@ UBTBDocumentPreviewWidget::UBTBDocumentPreviewWidget(UBTeacherBarDataMgr *pDataM , mpTopicLabel(NULL) , mpTopic(NULL) , mpLicense(NULL) - , mpContainer(NULL) { setObjectName(name); mpDataMgr = pDataMgr; diff --git a/src/gui/UBTeacherBarDataMgr.cpp b/src/gui/UBTeacherBarDataMgr.cpp index e2e2bdad..ae84996b 100644 --- a/src/gui/UBTeacherBarDataMgr.cpp +++ b/src/gui/UBTeacherBarDataMgr.cpp @@ -74,6 +74,7 @@ void UBTeacherBarDataMgr::saveContent() void UBTeacherBarDataMgr::loadContent(bool docChanged) { + Q_UNUSED(docChanged); clearLists(); UBDocumentProxy* documentProxy = UBApplication::boardController->activeDocument(); @@ -132,6 +133,7 @@ void UBTeacherBarDataMgr::loadContent(bool docChanged) // ------------------------------------------------------------------------------------ UBTBSeparator::UBTBSeparator(QWidget *parent, const char *name):QFrame(parent) { + Q_UNUSED(name); setObjectName("UBTBSeparator"); setMinimumHeight(5); setMaximumHeight(5); diff --git a/src/gui/UBTeacherBarPreviewWidget.cpp b/src/gui/UBTeacherBarPreviewWidget.cpp index e82acd30..46cf05e5 100644 --- a/src/gui/UBTeacherBarPreviewWidget.cpp +++ b/src/gui/UBTeacherBarPreviewWidget.cpp @@ -37,6 +37,7 @@ void UBTeacherBarPreviewMedia::cleanMedia() void UBTeacherBarPreviewMedia::loadWidgets(QList pWidgetsList, bool isResizable) { + Q_UNUSED(isResizable); foreach(QWidget*eachWidget, pWidgetsList){ mWidget->addWidget(eachWidget); mWidgetList[eachWidget]="DRAG UNAVAILABLE"; @@ -362,6 +363,7 @@ void UBTeacherBarPreviewWidget::generateComments() void UBTeacherBarPreviewWidget::showEvent(QShowEvent* ev) { + Q_UNUSED(ev); updateFields(); } diff --git a/src/podcast/youtube/UBYouTubePublisher.cpp b/src/podcast/youtube/UBYouTubePublisher.cpp index f160d4a4..ebd6fb61 100644 --- a/src/podcast/youtube/UBYouTubePublisher.cpp +++ b/src/podcast/youtube/UBYouTubePublisher.cpp @@ -112,6 +112,7 @@ void UBYouTubePublisher::postClientLoginRequest(const QString& userName, const Q void UBYouTubePublisher::postClientLoginResponse(bool success, const QByteArray& pPayload) { + Q_UNUSED(success); mAuthToken = ""; QString auth = QString::fromUtf8(pPayload); @@ -136,7 +137,7 @@ void UBYouTubePublisher::postClientLoginResponse(bool success, const QByteArray& if(mAuthToken.length() == 0) { UBApplication::showMessage(tr("YouTube authentication failed.")); - success = false; +// success = false; deleteLater(); } else diff --git a/src/web/UBOEmbedParser.cpp b/src/web/UBOEmbedParser.cpp index f4247bd0..1cb8e1f8 100644 --- a/src/web/UBOEmbedParser.cpp +++ b/src/web/UBOEmbedParser.cpp @@ -26,6 +26,7 @@ UBOEmbedParser::UBOEmbedParser(QObject *parent, const char* name) { + Q_UNUSED(parent); setObjectName(name); mParsedTitles.clear(); connect(this, SIGNAL(parseContent(QString)), this, SLOT(onParseContent(QString))); @@ -223,7 +224,6 @@ void UBOEmbedParser::onParseContent(QString url) void UBOEmbedParser::onFinished(QNetworkReply *reply) { - QNetworkReply::NetworkError err = reply->error(); if(QNetworkReply::NoError == reply->error()){ QString receivedDatas = reply->readAll().constData(); sOEmbedContent crntContent; diff --git a/src/web/browser/WBSearchLineEdit.cpp b/src/web/browser/WBSearchLineEdit.cpp index cc91b23d..cffca189 100644 --- a/src/web/browser/WBSearchLineEdit.cpp +++ b/src/web/browser/WBSearchLineEdit.cpp @@ -75,7 +75,6 @@ void WBClearButton::paintEvent(QPaintEvent *event) int height = this->height(); painter.setRenderHint(QPainter::Antialiasing, true); - QColor color = palette().color(QPalette::Mid); painter.setBrush(isDown() ? palette().color(QPalette::Dark) : palette().color(QPalette::Mid)); From cf91bdd07ff6158008eb544c0030684522089a3e Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Mon, 6 Feb 2012 16:35:45 +0100 Subject: [PATCH 21/24] removing warning act 2 --- src/customWidgets/UBActionableWidget.cpp | 1 + src/customWidgets/UBDraggableMedia.cpp | 2 +- src/gui/UBTBPageEditWidget.cpp | 1 + src/pdf-merger/ASCII85Decode.cpp | 13 +++++++-- src/pdf-merger/ASCII85Decode.h | 4 +-- src/pdf-merger/ASCIIHexDecode.cpp | 13 ++++++++- src/pdf-merger/ASCIIHexDecode.h | 4 +-- src/pdf-merger/CCITTFaxDecode.cpp | 36 ++++++++++++++++++++++++ src/pdf-merger/CCITTFaxDecode.h | 8 ++++-- src/pdf-merger/ContentHandler.cpp | 1 + src/pdf-merger/DCTDecode.cpp | 36 ++++++++++++++++++++++++ src/pdf-merger/DCTDecode.h | 8 +++--- src/pdf-merger/Document.cpp | 3 +- src/pdf-merger/FilterPredictor.cpp | 7 +++++ src/pdf-merger/FilterPredictor.h | 2 +- src/pdf-merger/JBIG2Decode.cpp | 36 ++++++++++++++++++++++++ src/pdf-merger/JBIG2Decode.h | 7 +++-- src/pdf-merger/LZWDecode.cpp | 5 ++++ src/pdf-merger/LZWDecode.h | 2 +- src/pdf-merger/PageElementHandler.cpp | 8 +++++- src/pdf-merger/PageElementHandler.h | 4 +-- src/pdf-merger/RunLengthDecode.cpp | 14 ++++++++- src/pdf-merger/RunLengthDecode.h | 4 +-- src/pdf-merger/pdfMerger.pri | 8 +++++- 24 files changed, 199 insertions(+), 28 deletions(-) create mode 100644 src/pdf-merger/CCITTFaxDecode.cpp create mode 100644 src/pdf-merger/DCTDecode.cpp create mode 100644 src/pdf-merger/JBIG2Decode.cpp diff --git a/src/customWidgets/UBActionableWidget.cpp b/src/customWidgets/UBActionableWidget.cpp index 47af2621..20ddaf69 100644 --- a/src/customWidgets/UBActionableWidget.cpp +++ b/src/customWidgets/UBActionableWidget.cpp @@ -57,6 +57,7 @@ bool UBActionableWidget::shouldClose(QPoint p) void UBActionableWidget::paintEvent(QPaintEvent* ev) { + Q_UNUSED(ev); if(mShowActions){ QPainter p(this); if(mActions.contains(eAction_Close)){ diff --git a/src/customWidgets/UBDraggableMedia.cpp b/src/customWidgets/UBDraggableMedia.cpp index 6d2551f2..7b976707 100644 --- a/src/customWidgets/UBDraggableMedia.cpp +++ b/src/customWidgets/UBDraggableMedia.cpp @@ -38,5 +38,5 @@ void UBDraggableMedia::mouseMoveEvent(QMouseEvent* ev) drag->setMimeData(mimeData); - Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction); + drag->exec(Qt::CopyAction | Qt::MoveAction); } diff --git a/src/gui/UBTBPageEditWidget.cpp b/src/gui/UBTBPageEditWidget.cpp index 68928bce..7957d6ab 100644 --- a/src/gui/UBTBPageEditWidget.cpp +++ b/src/gui/UBTBPageEditWidget.cpp @@ -578,5 +578,6 @@ UBPictureWidget::~UBPictureWidget() void UBPictureWidget::resizeEvent(QResizeEvent *ev) { + Q_UNUSED(ev); mpLabel->setGeometry( 10, 10, width()-2*10, height()); } diff --git a/src/pdf-merger/ASCII85Decode.cpp b/src/pdf-merger/ASCII85Decode.cpp index 1a3d3ac9..640bf5fa 100644 --- a/src/pdf-merger/ASCII85Decode.cpp +++ b/src/pdf-merger/ASCII85Decode.cpp @@ -13,7 +13,7 @@ * along with this program. If not, see . */ #include - +#include #include "ASCII85Decode.h" #include "core/memcheck.h" @@ -51,6 +51,12 @@ void ASCII85Decode::_wput(std::string &cur,unsigned long tuple, int len) } } +bool ASCII85Decode::encode(std::string & decoded) +{ + Q_UNUSED(decoded); + return false; +} + bool ASCII85Decode::decode(std::string &encoded) { unsigned long tuple = 0; @@ -58,7 +64,6 @@ bool ASCII85Decode::decode(std::string &encoded) int count = 0; int size = encoded.size(); int i = 0; - bool found = false; for(;size;) { char ch = encoded[i++]; @@ -121,3 +126,7 @@ bool ASCII85Decode::decode(std::string &encoded) } return true; } +void ASCII85Decode::initialize(Object * objectWithStram) +{ + Q_UNUSED(objectWithStram); +}; diff --git a/src/pdf-merger/ASCII85Decode.h b/src/pdf-merger/ASCII85Decode.h index fb1094f0..a6d7ae3e 100644 --- a/src/pdf-merger/ASCII85Decode.h +++ b/src/pdf-merger/ASCII85Decode.h @@ -26,9 +26,9 @@ namespace merge_lib public: ASCII85Decode(){}; virtual ~ASCII85Decode(){}; - bool encode(std::string & decoded) {return false;} + bool encode(std::string & decoded); bool decode(std::string & encoded); - void initialize(Object * objectWithStram){}; + void initialize(Object * objectWithStram); private: void _wput(std::string &cur,unsigned long tuple, int len); diff --git a/src/pdf-merger/ASCIIHexDecode.cpp b/src/pdf-merger/ASCIIHexDecode.cpp index 17e184ac..93aa990e 100644 --- a/src/pdf-merger/ASCIIHexDecode.cpp +++ b/src/pdf-merger/ASCIIHexDecode.cpp @@ -13,7 +13,7 @@ * along with this program. If not, see . */ #include "ASCIIHexDecode.h" - +#include #include #include "Utils.h" @@ -42,6 +42,12 @@ static unsigned int convertHexVal(unsigned char c) return 0; } +bool ASCIIHexDecode::encode(std::string & decoded) +{ + Q_UNUSED(decoded); + return false; +} + bool ASCIIHexDecode::decode(std::string & encoded) { bool isLow = true; @@ -75,3 +81,8 @@ bool ASCIIHexDecode::decode(std::string & encoded) encoded = decoded; return true; } + +void ASCIIHexDecode::initialize(Object * objectWithStram) +{ + Q_UNUSED(objectWithStram); +} diff --git a/src/pdf-merger/ASCIIHexDecode.h b/src/pdf-merger/ASCIIHexDecode.h index 4b0e4a0b..35c80a36 100644 --- a/src/pdf-merger/ASCIIHexDecode.h +++ b/src/pdf-merger/ASCIIHexDecode.h @@ -26,9 +26,9 @@ namespace merge_lib public: ASCIIHexDecode(){}; virtual ~ASCIIHexDecode(){}; - bool encode(std::string & decoded){return false;} + bool encode(std::string & decoded); bool decode(std::string & encoded); - void initialize(Object * objectWithStram){}; + void initialize(Object * objectWithStram); }; } diff --git a/src/pdf-merger/CCITTFaxDecode.cpp b/src/pdf-merger/CCITTFaxDecode.cpp new file mode 100644 index 00000000..1b9310c9 --- /dev/null +++ b/src/pdf-merger/CCITTFaxDecode.cpp @@ -0,0 +1,36 @@ +/* + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include "CCITTFaxDecode.h" + +using namespace merge_lib; + +bool CCITTFaxDecode::encode(std::string & decoded) +{ + Q_UNUSED(decoded); + return true; +} + +bool CCITTFaxDecode::decode(std::string & encoded) +{ + Q_UNUSED(encoded); + return true; +} + +void CCITTFaxDecode::initialize(Object * objectWithStram) +{ + Q_UNUSED(objectWithStram); +} diff --git a/src/pdf-merger/CCITTFaxDecode.h b/src/pdf-merger/CCITTFaxDecode.h index add43139..9bc65ac8 100644 --- a/src/pdf-merger/CCITTFaxDecode.h +++ b/src/pdf-merger/CCITTFaxDecode.h @@ -16,6 +16,8 @@ #define CCITTFaxDecode_H #include +#include "Decoder.h" + namespace merge_lib { // this class provides method for FlateDecode encoding and decoding @@ -24,9 +26,9 @@ namespace merge_lib public: CCITTFaxDecode(){}; virtual ~CCITTFaxDecode(){}; - bool encode(std::string & decoded) {return true;}; - bool decode(std::string & encoded) {return true;}; - void initialize(Object * objectWithStram){}; + bool encode(std::string & decoded); + bool decode(std::string & encoded); + void initialize(Object * objectWithStram); }; } diff --git a/src/pdf-merger/ContentHandler.cpp b/src/pdf-merger/ContentHandler.cpp index 0e298b39..8194524e 100644 --- a/src/pdf-merger/ContentHandler.cpp +++ b/src/pdf-merger/ContentHandler.cpp @@ -12,6 +12,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ + #include "ContentHandler.h" #include "Filter.h" #include "FlateDecode.h" diff --git a/src/pdf-merger/DCTDecode.cpp b/src/pdf-merger/DCTDecode.cpp new file mode 100644 index 00000000..603926c5 --- /dev/null +++ b/src/pdf-merger/DCTDecode.cpp @@ -0,0 +1,36 @@ +/* + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include "DCTDecode.h" + +using namespace merge_lib; + +bool DCTDecode::encode(std::string & decoded) +{ + Q_UNUSED(decoded); + return true; +} + +bool DCTDecode::decode(std::string & encoded) +{ + Q_UNUSED(encoded); + return true; +} + +void DCTDecode::initialize(Object * objectWithStram) +{ + Q_UNUSED(objectWithStram); +} diff --git a/src/pdf-merger/DCTDecode.h b/src/pdf-merger/DCTDecode.h index 011b9520..3e22cdc8 100644 --- a/src/pdf-merger/DCTDecode.h +++ b/src/pdf-merger/DCTDecode.h @@ -16,7 +16,7 @@ #define DCTDecode_H #include - +#include "Decoder.h" namespace merge_lib { // this class provides method for FlateDecode encoding and decoding @@ -25,9 +25,9 @@ namespace merge_lib public: DCTDecode(){}; virtual ~DCTDecode(){}; - bool encode(std::string & decoded) {return true;}; - bool decode(std::string & encoded) {return true;}; - void initialize(Object * objectWithStram){}; + bool encode(std::string & decoded); + bool decode(std::string & encoded); + void initialize(Object * objectWithStram); }; } diff --git a/src/pdf-merger/Document.cpp b/src/pdf-merger/Document.cpp index ac3c0cb8..fad1ee2b 100644 --- a/src/pdf-merger/Document.cpp +++ b/src/pdf-merger/Document.cpp @@ -28,7 +28,8 @@ using namespace merge_lib; const std::string firstObj("%PDF-1.4\n1 0 obj\n<<\n/Title ()/Creator ()/Producer (Qt 4.5.0 (C) 1992-2009 Nokia Corporation and/or its subsidiary(-ies))/CreationDate (D:20090424120829)\n>>\nendobj\n"); const std::string zeroStr("0000000000"); -Document::Document(const char * fileName): _pages(), _maxObjectNumber(0),_root(0),_documentName(fileName) +Document::Document(const char * fileName): + _root(0), _pages(), _documentName(fileName), _maxObjectNumber(0) { } diff --git a/src/pdf-merger/FilterPredictor.cpp b/src/pdf-merger/FilterPredictor.cpp index 4be65d31..b828c515 100644 --- a/src/pdf-merger/FilterPredictor.cpp +++ b/src/pdf-merger/FilterPredictor.cpp @@ -15,6 +15,7 @@ #include "Config.h" #include #include +#include #include "FilterPredictor.h" #include "Utils.h" @@ -49,6 +50,12 @@ FilterPredictor::~FilterPredictor() { } + bool FilterPredictor::encode(std::string & decoded) + { + Q_UNUSED(decoded); + return false; + } + std::string FilterPredictor::getDictionaryContentStr(std::string & in, size_t &pos ) { size_t beg = in.find(DICT_START_TOKEN,pos); diff --git a/src/pdf-merger/FilterPredictor.h b/src/pdf-merger/FilterPredictor.h index 45897d9b..f201fc52 100644 --- a/src/pdf-merger/FilterPredictor.h +++ b/src/pdf-merger/FilterPredictor.h @@ -27,7 +27,7 @@ namespace merge_lib public: FilterPredictor(); virtual ~FilterPredictor(); - bool encode(std::string & decoded){return false;} + bool encode(std::string & decoded); bool decode(std::string & encoded); void initialize(Object * objectWithStream); diff --git a/src/pdf-merger/JBIG2Decode.cpp b/src/pdf-merger/JBIG2Decode.cpp new file mode 100644 index 00000000..6ef248d0 --- /dev/null +++ b/src/pdf-merger/JBIG2Decode.cpp @@ -0,0 +1,36 @@ +/* + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include "JBIG2Decode.h" + +using namespace merge_lib; + +bool JBIG2Decode::encode(std::string & decoded) +{ + Q_UNUSED(decoded); + return true; +} + +bool JBIG2Decode::decode(std::string & encoded) +{ + Q_UNUSED(encoded); + return true; +} + +void JBIG2Decode::initialize(Object * objectWithStram) +{ + Q_UNUSED(objectWithStram); +} diff --git a/src/pdf-merger/JBIG2Decode.h b/src/pdf-merger/JBIG2Decode.h index f4ad9e17..4b7e7cbd 100644 --- a/src/pdf-merger/JBIG2Decode.h +++ b/src/pdf-merger/JBIG2Decode.h @@ -16,6 +16,7 @@ #define JBIG2Decode_H #include +#include "Decoder.h" namespace merge_lib { @@ -25,9 +26,9 @@ namespace merge_lib public: JBIG2Decode(){}; virtual ~JBIG2Decode(){}; - bool encode(std::string & decoded) {return true;}; - bool decode(std::string & encoded) {return true;}; - void initialize(Object * objectWithStram){}; + bool encode(std::string & decoded); + bool decode(std::string & encoded); + void initialize(Object * objectWithStram); }; } diff --git a/src/pdf-merger/LZWDecode.cpp b/src/pdf-merger/LZWDecode.cpp index fcc710df..c1b5a21a 100644 --- a/src/pdf-merger/LZWDecode.cpp +++ b/src/pdf-merger/LZWDecode.cpp @@ -44,6 +44,11 @@ LZWDecode::~LZWDecode() } } +bool LZWDecode::encode(std::string & decoded) +{ + return true; +} + void LZWDecode::initialize(Object * objectWithStream) { if( objectWithStream ) diff --git a/src/pdf-merger/LZWDecode.h b/src/pdf-merger/LZWDecode.h index 882276ab..e76d2b65 100644 --- a/src/pdf-merger/LZWDecode.h +++ b/src/pdf-merger/LZWDecode.h @@ -27,7 +27,7 @@ namespace merge_lib public: LZWDecode(); virtual ~LZWDecode(); - bool encode(std::string & decoded) {return true;}; + bool encode(std::string & decoded); bool decode(std::string & encoded); void initialize(Object * objectWithStram); private: diff --git a/src/pdf-merger/PageElementHandler.cpp b/src/pdf-merger/PageElementHandler.cpp index c29ada4a..462ea8b7 100644 --- a/src/pdf-merger/PageElementHandler.cpp +++ b/src/pdf-merger/PageElementHandler.cpp @@ -12,8 +12,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "PageElementHandler.h" +#include "PageElementHandler.h" +#include #include "core/memcheck.h" using namespace merge_lib; @@ -88,3 +89,8 @@ unsigned int PageElementHandler::_findEndOfElementContent(unsigned int startOfPa } return _pageContent.rfind(">>"); } + +void PageElementHandler::_processObjectContent(unsigned int startOfPageElement) +{ + Q_UNUSED(startOfPageElement); +} diff --git a/src/pdf-merger/PageElementHandler.h b/src/pdf-merger/PageElementHandler.h index 721476c0..c00cd93e 100644 --- a/src/pdf-merger/PageElementHandler.h +++ b/src/pdf-merger/PageElementHandler.h @@ -73,14 +73,14 @@ namespace merge_lib void _createAllPageFieldsSet(); //members - std::string & _pageContent; Object * _page; + std::string & _pageContent; std::string _handlerName; PageElementHandler * _nextHandler; private: //methods - virtual void _processObjectContent(unsigned int startOfPageElement){}; + virtual void _processObjectContent(unsigned int startOfPageElement); virtual void _changeObjectContent(unsigned int startOfPageElement) = 0; virtual void _pageElementNotFound() {}; unsigned int _findStartOfPageElement() diff --git a/src/pdf-merger/RunLengthDecode.cpp b/src/pdf-merger/RunLengthDecode.cpp index 33014041..cf5e64c0 100644 --- a/src/pdf-merger/RunLengthDecode.cpp +++ b/src/pdf-merger/RunLengthDecode.cpp @@ -12,12 +12,19 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "RunLengthDecode.h" +#include "RunLengthDecode.h" +#include #include "core/memcheck.h" using namespace merge_lib; +bool RunLengthDecode::encode(std::string & decoded) +{ + Q_UNUSED(decoded); + return false; +} + /* The encoded data is a sequence of runs, where each run consists of a length byte followed by 1 to 128 bytes of data. If the length byte is in the range 0 to 127, the following length + 1 (1 to 128) bytes @@ -57,3 +64,8 @@ bool RunLengthDecode::decode(std::string & encoded) } return true; } + +void RunLengthDecode::initialize(Object * objectWithStream) +{ + Q_UNUSED(objectWithStream); +}; diff --git a/src/pdf-merger/RunLengthDecode.h b/src/pdf-merger/RunLengthDecode.h index fd429eda..a6af064f 100644 --- a/src/pdf-merger/RunLengthDecode.h +++ b/src/pdf-merger/RunLengthDecode.h @@ -26,9 +26,9 @@ namespace merge_lib public: RunLengthDecode(){}; virtual ~RunLengthDecode(){}; - bool encode(std::string & decoded){return false;} + bool encode(std::string & decoded); bool decode(std::string & encoded); - void initialize(Object * objectWithStream){}; + void initialize(Object * objectWithStream); }; } diff --git a/src/pdf-merger/pdfMerger.pri b/src/pdf-merger/pdfMerger.pri index edc8d1fd..d94a2c7b 100644 --- a/src/pdf-merger/pdfMerger.pri +++ b/src/pdf-merger/pdfMerger.pri @@ -54,7 +54,10 @@ SOURCES += \ RemoveHimselfHandler.cpp \ RunLengthDecode.cpp \ Utils.cpp \ - OverlayDocumentParser.cpp + OverlayDocumentParser.cpp \ + src/pdf-merger/CCITTFaxDecode.cpp \ + src/pdf-merger/JBIG2Decode.cpp \ + src/pdf-merger/DCTDecode.cpp macx { @@ -83,3 +86,6 @@ linux-g++-64 { LIBS += -lz } + + + From efcc6659afa5df87c9b908f2e3b93b0278ae5504 Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Mon, 6 Feb 2012 17:32:11 +0100 Subject: [PATCH 22/24] removing warning act 3 before changing Wsing-compare errors --- src/frameworks/UBFileSystemUtils.cpp | 4 +++- src/pdf-merger/LZWDecode.cpp | 7 +++++-- src/pdf-merger/LZWDecode.h | 2 +- src/pdf-merger/OverlayDocumentParser.cpp | 7 ++++++- src/pdf-merger/OverlayDocumentParser.h | 2 +- src/pdf-merger/Page.cpp | 2 +- src/pdf-merger/Rectangle.cpp | 6 +++--- src/pdf-merger/Rectangle.h | 2 +- src/pdf-merger/RotationHandler.h | 4 +++- src/pdf-merger/Utils.cpp | 3 +++ 10 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/frameworks/UBFileSystemUtils.cpp b/src/frameworks/UBFileSystemUtils.cpp index 5be2c1f8..97a7d157 100644 --- a/src/frameworks/UBFileSystemUtils.cpp +++ b/src/frameworks/UBFileSystemUtils.cpp @@ -16,10 +16,12 @@ #include "UBFileSystemUtils.h" #include +#include "globals/UBGlobals.h" +THIRD_PARTY_WARNINGS_DISABLE #include "quazipfile.h" - #include +THIRD_PARTY_WARNINGS_ENABLE #include "core/memcheck.h" diff --git a/src/pdf-merger/LZWDecode.cpp b/src/pdf-merger/LZWDecode.cpp index c1b5a21a..0669dd7b 100644 --- a/src/pdf-merger/LZWDecode.cpp +++ b/src/pdf-merger/LZWDecode.cpp @@ -13,6 +13,7 @@ * along with this program. If not, see . */ #include +#include #include "LZWDecode.h" #include "FilterPredictor.h" @@ -31,8 +32,9 @@ LZWDecode::LZWDecode(): _readBits(0), _nextCode(0), _bitsToRead(0), - _curSequenceLength(0), - _first(true) + _first(true), + _curSequenceLength(0) + { clearTable(); } @@ -46,6 +48,7 @@ LZWDecode::~LZWDecode() bool LZWDecode::encode(std::string & decoded) { + Q_UNUSED(decoded); return true; } diff --git a/src/pdf-merger/LZWDecode.h b/src/pdf-merger/LZWDecode.h index e76d2b65..6d3d3cf8 100644 --- a/src/pdf-merger/LZWDecode.h +++ b/src/pdf-merger/LZWDecode.h @@ -37,8 +37,8 @@ namespace merge_lib void clearTable(); int getCode(); - std::string &_encoded; std::string _dummy; + std::string &_encoded; size_t _curSymbolIndex; int _earlyChange; // early parameter diff --git a/src/pdf-merger/OverlayDocumentParser.cpp b/src/pdf-merger/OverlayDocumentParser.cpp index 379b63cd..91bf4293 100644 --- a/src/pdf-merger/OverlayDocumentParser.cpp +++ b/src/pdf-merger/OverlayDocumentParser.cpp @@ -15,6 +15,7 @@ #include "OverlayDocumentParser.h" #include #include +#include #include "Exception.h" #include "Object.h" @@ -74,7 +75,6 @@ void OverlayDocumentParser::_readXRefAndCreateObjects() notEndOfFile = false; } - unsigned long toReadAgain = 0; for(objIter = objectsAndPositions.begin(); objIter != objectsAndPositions.end(); ) { if((objectsAndSizes[objIter->first] + objIter->second <= nextPartStart) && (objIter->second >= partStart) && ((objIter->second < nextPartStart))) @@ -100,6 +100,11 @@ void OverlayDocumentParser::_readXRefAndCreateObjects() while(notEndOfFile); } +void OverlayDocumentParser::_getFileContent(const char * fileName) +{ + Q_UNUSED(fileName); +} + void OverlayDocumentParser::_getPartOfFileContent(long startOfPart, unsigned int length) { ifstream pdfFile; diff --git a/src/pdf-merger/OverlayDocumentParser.h b/src/pdf-merger/OverlayDocumentParser.h index fbba57da..d2fa7aec 100644 --- a/src/pdf-merger/OverlayDocumentParser.h +++ b/src/pdf-merger/OverlayDocumentParser.h @@ -38,7 +38,7 @@ namespace merge_lib private: //methods - void _getFileContent(const char * fileName){}; + void _getFileContent(const char * fileName); void _readXRefAndCreateObjects(); void _readXref(std::map & objectsAndSizes); void _getPartOfFileContent(long startOfPart, unsigned int length); diff --git a/src/pdf-merger/Page.cpp b/src/pdf-merger/Page.cpp index 6f3de10f..3cb7c18b 100644 --- a/src/pdf-merger/Page.cpp +++ b/src/pdf-merger/Page.cpp @@ -37,7 +37,7 @@ using namespace merge_lib; -Page::Page(unsigned int pageNumber): _pageNumber(pageNumber),_root(NULL), _rotation(0) +Page::Page(unsigned int pageNumber): _root(NULL),_pageNumber(pageNumber), _rotation(0) { } diff --git a/src/pdf-merger/Rectangle.cpp b/src/pdf-merger/Rectangle.cpp index be7c02b5..7fe82696 100644 --- a/src/pdf-merger/Rectangle.cpp +++ b/src/pdf-merger/Rectangle.cpp @@ -24,21 +24,21 @@ using namespace merge_lib; Rectangle::Rectangle(const char * rectangleName): -_rectangleName(rectangleName), x1(0), y1(0), x2(0), y2(0), +_rectangleName(rectangleName), _tm() {} Rectangle::Rectangle(const char * rectangleName, const std::string content): -_rectangleName(rectangleName), x1(0), y1(0), x2(0), -y2(0) +y2(0), +_rectangleName(rectangleName) { unsigned int rectanglePosition = Parser::findToken(content,rectangleName); diff --git a/src/pdf-merger/Rectangle.h b/src/pdf-merger/Rectangle.h index d0484a1d..8941333a 100644 --- a/src/pdf-merger/Rectangle.h +++ b/src/pdf-merger/Rectangle.h @@ -40,7 +40,7 @@ namespace merge_lib double getHeight(); //members - double x1, x2, y1, y2; + double x1, y1, x2, y2; private: //methods const std::string _getRectangleAsString(const char * delimeter); diff --git a/src/pdf-merger/RotationHandler.h b/src/pdf-merger/RotationHandler.h index 285063c9..7b06ae0c 100644 --- a/src/pdf-merger/RotationHandler.h +++ b/src/pdf-merger/RotationHandler.h @@ -15,6 +15,8 @@ #if !defined RotationHandler_h #define RotationHandler_h +#include + #include "PageElementHandler.h" #include "Page.h" @@ -55,7 +57,7 @@ namespace merge_lib strin>>rotation; _basePage.setRotation(rotation); } - virtual void _changeObjectContent(unsigned int startOfPageElement) {}; + virtual void _changeObjectContent(unsigned int startOfPageElement) {Q_UNUSED(startOfPageElement);}; //members Page & _basePage; diff --git a/src/pdf-merger/Utils.cpp b/src/pdf-merger/Utils.cpp index 74b056a4..7f117af8 100644 --- a/src/pdf-merger/Utils.cpp +++ b/src/pdf-merger/Utils.cpp @@ -12,6 +12,8 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ + +#include #include "Config.h" #include "Utils.h" #include "Exception.h" @@ -101,6 +103,7 @@ bool Utils::doubleEquals(const double left, const double right, const double eps double Utils::normalizeValue(double &val, const double epsilon ) { + Q_UNUSED(epsilon); if( Utils::doubleEquals(val,0)) { val = 0; From 94b04669ea1a9ad0fd33d81eb07442881cadbb01 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Feb 2012 19:02:03 +0200 Subject: [PATCH 23/24] upgraded widget called ord_des_images --- .../ordonner_des_images.wgt/css/basic.css | 35 +- .../ordonner_des_images.wgt/img/1.jpg | Bin 32581 -> 0 bytes .../ordonner_des_images.wgt/img/1.png | Bin 55180 -> 0 bytes .../ordonner_des_images.wgt/img/2.png | Bin 37531 -> 0 bytes .../ordonner_des_images.wgt/img/clear_img.png | Bin 1310 -> 2819 bytes .../ordonner_des_images.wgt/img/drop_img.png | Bin 0 -> 1618 bytes .../ordonner_des_images.wgt/img/numb_img.png | Bin 0 -> 2478 bytes .../ordonner_des_images.wgt/index.html | 28 +- .../ordonner_des_images.wgt/js/script.js | 68 ++- .../js/translation/en.js | 8 - .../js/translation/fr.js | 8 - .../js/translation/ru.js | 8 - .../locales/fr/img/drop_img.png | Bin 0 -> 1762 bytes .../locales/fr/index.html | 45 ++ .../locales/fr/js/script.js | 392 ++++++++++++++++++ .../locales/ru/img/drop_img.png | Bin 0 -> 2196 bytes .../locales/ru/index.html | 45 ++ .../locales/ru/js/script.js | 392 ++++++++++++++++++ 18 files changed, 971 insertions(+), 58 deletions(-) delete mode 100644 resources/library/sankoreInteractivities/ordonner_des_images.wgt/img/1.jpg delete mode 100644 resources/library/sankoreInteractivities/ordonner_des_images.wgt/img/1.png delete mode 100644 resources/library/sankoreInteractivities/ordonner_des_images.wgt/img/2.png create mode 100644 resources/library/sankoreInteractivities/ordonner_des_images.wgt/img/drop_img.png create mode 100644 resources/library/sankoreInteractivities/ordonner_des_images.wgt/img/numb_img.png delete mode 100644 resources/library/sankoreInteractivities/ordonner_des_images.wgt/js/translation/en.js delete mode 100644 resources/library/sankoreInteractivities/ordonner_des_images.wgt/js/translation/fr.js delete mode 100644 resources/library/sankoreInteractivities/ordonner_des_images.wgt/js/translation/ru.js create mode 100644 resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/fr/img/drop_img.png create mode 100644 resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/fr/index.html create mode 100644 resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/fr/js/script.js create mode 100644 resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/ru/img/drop_img.png create mode 100644 resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/ru/index.html create mode 100644 resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/ru/js/script.js diff --git a/resources/library/sankoreInteractivities/ordonner_des_images.wgt/css/basic.css b/resources/library/sankoreInteractivities/ordonner_des_images.wgt/css/basic.css index 476eeb71..dc78a0d9 100644 --- a/resources/library/sankoreInteractivities/ordonner_des_images.wgt/css/basic.css +++ b/resources/library/sankoreInteractivities/ordonner_des_images.wgt/css/basic.css @@ -3,6 +3,7 @@ html, body{ height: 100%; margin: 0; padding: 0; + background-color: white; } .toggle_mode{ @@ -122,29 +123,35 @@ html, body{ background-color: white; } -.close_img{ +.close_img, .clear_img, .numb_img { width: 30px; - height: 30px; - background-image: url(../img/close_img.png); + height: 30px; background-repeat: no-repeat; - position: absolute; - top: -15px; + position: absolute; right: -15px; cursor: pointer; } +.close_img{ + background-image: url(../img/close_img.png); + top: -15px; +} + .clear_img{ - width: 30px; - height: 30px; background-image: url(../img/clear_img.png); - background-repeat: no-repeat; - position: absolute; top: 15px; - right: -15px; - cursor: pointer; } -.fill_img{ +.numb_img{ + background-image: url(../img/numb_img.png); + left: -15px; + top: -15px; + color: white; + font-weight: bold; + font-size: 130%; +} + +/*.fill_img{ width: 30px; height: 30px; background-image: url(../img/fill_hor.png); @@ -153,7 +160,9 @@ html, body{ top: -15px; right: 17px; cursor: pointer; -} +}*/ + + .add_block{ margin: 20px 0 0 20px; diff --git a/resources/library/sankoreInteractivities/ordonner_des_images.wgt/img/1.jpg b/resources/library/sankoreInteractivities/ordonner_des_images.wgt/img/1.jpg deleted file mode 100644 index d3807e82d3fc5ef9f11e380880063b3e434f5294..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32581 zcmbTdcTf{w_&yp45CjB4P)cZm6hXR>KMFno^|* z(nSb_Dn*bW)ld_9xqN@WJNM4qzwW*7&YszsJ$vST=A79*@AEu+IeobZxS_ADrwyQ> z001bi4#4FFKuOa~OZ^etOp(vk<-UjSGgrPKX$dJlkwAZUZ&yA&eH}i16D=LSAbA;4 zaXv(#qo;d7D4#MP2{RWQ-hUt?fqVqsxsVrIU1 z3w-+~D<>N>Gdn*!CpR}QFYnFUcLeY72!eTddH!b*imOLKG$2M=T1FmLW>%j6&vDrS zV5X%YQNV!|cL0>k6hLN*%WeSg6-a7|{}q7$Gbkv5R99KjUZbPG>QH|JKuG}vQeNeM z1>mZ8T+&%mQ0)v7>Lc`);CL|`kdYzn+ znU(!EC-+_6e?`UElG3vBkDtHP)i*RYHGloy)!ozE*FW$BKQ=xwIW_%j=Fbvg`R~f= z+WN-s-ad(ZaCmfl@;|sJ0KoqZ>#F_V!2Tb&n6GeAUQG)X=znlgPzGO}KxQgxerXyO zbyJWd;^rNhSXx$%^bfV2*92tEcG#T!M(J(|%Kf>!`#;eB7qb6%z~cUYA^X38{olA| z01QBitH}d015^RWf~Z1Dga%>F4R;@(tz##B{vsS5e6vA|Ly$0&{WYKm1ns@fFWnlJ zsU1|)xlYvA;oj9%+Kaw-gMYXu_Y05SN*+z5vb*J)EU7R?bk2zY5suY3wE|Q2I2zeJcwe%et}v;19n)=2UH0#f zE-+pVST1M|7an7E#x#>lq~{!vhJ~}H4qOm-M^M>>8@LtsOwct2bRkGb|G?*x&?>%lvg|eSf-`23s z*4Rx)p1WHD$g@Urk&2TI(1P5i#j`FBauIS7vbnBTVC{}uRhx1|#AXYyw!png-ec<8 zl*rp^G)!ge2iVo7;$cOex>8uoA|X#j6<j@v2uwUvs=Yvsg|5l)Hsu=iNRWW#)u*$6^`XyB${dhDI z;MRnU9#o6mS8q-gSnWS7twbx+meNC_ze?x5FT8VV7<#%~@S&uB=Iuqji*--x*Y>(^ zt}g@WK;{3Pq}=(?`p*wRyaY@Y5go|5zgHI(Q4iHF0gTc*ne3a5zhh-eXK6yO77@nn zwx*AT@VW(3+O_eo!LlYstyc+Ex0U!qdpQ#=eb|Y;?Z^14Z|4%Q`M4)pJdFa&tTjf( zxXSV0A7|JlAXBG_wVhB_3|@t0TBB!b1`dUCKwRb0v+bf?h3lGZ-N0j0BoCZm5Q`C2 zc{)9;zNrgX_6sSD0{+fXm3LQ)kMlPsG!+K)=`)5co5(;f0=x;01nuJaL>cW+9E?sq z;}>`2N1ISXvu(glWI)+;MtAxUSJwPXZ+|4I6aW!Q1G|n*X6wzzZmLxYM?`THf#Ts3 zv22J~*D z)H1%{D~+~0Kp1QDrM9It^Vuhf)n;zc_{e->X4sw2Reoyg#;>(^Kx(o!UVonI%l%AH zzgQdiH2a3DLPyBzy~70`r0lVyaM6Qoy7WoivZJk_vFLT5&c0kgp6}aOr$&Kk`&YtL%yBEArPOrAm@oxIQceNnpFz<>{F*TUVx=pl6>5w z+3;ZbA!JL7R}`|B^cP!VVI9OEBnipcN=HYJhOPgx^T4w z=$bF;{>lUsl0ok_q;*96tGcMW7ecfz0V$NBhpx^pksk2h%!jq8)-e_T(cRRri2qhB zr;!Q5+ZS10Jk6w~*fHLiVs-)4y`LsG6nTxu3j?8qb%Ql(g*3Q2s?|hV%@$>>n$K># z+KA7S3FZBOg~AHH=a_mZG1o3PxHG-w0{%Q(S7k6!a*c~DpO#QM3Ew&6PrWj!aG^-6L9|YzesIr)F#f8<%a>qu(6uTe9J{>j=b0P zH(amqw|eC-0SSI)dfa5J*pnh;0ljbk2Q_cR(b$t$VCDj>UHh1~#hl0WRIx3jpFidz zTRmwov$NVdtNFi>+*eHoH6Mn5x8Xdr1=I9|k>+rL6EoMEMT@sm?QyF$OUU$vJvk(k zFl8DuGO%cb|1q;KY(Ue9H{4uT1vv#D__$_@o1|Zvc7EsvgOdiwV6qcjEf9dTa zNh6rBvl6FtzM-Mp3pX_&6Ad+DlroP@r%~ezU9b~8i$00fDiXvKMwW|@$7qL-7$bhi z4uDtEX#5micd$+hzN+^?)c{fvddH1z#u-#1t-eVvByFqp`Fzj)1OUkRqe%JTyKn)H zfq@d9=9P3yiu|@{eMV&?_VvjeVEL+WrXdYRJG4jSTtt|U)ECACYF8T3Ey9ZQMwS;T zhhpvg6gdH=Ett~Z?-wxc-MkU!qD`G=qJR>l1Ik^a7VK{%u#o4V#Lnl+UdUp^4~$2e z$M8A$MvAEW3KH0RxJ4*p*9}mN(vyi|v|-FcbRlbQ%3&9B=u|9l&1Q7f;HmZSiY--g z$o%JU8k#nEZxkflOHnM6=NO~s^~RWm|4whq=hg#nMII^Y&}+xBRJ+!S^4Vqf(_fza zZhbfxY6dW7&;D@{ZsfNlqU~pvqdD4Xk#!RptSqUs%fP%QrTc*DEtU9ICuQw(U>pcY zb<@`V^_gyC(v7%d9Cr-yXwvAQKt7xMr;q&JdeV&4hc5$tjqr|1Z4BhnCnp3ICoHCK*RZ=OD3YA68{UnAazgMc!-rmDZ-4v(1{^NC` z5(;Fjh!AN$r4#c^i^_R3#LBkAj!3^aulr(iL6gy0sOc^ z9<=!(3uAP)T;Ss9Ko5XJInl^|=OXpv=1E(7=6}<3_6u_j{SL7Tvb>J#bC?*Hy#EwY zV(XGe!ppi*qMN}I$%bKK|J82L!*9b+SK|Jw`sZ;3KQR27WY{o%7Q9pzF#nU`Am|nM zDBMxBU-BPos=sY;-?yZ+2>$j_!5vI(`J3y0J;kyfBFKmdfxpL(sFj`~dUYNgW|I@J zCltQOX?AKC7lB!X!u{Fu0gU#U=Zvap8X7bikmfz6lalfq9UJ})SDl!_YXOSL7)Os_A zx5U`!1~lIect!<=EG+W&@Y2oMhGMu29@WPxyl+!D-2J@YZ@RyW(*CWI{nxAI!?2F2 zeUYM1&wW?3@sz9!nhCiU%Q=<$U*17JU6*^6*w3|i z3JKGg96-SEvQGu)Lbnm4tjK%jJ89S~LWjRW!W zhR0MIcxiBkFGbnY-Vim&x)F$5$)qdzcb{^|rvCRPmTqU5nXmt`8Q8hX|Ez4AEO*G8 z>#)U#f>#20&%@00sDg?eF-&s&48lwu*m-gfw+d!_Y#fys!`->A#(iE+LxJ5!jRPrZ z;MOLJjN0z97YJ>=Lpea@WFE9snx|-ibreOSFKosg#TpL?w+RcQzNLr~Fd{V5?^dVU zgw3w@MuH|Fc41ZkvDKATWE+W>hHPFHsW^KqaM~B<>ki-!GjjjcMvAqzvtw z%%O5!sOMOnT37p;Oxw>ruy|rQ5?zBT@w^c8ke7ayw{)nR?#R+GGMv%fka{@uaQVY+QO^|7O}X?#LuBFN&b{oj9TU*}({He}=)qe@7daUri zvX^G_zKG;`6yy>x^O(fC((GLioeQH$dk~y95V@?$%quQkDzICr>ir^T;>;+#RJTGU z`<^SGuCb#q`1;Y+DD5v4Y^LhDWxpRP9$-J(*m%Y1Sq>s|D~leB@6`;i%a;jCazNNi zMHI?7?ZgVY!W{EfA2*|fnCrG;1_iNKwHMem2vo+lpG3S~9OAsBkXX6AW7n|#$%ePV zW6qWURo^}O259zZVQHlre89e~~l!7aZ{!~>o zDyn9^MsYGyS}JIUCUD@`ynp|ciwf+119mOk=-c^_h&6OsbQ!O;fj<5Bm=#mJ^y$I4 zFXR+#1L-|j&MSNRdXR_oVg#i7@nwuAs+2PQ{r&txiYXxLJ3_nGJ@Vnf2TzItf?)E2 z}FtnB^3HqqUHSpVxIkOyf5 zDx7`MhH`1jB!CLuWl>~WIXV3`>JghekkK{8NFEOV!0%5E_s!m1(7FEIdS3qfs^_yr zHe8{y?7vXbN4vWda=7d3@J}9x-&{W1w-kI6i$>h8P-tB8z4yEDzpa%QVs9M9{q>#Q zmTfCsrUs*AZw@WdZ*zzyMzXA$yLlQBaqr~P%RRjrg5@6eYWv3+|DKC_oVi@L8|a~r zopT_1pB9+DUHtR<;|Hi;>Cu5*b$biXuf=H8HC5z$z1;`JinlW5?s?j+`VH`CeCDv) zO|lsF1rRbAUrYs-Pg?zyvcCuAzUBM!G)^7&$DZOS!)7x@BYd`{2m#x2$mI4^eyBSV*r`T6XIUHV6{u~WenLcyvR8}e5@6XK#4!?@@s6|y%j}278@{;DaTSTy z*iV)#Dc_in_U=pe9$s+na<>hk*OoO!@{1X-9ox_At_ncbNxetdkDHb}EaR1)fmVOx zwkCDY;%47X>BdxSM zO$54cJx?|=UVo?$K#el}d=y}D@p#s*Ze8W^N7n&!EN5-YXeHfMeR`%)x*=pRuYdO) z9xee91XEtUGUk>EJQKe{T6Ag+?o?m@tc3*hOCQnwjc%yt3ZH7H_wo`%Jd>uNUTOybigaQF<9l%+(6{APx=6NUFCTP*Fj2ZOXMt8Q#UI*vDs}y?u_NDc% z-u5oJz)QY9#8){_cJ3Q z<2felXbpGiy|*|hw&tY(%$e00BHSjS$Bjrg*mqdW5aC)-X998*dxsR3D_>`arEaQa z_W(0=33ATsxwai=>zOKI_lB3D2_{KRez+(&Juda8v5$R`9IfGYY;m`HQT0PkKZE0 zsjCs~W(xh(@@IG%$e>8FusO3a)tPgbbUFMm{BH|Yk?yXCP_ z1<{Um!x=ySSfYM${8+Vco>TCe$N+aZK9NwkltCEW>TXv%+OEOeokPHhHIj>4@I0Znq?%bW`!}cxOolKBS~kX!c)4{-3*4 zx1SZ+-uH+=g*%Jux~P_8eR7cpp48RY(ApR96k_ae6Bw~gKAjIH&v5>%$9 z&-G#%-6yGU-(!@2QPFs^&A0r0-bt0WA9^OAv3B^i4SPKM!vA^;KgY_WcS$P0^$6{e z&8PUy4i%Q>U6`HlXMCklTVpns_c{6_M^N_fQRD~5%wdX^CZ^PO(AQo2r2pa#Yx6lp z88W*(U#|+rQ$mBjh@@-0GfC-;Nn_4$Qq>aYeXxw0i7)`Mk7j%wv;6whvY;vnr%Fp^ zVqI`+yx>XIYo3(L#ag&Ij#IzW@l~hjUy%oFnZ}RAG5XiRxWdb=u=(9@PoiFz!ZJgN zE~6@kPIz&T1!z)sE6O|@AANUTeRjFrjw8-JxL zEDN0ENx+%7sM6!HRKvwQHJx@NHy61@e|!!U?60pM8&_=F{8+j%wUWP*hOue$$m~!+ zj)vp3;>avch8D=1PZ0#nj5k2;qW~*cAM%YIQ3F6J@~T=^ph6Plq&Cx2u^d#0bbZ+j zgxbGEwgFhWe#bv>a*+15jsr+h&?5jVFP6cY`K`bQxm$wgZk>JNP_kUoH-VX4I=z2k zc>fM^5hzUyREp(ux)JFcj%QdcAA*E|O|*T(nANUB7q3K#9(Ag4qzRL9ty(qW7i0)j z8e!VMp>@4uUG1L&WRcSprzT3Pyl-rpo_R7NMjNW^4ubL~Kx0nKb-eXTl%|8ELgWga z^TtNyl+K;BZ`E?Yndm>(X`F1l{hgjJ5u?YeI^V&TRiPm<^j?$6?7y$pU=*}3%um#H zHa@dgti91l;@9NO!gc?`#n+<)K9QYWQ4cMRuzfqk2V76}4*fVHVZZsz8#+x|3-SYe$oY}~CgW11# z#W54j;BWtIdc9=IxW2*QHS9FROaKDlkT2tK99d;sw4*;SiGX_F)}55oX{>K>q*AbU z+DaO0fe~^_B zAuwYe=7V$(WnOrzgrtu^V2q}xkTCFPR$2662<()1GHanorqi#|)z_F+?+|=Kv*y1( zHB${|_3L)dW*Z?>J+IL7q`FR3+$!jB3o1t35(`)w2FiqU>HWQQSKIe!oo-diwJ6ah_zicwp8LlHXiNQLooqwT z-1*@UPr^8ZC1_W`+(@>oQK3;CXhXBeU1A=?7F9e|vEFbfWm}NG^hCzW;m>=)f04f^VF*=Vv0Sf%>%#9W#xV4`=rAq0Brg0StIL5m z984+|J-*`ov|x*o?sJ}-x;I9rFwt}};fPdI-N?`(Nw}T+>sN@m{ePm2aG+|ATp^=+ zC%O0@lNrUiDB}#R8-%oyt;r*wXTn>MwGw0K23S=V;fo4bv7F6MVok6=EoG%y)Z!!K zg!B9=oFPLZcGD{_1xf647s}-{vSyw*UnO$kL-?-ns@5rB6txtO4j+#N1)Cn>Wl-;v zl-J|8wEFH~ijV6E)=pUpA z%s>d4w&w>mOW@3bWhRgK?yqs))K<*sNNHQ|iVD5ET{kWP!s>ROPJhdZ(7S6Mb{@TY zvHjdbhLV+4Pb!62>dd-(kRfw)ab4VBvbQ&Flk$eoz{S}rd>~cMF?R6a>EfaN z}MalKf6Jpn&ne=7cNZx$%bEw<0~y-d zhK}*IO4Zk@b*l-5VvmswL#5mQJzPsguzHxU6gL1 z!TWQ#`TX6pOh)JRz7lvNfPn$==;M#4dgw>DTSNUBTzsRl=KS;o^U^-Y#+2^LCFB5{ zNh|Sh9Fwsq3gY-^oPslid;M<=grk@mN*!`oXf2&9=!dvsh1dkxJNi?MD8>Yj^+i$h zx=rLB(F0hR`5+_hBi5IgPMxMgA17FtQ#!n+9H;=Mz?_#!Os^?76^mIRd9L&r7=w_1 zfoZ(4C1er*rM6Eso0H{utYPXW4Q{?l=c8yEh3gqQ^3~0+w>a z2&}Om!uE0X{Cy_UM00nU?^n;~kRrRF9p=+q+76%8Ga9c2i~4k5*KFw4}anr$OQWNJJ<>U(H7M)qlf` z7`QP#ZfsJsmb(O$7=PATyH#THSWanY59wT$+PrI@LSkZdo4SAg6BJ)z^+1gWW%EJpcWa zaaMo4DD|h_9laX{nTJ-oujY`8pOH6|z>`ruI?hiFDqPXu^$T*|4ta+J|Gb#4y&H0> zaTC)aHEgh@9=bZyg6$t0YQXi3zV$7!Yg%*o_bWl# zehpi2^KH`>CoO0v2%oLXp)C52Nv52K{IgLd!|c#Zp7eJA#&l5NIQBo9TWEzPW7};IqcMoB7PrnE<#X7 z=(je)!pE8dM?j!deOkiU>|{)6FQaI<3!b`Wa?u%PLIYi9-qzPvKWz&$3&PngnClh_7}RZsSo=?hhPrzles$ex^G%Wz$YUVXW-z2D@_>o zym)VT&L!%;VJFPRS*0!pGORc{cII!qcg%amJDI1cn5Kq>GZKsyNj>z$%o(&ZPTPJs zO~P09#N?Bhw9RxNQCEkZ+x-vZbnaYKp24Mw2W`Tiy9VMrD6LW=>=aV>AERV(Y#!gI zpW1hN7pKZ=Azi}I(bf{6dHY(g!kY7fr4|4%yv+6|yoz00l|=Vz_b$O8Qc9z5weQc< z`s{|BKLt!PYl`0aYz_IY?8)qo?0_hT%sKROh7lrcSzbdYk3K;QBpjjDAzb_HIA@pr zu#)dny<#MzrER;^Y`O>s6qc%gOutlB_yEr9kwei%JEu{4-UGNOoN9^i+YLL4>c8J2 zV2k^zt>%^o7p5Gbdhm3_!S()GglhLiftddDMTQB3~#_-zi^uX0%rI z>~4|m%zx&{G<$&f61mm;t4j6L z+NzGUNxYkPRPjxl+H-}NqRN1;`Wdi(+iQ;yIMDP|&J*5Zm-_1aiaF1|?BQlSpTzML zGOeGBM%bkf@w`TS`OzFH$6~o9{|l=gd$A!AxfhmcLHz49B*-VgM6TueW<5GV6c}$+ zcm~sz^%0wG0(&t;^j{$L-WMFaQ1q)G-E{V?Eh`c^Jm=jA{kOv;rN1#sH1F67k7Bbb zQCB_}GkBaB&Xri-oRB^RR?NQhWkyS2i{XHP4Lh>j;>|*^{O$P_Bw)H-U>y`KIho)X zzgIn(|E-!A8?Y9_g(UaE@H>jDYf58XH;#MNOCvgfF|um?x`T}QqH4;KqMfKeNT9j^ z2qSWrzex}oj~V|&N$MMuYwm=R$%V2G{^*0k4`_@pf>hG5)sen!_UzR#!q87|&VVV* zDarxpy2X?ApFHFkPSB9rM~|VO>}AeF;QvF1T;q>?Vew zs_(x2JC8j%nlnl{kH)pnG4 zi2lqIL(_rEUvV8SSJHqnXbLN3T^E&nlwmcI+aks~$ZDR6_Prij@M^2LK4sp8@;U7D zj^B$hn7UW^{fauvYXQ3VBI;=^r+|VN^-HQO^*~221VY?TyJ5F=kA{jlCghxH)y9XL zF{yc*nGBK36-^CVpHbRn^x_}ugO1?Y_*sHSOu1!n7?c~)z zDLS~nbC6#i0_w#@yRW>DXT7Uyk5SHuD@^m{LVzv-mG&~5lkSdH9=GW8-%go*Z#%NQ zrBh)Wrk z8y0ecQ|ZY@M#WJ%UH&PC;;s^juZ~w{`I(;zYXcLnj91|nz1e*4;S=}s>3;A%d8zp! zAn>>kFQ2oXX=3Ld{Q6E;q;sIh*2mpDS2Mb!O6 zNRDvLAoA3b)qF+2Z`!hgTEol?UUgo7+8a`i-DUdzTC!g0orI(ueJ;_nILb;>;m)0~ zY*W^ku8=iIwUA(pw$fDj`qY8g4x#%X*xcq#vrz5Znfd8>2#=qvWEIuBgEO(g+PBL~ zZD_7mrhyPl&X=A>HkaAPD>tV6!`xwzesCk9M*$c2qQaD8p4aO3+34C&L<>MVvJ z_hUElxqYcE#vpD;$pOsN$)?7cgMd|VpMh)|b0LV@GO{SuY+zeAU<=HE$$H77E!z1? zS&JIQ#7gN?h`9v3b(ita?7(@L%_G*0h7l-8p@i0mOQhn+?fhS0d>Xve+C+Bzg03VsS!4F&H;>2miUa%bFX`vdks>sm(19yo0tbZm zNB*l0SS=1qUw7s3d=ns~Eu$D6T(wFC6jV) z^N8T9BaHrV+vq>N7vhb7e3$d6IQhE({hlrPSbhvThdB@Oe#u3P0Yce3&wV4smKJ7$x{OC#ovE{nzvv-g+Dn_^8SLlXkbk~h zXDj9UyNWL$9)u6e>>Ns|>N7O{G@=F}E3cg-c%#wYJ~+RFn5-!>+@#1i=1 z`+1|KI5Vj&T*)QinGO9VfHp+I`n}DVH<3uDEqw7n7nz~U<}!DBTfAbwT95&yt@B_n zr&~#s2=lM(d(c|5a^cSGqJcC;XG36%@%C5?SNJWW7vg~ax`vjXB!8S*Q2U6K4FF9M z;|pQiFCe~O%*p&d86{VnAZWwUt-vCpy5X{@(6mq&-BB@s5@0i6qf;3s{hj)`>+azbw}>}9x71NmFUC~ZJrt?4KkF>L3w$R&|2xD>?pJbXH_>o#zp&RdW#S{^ul%Q zg7K*Ij~6qnfH6WPkruaW5M4iax+EieH1#BSx5#K9e1WEy;B%jC#p(p*%sbrfGUCnQ z?U-War!#mm<@Hh5qFcATG5GgTXhzSJ*%4|Yp?I?F*Y5V2=q2ElDSKU0!FL`$zleB$ zmL3M&IlkX80wdD{|K@T0-m<27?15ON%7HA~P+cW!S#(0yVk*AHo>|(TZ$|9ZwW{9}4e{3vy(Gr_jpt83AMRcfBy#YUSPG{x<-bL9jy-0SX-D3A&`dBi`k z$~GRVzvL`jFq}mhvYaf_m4+A+eSUF3<2GJN!<+-5GGRlhSm5yJU*dkhezo0^9P}iUM7)>+=T@=cuLY7c69qD^R96-$yM?9 z$YLz36i0qQIcU;c&!XzklzOF26vK)mtf>UbtQgQLJ}(4@0+325iQGUlXDTqMsGV9t z1;0e(TIUYcUX&mq3NXy z3AkIlT7CvC1!ra=ub85!0(|~!>o?=Bs`>Y}h(p3Vq;ofr@~dLGzJvZ@oj0iO-Mvhne zd9B2WGA|#SycIZ%PXLx3l%tOy6a77v?^;;+HI|bKzDNJsw%)08Yv z!}t#C<^|G=ccH1p0f%7A2CGYe(^^9!m(nYRKCs7@pt*pAZ_E3*XfU}N1v5C+oV&7Z zd@=GjYQ%5fzbm699+L6flOXc=vw0dVR2fSCR1H4r8^BxB6Q7S+~&> zTuuw7{(+J{*|F$;Wc^*?7}F~C=sf?g8Lqx6QgTVz+Oj2MiQ~CLs9Sy_$o?y!U+`dn zZ4X2Qvdtcmx3|DBOJ6ay&aWRcN-qICxZ@$c4-x9SH0ZJhYwQ-5i}}rq>AvW#_C5dg z9;Y*lUFykiOKyLgQ6iYhiTgiIV;kfLl^7wztDXh6Q;#_sKXkqMZ@u^5@+*Si7$P2D za8~~9)ldMB#}s0)~b?6V4rg-E9;>+)Fh%|7#b7a%8+avCK-X7BHRb=#$ zz3frKqsWnpx+p44bCvLGTKmEuZRgPFG9Z^##|!(XoIp}O3nbhh7*S&Vgu z5527l`ba${yHpk@r%#Wb4pnptfM~Fswz<$8GNhJE6_h&l1tdHf^+B9$3DQG-V6=AGC=1kaw2;xq_MmD zSLS#779O@2Ew>#Eu2uiaS))i9R^{AVxE*n0s+IRorOxB0b{wDX=M3k~>HpM6$^P_^ zk)6V~PiFJCHoT~R7N}X6D|F1(&KRPGyCJS;TF+Bm@^_M_mG>mfG%Z zEUP9x`k3Ph&O825TUR-Kux>CvviP7GT#=a?Mecse;_Wi0hTorW@En@{ zetfDZ9@ZN5UoEvR)#3$5nSZMJwwaPAWH@sD?V^E5DjKsKP_-Ni52ugqi~63|g#rCB zm-*h(`TWPY?pl=N`ljZ%6LVU$IGzkWTOWTP+R-Bsi>MrCjJ{{|trCI+`$cnlVEl(g zV{Xu>v(7Q>i1tlQrbY3laBEuJTNTEq#a!!DR>Gs2!Db4pYRXig40sqjDlFB*bO1(a z1OlN+JavFMm*@mhI~@+JARPfx&8v&(i9i*+Y?PDz`MBo70QEzVp!?599_HH&oNb=cl}M<*o@w zwg37kDWE4HEB^%bq$P6`zOQ&zq^eI(8QQCyAkwMhv}uw5!vESh3w+fYbNw@C>g#`> zhQ8VgqJoPuQ(_IIAtV#{pC<{QWu#N}$9ID2&*PVDj2>6^{CFs+cW1saOpi;uOBpo< z8@-?Z3VWBM^ez@x(yF{GJ3Rj21@4AcsGR(vn8ezh-%pkv%kNST!)kio15;bjasK@w z@q}B|Wt-n4&3b_z!+^I4e)&yQIp^RYVt{=(Y^mwbF3op(P1oX?0Uz2y3eowvu#9j_ zL0Xl>8#TvlZ2 zF$y=Ui`T4sK6b|@?&Rec;@7zz{a4+e_<;?E=tV+(C{xerynW{-;1>CXm;8p(t(dOU z_k0$Bhk7xrWN?`Oz)}lt+S!u%3_f00!|}WwKPQm=BlZ3SDwL*m{~#k&@Mv_2SBgpc z?n7}3if=)!ghqR7(%O~CJHESrTmOM|;rYVGYT!=GK}ze0#6#=ztc;nj#I%{%487$= zbQI6Tzw`);5pOR~?|%vvk3dfdr z)#43aSUB!8iqSvah0QD^eX0zEHGC)$&UOs|Nm4-f3eLw4;SRd%$%N-^L79i|p5qLi zN!2Rt+|6^OwWYQ}As<|MC{aLR2m=87KYA-9An5;?nD->8uA){)ePkj50;}*Jar)|} znf0e<(mY7R;3gZSkD%w!;&Z!<8(QP&d&lS^dk$5N19%{QV|we@Fp? z4l_$%I5B6`EtZ2$3E#~!0~A$6Jz|b;Og}RBg&u6?-C#2L_WN8kNb))Kuw-{iu87xk zAuKyg27 zZ(af-D9**O?gFdN#Ck7W-xj=I*S-i9uC5f)mPY9DLR3h6wyS_> zSzVwrA7kAzm(9we`OUeY(AhDXtN>VGaX-#<60NeUdLE{%Ew{UAYIto8NVlVb?>a(kB?g}Jo zGcrLw)?5{eaqdZAXK+v{`qu17*qE_;2P<$~%{N3axTr*0S6h$UjfzMp#fkxn3YX%v zM-%u^Bxe{&?$gUte?!R;?`W0rwPV4r1CLEg_*W4#*WZY5{k?hV4UoGG9f4Cnf!jbhghe! z6W1~lHb^?Y6l@j;1U3pNE0f#QD1-hyytI( zXVdETlZRo^b>wKzz4pGJyZ#)DEOjXy-m2LQ9q5ef5UF8fX=`TRXB{2vSMu;<=qgW} z8z5*nwEQNN8&@f9(9AQ2UQF#xm(jVO{H}>(+oVQ7pk9!1i68)o9fA_l%4dFblQ~MN z*+HzKn!+4ZCnjW3xde82`v+s$zOYvU5DDBurHElINO;YC@bJn&=E2G6av(TUIguoQ zG)qW{8Du_k`d~6AX*?mdh`>!|CybfWX`yLUtqpZrxKOg|x{J}lq+$VKv^l3Wg$O%< zmixsu&^Z5E~*YWI3H~-HNbDttHWOGpBlZc$(t*R z1pnh{9gDwH%g0oyt#Sws8;S9z+7sda2df#TljIrSdn9$N#%+90O8IM4fU0ppB_%tJ zKSoq~+hD{29VAyMszwVHuJ+KZnR7)`o^GHE^Mf(70t>^Ai^bx&@{B8bg?!Jf) zp*WhTk{lT3om`(Iw3B;XqgIe0&?d2v<0~-6dUFreNgXmAR$ZN+*pWCX;w)+jWUi zl27VNdAxI9I)v#7AB`()bNaO#Snb$47Yrr?y1?iQHk(uJ1uE{j6FNAN%ai0^;L+}) zfmQOf<5u)1moge7$V+9>9yY+ks~oH;@KB~H*56_zKCB!+N!rqF}vn>V$~|a+BJKVnD3r#2B8-`uUDH3SGaixbT7S zyT*^h&t$(_l7En={{X_O@o58gpVLPfQq^1TE9w-_ z5l@7kC}IQZntJ~L+gCsPElVH54S0jQTCyIa_lNpdwL}R19B0$DJ@cG`K*w6m=eWM> z?l0<8mXhp<`_B+tV;!P%{K%&#!O4gl{6d52YJaO&u$&x{F`8)r9OsZp$6BB5 zoNL-&f)m10T@NQ;gK=Z$*W@SK)MNhuLaAc-J7JIBYj;PE(5U{Vy;v%oWap1cHsEuS zN#{7X_Wu9{{zLk$KF63x@N-Bc@6~U}&lpr6(x+d8-X2hMsA_CS`$#|bTJ)?gc^UfB zkVwb`W36WMTwD8Z@GI)nmX<|62%}F1Fd@P3pLDPW7 zf8*VM!neo-=cl)=DZn0rypOEc{&)AYu~LH4$izPKbigFaf0YlgG$pQAjPKHr*0up{VHFxTOxq4M5E9k zAJVLU59#krU(K54 z2#!v3jxk)8r4pS{)rSoirF7w^%G)QF`<^%AjeA{ccu#SP3vdbPPemkve_C=3_ZZDC z27NKsuG)xr0~>RLPa_=;J+oEw&Qzbmkxv|xkF5hfoz}HWZ7R_&E*qI7NMi%5GY|kD z&aX(s6O|-)uNLv|iCb3j#f6Q$pXinsD7Ep2QB4y z{ztV=uRNu0fP*CG7|l+j*QZVeM1u#Wan`0Bk&-#>TrXp7Y$FV37##CR1~b%S)}Hy# z^)$@j{ok!5uekkAcg7wu(>yHp>8L?>DYy(%$W=JojOQeJist6{zo8X7blphtjzSOp znzeo^cwXOK(v9@DGD7-wywW0~f*h3x2mbl}Yv<#P^!)4Ta=g0-i=?F_+?MB`iLX|i zthPRj@JEYm{8TSK$7wac*@|b)Am?^*)9GC(?Tlv?! zK*!R&tjiAy7@0x~MQ_OH!%fZ?dyVPHZ}QcIl5EHdp?D+`G2X4|v01*U1^PhA{jCg; zTq}~ylCL{C>435>2c=|Rn^2aEd8}!cdV~>KtE|^Zt(ePsp@w+KApJnEN}M8}ELFcf z{{Ds%leO8UX@9BOYIE9KO?9fIPFKpihhsj_3wd*>*u-Rft^xP1mrB03)FAWi%V0Lw zRvTV69aVwk8s+SyduX*e;(OJa>PPZVn6g^T(o42Cjg*iG47nK{&O6g|yO)9sYv@0D zaSU+U%u5{Jx0YFy_THlfPjX84tgB(wMWVA`*QfQbl}1)}J772+N8v#k&*MpLJXbJB zaRY~rL=22OgG${!zP0B0Go>`5X!v!!zY%GVpSybr{{YB~UGMD+b8mI8S(|y1LjuVJ zp;!`*Ha63P!NaM+>_vIrmc=zISMIYRAA<_?FOQJ2YY{sI!`#kB2mLd*{QK9hgx3LC zdK`5h@8JDUG~0p4e4c3mIR60a(vgn*_N4B3HRCPL*6a*2c>vY}R05(5Vs)t=qzkFr z?k7Cvx~MD4%@fS8bICkS8m6^;184W_N6U=l)>5V)C#P^LTg2u+?R%zK8+nxF7<8<~ z=yTt-et}N>i13@cVY3`l9XQCVCk>W3{0&6?Pu8qgAS31?f!rRnt^meHDFOMiIrX3u z)U&4({jF}^ldnJUD*B9V&PPLEE(}Ae?hW#!{e6RVuckDeQ%%*Pc{JO|Zk93wv`0Hm zI#JZy4O~^c{z} zuRXr_!G2^S$49h|G1Ja=a(^re@vzx;BNDlx9X{i(t|Ab2lRb!a&UinqC?gz?sIMl` z{x7kVN2=*4v7Q=Bb~zvL7VG)fr|DPLx}Ahq_7g1D@~%Z*^4hL%byHQR0eZn^(;&6W>Un#d38OX1DhabCB<@%gh z^|NQDe$UPZwW=W`X4PBkhacl!!pE@f`PYnm06+0lU#Rb7bN>K+t$QgNFR-I6T>a$nH`1Bn+(xB?)KBWhV$-Fv2f}~ z%C1C;4tis!70`H+;v06e^S2np!e>-n%*vm10o0Qri~;XiH?V3ku!7R++}aDh(5?@k z46*`t9@t&w{cyOfu+dS9Yu5VoDy!~GqiJb!li6BaUc;oU<>m7wCP$Egx;1{G2SRg_ zax+_2{{YzxfNSIp71WK{UA~KZ# zjF6xb&5Zsv;gLSIqImAs=U5Y_peIQrGmu%8k5W!YApRA;8w&B<^5?Q!F0J<>q?Hz| zw>{S9MoW1O?u@ZoT?P#C00c9U+0<|kqXCibIIPPH2(NVbG>c<(ZE7Ww>h?zYWR6he zta%+7TL(UhI~wYN=kE;k&2#=L(`@E)Zz7UQJGCh?AvqGNA1%NgN#$|QPR~JHR4U3( zmT%|3_2g|hMQV|I!`BwecX4HHcNNqOOt8F689~SrryLA12OYQ8(d1xt?OdIVP-yyo zlN|C}$EXPe^TL}^h?C`$3OXpRM`#pHi|?J#G+xT8!&@DrB8w zP8dDz}!m$o~MwtY7L{ zexGc&H`liI&^ZBQmQbomwfP?W8)*f)#(ECA1lbnG8Xg*A4|RnxERUi#AVD~n{v zX=7}t$5ER3Y-Du=bH#g4gn!U}30%%{tk%~LpHfQ!RgcN(;h`BuO}5he$)k&vN3qd2 zkGvqO#pmLrdMOlSGkj|=LHtoVA%QUhyG z5N89k4j6u5*O~l(n|7(C+k?u$@Aw=A<>)+q@b~S3RFDpU{+sNa)}aa$55NjabZMleMv9OFECVx$Sv<<2__L$$+E1+^QD z;1e@*_}9DqKk(h>ggiZ|G`BEaJgN4C2&4c)9u9vB@SEaJp)+KEtz-4(zM{5KbEC%@ zCv4WrtVdiG#eD96T2QA5bbI`)cHp9%n>;7Nz8lv3eXLw+SGNq1m;V4rx?!Gwx`XMC zIssmlAHu&0EwPB(-8=2aoYxJwA6yI%(zj>0(0mo)*khVSwX=k6MgBP(z6bFW*EP>+ zpB210cYe0=M|o(4u(HgfZ{vbUuQs+X8;QKI$*3)@{eA}Vr$&1`?&r#{{S>~Mh*>ppL)A5r%pauoPMUfo*jDBUZ1Jek5*A zwzgSe41Q9^Wnd4ce4Js7M=`oxmCGleA{I>CSFG%`Tsrql(nHT+ZUzvaL;48wdz9x9KJGdsA{U(hV7Kp%rIPM7p zKaF}WmGJ^?OU8O$n3`0U+I9S7q?4u{&It@T#@vj1*Ogl+#L#MbJ8SnHP{h-k>~Cp0 zRjYV<`Qx@&?k`qS)10)DgOZ1F$;L6oZP`!ut0*qB{<d?E1f;G zs9}*Ul1=6235Gbp=jmR>`+3>RH^Pq!T!25(?vTGf-h_@lc_Of1g*XSLbpHUiJC^tz z;fEaWzJMHm*SnwQE9mkpMCw7(=^I<-dD!Y|GE(k*LxOR~{{ULMO%LIph;@A?+fuid z!ZX~omE+cU#a zjaJl;FwlM#>y}#GmF?Z$oY6sWlDeb0BnHk0%k576pyv&Lq}yctkx3yRQULz|&`o;* z816CGj+w6v`0YQL<1~vo5ZR#X(2~Ue05M)pTZ^lV#zs|s%4bb#QKdzw^*sCx9G^<| zyt5IKY<-8}rIn8EOF&)AMnoCTk!R+t#PT`K=%QOM2uhn#12XJuQvmz&M-60eJ$WiZzI8) zLSTQ#sxco?pX)|*im8XC7fso=JS8~Pn^H%Qd_?dIcwWvc`)lKOYVvt)zCEmrMn^+} zIQFhB7d<&O?4KTWJ9zYaT_s&w;z_*LP;ymN9=}q5O7YN6G5J>6Rcf`c>Q#3$#KJJC zXrAxzbmzd9f%*w#+w|RBAIAxdo-mFwa$>YVa&wH9KjB`T@b1N|JR7D!>J`jhV=47w zPxY@N_^&9N$6Aj}CdA{}2Oq6@Ien^TGm`0l%;~P$ppnjLR)X_WwY7YKH0c>CdBHfZ zV{e6i7(hvq{l2pS{DpZ(g=M$5@gAFTc_@nBE2McGs2jR!&+a5;SHvwie+^UUP9eJ zm2Dp#_+fhLp!*1){3oPw%D05b*d0y)JXcNdW8ucD z@hioPq-o^AZ3q%x-LmCik3D_Z^aH=p6JL4!KJY(>JO!dAli}MHfj}N~>@zg&{pW7~ z08WFjsg#l-%E#uV*&k?;vBvYyZngCmh|4C6WZ-}ev}gYS9UbfC%ccGMj)OJyE~9>I zeie)5ZLXSBVNd%;Fr)P~^V#(`QB#WQ?0PsETbcPDJMkyPGI)c;vq~JBJ9aT!FJPeZ z-&5D}rg#^^7rraHxQg0n?csqzl34*GC!hdzCl$^PoqE@@{?B;+$klO-{higYKD)A+i{++AMVW~Sk#kM2P?EIj7xIUQaP-y3FuV&dJ7YKjx z;azXW)eGavh{w%u6CZvt{VR~u+^zf#j*_qQuB<&rR}UG!sLpZZn_g$tr-=^i4 zAX;dl z9j>cqdowI>`7=cB+yTPK3H&2!#<9K^8v5$C@lKXfNRXtmuE8eoRI-E4-NG(?>w=n- zSG|?L9lreyrDW`5+xSky#oBJAsp@J{>gw)Ax1D;!8XbrL=vM-`-CN;Di0w>&VtZ@g zczj3`Y5xF$V?Tv^W|gMfX_hN#YMW3yKV0Oq5>Mu8!(*Mm413o_Jl?$-KW6>jiIFTU zB(>c6XIj$k^nF%+I`e0r0Z}H#+yNjEGvBRxo{4Vp`2PUGT5O*)T4^RmZ+1sNrvj{a z)5BKR9y1F0^0nJ%iOLL^rH^YX{Wt*rHFv{yGD)FnUMRWDdXAlGExciHMZ#dBXV8*H zKDFy&aq+E25`9x&Hk$nIj#_k_Cek|(4?zsNUY~ODBS@&t8U4z{{{U{e^KEWLq_8xH%V?AUxKB{He2#k8OQXWp`bCwyj5JV2jr9sM zUq6V4E#2;${{S<-oVG0yoPpEYy06<*dB3y2hGpxEyFP%lZVp z)>{%k@7W*Ly^bByb6$rYV6=(x3M(@NUaWSC`o1WZ7?Ks>B83?A01Ekk!_b?L5oxyM zWJ`AvAH~40sMzjyBaXaP@f}TR$Jg`>2GU~y!s8!>eD(2SVR7T_P?kTtDH`Ls2)tL& z>yhoO4%mu32wj`&h2=`fp(O4i>QGR%lS5(o9K zT=@S0HZ*NE0NgdpHa?600N1ZI@C*Xu#(F$t7GJhT#AmQzf1$4T_JNfBt4V`BBa#0A zGNbxet&I1v^kdrW<)x(=w0TIt93DOEc0U(*nmc5*k6XTu6i}*(DFHwj1B%5&cXd?( znTP`isp(o8){Uv?(!z& zOFI%z)Yn1q^TTuai(iT&j4a_H?jNvU?)^`tVp;u}Zellx@<1ChDmKzbd>>l+Kfy8R z(fD%OO$sHB%4OU?y`KBM@(p?UrZ!kwR)W>(eu&=yq+IT)tsMWryVAukx+0s zJf11CbjKCY_$R}^@RMrqVfK@31T86$F7AX3V?OoQ-25qt4jWpKXGEl)Qt1*UdeqAk>Fh|2k_g&`mg^0UbBb7+g#-8)13N3KgPOG7F(ikrTtW)_s7+h>XRoP(`N-{oKBRM6!{ImKvr!Ncmwg$hU?aGdiAHE&riVPwML^X0PEB1Q>yR*#y+*Nn?C#f zm%JNq;U9#WW0+NM^>kfA?eX&+<1w$$CO;D1wdxEroOP`K01f$T;oT`<075LF3Ad)- zEpd;+v@%CerE|A)9;fAv*u>-3c8Z^BVeU+=FisIOP85m2 z?`rEhuUv&cF#K0={A-!iwH3bcOtx{sad!x|`#OjalN&zA^GWCc0eS1icExg}Hr{(; zxf_ey%`PX>E#nI2K@3xq{;eb+M(5NInSP;tYsb3Ix3qG>vnefXPv5DLu)Kj zc{3MmFPV-p?8A}lYO8p+!()N0TVws4pX4fxn2mP!*4`}`B<<7qpu{hDA z`$<(L?i~uj2m_WZdgIV_tSv_C`#R!lOWQk{k||ZLZkH~%QB1pBx{g$F^7bBB99Lp~ z(W^q%>2>MZe@^B}a_f7VmsZjimq@>t?emFaOM96Rd4f4|BnKR1DnCAz)#RMufzMvm z&*(aAFzYuCmlqdN+K(^Io%b_HMlcRKD&T*>nz{l9CvpCj!H8+eFYEpR(G69^?}69p zU4QLFrcc>7OOqM$+Q{eAkUy<){SJB$h z@$21-^FBHFaS)rwx-x;n-6Q`1-#<6>ucTLj>VKVl{{ZlEAt#UQ4l*NIT;u+^u>Q65 z0Kq>)=~?j%uZW85zf!O&&}>Nxs_r-&Msr^&-pJG5TugZ~NX}2x=Dwft1fOToFQ?8t zt7%)Wq8j;iKsd?AzALYXBCS$hpQ#wqR7yG+jXDOh? z=WA9m0n6ORr}1H4)$zAZTb~AftO4d(%&rgnB<(-UepTdN1&hw{hLVJW4cuh@2Q~CZ zi0sCvpkL|xbM}jOLH_m*-`5q*o7eVOs#0AwG{V#7r#0O9d)$tDoY%1Y1JxQ!EBz(d z;ujMqJp*vV^8@p*A}UqNmBAfGdRJ@kR`cw>HHsELE!0mL=f6?>tJ2MBD!5tsYxf-Z zc{tQZx9ZX?8eP=cz>XJh$xVE`NM_!AE8dj5azTI2I!{uSysgqd4zJu_Yl;ZGFb_-XDQ!5}RNAWp17Z%I(fq$)fKA|Mn9uAIa$TK~fJcJB<#X&q*om&A@4JgWOYR-yPV^d?q zyi(cLADn!nrBjIHdgiY9paZFc$0$FoP>Ha=O8VL#!-?lr_}Mc3;rVk@#6j!M4OT4K z^`}PXI42mbjL*=Y+0(@_c(36ujdCRobz=(HU9Ndohy@w?rqlS>qJx#jYxDcy55+6b zhTbS?q)9Gxd)=vjZl|0NyCVMpw7EY}NUyuRDX-|>Ceh*6G(AEa>nVm-L~e)stU9S4 zhOv}v%%qw>G4HY@jF50*Tm$s4fABT3>OTx@Z6Ezy)^8JjC53oJ%o0rSl!`|lQje4q z{HwqCH$JkyB!<%AuhzgpF38__jZaU5?M=mCQ4E(PDòXC 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 diff --git a/resources/library/sankoreInteractivities/ordonner_des_images.wgt/img/1.png b/resources/library/sankoreInteractivities/ordonner_des_images.wgt/img/1.png deleted file mode 100644 index c50733dcd78194d56b64f743b0da3c0e4c290863..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55180 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 F{{dznS_c3C diff --git a/resources/library/sankoreInteractivities/ordonner_des_images.wgt/img/2.png b/resources/library/sankoreInteractivities/ordonner_des_images.wgt/img/2.png deleted file mode 100644 index 7ad83b8765a786ac2644a5e3a6a289a4f1b558db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37531 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 Kyu5XP?0*2})Y6Us delta 1254 zcmV~1V#lLMD~zwe%Ve&>C^&vtirCyzmPc_ex?;0Wu3&1Msa!+#-7O-+)JkRVA(Nis4r zB5t=^GBY!s*mol|)poo68D?i75Riz72tSUlV(r1ccWZ0Q@AZ16rKLrVkB{Z_^i)Pi zM}@rButt1Lv*_q(8-S{@?84zf%qh3Gw+`-6(ACw|Qz%PCzQDW+-d8x|;r4@FeSUuK ztgEa0J~cIU4u1fjUteFRVL0BteXILbRaF8YIXgRZ+}zxxfu}MhC1s9hc=nTB9YR^K z>@@_JL8w~CP;fS*qM|~aPN$5IkBi^$mzbCs@;I>9g7cqYG-CMvjm4<|9fxbnV4=`L zf?r-y@)+bp^VSmv2B@RC~7Lo`Q7Z<0AmY<(5 z@$vEMW_3+gmbACG%jD#wEH5uxla(@FLT2*^fop1N$XpH3Mrv(<37VIeC(X^xY8l^$ zQgU*#AQ$A~;zB|yrLnfQb{uj%VS%HfqMR6A0JWQ#(si`3v$Ipni?qMLucN4_NUcUv z$=KMKuz!r`F;kjB8FqN53vzzPYyW$JVHxYxWh_FBG+|m>TNRWso|&1E>FH?&Oel zC1*{{pv~#LHoeRJ#urxp`cxZQbS2i~{b+53nP%WY*wA#|4 z^j&UluH@w8DDTP1iCRtNgM0z-{Sg)z$@B(Hf05a^kfp<>z<76ecS~AYngSUfdWCt= z)6*k~iHXWPJ3FgMXxeR1=9{p_^PtCs?Hyo~sYs+B;Hs~z7Y9L@JoWYUdMQ}<*hr?Prqps;Nq%co|l?p#X0%m*tbj9|ZK^TJ&1)+z*lM|6iE@ivAX00LjEimYo?l Q;{X5v07*qoM6N<$f-RY3asU7T diff --git a/resources/library/sankoreInteractivities/ordonner_des_images.wgt/img/drop_img.png b/resources/library/sankoreInteractivities/ordonner_des_images.wgt/img/drop_img.png new file mode 100644 index 0000000000000000000000000000000000000000..17024f03bb5b3ce7a4ce3a052029b9744489a365 GIT binary patch literal 1618 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 bJT3;R%hBd8PgRz!{XyYvoN*=AezAW6&ub}y literal 0 HcmV?d00001 diff --git a/resources/library/sankoreInteractivities/ordonner_des_images.wgt/index.html b/resources/library/sankoreInteractivities/ordonner_des_images.wgt/index.html index 5525abd4..20aaf679 100644 --- a/resources/library/sankoreInteractivities/ordonner_des_images.wgt/index.html +++ b/resources/library/sankoreInteractivities/ordonner_des_images.wgt/index.html @@ -15,10 +15,26 @@ lang = sankore.locale().substr(0,2); } else lang = "en"; - $(" + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/fr/js/script.js b/resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/fr/js/script.js new file mode 100644 index 00000000..83d61c86 --- /dev/null +++ b/resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/fr/js/script.js @@ -0,0 +1,392 @@ + +var sankoreLang = {display: "D'affichage", edit: "Modifier", short_desc: "Placez les photos dans l'ordre croissant.", add: "Nouveau bloc"}; + +//main function +function start(){ + + $("#display_text").text(sankoreLang.display); + $("#edit_text").text(sankoreLang.edit); + + if(window.sankore){ + if(sankore.preference("odr_des_imgs","")){ + var data = jQuery.parseJSON(sankore.preference("odr_des_imgs","")); + importData(data); + } else { + showExample(); + } + } + else + showExample(); + + //events + $("body").live("mouseout",function(){ + if(event.target.tagName == "BODY") + if(window.sankore) + exportData(); + }) + + $("#display, #edit").click(function(event){ + if(this.id == "display"){ + if(!$(this).hasClass("selected")){ + $(this).addClass("selected"); + $("#display_img").removeClass("red_point").addClass("green_point"); + $("#edit_img").removeClass("green_point").addClass("red_point"); + $("#edit").removeClass("selected"); + $(".add_block").remove(); + $(".cont").each(function(){ + var container = $(this); + var tmp_i = 0; + var tmp_right = ""; + var tmp_array = []; + + container.find(".text_cont").removeAttr("contenteditable"); + container.find(".add_img").remove(); + container.find(".close_cont").remove(); + container.find(".img_block").each(function(){ + if($(this).find("img").attr("src") != "img/drop_img.png"){ + $(this).find(".close_img").remove(); + $(this).find(".clear_img").remove(); + $(this).find(".numb_img").remove(); + $(this).removeAttr("ondragenter") + .removeAttr("ondragleave") + .removeAttr("ondragover") + .removeAttr("ondrop"); + $(this).find("input").val(++tmp_i) + tmp_right += tmp_i + "*"; + } else + $(this).remove(); + }); + container.find(".imgs_cont>input").val(tmp_right); + + container.find(".img_block").each(function(){ + $(this).css("float",""); + tmp_array.push($(this)); + }); + tmp_array = shuffle(tmp_array); + for(var i = 0; i").appendTo(container); + container.find(".text_cont").attr("contenteditable","true"); + //container.find(".imgs_cont").sortable("destroy"); + container.find(".imgs_cont").css("background-color", "white"); + + var add_img = $("
"); + container.find(".img_block").each(function(){ + $(this).attr("ondragenter", "return false;") + .attr("ondragleave", "$(this).css(\"background-color\",\"white\"); return false;") + .attr("ondragover", "$(this).css(\"background-color\",\"#ccc\"); return false;") + .attr("ondrop", "$(this).css(\"background-color\",\"white\"); return onDropTarget(this,event);") + //.css("float","left"); + $("
").appendTo($(this)); + $("
").appendTo($(this)); + $("
" + $(this).find("input").val() + "
").appendTo($(this)); + }); + rightOrder(container.find(".imgs_cont")); + container.find(".imgs_cont").append(add_img) + }); + + $("
" + sankoreLang.add + "
").appendTo("body"); + } + } + }); + + //add new block + $(".add_block").live("click", function(){ + addContainer(); + }); + + //adding new img + $(".add_img").live("click", function(){ + addImgBlock($(this)); + }); + + //deleting a block + $(".close_cont").live("click",function(){ + $(this).parent().remove(); + refreshBlockNumbers(); + }); + + //deleting the img block + $(".close_img").live("click", function(){ + var i = 0; + var tmp_obj = $(this).parent().parent(); + $(this).parent().remove(); + if(tmp_obj.find(".img_block").size() > 0){ + refreshImgNumbers(tmp_obj); + } + + }); + + //cleaning an image + $(".clear_img").live("click",function(){ + //$(this).parent().find(".fill_img").remove(); + $(this).parent().find("img").attr("src","img/drop_img.png"); + }); +} + +//export +function exportData(){ + var array_to_export = []; + if($("#edit").hasClass("selected")){ + $(".cont").each(function(){ + var container = $(this); + var tmp_right = ""; + var tmp_i = 0; + container.find(".img_block").each(function(){ + if($(this).html().match(/input").val(tmp_right); + }); + } + $(".cont").each(function(){ + var cont_obj = new Object(); + cont_obj.text = $(this).find(".text_cont").text(); + cont_obj.right = $(this).find(".imgs_cont>input").val(); + cont_obj.imgs = []; + $(this).find(".img_block").each(function(){ + var img_obj = new Object(); + img_obj.value = $(this).find("input").val(); + img_obj.link = $(this).find("img").attr("src").replace("../../",""); + img_obj.ht = $(this).find("img").height(); + img_obj.wd = $(this).find("img").width(); + cont_obj.imgs.push(img_obj); + }); + array_to_export.push(cont_obj); + }); + sankore.setPreference("odr_des_imgs", JSON.stringify(array_to_export)); +} + +//import +function importData(data){ + + var tmp = 0; + for(var i in data){ + var tmp_array = []; + var container = $("
"); + var sub_container = $("
").appendTo(container); + var imgs_container = $("
").appendTo(container); + + var number = $("
"+ (++tmp) +"
").appendTo(sub_container); + var text = $("
" + data[i].text + "
").appendTo(sub_container); + + $("").appendTo(imgs_container); + + for(var j in data[i].imgs){ + var img_block = $("
"); + var img = $(""); + img.height(data[i].imgs[j].ht).width(data[i].imgs[j].wd); + if((120 - data[i].imgs[j].ht) > 0) + img.css("margin",(120 - data[i].imgs[j].ht)/2 + "px 0"); + var hidden_input = $("").val(data[i].imgs[j].value); + img_block.append(hidden_input).append(img); + tmp_array.push(img_block); + } + tmp_array = shuffle(tmp_array); + for(j = 0; j"); + var sub_container = $("
").appendTo(container); + var imgs_container = $("
").appendTo(container); + + var number = $("
1
").appendTo(sub_container); + var text = $("
" + sankoreLang.short_desc + "
").appendTo(sub_container); + + $("").appendTo(imgs_container); + + var img1 = $("
"); + $("").appendTo(img1); + $("").appendTo(img1); + var img2 = $("
"); + $("").appendTo(img2); + $("").appendTo(img2); + var img3 = $("
"); + $("").appendTo(img3); + $("").appendTo(img3); + var img4 = $("
"); + $("").appendTo(img4); + $("").appendTo(img4); + var img5 = $("
"); + $("").appendTo(img5); + $("").appendTo(img5); + + tmp_array.push(img1, img2, img3, img4, img5); + tmp_array = shuffle(tmp_array); + for(var i = 0; i"); + var sub_container = $("
").appendTo(container); + var imgs_container = $("
").appendTo(container); + + var close = $("
").appendTo(container); + var number = $("
"+ ($(".cont").size() + 1) +"
").appendTo(sub_container); + var text = $("
Enter your text here ...
").appendTo(sub_container); + + $("").appendTo(imgs_container); + var add_img = $("
").appendTo(imgs_container); + container.insertBefore($(".add_block")); +} + +//add new img block +function addImgBlock(dest){ + var img_block = $("
").insertBefore(dest); + var tmp_counter = dest.parent().find(".img_block").size(); + $("
").appendTo(img_block); + $("
").appendTo(img_block); + $("
" + tmp_counter + "
").appendTo(img_block); + $("").appendTo(img_block); + $("").appendTo(img_block); +} + +function refreshBlockNumbers(){ + var i = 0; + $(".cont").each(function(){ + $(this).find(".number_cont").text(++i); + }) +} + +//shuffles an array +function shuffle( arr ) +{ + var pos, tmp; + for( var i = 0; i < arr.length; i++ ) + { + pos = Math.round( Math.random() * ( arr.length - 1 ) ); + tmp = arr[pos]; + arr[pos] = arr[i]; + arr[i] = tmp; + } + return arr; +} + +//regulation the images in right order +function rightOrder(source){ + var tmp_arr = []; + var tmp_var; + source.find(".img_block").each(function(){ + tmp_arr.push($(this)); + $(this).remove(); + }); + for(var i = 0; i < tmp_arr.length; i++) + for(var j = 0; j < tmp_arr.length - 1; j++){ + if(tmp_arr[j].find("input").val() > tmp_arr[j+1].find("input").val()){ + tmp_var = tmp_arr[j]; + tmp_arr[j] = tmp_arr[j+1]; + tmp_arr[j+1] = tmp_var; + } + } + for(i in tmp_arr) + source.append(tmp_arr[i]); +} + +//refresh the numbers of the images +function refreshImgNumbers(source){ + var tmp = 1; + source.find(".img_block").each(function(){ + $(this).find("input").val(tmp); + $(this).find(".numb_img").text(tmp); + tmp++; + }); +} + +function stringToXML(text){ + if (window.ActiveXObject){ + var doc=new ActiveXObject('Microsoft.XMLDOM'); + doc.async='false'; + doc.loadXML(text); + } else { + var parser=new DOMParser(); + doc=parser.parseFromString(text,'text/xml'); + } + return doc; +} + +function onDropTarget(obj, event) { + $(obj).find("img").remove(); + if (event.dataTransfer) { + var format = "text/plain"; + var textData = event.dataTransfer.getData(format); + if (!textData) { + alert(":("); + } + textData = stringToXML(textData); + var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent; + tmp = tmp.substr(1, tmp.length); + var tmp_img = $("").attr("src", "../../" + tmp); + $(obj).append(tmp_img); + setTimeout(function(){ + if(tmp_img.height() >= tmp_img.width()) + tmp_img.attr("height", "120"); + else{ + tmp_img.attr("width","120"); + tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0"); + } + }, 6) + } + else { + alert ("Your browser does not support the dataTransfer object."); + } + + if (event.stopPropagation) { + event.stopPropagation (); + } + else { + event.cancelBubble = true; + } + return false; +} + diff --git a/resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/ru/img/drop_img.png b/resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/ru/img/drop_img.png new file mode 100644 index 0000000000000000000000000000000000000000..2796c020ff60d2c5fbc85488bfeb774521ae8f22 GIT binary patch literal 2196 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 literal 0 HcmV?d00001 diff --git a/resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/ru/index.html b/resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/ru/index.html new file mode 100644 index 00000000..9388cd2f --- /dev/null +++ b/resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/ru/index.html @@ -0,0 +1,45 @@ + + + + D'n'd + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/ru/js/script.js b/resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/ru/js/script.js new file mode 100644 index 00000000..ae10471c --- /dev/null +++ b/resources/library/sankoreInteractivities/ordonner_des_images.wgt/locales/ru/js/script.js @@ -0,0 +1,392 @@ + +var sankoreLang = {display: "Показать", edit: "Изменить", short_desc: "Расположите картинки в порядке возрастания цифр.", add: "Новый блок"}; + +//main function +function start(){ + + $("#display_text").text(sankoreLang.display); + $("#edit_text").text(sankoreLang.edit); + + if(window.sankore){ + if(sankore.preference("odr_des_imgs","")){ + var data = jQuery.parseJSON(sankore.preference("odr_des_imgs","")); + importData(data); + } else { + showExample(); + } + } + else + showExample(); + + //events + $("body").live("mouseout",function(){ + if(event.target.tagName == "BODY") + if(window.sankore) + exportData(); + }) + + $("#display, #edit").click(function(event){ + if(this.id == "display"){ + if(!$(this).hasClass("selected")){ + $(this).addClass("selected"); + $("#display_img").removeClass("red_point").addClass("green_point"); + $("#edit_img").removeClass("green_point").addClass("red_point"); + $("#edit").removeClass("selected"); + $(".add_block").remove(); + $(".cont").each(function(){ + var container = $(this); + var tmp_i = 0; + var tmp_right = ""; + var tmp_array = []; + + container.find(".text_cont").removeAttr("contenteditable"); + container.find(".add_img").remove(); + container.find(".close_cont").remove(); + container.find(".img_block").each(function(){ + if($(this).find("img").attr("src") != "img/drop_img.png"){ + $(this).find(".close_img").remove(); + $(this).find(".clear_img").remove(); + $(this).find(".numb_img").remove(); + $(this).removeAttr("ondragenter") + .removeAttr("ondragleave") + .removeAttr("ondragover") + .removeAttr("ondrop"); + $(this).find("input").val(++tmp_i) + tmp_right += tmp_i + "*"; + } else + $(this).remove(); + }); + container.find(".imgs_cont>input").val(tmp_right); + + container.find(".img_block").each(function(){ + $(this).css("float",""); + tmp_array.push($(this)); + }); + tmp_array = shuffle(tmp_array); + for(var i = 0; i").appendTo(container); + container.find(".text_cont").attr("contenteditable","true"); + //container.find(".imgs_cont").sortable("destroy"); + container.find(".imgs_cont").css("background-color", "white"); + + var add_img = $("
"); + container.find(".img_block").each(function(){ + $(this).attr("ondragenter", "return false;") + .attr("ondragleave", "$(this).css(\"background-color\",\"white\"); return false;") + .attr("ondragover", "$(this).css(\"background-color\",\"#ccc\"); return false;") + .attr("ondrop", "$(this).css(\"background-color\",\"white\"); return onDropTarget(this,event);") + //.css("float","left"); + $("
").appendTo($(this)); + $("
").appendTo($(this)); + $("
" + $(this).find("input").val() + "
").appendTo($(this)); + }); + rightOrder(container.find(".imgs_cont")); + container.find(".imgs_cont").append(add_img) + }); + + $("
" + sankoreLang.add + "
").appendTo("body"); + } + } + }); + + //add new block + $(".add_block").live("click", function(){ + addContainer(); + }); + + //adding new img + $(".add_img").live("click", function(){ + addImgBlock($(this)); + }); + + //deleting a block + $(".close_cont").live("click",function(){ + $(this).parent().remove(); + refreshBlockNumbers(); + }); + + //deleting the img block + $(".close_img").live("click", function(){ + var i = 0; + var tmp_obj = $(this).parent().parent(); + $(this).parent().remove(); + if(tmp_obj.find(".img_block").size() > 0){ + refreshImgNumbers(tmp_obj); + } + + }); + + //cleaning an image + $(".clear_img").live("click",function(){ + //$(this).parent().find(".fill_img").remove(); + $(this).parent().find("img").attr("src","img/drop_img.png"); + }); +} + +//export +function exportData(){ + var array_to_export = []; + if($("#edit").hasClass("selected")){ + $(".cont").each(function(){ + var container = $(this); + var tmp_right = ""; + var tmp_i = 0; + container.find(".img_block").each(function(){ + if($(this).html().match(/input").val(tmp_right); + }); + } + $(".cont").each(function(){ + var cont_obj = new Object(); + cont_obj.text = $(this).find(".text_cont").text(); + cont_obj.right = $(this).find(".imgs_cont>input").val(); + cont_obj.imgs = []; + $(this).find(".img_block").each(function(){ + var img_obj = new Object(); + img_obj.value = $(this).find("input").val(); + img_obj.link = $(this).find("img").attr("src").replace("../../",""); + img_obj.ht = $(this).find("img").height(); + img_obj.wd = $(this).find("img").width(); + cont_obj.imgs.push(img_obj); + }); + array_to_export.push(cont_obj); + }); + sankore.setPreference("odr_des_imgs", JSON.stringify(array_to_export)); +} + +//import +function importData(data){ + + var tmp = 0; + for(var i in data){ + var tmp_array = []; + var container = $("
"); + var sub_container = $("
").appendTo(container); + var imgs_container = $("
").appendTo(container); + + var number = $("
"+ (++tmp) +"
").appendTo(sub_container); + var text = $("
" + data[i].text + "
").appendTo(sub_container); + + $("").appendTo(imgs_container); + + for(var j in data[i].imgs){ + var img_block = $("
"); + var img = $(""); + img.height(data[i].imgs[j].ht).width(data[i].imgs[j].wd); + if((120 - data[i].imgs[j].ht) > 0) + img.css("margin",(120 - data[i].imgs[j].ht)/2 + "px 0"); + var hidden_input = $("").val(data[i].imgs[j].value); + img_block.append(hidden_input).append(img); + tmp_array.push(img_block); + } + tmp_array = shuffle(tmp_array); + for(j = 0; j"); + var sub_container = $("
").appendTo(container); + var imgs_container = $("
").appendTo(container); + + var number = $("
1
").appendTo(sub_container); + var text = $("
" + sankoreLang.short_desc + "
").appendTo(sub_container); + + $("").appendTo(imgs_container); + + var img1 = $("
"); + $("").appendTo(img1); + $("").appendTo(img1); + var img2 = $("
"); + $("").appendTo(img2); + $("").appendTo(img2); + var img3 = $("
"); + $("").appendTo(img3); + $("").appendTo(img3); + var img4 = $("
"); + $("").appendTo(img4); + $("").appendTo(img4); + var img5 = $("
"); + $("").appendTo(img5); + $("").appendTo(img5); + + tmp_array.push(img1, img2, img3, img4, img5); + tmp_array = shuffle(tmp_array); + for(var i = 0; i"); + var sub_container = $("
").appendTo(container); + var imgs_container = $("
").appendTo(container); + + var close = $("
").appendTo(container); + var number = $("
"+ ($(".cont").size() + 1) +"
").appendTo(sub_container); + var text = $("
Enter your text here ...
").appendTo(sub_container); + + $("").appendTo(imgs_container); + var add_img = $("
").appendTo(imgs_container); + container.insertBefore($(".add_block")); +} + +//add new img block +function addImgBlock(dest){ + var img_block = $("
").insertBefore(dest); + var tmp_counter = dest.parent().find(".img_block").size(); + $("
").appendTo(img_block); + $("
").appendTo(img_block); + $("
" + tmp_counter + "
").appendTo(img_block); + $("").appendTo(img_block); + $("").appendTo(img_block); +} + +function refreshBlockNumbers(){ + var i = 0; + $(".cont").each(function(){ + $(this).find(".number_cont").text(++i); + }) +} + +//shuffles an array +function shuffle( arr ) +{ + var pos, tmp; + for( var i = 0; i < arr.length; i++ ) + { + pos = Math.round( Math.random() * ( arr.length - 1 ) ); + tmp = arr[pos]; + arr[pos] = arr[i]; + arr[i] = tmp; + } + return arr; +} + +//regulation the images in right order +function rightOrder(source){ + var tmp_arr = []; + var tmp_var; + source.find(".img_block").each(function(){ + tmp_arr.push($(this)); + $(this).remove(); + }); + for(var i = 0; i < tmp_arr.length; i++) + for(var j = 0; j < tmp_arr.length - 1; j++){ + if(tmp_arr[j].find("input").val() > tmp_arr[j+1].find("input").val()){ + tmp_var = tmp_arr[j]; + tmp_arr[j] = tmp_arr[j+1]; + tmp_arr[j+1] = tmp_var; + } + } + for(i in tmp_arr) + source.append(tmp_arr[i]); +} + +//refresh the numbers of the images +function refreshImgNumbers(source){ + var tmp = 1; + source.find(".img_block").each(function(){ + $(this).find("input").val(tmp); + $(this).find(".numb_img").text(tmp); + tmp++; + }); +} + +function stringToXML(text){ + if (window.ActiveXObject){ + var doc=new ActiveXObject('Microsoft.XMLDOM'); + doc.async='false'; + doc.loadXML(text); + } else { + var parser=new DOMParser(); + doc=parser.parseFromString(text,'text/xml'); + } + return doc; +} + +function onDropTarget(obj, event) { + $(obj).find("img").remove(); + if (event.dataTransfer) { + var format = "text/plain"; + var textData = event.dataTransfer.getData(format); + if (!textData) { + alert(":("); + } + textData = stringToXML(textData); + var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent; + tmp = tmp.substr(1, tmp.length); + var tmp_img = $("").attr("src", "../../" + tmp); + $(obj).append(tmp_img); + setTimeout(function(){ + if(tmp_img.height() >= tmp_img.width()) + tmp_img.attr("height", "120"); + else{ + tmp_img.attr("width","120"); + tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0"); + } + }, 6) + } + else { + alert ("Your browser does not support the dataTransfer object."); + } + + if (event.stopPropagation) { + event.stopPropagation (); + } + else { + event.cancelBubble = true; + } + return false; +} + From 9c48fd20952cb8d6f7de5031c8512f8e40a457ca Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Tue, 7 Feb 2012 11:54:21 +0200 Subject: [PATCH 24/24] Fix to SANKORE-337 --- src/domain/UBGraphicsScene.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 0f2d0c52..4a489a1f 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1755,6 +1755,9 @@ void UBGraphicsScene::addCache() mTools << cache; addItem(cache); + + cache->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Tool)); + cache->setVisible(true); cache->setSelected(true); UBApplication::boardController->notifyCache(true);