/******************************************************************** KWin - the KDE window manager This file is part of the KDE project. Copyright (C) 2009 Nikhil Marathe This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . *********************************************************************/ #ifndef KWIN_TILINGLAYOUTFACTORY_H #define KWIN_TILINGLAYOUTFACTORY_H namespace KWin { class Workspace; class TilingLayout; class Tile; /** * The tiling layout factory is used to create tiling layouts. * To add a new layout, include the appropriate header in tilinglayoutfactory.cpp * and use the ADD_LAYOUT macro to create a case entry. * Also insert your layout in the Layouts enumeration. Do NOT * change the position of FirstLayout and LastLayout */ class TilingLayoutFactory { public: /** When adding your own layout, edit this * Remember to suffix an L for now */ enum Layouts { FirstLayout, // special, do not modify/move DefaultLayout, /* Actual layouts */ SpiralLayout, ColumnsLayout, FloatingLayout, /* Put your layout above this line ^^^ */ LastLayout // special, do not modify/move }; static TilingLayout* createLayout( int type, Workspace * ); static TilingLayout* nextLayout( TilingLayout *curr ); static TilingLayout* previousLayout( TilingLayout *curr ); static int indexToLayoutIndex( int index ); private: static TilingLayout* cycleLayout( TilingLayout *curr, bool next ); }; inline TilingLayout* TilingLayoutFactory::nextLayout( TilingLayout *curr ) { return cycleLayout( curr, true ); } inline TilingLayout* TilingLayoutFactory::previousLayout( TilingLayout *curr ) { return cycleLayout( curr, false ); } } // end namespace #endif