void KviMdiManager::tile() { switch(KVI_OPTION_UINT(KviOption_uintTileMethod)) { case KVI_TILE_METHOD_ANODINE: tileAnodine(); break; case KVI_TILE_METHOD_PRAGMA4HOR: tileAllInternal(4,true); break; case KVI_TILE_METHOD_PRAGMA4VER: tileAllInternal(4,false); break; case KVI_TILE_METHOD_PRAGMA6HOR: tileAllInternal(6,true); break; case KVI_TILE_METHOD_PRAGMA6VER: tileAllInternal(6,false); break; case KVI_TILE_METHOD_PRAGMA9HOR: tileAllInternal(9,true); break; case KVI_TILE_METHOD_PRAGMA9VER: tileAllInternal(9,false); break; default: KVI_OPTION_UINT(KviOption_uintTileMethod) = KVI_TILE_METHOD_PRAGMA9HOR; tileAllInternal(9,true); break; } }
void KviMdiManager::tileAllInternal(int maxWnds, bool bHorizontal) //int maxWnds,bool bHorizontal { //NUM WINDOWS = 1,2,3,4,5,6,7,8,9 static int colstable[9]={ 1,1,1,2,2,2,3,3,3 }; //num columns static int rowstable[9]={ 1,2,3,2,3,3,3,3,3 }; //num rows static int lastwindw[9]={ 1,1,1,1,2,1,3,2,1 }; //last window multiplier static int colrecall[9]={ 0,0,0,3,3,3,6,6,6 }; //adjust self static int rowrecall[9]={ 0,0,0,0,4,4,4,4,4 }; //adjust self int * pColstable = bHorizontal ? colstable : rowstable; int * pRowstable = bHorizontal ? rowstable : colstable; int * pColrecall = bHorizontal ? colrecall : rowrecall; int * pRowrecall = bHorizontal ? rowrecall : colrecall; if (g_pApp->kviClosingDown()) return; m_bInSDIMode=false; ensureNoMaximized(); KviMdiChild * lpTop = (KviMdiChild*)activeSubWindow(); if (!lpTop) return; int numVisible = getVisibleChildCount(); if (numVisible < 1) return; int numToHandle = ((numVisible > maxWnds) ? maxWnds : numVisible); int xQuantum = viewport()->width() / pColstable[numToHandle-1]; if(xQuantum < ((lpTop->minimumSize().width() > KVI_MDICHILD_MIN_WIDTH) ? lpTop->minimumSize().width() : KVI_MDICHILD_MIN_WIDTH)) { if (pColrecall[numToHandle-1] == 0) qDebug("Tile : Not enouh space"); else tileAllInternal(pColrecall[numToHandle-1], bHorizontal); return; } int yQuantum = viewport()->height() / pRowstable[numToHandle-1]; if(yQuantum < ((lpTop->minimumSize().height() > KVI_MDICHILD_MIN_HEIGHT) ? lpTop->minimumSize().height() : KVI_MDICHILD_MIN_HEIGHT)) { if (pRowrecall[numToHandle-1] == 0) qDebug("Tile : Not enough space"); else tileAllInternal(pRowrecall[numToHandle-1], bHorizontal); return; } int curX = 0; int curY = 0; int curRow = 1; int curCol = 1; int curWin = 1; QList<QMdiSubWindow *> tmp = subWindowList(QMdiArea::StackingOrder); for(int i = 0; i < tmp.count(); i++) { KviMdiChild * lpC = (KviMdiChild*) tmp.at(i); if(lpC->state()!=KviMdiChild::Minimized) { if((curWin%numToHandle)==0) { lpC->move(curX, curY); lpC->resize(xQuantum * lastwindw[numToHandle-1], yQuantum); } else { lpC->move(curX, curY); lpC->resize(xQuantum, yQuantum); } //example : 12 windows : 3 cols 3 rows if (curCol < pColstable[numToHandle-1]) { //curCol < 3 curX += xQuantum; //add a column in the same row curCol++; //increase current column } else { curX = 0; //new row curCol = 1; //column 1 if (curRow < pRowstable[numToHandle-1]) { //curRow < 3 curY += yQuantum; //add a row curRow++; } else { curY = 0; //restart from beginning curRow = 1; } } curWin++; } } if(lpTop)lpTop->setFocus(); }
void KMdiChildArea::tileAllInternal(int maxWnds) { //NUM WINDOWS = 1,2,3,4,5,6,7,8,9 static int colstable[9]={ 1,1,1,2,2,2,3,3,3 }; //num columns static int rowstable[9]={ 1,2,3,2,3,3,3,3,3 }; //num rows static int lastwindw[9]={ 1,1,1,1,2,1,3,2,1 }; //last window multiplier static int colrecall[9]={ 0,0,0,3,3,3,6,6,6 }; //adjust self static int rowrecall[9]={ 0,0,0,0,4,4,4,4,4 }; //adjust self KMdiChildFrm *lpTop = topChild(); int numVisible = getVisibleChildCount(); if (numVisible<1) return; int numToHandle = ((numVisible > maxWnds) ? maxWnds : numVisible); int xQuantum = width()/colstable[numToHandle-1]; if (xQuantum < ((lpTop->minimumSize().width() > m_defaultChildFrmSize.width()) ? lpTop->minimumSize().width() : m_defaultChildFrmSize.width())) { if (colrecall[numToHandle-1] != 0) { tileAllInternal(colrecall[numToHandle-1]); return; } } int yQuantum=height()/rowstable[numToHandle-1]; if (yQuantum < ((lpTop->minimumSize().height() > m_defaultChildFrmSize.height()) ? lpTop->minimumSize().height() : m_defaultChildFrmSize.height())) { if (rowrecall[numToHandle-1] != 0) { tileAllInternal(rowrecall[numToHandle-1]); return; } } int curX=0; int curY=0; int curRow=1; int curCol=1; int curWin=1; for (KMdiChildFrm *lpC=m_pZ->first();lpC;lpC=m_pZ->next()) { if (lpC->m_state!=KMdiChildFrm::Minimized) { //restore the window if (lpC->m_state==KMdiChildFrm::Maximized) lpC->restorePressed(); if ((curWin%numToHandle)==0) lpC->setGeometry(curX,curY,xQuantum * lastwindw[numToHandle-1],yQuantum); else lpC->setGeometry(curX,curY,xQuantum,yQuantum); //example : 12 windows : 3 cols 3 rows if (curCol<colstable[numToHandle-1]) { //curCol<3 curX+=xQuantum; //add a column in the same row curCol++; //increase current column } else { curX = 0; //new row curCol = 1; //column 1 if (curRow < rowstable[numToHandle-1]) { //curRow<3 curY += yQuantum; //add a row curRow++; // } else { curY = 0; //restart from beginning curRow = 1; // } } curWin++; } } if (lpTop) lpTop->m_pClient->activate(); }
void KMdiChildArea::tilePragma() { tileAllInternal(9); }