UBFeaturesWidget.h 8.17 KB
Newer Older
Anna Udovichenko's avatar
Anna Udovichenko committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#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>
16
#include <QDropEvent>
Anna Udovichenko's avatar
Anna Udovichenko committed
17 18

#include "UBDockPaletteWidget.h"
19
//#include "UBLibActionBar.h"
Anna Udovichenko's avatar
Anna Udovichenko committed
20
#include "board/UBFeaturesController.h"
21
#include "api/UBWidgetUniboardAPI.h"
22
#include "UBFeaturesActionBar.h"
Anna Udovichenko's avatar
Anna Udovichenko committed
23
#include "UBRubberBand.h"
Anna Udovichenko's avatar
Anna Udovichenko committed
24 25 26 27 28


#define THUMBNAIL_WIDTH 400
#define ID_LISTVIEW 0
#define ID_PROPERTIES 1
29
#define ID_WEBVIEW 2
Anna Udovichenko's avatar
Anna Udovichenko committed
30 31 32 33 34 35 36 37 38 39 40 41

class UBListModel;

class UBFeaturesModel;
class UBFeaturesItemDelegate;
class UBFeaturesPathItemDelegate;
class UBFeaturesProxyModel;
class UBFeaturesSearchProxyModel;
class UBFeaturesPathProxyModel;
class UBFeaturesPathViewer;
class UBFeatureProperties;
class UBFeatureItemButton;
42
class UBFeaturesListView;
43
class UBFeaturesWebView;
Anna Udovichenko's avatar
Anna Udovichenko committed
44 45 46 47 48 49 50 51 52 53 54 55 56 57

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; };
58 59 60 61

	static const int minThumbnailSize = 20;
	static const int maxThumbnailSize = 100;
	static const int defaultThumbnailSize = 40;
Anna Udovichenko's avatar
Anna Udovichenko committed
62 63 64
private:
	void switchToListView();
	void switchToProperties();
65
	void switchToWebView();
Anna Udovichenko's avatar
Anna Udovichenko committed
66 67 68 69 70 71 72 73 74 75 76

	UBFeaturesController *controller;
	
	UBFeaturesItemDelegate *itemDelegate;
	UBFeaturesPathItemDelegate *pathItemDelegate;
	
	UBFeaturesModel *featuresModel;
	UBFeaturesProxyModel *featuresProxyModel;
	UBFeaturesSearchProxyModel *featuresSearchModel;
	UBFeaturesPathProxyModel *featuresPathModel;

77 78
	UBFeaturesListView *featuresListView;
	UBFeaturesListView *pathListView;
79 80

	QSlider *thumbSlider;
Anna Udovichenko's avatar
Anna Udovichenko committed
81
	QVBoxLayout *layout;
82
	//UBFeaturesPathViewer *pathViewer;
83
	//QGraphicsScene *pathScene;
84
	UBFeaturesActionBar *mActionBar;
Anna Udovichenko's avatar
Anna Udovichenko committed
85
	UBFeatureProperties *featureProperties;
86
	UBFeaturesWebView *webView;
Anna Udovichenko's avatar
Anna Udovichenko committed
87
	QStackedWidget *stackedWidget;
88
	
Anna Udovichenko's avatar
Anna Udovichenko committed
89 90 91

	int currentStackedWidget;
private slots:
92 93
	void currentSelected( const QModelIndex & );
	//void currentPathChanged(const QString &);
Anna Udovichenko's avatar
Anna Udovichenko committed
94
	void currentPathChanged( const QModelIndex & );
95
	void searchStarted( const QString & );
96
	void createNewFolder();
97
	void deleteElements( const QMimeData & );
98
	void addToFavorite( const QMimeData & );
99
	void removeFromFavorite( const QMimeData & );
100
	void thumbnailSizeChanged( int );
101
	void onDisplayMetadata( QMap<QString,QString> );
102
    void onAddDownloadedFileToLibrary(bool, QUrl, QString, QByteArray);
103
    void addElementsToFavorite();
104
    void removeElementsFromFavorite();
105
    void deleteSelectedElements();
106 107
protected:
	bool eventFilter(QObject *target, QEvent *event);
Anna Udovichenko's avatar
Anna Udovichenko committed
108 109
};

110 111 112 113 114
class UBFeaturesListView : public QListView
{
	Q_OBJECT
public:
	UBFeaturesListView( QWidget* parent=0, const char* name="UBFeaturesListView" );
Ivan Ilin's avatar
Ivan Ilin committed
115
    virtual ~UBFeaturesListView() {;}
116
protected:
117
	virtual void dragEnterEvent( QDragEnterEvent *event );
118
	virtual void dropEvent( QDropEvent *event );
119
    virtual void dragMoveEvent( QDragMoveEvent *event );
Anna Udovichenko's avatar
Anna Udovichenko committed
120 121 122 123 124 125
	/*virtual void mousePressEvent( QMouseEvent *event );
	virtual void mouseMoveEvent( QMouseEvent *event );
	virtual void mouseReleaseEvent( QMouseEvent *event );*/
private:
	//UBRubberBand *rubberBand;
	//QPoint rubberOrigin;
126 127
};

128 129 130 131 132
class UBFeaturesWebView : public QWidget
{
    Q_OBJECT
public:
    UBFeaturesWebView(QWidget* parent = 0, const char* name = "UBFeaturesWebView");
133
    virtual ~UBFeaturesWebView();
134 135 136 137 138 139 140 141 142 143 144 145

    void showElement(const UBFeature &elem);

private slots:
    void onLoadFinished(bool ok);

private:
    QWebView* mpView;
    QWebSettings* mpWebSettings;
    QVBoxLayout* mpLayout;
    UBWidgetUniboardAPI* mpSankoreAPI;
};
Anna Udovichenko's avatar
Anna Udovichenko committed
146 147 148 149 150 151 152 153 154

