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

📄 startmenu.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000-2005 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.** ** This program is free software; you can redistribute it and/or modify it** under the terms of the GNU General Public License as published by the** Free Software Foundation; either version 2 of the License, or (at your** option) any later version.** ** A copy of the GNU GPL license version 2 is included in this package as ** LICENSE.GPL.**** This program 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 General Public License for more details.**** In addition, as a special exception Trolltech gives permission to link** the code of this program with Qtopia applications copyrighted, developed** and distributed by Trolltech under the terms of the Qtopia Personal Use** License Agreement. You must comply with the GNU General Public License** in all respects for all of the code used other than the applications** licensed under the Qtopia Personal Use License Agreement. If you modify** this file, you may extend this exception to your version of the file,** but you are not obligated to do so. If you do not wish to do so, delete** this exception statement from your version.** ** 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.************************************************************************/#define INCLUDE_MENUITEM_DEF#include "startmenu.h"#include "documentlist.h"#include <qtopia/qpeapplication.h>#include <qtopia/config.h>#include <qtopia/applnk.h>#include <qtopia/global.h>#include <qtopia/resource.h>#include <qtopia/mimetype.h>#include <qdict.h>#include <qdir.h>#include <qpainter.h>#include <stdlib.h>void StartPopupMenu::keyPressEvent( QKeyEvent *e ){    if ( e->key() == Key_F33 || e->key() == Key_Space ) {	// "OK" button, little hacky	QKeyEvent ke(QEvent::KeyPress, Key_Enter, 13, 0);	QPopupMenu::keyPressEvent( &ke );    } else {	QPopupMenu::keyPressEvent( e );    }}//---------------------------------------------------------------------------StartMenu::StartMenu(QWidget *parent) : QLabel( parent ){    startButtonPixmap = "go"; // No tr    int sz = AppLnk::smallIconSize()+3;    QPixmap pm;    pm.convertFromImage(Resource::loadImage(startButtonPixmap).smoothScale(sz,sz));    setPixmap(pm);    setFocusPolicy( NoFocus );    launchMenu = 0;    refreshMenu();}void StartMenu::mousePressEvent( QMouseEvent * ){    launch();}StartMenu::~StartMenu(){}void StartMenu::createMenu(){    delete launchMenu;    launchMenu = new StartPopupMenu( this );    loadMenu( launchMenu );    connect( launchMenu, SIGNAL(activated(int)), SLOT(itemSelected(int)) );}void StartMenu::refreshMenu(){    Config cfg("Taskbar");    cfg.setGroup("Menu");    bool ltabs = cfg.readBoolEntry("LauncherTabs",TRUE);    bool lot = cfg.readBoolEntry("LauncherOther",TRUE);    bool lt = ltabs || lot;    if ( launchMenu && !lt )	return; // nothing to do    if ( launchMenu ) {	int i;	for (i=0; i<(int)launchMenu->count(); i++) {	    QMenuItem* item = launchMenu->findItem(launchMenu->idAt(i));	    if ( item && item->id() >= 0 && item->id() < ntabs ) {		break;	    }	    if ( item && item->isSeparator() ) {		i++;		break;	    }	}	while (i<(int)launchMenu->count())	    launchMenu->removeItemAt(i);	loadMenu(launchMenu);    } else {	createMenu();    }}void StartMenu::itemSelected( int id ){    if ( id >= 0 && id < ntabs ) {	emit tabSelected(tabs[id]);    } else if ( id >= 20 && id < 20+nother ) {	other.at(id-20)->execute();    }}bool StartMenu::loadMenu( QPopupMenu *menu ){    Config cfg("Taskbar");    cfg.setGroup("Menu");    bool ltabs = cfg.readBoolEntry("LauncherTabs",TRUE);    bool lot = cfg.readBoolEntry("LauncherOther",TRUE);    bool sepfirst = !ltabs && !lot;    tabs.clear();    other.setAutoDelete(TRUE);    other.clear();    ntabs = 0;    nother = 0;    bool f=TRUE;    if ( (ltabs || lot) && DocumentList::appLnkSet ) {	QDir dir( MimeType::appsFolderName(), QString::null, QDir::Name );	for (int i=0; i<(int)dir.count(); i++) {	    QString d = dir[i];	    Config cfg(dir.path()+"/"+d+"/.directory",Config::File);	    if ( cfg.isValid() ) {		QString nm = cfg.readEntry("Name");		QString ic = cfg.readEntry("Icon");		if ( !!nm && !!ic ) {		    tabs.append(d);		    const QPixmap &pm = DocumentList::appLnkSet->typePixmap(d);		    const QPixmap &bigPm = DocumentList::appLnkSet->typeBigPixmap(d);		    menu->insertItem( QIconSet(pm, bigPm), nm, ntabs++ );		}	    } else if ( lot && d.right(8)==".desktop") {		AppLnk* applnk = new AppLnk(dir.path()+"/"+d);		if ( applnk->isValid() ) {		    if ( applnk->type() == "Separator" ) { // No tr			if ( lot ) {			    menu->insertSeparator();			    sepfirst = f && !ltabs;			}			delete applnk;		    } else {			f = FALSE;			other.append(applnk);			menu->insertItem( Resource::loadIconSet(applnk->icon()),				applnk->name(), 20+nother++ );		    }		} else {		    delete applnk;		}	    }	}	if ( !menu->count() )	    sepfirst = TRUE;    }    launchMenu->setName(sepfirst ? "accessories" : "accessories_need_sep"); // No tr    bool result = nother || ntabs;    return result;}void StartMenu::launch(){    int y = mapToGlobal( QPoint() ).y() - launchMenu->sizeHint().height();    if ( launchMenu->isVisible() )         launchMenu->hide();    else        launchMenu->popup( QPoint( 1, y ) );}

⌨️ 快捷键说明

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