diff --git a/src/komposelayout.cpp b/src/komposelayout.cpp index 4eeacf0..567b275 100644 --- a/src/komposelayout.cpp +++ b/src/komposelayout.cpp @@ -34,8 +34,9 @@ KomposeLayout::KomposeLayout( KomposeWidget *parent, int type, int dist, const c : TQObject(parent, name), spacing(dist), widgetsChanged(false), - currentRows(0), - currentColumns(0), + filledRows(0), + filledColumns(0), + emptyColumns(0), parentWidget(parent) { setType( type ); @@ -115,7 +116,7 @@ void KomposeLayout::rearrangeContents() parentWidget->width(), parentWidget->height() - ( 40 + 2*spacing ) ); // arrange the filled desktops taking 90% of the screen - rearrangeContents( filledRect, filledContainers ); + rearrangeContents( filledRect, filledContainers, CONTAINER_FILLED ); // Arrange empty containers TQRect emptyRect( 0, @@ -123,7 +124,7 @@ void KomposeLayout::rearrangeContents() parentWidget->width(), ( 40 + 2*spacing ) ); // arrange the empty widget in one row - rearrangeContents( emptyRect, emptyContainers, 1, -1, false ); + rearrangeContents( emptyRect, emptyContainers, CONTAINER_EMPTY, 1, -1 ); } @@ -146,7 +147,7 @@ void KomposeLayout::rearrangeContents() * availRect specifies the size&pos of the contents * Specify either rows or cols to set a fixed number of those (setting both won't work correctly) */ -void KomposeLayout::rearrangeContents( const TQRect& availRect, const TQPtrList widgets, int rows, int columns, bool setMemberRowsCols ) +void KomposeLayout::rearrangeContents( const TQRect& availRect, const TQPtrList widgets, int containerType, int rows, int columns ) { // Check or empty list if (widgets.count() == 0) @@ -297,14 +298,15 @@ void KomposeLayout::rearrangeContents( const TQRect& availRect, const TQPtrList< if ( *maxRowHeightIt-h > 0 ) topOffset += *maxRowHeightIt-h; ++maxRowHeightIt; - } - - // Sync cols/rows member vars to current cols/rows - if ( setMemberRowsCols ) - { - currentRows = rows; - currentColumns = columns; - } + } + + // Sync cols/rows member vars to current cols/rows + if( containerType == CONTAINER_EMPTY ) { + emptyColumns = columns; + } else { + filledRows = rows; + filledColumns = columns; + } } @@ -320,12 +322,12 @@ KomposeWidget* KomposeLayout::getNeighbour( const KomposeWidget* widget, int dir KomposeWidget* neighbour = 0; if ( filledContainers.containsRef(widget) ) { - if ( ( neighbour = getNeighbour( filledContainers, widget, direction, WLAYOUT_HORIZONTAL ) ) == 0 ) + if ( ( neighbour = getNeighbour( filledContainers, CONTAINER_FILLED, widget, direction, WLAYOUT_HORIZONTAL ) ) == 0 ) return emptyContainers.first(); } else if ( emptyContainers.containsRef(widget) ) { - if ( ( neighbour = getNeighbour( emptyContainers, widget, direction, WLAYOUT_HORIZONTAL ) ) == 0 ) + if ( ( neighbour = getNeighbour( emptyContainers, CONTAINER_EMPTY, widget, direction, WLAYOUT_HORIZONTAL ) ) == 0 ) if ( direction == DLAYOUT_TOP ) return filledContainers.last(); else @@ -334,7 +336,7 @@ KomposeWidget* KomposeLayout::getNeighbour( const KomposeWidget* widget, int dir return neighbour; } else if (layoutType==TLAYOUT_GENERIC) - return getNeighbour( list, widget, direction, wrap ); + return getNeighbour( list, CONTAINER_GENERIC, widget, direction, wrap ); kdDebug() << "KomposeLayout::getNeighbour() - this should never happen!" << endl; return NULL; @@ -346,6 +348,7 @@ KomposeWidget* KomposeLayout::getNeighbour( const KomposeWidget* widget, int dir */ KomposeWidget* KomposeLayout::getNeighbour( TQPtrList listToSearch, + int listType, const KomposeWidget* widget, int direction, int wrap ) @@ -366,6 +369,15 @@ KomposeWidget* KomposeLayout::getNeighbour( { if ( task == widget ) { + int currentRows, currentColumns; + if( listType == CONTAINER_EMPTY ) { + currentRows = 1; + currentColumns = emptyColumns; + } else { + currentRows = filledRows; + currentColumns = filledColumns; + } + switch ( direction ) { case DLAYOUT_RIGHT: diff --git a/src/komposelayout.h b/src/komposelayout.h index 4ab1df0..19c45d1 100644 --- a/src/komposelayout.h +++ b/src/komposelayout.h @@ -35,10 +35,12 @@ enum LayoutDirections { DLAYOUT_LEFT, DLAYOUT_RIGHT, DLAYOUT_TOP, DLAYOUT_BOTTOM enum WrapDirections { WLAYOUT_NONE, WLAYOUT_HORIZONTAL, WLAYOUT_VERTICAL, WLAYOUT_BOTH }; +enum ContainerType { CONTAINER_GENERIC, CONTAINER_FILLED, CONTAINER_EMPTY }; + /** The main layout class. TQLayout just didn't fit :( - + @author Hans Oischinger */ class KomposeLayout : public TQObject @@ -52,7 +54,7 @@ public: void add( KomposeWidget *w ); void remove( KomposeWidget *w ); void setType( int t ); -int getType() { return layoutType; } + int getType() { return layoutType; } const TQPtrList *getManagedWidgets() { return &list; } int getNumofChilds() { return list.count(); } @@ -65,15 +67,16 @@ public slots: protected: KomposeWidget* getNeighbour( TQPtrList listToSearch, + int listType, const KomposeWidget* widget, int direction = DLAYOUT_RIGHT, int wrap = WLAYOUT_NONE ); void rearrangeContents(); void rearrangeContents( const TQRect& availRect, const TQPtrList widgets, + int containerType = CONTAINER_GENERIC, int rows = -1, - int columns = -1, - bool setMemberRowsCols = true ); + int columns = -1 ); private: // List of all managed childs @@ -86,8 +89,10 @@ private: int layoutType; int spacing; bool widgetsChanged; - int currentRows; - int currentColumns; + + int filledRows; + int filledColumns; + int emptyColumns; KomposeWidget* parentWidget; };