From ce4a32fe52ef09d8f5ff1dd22c001110902b60a2 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kdeui/kruler.h | 521 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 521 insertions(+) create mode 100644 kdeui/kruler.h (limited to 'kdeui/kruler.h') diff --git a/kdeui/kruler.h b/kdeui/kruler.h new file mode 100644 index 000000000..8d1ae3cc7 --- /dev/null +++ b/kdeui/kruler.h @@ -0,0 +1,521 @@ +/* -*- c++ -*- */ +/* This file is part of the KDE libraries + Copyright (C) 1998 Jörg Habenicht (j.habenicht@europemail.com) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 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 + 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. +*/ + +#ifndef KRULER_H +#define KRULER_H + +#include +#include +#include + +/** + * A ruler widget. + * + * The vertical ruler looks similar to this: + * + *\code + * meters inches + * + * ------ <--- end mark ---> ------ + * -- - + * -- <---little mark---> -- + * -- - + * -- --- + * --- <---medium mark - + * -- -- + * -- tiny mark----> - + * -- ---- + * -- - + * ---- <-----big mark -- + * -- - + * |>-- <--ruler pointer--> |>-- + * + * \endcode + * + * There are tiny marks, little marks, medium marks, and big marks along the + * ruler. + * + * To receive mouse clicks or mouse moves, + * the class has to be overloaded. + * + * For performance reasons, the public methods don't call QWidget::repaint(). + * (Slots do, see documentation below.) + * All the changed settings will be painted once after leaving + * to the main event loop. + * For performance painting the slot methods should be used, + * they do a fast QWidget::repaint() call after changing the values. + * For setting multiple values like minValue(), maxValue(), offset() etc. + * using the public methods is recommended + * so the widget will be painted only once when entering the main event loop. + * + * @short A ruler widget. + * @author Jörg Habenicht + */ +class KDEUI_EXPORT KRuler : public QFrame +{ + Q_OBJECT + Q_PROPERTY( int minValue READ minValue WRITE setMinValue ) + Q_PROPERTY( int maxValue READ maxValue WRITE setMaxValue ) + Q_PROPERTY( int value READ value WRITE setValue ) + Q_PROPERTY( bool showTinyMarks READ showTinyMarks WRITE setShowTinyMarks ) + Q_PROPERTY( bool showLittleMarks READ showLittleMarks WRITE setShowLittleMarks ) + Q_PROPERTY( bool showMediumMarks READ showMediumMarks WRITE setShowMediumMarks ) + Q_PROPERTY( bool showBigMarks READ showBigMarks WRITE setShowBigMarks ) + Q_PROPERTY( bool showPointer READ showPointer WRITE setShowPointer ) + Q_PROPERTY( bool showEndLabel READ showEndLabel WRITE setShowEndLabel ) + Q_PROPERTY( int tinyMarkDistance READ tinyMarkDistance WRITE setTinyMarkDistance ) + Q_PROPERTY( int littleMarkDistance READ littleMarkDistance WRITE setLittleMarkDistance ) + Q_PROPERTY( int mediumMarkDistance READ mediumMarkDistance WRITE setBigMarkDistance ) + Q_PROPERTY( int bigMarkDistance READ bigMarkDistance WRITE setBigMarkDistance ) + Q_PROPERTY( double pixelPerMark READ pixelPerMark WRITE setPixelPerMark ) + Q_PROPERTY( bool lengthFixed READ lengthFixed WRITE setLengthFixed ) + +public: + +/* +#define KRULER_ROTATE_TEST KRULER_ROTATE_TEST +#undef KRULER_ROTATE_TEST +#ifdef KRULER_ROTATE_TEST + double xtrans, ytrans, rotate; +# warning tmporaer variablen eingeschaltet +#endif +*/ + + /** + * The types of units used. + **/ + enum MetricStyle { Custom=0, Pixel, Inch, Millimetres, Centimetres, Metres }; + + /** + * The style (or look) of the ruler. + **/ + // enum PaintStyle { Flat, Raised, Sunken }; + + /** + * Constructs a horizontal ruler. + */ + KRuler(QWidget *parent=0, const char *name=0); + /** + * Constructs a ruler with orientation @p orient. + * + * @p parent, @p name and @p f are passed to QFrame. + * The default look is a raised widget + * but may be changed with the inherited QFrame methods. + * + * @param orient Orientation of the ruler. + * @param parent Will be handed over to QFrame. + * @param name Will be handed over to QFrame. + * @param f Will be handed over to QFrame. + * + **/ + KRuler(Orientation orient, QWidget *parent=0, const char *name=0, + WFlags f=0); + + /** + * Constructs a ruler with orientation @p orient and initial width @p widgetWidth. + * + * The width sets the fixed width of the widget. This is useful if you + * want to draw the ruler bigger or smaller than the default size. + * Note: The size of the marks doesn't change. + * @p parent, @p name and @p f are passed to QFrame. + * + * @param orient Orientation of the ruler. + * @param widgetWidth Fixed width of the widget. + * @param parent Will be handed over to QFrame. + * @param name Will be handed over to QFrame. + * @param f Will be handed over to QFrame. + * + */ + KRuler(Orientation orient, int widgetWidth, QWidget *parent=0, + const char *name=0, WFlags f=0); + + /** + * Destructor. + */ + ~KRuler(); + + /** + * Sets the minimal value of the ruler pointer (default is 0). + * + * This method calls update() so that the widget is painted after leaving + * to the main event loop. + * + **/ + void setMinValue(int); + + /** + * Returns the minimal value of the ruler pointer. + **/ + inline int minValue() const; + + /** + * Sets the maximum value of the ruler pointer (default is 100). + * + * This method calls update() so that the widget is painted after leaving + * to the main event loop. + */ + void setMaxValue(int); + + /** + * Returns the maximal value of the ruler pointer. + */ + inline int maxValue() const; + + /** + * Sets minimum and maximum values of the ruler pointer. + * + * This method calls update() so that the widget is painted after leaving + * to the main event loop. + */ + void setRange(int min, int max); + + /** + * Sets the value of the ruler pointer. + * + * The value is indicated by painting the ruler pointer at the + * corresponding position. + * This method calls update() so that the widget is painted after leaving + * to the main event loop. + */ + void setValue(int); + inline int value() const; + + /** + * Sets the distance between tiny marks. + * + * This is mostly used in the English system (inches) with distance of 1. + */ + void setTinyMarkDistance(int); + /** + * Returns the distance between tiny marks. + **/ + inline int tinyMarkDistance() const; + + /** + * Sets the distance between little marks. + * + * The default value is 1 in the metric system and 2 in the English (inches) system. + */ + void setLittleMarkDistance(int); + + /** + * Returns the distance between little marks. + */ + inline int littleMarkDistance() const; + + /** + * Sets the distance between medium marks. + * + * For English (inches) styles it defaults to twice the little mark distance. + * For metric styles it defaults to five times the little mark distance. + **/ + void setMediumMarkDistance(int); + inline int mediumMarkDistance() const; + + /** + * Sets distance between big marks. + * + * For English (inches) or metric styles it is twice the medium mark distance. + **/ + void setBigMarkDistance(int); + /** + * Returns the distance between big marks. + **/ + inline int bigMarkDistance() const; + + /** + * Shows/hides tiny marks. + **/ + void setShowTinyMarks(bool); + bool showTinyMarks() const; + /** + * Shows/hides little marks. + **/ + void setShowLittleMarks(bool); + bool showLittleMarks() const; + /** + * Shows/hides medium marks. + **/ + void setShowMediumMarks(bool); + bool showMediumMarks() const; + /** + * Shows/hides big marks. + **/ + void setShowBigMarks(bool); + bool showBigMarks() const; + /** + * Shows/hides end marks. + **/ + void setShowEndMarks(bool); + bool showEndMarks() const; + /** + * Shows/hides the pointer. + */ + void setShowPointer(bool); + bool showPointer() const; + + //#### KDE4: The next 3 need to go. + /** + * @deprecated + * This method has no effect other than an update. Do not use. + **/ + void setValuePerLittleMark(int) KDE_DEPRECATED; + + /** + * @deprecated + * This method has no effect other than an update. Do not use. + **/ + void setValuePerMediumMark(int) KDE_DEPRECATED; + + /** + * @deprecated + * This method has no effect other than an update. Do not use. + */ + void setValuePerBigMark(int) KDE_DEPRECATED; + + /** + * Show/hide number values of the little marks. + * + * Default is @p false. + **/ + // void setShowLittleMarkLabel(bool); + + /** + * Show/hide number values of the medium marks. + * + * Default is @p false. + **/ + // void setShowMediumMarkLabel(bool); + + /** + * Show/hide number values of the big marks. + * + * Default is @p false. + **/ + // void showBigMarkLabel(bool); + + /** + * Show/hide number values of the end marks. + * + * Default is @p false. + **/ + void setShowEndLabel(bool); + bool showEndLabel() const; + + /** + * Sets the label this is drawn at the beginning of the visible part + * of the ruler to @p label + **/ + void setEndLabel(const QString&); + QString endLabel() const; + + /** + * Sets up the necessary tasks for the provided styles. + * + * A convenience method. + **/ + void setRulerMetricStyle(KRuler::MetricStyle); + + /** + * Sets the number of pixels between two base marks. + * + * Calling this method stretches or shrinks your ruler. + * + * For pixel display ( MetricStyle) the value is 10.0 marks + * per pixel ;-) + * For English (inches) it is 9.0, and for centimetres ~2.835 -> 3.0 . + * If you want to magnify your part of display, you have to + * adjust the mark distance @p here. + * Notice: The double type is only supported to give the possibility + * of having some double values. + * It should be used with care. Using values below 10.0 + * shows visible jumps of markpositions (e.g. 2.345). + * Using whole numbers is highly recommended. + * To use @p int values use setPixelPerMark((int)your_int_value); + * default: 1 mark per 10 pixels + */ + void setPixelPerMark(double rate); + + /** + * Returns the number of pixels between two base marks. + **/ + inline double pixelPerMark() const; + + /** + * Sets the length of the ruler, i.e. the difference between + * the begin mark and the end mark of the ruler. + * + * Same as (width() - offset()) + * + * when the length is not locked, it gets adjusted with the + * length of the widget. + */ + void setLength(int); + int length() const; + + /** + * Locks the length of the ruler, i.e. the difference between + * the two end marks doesn't change when the widget is resized. + * + * @param fix fixes the length, if true + */ + void setLengthFixed(bool fix); + bool lengthFixed() const; + + /** + * Sets the number of pixels by which the ruler may slide up or left. + * The number of pixels moved is realive to the previous position. + * The Method makes sense for updating a ruler, which is working with + * a scrollbar. + * + * This doesn't affect the position of the ruler pointer. + * Only the visible part of the ruler is moved. + * + * @param count Number of pixel moving up or left relative to the previous position + **/ + void slideUp(int count = 1); + + /** + * Sets the number of pixels by which the ruler may slide down or right. + * The number of pixels moved is realive to the previous position. + * The Method makes sense for updating a ruler, which is working with + * a scrollbar. + * + * This doesn't affect the position of the ruler pointer. + * Only the visible part of the ruler is moved. + * + * @param count Number of pixel moving up or left relative to the previous position + **/ + void slideDown(int count = 1); + + /** + * Sets the ruler slide offset. + * + * This is like slideup() or slidedown() with an absolute offset + * from the start of the ruler. + * + * @param offset Number of pixel to move the ruler up or left from the beginning + **/ + void setOffset(int offset); + + /** + * Returns the current ruler offset. + **/ + inline int offset() const; + + int endOffset() const; + +public slots: + + /** + * Sets the pointer to a new position. + * + * The offset is NOT updated. + * QWidget::repaint() is called afterwards. + **/ + void slotNewValue(int); + + /** + * Sets the ruler marks to a new position. + * + * The pointer is NOT updated. + * QWidget::repaint() is called afterwards. + **/ + void slotNewOffset(int); + + void slotEndOffset(int); + +protected: + virtual void drawContents(QPainter *); + +private: + void init(); + + QRangeControl range; + Orientation dir; + int tmDist; + int lmDist; + int mmDist; + int bmDist; + int offset_; + bool showtm; /* show tiny, little, medium, big, endmarks */ + bool showlm; + bool showmm; + bool showbm; + bool showem; + + // #### KDE4 : All value* and show* below should be removed, unused + + int valuelm; /* value per little, medium, big mark */ + int valuemm; + int valuebm; + bool showValuelm; + bool showValuemm; + bool showValuebm; + + double ppm; /* pixel per mark */ + + QString endlabel; + +protected: + virtual void virtual_hook( int id, void* data ); +private: + class KRulerPrivate; + KRulerPrivate *d; +}; + + +int +KRuler::minValue() const +{ return range.minValue(); } + +int +KRuler::maxValue() const +{ return range.maxValue(); } + +int +KRuler::value() const +{ return range.value(); } + +int +KRuler::tinyMarkDistance() const +{ return tmDist; } + +int +KRuler::littleMarkDistance() const +{ return lmDist; } + +int +KRuler::mediumMarkDistance() const +{ return mmDist; } + +int +KRuler::bigMarkDistance() const +{ return bmDist; } + +double +KRuler::pixelPerMark() const +{ return ppm; } + +int +KRuler::offset() const +{ return offset_; } + +#endif -- cgit v1.2.1