3#include "ViewSplitter.h"
5#include <QLoggingCategory>
8#include "ViewSplitterContainer.h"
10static Q_LOGGING_CATEGORY(log,
"App.View.Splitter")
13 :
CView(pPara, parent)
19 qDebug(log) << Q_FUNC_INFO <<
this;
21 QVBoxLayout* p =
new QVBoxLayout(
this);
23 qCritical(log) <<
"new QVBoxLayout fail";
26 p->setContentsMargins(0, 0, 0, 0);
28 m_pMain =
new QSplitter(Qt::Vertical,
this);
30 qCritical(log) <<
"m_pMain is nullptr";
33 p->addWidget(m_pMain);
34 m_HandleWidth = m_pMain->handleWidth();
40CViewSplitter::~CViewSplitter()
42 qDebug(log) << Q_FUNC_INFO <<
this;
43 for(
int i = 0; i < m_nRow; i++)
46 for(
int j = 0; j < sp->count(); j++)
48 auto pw = sp->widget(j);
49 pw->setParent(
nullptr);
57 QSplitter* sp =
nullptr;
59 qCritical(log) <<
"The view is null";
67 if(m_nCount + 1 > m_nRow * m_nRow) {
68 QSplitter* p =
new QSplitter(Qt::Horizontal, m_pMain);
77 for(i = 0; i < m_nRow; i++) {
79 if(p->count() < m_nRow) {
91 m_nIdxCol = sp->count();
92 sp->addWidget(pContainer);
93 pContainer->SetVisibleTab(m_pParameterApp->GetTabBar());
95 m_Container.insert(pView, pContainer);
99 SIGNAL(customContextMenuRequested(
const QPoint&)),
100 this, SIGNAL(customContextMenuRequested(
const QPoint&)));
102 check = connect(pContainer, &CViewSplitterContainer::sigFouceIn,
103 this, [&](QWidget* pView){
104 SetCurrentView(pView);
108 check = connect(m_pParameterApp, SIGNAL(sigTabPositionChanged()),
109 pContainer, SLOT(slotTabPositionChanged()));
111 check = connect(pContainer, SIGNAL(
sigCloseView(
const QWidget*)),
121 qDebug(log) << Q_FUNC_INFO <<
"Row:" << m_nRow << m_pMain->count() <<
"Count:" << m_nCount
122 <<
"Current row:" << m_nIdxRow <<
"Current col:" << m_nIdxCol
123 <<
"Current count:" << sp->count();
124 emit sigCurrentChanged(pView);
137 nRet = GetIndex(pView, nRow, nCol);
143 if(pView == pCurView)
146 if(m_Row[nRow]->count() > nCol + 1)
147 pContainerNext = GetContainer(nRow, nCol + 1);
148 else if(m_Row[nRow]->count() - 1 == nCol && 0 != nCol)
149 pContainerNext = GetContainer(nRow, nCol -1);
150 else if(0 == nCol && nRow + 1 < m_nRow) {
151 for(
int i = nRow + 1; i < m_nRow; i++) {
152 if(m_Row[i]->count() > 0) {
153 pContainerNext = GetContainer(nRow + 1, 0);
158 if(!pContainerNext) {
159 for(
int i = nRow - 1; i >= 0; i--) {
160 if(m_Row[i]->count() > 0) {
161 pContainerNext = GetContainer(i, m_Row[i]->count() - 1);
169 pView->setParent(
nullptr);
170 auto pContainer = GetContainer(pView);
173 pContainer->setParent(
nullptr);
174 m_Container.remove(pView);
177 qDebug(log) <<
"Row:" << nRow <<
"remain:" << m_Row[nRow]->count();
180 qDebug(log) <<
"Row:" << m_nRow <<
"Count:" << m_nCount
181 <<
"Current row:" << m_nIdxRow <<
"Current col:" << m_nIdxCol;
184 pCurView = pContainerNext->GetView();
186 if(pContainerNext->isHidden())
187 pContainerNext->show();
190 pCurView->setFocus();
192 return SetCurrentView(pCurView);
197 auto p = GetContainer(m_nIdxRow, m_nIdxCol);
203int CViewSplitter::SetCurrentView(QWidget *pView)
210 nRet = GetIndex(pView, nRow, nCol);
211 if(nRet)
return nRet;
213 if(m_nIdxCol == nCol && m_nIdxRow == nRow)
220 emit sigCurrentChanged(pView);
225void CViewSplitter::SetWidowsTitle(
226 QWidget *pView,
const QString &szTitle,
227 const QIcon &icon,
const QString &szToolTip)
231 auto pContainer = GetContainer(pView);
234 pContainer->setWindowTitle(szTitle);
235 if(m_pParameterApp->GetEnableTabIcon())
236 pContainer->setWindowIcon(icon);
238 pContainer->setWindowIcon(QIcon());
239 if(m_pParameterApp->GetEnableTabToolTip())
240 pContainer->SetPrompt(szToolTip);
242 pContainer->SetPrompt(QString());
247int CViewSplitter::SetFullScreen(
bool bFull)
250 if(0 >= m_nCount)
return 0;
252 if(m_pParameterApp && m_pParameterApp->GetKeepSplitViewWhenFullScreen())
256 qDebug(log) <<
"CurrentView:" << p;
259 m_szStyleSheet = styleSheet();
261 setStyleSheet(
"QWidget::pane{top:0px;left:0px;border:none;}");
262 m_HandleWidth = m_pMain->handleWidth();
263 m_pMain->setHandleWidth(0);
264 for(
int i = 0; i < m_nRow; i++) {
267 qCritical(log) <<
"Row" << i <<
"is null";
270 sp->setHandleWidth(0);
271 for(
int j = 0; j < m_nRow; j++) {
272 if(m_nIdxRow == i && m_nIdxCol == j) {
274 SetVisibleTab(
false);
277 auto p = sp->widget(j);
281 qCritical(log) <<
"Widget: Row" << i <<
"Col" << j <<
"is null";
287 setStyleSheet(m_szStyleSheet);
288 m_pMain->setHandleWidth(m_HandleWidth);
289 for(
int i = 0; i < m_nRow; i++) {
291 sp->setHandleWidth(m_HandleWidth);
293 for(
int j = 0; j < m_nRow; j++) {
294 auto p = sp->widget(j);
296 SetVisibleTab(m_pParameterApp->GetTabBar());
298 if(m_nIdxRow == i && m_nIdxCol == j) {
310int CViewSplitter::SetVisibleTab(
bool bVisible)
312 foreach (
auto c, m_Container) {
314 c->SetVisibleTab(bVisible);
320int CViewSplitter::GetIndex(QWidget* pView,
int &nRow,
int &nCol)
327 auto pContainer = m_Container[pView];
328 for(nRow = 0; nRow < m_nRow; nRow++)
330 auto sp = m_Row[nRow];
332 nCol = sp->indexOf(pContainer);
342 QWidget* pContainer =
nullptr;
343 QSplitter* sp =
nullptr;
344 if(-1 < nRow && nRow < m_nRow)
346 if(sp && -1 < nCol && nCol < sp->count())
347 pContainer = sp->widget(nCol);
348 qDebug(log) <<
"Container" <<
"Row number:" << m_nRow << m_Row.size()
349 <<
"Count:" << m_nCount
350 <<
"row:" << m_nIdxRow <<
"col:" << m_nIdxCol;
351 return qobject_cast<CViewSplitterContainer*>(pContainer);
356 auto it = m_Container.find(pView);
357 if(m_Container.end() == it)
364 foreach (
auto c, m_Container) {
366 if(c->GetView() == pView &&
nullptr != pView) {
367 c->setFrameStyle(QFrame::Panel|QFrame::Raised);
369 c->setMidLineWidth(5);
371 c->setFrameStyle(QFrame::NoFrame);
373 c->setMidLineWidth(0);
379int CViewSplitter::SetSizes()
384 foreach(
auto sp, m_Row) {
385 for(
int i = 0; i < sp->count(); i++) {
386 auto pContainer = sp->widget(i);
387 w = qMax(w, pContainer->frameGeometry().width());
388 h = qMax(h, pContainer->frameGeometry().height());
392 qDebug(log) <<
"Width:" << w <<
"Height:" << h;
394 QList<int> wSizes, hSizes;
395 foreach(
auto sp, m_Row) {
397 for(
int i = 0; i < sp->count(); i++) {
400 sp->setSizes(wSizes);
401 qDebug(log) <<
"wSizes:" << wSizes << sp->sizes();
404 m_pMain->setSizes(hSizes);
405 qDebug(log) <<
"hSizes:" << hSizes << m_pMain->sizes();
virtual int RemoveView(QWidget *pView) override
int ActiveContainer(QWidget *pView)
\chinese 突出当前视图
virtual QWidget * GetCurrentView() override
virtual int AddView(QWidget *pView) override
void sigCloseView(const QWidget *pView)