summaryrefslogtreecommitdiff
authorsandman <sandman>2002-12-30 04:49:31 (UTC)
committer sandman <sandman>2002-12-30 04:49:31 (UTC)
commit597ebce95168c56dbfdec4a79b11a4b793bdd351 (patch) (side-by-side diff)
tree390dc4ccc6eacbe472cd5e4610f21921940ad73d
parent67391742b90744379da532fc41e6229660e40df6 (diff)
downloadopie-597ebce95168c56dbfdec4a79b11a4b793bdd351.zip
opie-597ebce95168c56dbfdec4a79b11a4b793bdd351.tar.gz
opie-597ebce95168c56dbfdec4a79b11a4b793bdd351.tar.bz2
- rewrote the SCAP part (doesn't need netcat anymore now)
- cleaned up the code - reworked the GUI a bit
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/screenshotapplet/screenshot.cpp411
-rw-r--r--core/applets/screenshotapplet/screenshot.h28
2 files changed, 228 insertions, 211 deletions
diff --git a/core/applets/screenshotapplet/screenshot.cpp b/core/applets/screenshotapplet/screenshot.cpp
index 266d6d8..fab4044 100644
--- a/core/applets/screenshotapplet/screenshot.cpp
+++ b/core/applets/screenshotapplet/screenshot.cpp
@@ -1,308 +1,337 @@
/**********************************************************************
** 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 <qsocket.h>
#include <qlineedit.h>
#include <qdir.h>
#include <qfileinfo.h>
-#include <qpoint.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>
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 );
-// qDebug("screenshot control");
- QVBoxLayout *vbox = new QVBoxLayout( this );
- QHBoxLayout *hbox = new QHBoxLayout( this );
-// qDebug("new layout");
- delaySpin = new QSpinBox( 0,60,1, this, "Spinner" );
-// qDebug("new spinbox");
- delaySpin->setFocusPolicy( QWidget::NoFocus );
-
-
- grabItButton= new QPushButton( this, "GrabButton" );
-// qDebug("new pushbutton");
-
- grabItButton ->setFocusPolicy( QWidget::TabFocus );
- grabItButton->setText(tr("Snapshot"));
+ setFrameStyle( QFrame::PopupPanel | QFrame::Raised );
+ QVBoxLayout *vbox = new QVBoxLayout ( this, 5, 3 );
+ QHBoxLayout *hbox;
+ hbox = new QHBoxLayout ( vbox );
- vbox->setMargin( 6 );
- vbox->setSpacing( 3 );
+ QLabel *l = new QLabel ( tr( "Delay" ), this );
+ hbox-> addWidget ( l );
- vbox->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 );
- vbox->setMargin( 6 );
- vbox->setSpacing( 3 );
- QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding );
- vbox->addItem( spacer );
+ saveNamedCheck = new QCheckBox ( tr( "Save named" ), this);
+ saveNamedCheck-> setFocusPolicy ( QWidget::NoFocus );
+ vbox->addWidget( saveNamedCheck);
- saveNamedCheck= new QCheckBox ( "name it", this);
- saveNamedCheck-> setFocusPolicy ( QWidget::NoFocus );
- vbox->addWidget( saveNamedCheck);
+ vbox-> addSpacing ( 3 );
+ l = new QLabel ( tr( "Save screenshot as..." ), this );
+ vbox-> addWidget ( l, AlignCenter );
- scapButton = new QPushButton( this, "ScapButton" );
+ hbox = new QHBoxLayout ( vbox );
- scapButton ->setFocusPolicy( QWidget::TabFocus );
- scapButton ->setText(tr("scap"));
- if( !QFile("/usr/bin/nc").exists())
- scapButton->hide();
-
- hbox->addWidget( grabItButton);
- QSpacerItem* spacer2 = new QSpacerItem( 4, 4, QSizePolicy::Minimum, QSizePolicy::Expanding );
- hbox->addItem( spacer2 );
- hbox->addWidget( scapButton);
+ grabItButton = new QPushButton( tr( "File" ), this, "GrabButton" );
+ grabItButton ->setFocusPolicy( QWidget::TabFocus );
+ hbox-> addWidget ( grabItButton );
- vbox->addItem(hbox);
+ scapButton = new QPushButton( tr( "Scap" ), this, "ScapButton" );
+ scapButton ->setFocusPolicy( QWidget::TabFocus );
+ hbox-> addWidget ( scapButton );
- setFixedHeight( 100 );
- setFixedWidth( sizeHint().width() );
- setFocusPolicy(QWidget::NoFocus);
+ setFixedSize ( sizeHint ( ));
+ setFocusPolicy ( QWidget::NoFocus );
- grabTimer= new QTimer(this,"grab timer");
- connect( grabTimer, SIGNAL( timeout() ), this, SLOT( grabTimerDone() ) );
- delaySpin->setValue(1);
- connect( grabItButton, SIGNAL(released()), SLOT(slotGrab()) );
- connect( scapButton, SIGNAL(released()), SLOT(slotScap()) );
- connect(saveNamedCheck, SIGNAL(toggled( bool)), this, SLOT( nameScreenshot(bool)) );
+ 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() {
-// qDebug("SlotGrab");
- buttonPushed=1;
- hide();
- setFileName=FALSE;
- if( saveNamedCheck->isChecked()) {
- setFileName=TRUE;
-// qDebug("checked");
- 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;
-// qDebug(fileName);
-
- }
- delete fileDlg;
- }
- if ( delaySpin->value() ) {
- grabTimer->start( delaySpin->value() * 1000, true );
- } else {
- show();
- }
-}
-
-void ScreenshotControl::slotScap() {
- buttonPushed=2;
- hide();
- if ( delaySpin->value() ) {
- grabTimer->start( delaySpin->value() * 1000, true );
- } else {
- show();
- }
+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();
}
+void ScreenshotControl::slotScap()
+{
+ buttonPushed = 2;
+ hide();
-void ScreenshotControl::grabTimerDone() {
- performGrab();
+ 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();
-}
-void ScreenshotControl::performGrab() {
-
- if(buttonPushed ==1) {
- qDebug("grabbing screen");
- grabTimer->stop();
- snapshot = QPixmap::grabWindow( QPEApplication::desktop()->winId(),0,0,QApplication::desktop()->width(),QApplication::desktop()->height() );
- show();
- qApp->processEvents();
- savePixmap();
- } else {
- qDebug("scap");
- grabTimer->stop();
-// do scap here
- QString cmd;
- cmd="cat /dev/fd0 > /tmp/cap";
- system(cmd.latin1());
-// qDebug("echo \"POST /scap/capture.cgi http1.1\"
-// echo \"Content-length: 153600\"
-// echo \"Content-Type: image/gif\"
-// echo \"HOST: www.handhelds.org\"
-// echo \"\"
-// cat /tmp/cap | nc h1.handhelds.org 80");
- cmd="nc h1.handhelds.org 1011 </tmp/cap";
- qDebug("running command "+cmd);
-
- system(cmd.latin1());
- 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();
}
-void ScreenshotControl::setTime(int newTime) {
- delaySpin->setValue(newTime);
+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 ));
+ }
+
}
-void ScreenshotControl::nameScreenshot(bool b) {
-
-}
//===========================================================================
ScreenshotApplet::ScreenshotApplet( QWidget *parent, const char *name )
- : QWidget( parent, name ) {
-// qDebug("beginning applet");
- setFixedHeight( 18 );
- setFixedWidth( 14 );
- vc = new ScreenshotControl(this,"ScreenshotApplet");;
-// qDebug("new screenshotapplet");
+ : QWidget( parent, name )
+{
+ setFixedHeight( 18 );
+ setFixedWidth( 14 );
+
+ m_icon = QPixmap ((const char **) snapshot_xpm );
}
-ScreenshotApplet::~ScreenshotApplet() {
+ScreenshotApplet::~ScreenshotApplet()
+{
}
-void ScreenshotApplet::mousePressEvent( QMouseEvent *) {
-// if(!vc)
- vc = new ScreenshotControl;
- QPoint curPos = mapToGlobal( rect().topLeft() );
- vc->move( curPos.x()-(vc->sizeHint().width()-width())/2, curPos.y() - 100 );
- vc->show();
-
+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 ( );
}
-void ScreenshotApplet::paintEvent( QPaintEvent* ) {
- QPainter p(this);
- qDebug("paint pixmap");
- p.drawPixmap( 0, 1, ( const char** ) snapshot_xpm );
-
+void ScreenshotApplet::paintEvent( QPaintEvent* )
+{
+ QPainter p ( this );
+ p. drawPixmap ( 0, 1, m_icon );
}
diff --git a/core/applets/screenshotapplet/screenshot.h b/core/applets/screenshotapplet/screenshot.h
index c8dfeaa..74cc5e6 100644
--- a/core/applets/screenshotapplet/screenshot.h
+++ b/core/applets/screenshotapplet/screenshot.h
@@ -1,82 +1,70 @@
/**********************************************************************
** 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.
**
**********************************************************************/
#ifndef __SCREENSHOT_APPLET_H__
#define __SCREENSHOT_APPLET_H__
#include <qwidget.h>
#include <qframe.h>
#include <qpixmap.h>
#include <qguardedptr.h>
#include <qtimer.h>
class QComboBox;
class QCheckBox;
class QSpinBox;
class QPushButton;
//class QImage;
class ScreenshotControl : public QFrame
{
Q_OBJECT
public:
ScreenshotControl( QWidget *parent=0, const char *name=0 );
- void performGrab();
-public:
+private:
QPushButton *grabItButton, *scapButton;
QPixmap snapshot;
QTimer* grabTimer;
QCheckBox *saveNamedCheck;
QString FileNamePath;
bool setFileName;
- void slotSave();
- void slotCopy();
- void setTime(int newTime);
-
QSpinBox *delaySpin;
-private:
int buttonPushed;
+
private slots:
void slotGrab();
void slotScap();
void savePixmap();
- void grabTimerDone();
- void nameScreenshot(bool);
+ void performGrab();
};
-class ScreenshotApplet : public QWidget
-{
- Q_OBJECT
+class ScreenshotApplet : public QWidget {
public:
ScreenshotApplet( QWidget *parent = 0, const char *name=0 );
~ScreenshotApplet();
- ScreenshotControl *vc;
-public slots:
-private:
+
+protected:
void mousePressEvent( QMouseEvent * );
void paintEvent( QPaintEvent* );
-
+
private:
- QPixmap snapshotPixmap;
-private slots:
-
-
+ QPixmap m_icon;
};
#endif // __SCREENSHOT_APPLET_H__