diff options
-rw-r--r-- | archivetreeview.h | 1 | ||||
-rw-r--r-- | seriestreemodel.cpp | 2 | ||||
-rw-r--r-- | seriestreemodel.h | 2 | ||||
-rw-r--r-- | seriestreewidget.cpp | 28 | ||||
-rw-r--r-- | seriestreewidget.h | 13 | ||||
-rw-r--r-- | shemov.cpp | 6 | ||||
-rw-r--r-- | shemov.h | 3 | ||||
-rw-r--r-- | smtreemodel.cpp | 2 |
8 files changed, 49 insertions, 8 deletions
diff --git a/archivetreeview.h b/archivetreeview.h index ef0e51a..fc3e2fe 100644 --- a/archivetreeview.h +++ b/archivetreeview.h @@ -19,6 +19,7 @@ class ArchiveTreeView : public QWidget Q_OBJECT public: explicit ArchiveTreeView(QWidget *parent = 0); + SeriesTreeWidget *seriesWidget() { return mSeriesWidget; } private: //widgets diff --git a/seriestreemodel.cpp b/seriestreemodel.cpp index 390f19c..0edbd8e 100644 --- a/seriestreemodel.cpp +++ b/seriestreemodel.cpp @@ -41,7 +41,7 @@ Qt::ItemFlags SeriesTreeModel::flags(const QModelIndex &index) const{ return 0; } Qt::ItemFlags retval = Qt::ItemIsEnabled | Qt::ItemIsSelectable; - if(index.data(TypeRole).toInt() == Series){ + if(index.data(TypeRole).toInt() == Series || index.data(TypeRole).toInt() == NewSeries){ return retval | Qt::ItemIsEditable; } return retval; diff --git a/seriestreemodel.h b/seriestreemodel.h index 74bb53c..507761c 100644 --- a/seriestreemodel.h +++ b/seriestreemodel.h @@ -19,7 +19,7 @@ class SeriesTreeModel : public SmTreeModel { public: enum CustomRoles { NameRole = Qt::UserRole + 1, SeriesIdRole = Qt::UserRole + 2, SeriesPartIdRole = Qt::UserRole + 3, SeriesPartRole = Qt::UserRole + 4, TypeRole = Qt::UserRole + 5 }; enum Fields { Name = 0, SeriesId = 1, SeriesPartId = 2, SeriesPart = 3, Type = 4 }; - enum Types { Series, Part }; + enum Types { Series, Part, NewSeries }; explicit SeriesTreeModel(QStringList &headers, QObject *parent = 0); ~SeriesTreeModel(); diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp index d440140..5fb7d2c 100644 --- a/seriestreewidget.cpp +++ b/seriestreewidget.cpp @@ -12,6 +12,9 @@ #include <QLabel> #include <QSortFilterProxyModel> #include <QRegExp> +#include <QContextMenuEvent> +#include <QMenu> +#include <QAction> #include "seriestreewidget.h" #include "smubermodel.h" @@ -35,15 +38,15 @@ SeriesTreeWidget::SeriesTreeWidget(QWidget *parent) : QWidget(parent){ //the view mView = new SeriesTreeView; mProxy = new QSortFilterProxyModel; - SeriesTreeModel *sourceModel = SmUberModelSingleton::instance()->seriesModel(); - mProxy->setSourceModel(sourceModel); + mModel = SmUberModelSingleton::instance()->seriesModel(); + mProxy->setSourceModel(mModel); mView->setModel(mProxy); mView->setSortingEnabled(true); for(int i = 1; i < 5 ;++i){ mView->setColumnHidden(i, true); } mView->resizeColumnToContents(0); - connect(sourceModel, SIGNAL(needResort()), this, SLOT(resort())); + connect(mModel, SIGNAL(needResort()), this, SLOT(resort())); //layout QVBoxLayout *mainLayout = new QVBoxLayout; @@ -53,6 +56,17 @@ SeriesTreeWidget::SeriesTreeWidget(QWidget *parent) : QWidget(parent){ } +void SeriesTreeWidget::newSeries(){ + QList<QVariant> data; + data << tr("<New series>") << -1 << -1 << 0 << SeriesTreeModel::NewSeries; + if(mModel->addRow(data, QModelIndex())){ + QModelIndex newRow = mModel->index(mModel->rowCount(QModelIndex()) - 1, 0, QModelIndex()); + if(newRow.isValid()){ + mView->edit(newRow); + } + } +} + void SeriesTreeWidget::filter(){ mProxy->setFilterRegExp(mFilterEdit->text()); } @@ -62,3 +76,11 @@ void SeriesTreeWidget::resort(){ } SeriesTreeView::SeriesTreeView(QWidget *parent) : QTreeView(parent) {} + +void SeriesTreeView::contextMenuEvent(QContextMenuEvent *e){ + QMenu contextMenu(this); + foreach(QAction *a, actions()){ + contextMenu.addAction(a); + } + contextMenu.exec(e->globalPos()); +} diff --git a/seriestreewidget.h b/seriestreewidget.h index fa84419..6e949b2 100644 --- a/seriestreewidget.h +++ b/seriestreewidget.h @@ -13,13 +13,18 @@ class QLineEdit; class QPushButton; -class QTreeView; class QSortFilterProxyModel; +class SeriesTreeModel; +class SeriesTreeView; class SeriesTreeWidget : public QWidget { Q_OBJECT public: explicit SeriesTreeWidget(QWidget *parent = 0); + SeriesTreeView *seriesTree() { return mView; } + + public slots: + void newSeries(); private slots: void filter(); @@ -28,14 +33,18 @@ class SeriesTreeWidget : public QWidget { private: QLineEdit *mFilterEdit; QPushButton *mFilter; - QTreeView *mView; + SeriesTreeView *mView; QSortFilterProxyModel *mProxy; + SeriesTreeModel *mModel; }; class SeriesTreeView : public QTreeView { Q_OBJECT public: explicit SeriesTreeView(QWidget *parent = 0); + + protected: + virtual void contextMenuEvent(QContextMenuEvent *e); }; #endif @@ -47,6 +47,7 @@ #include "archivetreeview.h" #include "smubermodelsingleton.h" #include "smubermodel.h" +#include "seriestreewidget.h" SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags), mOpenWithGroupFS(0), mOpenWithGroupAV(0) { qApp->setWindowIcon(QIcon(":/shemov.png")); @@ -355,6 +356,11 @@ void SheMov::createActions(){ mStatisticsA = new QAction(tr("Some statistics..."), this); connect(mStatisticsA, SIGNAL(triggered()), this, SLOT(showStatistics())); + //Tree context menu + mNewSeriesA = new QAction(tr("New series"), this); + mATree->seriesWidget()->seriesTree()->addAction(mNewSeriesA); + connect(mNewSeriesA, SIGNAL(triggered()), mATree->seriesWidget(), SLOT(newSeries())); + // misc mOpenWithMapperFS = new QSignalMapper(this); mOpenWithMapperAV = new QSignalMapper(this); @@ -95,6 +95,9 @@ class SheMov : public QMainWindow { QAction *mOpenWithMenuAVA; QAction *mRenameMenuA; QAction *mCopyToPartsA; + + //TreeView Actions + QAction *mNewSeriesA; QActionGroup *mOpenWithGroupFS; QActionGroup *mOpenWithGroupAV; //EndActions diff --git a/smtreemodel.cpp b/smtreemodel.cpp index 292ed20..227c1cb 100644 --- a/smtreemodel.cpp +++ b/smtreemodel.cpp @@ -168,7 +168,7 @@ bool SmTreeModel::addRow(const QList<QVariant> &data, const QModelIndex &parent) SmTreeItem *parentItem = itemAt(parent); if(insertRows(parentItem->childCount(), 1, parent)){ - SmTreeItem *child = parentItem->child(parentItem->childCount()); + SmTreeItem *child = parentItem->child(parentItem->childCount() - 1); delete child; SmTreeItem *newChild = new SmTreeItem(data, parentItem); child = newChild; |