diff --git a/src/board/UBBoardPaletteManager.cpp b/src/board/UBBoardPaletteManager.cpp index a3b649d2..25291b87 100644 --- a/src/board/UBBoardPaletteManager.cpp +++ b/src/board/UBBoardPaletteManager.cpp @@ -44,6 +44,7 @@ #include "gui/UBWebToolsPalette.h" #include "gui/UBActionPalette.h" #include "gui/UBFavoriteToolPalette.h" +#include "gui/UBStartupHintsPalette.h" #include "web/UBWebPage.h" #include "web/UBWebController.h" @@ -80,6 +81,7 @@ UBBoardPaletteManager::UBBoardPaletteManager(QWidget* container, UBBoardControll , mBoardControler(pBoardController) , mStylusPalette(0) , mZoomPalette(0) + , mTipPalette(0) , mLeftPalette(NULL) , mRightPalette(NULL) , mBackgroundsPalette(0) @@ -241,6 +243,7 @@ void UBBoardPaletteManager::setupPalettes() mStylusPalette->stackUnder(mZoomPalette); + mTipPalette = new UBStartupHintsPalette(mContainer); QList backgroundsActions; backgroundsActions << UBApplication::mainWindow->actionPlainLightBackground; diff --git a/src/board/UBBoardPaletteManager.h b/src/board/UBBoardPaletteManager.h index 0a53ac7f..516dfeb7 100644 --- a/src/board/UBBoardPaletteManager.h +++ b/src/board/UBBoardPaletteManager.h @@ -51,6 +51,7 @@ class UBServerXMLHttpRequest; class UBKeyboardPalette; class UBMainWindow; class UBApplicationController; +class UBStartupHintsPalette; class UBBoardPaletteManager : public QObject { @@ -104,7 +105,7 @@ class UBBoardPaletteManager : public QObject UBStylusPalette *mStylusPalette; UBZoomPalette *mZoomPalette; - + UBStartupHintsPalette* mTipPalette; /** The left dock palette */ UBLeftPalette* mLeftPalette; /** The right dock palette */ diff --git a/src/core/UBSettings.cpp b/src/core/UBSettings.cpp index 70f14ab0..ed1995cf 100644 --- a/src/core/UBSettings.cpp +++ b/src/core/UBSettings.cpp @@ -232,6 +232,9 @@ void UBSettings::init() appLastSessionDocumentUUID = new UBSetting(this, "App", "LastSessionDocumentUUID", ""); appLastSessionPageIndex = new UBSetting(this, "App", "LastSessionPageIndex", 0); appUseMultiscreen = new UBSetting(this, "App", "UseMultiscreenMode", true); + + appStartupHintsEnabled = new UBSetting(this,"App","EnableStartupHints",true); + appLookForOpenSankoreInstall = new UBSetting(this, "App", "LookForOpenSankoreInstall", true); appStartMode = new UBSetting(this, "App", "StartMode", ""); @@ -1069,6 +1072,19 @@ QString UBSettings::applicationAnimationsLibraryDirectory() } } +QString UBSettings::applicationStartupHintsDirectory() +{ + QString defaultRelativePath = QString("./startupHints"); + + QString configPath = value("StartupHintsDirectory", QVariant(defaultRelativePath)).toString(); + + if (configPath.startsWith(".")) { + return UBPlatformUtils::applicationResourcesDirectory() + configPath.right(configPath.size() - 1); + } + else + return configPath; +} + QString UBSettings::userInteractiveFavoritesDirectory() { static QString dirPath = ""; diff --git a/src/core/UBSettings.h b/src/core/UBSettings.h index 0b9a4664..571c27ad 100644 --- a/src/core/UBSettings.h +++ b/src/core/UBSettings.h @@ -150,6 +150,7 @@ class UBSettings : public QObject QString applicationAudiosLibraryDirectory(); QString applicationVideosLibraryDirectory(); QString applicationAnimationsLibraryDirectory(); + QString applicationStartupHintsDirectory(); QNetworkProxy* httpProxy(); @@ -239,6 +240,9 @@ class UBSettings : public QObject UBSetting* appLastSessionPageIndex; UBSetting* appUseMultiscreen; + + UBSetting* appStartupHintsEnabled; + UBSetting* appLookForOpenSankoreInstall; UBSetting* boardPenFineWidth; diff --git a/src/gui/UBStartupHintsPalette.cpp b/src/gui/UBStartupHintsPalette.cpp new file mode 100644 index 00000000..8a831990 --- /dev/null +++ b/src/gui/UBStartupHintsPalette.cpp @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA) + * + * This file is part of Open-Sankoré. + * + * Open-Sankoré 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, version 3 of the License, + * with a specific linking exception for the OpenSSL project's + * "OpenSSL" library (or with modified versions of it that use the + * same license as the "OpenSSL" library). + * + * Open-Sankoré 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 Open-Sankoré. If not, see . + */ + + + +#include +#include +#include +#include +#include +#include +#include "UBStartupHintsPalette.h" + +#include "globals/UBGlobals.h" +#include "core/UBSettings.h" + + + + + +UBStartupHintsPalette::UBStartupHintsPalette(QWidget *parent) : + UBFloatingPalette(Qt::TopRightCorner,parent) +{ + setObjectName("UBStartupHintsPalette"); + if(UBSettings::settings()->appStartupHintsEnabled->get().toBool()){ + setFixedSize(700,450); + mLayout = new QVBoxLayout(); + mLayout->setContentsMargins(10,28,10,10); + setLayout(mLayout); + QString url = UBSettings::settings()->applicationStartupHintsDirectory() + "/index.html"; + mpWebView = new QWebView(this); + mpSankoreAPI = new UBWidgetUniboardAPI(0); + mpWebView->page()->mainFrame()->addToJavaScriptWindowObject("sankore", mpSankoreAPI); + connect(mpWebView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(javaScriptWindowObjectCleared())); + mpWebView->setUrl(QUrl::fromLocalFile(url)); + mpWebView->setAcceptDrops(false); + mLayout->addWidget(mpWebView); + mButtonLayout = new QHBoxLayout(); + mLayout->addLayout(mButtonLayout); + mShowNextTime = new QCheckBox(tr("Visible next time"),this); + mShowNextTime->setCheckState(Qt::Checked); + connect(mShowNextTime,SIGNAL(stateChanged(int)),this,SLOT(onShowNextTimeStateChanged(int))); + mButtonLayout->addStretch(); + mButtonLayout->addWidget(mShowNextTime); + } + else + hide(); +} + +UBStartupHintsPalette::~UBStartupHintsPalette() +{ +// DELETEPTR(mButtonLayout); +// DELETEPTR(mLayout); +} + +void UBStartupHintsPalette::paintEvent(QPaintEvent *event) +{ + UBFloatingPalette::paintEvent(event); + + QPainter painter(this); + painter.drawPixmap(0, 0, QPixmap(":/images/close.svg")); +} + + +void UBStartupHintsPalette::close() +{ + hide(); +} + + +void UBStartupHintsPalette::mouseReleaseEvent(QMouseEvent * event) +{ + if (event->pos().x() >= 0 && event->pos().x() < QPixmap(":/images/close.svg").width() + && event->pos().y() >= 0 && event->pos().y() < QPixmap(":/images/close.svg").height()) + { + event->accept(); + close(); + } + + UBFloatingPalette::mouseReleaseEvent(event); +} + +void UBStartupHintsPalette::onShowNextTimeStateChanged(int state) +{ + UBSettings::settings()->appStartupHintsEnabled->setBool(state == Qt::Checked); +} + +void UBStartupHintsPalette::showEvent(QShowEvent *event) +{ + Q_UNUSED(event); + adjustSizeAndPosition(); + move((parentWidget()->width() - width()) / 2, (parentWidget()->height() - height()) / 5); +} + + +int UBStartupHintsPalette::border() +{ + return 40; +} + +void UBStartupHintsPalette::javaScriptWindowObjectCleared() +{ + mpWebView->page()->mainFrame()->addToJavaScriptWindowObject("sankore", mpSankoreAPI); +} diff --git a/src/gui/UBStartupHintsPalette.h b/src/gui/UBStartupHintsPalette.h new file mode 100644 index 00000000..07f4a227 --- /dev/null +++ b/src/gui/UBStartupHintsPalette.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA) + * + * This file is part of Open-Sankoré. + * + * Open-Sankoré 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, version 3 of the License, + * with a specific linking exception for the OpenSSL project's + * "OpenSSL" library (or with modified versions of it that use the + * same license as the "OpenSSL" library). + * + * Open-Sankoré 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 Open-Sankoré. If not, see . + */ + + + +#ifndef UBSTARTUPTIPSPALETTE_H +#define UBSTARTUPTIPSPALETTE_H + +class QCheckBox; +class QVBoxLayout; +class QHBoxLayout; + +#include + +#include "UBFloatingPalette.h" +#include "api/UBWidgetUniboardAPI.h" + +class UBStartupHintsPalette : public UBFloatingPalette +{ + Q_OBJECT; +public: + UBStartupHintsPalette(QWidget *parent = 0); + ~UBStartupHintsPalette(); + + +signals: + +public slots: + +protected: + virtual void paintEvent(QPaintEvent *event); + virtual void mouseReleaseEvent(QMouseEvent * event); + virtual void showEvent(QShowEvent *event); + +private: + void close(); + int border(); + QCheckBox* mShowNextTime; + QVBoxLayout* mLayout; + QHBoxLayout* mButtonLayout; + UBWidgetUniboardAPI *mpSankoreAPI; + QWebView* mpWebView; + +private slots: + void onShowNextTimeStateChanged(int state); + void javaScriptWindowObjectCleared(); +}; + +#endif // UBSTARTUPTIPSPALETTE_H diff --git a/src/gui/gui.pri b/src/gui/gui.pri index 76d72f7f..b8fd2b08 100644 --- a/src/gui/gui.pri +++ b/src/gui/gui.pri @@ -40,7 +40,8 @@ HEADERS += src/gui/UBThumbnailView.h \ src/gui/UBFeaturesWidget.h \ src/gui/UBFeaturesActionBar.h \ src/gui/UBMessagesDialog.h \ - src/gui/UBOpenSankoreImporterWidget.h + src/gui/UBOpenSankoreImporterWidget.h \ + src/gui/UBStartupHintsPalette.h SOURCES += src/gui/UBThumbnailView.cpp \ src/gui/UBFloatingPalette.cpp \ src/gui/UBToolbarButtonGroup.cpp \ @@ -83,7 +84,8 @@ SOURCES += src/gui/UBThumbnailView.cpp \ src/gui/UBFeaturesWidget.cpp \ src/gui/UBFeaturesActionBar.cpp \ src/gui/UBMessagesDialog.cpp \ - src/gui/UBOpenSankoreImporterWidget.cpp + src/gui/UBOpenSankoreImporterWidget.cpp \ + src/gui/UBStartupHintsPalette.cpp win32:SOURCES += src/gui/UBKeyboardPalette_win.cpp macx:SOURCES += src/gui/UBKeyboardPalette_mac.cpp linux-g++:SOURCES += src/gui/UBKeyboardPalette_linux.cpp