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

📄 kdirlistbox.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, 1998 Richard Moore <rich@kde.org>                  1998 Mario Weilguni <mweilguni@sime.com>                  1998 Stephan Kulow <coolo@kde.org>                  1998 Daniel Grana <grana@ie.iwi.unibe.ch>    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 "kdirlistbox.h"#include "kfileinfo.h"#include <kapp.h>#include <qkeycode.h>#include <qpainter.h>#include <qlistbox.h>class QPixmap;class QPainter;class KFileInfo;/** * Class to allow pixmaps and text in QListBox. * Taken from the Qt library documentation. */class KDirListBoxItem : public QListBoxItem{public:    KDirListBoxItem( const KFileInfo *i);    void setItalic(bool);    bool isItalic() const;protected:    virtual void paint( QPainter * );    virtual int height( const QListBox * ) const;    virtual int width( const QListBox * ) const;    virtual const QPixmap *pixmap() { return pm; }private:    static QPixmap *folder_pixmap;    static QPixmap *locked_folder;    static QPixmap *file_pixmap;    static QPixmap *locked_file;    QPixmap *pm;    bool italic;};QPixmap *KDirListBoxItem::folder_pixmap = 0;QPixmap *KDirListBoxItem::locked_folder = 0;QPixmap *KDirListBoxItem::file_pixmap = 0;QPixmap *KDirListBoxItem::locked_file = 0;KDirListBoxItem::KDirListBoxItem(const KFileInfo *i)    : QListBoxItem(){    if (!folder_pixmap) // don't use IconLoader to always get the same icon	folder_pixmap = new QPixmap(KApplication::kde_icondir() +				    "/mini/folder.xpm");    if (!locked_folder)	locked_folder = new QPixmap(KApplication::kde_icondir() +				    "/mini/lockedfolder.xpm");    if (!file_pixmap)	file_pixmap = new QPixmap(KApplication::kde_icondir() +				  "/mini/unknown.xpm");    if (!locked_file)	locked_file = new QPixmap(KApplication::kde_icondir() +				  "/mini/locked.xpm");    if (i->isDir())      pm = (i->isReadable()) ? folder_pixmap : locked_folder;    else      pm = (i->isReadable()) ? file_pixmap : locked_file;    italic = FALSE;    setText(i->fileName());}void KDirListBoxItem::paint( QPainter *p ){    if(italic) {	p->save();	QFont f = p->font();	f.setItalic(true);	p->setFont(f);    }    p->drawPixmap( 3, 2, *pm );    QFontMetrics fm = p->fontMetrics();    int yPos;                       // vertical text position    if ( (pm->height()) < fm.height() )	yPos = fm.ascent() + fm.leading()/2;    else	yPos = pm->height()/2 - fm.height()/2 + fm.ascent();    yPos= yPos+2;    p->drawText( pm->width() + 5, yPos, text() );    if(italic)	p->restore();}int KDirListBoxItem::height(const QListBox *lb ) const{    int retval;    retval= QMAX( pm->height(), lb->fontMetrics().lineSpacing() + 1);    retval= retval+2;    return retval;}int KDirListBoxItem::width(const QListBox *lb ) const{    return pm->width() + lb->fontMetrics().width( text() ) + 6;}void KDirListBoxItem::setItalic(bool b) {    italic = b;}bool KDirListBoxItem::isItalic() const {    return italic;}void KDirListBox::mousePressEvent ( QMouseEvent *inEvent ){    int index = this->findItem(inEvent->pos().y());    if (index == -1 || inEvent->button() != LeftButton)        return;    if ( useSingle() && isDir(index))        select( index );    else        highlight( index );}void KDirListBox::keyPressEvent( QKeyEvent *e ){  int index = 0;    switch ( e->key() ) {  case Key_Return: // fall through  case Key_Enter:      index = currentItem();      if ( index == -1 )          return;          if ( isDir( index ) )          select( index );          break;  case Key_Home:      highlightItem( 0 );      setTopCell( 0 );		  // somehow highlightItem() does NOT scroll!?      break;  case Key_End:      index = QListBox::count() -1;      if ( index >= 0 ) {	  highlightItem( index ); // somehow highlightItem() does NOT scroll!?	  setBottomItem( index );      }      break;  default:        QListBox::keyPressEvent( e );  }}KDirListBox::KDirListBox( bool accepts, bool s, QDir::SortSpec sorting,                          QWidget * parent , const char * name )    : QListBox(parent, name) , KFileInfoContents(s,sorting){    _acceptFiles = accepts;    setSortMode(Increasing);    setSorting(QDir::Name);}KDirListBox::KDirListBox( bool s, QDir::SortSpec sorting,                          QWidget * parent , const char * name )    : QListBox(parent, name) , KFileInfoContents(s,sorting){   _acceptFiles = false;    setSortMode(Increasing);    setSorting(QDir::Name);}void KDirListBox::mouseDoubleClickEvent ( QMouseEvent *inEvent ){   if ( !useSingle() && inEvent->button() == LeftButton ) {       int newItem = this->findItem(inEvent->pos().y());       if ( newItem != -1 )	   select(newItem);   }}void KDirListBox::setAutoUpdate(bool f){    QListBox::setAutoUpdate(f);}bool KDirListBox::insertItem(const KFileInfo *i, int index){    KDirListBoxItem *li = new KDirListBoxItem(i);    li->setItalic(i->isSymLink());    QListBox::insertItem(li, index);    return true;}void KDirListBox::clearView(){    QListBox::clear();}void KDirListBox::highlightItem(unsigned int i){    QListBox::setCurrentItem(i);}#include "kdirlistbox.moc"

⌨️ 快捷键说明

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