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 --- kate/part/kateviewhelpers.h | 207 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 kate/part/kateviewhelpers.h (limited to 'kate/part/kateviewhelpers.h') diff --git a/kate/part/kateviewhelpers.h b/kate/part/kateviewhelpers.h new file mode 100644 index 000000000..4687365f6 --- /dev/null +++ b/kate/part/kateviewhelpers.h @@ -0,0 +1,207 @@ +/* This file is part of the KDE libraries + Copyright (C) 2002 John Firebaugh + Copyright (C) 2001 Anders Lund + Copyright (C) 2001 Christoph Cullmann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + 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 __KATE_VIEW_HELPERS_H__ +#define __KATE_VIEW_HELPERS_H__ + +#include +#include + +#include +#include +#include +#include +#include + +class KateDocument; +class KateView; +class KateViewInternal; + +namespace Kate { + class Command; +} + +/** + * This class is required because QScrollBar's sliderMoved() signal is + * really supposed to be a sliderDragged() signal... so this way we can capture + * MMB slider moves as well + * + * Also, it adds some usefull indicators on the scrollbar. + */ +class KateScrollBar : public QScrollBar +{ + Q_OBJECT + + public: + KateScrollBar(Orientation orientation, class KateViewInternal *parent, const char* name = 0L); + + inline bool showMarks() { return m_showMarks; }; + inline void setShowMarks(bool b) { m_showMarks = b; update(); }; + + signals: + void sliderMMBMoved(int value); + + protected: + virtual void mousePressEvent(QMouseEvent* e); + virtual void mouseReleaseEvent(QMouseEvent* e); + virtual void mouseMoveEvent (QMouseEvent* e); + virtual void paintEvent(QPaintEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void styleChange(QStyle &oldStyle); + virtual void valueChange(); + virtual void rangeChange(); + + protected slots: + void sliderMaybeMoved(int value); + void marksChanged(); + + private: + void redrawMarks(); + void recomputeMarksPositions(bool forceFullUpdate = false); + void watchScrollBarSize(); + + bool m_middleMouseDown; + + KateView *m_view; + KateDocument *m_doc; + class KateViewInternal *m_viewInternal; + + int m_topMargin; + int m_bottomMargin; + uint m_savVisibleLines; + + QIntDict m_lines; + + bool m_showMarks; +}; + +class KateCmdLine : public KLineEdit +{ + Q_OBJECT + + public: + KateCmdLine (KateView *view); + + private slots: + void slotReturnPressed ( const QString& cmd ); + void hideMe (); + + protected: + void focusInEvent ( QFocusEvent *ev ); + void keyPressEvent( QKeyEvent *ev ); + + private: + void fromHistory( bool up ); + KateView *m_view; + bool m_msgMode; + QString m_oldText; + uint m_histpos; ///< position in the history + uint m_cmdend; ///< the point where a command ends in the text, if we have a valid one. + Kate::Command *m_command; ///< For completing flags/args and interactiveness + class KCompletion *m_oldCompletionObject; ///< save while completing command args. + class KateCmdLnWhatsThis *m_help; +}; + +class KateIconBorder : public QWidget +{ + Q_OBJECT + + public: + KateIconBorder( KateViewInternal* internalView, QWidget *parent ); + + // VERY IMPORTANT ;) + virtual QSize sizeHint() const; + + void updateFont(); + int lineNumberWidth() const; + + void setIconBorderOn( bool enable ); + void setLineNumbersOn( bool enable ); + void setDynWrapIndicators(int state ); + int dynWrapIndicators() const { return m_dynWrapIndicators; } + bool dynWrapIndicatorsOn() const { return m_dynWrapIndicatorsOn; } + void setFoldingMarkersOn( bool enable ); + void toggleIconBorder() { setIconBorderOn( !iconBorderOn() ); } + void toggleLineNumbers() { setLineNumbersOn( !lineNumbersOn() ); } + void toggleFoldingMarkers() { setFoldingMarkersOn( !foldingMarkersOn() ); } + bool iconBorderOn() const { return m_iconBorderOn; } + bool lineNumbersOn() const { return m_lineNumbersOn; } + bool foldingMarkersOn() const { return m_foldingMarkersOn; } + + enum BorderArea { None, LineNumbers, IconBorder, FoldingMarkers }; + BorderArea positionToArea( const QPoint& ) const; + + signals: + void toggleRegionVisibility( unsigned int ); + + private: + void paintEvent( QPaintEvent* ); + void paintBorder (int x, int y, int width, int height); + + void mousePressEvent( QMouseEvent* ); + void mouseMoveEvent( QMouseEvent* ); + void mouseReleaseEvent( QMouseEvent* ); + void mouseDoubleClickEvent( QMouseEvent* ); + + void showMarkMenu( uint line, const QPoint& pos ); + + KateView *m_view; + KateDocument *m_doc; + KateViewInternal *m_viewInternal; + + bool m_iconBorderOn:1; + bool m_lineNumbersOn:1; + bool m_foldingMarkersOn:1; + bool m_dynWrapIndicatorsOn:1; + int m_dynWrapIndicators; + + uint m_lastClickedLine; + + int m_cachedLNWidth; + + int m_maxCharWidth; + + mutable QPixmap m_arrow; + mutable QColor m_oldBackgroundColor; +}; + +class KateViewEncodingAction : public KActionMenu +{ + Q_OBJECT + + public: + KateViewEncodingAction(KateDocument *_doc, KateView *_view, const QString& text, QObject* parent = 0, const char* name = 0); + + ~KateViewEncodingAction(){;}; + + private: + KateDocument* doc; + KateView *view; + + public slots: + void slotAboutToShow(); + + private slots: + void setMode (int mode); +}; + +#endif + +// kate: space-indent on; indent-width 2; replace-tabs on; -- cgit v1.2.1