summaryrefslogtreecommitdiffstats
path: root/examples/network/infoprotocol/infourlclient
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-11-08 12:31:36 -0600
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-11-08 12:31:36 -0600
commitd796c9dd933ab96ec83b9a634feedd5d32e1ba3f (patch)
tree6e3dcca4f77e20ec8966c666aac7c35bd4704053 /examples/network/infoprotocol/infourlclient
downloadtqt3-d796c9dd933ab96ec83b9a634feedd5d32e1ba3f.tar.gz
tqt3-d796c9dd933ab96ec83b9a634feedd5d32e1ba3f.zip
Test conversion to TQt3 from Qt3 8c6fc1f8e35fd264dd01c582ca5e7549b32ab731
Diffstat (limited to 'examples/network/infoprotocol/infourlclient')
-rw-r--r--examples/network/infoprotocol/infourlclient/client.cpp60
-rw-r--r--examples/network/infoprotocol/infourlclient/client.h35
-rw-r--r--examples/network/infoprotocol/infourlclient/clientbase.ui118
-rw-r--r--examples/network/infoprotocol/infourlclient/infourlclient.pro13
-rw-r--r--examples/network/infoprotocol/infourlclient/main.cpp23
-rw-r--r--examples/network/infoprotocol/infourlclient/qip.cpp132
-rw-r--r--examples/network/infoprotocol/infourlclient/qip.h48
7 files changed, 429 insertions, 0 deletions
diff --git a/examples/network/infoprotocol/infourlclient/client.cpp b/examples/network/infoprotocol/infourlclient/client.cpp
new file mode 100644
index 00000000..ba61d3b3
--- /dev/null
+++ b/examples/network/infoprotocol/infourlclient/client.cpp
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for TQt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#include <qapplication.h>
+#include <qtextedit.h>
+#include <qpushbutton.h>
+#include <qfiledialog.h>
+
+#include "qip.h"
+#include "client.h"
+
+
+
+
+ClientInfo::ClientInfo( TQWidget *parent, const char *name ) :
+ ClientInfoBase( parent, name )
+{
+ connect( btnOpen, SIGNAL(clicked()), SLOT(downloadFile()) );
+ connect( btnQuit, SIGNAL(clicked()), qApp, SLOT(tquit()) );
+ connect( &op, SIGNAL( data( const TQByteArray &, TQNetworkOperation * ) ),
+ this, SLOT( newData( const TQByteArray & ) ) );
+}
+
+void ClientInfo::downloadFile()
+{
+ // under Windows you must not use the native file dialog
+ TQString file = getOpenFileName();
+ if ( !file.isEmpty() ) {
+ infoText->clear();
+ // download the data
+ op = file;
+ op.get();
+ }
+}
+
+TQString ClientInfo::getOpenFileName()
+{
+ static TQString workingDirectory( "qip://localhost/" );
+
+ TQFileDialog dlg( workingDirectory, TQString::null, 0, 0, TRUE );
+ dlg.setCaption( TQFileDialog::tr( "Open" ) );
+ dlg.setMode( TQFileDialog::ExistingFile );
+ TQString result;
+ if ( dlg.exec() == TQDialog::Accepted ) {
+ result = dlg.selectedFile();
+ workingDirectory = dlg.url();
+ }
+ return result;
+}
+
+void ClientInfo::newData( const TQByteArray &ba )
+{
+ infoText->append( TQString::fromUtf8( ba ) );
+}
diff --git a/examples/network/infoprotocol/infourlclient/client.h b/examples/network/infoprotocol/infourlclient/client.h
new file mode 100644
index 00000000..439edbbb
--- /dev/null
+++ b/examples/network/infoprotocol/infourlclient/client.h
@@ -0,0 +1,35 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for TQt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#ifndef CLIENT_H
+#define CLIENT_H
+
+#include <qurloperator.h>
+
+#include "clientbase.h"
+
+
+class ClientInfo : public ClientInfoBase
+{
+ Q_OBJECT
+
+public:
+ ClientInfo( TQWidget *parent = 0, const char *name = 0 );
+
+private slots:
+ void downloadFile();
+ void newData( const TQByteArray &ba );
+
+private:
+ TQUrlOperator op;
+ TQString getOpenFileName();
+};
+
+#endif // CLIENT_H
+
diff --git a/examples/network/infoprotocol/infourlclient/clientbase.ui b/examples/network/infoprotocol/infourlclient/clientbase.ui
new file mode 100644
index 00000000..115b0f3b
--- /dev/null
+++ b/examples/network/infoprotocol/infourlclient/clientbase.ui
@@ -0,0 +1,118 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>ClientInfoBase</class>
+<widget class="TQWidget">
+ <property name="name">
+ <cstring>ClientInfoBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>325</width>
+ <height>279</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Info Client Protocol</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="TQLayoutWidget">
+ <property name="name">
+ <cstring>Layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="TQPushButton">
+ <property name="name">
+ <cstring>btnOpen</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Open</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>open data</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name" stdset="0">
+ <cstring>Spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="TQPushButton">
+ <property name="name">
+ <cstring>btnQuit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Quit</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="TQLabel">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Data:</string>
+ </property>
+ </widget>
+ <widget class="TQTextEdit">
+ <property name="name">
+ <cstring>infoText</cstring>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/examples/network/infoprotocol/infourlclient/infourlclient.pro b/examples/network/infoprotocol/infourlclient/infourlclient.pro
new file mode 100644
index 00000000..219083d2
--- /dev/null
+++ b/examples/network/infoprotocol/infourlclient/infourlclient.pro
@@ -0,0 +1,13 @@
+TEMPLATE = app
+TARGET = infourlclient
+
+CONFIG += qt warn_on release
+
+REQUIRES = network full-config nocrosscompiler
+
+HEADERS = client.h \
+ qip.h
+SOURCES = main.cpp \
+ client.cpp \
+ qip.cpp
+INTERFACES = clientbase.ui
diff --git a/examples/network/infoprotocol/infourlclient/main.cpp b/examples/network/infoprotocol/infourlclient/main.cpp
new file mode 100644
index 00000000..fbe6aedb
--- /dev/null
+++ b/examples/network/infoprotocol/infourlclient/main.cpp
@@ -0,0 +1,23 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for TQt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#include <qapplication.h>
+
+#include "qip.h"
+#include "client.h"
+
+int main( int argc, char** argv )
+{
+ TQApplication app( argc, argv );
+ TQNetworkProtocol::registerNetworkProtocol( "qip", new TQNetworkProtocolFactory< Qip > );
+ ClientInfo info;
+ app.setMainWidget( &info );
+ info.show();
+ return app.exec();
+}
diff --git a/examples/network/infoprotocol/infourlclient/qip.cpp b/examples/network/infoprotocol/infourlclient/qip.cpp
new file mode 100644
index 00000000..5424370e
--- /dev/null
+++ b/examples/network/infoprotocol/infourlclient/qip.cpp
@@ -0,0 +1,132 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for TQt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#include <qsocket.h>
+#include <qurlinfo.h>
+#include <qurloperator.h>
+#include <qtextstream.h>
+
+#include "qip.h"
+
+
+Qip::Qip()
+{
+ state = Start;
+ socket = new TQSocket( this );
+ connect( socket, SIGNAL(connected()), SLOT(socketConnected()) );
+ connect( socket, SIGNAL(connectionClosed()), SLOT(socketConnectionClosed()) );
+ connect( socket, SIGNAL(readyRead()), SLOT(socketReadyRead()) );
+ connect( socket, SIGNAL(error(int)), SLOT(socketError(int)) );
+}
+
+int Qip::supportedOperations() const
+{
+ return OpListChildren | OpGet;
+}
+
+bool Qip::checkConnection( TQNetworkOperation * )
+{
+ if ( socket->isOpen() )
+ return TRUE;
+
+ // don't call connectToHost() if we are already trying to connect
+ if ( socket->state() == TQSocket::Connecting )
+ return FALSE;
+
+ socket->connectToHost( url()->host(), url()->port() != -1 ? url()->port() : infoPort );
+ return FALSE;
+}
+
+void Qip::operationListChildren( TQNetworkOperation * )
+{
+ TQTextStream os(socket);
+ os << "LIST " + url()->path() + "\r\n";
+ operationInProgress()->setState( StInProgress );
+}
+
+void Qip::operationGet( TQNetworkOperation * )
+{
+ TQTextStream os(socket);
+ os << "GET " + url()->path() + "\r\n";
+ operationInProgress()->setState( StInProgress );
+}
+
+void Qip::socketConnected()
+{
+ if ( url() )
+ emit connectionStateChanged( ConConnected, tr( "Connected to host %1" ).arg( url()->host() ) );
+ else
+ emit connectionStateChanged( ConConnected, tr ("Connected to host" ) );
+}
+
+void Qip::socketConnectionClosed()
+{
+ if ( url() )
+ emit connectionStateChanged( ConClosed, tr( "Connection to %1 closed" ).arg( url()->host() ) );
+ else
+ emit connectionStateChanged( ConClosed, tr ("Connection closed" ) );
+}
+
+void Qip::socketError( int code )
+{
+ if ( code == TQSocket::ErrHostNotFound ||
+ code == TQSocket::ErrConnectionRefused ) {
+ error( ErrHostNotFound, tr( "Host not found or couldn't connect to: %1\n" ).arg( url()->host() ) );
+ } else
+ error( ErrUnsupported, tr( "Error" ) );
+}
+
+void Qip::socketReadyRead()
+{
+ // read from the server
+ TQTextStream stream( socket );
+ TQString line;
+ while ( socket->canReadLine() ) {
+ line = stream.readLine();
+ if ( line.startsWith( "500" ) ) {
+ error( ErrValid, line.mid( 4 ) );
+ } else if ( line.startsWith( "550" ) ) {
+ error( ErrFileNotExisting, line.mid( 4 ) );
+ } else if ( line.startsWith( "212+" ) ) {
+ if ( state != List ) {
+ state = List;
+ emit start( operationInProgress() );
+ }
+ TQUrlInfo inf;
+ inf.setName( line.mid( 6 ) + TQString( ( line[ 4 ] == 'D' ) ? "/" : "" ) );
+ inf.setDir( line[ 4 ] == 'D' );
+ inf.setSymLink( FALSE );
+ inf.setFile( line[ 4 ] == 'F' );
+ inf.setWritable( FALSE );
+ inf.setReadable( TRUE );
+ emit newChild( inf, operationInProgress() );
+ } else if ( line.startsWith( "213+" ) ) {
+ state = Data;
+ emit data( line.mid( 4 ).utf8(), operationInProgress() );
+ }
+ if( line[3] == ' ' && state != Start) {
+ state = Start;
+ operationInProgress()->setState( StDone );
+ emit finished( operationInProgress() );
+ }
+ }
+}
+
+void Qip::error( int code, const TQString& msg )
+{
+ if ( operationInProgress() ) {
+ operationInProgress()->setState( StFailed );
+ operationInProgress()->setErrorCode( code );
+ operationInProgress()->setProtocolDetail( msg );
+ clearOperationQueue();
+ emit finished( operationInProgress() );
+ }
+ state = Start;
+}
+
diff --git a/examples/network/infoprotocol/infourlclient/qip.h b/examples/network/infoprotocol/infourlclient/qip.h
new file mode 100644
index 00000000..f2b9db98
--- /dev/null
+++ b/examples/network/infoprotocol/infourlclient/qip.h
@@ -0,0 +1,48 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for TQt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#ifndef TQIP_H
+#define TQIP_H
+
+#include <qnetworkprotocol.h>
+
+class TQSocket;
+
+static const Q_UINT16 infoPort = 42417;
+
+
+class Qip : public TQNetworkProtocol
+{
+ Q_OBJECT
+
+public:
+ Qip();
+ virtual int supportedOperations() const;
+
+protected:
+ virtual void operationListChildren( TQNetworkOperation *op );
+ virtual void operationGet( TQNetworkOperation *op );
+ virtual bool checkConnection( TQNetworkOperation *op );
+
+private slots:
+ void socketConnected();
+ void socketReadyRead();
+ void socketConnectionClosed();
+ void socketError( int code );
+
+private:
+ TQSocket *socket;
+ enum State { Start, List, Data } state;
+ void error( int code, const TQString& msg );
+};
+
+
+
+#endif // TQIP_H
+