00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#include <qptrlist.h>
00025
00026
#include "kpanelapplet.h"
00027
#include "kpanelapplet.moc"
00028
#include <kapplication.h>
00029
#include <kconfig.h>
00030
00031
class KPanelApplet::KPanelAppletPrivate
00032 {
00033
public:
00034 KPanelAppletPrivate()
00035 : customMenu(0),
00036 hasFocus(false)
00037 {}
00038
00039
const QPopupMenu* customMenu;
00040
KSharedConfig::Ptr sharedConfig;
00041
QPtrList<QObject> watchedForFocus;
00042
bool hasFocus;
00043 };
00044
00045 KPanelApplet::KPanelApplet(
const QString& configFile, Type type,
00046
int actions,
QWidget *parent,
const char *name, WFlags f)
00047 :
QFrame(parent, name, f)
00048 , _type(type)
00049 , _position( pBottom )
00050 , _alignment( LeftTop )
00051 , _config(0)
00052 , _actions(actions)
00053 , d(new
KPanelApplet::KPanelAppletPrivate())
00054 {
00055 setFrameStyle(NoFrame);
00056
QPalette pal(palette());
00057
if(pal.
active().mid() != pal.
inactive().mid()){
00058 pal.
setInactive(pal.
active());
00059 setPalette(pal);
00060 }
00061 setBackgroundOrigin( AncestorOrigin );
00062
00063 d->sharedConfig = KSharedConfig::openConfig(configFile, kapp && kapp->config()->isImmutable());
00064 _config = d->sharedConfig;
00065 }
00066
00067 KPanelApplet::~KPanelApplet()
00068 {
00069 d->watchedForFocus.clear();
00070
needsFocus(
false);
00071
delete d;
00072 }
00073
00074
void KPanelApplet::setPosition( Position p )
00075 {
00076
if( _position == p )
return;
00077 _position = p;
00078 positionChange( p );
00079 }
00080
00081
void KPanelApplet::setAlignment( Alignment a )
00082 {
00083
if( _alignment == a )
return;
00084 _alignment = a;
00085
alignmentChange( a );
00086 }
00087
00088
00089 void KPanelApplet::positionChange( Position )
00090 {
00091
orientationChange(
orientation() );
00092
QResizeEvent e( size(), size() );
00093 resizeEvent( &e );
00094
popupDirectionChange(
popupDirection() );
00095 }
00096
00097 Qt::Orientation
KPanelApplet::orientation()
const
00098
{
00099
if( _position == pTop || _position == pBottom ) {
00100
return Horizontal;
00101 }
else {
00102
return Vertical;
00103 }
00104 }
00105
00106
00107 KPanelApplet::Direction
KPanelApplet::popupDirection()
00108 {
00109
switch( _position ) {
00110
case pTop:
return Down;
00111
case pRight:
return Left;
00112
case pLeft:
return Right;
00113
default:
00114
case pBottom:
return Up;
00115 }
00116 }
00117
00118 void KPanelApplet::action( Action a )
00119 {
00120
if ( (a & About) )
00121
about();
00122
if ( (a & Help) )
00123
help();
00124
if ( (a & Preferences) )
00125
preferences();
00126
if ( (a & ReportBug) )
00127
reportBug();
00128 }
00129
00130 const QPopupMenu*
KPanelApplet::customMenu()
const
00131
{
00132
return d->customMenu;
00133 }
00134
00135 void KPanelApplet::setCustomMenu(
const QPopupMenu* menu)
00136 {
00137 d->customMenu = menu;
00138 }
00139
00140 void KPanelApplet::watchForFocus(
QWidget* widget,
bool watch)
00141 {
00142
if (!widget)
00143 {
00144
return;
00145 }
00146
00147
if (watch)
00148 {
00149
if (d->watchedForFocus.find(widget) == -1)
00150 {
00151 d->watchedForFocus.append(widget);
00152 widget->installEventFilter(
this);
00153 }
00154 }
00155
else if (d->watchedForFocus.find(widget) != -1)
00156 {
00157 d->watchedForFocus.remove(widget);
00158 widget->removeEventFilter(
this);
00159 }
00160 }
00161
00162 void KPanelApplet::needsFocus(
bool focus)
00163 {
00164
if (focus == d->hasFocus)
00165 {
00166
return;
00167 }
00168
00169 d->hasFocus = focus;
00170 emit
requestFocus(focus);
00171 }
00172
00173
bool KPanelApplet::eventFilter(
QObject *o,
QEvent * e)
00174 {
00175
if (d->watchedForFocus.find(o) != -1)
00176 {
00177
if (e->
type() == QEvent::MouseButtonRelease ||
00178 e->
type() == QEvent::FocusIn)
00179 {
00180 needsFocus(
true);
00181 }
00182
else if (e->
type() == QEvent::FocusOut)
00183 {
00184
needsFocus(
false);
00185 }
00186 }
00187
00188
return QFrame::eventFilter(o, e);
00189 }
00190
00191
KSharedConfig::Ptr KPanelApplet::sharedConfig()
const
00192
{
00193
return d->sharedConfig;
00194 }
00195
00196
void KPanelApplet::virtual_hook(
int,
void* )
00197 { }
00198