mirror of
https://bitbucket.org/smil3y/kde-workspace.git
synced 2025-02-24 02:42:50 +00:00
141 lines
3.3 KiB
C++
141 lines
3.3 KiB
C++
#ifndef OXYGENSPLITTERPROXY_H
|
|
#define OXYGENSPLITTERPROXY_H
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// oxygensplitterproxy.h
|
|
// Extended hit area for Splitters
|
|
// -------------------
|
|
//
|
|
// Copyright (C) 2011 Hugo Pereira Da Costa <hugo.pereira@free.fr>
|
|
//
|
|
// Based on Bespin splitterproxy code
|
|
// Copyright (C) 2011 Thomas Luebking <thomas.luebking@web.de>
|
|
//
|
|
//
|
|
// This library is free software; you can redistribute it and/or
|
|
// modify it under the terms of the GNU Library General Public
|
|
// License version 2 as published by the Free Software Foundation.
|
|
//
|
|
// This library 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
|
|
// Library General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Library General Public License
|
|
// along with this library; see the file COPYING.LIB. If not, write to
|
|
// the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
// Boston, MA 02110-1301, USA.
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include <QtCore/QEvent>
|
|
#include <QtCore/QMap>
|
|
#include <QtCore/qsharedpointer.h>
|
|
#include <QtGui/qevent.h>
|
|
#include <QtGui/QMainWindow>
|
|
#include <QtGui/qevent.h>
|
|
#include <QtGui/qsplitter.h>
|
|
#include <QtGui/QWidget>
|
|
|
|
#include "oxygenaddeventfilter.h"
|
|
|
|
namespace Oxygen
|
|
{
|
|
|
|
class SplitterProxy;
|
|
|
|
//! factory
|
|
class SplitterFactory: public QObject
|
|
{
|
|
|
|
public:
|
|
|
|
//! constructor
|
|
explicit SplitterFactory( QObject* parent ):
|
|
QObject( parent ),
|
|
_enabled( false )
|
|
{}
|
|
|
|
//! destructor
|
|
virtual ~SplitterFactory( void )
|
|
{}
|
|
|
|
//! enabled state
|
|
void setEnabled( bool );
|
|
|
|
//! register widget
|
|
bool registerWidget( QWidget* );
|
|
|
|
//! unregister widget
|
|
void unregisterWidget( QWidget* );
|
|
|
|
private:
|
|
|
|
//! enabled state
|
|
bool _enabled;
|
|
|
|
//! needed to block ChildAdded events when creating proxy
|
|
AddEventFilter _addEventFilter;
|
|
|
|
//! pointer to SplitterProxy
|
|
typedef QWeakPointer<SplitterProxy> SplitterProxyPointer;
|
|
|
|
//! registered widgets
|
|
typedef QMap<QWidget*, SplitterProxyPointer > WidgetMap;
|
|
WidgetMap _widgets;
|
|
|
|
};
|
|
|
|
//! splitter 'proxy' widget, with extended hit area
|
|
class SplitterProxy : public QWidget
|
|
{
|
|
|
|
public:
|
|
|
|
//! constructor
|
|
explicit SplitterProxy( QWidget*, bool = false );
|
|
|
|
//! destructor
|
|
virtual ~SplitterProxy( void );
|
|
|
|
//! event filter
|
|
virtual bool eventFilter( QObject*, QEvent* );
|
|
|
|
//! enable state
|
|
void setEnabled( bool );
|
|
|
|
//! enable state
|
|
bool enabled( void ) const
|
|
{ return _enabled; }
|
|
|
|
protected:
|
|
|
|
//! event handler
|
|
virtual bool event( QEvent* );
|
|
|
|
protected:
|
|
|
|
//! reset 'true' splitter widget
|
|
void clearSplitter( void );
|
|
|
|
//! keep track of 'true' splitter widget
|
|
void setSplitter( QWidget* );
|
|
|
|
private:
|
|
|
|
//! enabled state
|
|
bool _enabled;
|
|
|
|
//! splitter object
|
|
QWeakPointer<QWidget> _splitter;
|
|
|
|
//! hook
|
|
QPoint _hook;
|
|
|
|
//! timer id
|
|
int _timerId;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|