Mercurial > hg > easyhg
diff src/squeezedlabel.h @ 523:d869e6a18f63
Make the text labels in the work status area squeezable for small window sizes. Fixes #329
author | Chris Cannam |
---|---|
date | Tue, 15 Nov 2011 16:02:18 +0000 |
parents | |
children | 533519ebc0cb |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/squeezedlabel.h Tue Nov 15 16:02:18 2011 +0000 @@ -0,0 +1,120 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + EasyMercurial + + Based on HgExplorer by Jari Korhonen + Copyright (c) 2010 Jari Korhonen + Copyright (c) 2011 Chris Cannam + Copyright (c) 2011 Queen Mary, University of London + + 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. See the file + COPYING included with this distribution for more information. +*/ + +/* + This file adapted from Rosegarden, a sequencer and musical + notation editor. Copyright 2000-2011 the Rosegarden development + team. + + Adapted from KDE 4.2.0, this code originally Copyright (c) 2000 + Ronny Standtke. +*/ + +#ifndef _SQUEEZED_LABEL_H_ +#define _SQUEEZED_LABEL_H_ + +#include <QLabel> + +class SqueezedLabelPrivate; + +/** + * @short A replacement for QLabel that squeezes its text + * + * A label class that squeezes its text into the label + * + * If the text is too long to fit into the label it is divided into + * remaining left and right parts which are separated by three dots. + */ + +class SqueezedLabel : public QLabel +{ + Q_OBJECT + Q_PROPERTY(Qt::TextElideMode textElideMode READ textElideMode WRITE setTextElideMode) + +public: + /** + * Default constructor. + */ + explicit SqueezedLabel(QWidget *parent = 0); + explicit SqueezedLabel(const QString &text, QWidget *parent = 0); + + virtual ~SqueezedLabel(); + + virtual QSize minimumSizeHint() const; + virtual QSize sizeHint() const; + /** + * Overridden for internal reasons; the API remains unaffected. + */ + virtual void setAlignment(Qt::Alignment); + + /** + * Returns the text elide mode. + */ + Qt::TextElideMode textElideMode() const; + + /** + * Sets the text elide mode. + * @param mode The text elide mode. + */ + void setTextElideMode(Qt::TextElideMode mode); + +public Q_SLOTS: + /** + * Sets the text. Note that this is not technically a reimplementation of QLabel::setText(), + * which is not virtual (in Qt 4.3). Therefore, you may need to cast the object to + * SqueezedLabel in some situations: + * \Example + * \code + * SqueezedLabel* squeezed = new SqueezedLabel("text", parent); + * QLabel* label = squeezed; + * label->setText("new text"); // this will not work + * squeezed->setText("new text"); // works as expected + * static_cast<SqueezedLabel*>(label)->setText("new text"); // works as expected + * \endcode + * @param mode The new text. + */ + void setText(const QString &text); + /** + * Clears the text. Same remark as above. + * + */ + void clear(); + +protected: + /** + * Called when widget is resized + */ + void resizeEvent(QResizeEvent *); + /** + * \reimp + */ + void contextMenuEvent(QContextMenuEvent*); + /** + * does the dirty work + */ + void squeezeTextToLabel(); + +private slots: + void _k_copyFullText(); + +private: + QString fullText; + Qt::TextElideMode elideMode; +}; + + +#endif