You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ktechlab/src/viewcontainer.h

252 lines
7.0 KiB

/***************************************************************************
* Copyright (C) 2005 by David Saxton *
* david@bluehaze.org *
* *
* 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 VIEWCONTAINER_H
#define VIEWCONTAINER_H
#include <tqdragobject.h>
#include <tqmap.h>
#include <tqsplitter.h>
#include <tqvaluelist.h>
class KTechlab;
class View;
class ViewArea;
class ViewContainer;
class KConfig;
class TQHBoxLayout;
class TQLayout;
class TQSplitter;
typedef TQMap< uint, ViewArea* > ViewAreaMap;
typedef TQValueList<int> IntList;
class ViewContainerDrag : public TQStoredDrag
{
public:
ViewContainerDrag( ViewContainer *viewContainer );
ViewContainer *viewContainer() const { return p_viewContainer; }
protected:
ViewContainer *p_viewContainer;
};
/**
Contains either exactly one View, or two ViewAreas, seperated by a TQSplitter.
If it contains one view, then the value returned in id() is that of the view.
If it contains two ViewAreas, then the value returned by id() is -1.
@author David Saxton
*/
class ViewArea : public TQSplitter
{
Q_OBJECT
TQ_OBJECT
public:
enum Position
{
Right,
Bottom
};
ViewArea( TQWidget *tqparent, ViewContainer *viewContainer, int id, const char *name = 0 );
~ViewArea();
ViewContainer *viewContainer() const { return p_viewContainer; }
int id() const { return m_id; }
/**
* Splits this ViewArea into two, and returns a pointer to the new ViewArea
*/
ViewArea *createViewArea( Position position, uint id );
/**
* Adds the given View to the main part of the tqlayout
*/
void setView( View *view );
/**
* Saves the state of this ViewArea and any contained ViewAreas
*/
void saveState( KConfig *config );
/**
* Restores the state of this ViewArea and any contained ViewAreas
* @param groupName e.g. "ViewContainer 1"
*/
void restoreState( KConfig *config, int id, const TQString &groupName );
/**
* Returns true if this ViewArea can save useful information as to its state
* (i.e. it's tqchildren can save useful information about their state, or has
* a view with a url in it)
*/
bool canSaveUsefulStateInfo() const;
/**
* Calls View::setKTechlabDeleted.
*/
void setKTechlabDeleted();
static TQString fileKey( int id );
static TQString containsKey( int id );
static TQString orientationKey( int id );
protected slots:
void viewAreaDestroyed( TQObject *obj );
void viewDestroyed();
protected:
int m_id;
TQGuardedPtr<View> p_view;
ViewArea *p_viewArea1;
ViewArea *p_viewArea2;
ViewContainer *p_viewContainer;
};
/**
@author David Saxton
*/
class ViewContainer : public TQWidget
{
Q_OBJECT
TQ_OBJECT
public:
/**
* Constructs a new ViewContainer, along with a default ViewArea ready for
* parenting a View, with an id of 0. tqparent is only used if ktechlab is
* null; otherwise the tqparent widget is ktechlab's tabWidget()
*/
ViewContainer( const TQString & caption, KTechlab * ktechlab, TQWidget * tqparent = 0 );
~ViewContainer();
/**
* Returns the view in the ViewArea with the given id
*/
View *view( uint id ) const;
/**
* Returns the ViewArea with the given id
*/
ViewArea *viewArea( uint id ) const;
/**
* The active view area is the one that is focused.
*/
void setActiveViewArea( uint id );
/**
* Returns the id of the active ViewArea
*/
uint activeViewArea() const { return m_activeViewArea; }
/**
* Returns a pointer to the view of the active view area
*/
View *activeView() const { return view( activeViewArea() ); }
/**
* Attempts to close the given viewarea, returning true if successful (i.e
* if the user did not object to the close request )
*/
bool closeViewArea( uint id );
/**
* Creates a view area (tqparent TQWidget, splitter et al) ready for inclusion
* of a view.
* @param relativeViewArea the viewarea to position the new viewarea next to, if -1 then is taken to be the active view area
* @param position Top, Right, Bottom or Left of given relativeViewArea
* @returns id of the the view area, or -1 if unsucessful
*/
int createViewArea( int relativeViewArea, ViewArea::Position position = ViewArea::Right );
/**
* Attempts to close each view area, returning false if any fail to be
* closed
*/
bool closeViewContainer();
/**
* @returns number of views in this view container
*/
uint viewCount() const { return m_viewAreaMap.size(); }
/**
* Called when the view container is focused (e.g. user clicks on the tab
* for this view container)
*/
void setFocused();
/**
* Called when the view container is unfocused (e.g. user clicks on another
* tab).
*/
void setUnfocused();
/**
* Create a new view container, and make a new instance of each view in
* that view container.
*/
ViewContainer* duplicateViewContainer();
/**
* Copies each view in this ViewContainer into the given ViewContainer
*/
void copyViewContainerIntoExisting( ViewContainer *viewContainer );
/**
* Sets the pointer to the view area with the given id
*/
void setViewAreaId( ViewArea *viewArea, uint id );
/**
* Removes a ViewArea from internal lists
*/
void setViewAreaRemoved( uint id );
/**
* Sets the id to be "used"
*/
void setIdUsed( int id );
/**
* Writes the state of the View Container (tqlayout of views and view URLs)
* to the given KConfig. Doesn't change the group - so preset it if
* needed!
*/
void saveState( KConfig *config );
/**
* Reads in the saved config state (as written by saveState), and restores
* the ViewContainer with all appropriate views open
* @param groupName e.g. "ViewContainer 1"
*/
void restoreState( KConfig *config, const TQString &groupName );
/**
* Returns a unique id (negative) for a ViewArea that is now a Parent of other ViewAreas
*/
int uniqueParentId();
/**
* Returns a unique id (positive) for a new ViewArea
*/
int uniqueNewId();
/**
* Returns true if this ViewArea can save useful information as to its state
* (i.e. it's tqchildren can save useful information about their state, or has
* a view with a url in it)
*/
bool canSaveUsefulStateInfo() const;
/**
* Calls setKTechlabDeleted for each ViewArea.
*/
void setKTechlabDeleted();
public slots:
/**
* Sets the tab caption et al from the contents of this ViewContainer
*/
void updateCaption();
protected slots:
void baseViewAreaDestroyed( TQObject *obj );
protected:
void restoreViewArea( KConfig *config, int id, ViewArea *viewArea );
void findActiveViewArea();
int m_activeViewArea;
ViewArea *m_baseViewArea;
ViewAreaMap m_viewAreaMap;
IntList m_usedIDs;
KTechlab *p_ktechlab;
bool b_focused;
bool b_deleted;
};
#endif