You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
464 lines
13 KiB
464 lines
13 KiB
/*
|
|
* Copyright (C) 2012 Webdoc SA
|
|
*
|
|
* 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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
|
|
|
|
#ifndef UBFEATURESWIDGET_H
|
|
#define UBFEATURESWIDGET_H
|
|
|
|
#include <QWidget>
|
|
#include <QListView>
|
|
#include <QGraphicsView>
|
|
#include <QAbstractListModel>
|
|
#include <QPixmap>
|
|
#include <QVBoxLayout>
|
|
#include <QSlider>
|
|
#include <QUrl>
|
|
#include <QStyledItemDelegate>
|
|
#include <QLocale>
|
|
#include <QGraphicsLinearLayout>
|
|
#include <QStackedWidget>
|
|
#include <QDropEvent>
|
|
|
|
#include "UBDockPaletteWidget.h"
|
|
#include "core/UBSettings.h"
|
|
#include "board/UBFeaturesController.h"
|
|
#include "api/UBWidgetUniboardAPI.h"
|
|
#include "UBFeaturesActionBar.h"
|
|
#include "UBRubberBand.h"
|
|
#include <QtWebKit>
|
|
#include <QWebView>
|
|
#include <QWebSettings>
|
|
|
|
#define THUMBNAIL_WIDTH 400
|
|
#define ID_LISTVIEW 0
|
|
#define ID_PROPERTIES 1
|
|
#define ID_WEBVIEW 2
|
|
|
|
class UBListModel;
|
|
|
|
class UBFeaturesModel;
|
|
class UBFeaturesItemDelegate;
|
|
class UBFeaturesPathItemDelegate;
|
|
class UBFeaturesProxyModel;
|
|
class UBFeaturesSearchProxyModel;
|
|
class UBFeaturesPathProxyModel;
|
|
class UBFeaturesPathViewer;
|
|
class UBFeatureProperties;
|
|
class UBFeatureItemButton;
|
|
class UBFeaturesListView;
|
|
class UBFeaturesWebView;
|
|
class UBFeaturesNavigatorWidget;
|
|
class UBFeaturesMimeData;
|
|
class UBFeaturesCentralWidget;
|
|
class UBFeaturesNewFolderDialog;
|
|
class UBFeaturesProgressBar;
|
|
|
|
class UBFeaturesWidget : public UBDockPaletteWidget
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
UBFeaturesWidget(QWidget* parent=0, const char* name="UBFeaturesWidget");
|
|
virtual ~UBFeaturesWidget();
|
|
|
|
bool visibleInMode(eUBDockPaletteWidgetMode mode)
|
|
{
|
|
return mode == eUBDockPaletteWidget_BOARD
|
|
|| mode == eUBDockPaletteWidget_DESKTOP;
|
|
}
|
|
UBFeaturesController * getFeaturesController() const { return controller; }
|
|
void importImage(const QImage &image, const QString &fileName = QString());
|
|
|
|
static const int minThumbnailSize = 20;
|
|
static const int maxThumbnailSize = 100;
|
|
static const int defaultThumbnailSize = 40;
|
|
|
|
static const char *objNamePathList;
|
|
static const char *objNameFeatureList;
|
|
|
|
public:
|
|
int scrollbarHorisontalPadding() const { return 10;}
|
|
int scrollbarVerticalIndent() const { return 0;}
|
|
|
|
signals:
|
|
void sendFileNameList(const QStringList lst);
|
|
|
|
private slots:
|
|
void onPreviewLoaded(int id, bool pSuccess, QUrl sourceUrl, QUrl originalUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground);
|
|
void currentSelected( const QModelIndex & );
|
|
void searchStarted( const QString & );
|
|
void createNewFolder();
|
|
void deleteElements( const UBFeaturesMimeData * );
|
|
void addToFavorite( const UBFeaturesMimeData *);
|
|
void removeFromFavorite( const UBFeaturesMimeData * );
|
|
void onDisplayMetadata( QMap<QString,QString> );
|
|
void onAddDownloadedFileToLibrary(bool, QUrl, QString, QByteArray, QString pTitle);
|
|
void addElementsToFavorite();
|
|
void removeElementsFromFavorite();
|
|
void deleteSelectedElements();
|
|
void rescanModel();
|
|
void lockIt(bool pLock);
|
|
|
|
private:
|
|
void switchToListView();
|
|
void switchToProperties();
|
|
void switchToWebView();
|
|
|
|
private:
|
|
UBFeaturesController *controller;
|
|
UBFeaturesListView *pathListView;
|
|
QVBoxLayout *layout;
|
|
UBFeaturesActionBar *mActionBar;
|
|
UBDownloadHttpFile* imageGatherer;
|
|
UBFeaturesCentralWidget *centralWidget;
|
|
};
|
|
|
|
|
|
class UBFeaturesMimeData : public QMimeData
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
virtual QStringList formats() const;
|
|
QList<UBFeature> features() const {return mFeatures;}
|
|
void setFeatures(const QList<UBFeature> &fList) {mFeatures = fList;}
|
|
|
|
private:
|
|
QList<UBFeature> mFeatures;
|
|
};
|
|
|
|
|
|
class UBFeaturesListView : public QListView
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
UBFeaturesListView( QWidget* parent=0, const char* name="UBFeaturesListView" );
|
|
virtual ~UBFeaturesListView() {;}
|
|
|
|
protected:
|
|
virtual void dragEnterEvent( QDragEnterEvent *event );
|
|
virtual void dropEvent( QDropEvent *event );
|
|
virtual void dragMoveEvent( QDragMoveEvent *event );
|
|
|
|
private slots:
|
|
void thumbnailSizeChanged(int);
|
|
|
|
};
|
|
|
|
|
|
// class created to have the same style for slider and QListView itself
|
|
class UBFeaturesNavigatorWidget: public QWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
UBFeaturesNavigatorWidget(QWidget *parent, const char* name = "");
|
|
UBFeaturesListView *listView() {return mListView;}
|
|
void setSliderPosition(int pValue);
|
|
|
|
private:
|
|
UBFeaturesListView *mListView;
|
|
QSlider *mListSlider;
|
|
|
|
};
|
|
|
|
class UBFeaturesCentralWidget : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
enum StackElement{
|
|
MainList = 0,
|
|
FeaturePropertiesList,
|
|
FeaturesWebView
|
|
};
|
|
|
|
enum AddWidget {
|
|
NewFolderDialog = 0,
|
|
ProgressBarWidget
|
|
};
|
|
|
|
enum AddWidgetState {
|
|
NonModal = 0,
|
|
Modal
|
|
};
|
|
|
|
UBFeaturesCentralWidget(QWidget *parent = 0);
|
|
void setSliderPosition(int pValue) {mNavigator->setSliderPosition(pValue);}
|
|
|
|
UBFeaturesListView *listView() {return mNavigator->listView();}
|
|
void showElement(const UBFeature &feature, StackElement pView);
|
|
void switchTo(StackElement pView);
|
|
void setPropertiesPixmap(const QPixmap &pix);
|
|
void setPropertiesThumbnail(const QPixmap &pix);
|
|
StackElement currentView() const {return static_cast<StackElement>(mStackedWidget->currentIndex());}
|
|
UBFeature getCurElementFromProperties();
|
|
|
|
void setLockedExcludingAdditional(bool pLock);
|
|
|
|
QStackedWidget *mStackedWidget;
|
|
UBFeaturesNavigatorWidget *mNavigator;
|
|
UBFeatureProperties *mFeatureProperties;
|
|
UBFeaturesWebView *webView;
|
|
|
|
QStackedWidget *mAdditionalDataContainer;
|
|
|
|
signals:
|
|
void lockMainWidget(bool pLock);
|
|
void createNewFolderSignal(QString pStr);
|
|
void sendFileNameList(const QStringList lst);
|
|
|
|
// progressbar widget related signals
|
|
void maxFilesCountEvaluated(int pValue);
|
|
void increaseStatusBarValue();
|
|
void scanCategory(const QString &);
|
|
void scanPath(const QString &);
|
|
|
|
public slots:
|
|
void showAdditionalData(AddWidget pWidgetType, AddWidgetState pState = NonModal);
|
|
|
|
private slots:
|
|
void createNewFolderSlot(QString pStr);
|
|
void hideAdditionalData();
|
|
|
|
void scanStarted();
|
|
void scanFinished();
|
|
};
|
|
|
|
class UBFeaturesNewFolderDialog : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
UBFeaturesNewFolderDialog(QWidget *parent = 0);
|
|
void setRegexp(const QRegExp pRegExp);
|
|
bool validString(const QString &pStr);
|
|
|
|
signals:
|
|
void createNewFolder(QString str);
|
|
void closeDialog();
|
|
|
|
private slots:
|
|
void accept();
|
|
void reject();
|
|
void setFileNameList(const QStringList &pLst);
|
|
void reactOnTextChanged(const QString &pStr);
|
|
|
|
private:
|
|
QLineEdit *mLineEdit;
|
|
QRegExpValidator *mValidator;
|
|
QStringList mFileNameList;
|
|
QPushButton *acceptButton;
|
|
const QString acceptText;
|
|
const QString cancelText;
|
|
const QString labelText;
|
|
};
|
|
|
|
class UBFeaturesProgressInfo: public QWidget {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
UBFeaturesProgressInfo(QWidget *parent = 0);
|
|
|
|
private slots:
|
|
void setCommmonInfoText(const QString &str);
|
|
void setDetailedInfoText(const QString &str);
|
|
void setProgressMin(int pValue);
|
|
void setProgressMax(int pValue);
|
|
void increaseProgressValue();
|
|
void sendFeature(UBFeature pFeature);
|
|
|
|
|
|
private:
|
|
QProgressBar *mProgressBar;
|
|
QLabel *mCommonInfoLabel;
|
|
QLabel *mDetailedInfoLabel;
|
|
};
|
|
|
|
class UBFeaturesWebView : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
UBFeaturesWebView(QWidget* parent = 0, const char* name = "UBFeaturesWebView");
|
|
virtual ~UBFeaturesWebView();
|
|
|
|
void showElement(const UBFeature &elem);
|
|
|
|
private slots:
|
|
void onLoadFinished(bool ok);
|
|
void javaScriptWindowObjectCleared();
|
|
|
|
private:
|
|
QWebView* mpView;
|
|
QWebSettings* mpWebSettings;
|
|
QVBoxLayout* mpLayout;
|
|
UBWidgetUniboardAPI* mpSankoreAPI;
|
|
};
|
|
|
|
class UBFeatureProperties : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
UBFeatureProperties(QWidget* parent=0, const char* name="UBFeatureProperties");
|
|
~UBFeatureProperties();
|
|
|
|
void showElement(const UBFeature &elem);
|
|
UBFeature getCurrentElement() const;
|
|
void setOrigPixmap(const QPixmap &pix);
|
|
void setThumbnail(const QPixmap &pix);
|
|
|
|
protected:
|
|
void resizeEvent(QResizeEvent *event);
|
|
void showEvent(QShowEvent *event);
|
|
|
|
private slots:
|
|
void onAddToPage();
|
|
void onAddToLib();
|
|
void onSetAsBackground();
|
|
//void onBack();
|
|
|
|
private:
|
|
void populateMetadata();
|
|
void adaptSize();
|
|
|
|
QVBoxLayout* mpLayout;
|
|
QHBoxLayout* mpButtonLayout;
|
|
UBFeatureItemButton *mpAddPageButton;
|
|
UBFeatureItemButton *mpAddToLibButton;
|
|
UBFeatureItemButton *mpSetAsBackgroundButton;
|
|
QLabel* mpObjInfoLabel;
|
|
QTreeWidget* mpObjInfos;
|
|
QLabel* mpThumbnail;
|
|
QPixmap* mpOrigPixmap;
|
|
int maxThumbHeight;
|
|
UBFeature *mpElement;
|
|
QTreeWidgetItem* mpItem;
|
|
};
|
|
|
|
class UBFeatureItemButton : public QPushButton
|
|
{
|
|
public:
|
|
UBFeatureItemButton(QWidget* parent=0, const char* name="UBFeatureItemButton");
|
|
~UBFeatureItemButton();
|
|
};
|
|
|
|
class UBFeaturesModel : public QAbstractListModel
|
|
{
|
|
Q_OBJECT
|
|
|
|
signals:
|
|
void dataRestructured();
|
|
|
|
public:
|
|
UBFeaturesModel(QList<UBFeature> *pFeaturesList, QObject *parent = 0) : QAbstractListModel(parent), featuresList(pFeaturesList) {;}
|
|
virtual ~UBFeaturesModel(){;}
|
|
|
|
void deleteFavoriteItem( const QString &path );
|
|
void deleteItem( const QString &path );
|
|
void deleteItem(const UBFeature &feature);
|
|
|
|
QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const;
|
|
QMimeData *mimeData( const QModelIndexList &indexes ) const;
|
|
QStringList mimeTypes() const;
|
|
int rowCount( const QModelIndex &parent ) const;
|
|
Qt::ItemFlags flags( const QModelIndex &index ) const;
|
|
bool dropMimeData(const QMimeData *mimeData, Qt::DropAction action, int row, int column, const QModelIndex &parent);
|
|
bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
|
|
bool removeRow(int row, const QModelIndex &parent = QModelIndex());
|
|
//bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
|
|
//bool insertRow(int row, const QModelIndex &parent = QModelIndex());
|
|
|
|
void moveData(const UBFeature &source, const UBFeature &destination, Qt::DropAction action, bool deleteManualy = false);
|
|
Qt::DropActions supportedDropActions() const { return Qt::MoveAction | Qt::CopyAction; }
|
|
// void setFeaturesList(QList <UBFeature> *flist ) { featuresList = flist; }
|
|
|
|
public slots:
|
|
void addItem( const UBFeature &item );
|
|
|
|
private:
|
|
QList <UBFeature> *featuresList;
|
|
};
|
|
|
|
class UBFeaturesProxyModel : public QSortFilterProxyModel
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
UBFeaturesProxyModel(QObject *parent = 0) : QSortFilterProxyModel(parent) {;}
|
|
virtual ~UBFeaturesProxyModel() {}
|
|
protected:
|
|
virtual bool filterAcceptsRow ( int sourceRow, const QModelIndex & sourceParent ) const;
|
|
};
|
|
|
|
class UBFeaturesSearchProxyModel : public QSortFilterProxyModel
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
UBFeaturesSearchProxyModel(QObject *parent = 0) : QSortFilterProxyModel(parent), mFilterPrefix() {;}
|
|
virtual ~UBFeaturesSearchProxyModel() {}
|
|
void setFilterPrefix(const QString &newPrefix) {mFilterPrefix = newPrefix;}
|
|
protected:
|
|
virtual bool filterAcceptsRow ( int sourceRow, const QModelIndex & sourceParent ) const;
|
|
private:
|
|
QString mFilterPrefix;
|
|
};
|
|
|
|
class UBFeaturesPathProxyModel : public QSortFilterProxyModel
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
UBFeaturesPathProxyModel(QObject *parent = 0) : QSortFilterProxyModel(parent) {;}
|
|
virtual ~UBFeaturesPathProxyModel() {}
|
|
void setPath( const QString &p ) { path = p; }
|
|
protected:
|
|
virtual bool filterAcceptsRow ( int sourceRow, const QModelIndex & sourceParent ) const;
|
|
private:
|
|
QString path;
|
|
};
|
|
|
|
class UBFeaturesItemDelegate : public QStyledItemDelegate
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
UBFeaturesItemDelegate(QObject *parent = 0, const QListView *lw = 0) : QStyledItemDelegate(parent) { listView = lw; }
|
|
~UBFeaturesItemDelegate() {}
|
|
//UBFeaturesItemDelegate(const QListView *lw = 0) { listView = lw; };
|
|
//void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
|
//QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
|
virtual QString displayText ( const QVariant & value, const QLocale & locale ) const;
|
|
private:
|
|
const QListView *listView;
|
|
};
|
|
|
|
class UBFeaturesPathItemDelegate : public QStyledItemDelegate
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
UBFeaturesPathItemDelegate(QObject *parent = 0);
|
|
~UBFeaturesPathItemDelegate();
|
|
virtual QString displayText ( const QVariant & value, const QLocale & locale ) const;
|
|
void paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
|
private:
|
|
QPixmap *arrowPixmap;
|
|
};
|
|
|
|
|
|
#endif // UBFEATURESWIDGET_H
|
|
|