mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	clang-format doesn't appear to reindent multi line #define statements correctly - so this hopefully will clean those up. The included whitespace corrections to the code should stay in place when using the updated tool. This includes cleaning up some multi-line comments that were messed up the last time around as well as a few other minor changes. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
		
			
				
	
	
		
			238 lines
		
	
	
	
		
			6.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			238 lines
		
	
	
	
		
			6.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* This file is part of the KDE libraries
 | |
|  *
 | |
|  * Copyright (c) 2011 Aurélien Gâteau <agateau@kde.org>
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2.1 of the License, or (at your option) any later version.
 | |
|  *
 | |
|  * 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, write to the Free Software
 | |
|  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | |
|  * 02110-1301  USA
 | |
|  */
 | |
| #ifndef KMESSAGEWIDGET_H
 | |
| #define KMESSAGEWIDGET_H
 | |
| 
 | |
| #include <QFrame>
 | |
| 
 | |
| class KMessageWidgetPrivate;
 | |
| 
 | |
| /**
 | |
|  * @short A widget to provide feedback or propose opportunistic interactions.
 | |
|  *
 | |
|  * KMessageWidget can be used to provide inline positive or negative
 | |
|  * feedback, or to implement opportunistic interactions.
 | |
|  *
 | |
|  * As a feedback widget, KMessageWidget provides a less intrusive alternative
 | |
|  * to "OK Only" message boxes. If you do not need the modalness of KMessageBox,
 | |
|  * consider using KMessageWidget instead.
 | |
|  *
 | |
|  * <b>Negative feedback</b>
 | |
|  *
 | |
|  * The KMessageWidget can be used as a secondary indicator of failure: the
 | |
|  * first indicator is usually the fact the action the user expected to happen
 | |
|  * did not happen.
 | |
|  *
 | |
|  * Example: User fills a form, clicks "Submit".
 | |
|  *
 | |
|  * @li Expected feedback: form closes
 | |
|  * @li First indicator of failure: form stays there
 | |
|  * @li Second indicator of failure: a KMessageWidget appears on top of the
 | |
|  * form, explaining the error condition
 | |
|  *
 | |
|  * When used to provide negative feedback, KMessageWidget should be placed
 | |
|  * close to its context. In the case of a form, it should appear on top of the
 | |
|  * form entries.
 | |
|  *
 | |
|  * KMessageWidget should get inserted in the existing layout. Space should not
 | |
|  * be reserved for it, otherwise it becomes "dead space", ignored by the user.
 | |
|  * KMessageWidget should also not appear as an overlay to prevent blocking
 | |
|  * access to elements the user needs to interact with to fix the failure.
 | |
|  *
 | |
|  * <b>Positive feedback</b>
 | |
|  *
 | |
|  * KMessageWidget can be used for positive feedback but it shouldn't be
 | |
|  * overused. It is often enough to provide feedback by simply showing the
 | |
|  * results of an action.
 | |
|  *
 | |
|  * Examples of acceptable uses:
 | |
|  *
 | |
|  * @li Confirm success of "critical" transactions
 | |
|  * @li Indicate completion of background tasks
 | |
|  *
 | |
|  * Example of inadapted uses:
 | |
|  *
 | |
|  * @li Indicate successful saving of a file
 | |
|  * @li Indicate a file has been successfully removed
 | |
|  *
 | |
|  * <b>Opportunistic interaction</b>
 | |
|  *
 | |
|  * Opportunistic interaction is the situation where the application suggests to
 | |
|  * the user an action he could be interested in perform, either based on an
 | |
|  * action the user just triggered or an event which the application noticed.
 | |
|  *
 | |
|  * Example of acceptable uses:
 | |
|  *
 | |
|  * @li A browser can propose remembering a recently entered password
 | |
|  * @li A music collection can propose ripping a CD which just got inserted
 | |
|  * @li A chat application may notify the user a "special friend" just connected
 | |
|  *
 | |
|  * @author Aurélien Gâteau <agateau@kde.org>
 | |
|  * @since 4.7
 | |
|  */
 | |
