"Post Window" -> "Post window" prevents it being seen as two separate
[supercollider.git] / QtCollider / widgets / QcScrollArea.cpp
blobcc4834fe6a845053b051ce273c577a4f31523237
1 /************************************************************************
3 * Copyright 2010-2012 Jakob Leben (jakob.leben@gmail.com)
5 * This file is part of SuperCollider Qt GUI.
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 ************************************************************************/
22 #include "QcScrollArea.h"
23 #include "../QcWidgetFactory.h"
25 #include <QLayout>
26 #include <QScrollBar>
27 #include <QEvent>
28 #include <QChildEvent>
29 #include <QApplication>
31 class QcScrollWidgetFactory : public QcWidgetFactory<QcScrollWidget>
33 protected:
34 virtual void initialize( QWidgetProxy *p, QcScrollWidget *w )
36 QObject::connect( w, SIGNAL(painting(QPainter*)),
37 p, SLOT(customPaint(QPainter*)) );
41 QC_DECLARE_FACTORY( QcScrollWidget, QcScrollWidgetFactory );
43 QcScrollWidget::QcScrollWidget( QWidget *parent ) : QcCanvas( parent )
45 setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum );
48 QSize QcScrollWidget::sizeHint() const
50 QRect r = childrenRect();
51 QSize sz( r.x() + r.width(), r.y() + r.height() );
52 return sz;
55 bool QcScrollWidget::event ( QEvent * e ) {
56 int t = e->type();
57 if( t == QEvent::ChildAdded ) {
58 QChildEvent *ce = static_cast<QChildEvent*>(e);
59 ce->child()->installEventFilter( this );
61 else if( t == QEvent::ChildRemoved ) {
62 updateGeometry();
65 return QWidget::event( e );
68 bool QcScrollWidget::eventFilter ( QObject * watched, QEvent * event ) {
69 Q_UNUSED( watched );
71 switch( event->type() ) {
72 case QEvent::Resize:
73 case QEvent::Move:
74 case QEvent::Show:
75 case QEvent::Hide:
76 updateGeometry();
77 break;
78 default:
79 return false;
82 return false;
87 QC_DECLARE_QWIDGET_FACTORY(QcScrollArea);
89 QcScrollArea::QcScrollArea()
91 connect( horizontalScrollBar(), SIGNAL(actionTriggered(int)),
92 this, SIGNAL(scrolled()) );
93 connect( verticalScrollBar(), SIGNAL(actionTriggered(int)),
94 this, SIGNAL(scrolled()) );
97 void QcScrollArea::setWidget( QObjectProxy *proxy )
99 QWidget *w = qobject_cast<QWidget*>( proxy->object() );
100 if( !w ) {
101 qcErrorMsg( "QcScrollArea::setCanvas: given proxy does not contain a valid widget." );
102 return;
104 QScrollArea::setWidget( w );
105 setWidgetResizable( true );
108 void QcScrollArea::addChild( QWidget* w )
110 if( widget() )
111 w->setParent( widget() );
114 QRectF QcScrollArea::innerBounds() const {
115 QSize vs = viewport()->size();
116 if( !widget() ) return QRectF(0,0,vs.width(),vs.height());
117 QSize cs = widget()->size();
118 return QRectF(0, 0,
119 qMax( vs.width(), cs.width() ),
120 qMax( vs.height(), cs.height() ) );
123 void QcScrollArea::setHasBorder( bool b ) {
124 if( b )
125 QFrame::setFrameShape( QFrame::StyledPanel );
126 else
127 QFrame::setFrameShape( QFrame::NoFrame );
130 QPointF QcScrollArea::visibleOrigin() const
132 QWidget *w = widget();
133 return ( w != 0 ? widget()->mapFromParent( QPoint(0,0) ) : QPoint(0,0) );
136 void QcScrollArea::setVisibleOrigin( const QPointF &pt )
138 horizontalScrollBar()->setValue( pt.x() );
139 verticalScrollBar()->setValue( pt.y() );