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

📄 listviews.cpp

📁 Linux下的基于X11的图形开发环境。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000-2002 Trolltech AS.  All rights reserved.**** This file is part of Qt Linguist.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "listviews.h"#include <qpainter.h>static const int Text0MaxLen = 150;static const int Text1MaxLen = 150;/*   LVI implementation*/static QString rho( int n ){    QString s;    s.sprintf( "%.10d", n );    return s;}int LVI::count = 0;LVI::LVI( QListView * parent, QString text )    : QListViewItem( parent, text ){    setText( 0, rho(count++) );}LVI::LVI( QListViewItem * parent, QString text )    : QListViewItem( parent, text ){    setText( 0, rho(count++) );}/*    This is a cut-down version of QListViewItem::paintCell() -    it is needed to produce the effect we want on obsolete items */void LVI::drawObsoleteText( QPainter * p, const QColorGroup & cg, int column,			    int width, int align ){    QListView * lv = listView();    int marg = lv ? lv->itemMargin() : 1;    int r = marg;    p->fillRect( 0, 0, width, height(), cg.brush( QColorGroup::Base ) );    if ( isSelected() && (column==0 || listView()->allColumnsShowFocus()) )	p->fillRect( r - marg, 0, width - r + marg, height(),		     cg.brush( QColorGroup::Highlight ) );	        // Do the ellipsis thingy    QString t = text( column );    QString tmp;    int i  = 0;    if ( p->fontMetrics().width( t ) > width ) {	tmp = "...";	while ( p->fontMetrics().width( tmp + t[i] ) < width )	    tmp += t[ i++ ];	tmp.remove( 0, 3 );	if ( tmp.isEmpty() )	    tmp = t.left( 1 );	tmp += "...";	t = tmp;    }    if ( isSelected() )	p->setPen( lv->palette().disabled().highlightedText() );    else	p->setPen( lv->palette().disabled().text() );        if ( !t.isEmpty() ) {	p->drawText( r, 0, width-marg-r, height(),		     align | AlignVCenter | SingleLine, t );    }	    }int LVI::compare( QListViewItem *other, int column, bool ascending ) const{    QString thisKey = key( column, ascending );    QString otherKey = other->key( column, ascending );    if ( thisKey.contains('&') || otherKey.contains('&') ) {	QString nicerThisKey = thisKey;	QString nicerOtherKey = otherKey;	nicerThisKey.replace( "&", "" );	nicerOtherKey.replace( "&", "" );	int delta = nicerThisKey.localeAwareCompare( nicerOtherKey );	if ( delta != 0 )	    return delta;    }    return thisKey.localeAwareCompare( otherKey );}static QString fixEllipsis( const QString & str, int len ){    QString shortened = str.simplifyWhiteSpace();    if ( (int) shortened.length() > len ) {	QString dots = TrWindow::tr( "..." );	shortened.truncate( len - dots.length() );	shortened.append( dots );    }    return shortened;}/*   MessageLVI implementation*/MessageLVI::MessageLVI( QListView *parent,			const MetaTranslatorMessage & message,			const QString& text, const QString& comment,			ContextLVI * c )    : LVI( parent ), m( message ), tx( text ), com( comment ), ctxt( c ){    if ( m.translation().isEmpty() ) {	QString t = "";	m.setTranslation( t );    }    setText( 1, fixEllipsis( text, Text0MaxLen ) );    fini = TRUE;    d = FALSE;    if( m.type() ==  MetaTranslatorMessage::Unfinished ) 	setFinished( FALSE );}void MessageLVI::updateTranslationText(){    setText( 2, fixEllipsis( m.translation(), Text1MaxLen ) );}void MessageLVI::paintCell( QPainter * p, const QColorGroup & cg, int column, 			    int width, int align ){        if ( column == 0 ) {	int x = (width/2) - TrWindow::pxOn->width()/2;	int y = (height()/2) - TrWindow::pxOn->height()/2;	int marg = listView() ? listView()->itemMargin() : 1;	int r = marg;		if ( isSelected() )	    p->fillRect( r - marg, 0, width - r + marg, height(),			 cg.brush( QColorGroup::Highlight ) );	else	    p->fillRect( 0, 0, width, height(), 			 cg.brush( QColorGroup::Base ) );		  	if ( m.type() == MetaTranslatorMessage::Unfinished && danger() )  	    p->drawPixmap( x, y, *TrWindow::pxDanger );  	else if ( m.type() == MetaTranslatorMessage::Finished )  	    p->drawPixmap( x, y, *TrWindow::pxOn );  	else if ( m.type() == MetaTranslatorMessage::Unfinished )  	    p->drawPixmap( x, y, *TrWindow::pxOff );  	else if ( m.type() == MetaTranslatorMessage::Obsolete )  	    p->drawPixmap( x, y, *TrWindow::pxObsolete );    } else {	if ( m.type() == MetaTranslatorMessage::Obsolete )	    drawObsoleteText( p, cg, column, width, align );	else	    QListViewItem::paintCell( p, cg, column, width, align );    }}void MessageLVI::setTranslation( const QString& translation ){    m.setTranslation( translation );}void MessageLVI::setFinished( bool finished ){    if ( !fini && finished ) {	m.setType( MetaTranslatorMessage::Finished );	repaint();	ctxt->decrementUnfinishedCount();    } else if ( fini && !finished ) {	m.setType( MetaTranslatorMessage::Unfinished );	repaint();	ctxt->incrementUnfinishedCount();    }    fini = finished;}void MessageLVI::setDanger( bool danger ){    if ( !d && danger ) {	ctxt->incrementDangerCount();	repaint();    } else if ( d && !danger ) {	ctxt->decrementDangerCount();	repaint();    }    d = danger;}QString MessageLVI::context() const{    return QString( m.context() );}MetaTranslatorMessage MessageLVI::message() const{    return m;}/*   ContextLVI implementation*/ContextLVI::ContextLVI( QListView *lv, const QString& context  )    : LVI( lv ), com( "" ){    messageItems.setAutoDelete( TRUE );    unfinishedCount = 0;    dangerCount   = 0;    obsoleteCount = 0;    itemCount = 0;    setText( 1, context );}void ContextLVI::instantiateMessageItem( QListView * lv, MessageLVI * i ){     itemCount++;    appendMessageItem( lv, i );}void ContextLVI::appendMessageItem( QListView * lv, MessageLVI * i ){     lv->takeItem( i );    messageItems.append( i );}void ContextLVI::updateStatus(){    QString s;    s.sprintf( "%d/%d", itemCount - unfinishedCount - obsoleteCount, 	       itemCount - obsoleteCount );    setText( 2, s );}void ContextLVI::paintCell( QPainter * p, const QColorGroup & cg, int column, 		    int width, int align ){    if ( column == 0 ) {	int x = (width/2) - TrWindow::pxOn->width()/2;	int y = (height()/2) - TrWindow::pxOn->height()/2;	int marg = listView() ? listView()->itemMargin() : 1;	int r = marg;		if ( isSelected() )	    p->fillRect( r - marg, 0, width - r + marg, height(),			 cg.brush( QColorGroup::Highlight ) );	else	    p->fillRect( 0, 0, width, height(),			 cg.brush( QColorGroup::Base ) );			if ( isContextObsolete() )  	    p->drawPixmap( x, y, *TrWindow::pxObsolete );  	else if ( unfinishedCount == 0 )  	    p->drawPixmap( x, y, *TrWindow::pxOn );  	else  	    p->drawPixmap( x, y, *TrWindow::pxOff );    } else {	if ( isContextObsolete() )	    drawObsoleteText( p, cg, column, width, align );	else	    QListViewItem::paintCell( p, cg, column, width, align );    }}void ContextLVI::appendToComment( const QString& x ){    if ( !com.isEmpty() )	com += QString( "\n\n" );    com += x;}void ContextLVI::incrementUnfinishedCount(){    if ( unfinishedCount++ == 0 )	repaint();}void ContextLVI::decrementUnfinishedCount(){    if ( --unfinishedCount == 0 )	repaint();}void ContextLVI::incrementDangerCount(){    if ( dangerCount++ == 0 )	repaint();}void ContextLVI::decrementDangerCount(){    if ( --dangerCount == 0 )	repaint();}void ContextLVI::incrementObsoleteCount(){    if ( obsoleteCount++ == 0 )	repaint();}bool ContextLVI::isContextObsolete(){    return (obsoleteCount == itemCount);}QString ContextLVI::fullContext() const{    return comment().stripWhiteSpace();}

⌨️ 快捷键说明

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