class UBFeatureProperties : public QWidget
{
    Q_OBJECT
public:
    UBFeatureProperties(QWidget* parent=0, const char* name="UBFeatureProperties");
    ~UBFeatureProperties();

    void showElement(const UBFeature &elem);
155
    UBFeature getCurrentElement() const;
Anna Udovichenko's avatar
Anna Udovichenko committed
156
protected:
157 158
    void resizeEvent(QResizeEvent *event);
    void showEvent(QShowEvent *event);
Anna Udovichenko's avatar
Anna Udovichenko committed
159 160 161

private slots:
    void onAddToPage();
162
    void onAddToLib();
163
    void onSetAsBackground();
Anna Udovichenko's avatar
Anna Udovichenko committed
164 165 166
    //void onBack();

private:
167
	void populateMetadata();
168
    void adaptSize();
169

Anna Udovichenko's avatar
Anna Udovichenko committed
170 171 172 173 174 175
    QVBoxLayout* mpLayout;
    QHBoxLayout* mpButtonLayout;
    UBFeatureItemButton* mpAddPageButton;
    UBFeatureItemButton* mpAddToLibButton;
    UBFeatureItemButton* mpSetAsBackgroundButton;
    QLabel* mpObjInfoLabel;
176
    QTreeWidget* mpObjInfos;
Anna Udovichenko's avatar
Anna Udovichenko committed
177 178 179 180
    QLabel* mpThumbnail;
    QPixmap* mpOrigPixmap;
    int maxThumbHeight;
    UBFeature *mpElement;
181
    QTreeWidgetItem* mpItem;
Anna Udovichenko's avatar
Anna Udovichenko committed
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
};




class UBFeatureItemButton : public QPushButton
{
public:
    UBFeatureItemButton(QWidget* parent=0, const char* name="UBFeatureItemButton");
    ~UBFeatureItemButton();
};

class UBFeaturesModel : public QAbstractListModel
{
	Q_OBJECT
public:
Ivan Ilin's avatar
Ivan Ilin committed
198 199
    UBFeaturesModel( QObject *parent = 0 ) : QAbstractListModel(parent) {;}
    virtual ~UBFeaturesModel(){;}
Anna Udovichenko's avatar
Anna Udovichenko committed
200

201
	void addItem( const UBFeature &item );
202
	void deleteFavoriteItem( const QString &path );
203
    void deleteItem( const QString &path );
204

Anna Udovichenko's avatar
Anna Udovichenko committed
205 206 207 208 209 210 211 212
	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());
213 214
    //bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
    //bool insertRow(int row, const QModelIndex &parent = QModelIndex());
215
	
Ivan Ilin's avatar
Ivan Ilin committed
216
    Qt::DropActions supportedDropActions() const { return Qt::MoveAction | Qt::CopyAction; }
Anna Udovichenko's avatar
Anna Udovichenko committed
217

218
    void setFeaturesList(QList <UBFeature> *flist ) { featuresList = flist; }
Anna Udovichenko's avatar
Anna Udovichenko committed
219
private:
220
	QList <UBFeature> *featuresList;
Anna Udovichenko's avatar
Anna Udovichenko committed
221 222 223 224 225 226
};

class UBFeaturesProxyModel : public QSortFilterProxyModel
{
	Q_OBJECT
public:
Ivan Ilin's avatar
Ivan Ilin committed
227 228
    UBFeaturesProxyModel(QObject *parent = 0) : QSortFilterProxyModel(parent) {;}
    virtual ~UBFeaturesProxyModel() {}
Anna Udovichenko's avatar
Anna Udovichenko committed
229 230 231 232 233 234 235 236
protected:
	virtual bool filterAcceptsRow ( int sourceRow, const QModelIndex & sourceParent ) const;
};

class UBFeaturesSearchProxyModel : public QSortFilterProxyModel
{
	Q_OBJECT
public:
Ivan Ilin's avatar
Ivan Ilin committed
237 238
    UBFeaturesSearchProxyModel(QObject *parent = 0) : QSortFilterProxyModel(parent) {;}
    virtual ~UBFeaturesSearchProxyModel() {}
Anna Udovichenko's avatar
Anna Udovichenko committed
239 240 241 242 243 244 245 246
protected:
	virtual bool filterAcceptsRow ( int sourceRow, const QModelIndex & sourceParent ) const;
};

class UBFeaturesPathProxyModel : public QSortFilterProxyModel
{
	Q_OBJECT
public:
Ivan Ilin's avatar
Ivan Ilin committed
247 248 249
    UBFeaturesPathProxyModel(QObject *parent = 0) : QSortFilterProxyModel(parent) {;}
    virtual ~UBFeaturesPathProxyModel() {}
    void setPath( const QString &p ) { path = p; }
Anna Udovichenko's avatar
Anna Udovichenko committed
250 251 252 253 254 255 256 257 258 259
protected:
	virtual bool filterAcceptsRow ( int sourceRow, const QModelIndex & sourceParent ) const;
private:
	QString path;
};

class UBFeaturesItemDelegate : public QStyledItemDelegate
{
	Q_OBJECT
public:
Ivan Ilin's avatar
Ivan Ilin committed
260 261
    UBFeaturesItemDelegate(QWidget *parent = 0, const QListView *lw = 0) : QStyledItemDelegate(parent) { listView = lw; }
    ~UBFeaturesItemDelegate() {}
Anna Udovichenko's avatar
Anna Udovichenko committed
262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281
	//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(QWidget *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;
};

Ivan Ilin's avatar
Ivan Ilin committed
282
#endif // UBFEATURESWIDGET_H