summaryrefslogtreecommitdiff
authorsandman <sandman>2002-08-04 03:39:23 (UTC)
committer sandman <sandman>2002-08-04 03:39:23 (UTC)
commit71d67cf1646e3277198df677b2de62f8bb45b921 (patch) (side-by-side diff)
tree20f00167d1496217d87a2f23187f567b4cd13d4e
parent97cdd27f6f7696e4e6f1239c90ecc2b94c087239 (diff)
downloadopie-71d67cf1646e3277198df677b2de62f8bb45b921.zip
opie-71d67cf1646e3277198df677b2de62f8bb45b921.tar.gz
opie-71d67cf1646e3277198df677b2de62f8bb45b921.tar.bz2
Fix for bug #102
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--core/apps/calibrate/calibrate.cpp11
-rw-r--r--core/launcher/shutdownimpl.cpp11
-rw-r--r--core/launcher/shutdownimpl.h2
3 files changed, 22 insertions, 2 deletions
diff --git a/core/apps/calibrate/calibrate.cpp b/core/apps/calibrate/calibrate.cpp
index b9ad73d..6d498bc 100644
--- a/core/apps/calibrate/calibrate.cpp
+++ b/core/apps/calibrate/calibrate.cpp
@@ -1,180 +1,187 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** 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 <math.h>
#include "calibrate.h"
#include <qpe/resource.h>
-
+#include <qpe/qcopenvelope_qws.h>
#include <qapplication.h>
#if defined(Q_WS_QWS) || defined(_WS_QWS_)
#include <qpainter.h>
#include <qtimer.h>
#include <qwindowsystem_qws.h>
#include <qgfx_qws.h>
Calibrate::Calibrate( QWidget* parent, const char * name, WFlags wf ) :
QDialog( parent, name, TRUE, wf | WStyle_Tool | WStyle_Customize | WStyle_StaysOnTop )
{
showCross = TRUE;
const int offset = 30;
QRect desk = qApp->desktop() ->geometry();
setGeometry( 0, 0, desk.width(), desk.height() );
if ( desk.height() < 250 ) {
int w = desk.height() / 3;
logo.convertFromImage( Resource::loadImage( "launcher/opielogo" ).smoothScale( w, w ) );
}
else {
logo = Resource::loadPixmap( "launcher/opielogo" );
}
cd.screenPoints[ QWSPointerCalibrationData::TopLeft ] = QPoint( offset, offset );
cd.screenPoints[ QWSPointerCalibrationData::BottomLeft ] = QPoint( offset, qt_screen->deviceHeight() - offset );
cd.screenPoints[ QWSPointerCalibrationData::BottomRight ] = QPoint( qt_screen->deviceWidth() - offset, qt_screen->deviceHeight() - offset );
cd.screenPoints[ QWSPointerCalibrationData::TopRight ] = QPoint( qt_screen->deviceWidth() - offset, offset );
cd.screenPoints[ QWSPointerCalibrationData::Center ] = QPoint( qt_screen->deviceWidth() / 2, qt_screen->deviceHeight() / 2 );
goodcd = cd;
reset();
timer = new QTimer( this );
connect( timer, SIGNAL( timeout() ), this, SLOT( timeout() ) );
}
Calibrate::~Calibrate()
{
store();
}
void Calibrate::show()
{
grabMouse();
QWSServer::mouseHandler() ->getCalibration( &goodcd );
QWSServer::mouseHandler() ->clearCalibration();
QDialog::show();
}
void Calibrate::store()
{
QWSServer::mouseHandler() ->calibrate( &goodcd );
}
void Calibrate::hide()
{
- if ( isVisible() )
+ if ( isVisible ( )) {
store();
+
+ // hack - calibrate is a launcher dialog, but treated like a standalone app
+ {
+ QCopEnvelope e( "QPE/System", "closing(QString)" );
+ e << QString ( "calibrate" );
+ }
+ }
QDialog::hide();
}
void Calibrate::reset()
{
penPos = QPoint();
location = QWSPointerCalibrationData::TopLeft;
crossPos = fromDevice( cd.screenPoints[ location ] );
}
QPoint Calibrate::fromDevice( const QPoint &p )
{
return qt_screen->mapFromDevice ( p, QSize( qt_screen->deviceWidth ( ), qt_screen->deviceHeight() ) );
}
bool Calibrate::sanityCheck()
{
QPoint tl = cd.devPoints[QWSPointerCalibrationData::TopLeft];
QPoint tr = cd.devPoints[QWSPointerCalibrationData::TopRight];
QPoint bl = cd.devPoints[QWSPointerCalibrationData::BottomLeft];
QPoint br = cd.devPoints[QWSPointerCalibrationData::BottomRight];
// not needed anywhere .. just calculate it, so it's there
cd. devPoints [QWSPointerCalibrationData::Center] = QRect ( tl, br ). normalize ( ). center ( );
int dlx = QABS( bl. x ( ) - tl. x ( ));
int dly = QABS( bl. y ( ) - tl. y ( ));
int drx = QABS( br. x ( ) - tr. x ( ));
int dry = QABS( br. y ( ) - tr. y ( ));
int dtx = QABS( tr. x ( ) - tl. x ( ));
int dty = QABS( tr. y ( ) - tl. y ( ));
int dbx = QABS( br. x ( ) - bl. x ( ));
int dby = QABS( br. y ( ) - bl. y ( ));
int dl = (int) ::sqrt (( dlx * dlx ) + ( dly * dly )); // calculate vector lengths for all sides
int dr = (int) ::sqrt (( drx * drx ) + ( dry * dry ));
int dt = (int) ::sqrt (( dtx * dtx ) + ( dty * dty ));
int db = (int) ::sqrt (( dbx * dbx ) + ( dby * dby ));
// Calculate leeway for x/y (we do not care if diff1/diff2 is for x or y here !)
int diff1 = QABS( dl - dr );
int avg1 = ( dl + dr ) / 2;
int diff2 = QABS( dt - db );
int avg2 = ( dt + db ) / 2;
// Calculate leeway for "real" vector length against "manhattan" vector length
// This is a check, if the rect is rotated (other then 0/90/180/270)
// It needs to be performed only for the triange (bl, tl, tr)
int diff3 = QABS(( dlx + dly + dtx + dty ) - ( dl + dt ));
int avg3 = (( dlx + dly + dtx + dty ) + ( dl + dt )) / 2;
if (( diff1 > ( avg1 / 20 )) || // 5% leeway
( diff2 > ( avg2 / 20 )) ||
( diff3 > ( avg3 / 20 )))
return false;
else
return true;
}
void Calibrate::moveCrosshair( QPoint pt )
{
showCross = FALSE;
repaint( crossPos.x() - 8, crossPos.y() - 8, 16, 16 );
showCross = TRUE;
crossPos = pt;
repaint( crossPos.x() - 8, crossPos.y() - 8, 16, 16 );
}
void Calibrate::paintEvent( QPaintEvent * )
{
QPainter p( this );
int y;
if ( !logo.isNull() ) {
y = height() / 2 - logo.height() - 15;
p.drawPixmap( ( width() - logo.width() ) / 2, y, logo );
}
y = height() / 2 + 15;
p.drawText( 0, y + height() / 8, width(), height() - y, AlignHCenter,
tr( "Touch the crosshairs firmly and\n"
"accurately to calibrate your screen." ) );
QFont f = p.font();
f.setBold( TRUE );
p.setFont( f );
p.drawText( 0, y, width(), height() - y, AlignHCenter | WordBreak,
tr( "Welcome to Opie" ) );
if ( showCross ) {
p.drawRect( crossPos.x() - 1, crossPos.y() - 8, 2, 7 );
p.drawRect( crossPos.x() - 1, crossPos.y() + 1, 2, 7 );
p.drawRect( crossPos.x() - 8, crossPos.y() - 1, 7, 2 );
p.drawRect( crossPos.x() + 1, crossPos.y() - 1, 7, 2 );
diff --git a/core/launcher/shutdownimpl.cpp b/core/launcher/shutdownimpl.cpp
index b1925d9..9292bb8 100644
--- a/core/launcher/shutdownimpl.cpp
+++ b/core/launcher/shutdownimpl.cpp
@@ -1,168 +1,179 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** 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 "shutdownimpl.h"
#include <qpe/global.h>
+#include <qpe/qcopenvelope_qws.h>
#include <qtimer.h>
#include <qprogressbar.h>
#include <qpushbutton.h>
#include <qbuttongroup.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qpalette.h>
static void changeButtonColor ( QPushButton *btn, const QColor &col )
{
QPalette pal = btn-> palette ( );
pal. setColor ( QPalette::Active, QColorGroup::Button, col );
pal. setColor ( QPalette::Disabled, QColorGroup::Button, col );
pal. setColor ( QPalette::Inactive, QColorGroup::Button, col );
btn-> setPalette ( pal );
}
ShutdownImpl::ShutdownImpl( QWidget* parent, const char *name, WFlags fl )
: QWidget ( parent, name, fl )
{
setCaption ( tr( "Shut down..." ) );
QVBoxLayout *vbox = new QVBoxLayout ( this );
vbox-> setSpacing ( 3 );
vbox-> setMargin ( 6 );
QButtonGroup *btngrp = new QButtonGroup ( this );
btngrp-> setTitle ( tr( "Terminate" ) );
btngrp-> setColumnLayout ( 0, Qt::Vertical );
btngrp-> layout ( ) -> setSpacing ( 0 );
btngrp-> layout ( ) -> setMargin ( 0 );
QGridLayout *grid = new QGridLayout ( btngrp-> layout ( ) );
grid-> setAlignment ( Qt::AlignTop );
grid-> setSpacing ( 3 );
grid-> setMargin ( 7 );
QPushButton *quit = new QPushButton ( tr( "Terminate Opie" ), btngrp, "quit" );
changeButtonColor ( quit, QColor ( 236, 236, 179 ) );
btngrp-> insert ( quit, 4 );
grid-> addWidget ( quit, 1, 1 );
QPushButton *reboot = new QPushButton ( tr( "Reboot" ), btngrp, "reboot" );
changeButtonColor ( reboot, QColor( 236, 183, 181 ) );
btngrp-> insert ( reboot, 2 );
grid-> addWidget( reboot, 1, 0 );
QPushButton *restart = new QPushButton ( tr( "Restart Opie" ), btngrp, "restart" );
changeButtonColor ( restart, QColor( 236, 236, 179 ) );
btngrp-> insert ( restart, 3 );
grid-> addWidget ( restart, 0, 1 );
QPushButton *shutdown = new QPushButton( tr( "Shutdown" ), btngrp, "shutdown" );
changeButtonColor ( shutdown, QColor( 236, 183, 181 ) );
btngrp-> insert ( shutdown, 1 );
grid-> addWidget ( shutdown, 0, 0 );
vbox-> addWidget ( btngrp );
m_info = new QLabel ( this, "info" );
m_info-> setText( tr( "<p>\n" "These termination options are provided primarily for use while developing and testing the Opie system. In a normal environment, these concepts are unnecessary." ) );
vbox-> addWidget ( m_info );
m_progress = new QProgressBar ( this, "progressBar" );
m_progress-> setFrameShape ( QProgressBar::Panel );
m_progress-> setFrameShadow ( QProgressBar::Sunken );
m_progress-> setTotalSteps ( 20 );
m_progress-> setIndicatorFollowsStyle ( false );
vbox-> addWidget ( m_progress );
vbox-> addItem ( new QSpacerItem ( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding ) );
QPushButton *cancel = new QPushButton ( tr( "Cancel" ), this, "cancel" );
changeButtonColor ( cancel, QColor( 181, 222, 178 ) );
cancel-> setDefault ( true );
cancel-> setSizePolicy ( QSizePolicy ( QSizePolicy::Minimum, QSizePolicy::Expanding, cancel-> sizePolicy ( ). hasHeightForWidth ( ) ) );
vbox-> addWidget ( cancel );
m_timer = new QTimer ( this );
connect ( m_timer, SIGNAL( timeout ( ) ), this, SLOT( timeout ( ) ) );
connect ( btngrp, SIGNAL( clicked ( int ) ), this, SLOT( buttonClicked ( int ) ) );
connect ( cancel, SIGNAL( clicked ( ) ), this, SLOT( cancelClicked ( ) ) );
m_progress-> hide ( );
Global::hideInputMethod ( );
#ifdef QT_QWS_CUSTOM
shutdown-> hide ( );
#endif
}
void ShutdownImpl::buttonClicked ( int b )
{
m_counter = 0;
switch ( b ) {
case 1:
m_operation = ShutdownSystem;
break;
case 2:
m_operation = RebootSystem;
break;
case 3:
m_operation = RestartDesktop;
break;
case 4:
m_operation = TerminateDesktop;
break;
}
m_info-> hide ( );
m_progress-> show ( );
m_timer-> start ( 300 );
timeout ( );
}
void ShutdownImpl::cancelClicked ( )
{
m_progress-> hide ( );
m_info-> show ( );
if ( m_timer-> isActive ( ) )
m_timer-> stop ( );
else
close ( );
}
void ShutdownImpl::timeout ( )
{
if ( ( m_counter += 2 ) > m_progress-> totalSteps ( ) ) {
m_progress-> hide ( );
m_timer-> stop ( );
emit shutdown ( m_operation );
}
else
m_progress-> setProgress ( m_counter );
}
+void ShutdownImpl::hide ( )
+{
+ if ( isVisible ( )) {
+ // hack - shutdown is a launcher dialog, but treated like a standalone app
+ QCopEnvelope e( "QPE/System", "closing(QString)" );
+ e << QString ( "shutdown" );
+
+ }
+ QWidget::hide ( );
+}
diff --git a/core/launcher/shutdownimpl.h b/core/launcher/shutdownimpl.h
index c2ebcc7..12b859d 100644
--- a/core/launcher/shutdownimpl.h
+++ b/core/launcher/shutdownimpl.h
@@ -1,55 +1,57 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** 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.
**
**********************************************************************/
#ifndef SHUTDOWNIMPL_H
#define SHUTDOWNIMPL_H
#include <qwidget.h>
class QTimer;
class QLabel;
class QProgressBar;
class ShutdownImpl : public QWidget
{
Q_OBJECT
public:
ShutdownImpl( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
enum Type { ShutdownSystem, RebootSystem, RestartDesktop, TerminateDesktop };
+ virtual void hide ( );
+
signals:
void shutdown( ShutdownImpl::Type );
private slots:
void buttonClicked( int );
void cancelClicked();
void timeout();
private:
QTimer *m_timer;
int m_counter;
Type m_operation;
QLabel * m_info;
QProgressBar *m_progress;
};
#endif