| class KMessageWidget : public QFrame {
 | |
| 	Q_OBJECT
 | |
| 	Q_ENUMS(MessageType)
 | |
| 
 | |
| 	Q_PROPERTY(QString text READ text WRITE setText)
 | |
| 	Q_PROPERTY(bool wordWrap READ wordWrap WRITE setWordWrap)
 | |
| 	Q_PROPERTY(bool closeButtonVisible READ isCloseButtonVisible WRITE setCloseButtonVisible)
 | |
| 	Q_PROPERTY(MessageType messageType READ messageType WRITE setMessageType)
 | |
| 	Q_PROPERTY(QIcon icon READ icon WRITE setIcon)
 | |
| public:
 | |
| 	enum MessageType {
 | |
| 		Positive,
 | |
| 		Information,
 | |
| 		Warning,
 | |
| 		Error
 | |
| 	};
 | |
| 
 | |
| 	/**
 | |
| 	 * Constructs a KMessageWidget with the specified parent.
 | |
| 	 */
 | |
| 	explicit KMessageWidget(QWidget *parent = 0);
 | |
| 
 | |
| 	explicit KMessageWidget(const QString &text, QWidget *parent = 0);
 | |
| 
 | |
| 	~KMessageWidget();
 | |
| 
 | |
| 	QString text() const;
 | |
| 
 | |
| 	bool wordWrap() const;
 | |
| 
 | |
| 	bool isCloseButtonVisible() const;
 | |
| 
 | |
| 	MessageType messageType() const;
 | |
| 
 | |
| 	void addAction(QAction *action);
 | |
| 
 | |
| 	void removeAction(QAction *action);
 | |
| 
 | |
| 	QSize sizeHint() const;
 | |
| 
 | |
| 	QSize minimumSizeHint() const;
 | |
| 
 | |
| 	int heightForWidth(int width) const;
 | |
| 
 | |
| 	/**
 | |
| 	 * The icon shown on the left of the text. By default, no icon is shown.
 | |
| 	 * @since 4.11
 | |
| 	 */
 | |
| 	QIcon icon() const;
 | |
| 
 | |
| public
 | |
| Q_SLOTS:
 | |
| 	void setText(const QString &text);
 | |
| 
 | |
| 	void setWordWrap(bool wordWrap);
 | |
| 
 | |
| 	void setCloseButtonVisible(bool visible);
 | |
| 
 | |
| 	void setMessageType(KMessageWidget::MessageType type);
 | |
| 
 | |
| 	/**
 | |
| 	 * Show the widget using an animation, unless
 | |
| 	 * KGlobalSettings::graphicsEffectLevel() does not allow simple effects.
 | |
| 	 */
 | |
| 	void animatedShow();
 | |
| 
 | |
| 	/**
 | |
| 	 * Hide the widget using an animation, unless
 | |
| 	 * KGlobalSettings::graphicsEffectLevel() does not allow simple effects.
 | |
| 	 */
 | |
| 	void animatedHide();
 | |
| 
 | |
| 	/**
 | |
| 	 * Define an icon to be shown on the left of the text
 | |
| 	 * @since 4.11
 | |
| 	 */
 | |
| 	void setIcon(const QIcon &icon);
 | |
| 
 | |
| Q_SIGNALS:
 | |
| 	/**
 | |
| 	 * This signal is emitted when the user clicks a link in the text label.
 | |
| 	 * The URL referred to by the href anchor is passed in contents.
 | |
| 	 * @param contents text of the href anchor
 | |
| 	 * @see QLabel::linkActivated()
 | |
| 	 * @since 4.10
 | |
| 	 */
 | |
| 	void linkActivated(const QString &contents);
 | |
| 
 | |
| 	/**
 | |
| 	 * This signal is emitted when the user hovers over a link in the text label.
 | |
| 	 * The URL referred to by the href anchor is passed in contents.
 | |
| 	 * @param contents text of the href anchor
 | |
| 	 * @see QLabel::linkHovered()
 | |
| 	 * @since 4.11
 | |
| 	 */
 | |
| 	void linkHovered(const QString &contents);
 | |
| 
 | |
| protected:
 | |
| 	void paintEvent(QPaintEvent *event);
 | |
| 
 | |
| 	bool event(QEvent *event);
 | |
| 
 | |
| 	void resizeEvent(QResizeEvent *event);
 | |
| 
 | |
| 	void showEvent(QShowEvent *event);
 | |
| 
 | |
| private:
 | |
| 	KMessageWidgetPrivate *const d;
 | |
| 	friend class KMessageWidgetPrivate;
 | |
| 
 | |
| 	Q_PRIVATE_SLOT(d, void slotTimeLineChanged(qreal))
 | |
| 	Q_PRIVATE_SLOT(d, void slotTimeLineFinished())
 | |
| };
 | |
| 
 | |
| //---------------------------------------------------------------------
 | |
| // KMessageWidgetPrivate
 | |
| //---------------------------------------------------------------------
 | |
| class QLabel;
 | |
| class QToolButton;
 | |
| class QTimeLine;
 | |
| #include <QIcon>
 | |
| 
 | |
| class KMessageWidgetPrivate {
 | |
| public:
 | |
| 	void init(KMessageWidget *);
 | |
| 
 | |
| 	KMessageWidget *q;
 | |
| 	QFrame *content;
 | |
| 	QLabel *iconLabel;
 | |
| 	QLabel *textLabel;
 | |
| 	QToolButton *closeButton;
 | |
| 	QTimeLine *timeLine;
 | |
| 	QIcon icon;
 | |
| 
 | |
| 	KMessageWidget::MessageType messageType;
 | |
| 	bool wordWrap;
 | |
| 	QList<QToolButton *> buttons;
 | |
| 	QPixmap contentSnapShot;
 | |
| 
 | |
| 	void createLayout();
 | |
| 	void updateSnapShot();
 | |
| 	void updateLayout();
 | |
| 	void slotTimeLineChanged(qreal);
 | |
| 	void slotTimeLineFinished();
 | |
| 
 | |
| 	int bestContentHeight() const;
 | |
| };
 | |
| 
 | |
| #endif // KMESSAGEWIDGET_H
 |