statusbarextension.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "statusbarextension.h"
00022
00023 #include <qvaluelist.h>
00024
00025 #include <kstatusbar.h>
00026 #include <kmainwindow.h>
00027
00028 #include <kparts/part.h>
00029 #include <kparts/event.h>
00030
00031 #include <kdebug.h>
00032 #include <qobjectlist.h>
00033
00034 using namespace KParts;
00035
00037
00039
00040 class KParts::StatusBarItem {
00041 public:
00042 StatusBarItem()
00043 : m_widget(0), m_visible(false)
00044 {}
00045 StatusBarItem( QWidget * widget, int stretch, bool permanent )
00046 : m_widget(widget), m_stretch(stretch), m_permanent(permanent), m_visible(false)
00047 {}
00048
00049 QWidget * widget() const { return m_widget; }
00050
00051 void ensureItemShown( KStatusBar * sb )
00052 {
00053 if ( !m_visible )
00054 {
00055 sb->addWidget( m_widget, m_stretch, m_permanent );
00056 m_visible = true;
00057 m_widget->show();
00058 }
00059 }
00060 void ensureItemHidden( KStatusBar * sb )
00061 {
00062 if ( m_visible )
00063 {
00064 sb->removeWidget( m_widget );
00065 m_visible = false;
00066 m_widget->hide();
00067 }
00068 }
00069 private:
00070 QWidget * m_widget;
00071 int m_stretch;
00072 bool m_permanent;
00073 bool m_visible;
00074 };
00075
00077
00078
00079 StatusBarExtension::StatusBarExtension(KParts::ReadOnlyPart *parent, const char* name)
00080 : QObject(parent, name), m_statusBar(0), d(0)
00081 {
00082 parent->installEventFilter(this);
00083 }
00084
00085 StatusBarExtension::~StatusBarExtension()
00086 {
00087 }
00088
00089
00090 StatusBarExtension *StatusBarExtension::childObject( QObject *obj )
00091 {
00092 if ( !obj || !obj->children() )
00093 return 0L;
00094
00095
00096
00097 const QObjectList *children = obj->children();
00098 QObjectListIt it( *children );
00099 for (; it.current(); ++it )
00100 if ( it.current()->inherits( "KParts::StatusBarExtension" ) )
00101 return static_cast<KParts::StatusBarExtension *>( it.current() );
00102
00103 return 0L;
00104 }
00105
00106 bool StatusBarExtension::eventFilter(QObject * watched, QEvent* ev)
00107 {
00108 if ( !GUIActivateEvent::test( ev ) ||
00109 !watched->inherits("KParts::ReadOnlyPart") )
00110 return QObject::eventFilter(watched, ev);
00111
00112 KStatusBar * sb = statusBar();
00113 if ( !sb )
00114 return QObject::eventFilter(watched, ev);
00115
00116 GUIActivateEvent *gae = static_cast<GUIActivateEvent*>(ev);
00117
00118 if ( gae->activated() )
00119 {
00120 QValueListIterator<StatusBarItem> it = m_statusBarItems.begin();
00121 for ( ; it != m_statusBarItems.end() ; ++it )
00122 (*it).ensureItemShown( sb );
00123 }
00124 else
00125 {
00126 QValueListIterator<StatusBarItem> it = m_statusBarItems.begin();
00127 for ( ; it != m_statusBarItems.end() ; ++it )
00128 (*it).ensureItemHidden( sb );
00129 }
00130
00131 return false;
00132
00133 }
00134
00135 KStatusBar * StatusBarExtension::statusBar() const
00136 {
00137 if ( !m_statusBar ) {
00138 QWidget* w = static_cast<KParts::ReadOnlyPart*>(parent())->widget();
00139 KMainWindow* mw = dynamic_cast<KMainWindow *>( w->topLevelWidget() );
00140 if ( mw )
00141 m_statusBar = mw->statusBar();
00142 }
00143 return m_statusBar;
00144 }
00145
00146 void StatusBarExtension::setStatusBar( KStatusBar* status )
00147 {
00148 m_statusBar = status;
00149 }
00150
00151 void StatusBarExtension::addStatusBarItem( QWidget * widget, int stretch, bool permanent )
00152 {
00153 m_statusBarItems.append( StatusBarItem( widget, stretch, permanent ) );
00154 QValueListIterator<StatusBarItem> it = m_statusBarItems.fromLast();
00155 KStatusBar * sb = statusBar();
00156 Q_ASSERT(sb);
00157 if (sb)
00158 (*it).ensureItemShown( sb );
00159 }
00160
00161 void StatusBarExtension::removeStatusBarItem( QWidget * widget )
00162 {
00163 KStatusBar * sb = statusBar();
00164 QValueListIterator<StatusBarItem> it = m_statusBarItems.begin();
00165 for ( ; it != m_statusBarItems.end() ; ++it )
00166 if ( (*it).widget() == widget )
00167 {
00168 if ( sb )
00169 (*it).ensureItemHidden( sb );
00170 m_statusBarItems.remove( it );
00171 break;
00172 }
00173 if ( it == m_statusBarItems.end() )
00174 kdWarning(1000) << "StatusBarExtension::removeStatusBarItem. Widget not found : " << widget << endl;
00175 }
00176
00177 #include "statusbarextension.moc"
00178
00179
This file is part of the documentation for kparts Library Version 3.3.2.