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