123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- /*=========================================================================
- Library: CTK
- Copyright (c) Kitware Inc.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0.txt
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- =========================================================================*/
- #ifndef __ctkSizeGrip_h
- #define __ctkSizeGrip_h
- // Qt includes
- #include <QWidget>
- // CTK includes
- #include "ctkWidgetsExport.h"
- class ctkSizeGripPrivate;
- /// \ingroup Widgets
- /// \brief ctkSizeGrip is a utility widget that allows widget in a layout to be
- /// manually resized.
- /// It is not meant to be used as is but with a third party that can change the
- /// size hint of a widget such as a container widget (e.g. ctkExpandableWidget).
- /// To resize a widget, the user must left click on the size grip and drag
- /// left/right to control the width and/or up/bottom to control the height.
- /// Left button double-click resets the size hint of the target widget to its
- /// default.
- /// \sa ctkExpandableWidget
- class CTK_WIDGETS_EXPORT ctkSizeGrip
- : public QWidget
- {
- Q_OBJECT
- /// This property describes the movement of freedom of the sizeGrip.
- /// There are 3 supported orientations: Qt::Vertical, Qt::Horizontal and
- /// Qt::Horizontal|Qt::Vertical.
- /// If the orientation is solely Qt::Horizontal, the size grip only allows
- /// vertical resize. If the orientation is solely Qt::Vertical, only
- /// horizontal resizes are supported.
- /// Note that the orientations change the look of the widget. And it also
- /// probably means that the position of the widget should be changed: bottom
- /// side for Qt::Vertical, right side for Qt::Horizontal and bottom
- /// right corner for Qt::Horizontal|Qt::Vertical.
- /// Qt::Horizontal|Qt::Vertical by default.
- Q_PROPERTY(Qt::Orientations orientations READ orientations WRITE setOrientations)
- /// This property holds the sizeHint set by the user via the size grip or
- /// programatically using \a setWidgetSizeHint().
- /// If width or/and height is 0, it means the sizeHint has not been touched
- /// and the default widget sizeHint should be used instead.
- /// For example, if \a orientations is solely vertical (not also
- /// horizontal), the width component of the widget sizeHint is 0.
- /// If \a orientations is solely horizontal, the widgets izeHint height is 0.
- /// (0,0) by default (meaning the default widget sizehint should be used).
- Q_PROPERTY(QSize widgetSizeHint READ widgetSizeHint WRITE setWidgetSizeHint)
- /// This property holds whether the size grip resizes the widget or not.
- /// If the size grip doesn't resize the widget, it still returns a valid
- /// \a widgetSizeHint that can be used by a third party.
- /// By default, the widget is resized.
- /// \tbd it is experimental and not really working.
- Q_PROPERTY(bool resizeWidget READ resizeWidget WRITE setResizeWidget)
- public:
- typedef QWidget Superclass;
- explicit ctkSizeGrip(QWidget *parent);
- explicit ctkSizeGrip(QWidget* widgetToResize, QWidget *parent);
- virtual ~ctkSizeGrip();
- void setOrientations(Qt::Orientations orientations);
- Qt::Orientations orientations()const;
- /// Set the widget to resize.
- /// Note that the widget is not resized by ctkSizeGrip if resizeWidget is false.
- /// It should be a third party that should resize the widget
- /// (e.g. ctkExpandableWidget).
- /// \sa widgetSizeHint()
- QWidget* widgetToResize()const;
- void setWidgetToResize(QWidget* target);
- /// Return the sizeHint set by the user or programatically using
- /// \a setWidgetSizeHint().
- /// If width or/and height is 0, it means the sizeHint has not been touched
- /// and the original widget sizeHint should be used instead.
- /// When the orientation is solely vertical, the returned width component of
- /// the sizeHint is 0. If the orientations is solely horizontal, the sizeHint
- /// height is 0.
- QSize widgetSizeHint()const;
- void setResizeWidget(bool resize);
- bool resizeWidget()const;
- /// SizeHint of the size grip. It depends on the style in use, but it is
- /// typically a small (e.g. 13x13) square sizehint for
- /// Qt::Horizontal|Qt::Vertical \a orientations and a narrow rectangle for
- /// Qt::Horizontal or Qt::Vertical orientations.
- virtual QSize sizeHint() const;
- public Q_SLOTS:
- /// Expressively change the sizeHint of the widget to resize.
- /// \sa widgetSizeHint()
- void setWidgetSizeHint(QSize sizeHint);
- Q_SIGNALS:
- void widgetSizeHintChanged(QSize sizeHint);
- protected:
- QScopedPointer<ctkSizeGripPrivate> d_ptr;
- virtual void paintEvent(QPaintEvent* paintEvent);
- virtual bool event(QEvent* event);
- virtual void mousePressEvent(QMouseEvent* mouseEvent);
- virtual void mouseMoveEvent(QMouseEvent* mouseEvent);
- virtual void mouseReleaseEvent(QMouseEvent* mouseEvent);
- virtual void mouseDoubleClickEvent(QMouseEvent* mouseEvent);
- private:
- Q_DECLARE_PRIVATE(ctkSizeGrip)
- Q_DISABLE_COPY(ctkSizeGrip)
- };
- #endif // __ctkSizeGrip_h
|