новые иконки в OpenBoard
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.
OpenBoard/src/gui/UBFeaturesWidget.h

247 lines
6.9 KiB

#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 "UBDockPaletteWidget.h"
#include "UBLibActionBar.h"
#include "board/UBFeaturesController.h"
#define THUMBNAIL_WIDTH 400
#define ID_LISTVIEW 0
#define ID_PROPERTIES 1
class UBListModel;
class UBFeaturesModel;
class UBFeaturesItemDelegate;
class UBFeaturesPathItemDelegate;
class UBFeaturesProxyModel;
class UBFeaturesSearchProxyModel;
class UBFeaturesPathProxyModel;
class UBFeaturesPathViewer;
class UBFeatureProperties;
class UBFeatureItemButton;
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; };
private:
void switchToListView();
void switchToProperties();
UBFeaturesController *controller;
UBFeaturesItemDelegate *itemDelegate;
UBFeaturesPathItemDelegate *pathItemDelegate;
UBFeaturesModel *featuresModel;
UBFeaturesProxyModel *featuresProxyModel;
UBFeaturesSearchProxyModel *featuresSearchModel;
UBFeaturesPathProxyModel *featuresPathModel;
QListView *featuresListView;
QListView *pathListView;
QVBoxLayout *layout;
UBFeaturesPathViewer *pathViewer;
QGraphicsScene *pathScene;
UBLibActionBar *mActionBar;
UBFeatureProperties *featureProperties;
QStackedWidget *stackedWidget;
int currentStackedWidget;
private slots:
void currentSelected(const QModelIndex &);
void currentPathChanged(const QString &);
void currentPathChanged( const QModelIndex & );
void searchStarted(QString);
};
class UBFeaturesPathViewer : public QGraphicsView
{
Q_OBJECT
public:
UBFeaturesPathViewer(const QPixmap &root, const QString &rootPath, QGraphicsScene *sc, QWidget* parent=0, const char* name="UBFeaturesPathViewer");
virtual ~UBFeaturesPathViewer() {} ;
void addPathElement(const QPixmap &p, const QString &s);
void truncatePath(int number);
private:
QGraphicsLinearLayout *layout;
QGraphicsWidget *container;
QPixmap *arrowPixmap;
};
class UBFolderWidget : public QLabel
{
Q_OBJECT
public:
UBFolderWidget( QWidget * parent = 0, Qt::WindowFlags f = 0 ) : QLabel( parent, f ) {};
virtual ~UBFolderWidget() {};
virtual QString getPath()const { return path; };
virtual void setPath( const QString &p ) { path = p; };
signals:
void clicked(const QString &);
protected:
virtual void mouseReleaseEvent ( QMouseEvent * ev )
{
emit clicked(path);
};
virtual void mousePressEvent ( QMouseEvent * ev )
{
ev->accept();
};
private:
QString path;
};
class UBFeatureProperties : public QWidget
{
Q_OBJECT
public:
UBFeatureProperties(QWidget* parent=0, const char* name="UBFeatureProperties");
~UBFeatureProperties();
void showElement(const UBFeature &elem);
protected:
//void resizeEvent(QResizeEvent *event);
//void showEvent(QShowEvent *event);
private slots:
void onAddToPage();
//void onAddToLib();
//void onSetAsBackground();
//void onBack();
private:
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
public:
UBFeaturesModel( QObject *parent = 0 ) { };
virtual ~UBFeaturesModel(){};
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());
Qt::DropActions supportedDropActions() const { return Qt::MoveAction | Qt::CopyAction; };
void setFeaturesList( QVector <UBFeature> *flist ) { featuresList = flist; };
private:
QVector <UBFeature> *featuresList;
};
class UBFeaturesProxyModel : public QSortFilterProxyModel
{
Q_OBJECT
public:
UBFeaturesProxyModel(QObject *parent = 0) { QSortFilterProxyModel::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::QSortFilterProxyModel(parent); };
virtual ~UBFeaturesSearchProxyModel() {};
protected:
virtual bool filterAcceptsRow ( int sourceRow, const QModelIndex & sourceParent ) const;
};
class UBFeaturesPathProxyModel : public QSortFilterProxyModel
{
Q_OBJECT
public:
UBFeaturesPathProxyModel(QObject *parent = 0) { QSortFilterProxyModel::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(QWidget *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(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;
};
#endif // UBFEATURESWIDGET_H