• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

messageviewer

  • sources
  • kde-4.14
  • kdepim
  • messageviewer
  • findbar
findbarbase.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2010 Torgny Nyblom <nyblom@kde.org>
2  * Copyright (C) 2010-2015 Laurent Montel <montel@kde.org>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public License
15  * along with this library; see the file COPYING.LIB. If not, write to
16  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  */
19 
20 #include "findbarbase.h"
21 #include "pimcommon/widgets/lineeditwithcompleter.h"
22 
23 #include <kicon.h>
24 #include <klocale.h>
25 #include <kpushbutton.h>
26 #include <kmessagebox.h>
27 #include <KColorScheme>
28 
29 #include <QtCore/QTimer>
30 #include <QLabel>
31 #include <QLayout>
32 #include <QMenu>
33 #include <QToolButton>
34 #include <QEvent>
35 #include <QKeyEvent>
36 
37 using namespace MessageViewer;
38 
39 FindBarBase::FindBarBase( QWidget * parent )
40  : QWidget( parent )
41 {
42  QHBoxLayout * lay = new QHBoxLayout( this );
43  lay->setMargin( 2 );
44 
45  QToolButton * closeBtn = new QToolButton( this );
46  closeBtn->setObjectName(QLatin1String("close"));
47  closeBtn->setIcon( KIcon( QLatin1String("dialog-close") ) );
48  closeBtn->setIconSize( QSize( 16, 16 ) );
49  closeBtn->setToolTip( i18n( "Close" ) );
50 
51 #ifndef QT_NO_ACCESSIBILITY
52  closeBtn->setAccessibleName( i18n( "Close" ) );
53 #endif
54 
55  closeBtn->setAutoRaise( true );
56  lay->addWidget( closeBtn );
57 
58  QLabel * label = new QLabel( i18nc( "Find text", "F&ind:" ), this );
59  lay->addWidget( label );
60 
61  mSearch = new PimCommon::LineEditWithCompleter( this );
62  mSearch->setObjectName(QLatin1String("searchline"));
63  mSearch->setToolTip( i18n( "Text to search for" ) );
64  mSearch->setClearButtonShown( true );
65  label->setBuddy( mSearch );
66  lay->addWidget( mSearch );
67 
68  mFindNextBtn = new QPushButton( KIcon( QLatin1String("go-down-search") ), i18nc( "Find and go to the next search match", "Next" ), this );
69  mFindNextBtn->setToolTip( i18n( "Jump to next match" ) );
70  mFindNextBtn->setObjectName(QLatin1String("findnext"));
71  lay->addWidget( mFindNextBtn );
72  mFindNextBtn->setEnabled( false );
73 
74  mFindPrevBtn = new QPushButton( KIcon( QLatin1String("go-up-search") ), i18nc( "Find and go to the previous search match", "Previous" ), this );
75  mFindPrevBtn->setToolTip( i18n( "Jump to previous match" ) );
76  mFindPrevBtn->setObjectName(QLatin1String("findprevious"));
77  lay->addWidget( mFindPrevBtn );
78  mFindPrevBtn->setEnabled( false );
79 
80  QPushButton * optionsBtn = new QPushButton( this );
81  optionsBtn->setText( i18n( "Options" ) );
82  optionsBtn->setToolTip( i18n( "Modify search behavior" ) );
83  mOptionsMenu = new QMenu( optionsBtn );
84  mCaseSensitiveAct = mOptionsMenu->addAction( i18n( "Case sensitive" ) );
85  mCaseSensitiveAct->setCheckable( true );
86 
87  optionsBtn->setMenu( mOptionsMenu );
88  lay->addWidget( optionsBtn );
89 
90  mStatus = new QLabel;
91  mStatus->setObjectName(QLatin1String("status"));
92  QFontMetrics fm(mStatus->font());
93  mNotFoundString = i18n("Phrase not found");
94  mStatus->setFixedWidth(fm.width(mNotFoundString));
95  lay->addWidget(mStatus);
96 
97  connect( closeBtn, SIGNAL(clicked()), this, SLOT(closeBar()) );
98  connect( mFindNextBtn, SIGNAL(clicked()), this, SLOT(findNext()) );
99  connect( mFindPrevBtn, SIGNAL(clicked()), this, SLOT(findPrev()) );
100  connect( mCaseSensitiveAct, SIGNAL(toggled(bool)), this, SLOT(caseSensitivityChanged(bool)) );
101  connect( mSearch, SIGNAL(textChanged(QString)), this, SLOT(autoSearch(QString)) );
102  connect( mSearch, SIGNAL(clearButtonClicked()), this, SLOT(slotClearSearch()) );
103  setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Fixed ) );
104  lay->addStretch();
105  hide();
106 }
107 
108 FindBarBase::~FindBarBase()
109 {
110 }
111 
112 QMenu* FindBarBase::optionsMenu()
113 {
114  return mOptionsMenu;
115 }
116 
117 QString FindBarBase::text() const
118 {
119  return mSearch->text();
120 }
121 
122 void FindBarBase::setText( const QString&text )
123 {
124  mSearch->setText( text );
125 }
126 
127 void FindBarBase::focusAndSetCursor()
128 {
129  setFocus();
130  mStatus->clear();
131  mSearch->selectAll();
132  mSearch->setFocus();
133 }
134 
135 void FindBarBase::slotClearSearch()
136 {
137  clearSelections();
138 }
139 
140 void FindBarBase::autoSearch( const QString& str )
141 {
142  const bool isNotEmpty = ( !str.isEmpty() );
143  mFindPrevBtn->setEnabled( isNotEmpty );
144  mFindNextBtn->setEnabled( isNotEmpty );
145  if ( isNotEmpty )
146  QTimer::singleShot( 0, this, SLOT(slotSearchText()) );
147  else
148  clearSelections();
149 }
150 
151 void FindBarBase::slotSearchText( bool backward, bool isAutoSearch )
152 {
153  searchText( backward, isAutoSearch );
154 }
155 
156 void FindBarBase::setFoundMatch( bool match )
157 {
158 #ifndef QT_NO_STYLE_STYLESHEET
159  QString styleSheet;
160 
161  if (!mSearch->text().isEmpty()) {
162  if (mNegativeBackground.isEmpty()) {
163  KStatefulBrush bgBrush(KColorScheme::View, KColorScheme::PositiveBackground);
164  mPositiveBackground = QString::fromLatin1("QLineEdit{ background-color:%1 }").arg(bgBrush.brush(mSearch).color().name());
165  bgBrush = KStatefulBrush(KColorScheme::View, KColorScheme::NegativeBackground);
166  mNegativeBackground = QString::fromLatin1("QLineEdit{ background-color:%1 }").arg(bgBrush.brush(mSearch).color().name());
167  }
168  if (match) {
169  styleSheet = mPositiveBackground;
170  mStatus->clear();
171  } else {
172  styleSheet = mNegativeBackground;
173  mStatus->setText(mNotFoundString);
174  }
175  }
176  mSearch->setStyleSheet(styleSheet);
177 #endif
178 
179 }
180 
181 void FindBarBase::searchText( bool backward, bool isAutoSearch )
182 {
183  Q_UNUSED( backward );
184  Q_UNUSED( isAutoSearch );
185 }
186 
187 void FindBarBase::addToCompletion(const QString &text)
188 {
189  KCompletion *comp = mSearch->completionObject();
190  comp->addItem(text);
191 }
192 
193 void FindBarBase::findNext()
194 {
195  searchText( false, false );
196  addToCompletion(mLastSearchStr);
197 }
198 
199 void FindBarBase::findPrev()
200 {
201  searchText( true, false );
202  addToCompletion(mLastSearchStr);
203 }
204 
205 void FindBarBase::caseSensitivityChanged(bool b)
206 {
207  updateSensitivity( b );
208 }
209 
210 void FindBarBase::updateSensitivity( bool )
211 {
212 }
213 
214 void FindBarBase::slotHighlightAllChanged(bool b)
215 {
216  updateHighLight(b);
217 }
218 
219 void FindBarBase::updateHighLight( bool )
220 {
221 }
222 
223 void FindBarBase::clearSelections()
224 {
225  setFoundMatch( false );
226 }
227 
228 void FindBarBase::closeBar()
229 {
230  // Make sure that all old searches are cleared
231  mSearch->clear();
232  clearSelections();
233  mSearch->clearFocus();
234  Q_EMIT hideFindBar();
235 }
236 
237 bool FindBarBase::event(QEvent* e)
238 {
239  // Close the bar when pressing Escape.
240  // Not using a QShortcut for this because it could conflict with
241  // window-global actions (e.g. Emil Sedgh binds Esc to "close tab").
242  // With a shortcut override we can catch this before it gets to kactions.
243  const bool shortCutOverride = (e->type() == QEvent::ShortcutOverride);
244  if ( shortCutOverride || e->type() == QEvent::KeyPress ) {
245  QKeyEvent* kev = static_cast<QKeyEvent* >(e);
246  if (kev->key() == Qt::Key_Escape) {
247  if ( shortCutOverride ) {
248  e->accept();
249  return true;
250  }
251  e->accept();
252  closeBar();
253  return true;
254  } else if ( kev->key() == Qt::Key_Enter ||
255  kev->key() == Qt::Key_Return ) {
256  e->accept();
257  if ( shortCutOverride ) {
258  return true;
259  }
260  if (mSearch->text().isEmpty())
261  return true;
262  if ( kev->modifiers() & Qt::ShiftModifier )
263  findPrev();
264  else if ( kev->modifiers() == Qt::NoModifier )
265  findNext();
266  return true;
267  }
268  }
269  return QWidget::event(e);
270 }
271 
MessageViewer::FindBarBase::updateSensitivity
virtual void updateSensitivity(bool)
Definition: findbarbase.cpp:210
QPushButton::setMenu
void setMenu(QMenu *menu)
QWidget::styleSheet
QString styleSheet() const
QEvent
QWidget
MessageViewer::FindBarBase::searchText
virtual void searchText(bool backward, bool isAutoSearch)
Definition: findbarbase.cpp:181
QKeyEvent::modifiers
Qt::KeyboardModifiers modifiers() const
QEvent::type
Type type() const
MessageViewer::FindBarBase::addToCompletion
void addToCompletion(const QString &text)
Definition: findbarbase.cpp:187
MessageViewer::FindBarBase::clearSelections
virtual void clearSelections()
Definition: findbarbase.cpp:223
QWidget::setFixedWidth
void setFixedWidth(int w)
MessageViewer::FindBarBase::autoSearch
void autoSearch(const QString &str)
Definition: findbarbase.cpp:140
MessageViewer::FindBarBase::setFoundMatch
void setFoundMatch(bool match)
Definition: findbarbase.cpp:156
MessageViewer::FindBarBase::closeBar
void closeBar()
Definition: findbarbase.cpp:228
MessageViewer::FindBarBase::findPrev
void findPrev()
Definition: findbarbase.cpp:199
MessageViewer::FindBarBase::mLastSearchStr
QString mLastSearchStr
Definition: findbarbase.h:74
MessageViewer::FindBarBase::hideFindBar
void hideFindBar()
QSizePolicy
QMenu::addAction
void addAction(QAction *action)
MessageViewer::FindBarBase::slotSearchText
void slotSearchText(bool backward=false, bool isAutoSearch=true)
Definition: findbarbase.cpp:151
QHBoxLayout
MessageViewer::FindBarBase::event
virtual bool event(QEvent *e)
Definition: findbarbase.cpp:237
QFontMetrics
QLabel::clear
void clear()
MessageViewer::FindBarBase::~FindBarBase
virtual ~FindBarBase()
Definition: findbarbase.cpp:108
MessageViewer::FindBarBase::mNegativeBackground
QString mNegativeBackground
Definition: findbarbase.h:73
QAbstractButton::setIcon
void setIcon(const QIcon &icon)
MessageViewer::FindBarBase::FindBarBase
FindBarBase(QWidget *parent=0)
Definition: findbarbase.cpp:39
MessageViewer::FindBarBase::mFindPrevBtn
QPushButton * mFindPrevBtn
Definition: findbarbase.h:78
QWidget::setAccessibleName
void setAccessibleName(const QString &name)
MessageViewer::FindBarBase::mPositiveBackground
QString mPositiveBackground
Definition: findbarbase.h:72
QLabel::setBuddy
void setBuddy(QWidget *buddy)
MessageViewer::FindBarBase::mNotFoundString
QString mNotFoundString
Definition: findbarbase.h:71
QWidget::setEnabled
void setEnabled(bool)
QBoxLayout::addWidget
void addWidget(QWidget *widget, int stretch, QFlags< Qt::AlignmentFlag > alignment)
MessageViewer::FindBarBase::mStatus
QLabel * mStatus
Definition: findbarbase.h:81
QWidget::setFocus
void setFocus()
QAbstractButton::setIconSize
void setIconSize(const QSize &size)
QObject::setObjectName
void setObjectName(const QString &name)
QString::isEmpty
bool isEmpty() const
MessageViewer::FindBarBase::mSearch
PimCommon::LineEditWithCompleter * mSearch
Definition: findbarbase.h:75
MessageViewer::FindBarBase::mFindNextBtn
QPushButton * mFindNextBtn
Definition: findbarbase.h:79
QLabel::setText
void setText(const QString &)
QString
QWidget::hide
void hide()
QToolButton::setAutoRaise
void setAutoRaise(bool enable)
QLayout::setMargin
void setMargin(int margin)
QWidget::setSizePolicy
void setSizePolicy(QSizePolicy)
QToolButton
QKeyEvent::key
int key() const
QMenu
QEvent::accept
void accept()
QSize
QWidget::font
font
QAction::setCheckable
void setCheckable(bool)
QKeyEvent
MessageViewer::FindBarBase::setText
void setText(const QString &text)
Definition: findbarbase.cpp:122
MessageViewer::FindBarBase::mOptionsMenu
QMenu * mOptionsMenu
Definition: findbarbase.h:80
QLatin1String
QBoxLayout::addStretch
void addStretch(int stretch)
MessageViewer::FindBarBase::mCaseSensitiveAct
QAction * mCaseSensitiveAct
Definition: findbarbase.h:76
QAbstractButton::setText
void setText(const QString &text)
QString::fromLatin1
QString fromLatin1(const char *str, int size)
QPushButton
QWidget::setToolTip
void setToolTip(const QString &)
MessageViewer::FindBarBase::findNext
void findNext()
Definition: findbarbase.cpp:193
findbarbase.h
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
MessageViewer::FindBarBase::optionsMenu
QMenu * optionsMenu()
Definition: findbarbase.cpp:112
QLabel
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
QWidget::event
virtual bool event(QEvent *event)
MessageViewer::FindBarBase::focusAndSetCursor
void focusAndSetCursor()
Definition: findbarbase.cpp:127
MessageViewer::FindBarBase::text
QString text() const
Definition: findbarbase.cpp:117
QTimer::singleShot
singleShot
MessageViewer::FindBarBase::updateHighLight
virtual void updateHighLight(bool)
Definition: findbarbase.cpp:219
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:32:45 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

messageviewer

Skip menu "messageviewer"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer
  • pimprint

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal