⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kstatusbar.cpp

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 CPP
字号:
/* This file is part of the KDE libraries    Copyright (C) 1997 Mark Donohoe (donohoe@kde.org)              (C) 1997,1998 Sven Radej (sven@lisa.exp.univie.ac.at)    This library is free software; you can redistribute it and/or    modify it under the terms of the GNU Library General Public    License as published by the Free Software Foundation; either    version 2 of the License, or (at your option) any later version.    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., 59 Temple Place - Suite 330,    Boston, MA 02111-1307, USA.*/#include <qpainter.h>#include <ktopwidget.h>#include <kstatusbar.h>// $Id: kstatusbar.cpp,v 1.1 2003/09/08 19:42:10 jasonk Exp $// $Log: kstatusbar.cpp,v $// Revision 1.1  2003/09/08 19:42:10  jasonk// Addition of packages directory and associated files.//// Revision 1.1.1.1  2003/08/07 21:18:32  jasonk// Initial import of PIXIL into new cvs repository.//// Revision 1.1.1.1  2003/06/23 22:04:24  jasonk////// Revision 1.1.1.1  2000/07/07 16:11:00  jasonk// Initial import of ViewML//// Revision 1.18.4.1  1999/05/29 18:55:01  denis// Broken files repaired.// It looks like nothing has missed.//// Revision 1.18  1999/01/18 10:57:04  kulow// .moc files are back in kdelibs. Built fine here using automake 1.3//// Revision 1.17  1999/01/15 09:31:23  kulow// it's official - kdelibs builds with srcdir != builddir. For this I// automocifized it, the generated rules are easier to maintain than// selfwritten rules. I have to fight with some bugs of this tool, but// generally it's better than keeping them updated by hand.//// Revision 1.16  1998/10/05 10:14:25  radej// sven: Bugfix: SEGV when 10000 messages come in the same time//// Revision 1.15  1998/09/23 14:40:22  radej// sven: connected timeout to clear. Thanks to Taj for hint, and no-thanks to//       me - alzheimer for forgeting it//// Revision 1.14  1998/09/04 22:58:09  radej// sven: added sizeHint. Very primitive - width is ?, but height is set//       according to fontMetrics//// Revision 1.13  1998/08/05 09:58:47  radej// sven: fixed removeItem SEGV; thanks to Frans van Dorsselaer for report.//// Revision 1.12  1998/05/08 16:25:55  radej// Fixed timer ftr temp messages.//// Revision 1.11  1998/05/05 10:04:40  radej// Not sunken in windows style//// Revision 1.10  1998/04/21 20:37:48  radej// Added insertWidget and some reorganisation - BINARY INCOMPATIBLE///*************************************************************************/// We want a statusbar-fields to be by this amount heigher than fm.height().// This does NOT include the border width which we set separately for the statusbar.#define FONT_Y_DELTA 3#define DEFAULT_BORDERWIDTH 0KStatusBarLabel::KStatusBarLabel( const char *text, int _id,                                 QWidget *parent, const char *) :  QLabel( parent ) {     id = _id;  QFontMetrics fm = fontMetrics();  w = fm.width( text )+8;  h = fm.height() + FONT_Y_DELTA;  resize( w, h );      setText( text );  if ( style() == MotifStyle )    setFrameStyle( QFrame::Panel | QFrame::Sunken );  setAlignment( AlignLeft | AlignVCenter );}void KStatusBarLabel::mousePressEvent (QMouseEvent *){  emit Pressed(id);}void KStatusBarLabel::mouseReleaseEvent (QMouseEvent *){  emit Released (id);}/***********************************************************************/KStatusBar::KStatusBar( QWidget *parent, const char *name )  : QFrame( parent, name ){  init();}KStatusBar::~KStatusBar (){  tmpTimer->stop();  for ( KStatusBarItem *b = items.first(); b; b=items.next() )    delete b;  if (tempMessage)    delete tempMessage;  delete tmpTimer; // What do I have to notice!?};void KStatusBar::drawContents( QPainter * ){}void KStatusBar::init(){  borderwidth = DEFAULT_BORDERWIDTH;  fieldheight = fontMetrics().height() + FONT_Y_DELTA;  insert_order = KStatusBar::LeftToRight;  setFrameStyle( QFrame::NoFrame );  resize( width(), fieldheight + 2* borderwidth);  tempWidget=0;  tempMessage=0;  tmpTimer = new QTimer(this);  connect (tmpTimer, SIGNAL(timeout()), this, SLOT(clear()));}void KStatusBar::setHeight(int h){  fieldheight = h - 2* borderwidth;  resize( width(),h);  }void KStatusBar::setBorderWidth(int b){    borderwidth = b;  resize( width(),height() + 2* borderwidth);  }void KStatusBar::resizeEvent( QResizeEvent * ) {  if (tempMessage)    tempMessage->setGeometry(borderwidth, borderwidth,                             width()-2*borderwidth, fieldheight);  else if (tempWidget)    tempWidget->setGeometry(borderwidth, borderwidth,                            width()-2*borderwidth, fieldheight);  else    updateRects( ); // False? You wouldn't sell that to toolbar... (sven)}void KStatusBar::setInsertOrder(InsertOrder order){  insert_order = order;}void KStatusBar::updateRects( bool res ){    if( insert_order == KStatusBar::LeftToRight){    int offset= borderwidth;	    for ( KStatusBarItem *b = items.first(); b; b=items.next() ) {      b->setGeometry( offset, borderwidth, b->width(), fieldheight );	      offset+=b->width() + borderwidth;    }        if ( !res ) {      KStatusBarItem *l = items.getLast();      if( l ) {		offset-=l->width() + borderwidth;		l->setGeometry( offset ,borderwidth, width() - offset - borderwidth, fieldheight );      }    }  }  else{ // KStatusBar::RightToLeft    int offset = width();    for ( KStatusBarItem *b = items.first(); b; b=items.next() ) {      offset -=b->width() + borderwidth;      b->setGeometry(offset,borderwidth,b->width(),fieldheight );    }        if ( !res ) {      KStatusBarItem *l = items.getLast();      if( l != 0L ) {		offset+=l->width() - borderwidth;		l->setGeometry(borderwidth,borderwidth,offset,fieldheight);      }    }  }	}bool KStatusBar::enable( BarStatus stat ){  bool mystat = isVisible();  if ( (stat == Toggle && mystat) || stat == Hide )    hide();  else    show();  return ( isVisible() == mystat );}	int KStatusBar::insertItem( const char *text, int id ){  KStatusBarLabel *label = new KStatusBarLabel( text, id, this );  KStatusBarItem *item = new KStatusBarItem(label, id, true);/*  // resize last item to default  KStatusBarItem *l = items.getLast();  if( l )  {    QFontMetrics fm = fontMetrics();    int w = fm.width(((QLabel *) l->getItem())->text() )+8;    int h = fm.height() + FONT_Y_DELTA;    l->getItem()->resize( w, h );  }*/  items.append( item );  updateRects( TRUE );  connect (label, SIGNAL(Pressed(int)), this, SLOT(slotPressed(int)));  connect (label, SIGNAL(Released(int)), this, SLOT(slotReleased(int)));  return items.at();}int KStatusBar::insertWidget(QWidget *_widget, int size, int id){   KStatusBarItem *item = new KStatusBarItem(_widget, id, false);   items.append( item );   _widget->resize(size, fieldheight);   updateRects( TRUE );   return items.at();}void KStatusBar::removeItem (int id){  for ( KStatusBarItem *b = items.first(); b; b=items.next() )     if ( b->ID() == id )    {      items.remove();      delete b;      updateRects(false );    }  }void KStatusBar::replaceItem(int /* _id */, const char * /* _text */ ){ debug ("Not yet implemented. Sorry.");}void KStatusBar::replaceItem(int /* _id */ , QWidget * /* _widget */){ debug ("Not yet implemented. Sorry.");}void KStatusBar::changeItem( const char *text, int id ){  for ( KStatusBarItem *b = items.first(); b; b=items.next() ) 	if ( b->ID() == id )	  ((KStatusBarLabel *)b->getItem())->setText( text );}void KStatusBar::setAlignment( int id, int align){  for ( KStatusBarItem *b = items.first(); b; b=items.next() )     if ( b->ID() == id ){	  ((KStatusBarLabel *)b->getItem())->setAlignment(align|AlignVCenter);    }}void KStatusBar::message(const char *text, int time){  if (tmpTimer->isActive())    tmpTimer->stop();    if (tempMessage)  {    delete tempMessage;    tempMessage = 0;  }  else if (tempWidget)  {    tempWidget->hide();    tempWidget=0;  }  else    for ( KStatusBarItem *b = items.first(); b; b=items.next() )      b->hide();    tempMessage = new KStatusBarLabel( text, -1, this );  tempMessage->setGeometry(borderwidth, borderwidth,                           width()-2*borderwidth, fieldheight);  tempMessage->show();  if (time >0)    tmpTimer->start(time, true);}void KStatusBar::message(QWidget *widget, int time){  if (tmpTimer->isActive())    tmpTimer->stop();    if (tempMessage)  {    delete tempMessage;    tempMessage = 0;  }  else if (tempWidget)  {    tempWidget->hide();    tempWidget=0;  }  else    for ( KStatusBarItem *b = items.first(); b; b=items.next() )      b->hide();  // Hi, Trolls    tempWidget = widget;  tempWidget->setGeometry(borderwidth, borderwidth,                          width()-2*borderwidth, fieldheight);  tempWidget->show();  if (time >0)    tmpTimer->start(time, true);}void KStatusBar::clear(){  tmpTimer->stop();  if (tempMessage)    delete tempMessage;  if (tempWidget)    tempWidget->hide();    for ( KStatusBarItem *b = items.first(); b; b=items.next() )    b->show();  tempMessage=0;  tempWidget=0;}void KStatusBar::slotPressed(int _id){  emit pressed(_id);}void KStatusBar::slotReleased(int _id){  emit released(_id);}QSize KStatusBar::sizeHint(){  return QSize(width(), height());}#include "kstatusbar.moc"//Eh!!!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -