lfpport_qte_mainwindow.cpp
来自「This is a resource based on j2me embedde」· C++ 代码 · 共 334 行
CPP
334 行
/* * * * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * 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 version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. * * This source file is specific for Qt-based configurations. */#include <stdio.h>#include <kni.h>#include <qapplication.h>#include <qmainwindow.h>#include <qpainter.h>#include <qpaintdevice.h>#include <qpaintdevicemetrics.h>#include <qlayout.h> #include <qtoolbar.h> #include <qaction.h> #include <qmessagebox.h> #include <qstatusbar.h> #include <qsizepolicy.h>#include <midpServices.h>#include <midpMalloc.h>#include <jvm.h>#include <jvmspi.h>#include <sni.h>#include <midpEventUtil.h>#include <midpString.h>#include "lfpport_qte_mainwindow.h"#include "lfpport_qte_ticker.h"#include "lfpport_qte_mscreen.h"#include "lfpport_qte_util.h"#if ENABLE_MULTIPLE_DISPLAYS#include <lcdlf_export.h>#endif /* ENABLE_MULTIPLE_DISPLAYS */#if (!defined(QT_NO_QWS_KEYBOARD) && defined(QT_KEYPAD_MODE))#include "lfpport_qte_inputmode.h"#include <qteapp_export.h>#endif#include <moc_qteapp_mainwindow.cpp>#include <moc_lfpport_qte_mainwindow.cpp>/** * @file * * Main MIDP window intelligence. Contains controls for * things like event filtering and window sizing. *//** Indicates that system is in the process of shutting down, therefore "window close" events should be passed on to QT. */extern jboolean shuttingDown;/** * @class MIDPMainWindow lfpport_qte_mainwindow.h * @brief The main top window. A base for MScreen, ticker, etc. * * This is the main widget. */PlatformMIDPMainWindow::PlatformMIDPMainWindow(QWidget *parent, const char* name) : MIDPMainWindow(parent, name) { TRACE_MSC(PlatformMIDPMainWindow::PlatformMIDPMainWindow...); // Initial screen is always normal isFullScreen = FALSE; // Top widget mwindow = new QWidget(this); ticker = new Ticker(mwindow); mscreen = new PlatformMScreen(mwindow); mscreen->init(); cmd = new CommandManager(this); box = new QVBoxLayout(mwindow, 1 /* border */, 1 /* space */); // Default adding direction: from top to bottom box->addWidget(mscreen); box->addWidget(ticker); setCentralWidget(mwindow); // Set initial title before any Displayable is shown setTitleBar(MAINWINDOW_TITLE); // Fix main window geometry int WINDOW_HEIGHT = mscreen->getDisplayFullHeight() + MENUBAR_HEIGHT; setFixedSize(mscreen->getDisplayFullWidth(), WINDOW_HEIGHT); // Misc set-up ticker->setTickerString(QString::null); mscreen->setFocus(); this->installEventFilter(this); // init input mode#if (!defined(QT_NO_QWS_KEYBOARD) && defined(QT_KEYPAD_MODE)) QWSServer * server = qteapp_get_server(); server->setKeyboardFilter(new AbcKeyboardFilter());#endif TRACE_MSC(...PlatformMIDPMainWindow::PlatformMIDPMainWindow);}/** * Deconstructor for MIDPMainWindow. * It has to remove any timer left. */PlatformMIDPMainWindow::~PlatformMIDPMainWindow() { finalizeMenus(); killTimers();}/** * Set main window title */void PlatformMIDPMainWindow::setTitleBar(const QString &title) { static WFlags flags = 0; QWidget *parent = this->parentWidget(); QPoint pos = this->pos(); WFlags f = WStyle_Customize; setCaption(title); if (!title.isNull() && !title.isEmpty()) { f |= (WStyle_Title | WStyle_DialogBorder); } if (flags != f) { flags = f; reparent(parent, f, pos); }}/** * Return the menu command object. */CommandManager* PlatformMIDPMainWindow::getMenu(){ return cmd;}/** * Override to notify Java of key press. */void PlatformMIDPMainWindow::keyPressEvent(QKeyEvent *key){ // return event to PlatformMScreen, wich is responsible // for notifying java mscreen->keyPressEvent(key);}/** * Ask the ticker associate with this mainwindow * to set the text. It is not main window responsible * to do so. * * @param textStr the string to be set to the ticker */voidPlatformMIDPMainWindow::setTickerString(const QString& textStr){ if (ticker) ticker->setTickerString(textStr);}/** * Returns TRUE if this event has been handled */bool PlatformMIDPMainWindow::eventFilter(QObject *obj, QEvent *e) { // Filter out Close event to allow VM properly shuts down if (((e->type() == QEvent::Close) && !shuttingDown) || ((e->type() == QEvent::KeyPress || e->type() == QEvent::Accel) &&#ifdef QT_KEYPAD_MODE ((QKeyEvent *)e)->key() == Qt::Key_Hangup)) { #else (((QKeyEvent *)e)->key() == Qt::Key_End || ((QKeyEvent *)e)->key() == Qt::Key_F8 ))) {#endif // Pressing the (x) button means to destroy the // foreground MIDlet. MidpEvent evt; MIDP_EVENT_INITIALIZE(evt); #if ENABLE_MULTIPLE_ISOLATES evt.type = MIDLET_DESTROY_REQUEST_EVENT;#if ENABLE_MULTIPLE_DISPLAYS evt.DISPLAY = gForegroundDisplayIds[lcdlf_get_current_hardwareId()]; #else evt.DISPLAY = gForegroundDisplayId; #endif /* ENABLE_MULTIPLE_DISPLAYS */ evt.intParam1 = gForegroundIsolateId; midpStoreEventAndSignalAms(evt);#else evt.type = DESTROY_MIDLET_EVENT; midpStoreEventAndSignalForeground(evt);#endif if (e->type() == QEvent::Close) { ((QCloseEvent*)e)->ignore(); } return TRUE; } if (e->type() == QEvent::KeyPress || e->type() == QEvent::Accel) { QKeyEvent *ke = (QKeyEvent *) e; if (ke->key() == Qt::Key_Home || ke->key() == Qt::Key_F7) { mscreen->keyPressEvent(ke); ke->ignore(); return TRUE; } } return QWidget::eventFilter(obj, e );}/** * Setup full screen mode * * @param fullscn true if fullscreen mode is wanted, false * when normal screen mode is needed. */void PlatformMIDPMainWindow::setFullScreen(int fullscn) { if (fullscn && !isFullScreen) { showFullScreen(); } if (!fullscn && isFullScreen) { showNormalScreen(); }}/** * Refresh screen after width or height was changed * * @param fullscn true if fullscreen mode is active, false * when normal screen mode is active. */void PlatformMIDPMainWindow::resizeScreen() { if (isFullScreen) { showFullScreen(); } else { showNormalScreen(); }}/** * Show full screen more - in our case, it means no ticker. */void PlatformMIDPMainWindow::showFullScreen(void) { isFullScreen = TRUE; ticker->hide(); // Delete the current layout, a must. // otherwise, won't work. delete box; box = new QVBoxLayout(mwindow, 0 /* border */, 0 /* space */); mscreen->setVScrollBarMode(QScrollView::AlwaysOff); mscreen->setBufferSize(MScreen::fullScreenSize); box->addWidget(mscreen); setCentralWidget(mwindow); setFixedSize(mscreen->getDisplayFullWidth(), mscreen->getDisplayFullHeight() + MENUBAR_HEIGHT); mscreen->setFocus();}/** * Restructure the whole layout of this app to * show normal screen mode. */void PlatformMIDPMainWindow::showNormalScreen(void) { isFullScreen = FALSE; // Delete the current layout, a must. // otherwise, won't work. delete box; box = new QVBoxLayout(mwindow, 1 /* border */, 1 /* space */); mscreen->setVScrollBarMode(QScrollView::Auto); mscreen->setBufferSize(MScreen::normalScreenSize); box->addWidget(mscreen); box->addWidget(ticker); ticker->show(); setCentralWidget(mwindow); setFixedSize(mscreen->getDisplayWidth(), mscreen->getDisplayFullHeight() + MENUBAR_HEIGHT); mscreen->setFocus();}MIDPMainWindow* lfpport_create_main_window( QWidget* parent, const char* name) { return new PlatformMIDPMainWindow(parent, name);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?