📄 qfileiconview.cpp.bak
字号:
/****************************************************************************** $Id: qt/qfileiconview.cpp 3.3.6 edited Aug 31 2005 $**** Copyright (C) 1992-2005 Trolltech AS. All rights reserved.**** This file is part of an example program for Qt. This example** program may be used, distributed and modified without limitation.*******************************************************************************/#include "qfileiconview.h"#include <qpainter.h>#include <qstringlist.h>#include <qpixmap.h>#include <qmime.h>#include <qstrlist.h>#include <qdragobject.h>#include <qmessagebox.h>#include <qevent.h>#include <qpopupmenu.h>#include <qcursor.h>#include <qapplication.h>#include <qwmatrix.h>#include <qevent.h>#include <qtextcodec.h>#include <stdlib.h>static const char * file_icon[]={ "32 32 17 1", "# c #000000", "a c #ffffff", "j c #808080", "n c #a0a0a4", "g c #c0c0c0", "m c #004000", "o c #000000", "l c #004040", "k c #404000", "i c #c0c000", "h c #ffff00", "b c #ffffc0", "e c #ff8000", "f c #c05800", "c c #ffa858", "d c #ffdca8", ". c None", "................................", "................................", "................................", "................................", ".............#....###...........", "...###......#a##.#aba##.........", "..#cdb#....#aaaa#aaaaaa##.......", "..#ecdb#..#aaaa#aaaaaaaba##.....", "..#fecdb##aaaa#aaaaaaaaaaab##...", "...#fecdb#aaa#aaaaaaabaabaaaa##.", "....#fecdb#a#baaaaa#baaaaaabaaa#", ".....#fecdb#aaaaab#a##baaaaaaa#.", ".....##fecdb#bbba#aaaa##baaab#..", "....#bb#fecdb#ba#aaaaaaa##aa#...", "...#bbbb#fecdb##aaabaaaaaa##....", "..#bbbb#b#fecdb#aaaaaaabaaaa##..", ".#bbbb#bbb#fecdg#aaaaaaaaaaaba#.", "#hhbb#bbbbb#fegg#iiaaaaaaaaaaaa#", "#jhhhklibbbk#ggj#aaiiaaaaaaaaa#j", ".#mjhhhkmikab####aaabiiaaaaaa#j.", "...##jhhhmaaibbaaiibaaaiiaab#n..", ".....##j#baaaiiabaaiibaabaa#n...", "......##baibaabiibaaaiiabb#j....", "......#bbbbiiaabbiiaaaaabon.....", ".....#bbbbbbbiiabbaiiaab#n......", ".....#jbbbbbbbbiibaabba#n.......", "......##jbbbbbbbbiiaabmj........", "........##jbbbbbbbbbb#j.........", "..........##nbbbbbbbmj..........", "............##jbbbb#j...........", "..............#mjj#n............", "................##n............."};static const char * folder_icon[]={ "32 32 11 1", "# c #000000", "b c #c0c000", "d c #585858", "a c #ffff00", "i c #400000", "h c #a0a0a4", "e c #000000", "c c #ffffff", "f c #303030", "g c #c0c0c0", ". c None", "...###..........................", "...#aa##........................", ".###baaa##......................", ".#cde#baaa##....................", ".#cccdeebaaa##..##f.............", ".#cccccdeebaaa##aaa##...........", ".#cccccccdeebaaaaaaaa##.........", ".#cccccccccdeebababaaa#.........", ".#cccccgcgghhebbbbbbbaa#........", ".#ccccccgcgggdebbbbbbba#........", ".#cccgcgcgcgghdeebiebbba#.......", ".#ccccgcggggggghdeddeeba#.......", ".#cgcgcgcggggggggghghdebb#......", ".#ccgcggggggggghghghghd#b#......", ".#cgcgcggggggggghghghhd#b#......", ".#gcggggggggghghghhhhhd#b#......", ".#cgcggggggggghghghhhhd#b#......", ".#ggggggggghghghhhhhhhdib#......", ".#gggggggggghghghhhhhhd#b#......", ".#hhggggghghghhhhhhhhhd#b#......", ".#ddhhgggghghghhhhhhhhd#b#......", "..##ddhhghghhhhhhhhhhhdeb#......", "....##ddhhhghhhhhhhhhhd#b#......", "......##ddhhhhhhhhhhhhd#b#......", "........##ddhhhhhhhhhhd#b#......", "..........##ddhhhhhhhhd#b#......", "............##ddhhhhhhd#b###....", "..............##ddhhhhd#b#####..", "................##ddhhd#b######.", "..................##dddeb#####..", "....................##d#b###....", "......................####......"};static const char * link_icon[]={ "32 32 12 1", "# c #000000", "h c #a0a0a4", "b c #c00000", "d c #585858", "i c #400000", "c c #ffffff", "e c #000000", "g c #c0c0c0", "a c #ff0000", "f c #303030", "n c white", ". c None", "...###..........................", "...#aa##........................", ".###baaa##......................", ".#cde#baaa##....................", ".#cccdeebaaa##..##f.............", ".#cccccdeebaaa##aaa##...........", ".#cccccccdeebaaaaaaaa##.........", ".#cccccccccdeebababaaa#.........", ".#cccccgcgghhebbbbbbbaa#........", ".#ccccccgcgggdebbbbbbba#........", ".#cccgcgcgcgghdeebiebbba#.......", ".#ccccgcggggggghdeddeeba#.......", ".#cgcgcgcggggggggghghdebb#......", ".#ccgcggggggggghghghghd#b#......", ".#cgcgcggggggggghghghhd#b#......", ".#gcggggggggghghghhhhhd#b#......", ".#cgcggggggggghghghhhhd#b#......", ".#ggggggggghghghhhhhhhdib#......", ".#gggggggggghghghhhhhhd#b#......", ".#hhggggghghghhhhhhhhhd#b#......", ".#ddhhgggghghghhhhhhhhd#b#......", "..##ddhhghghhhhhhhhhhhdeb#......", "############hhhhhhhhhhd#b#......", "#nnnnnnnnnn#hhhhhhhhhhd#b#......", "#nnnnnnnnnn#hhhhhhhhhhd#b#......", "#nn#nn#nnnn#ddhhhhhhhhd#b#......", "#nn##n##nnn###ddhhhhhhd#b###....", "#nnn#####nn#..##ddhhhhd#b#####..", "#nnnnn##nnn#....##ddhhd#b######.", "#nnnnn#nnnn#......##dddeb#####..", "#nnnnnnnnnn#........##d#b###....", "############..........####......"};static const char * folder_locked_icon[]={ "32 32 12 1", "# c #000000", "g c #808080", "h c #c0c0c0", "f c #c05800", "c c #ffffff", "d c #585858", "b c #ffa858", "a c #ffdca8", "e c #000000", "i c #a0a0a4", "j c #c0c0c0", ". c None", "...###..........................", "...#aa##........................", ".###baaa##......................", ".#cde#baaa##....................", ".#cccdeeba#######...............", ".#cccccde##fffff##..............", ".#cccccc##fffgggg#..............", ".#ccccccc#ffg####a##............", ".#ccccchc#ffg#eebbaa##..........", ".#ccccccc#ffg#ddeebbba##........", ".#ccchccc#ffg#ihddeebbba##......", ".#cccccaa#ffg#ihhhddeeba##......", ".#chchhbbaafg#ihhhihidebb#......", ".#cchccbbbbaa#ihhihihid#b#......", ".#chchhbb#bbbaaiihihiid#b#......", ".#hchhcbb#fbbbafhiiiiid#b#......", ".#chchhbb#ffgbbfihiiiid#b#......", ".#hhhhhbb#ffg#bfiiiiiid#b#......", ".#hhhhhbbaffg#bfiiiiiid#b#......", ".#iihhhjbbaab#bfiiiiiid#b#......", ".#ddiihhh#bbbabfiiiiiid#b#......", "..##ddiih#ffbbbfiiiiiid#b#......", "....##ddi#ffg#biiiiiiid#b#......", "......##d#ffg#iiiiiiiid#b#......", "........##ffg#iiiiiiiid#b#......", ".........#ffg#iiiiiiiid#b#......", ".........#ffg#ddiiiiiid#b###....", ".........##fg###ddiiiid#b#####..", "...........####.##ddiid#b######.", "..................##dddeb#####..", "....................##d#b###....", "......................####......"};static QPixmap *iconFolderLockedLarge = 0;static QPixmap *iconFolderLarge = 0;static QPixmap *iconFileLarge = 0;static QPixmap *iconLinkLarge = 0;static QPixmap *iconFolderLockedSmall = 0;static QPixmap *iconFolderSmall = 0;static QPixmap *iconFileSmall = 0;static QPixmap *iconLinkSmall = 0;static void cleanup(){ delete iconFolderLockedLarge; iconFolderLockedLarge = 0; delete iconFolderLarge; iconFolderLarge = 0; delete iconFileLarge; iconFileLarge = 0; delete iconLinkLarge; iconLinkLarge = 0; delete iconFolderLockedSmall; iconFolderLockedSmall = 0; delete iconFolderSmall; iconFolderSmall = 0; delete iconFileSmall; iconFileSmall = 0; delete iconLinkSmall; iconLinkSmall = 0;}/***************************************************************************** * * Class QtFileIconDrag * *****************************************************************************/QtFileIconDrag::QtFileIconDrag( QWidget * dragSource, const char* name ) : QIconDrag( dragSource, name ){}const char* QtFileIconDrag::format( int i ) const{ if ( i == 0 ) return "application/x-qiconlist"; else if ( i == 1 ) return "text/uri-list"; else return 0;}QByteArray QtFileIconDrag::encodedData( const char* mime ) const{ QByteArray a; if ( QString( mime ) == "application/x-qiconlist" ) { a = QIconDrag::encodedData( mime ); } else if ( QString( mime ) == "text/uri-list" ) { QString s = urls.join( "\r\n" ); a.resize( s.length() ); memcpy( a.data(), s.latin1(), s.length() ); } return a;}bool QtFileIconDrag::canDecode( QMimeSource* e ){ return e->provides( "application/x-qiconlist" ) || e->provides( "text/uri-list" );}void QtFileIconDrag::append( const QIconDragItem &item, const QRect &pr, const QRect &tr, const QString &url ){ QIconDrag::append( item, pr, tr ); QString ourUrl = url; #ifdef Q_WS_WIN if (ourUrl.length() > 2 && ourUrl[1] != ':') { QDir dir(ourUrl); ourUrl = dir.absPath(); }#endif urls << QUriDrag::localFileToUri(ourUrl);}/***************************************************************************** * * Class QtFileIconViewItem * *****************************************************************************/QtFileIconViewItem::QtFileIconViewItem( QtFileIconView *parent, QFileInfo *fi ) : QIconViewItem( parent, fi->fileName() ), itemFileName( fi->filePath() ), itemFileInfo( fi ), checkSetText( FALSE ){ vm = QtFileIconView::Small; if ( itemFileInfo->isDir() ) itemType = Dir; else if ( itemFileInfo->isFile() ) itemType = File; if ( itemFileInfo->isSymLink() ) itemType = Link; viewModeChanged( ( (QtFileIconView*)iconView() )->viewMode() ); if ( itemFileInfo->fileName() == "." || itemFileInfo->fileName() == ".." ) setRenameEnabled( FALSE ); checkSetText = true; QTextCodec *codec = QTextCodec::codecForName("gbk"); QString uniString = codec->toUnicode( fi->fileName() ); setText( uniString ); QObject::connect( &timer, SIGNAL( timeout() ), iconView(), SLOT( openFolder() ) );}void QtFileIconViewItem::paintItem( QPainter *p, const QColorGroup &cg ){ if ( itemFileInfo->isSymLink() ) { QFont f( p->font() ); f.setItalic( TRUE ); p->setFont( f ); } QIconViewItem::paintItem( p, cg );}void QtFileIconViewItem::viewModeChanged( QtFileIconView::ViewMode m ){ vm = m; setDropEnabled( itemType == Dir && QDir( itemFileName ).isReadable() ); calcRect();}QPixmap *QtFileIconViewItem::pixmap() const{ switch ( itemType ) { case Dir: { if ( !QDir( itemFileName ).isReadable() ) { if ( vm == QtFileIconView::Small ) return iconFolderLockedSmall; else return iconFolderLockedLarge; } else { if ( vm == QtFileIconView::Small ) return iconFolderSmall; else return iconFolderLarge; } } case Link: { if ( vm == QtFileIconView::Small ) return iconLinkSmall; else return iconLinkLarge; } default: { if ( vm == QtFileIconView::Small ) return iconFileSmall; else return iconFileLarge; } }}QtFileIconViewItem::~QtFileIconViewItem(){ delete itemFileInfo;}/*void QtFileIconViewItem::setText( const QString &text ){ if ( checkSetText ) { if ( text == "." || text == "." || text.isEmpty() ) return; QDir dir( itemFileInfo->dir() ); if ( dir.rename( itemFileInfo->fileName(), text ) ) { itemFileName = itemFileInfo->dirPath( TRUE ) + "/" + text; delete itemFileInfo; itemFileInfo = new QFileInfo( itemFileName ); QIconViewItem::setText( text ); } } else { QIconViewItem::setText( text ); }}*/bool QtFileIconViewItem::acceptDrop( const QMimeSource *e ) const{ if ( type() == Dir && e->provides( "text/uri-list" ) && dropEnabled() ) return TRUE; return FALSE;}void QtFileIconViewItem::dropped( QDropEvent *e, const QValueList<QIconDragItem> & ){ timer.stop(); if ( !QUriDrag::canDecode( e ) ) { e->ignore(); return; } QUriDrag::decodeLocalFiles( e, ( (QtFileIconView *)iconView() )->cpyCutList ); QString str; if ( e->action() == QDropEvent::Copy ) ( (QtFileIconView *)iconView() )->slotCopy(); else ( (QtFileIconView *)iconView() )->slotCut(); ( (QtFileIconView *)iconView() )->slotPaste( itemFileName ); e->acceptAction();}void QtFileIconViewItem::dragEntered(){ if ( type() != Dir || type() == Dir && !QDir( itemFileName ).isReadable() ) return; ( (QtFileIconView*)iconView() )->setOpenItem( this ); timer.start( 1500 );}void QtFileIconViewItem::dragLeft(){ if ( type() != Dir || type() == Dir && !QDir( itemFileName ).isReadable() ) return; timer.stop();}void QtFileIconView::slotPreCpyCut(){ QIconViewItem *item = firstItem(); QDir d = currentDir(); QStringList bak = cpyCutList; cpyCutList.clear(); while ( item != 0 ) { if( item->isSelected() && item->text() != ".." && item->text() != "." ) cpyCutList += d.absPath() + "/" + item->text(); item = item->nextItem(); } if( !cpyCutList.count() ) cpyCutList = bak; else if ( !cpyCutFlag ) emit enablePaste(); else emit disablePaste();}void QtFileIconView::slotCopy(){ cpyCutFlag = 0; slotPreCpyCut();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -