• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdelibs-4.14.38 API Reference
  • KDE Home
  • Contact Us
 

KParts

  • kparts
statusbarextension.cpp
Go to the documentation of this file.
1/* This file is part of the KDE project
2 Copyright (C) 2003 Daniel Molkentin <molkentin@kde.org>
3 Copyright (C) 2003 David Faure <faure@kde.org>
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
19 */
20
21#include "statusbarextension.h"
22
23#include <QtCore/QObject>
24
25#include <kstatusbar.h>
26#include <kmainwindow.h>
27#include <kdebug.h>
28#include <kglobal.h>
29#include <kparts/part.h>
30#include <kparts/event.h>
31
32using namespace KParts;
33
35// Helper Classes
37
38class KParts::StatusBarItem {
39 public:
40 StatusBarItem() // for QValueList
41 : m_widget(0), m_visible(false)
42 {}
43 StatusBarItem( QWidget * widget, int stretch, bool permanent )
44 : m_widget(widget), m_stretch(stretch), m_permanent(permanent), m_visible(false)
45 {}
46
47 QWidget * widget() const { return m_widget; }
48
49 void ensureItemShown( KStatusBar * sb )
50 {
51 if ( m_widget && !m_visible )
52 {
53 if ( m_permanent )
54 sb->addPermanentWidget( m_widget, m_stretch );
55 else
56 sb->addWidget( m_widget, m_stretch );
57 m_visible = true;
58 m_widget->show();
59 }
60 }
61 void ensureItemHidden( KStatusBar * sb )
62 {
63 if ( m_widget && m_visible )
64 {
65 sb->removeWidget( m_widget );
66 m_visible = false;
67 m_widget->hide();
68 }
69 }
70 private:
71 QPointer<QWidget> m_widget;
72 int m_stretch;
73 bool m_permanent;
74 bool m_visible; // true when the item has been added to the statusbar
75};
76
77class KParts::StatusBarExtensionPrivate
78{
79public:
80 StatusBarExtensionPrivate(StatusBarExtension *q): q(q),
81 m_statusBar(0),
82 m_activated(true) {}
83
84 StatusBarExtension *q;
85 QList<StatusBarItem> m_statusBarItems; // Our statusbar items
86 KStatusBar* m_statusBar;
87 bool m_activated;
88};
89
91
92
93StatusBarExtension::StatusBarExtension(KParts::ReadOnlyPart *parent)
94 : QObject(parent), d(new StatusBarExtensionPrivate(this))
95{
96 parent->installEventFilter(this);
97}
98
99StatusBarExtension::~StatusBarExtension()
100{
101 KStatusBar * sb = d->m_statusBar;
102 for ( int i = d->m_statusBarItems.count () - 1; i >= 0 ; --i ) {
103 if ( d->m_statusBarItems[i].widget() ) {
104 if ( sb ) {
105 d->m_statusBarItems[i].ensureItemHidden( sb );
106 }
107 d->m_statusBarItems[i].widget()->deleteLater();
108 }
109 }
110
111 delete d;
112}
113
114StatusBarExtension *StatusBarExtension::childObject( QObject *obj )
115{
116 return KGlobal::findDirectChild<KParts::StatusBarExtension*>(obj);
117}
118
119bool StatusBarExtension::eventFilter(QObject * watched, QEvent* ev)
120{
121 if ( !GUIActivateEvent::test( ev ) ||
122 !::qobject_cast<KParts::ReadOnlyPart *>(watched) )
123 return QObject::eventFilter(watched, ev);
124
125 KStatusBar * sb = statusBar();
126 if ( !sb )
127 return QObject::eventFilter(watched, ev);
128
129 GUIActivateEvent *gae = static_cast<GUIActivateEvent*>(ev);
130 d->m_activated = gae->activated();
131
132 if ( d->m_activated )
133 {
134 QList<StatusBarItem>::iterator it = d->m_statusBarItems.begin();
135 for ( ; it != d->m_statusBarItems.end() ; ++it )
136 (*it).ensureItemShown( sb );
137 }
138 else
139 {
140 QList<StatusBarItem>::iterator it = d->m_statusBarItems.begin();
141 for ( ; it != d->m_statusBarItems.end() ; ++it )
142 (*it).ensureItemHidden( sb );
143 }
144
145 return false;
146
147}
148
149KStatusBar * StatusBarExtension::statusBar() const
150{
151 if ( !d->m_statusBar ) {
152 KParts::ReadOnlyPart* part = qobject_cast<KParts::ReadOnlyPart*>(parent());
153 QWidget* w = part ? part->widget() : 0;
154 KMainWindow* mw = w ? qobject_cast<KMainWindow *>( w->topLevelWidget() ) : 0;
155 if ( mw )
156 d->m_statusBar = mw->statusBar();
157 }
158 return d->m_statusBar;
159}
160
161void StatusBarExtension::setStatusBar( KStatusBar* status )
162{
163 d->m_statusBar = status;
164}
165
166void StatusBarExtension::addStatusBarItem( QWidget * widget, int stretch, bool permanent )
167{
168 d->m_statusBarItems.append( StatusBarItem( widget, stretch, permanent ) );
169 StatusBarItem& it = d->m_statusBarItems.last();
170 KStatusBar * sb = statusBar();
171 if (sb && d->m_activated)
172 it.ensureItemShown( sb );
173}
174
175void StatusBarExtension::removeStatusBarItem( QWidget * widget )
176{
177 KStatusBar * sb = statusBar();
178 QList<StatusBarItem>::iterator it = d->m_statusBarItems.begin();
179 for ( ; it != d->m_statusBarItems.end() ; ++it )
180 if ( (*it).widget() == widget )
181 {
182 if ( sb )
183 (*it).ensureItemHidden( sb );
184 d->m_statusBarItems.erase( it );
185 return;
186 }
187
188 kWarning(1000) << "StatusBarExtension::removeStatusBarItem. Widget not found : " << widget;
189}
190
191#include "statusbarextension.moc"
192
193// vim: ts=2 sw=2 et
KMainWindow
KMainWindow::statusBar
KStatusBar * statusBar()
KParts::GUIActivateEvent
This event is sent to a Part when its GUI has been activated or deactivated.
Definition: event.h:60
KParts::GUIActivateEvent::test
static bool test(const QEvent *event)
Definition: event.cpp:101
KParts::GUIActivateEvent::activated
bool activated() const
Definition: event.cpp:96
KParts::Part::widget
virtual QWidget * widget()
Definition: part.cpp:225
KParts::ReadOnlyPart
Base class for any "viewer" part.
Definition: part.h:489
KParts::StatusBarExtension
an extension for KParts that allows more sophisticated statusbar handling
Definition: statusbarextension.h:53
KParts::StatusBarExtension::eventFilter
virtual bool eventFilter(QObject *watched, QEvent *ev)
Definition: statusbarextension.cpp:119
KParts::StatusBarExtension::StatusBarExtension
StatusBarExtension(KParts::ReadOnlyPart *parent)
Definition: statusbarextension.cpp:93
KParts::StatusBarExtension::statusBar
KStatusBar * statusBar() const
Definition: statusbarextension.cpp:149
KParts::StatusBarExtension::removeStatusBarItem
void removeStatusBarItem(QWidget *widget)
Remove a widget from the statusbar for this part.
Definition: statusbarextension.cpp:175
KParts::StatusBarExtension::setStatusBar
void setStatusBar(KStatusBar *status)
This allows the hosting application to set a particular KStatusBar for this part.
Definition: statusbarextension.cpp:161
KParts::StatusBarExtension::~StatusBarExtension
~StatusBarExtension()
Definition: statusbarextension.cpp:99
KParts::StatusBarExtension::childObject
static StatusBarExtension * childObject(QObject *obj)
Queries obj for a child object which inherits from this BrowserExtension class.
Definition: statusbarextension.cpp:114
KParts::StatusBarExtension::addStatusBarItem
void addStatusBarItem(QWidget *widget, int stretch, bool permanent)
This adds a widget to the statusbar for this part.
Definition: statusbarextension.cpp:166
KStatusBar
QEvent
QList
QObject
QWidget
event.h
kWarning
#define kWarning
kdebug.h
kglobal.h
kmainwindow.h
kstatusbar.h
KParts
part.h
statusbarextension.h
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KParts

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

kdelibs-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
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