diff options
Diffstat (limited to 'kpovmodeler/pmviewlayoutmanager.h')
-rw-r--r-- | kpovmodeler/pmviewlayoutmanager.h | 306 |
1 files changed, 306 insertions, 0 deletions
diff --git a/kpovmodeler/pmviewlayoutmanager.h b/kpovmodeler/pmviewlayoutmanager.h new file mode 100644 index 00000000..c0246c5d --- /dev/null +++ b/kpovmodeler/pmviewlayoutmanager.h @@ -0,0 +1,306 @@ +//-*-C++-*- +/* +************************************************************************** + description + -------------------- + copyright : (C) 2002 by Luis Carvalho + email : [email protected] + copyright : (C) 2003 by Andreas Zehender + email : [email protected] +************************************************************************** + +************************************************************************** +* * +* 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. * +* * +**************************************************************************/ + +#ifndef PMVIEWLAYOUTMANAGER_H +#define PMVIEWLAYOUTMANAGER_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <qstring.h> +#include <qmap.h> +#include <qvaluelist.h> +#include <kstaticdeleter.h> + +#include <kdialogbase.h> + +#include "pmdockwidget.h" +#include "pmviewbase.h" + +class KConfig; +class QDomElement; +class QLineEdit; +class PMShell; + +/** + * Class used internally by @ref PMViewLayout + * + * This class maintains all the information needed to create a docked view. + */ +class PMViewLayoutEntry +{ +public: + /** + * Constructor + */ + PMViewLayoutEntry( ); + /** + * Copy constructor + */ + PMViewLayoutEntry( const PMViewLayoutEntry& e ); + /** + * Destructor + */ + ~PMViewLayoutEntry( ); + + QString viewType( ) const { return m_viewType; } + void setViewType( const QString& vt ); + + PMDockWidget::DockPosition dockPosition( ) const { return m_dockPosition; } + void setDockPosition( PMDockWidget::DockPosition i ); + + int columnWidth( ) const { return m_columnWidth; } + void setColumnWidth( int i ); + + int height( ) const { return m_height; } + void setHeight( int i ); + + int floatingHeight( ) const { return m_floatingHeight; } + void setFloatingHeight( int h ) { m_floatingHeight = h; } + + int floatingWidth( ) const { return m_floatingWidth; } + void setFloatingWidth( int w ) { m_floatingWidth = w; } + + int floatingPositionX( ) const { return m_floatingPositionX; } + void setFloatingPositionX( int p ) { m_floatingPositionX = p; } + int floatingPositionY( ) const { return m_floatingPositionY; } + void setFloatingPositionY( int p ) { m_floatingPositionY = p; } + + void loadData( QDomElement& e ); + void saveData( QDomElement& e ) const; + + PMViewOptions* customOptions( ) const { return m_pCustomOptions; } + void setCustomOptions( PMViewOptions* o ); + + const QString dockPositionAsString( ); + const QString viewTypeAsString( ); + +private: + QString m_viewType; + PMDockWidget::DockPosition m_dockPosition; + int m_columnWidth; + int m_height; + int m_floatingWidth; + int m_floatingHeight; + int m_floatingPositionX; + int m_floatingPositionY; + PMViewOptions* m_pCustomOptions; +}; + +/** + * Class used internally by @ref PMViewLayoutManager + * + * This class maintains a named layout. It basically stores all views + * associated with that layout. + */ +class PMViewLayout +{ +public: + typedef QValueList< PMViewLayoutEntry >::iterator iterator; + /** + * Constructor + */ + PMViewLayout( ); + /** + * Copy constructor + */ + PMViewLayout( const PMViewLayout& vl ); + /** + * Destructor + */ + ~PMViewLayout( ) { } + + /** + * Assignment operator + */ + PMViewLayout& operator = ( const PMViewLayout& vl ); + + QString name( ) const { return m_name; } + + void loadData( QDomElement& e ); + + void saveData( QDomElement& e, QDomDocument& doc ) const; + /** + * Destroy all dock widgets in PMShell and create the new ones + */ + void displayLayout( PMShell* shell ); + /** + * Sets the name of the layout + */ + void setName( const QString& n ); + /** + * + * Add a new entry to the layout. By default it adds the entry at the end + * of the list. If a position is given it adds the entry at the indicated + * position + */ + void addEntry( const PMViewLayoutEntry& e, int index = -1 ); + /** + * Removes the entry at the given position + */ + void removeEntry( int index ); + /** + * Returns an iterator to the first entry + */ + iterator begin( ) { return m_entries.begin( ); } + /** + * Returns an iterator to the last entry + */ + iterator end( ) { return m_entries.end( ); } + /** + * Returns an iterator to the n-th entry + */ + iterator at( int i ) { return m_entries.at( i ); } + /** + * Returns the entry at the given position + */ + PMViewLayoutEntry& operator[]( int index ) { return m_entries[ index ]; } + /** + * Normalizes the column width and view heights + */ + void normalize( ); + + /** + * Extracts the view layout from the current window + */ + static PMViewLayout extractViewLayout( PMShell* shell ); +private: + static void recursiveExtractColumns( + QValueList< QValueList< PMViewLayoutEntry > >& cols, + QValueList< QValueList< PMViewLayoutEntry > >::iterator cit, + int width, QWidget* widget ); + + static void recursiveExtractOneColumn( + QValueList< PMViewLayoutEntry >& entries, + QValueList< PMViewLayoutEntry >::iterator eit, + int height, QWidget* widget ); + + QString m_name; + QValueList< PMViewLayoutEntry > m_entries; +}; + +/** + * Singleton that contains the view layouts available. + * + * It interacts with @ref PMShell to create the view layouts. + * The class maintains a list of layouts as well as the name of the default + * layout. The layouts are stored in a XML file caled viewlayouts.xml. + */ +class PMViewLayoutManager +{ +public: + /** + * Destructor + */ + ~PMViewLayoutManager( ); + /** + * Returns the manager instance (singleton) + */ + static PMViewLayoutManager* theManager( ); + + /** + * Returns the list of available view layouts + */ + QStringList availableLayouts( ); + /** + * Sets the default layout + */ + void setDefaultLayout( const QString& name ); + /** + * Returns the default layout + */ + QString defaultLayout( ) const { return m_defaultLayout; } + /** + * Destroy all dock widgets in PMShell and create the new ones + */ + void displayLayout( const QString& name, PMShell* shell ); + /** + * Displays the layout indicated as default + */ + void displayDefaultLayout( PMShell* shell ); + /** + * Loads all layouts from the configuration file + */ + void loadData( ); + /** + * Saves the current layout collection to the configuration file + */ + void saveData( ); + /** + * Add a new empty layout + */ + void addLayout( const QString& name ); + /** + * Add a new layout + */ + void addLayout( const PMViewLayout& l ) { m_layouts.append( l ); } + /** + * Remove a layout + */ + void removeLayout( const QString& name ); + /** + * Get a known layout + */ + PMViewLayout* findLayout( const QString& name ); + /** + * Returns the list of available layouts + */ + QValueList<PMViewLayout> layouts( ) { return m_layouts; } + /** + * Sets the list of available layouts + */ + void setLayouts( const QValueList<PMViewLayout>& l ) { m_layouts = l; } + /** + * Fill the available layouts menu + */ + void fillPopupMenu( KPopupMenu* pMenu ); +private: + /** + * Constructor + */ + PMViewLayoutManager( ); + + bool m_layoutsLoaded; + bool m_layoutDisplayed; + QString m_defaultLayout; + QValueList< PMViewLayout > m_layouts; + + static PMViewLayoutManager* s_pInstance; + static KStaticDeleter<PMViewLayoutManager> s_staticDeleter; +}; + + +class PMSaveViewLayoutDialog : public KDialogBase +{ + Q_OBJECT +public: + PMSaveViewLayoutDialog( PMShell* parent, const char* name = 0 ); + ~PMSaveViewLayoutDialog( ); +protected slots: + virtual void slotOk( ); + void slotNameChanged( const QString& ); + void slotNameSelected( const QString& ); +private: + QLineEdit* m_pLayoutName; + PMShell* m_pShell; +}; + +#endif |