玉兔远程控制 0.1.0-bate11
载入中...
搜索中...
未找到
ViewSplitterContainer.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include "ViewSplitterContainer.h"
4#include <QLoggingCategory>
5#include <QVBoxLayout>
6#include <QEvent>
7
8static Q_LOGGING_CATEGORY(log, "App.View.Splitter.Container")
10 : QFrame{}
11 , m_pTab(nullptr)
12 , m_pView(pView)
13 , m_pParameterApp(pPara)
14{
15 Q_ASSERT(m_pView && m_pParameterApp);
16 m_pTab = new RabbitCommon::CTitleBar(this);
17 if(!m_pTab)
18 return;
19 m_pTab->VisibleFloatButton(false);
20 m_pTab->VisibleMaximizeButton(false);
21 m_pTab->VisibleMinimizeButton(false);
22 m_pTab->installEventFilter(this);
23
24 SetVisibleTab(true);
25 //m_pTab->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
26 if(m_pView) {
27 m_pView->show();
28 m_pTab->setWindowTitle(m_pView->windowTitle());
29 }
30
31 m_pTab->setContextMenuPolicy(Qt::CustomContextMenu);
32 bool check = connect(m_pTab, SIGNAL(customContextMenuRequested(QPoint)),
33 this, SLOT(slotCustomContextMenuRequested(QPoint)));
34 Q_ASSERT(check);
35
36 auto pLayout = new QVBoxLayout(this);
37 if(pLayout)
38 setLayout(pLayout);
39 Q_ASSERT(pLayout);
40 pLayout->setContentsMargins(0, 0, 0, 0);
41 slotTabPositionChanged();
42}
43
44CViewSplitterContainer::~CViewSplitterContainer()
45{
46 qDebug(log) << Q_FUNC_INFO;
47 if(layout() && m_pView)
48 layout()->removeWidget(m_pView);
49}
50
51QWidget* CViewSplitterContainer::GetView()
52{
53 return m_pView;
54}
55
56void CViewSplitterContainer::SetPrompt(const QString &szPrompt)
57{
58 m_pTab->setToolTip(szPrompt);
59}
60
61int CViewSplitterContainer::SetVisibleTab(bool bVisible)
62{
63 m_pTab->setVisible(bVisible);
64 return 0;
65}
66
67bool CViewSplitterContainer::GetVisibleTab()
68{
69 return m_pTab->isVisible();
70}
71
72void CViewSplitterContainer::slotTabPositionChanged()
73{
74 if(!m_pParameterApp || !m_pView)
75 return;
76
77 auto pLayout = layout();
78 if(pLayout) {
79 if(m_pTab)
80 pLayout->removeWidget(m_pTab);
81 if(m_pView)
82 pLayout->removeWidget(m_pView);
83 }
84
85 qDebug(log) << Q_FUNC_INFO << m_pParameterApp->GetTabPosition();
86 switch(m_pParameterApp->GetTabPosition())
87 {
88 case QTabWidget::TabPosition::North:
89 case QTabWidget::TabPosition::West:
90 {
91 if(pLayout) {
92 pLayout->addWidget(m_pTab);
93 pLayout->addWidget(m_pView);
94 m_pView->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
95 }
96 break;
97 }
98 case QTabWidget::TabPosition::South:
99 case QTabWidget::TabPosition::East:
100 {
101 if(pLayout) {
102 pLayout->addWidget(m_pView);
103 m_pView->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
104 pLayout->addWidget(m_pTab);
105 }
106 break;
107 }
108 }
109
110 m_pView->show();
111}
112
113void CViewSplitterContainer::closeEvent(QCloseEvent *event)
114{
115 qDebug(log) << Q_FUNC_INFO;
116 emit sigCloseView(m_pView);
117}
118
119void CViewSplitterContainer::slotCustomContextMenuRequested(const QPoint &pos)
120{
121 QPoint p = pos;
122 p = m_pTab->mapToGlobal(pos);
123 emit customContextMenuRequested(p);
124}
125
126bool CViewSplitterContainer::eventFilter(QObject *watched, QEvent *event)
127{
128 //qDebug(log) << "Event filter:" << watched << event->type();
129 if(watched == m_pTab && event->type() == QEvent::MouseButtonPress)
130 {
131 emit sigFouceIn(m_pView);
132 }
133 return false;
134}