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

📄 qpedecoration_qws.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	if ( *iface )	    (*iface)->addRef();	return QS_OK;    }    Q_REFCOUNTprivate:    ulong ref;};static WindowDecorationInterface *wdiface = 0;static PluginLoaderIntern *wdLoader = 0;//===========================================================================bool QPEDecoration::helpExists() const{    if ( helpFile.isNull() ) {	QStringList helpPath = Global::helpPath();	QString hf = QString(qApp->argv()[0]) + ".html";	bool he = FALSE;	for (QStringList::ConstIterator it=helpPath.begin(); it!=helpPath.end() && !he; ++it)	    he = QFile::exists( *it + "/" + hf );	((QPEDecoration*)this)->helpFile = hf;	((QPEDecoration*)this)->helpexists = he;	return he;    }    return helpexists;}QPEDecoration::QPEDecoration()    : QWSDefaultDecoration(){    if ( wdLoader ) {	delete wdLoader;	wdLoader = 0;    } else {	delete wdiface;    }    wdiface = new DefaultWindowDecoration;    helpexists = FALSE; // We don't know (flagged by helpFile being null)    qpeManager = new QPEManager( this );    imageOk = Resource::loadImage( "OKButton" );    imageClose = Resource::loadImage( "CloseButton" );    imageHelp = Resource::loadImage( "HelpButton" );}QPEDecoration::QPEDecoration( const QString &plugin )    : QWSDefaultDecoration(){    if ( wdLoader ) {	delete wdLoader;	wdLoader = 0;    } else {	delete wdiface;    }    if ( plugin == "Qtopia" ) { // No tr	wdiface = new DefaultWindowDecoration;    } else {	wdLoader = new PluginLoaderIntern( "decorations" ); // No tr	WindowDecorationInterface *iface = 0;	if ( !wdLoader->inSafeMode() && wdLoader->isEnabled(plugin) &&		wdLoader->queryInterface( plugin, IID_WindowDecoration, (QUnknownInterface**)&iface ) == QS_OK && iface ) {	    wdiface = iface;	} else {	    delete wdLoader;	    wdLoader = 0;	    wdiface = new DefaultWindowDecoration;	}    }    helpexists = FALSE; // We don't know (flagged by helpFile being null)    qpeManager = new QPEManager( this );}QPEDecoration::~QPEDecoration(){    delete qpeManager;}const char **QPEDecoration::menuPixmap(){    return (const char **)0;}const char **QPEDecoration::closePixmap(){    return (const char **)qpe_close_xpm;}const char **QPEDecoration::minimizePixmap(){    return (const char **)qpe_accept_xpm;}const char **QPEDecoration::maximizePixmap(){    return (const char **)0;}const char **QPEDecoration::normalizePixmap(){    return (const char **)0;}int QPEDecoration::getTitleHeight( const QWidget *w ){    WindowDecorationInterface::WindowData wd;    windowData( w, wd );    return wdiface->metric(WindowDecorationInterface::TitleHeight,&wd);}/*    If rect is empty, no frame is added. (a hack, really)*/QRegion QPEDecoration::region(const QWidget *widget, const QRect &rect, QWSDecoration::Region type){    qpeManager->updateActive();    WindowDecorationInterface::WindowData wd;    windowData( widget, wd );    wd.rect = rect;    int titleHeight = wdiface->metric(WindowDecorationInterface::TitleHeight,&wd);    int okWidth = wdiface->metric(WindowDecorationInterface::OKWidth,&wd);    int closeWidth = wdiface->metric(WindowDecorationInterface::CloseWidth,&wd);    int helpWidth = wdiface->metric(WindowDecorationInterface::HelpWidth,&wd);    int grab = wdiface->metric(WindowDecorationInterface::CornerGrabSize,&wd);    QRegion region;    switch ((int)type) {	case Menu:	    break;	case Maximize:	    if ( !widget->inherits( "QDialog" ) && qApp->desktop()->width() > 350 ) {		int maximizeWidth = wdiface->metric(WindowDecorationInterface::MaximizeWidth,&wd);		int left = rect.right() - maximizeWidth - closeWidth;		if ( ((DecorHackWidget *)widget)->needsOk() )		    left -= okWidth;		QRect r(left, rect.top() - titleHeight, closeWidth, titleHeight);		region = r;	    }	    break;	case Minimize:	    if ( ((DecorHackWidget *)widget)->needsOk() ) {		QRect r(rect.right() - okWidth,		    rect.top() - titleHeight, okWidth, titleHeight);		if (r.left() > rect.left() + titleHeight)		    region = r;	    }	    break;	case Close:	    {		int left = rect.right() - closeWidth;		if ( ((DecorHackWidget *)widget)->needsOk() )		    left -= okWidth;		QRect r(left, rect.top() - titleHeight, closeWidth, titleHeight);		region = r;	    }	    break;    	case Title:	    if ( !widget->isMaximized() ) {		int width = rect.width() - helpWidth - closeWidth;		if ( ((DecorHackWidget *)widget)->needsOk() )		    width -= okWidth;		QRect r(rect.left()+helpWidth, rect.top() - titleHeight,			width, titleHeight);		if (r.width() > 0)		    region = r;	    }	    break;	case Help:	    if ( helpExists() || widget->testWFlags(Qt::WStyle_ContextHelp) ) {		QRect r(rect.left(), rect.top() - titleHeight,			  helpWidth, titleHeight);		region = r;	    }	    break;	case Top:	    if ( !widget->isMaximized() ) {		QRegion m = wdiface->mask(&wd);		QRect br = m.boundingRect();		int b = wdiface->metric(WindowDecorationInterface::TopBorder,&wd);		region = m & QRect( br.left()+grab, br.top(),				    br.width()-2*grab, b );	    }	    break; 	case Left:	    if ( !widget->isMaximized() ) {		QRegion m = wdiface->mask(&wd);		QRect br = m.boundingRect();		int b = wdiface->metric(WindowDecorationInterface::LeftBorder,&wd);		region = m & QRect( br.left(), br.top()+grab,				    b, br.height()-2*grab );	    }	    break; 	case Right:	    if ( !widget->isMaximized() ) {		QRegion m = wdiface->mask(&wd);		QRect br = m.boundingRect();		int b = wdiface->metric(WindowDecorationInterface::RightBorder,&wd);		region = m & QRect( rect.right(), br.top()+grab,				    b, br.height()-2*grab );	    }	    break; 	case Bottom:	    if ( !widget->isMaximized() ) {		QRegion m = wdiface->mask(&wd);		QRect br = m.boundingRect();		int b = wdiface->metric(WindowDecorationInterface::BottomBorder,&wd);		region = m & QRect( br.left()+grab, rect.bottom(),				    br.width()-2*grab, b );	    }	    break;	case TopLeft:	    if ( !widget->isMaximized() ) {		QRegion m = wdiface->mask(&wd);		QRect br = m.boundingRect();		int tb = wdiface->metric(WindowDecorationInterface::TopBorder,&wd);		int lb = wdiface->metric(WindowDecorationInterface::LeftBorder,&wd);		QRegion crgn( br.left(), br.top(), grab, tb );		crgn |= QRect( br.left(), br.top(), lb, grab );		region = m & crgn;	    }	    break; 	case TopRight:	    if ( !widget->isMaximized() ) {		QRegion m = wdiface->mask(&wd);		QRect br = m.boundingRect();		int tb = wdiface->metric(WindowDecorationInterface::TopBorder,&wd);		int rb = wdiface->metric(WindowDecorationInterface::RightBorder,&wd);		QRegion crgn( br.right()-grab, br.top(), grab, tb );		crgn |= QRect( br.right()-rb, br.top(), rb, grab );		region = m & crgn;	    }	    break;	case BottomLeft:	    if ( !widget->isMaximized() ) {		QRegion m = wdiface->mask(&wd);		QRect br = m.boundingRect();		region = m & QRect( br.left(), br.bottom()-grab, grab, grab );	    }	    break; 	case BottomRight:	    if ( !widget->isMaximized() ) {		QRegion m = wdiface->mask(&wd);		QRect br = m.boundingRect();		region = m & QRect( br.right()-grab, br.bottom()-grab, grab, grab );	    }	    break;	case All:	    if ( widget->isMaximized() )		region = QWSDefaultDecoration::region(widget, rect, type);	    else		region = wdiface->mask(&wd) - rect;	    break;	default:	    region = QWSDefaultDecoration::region(widget, rect, type);	    break;    }    return region;}void QPEDecoration::paint(QPainter *painter, const QWidget *widget){    WindowDecorationInterface::WindowData wd;    windowData( widget, wd );    int titleWidth = getTitleWidth(widget);    int titleHeight = wdiface->metric(WindowDecorationInterface::TitleHeight,&wd);    QRect rect(widget->rect());    // title bar rect    QRect tbr( rect.left(), rect.top() - titleHeight, rect.width(), titleHeight );#ifndef QT_NO_PALETTE    QRegion oldClip = painter->clipRegion();    painter->setClipRegion( oldClip - QRegion( tbr ) );	// reduce flicker    wdiface->drawArea( WindowDecorationInterface::Border, painter, &wd );    painter->setClipRegion( oldClip );    if (titleWidth > 0) {	const QColorGroup &cg = widget->palette().active();	QBrush titleBrush;	QPen   titlePen;	if ( wd.flags & WindowDecorationInterface::WindowData::Active ) {	    titleBrush = cg.brush(QColorGroup::Highlight);	    titlePen   = cg.color(QColorGroup::HighlightedText);	} else {	    titleBrush = cg.brush(QColorGroup::Background);	    titlePen   = cg.color(QColorGroup::Text);	}	wdiface->drawArea( WindowDecorationInterface::Title, painter, &wd );	// Draw caption	painter->setPen(titlePen);	QFont f( QApplication::font() );	f.setWeight( QFont::Bold );	painter->setFont(f);	wdiface->drawArea( WindowDecorationInterface::TitleText, painter, &wd );    }#endif //QT_NO_PALETTE    paintButton( painter, widget, (QWSDecoration::Region)Help, 0 );}void QPEDecoration::paintButton(QPainter *painter, const QWidget *w,			QWSDecoration::Region type, int state){    WindowDecorationInterface::Button b;    switch ((int)type) {	case Close:	    b = WindowDecorationInterface::Close;	    break;	case Minimize:	    if ( ((DecorHackWidget *)w)->needsOk() )		b = WindowDecorationInterface::OK;	    else if ( helpExists() )		b = WindowDecorationInterface::Help;	    else		return;	    break;	case Help:	    b = WindowDecorationInterface::Help;	    break;	case Maximize:	    b = WindowDecorationInterface::Maximize;	    break;	default:	    return;    }    WindowDecorationInterface::WindowData wd;    windowData( w, wd );    int titleHeight = wdiface->metric(WindowDecorationInterface::TitleHeight,&wd);    QRect rect(w->rect());    QRect tbr( rect.left(), rect.top() - titleHeight, rect.width(), titleHeight );    QRect brect(region(w, w->rect(), type).boundingRect());    const QColorGroup &cg = w->palette().active();    if ( wd.flags & WindowDecorationInterface::WindowData::Active )	painter->setPen( cg.color(QColorGroup::HighlightedText) );    else	painter->setPen( cg.color(QColorGroup::Text) );    QRegion oldClip = painter->clipRegion();    painter->setClipRegion( QRect(brect.x(), tbr.y(), brect.width(), tbr.height()) ); // reduce flicker    wdiface->drawArea( WindowDecorationInterface::Title, painter, &wd );    wdiface->drawButton( b, painter, &wd, brect.x(), brect.y(), brect.width(), brect.height(), (QWSButton::State)state );    painter->setClipRegion( oldClip );}//#define QPE_DONT_SHOW_TITLEBARvoid QPEDecoration::maximize( QWidget *widget ){#ifdef QPE_DONT_SHOW_TITLEBAR        if ( !widget->inherits( "QDialog" ) ) {	widget->setGeometry( qt_maxWindowRect );    } else #endif		{	QWSDecoration::maximize( widget );    }}QPopupMenu *QPEDecoration::menu( const QWidget *, const QPoint & ){    QPopupMenu *m = new QPopupMenu();    m->insertItem(QPEManager::tr("Restore"), (int)Normalize);    m->insertItem(QPEManager::tr("Move"), (int)Title);    m->insertItem(QPEManager::tr("Size"), (int)BottomRight);    m->insertItem(QPEManager::tr("Maximize"), (int)Maximize);    m->insertSeparator();    m->insertItem(QPEManager::tr("Close"), (int)Close);    return m;}#ifndef QT_NO_DIALOGclass HackDialog : public QDialog{public:    void acceptIt() {	if ( isA( "QMessageBox" ) )	    qApp->postEvent( this, new QKeyEvent( QEvent::KeyPress, Key_Enter, '\n', 0, "\n" ) );	else	    accept();    }};#endifvoid QPEDecoration::minimize( QWidget *widget ){#ifndef QT_NO_DIALOG    // We use the minimize button as an "accept" button.    if ( widget->inherits( "QDialog" ) ) {        HackDialog *d = (HackDialog *)widget;        d->acceptIt();    } #endif    else if ( ((DecorHackWidget *)widget)->needsOk() ) {	QSignal s;	s.connect( widget, SLOT( accept() ) );	s.activate();    } else {	help( widget );    }}void QPEDecoration::help( QWidget *w ){    if ( helpExists() ) {	QString hf = helpFile;	QString localHelpFile = QString(qApp->argv()[0]) + "-" + w->name() + ".html";	QStringList helpPath = Global::helpPath();	for (QStringList::ConstIterator it=helpPath.begin(); it!=helpPath.end(); ++it) {	    if ( QFile::exists( *it + "/" + localHelpFile ) ) {		hf = localHelpFile;		break;	    }	}	Global::execute( "helpbrowser", hf );    } else if ( w && w->testWFlags(Qt::WStyle_ContextHelp) ) {	QWhatsThis::enterWhatsThisMode();	QWhatsThis::leaveWhatsThisMode( qApp->translate("QPEDecoration",	    "<Qt>Comprehensive help is not available for this application, "	    "however there is context-sensitive help.<p>To use context-sensitive help:<p>"	    "<ol><li>click and hold the help button."	    "<li>when the title bar shows <b>What's this...</b>, "	    "click on any control.</ol></Qt>" ) );    }}void QPEDecoration::windowData( const QWidget *w, WindowDecorationInterface::WindowData &wd ) const{    wd.rect = w->rect();    if ( qpeManager->whatsThisWidget() == w )	wd.caption = qApp->translate("QPEDecoration","What's this..." );    else	wd.caption = w->caption();    wd.palette = qApp->palette();    wd.flags = 0;    wd.flags |= w->isMaximized() ? WindowDecorationInterface::WindowData::Maximized : 0;    wd.flags |= w->testWFlags(Qt::WStyle_Dialog) ? WindowDecorationInterface::WindowData::Dialog : 0;    const QWidget *active = qpeManager->activeWidget();    wd.flags |= w == active ? WindowDecorationInterface::WindowData::Active : 0;    wd.reserved = 1;}/*#ifndef QT_NO_POPUPMENUQPopupMenu *QPEDecoration::menu(QWSManager*, const QWidget*, const QPoint&){    return 0;}#endif*/#endif // QT_NO_QWS_QPE_WM_STYLE#endif

⌨️ 快捷键说明

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