14 changed files with 265 additions and 5 deletions
@ -0,0 +1,25 @@ |
|||||
|
#include "tabitemview.h" |
||||
|
#include "ui_tabitemview.h" |
||||
|
#include <QtMvvmCore/Binding> |
||||
|
|
||||
|
TabItemView::TabItemView(QtMvvm::ViewModel *viewModel, QWidget *parent) : |
||||
|
QWidget(parent), |
||||
|
_viewModel(static_cast<TabItemViewModel*>(viewModel)), |
||||
|
ui(new Ui::TabItemView) |
||||
|
{ |
||||
|
ui->setupUi(this); |
||||
|
|
||||
|
QtMvvm::bind(_viewModel, "title", |
||||
|
ui->checkBox, "text", |
||||
|
QtMvvm::Binding::OneWayToView); |
||||
|
} |
||||
|
|
||||
|
TabItemView::~TabItemView() |
||||
|
{ |
||||
|
delete ui; |
||||
|
} |
||||
|
|
||||
|
TabItemViewModel *TabItemView::viewModel() const |
||||
|
{ |
||||
|
return _viewModel; |
||||
|
} |
@ -0,0 +1,26 @@ |
|||||
|
#ifndef TABITEMVIEW_H |
||||
|
#define TABITEMVIEW_H |
||||
|
|
||||
|
#include <QWidget> |
||||
|
#include <tabviewmodel.h> |
||||
|
|
||||
|
namespace Ui { |
||||
|
class TabItemView; |
||||
|
} |
||||
|
|
||||
|
class TabItemView : public QWidget |
||||
|
{ |
||||
|
Q_OBJECT |
||||
|
|
||||
|
public: |
||||
|
Q_INVOKABLE explicit TabItemView(QtMvvm::ViewModel *viewModel, QWidget *parent = nullptr); |
||||
|
~TabItemView(); |
||||
|
|
||||
|
TabItemViewModel *viewModel() const; |
||||
|
|
||||
|
private: |
||||
|
TabItemViewModel *_viewModel; |
||||
|
Ui::TabItemView *ui; |
||||
|
}; |
||||
|
|
||||
|
#endif // TABITEMVIEW_H
|
@ -0,0 +1,84 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<ui version="4.0"> |
||||
|
<class>TabItemView</class> |
||||
|
<widget class="QWidget" name="TabItemView"> |
||||
|
<property name="geometry"> |
||||
|
<rect> |
||||
|
<x>0</x> |
||||
|
<y>0</y> |
||||
|
<width>400</width> |
||||
|
<height>300</height> |
||||
|
</rect> |
||||
|
</property> |
||||
|
<property name="windowTitle"> |
||||
|
<string>Form</string> |
||||
|
</property> |
||||
|
<layout class="QVBoxLayout" name="verticalLayout"> |
||||
|
<item> |
||||
|
<spacer name="verticalSpacer"> |
||||
|
<property name="orientation"> |
||||
|
<enum>Qt::Vertical</enum> |
||||
|
</property> |
||||
|
<property name="sizeHint" stdset="0"> |
||||
|
<size> |
||||
|
<width>20</width> |
||||
|
<height>119</height> |
||||
|
</size> |
||||
|
</property> |
||||
|
</spacer> |
||||
|
</item> |
||||
|
<item> |
||||
|
<layout class="QHBoxLayout" name="horizontalLayout"> |
||||
|
<item> |
||||
|
<spacer name="horizontalSpacer"> |
||||
|
<property name="orientation"> |
||||
|
<enum>Qt::Horizontal</enum> |
||||
|
</property> |
||||
|
<property name="sizeHint" stdset="0"> |
||||
|
<size> |
||||
|
<width>40</width> |
||||
|
<height>20</height> |
||||
|
</size> |
||||
|
</property> |
||||
|
</spacer> |
||||
|
</item> |
||||
|
<item> |
||||
|
<widget class="QCheckBox" name="checkBox"> |
||||
|
<property name="text"> |
||||
|
<string>CheckBox</string> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
<item> |
||||
|
<spacer name="horizontalSpacer_2"> |
||||
|
<property name="orientation"> |
||||
|
<enum>Qt::Horizontal</enum> |
||||
|
</property> |
||||
|
<property name="sizeHint" stdset="0"> |
||||
|
<size> |
||||
|
<width>40</width> |
||||
|
<height>20</height> |
||||
|
</size> |
||||
|
</property> |
||||
|
</spacer> |
||||
|
</item> |
||||
|
</layout> |
||||
|
</item> |
||||
|
<item> |
||||
|
<spacer name="verticalSpacer_2"> |
||||
|
<property name="orientation"> |
||||
|
<enum>Qt::Vertical</enum> |
||||
|
</property> |
||||
|
<property name="sizeHint" stdset="0"> |
||||
|
<size> |
||||
|
<width>20</width> |
||||
|
<height>119</height> |
||||
|
</size> |
||||
|
</property> |
||||
|
</spacer> |
||||
|
</item> |
||||
|
</layout> |
||||
|
</widget> |
||||
|
<resources/> |
||||
|
<connections/> |
||||
|
</ui> |
@ -0,0 +1,40 @@ |
|||||
|
#include "tabview.h" |
||||
|
#include "ui_tabview.h" |
||||
|
#include "tabitemview.h" |
||||
|
TabView::TabView(QtMvvm::ViewModel *viewModel, QWidget *parent) : |
||||
|
QTabWidget(parent), |
||||
|
IPresentingView(), |
||||
|
_viewModel(static_cast<TabViewModel*>(viewModel)), |
||||
|
ui(new Ui::TabView) |
||||
|
{ |
||||
|
setWindowFlags(windowFlags() | Qt::Window); |
||||
|
ui->setupUi(this); |
||||
|
|
||||
|
tabBar()->addTab(QStringLiteral("+")); |
||||
|
|
||||
|
connect(tabBar(), &QTabBar::tabBarClicked, |
||||
|
this, &TabView::trigger); |
||||
|
} |
||||
|
|
||||
|
TabView::~TabView() |
||||
|
{ |
||||
|
delete ui; |
||||
|
} |
||||
|
|
||||
|
bool TabView::tryPresent(QWidget *view) |
||||
|
{ |
||||
|
auto itemView = qobject_cast<TabItemView*>(view); |
||||
|
if(itemView) { |
||||
|
insertTab(count() - 1, itemView, itemView->viewModel()->title()); |
||||
|
tabBar()->setCurrentIndex(tabBar()->count() - 2); |
||||
|
return true; |
||||
|
} else |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
void TabView::trigger(int index) |
||||
|
{ |
||||
|
tabBar()->setCurrentIndex(tabBar()->count() - 1); |
||||
|
if(index == tabBar()->count() - 1) |
||||
|
_viewModel->addTab(); |
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
#ifndef TABVIEW_H |
||||
|
#define TABVIEW_H |
||||
|
|
||||
|
#include <QtWidgets/QTabWidget> |
||||
|
#include <QtMvvmWidgets/IPresentingView> |
||||
|
#include <tabviewmodel.h> |
||||
|
|
||||
|
namespace Ui { |
||||
|
class TabView; |
||||
|
} |
||||
|
|
||||
|
class TabView : public QTabWidget, public QtMvvm::IPresentingView |
||||
|
{ |
||||
|
Q_OBJECT |
||||
|
Q_INTERFACES(QtMvvm::IPresentingView) |
||||
|
|
||||
|
public: |
||||
|
Q_INVOKABLE explicit TabView(QtMvvm::ViewModel *viewModel, QWidget *parent = nullptr); |
||||
|
~TabView(); |
||||
|
|
||||
|
bool tryPresent(QWidget *view) override; |
||||
|
|
||||
|
private Q_SLOTS: |
||||
|
void trigger(int index); |
||||
|
|
||||
|
private: |
||||
|
TabViewModel *_viewModel; |
||||
|
Ui::TabView *ui; |
||||
|
}; |
||||
|
|
||||
|
#endif // TABVIEW_H
|
@ -0,0 +1,16 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<ui version="4.0"> |
||||
|
<class>TabView</class> |
||||
|
<widget class="QTabWidget" name="TabView"> |
||||
|
<property name="geometry"> |
||||
|
<rect> |
||||
|
<x>0</x> |
||||
|
<y>0</y> |
||||
|
<width>400</width> |
||||
|
<height>300</height> |
||||
|
</rect> |
||||
|
</property> |
||||
|
</widget> |
||||
|
<resources/> |
||||
|
<connections/> |
||||
|
</ui> |
Loading…
Reference in new issue