-rw-r--r-- | core/applets/screenshotapplet/screenshot.cpp | 408 |
1 files changed, 196 insertions, 212 deletions
diff --git a/core/applets/screenshotapplet/screenshot.cpp b/core/applets/screenshotapplet/screenshot.cpp index fab4044..b987392 100644 --- a/core/applets/screenshotapplet/screenshot.cpp +++ b/core/applets/screenshotapplet/screenshot.cpp @@ -1,337 +1,321 @@ /********************************************************************** ** Copyright (C) 2002 L.J. Potter ljp@llornkcor.com ** All rights reserved. ** ** 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. ** **********************************************************************/ #include "screenshot.h" #include "inputDialog.h" -#include <qapplication.h> #include <stdlib.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <unistd.h> -#include <qpe/resource.h> #include <qpe/qpeapplication.h> -#include <qpe/timestring.h> -#include <qpe/resource.h> -#include <qpe/config.h> #include <qpe/applnk.h> -#include <qpe/config.h> #include <qlineedit.h> #include <qdir.h> -#include <qfileinfo.h> #include <qlabel.h> #include <qpushbutton.h> #include <qpainter.h> -#include <qcombobox.h> #include <qspinbox.h> -#include <qslider.h> #include <qlayout.h> -#include <qframe.h> -#include <qpixmap.h> -#include <qregexp.h> -#include <qstring.h> -#include <qfile.h> -#include <qtimer.h> -#include <qfile.h> -#include <qdatastream.h> #include <qcheckbox.h> #include <qmessagebox.h> +#include <qimage.h> static char * snapshot_xpm[] = { "16 16 10 1", " c None", ". c #000000", "+ c #00C000", "@ c #585858", "# c #808080", "$ c #00FF00", "% c #008000", "& c #00FFFF", "* c #FF0000", "= c #FFC0C0", " ", " ... ", " ..+++..@#. ", " .$++++++.#. ", " .%$$++++++. ", " .&%%$$++@***. ", " .$&$++$=**@+. ", " .+$$+++@*$%%. ", " .+++++%+++%%. ", " .%%++++..+%%. ", " ..%%+++++%%. ", " ..%%+++%%. ", " ..%%+%%. ", " ..%%.. ", " .. ", " "}; static const char *SCAP_hostname = "www.handhelds.org"; static const int SCAP_port = 80; ScreenshotControl::ScreenshotControl( QWidget *parent, const char *name ) - : QFrame( parent, name, WDestructiveClose | WStyle_StaysOnTop | WType_Popup ) + : QFrame( parent, name, WDestructiveClose | WStyle_StaysOnTop | WType_Popup ) { - setFrameStyle( QFrame::PopupPanel | QFrame::Raised ); - QVBoxLayout *vbox = new QVBoxLayout ( this, 5, 3 ); - QHBoxLayout *hbox; + setFrameStyle( QFrame::PopupPanel | QFrame::Raised ); + QVBoxLayout *vbox = new QVBoxLayout ( this, 5, 3 ); + QHBoxLayout *hbox; - hbox = new QHBoxLayout ( vbox ); + hbox = new QHBoxLayout ( vbox ); - QLabel *l = new QLabel ( tr( "Delay" ), this ); - hbox-> addWidget ( l ); + QLabel *l = new QLabel ( tr( "Delay" ), this ); + hbox-> addWidget ( l ); - delaySpin = new QSpinBox( 0, 60, 1, this, "Spinner" ); - delaySpin-> setButtonSymbols ( QSpinBox::PlusMinus ); - delaySpin-> setSuffix ( tr( "sec" )); - delaySpin-> setFocusPolicy( QWidget::NoFocus ); - delaySpin-> setValue ( 1 ); - hbox-> addWidget ( delaySpin ); + delaySpin = new QSpinBox( 0, 60, 1, this, "Spinner" ); + delaySpin-> setButtonSymbols ( QSpinBox::PlusMinus ); + delaySpin-> setSuffix ( tr( "sec" )); + delaySpin-> setFocusPolicy( QWidget::NoFocus ); + delaySpin-> setValue ( 1 ); + hbox-> addWidget ( delaySpin ); - saveNamedCheck = new QCheckBox ( tr( "Save named" ), this); - saveNamedCheck-> setFocusPolicy ( QWidget::NoFocus ); - vbox->addWidget( saveNamedCheck); + saveNamedCheck = new QCheckBox ( tr( "Save named" ), this); + saveNamedCheck-> setFocusPolicy ( QWidget::NoFocus ); + vbox->addWidget( saveNamedCheck); - vbox-> addSpacing ( 3 ); + vbox-> addSpacing ( 3 ); - l = new QLabel ( tr( "Save screenshot as..." ), this ); - vbox-> addWidget ( l, AlignCenter ); + l = new QLabel ( tr( "Save screenshot as..." ), this ); + vbox-> addWidget ( l, AlignCenter ); - hbox = new QHBoxLayout ( vbox ); + hbox = new QHBoxLayout ( vbox ); - grabItButton = new QPushButton( tr( "File" ), this, "GrabButton" ); - grabItButton ->setFocusPolicy( QWidget::TabFocus ); - hbox-> addWidget ( grabItButton ); + grabItButton = new QPushButton( tr( "File" ), this, "GrabButton" ); + grabItButton ->setFocusPolicy( QWidget::TabFocus ); + hbox-> addWidget ( grabItButton ); - scapButton = new QPushButton( tr( "Scap" ), this, "ScapButton" ); - scapButton ->setFocusPolicy( QWidget::TabFocus ); - hbox-> addWidget ( scapButton ); + scapButton = new QPushButton( tr( "Scap" ), this, "ScapButton" ); + scapButton ->setFocusPolicy( QWidget::TabFocus ); + hbox-> addWidget ( scapButton ); - setFixedSize ( sizeHint ( )); - setFocusPolicy ( QWidget::NoFocus ); + setFixedSize ( sizeHint ( )); + setFocusPolicy ( QWidget::NoFocus ); - grabTimer = new QTimer ( this, "grab timer"); - - connect ( grabTimer, SIGNAL( timeout ( )), this, SLOT( performGrab ( ))); - connect ( grabItButton, SIGNAL( clicked ( )), SLOT( slotGrab ( ))); - connect ( scapButton, SIGNAL( clicked ( )), SLOT( slotScap ( ))); + grabTimer = new QTimer ( this, "grab timer"); + + connect ( grabTimer, SIGNAL( timeout ( )), this, SLOT( performGrab ( ))); + connect ( grabItButton, SIGNAL( clicked ( )), SLOT( slotGrab ( ))); + connect ( scapButton, SIGNAL( clicked ( )), SLOT( slotScap ( ))); } void ScreenshotControl::slotGrab() { - buttonPushed = 1; - hide(); - - setFileName = FALSE; - if ( saveNamedCheck->isChecked()) { - setFileName = TRUE; - InputDialog *fileDlg; - - fileDlg = new InputDialog( 0 , tr("Name of screenshot "), TRUE, 0); - fileDlg->exec(); - fileDlg->raise(); - QString fileName, list; - if ( fileDlg->result() == 1 ) { - fileName = fileDlg->LineEdit1->text(); - - if (fileName.find("/", 0, TRUE) == -1) - FileNamePath = QDir::homeDirPath() + "/Documents/image/png/" + fileName; - else - FileNamePath = fileName; - - } - delete fileDlg; - } - - if ( delaySpin->value() ) - grabTimer->start( delaySpin->value() * 1000, true ); - else - show(); + buttonPushed = 1; + hide(); + + setFileName = FALSE; + if ( saveNamedCheck->isChecked()) { + setFileName = TRUE; + InputDialog *fileDlg; + + fileDlg = new InputDialog( 0 , tr("Name of screenshot "), TRUE, 0); + fileDlg->exec(); + fileDlg->raise(); + QString fileName, list; + if ( fileDlg->result() == 1 ) { + fileName = fileDlg->LineEdit1->text(); + + if (fileName.find("/", 0, TRUE) == -1) + FileNamePath = QDir::homeDirPath() + "/Documents/image/png/" + fileName; + else + FileNamePath = fileName; + + } + delete fileDlg; + } + + if ( delaySpin->value() ) + grabTimer->start( delaySpin->value() * 1000, true ); + else + show(); } void ScreenshotControl::slotScap() { - buttonPushed = 2; - hide(); + buttonPushed = 2; + hide(); - if ( delaySpin->value() ) - grabTimer->start( delaySpin->value() * 1000, true ); - else - show(); + if ( delaySpin->value() ) + grabTimer->start( delaySpin->value() * 1000, true ); + else + show(); } void ScreenshotControl::savePixmap() { - DocLnk lnk; - QString fileName; - - if ( setFileName) { - fileName = FileNamePath; - //not sure why this is needed here, but it forgets fileName - // if this is below the braces - - if (fileName.right(3) != "png") - fileName = fileName + ".png"; - lnk.setFile(fileName); //sets File property - qDebug("saving file " + fileName); - snapshot.save( fileName, "PNG"); - QFileInfo fi( fileName); - lnk.setName( fi.fileName()); //sets file name - - if (!lnk.writeLink()) - qDebug("Writing doclink did not work"); - } - else { - - fileName = "sc_" + TimeString::dateString( QDateTime::currentDateTime(), false, true); - fileName.replace(QRegExp("'"), ""); - fileName.replace(QRegExp(" "), "_"); - fileName.replace(QRegExp(":"), "."); - fileName.replace(QRegExp(","), ""); - QString dirName = QDir::homeDirPath() + "/Documents/image/png/"; - - if ( !QDir( dirName).exists() ) { - qDebug("making dir " + dirName); - QString msg = "mkdir -p " + dirName; - system(msg.latin1()); - } - fileName = dirName + fileName; - if (fileName.right(3) != "png") - fileName = fileName + ".png"; - lnk.setFile(fileName); //sets File property - qDebug("saving file " + fileName); - snapshot.save( fileName, "PNG"); - QFileInfo fi( fileName); - lnk.setName( fi.fileName()); //sets file name - - if (!lnk.writeLink()) - qDebug("Writing doclink did not work"); - - } - - QPEApplication::beep(); + DocLnk lnk; + QString fileName; + + if ( setFileName) { + fileName = FileNamePath; + //not sure why this is needed here, but it forgets fileName + // if this is below the braces + + if (fileName.right(3) != "png") + fileName = fileName + ".png"; + lnk.setFile(fileName); //sets File property + qDebug("saving file " + fileName); + snapshot.save( fileName, "PNG"); + QFileInfo fi( fileName); + lnk.setName( fi.fileName()); //sets file name + + if (!lnk.writeLink()) + qDebug("Writing doclink did not work"); + } + else { + + fileName = "sc_" + QDateTime::currentDateTime().toString(); + fileName.replace(QRegExp("'"), ""); + fileName.replace(QRegExp(" "), "_"); + fileName.replace(QRegExp(":"), "."); + fileName.replace(QRegExp(","), ""); + QString dirName = QDir::homeDirPath() + "/Documents/image/png/"; + + if ( !QDir( dirName).exists() ) { + qDebug("making dir " + dirName); + QString msg = "mkdir -p " + dirName; + system(msg.latin1()); + } + fileName = dirName + fileName; + if (fileName.right(3) != "png") + fileName = fileName + ".png"; + lnk.setFile(fileName); //sets File property + qDebug("saving file " + fileName); + snapshot.save( fileName, "PNG"); + QFileInfo fi( fileName); + lnk.setName( fi.fileName()); //sets file name + + if (!lnk.writeLink()) + qDebug("Writing doclink did not work"); + + } + + QPEApplication::beep(); } void ScreenshotControl::performGrab() { - snapshot = QPixmap::grabWindow( QPEApplication::desktop()->winId(), 0, 0, QApplication::desktop()->width(), QApplication::desktop()->height() ); - - if (buttonPushed == 1) { - qDebug("grabbing screen"); - grabTimer->stop(); - show(); - qApp->processEvents(); - savePixmap(); - } - else { - grabTimer->stop(); - - struct sockaddr_in raddr; - struct hostent *rhost_info; - int sock = -1; - bool ok = false; - - if (( rhost_info = (struct hostent *) ::gethostbyname ((char *) SCAP_hostname )) != 0 ) { - ::memset ( &raddr, 0, sizeof (struct sockaddr_in)); - ::memcpy ( &raddr. sin_addr, rhost_info-> h_addr, rhost_info-> h_length ); - raddr. sin_family = rhost_info-> h_addrtype; - raddr. sin_port = htons ( SCAP_port ); - - if (( sock = ::socket ( AF_INET, SOCK_STREAM, 0 )) >= 0 ) - { - if ( ::connect ( sock, (struct sockaddr *) & raddr, sizeof (struct sockaddr)) >= 0 ) { - QString header; - - header = "POST /scap/capture.cgi?%1+%2 HTTP/1.1\n" // 1: model / 2: user - "Content-length: 153600\n" - "Content-Type: image/gif\n" - "Host: %4\n" // 3: scap host - "\n"; - - header = header. arg ( "" ). arg ( ::getenv ( "USER" )). arg ( SCAP_hostname ); - - QPixmap pix; - - if ( snapshot. width ( ) == 320 && snapshot. height ( ) == 240 ) - { - pix = snapshot; - } - else if ( snapshot. width ( ) == 240 && snapshot. height ( ) == 320 ) - { - pix = snapshot. xForm ( QWMatrix ( ). rotate ( 90 )); - } - - if ( !pix. isNull ( )) - { - const char *ascii = header. latin1 ( ); - uint ascii_len = ::strlen ( ascii ); - - ::write ( sock, ascii, ascii_len ); - - QImage img = pix. convertToImage ( ). convertDepth ( 16 ); - ::write ( sock, img. bits ( ), img.numBytes ( )); - - ok = true; - } - } - ::close ( sock ); - } - } - if ( ok ) - QMessageBox::information ( 0, tr( "Success" ), QString ( "<p>%1</p>" ). arg ( tr( "Screenshot was uploaded to %1" )). arg ( SCAP_hostname )); - else - QMessageBox::warning ( 0, tr( "Error" ), QString ( "<p>%1</p>" ). arg ( tr( "Connection to %1 failed." )). arg ( SCAP_hostname )); - } + snapshot = QPixmap::grabWindow( QPEApplication::desktop()->winId(), 0, 0, QApplication::desktop()->width(), QApplication::desktop()->height() ); + + if (buttonPushed == 1) { + qDebug("grabbing screen"); + grabTimer->stop(); + show(); + qApp->processEvents(); + savePixmap(); + } + else { + grabTimer->stop(); + + struct sockaddr_in raddr; + struct hostent *rhost_info; + int sock = -1; + bool ok = false; + + if (( rhost_info = (struct hostent *) ::gethostbyname ((char *) SCAP_hostname )) != 0 ) { + ::memset ( &raddr, 0, sizeof (struct sockaddr_in)); + ::memcpy ( &raddr. sin_addr, rhost_info-> h_addr, rhost_info-> h_length ); + raddr. sin_family = rhost_info-> h_addrtype; + raddr. sin_port = htons ( SCAP_port ); + + if (( sock = ::socket ( AF_INET, SOCK_STREAM, 0 )) >= 0 ) + { + if ( ::connect ( sock, (struct sockaddr *) & raddr, sizeof (struct sockaddr)) >= 0 ) { + QString header; + + header = "POST /scap/capture.cgi?%1+%2 HTTP/1.1\n" // 1: model / 2: user + "Content-length: 153600\n" + "Content-Type: image/gif\n" + "Host: %4\n" // 3: scap host + "\n"; + + header = header. arg ( "" ). arg ( ::getenv ( "USER" )). arg ( SCAP_hostname ); + + QPixmap pix; + + if ( snapshot. width ( ) == 320 && snapshot. height ( ) == 240 ) + { + pix = snapshot; + } + else if ( snapshot. width ( ) == 240 && snapshot. height ( ) == 320 ) + { + pix = snapshot. xForm ( QWMatrix ( ). rotate ( 90 )); + } + + if ( !pix. isNull ( )) + { + const char *ascii = header. latin1 ( ); + uint ascii_len = ::strlen ( ascii ); + + ::write ( sock, ascii, ascii_len ); + + QImage img = pix. convertToImage ( ). convertDepth ( 16 ); + ::write ( sock, img. bits ( ), img.numBytes ( )); + + ok = true; + } + } + ::close ( sock ); + } + } + if ( ok ) + QMessageBox::information ( 0, tr( "Success" ), QString ( "<p>%1</p>" ). arg ( tr( "Screenshot was uploaded to %1" )). arg ( SCAP_hostname )); + else + QMessageBox::warning ( 0, tr( "Error" ), QString ( "<p>%1</p>" ). arg ( tr( "Connection to %1 failed." )). arg ( SCAP_hostname )); + } } //=========================================================================== ScreenshotApplet::ScreenshotApplet( QWidget *parent, const char *name ) - : QWidget( parent, name ) + : QWidget( parent, name ) { - setFixedHeight( 18 ); - setFixedWidth( 14 ); - - m_icon = QPixmap ((const char **) snapshot_xpm ); + setFixedHeight( 18 ); + setFixedWidth( 14 ); + + m_icon = QPixmap ((const char **) snapshot_xpm ); } ScreenshotApplet::~ScreenshotApplet() { } void ScreenshotApplet::mousePressEvent( QMouseEvent *) { - ScreenshotControl *sc = new ScreenshotControl ( ); - QPoint curPos = mapToGlobal ( QPoint ( 0, 0 )); - sc-> move ( curPos. x ( ) - ( sc-> sizeHint ( ). width ( ) - width ( )) / 2, - curPos. y ( ) - sc-> sizeHint ( ). height ( )); - sc-> show ( ); + ScreenshotControl *sc = new ScreenshotControl ( ); + QPoint curPos = mapToGlobal ( QPoint ( 0, 0 )); + sc-> move ( curPos. x ( ) - ( sc-> sizeHint ( ). width ( ) - width ( )) / 2, + curPos. y ( ) - sc-> sizeHint ( ). height ( )); + sc-> show ( ); } void ScreenshotApplet::paintEvent( QPaintEvent* ) { - QPainter p ( this ); - p. drawPixmap ( 0, 1, m_icon ); + QPainter p ( this ); + p. drawPixmap ( 0, 1, m_icon ); } |