summaryrefslogtreecommitdiffstats
path: root/examples/network/ftpclient
diff options
context:
space:
mode:
Diffstat (limited to 'examples/network/ftpclient')
-rw-r--r--examples/network/ftpclient/README3
-rw-r--r--examples/network/ftpclient/connectdialog.ui244
-rw-r--r--examples/network/ftpclient/ftpclient.doc24
-rw-r--r--examples/network/ftpclient/ftpclient.pro14
-rw-r--r--examples/network/ftpclient/ftpmainwindow.ui280
-rw-r--r--examples/network/ftpclient/ftpmainwindow.ui.h273
-rw-r--r--examples/network/ftpclient/ftpviewitem.cpp58
-rw-r--r--examples/network/ftpclient/ftpviewitem.h35
-rw-r--r--examples/network/ftpclient/images/file.pngbin0 -> 106 bytes
-rw-r--r--examples/network/ftpclient/images/folder.pngbin0 -> 145 bytes
-rw-r--r--examples/network/ftpclient/main.cpp23
11 files changed, 954 insertions, 0 deletions
diff --git a/examples/network/ftpclient/README b/examples/network/ftpclient/README
new file mode 100644
index 000000000..8b1bd7e5d
--- /dev/null
+++ b/examples/network/ftpclient/README
@@ -0,0 +1,3 @@
+This example is a small ftp client. It shows how to use the QFtp class.
+
+This example needs the network extension.
diff --git a/examples/network/ftpclient/connectdialog.ui b/examples/network/ftpclient/connectdialog.ui
new file mode 100644
index 000000000..ff0a30a63
--- /dev/null
+++ b/examples/network/ftpclient/connectdialog.ui
@@ -0,0 +1,244 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>ConnectDialog</class>
+<widget class="TQDialog">
+ <property name="name">
+ <cstring>ConnectDialog</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>384</width>
+ <height>165</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Choose host to connect to</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="TQFrame">
+ <property name="name">
+ <cstring>Frame3</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="TQLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Remote Host:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>host</cstring>
+ </property>
+ </widget>
+ <widget class="TQLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Username:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>username</cstring>
+ </property>
+ </widget>
+ <widget class="TQLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Password:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>password</cstring>
+ </property>
+ </widget>
+ <widget class="TQLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>password</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="echoMode">
+ <enum>Password</enum>
+ </property>
+ </widget>
+ <widget class="TQLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>username</cstring>
+ </property>
+ <property name="text">
+ <string>anonymous</string>
+ </property>
+ </widget>
+ <widget class="TQLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>Layout21</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="TQLineEdit">
+ <property name="name">
+ <cstring>host</cstring>
+ </property>
+ </widget>
+ <widget class="TQLabel">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>P&amp;ort:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>port</cstring>
+ </property>
+ </widget>
+ <widget class="TQSpinBox">
+ <property name="name">
+ <cstring>port</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maxValue">
+ <number>1000</number>
+ </property>
+ <property name="value">
+ <number>21</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>31</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="TQLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="TQPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="TQPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>ConnectDialog</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>ConnectDialog</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>host</tabstop>
+ <tabstop>port</tabstop>
+ <tabstop>username</tabstop>
+ <tabstop>password</tabstop>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/examples/network/ftpclient/ftpclient.doc b/examples/network/ftpclient/ftpclient.doc
new file mode 100644
index 000000000..13be19168
--- /dev/null
+++ b/examples/network/ftpclient/ftpclient.doc
@@ -0,0 +1,24 @@
+/*
+*/
+
+/*! \page ftpclient-example.html
+
+ \ingroup network-examples
+
+ \title An FTP client
+
+ This example implements a FTP client. It uses QFtp to perform its FTP
+ commands. The GUI parts are done in the Designer.
+
+ <hr>
+
+ The implementation of the FTP commands (ftpmainwindow.ui.h):
+
+ \include network/ftpclient/ftpmainwindow.ui.h
+
+ <hr>
+
+ Main (main.cpp):
+
+ \include network/ftpclient/main.cpp
+*/
diff --git a/examples/network/ftpclient/ftpclient.pro b/examples/network/ftpclient/ftpclient.pro
new file mode 100644
index 000000000..eb71f134f
--- /dev/null
+++ b/examples/network/ftpclient/ftpclient.pro
@@ -0,0 +1,14 @@
+TEMPLATE = app
+TARGET = ftpclient
+
+CONFIG += qt warn_on release
+
+REQUIRES = network full-config nocrosscompiler
+
+HEADERS = ftpviewitem.h
+SOURCES = main.cpp \
+ ftpviewitem.cpp
+FORMS = ftpmainwindow.ui \
+ connectdialog.ui
+IMAGES = images/file.png \
+ images/folder.png
diff --git a/examples/network/ftpclient/ftpmainwindow.ui b/examples/network/ftpclient/ftpmainwindow.ui
new file mode 100644
index 000000000..338aa139b
--- /dev/null
+++ b/examples/network/ftpclient/ftpmainwindow.ui
@@ -0,0 +1,280 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>FtpMainWindow</class>
+<widget class="TQMainWindow">
+ <property name="name">
+ <cstring>FtpMainWindow</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>480</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Ftp client example</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="TQListView" row="1" column="0" rowspan="1" colspan="2">
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Size</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Last Modified</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>remoteView</cstring>
+ </property>
+ <property name="showSortIndicator">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="TQComboBox" row="0" column="1">
+ <property name="name">
+ <cstring>remotePath</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="editable">
+ <bool>true</bool>
+ </property>
+ <property name="duplicatesEnabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="TQLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Remote Path:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>remotePath</cstring>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<menubar>
+ <property name="name">
+ <cstring>menubar</cstring>
+ </property>
+ <item text="&amp;File" name="fileMenu">
+ <action name="fileConnectAction"/>
+ <action name="fileDownloadAction"/>
+ <action name="fileUploadAction"/>
+ <action name="fileRemoveAction"/>
+ <separator/>
+ <action name="fileExitAction"/>
+ </item>
+</menubar>
+<toolbars>
+ <toolbar dock="2">
+ <property name="name">
+ <cstring>toolBar</cstring>
+ </property>
+ <property name="label">
+ <string>Tools</string>
+ </property>
+ <action name="fileConnectAction"/>
+ <action name="fileDownloadAction"/>
+ <action name="fileUploadAction"/>
+ <action name="fileRemoveAction"/>
+ </toolbar>
+</toolbars>
+<actions>
+ <action>
+ <property name="name">
+ <cstring>fileDownloadAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image0</iconset>
+ </property>
+ <property name="text">
+ <string>Download...</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>fileExitAction</cstring>
+ </property>
+ <property name="text">
+ <string>Exit</string>
+ </property>
+ <property name="menuText">
+ <string>E&amp;xit</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>fileRemoveAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image1</iconset>
+ </property>
+ <property name="text">
+ <string>Remove</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>fileUploadAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image2</iconset>
+ </property>
+ <property name="text">
+ <string>Upload...</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>fileConnectAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image3</iconset>
+ </property>
+ <property name="text">
+ <string>Connect...</string>
+ </property>
+ </action>
+</actions>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="2477">789c95944953e3301046eff9152e74a3a61ac79bec9a9a03fbbeef4ccdc1926d92400224619d9aff3eeaafc719b640f02387477f96a5b6e49969ef6467d39b9e690c86f9b06d3ddbcafbde7471dbed3efefcf5e377632a083cf797265e30f5ad31b53bf4acb775d52b594839513e2ef86ced710a9faf3d95fa8e7814c621fc066e7c2379056ffa0cea47f066e06b83fa101e30a8afc1331d86325e0c370c7c573cd4b1c5fd863df019d41378c4c0f7e186819f8f1cf7530eaf18789f3df4433f8d313eea61938177e1b8e0182fd40ceedf80e74191c8789138833c8d5ce6b3557b22be5d7b26ebd770cbc0176a97feab01bc60e0d7f08a417ee491f4678e9ddb13a33fcac271a17e0ad78e0ceec35306f9367b1c30a81f8c5ce6b72e9e04f27cd582270cea4db8d6718c7e29ecb73865e05770c3209fc12d030fd993c821e3219f6807fa4b67f08c81a33f3ad56926ebc77c74c9c05378c5c003f634303a95f59dc04387f4a782733be47d3f8d5ccec761edb9e457e0b943d6730caff2dcc8fc57d9315d99ff235c3b24ff00b70e995f092fb332c77ea465f6dc77c8f37af0cc21fd5a849bdc5899ef12dc3a64bc7b78e1102fe0a5431cfbc3440cbc3b729c0fba835b07f61fe13c9a8a81ef8997612a7ec96e7d067e010f18bc7fa9470cead86f78fd721ed17f5b31a8dfb2171103c7f7a4c81c72de3af08a411d5e860c7c13aead95f5a99e380347bf4b6e38f693c27cf1b990f9e27b5165bef6258ffe55b8e4e33a39e3f3a46a26c9534e862c15545245e713e45bd4a60e5dd02575a94757742dcf199bbfa13e0d6848b77447f7f4408ff4c4778ccdcfd21ccdd3022dd2122dd38afbad7e925fa375daa0cd09f35bb44d3bb44b7b13e6f7e9800ee9888e913f71e9d30fd7abe88c7c6a52e03a1a5244f1cb7ebe7d3b9490a69432f72fa572655ee6955585a354953a7ffe14d552ede76ff855bea32ed4a5ea7ebe7ffee57bea4a5dab9bd729d51f937733a28e1a7c21cfd8d7a949f2aa5fa7fea7c7e7395df3c17adf1dffdd3cdf51f366d66ff393f2e5fc9fef8dbfa8437f7d</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="721">789ca590c10ac2300c86ef7b8ab2de866c3a0f1ec447503c0ae2214d237a5041e741c477b749376d3bf5e29f16fae7234d4855a8d572ae8a2abb34d0ec51e10eceaab0d7c3e1b6deccee595ed7ca9d891ae5832c2f15aac5e948fcd6eead8722b6c4d68c39d85ab196832db2b5c4c116d81275b586ed56245d3eea3fa25bc504004a6d44a8e31a87003d318c20f8ad43961140d4c733eb5a31080909b28802428224cc5d9d10d79d1100f5894101a64f240fd023922757863169f3c6503cc12befc748f6e6b72363f467f3a274076f2524d47752fe268f69f604fb43a540</data>
+ </image>
+ <image name="image2">
+ <data format="XPM.GZ" length="2461">789cd594496fdb301046effe1542780b8a89ac8d128a1eb22fcdbe27450f1425c58e633b5eb216fdefe57c1319718bd6ceb17af1e1851fa5e190d2d2a27779b8e72d2e354663336e5bcfb6ccd05b2c1ebadd976fdfbffc682c0481e7fed2d80b163e35168ec69ef5f6fbbd92859413e5e3822fd71ea7f0d5da53193f148fc238645703f6a6cf60fc1cde0c7c9d637c040f188cefc0331d86984f313c67e047e2a18e2de6e7ec81cf603c81470cfc049e33f0d6c4319f647ec5c087eca11ffa698cfb1b78938177e1b8e03770cd60fe2edc044522f78bc419e469e252cf7eed89f841ed99ac5fc32d035fab5dfaada4de8281dfc32b06f941ed91f467859ddb13a33fcac27161fc0aae1d19dc87a70cf26df63860307e3a71a9efab7812c8f315fa1d270cc69b70ade318fd52385f71cac0fbf09c413e835b061eb2279143ee87f526da81fed2353c63e0385f3ad56926eb47fdba64e029bc62e0017b1ae43a95f55dc24387f407fb8d76c87ebf4e5cde87b3da8de4b7e0c621ebb98057c6e452ff363bca95fa5fe0da21f967b875487d15bccc4a83f3489becc677c8f3d03f9339a45febf0dce456eadd805b87dcef095e38c44b78e9102fd8f38881f7268ef7831ee1d681f347384f79c5c08fc5cb3015c7fb637d067e070f18ecbf78c460fc168e038071acdf560cc61fd88b88818fe19943de37cc2f2a06e31df63264e07b706dadac4ff5c41938fa5172c3719e14e6e37321e703df872af3b52f79f4abc2251fd3f9f97b9e54cdac3c19f7cbc9524125557443ad5979479b6ea94377d4a51ef5e99e06f29ce93c9235431ad1981ee8919ee8995ee89567bccf731d9359cbb442abb446ebb4419bb4e57edbd3f93afd56ff32edd057daa5bdd979d83e1dd0211dd1f19cf9133aa5333aa70be42f5dfaea5ffd777dbf269f9a14b88e8614513cddcf3f778712d29452e6fea59451f9745e5955384a55a99bf74f512dd57ebfc3bfe56f5547dda9eeecf3f396efa9beba5783b9f3ae22eaa8e107f28cfd0ff32337a366343b3f2f1fcefffcdcf80560e77be9</data>
+ </image>
+ <image name="image3">
+ <data format="XPM.GZ" length="2878">789c8d95476fe4381085effe150dd7cd58d44854c6600fce394ff0cc620f2425b5533bb4dba1bdd8ff3eac57526381757bac671bf8c0c7122b88feb434383bda1f2c7d5a7898d8c9851ff8733b1e2cd58fa3d1f4afbffffc6761d19841f889e3786016ff58583c9e0cfce0e0f6a611600a40111e611af56c4aacaff45ceafab372e2335ddf574e932c01df835de4749d74bf8b6d5181c7c2e12c69a1fe536513150eeb4fe032c9330f46bcb88aab22833f063b11f84039293aff2ab83565a9f14b611389b07e39630b7e04db2c4d359f23b013818733d6f8ebe0dad4899ec7825b11d65f84932828c6fab8e752fd053816c18ffc1323c27a35639c9f182c4f0a46be499a651def823311f8109c8b106f076c4d9de37c1c298bc0d98c35dfbd9e2b7dff96729176f537602f02aff6acf3c177e0366953ad37e6233522b00327411aef1b38844f311ffc1d5c8ae05f06573649753ed09fd48ac027c2592c02a31f991121def18cf5bcdbcab949b45f0f1d575a0f42fe28a7e6bf0196a700e37bc97211e29d818ba25be71c5c8ac029d88bb01ff5c99acc74f5d5f3b4595beafe9fc2791aa4f16fc145909e0ffdccad088cfcf25604f63d179a3ff22bcaa2acb41f9be02a48eb710e6e44e004dc8ac03f844be38a52e37d052741983f6ec1d22e3dffeb8cb57f6b3d57fabe939eadeec7794a1ba4f3f705dc5aeb903f217e150569bd6ec02648f7633eab3c48e7790a9604755eaec06590f274c67a1e7caf950fd2fa0d7bb63acf0db8a91aabdf33e6c14641fa7e9cc75641dadf1a2c4f8d75e46f9d755eeb83fbc3fa20ad2fee535b0729ebfe264819fd74a9083c9ab17eef389fcb83743ed14f272fd47ae23e753e48cf83efcfb522f0a1729394cad7c23e1281513f6f44e00b30061aef9b8043f619e687743f0a08567f2d02633e7cebdb5aef03cc771d05697cdcc7752a02237e5d05697f717f3789088cfbaf29bcefea83fba20d4f55ea3fbb8f6bbe9fa9d747fc6cd9b1e79a1b6e79f801ff395ff0255ff1358ff8866ff94edf33d77fcf637ee0093ff2133ff30b4ff95576ccf52f07adf02aaff13a6ff066f8dd9aef879b789b7778f7f7fecebdc7fb7cc087bff377ee233ee6133ee52ff07f0dee6f6fe70bbfea3b9ff18f50d19f1c713caf9e5d97c46f38e19433ceb9e0f22d3f57c4c165f44cb2373cf6bf1deefd61c591a79a9ad0a1ce3d7f7e78482d0de99c1d5da89b2ee7fbb90a1578a12b5ea76b44275ea1d1fb7ebaa29bf0f796eee89ec6f4f061ff841ee9899edff3d30b4d3bff2b2dd30aadd21aadbf976fa8cd066d22fe166dd30eedbeed9ed587688ff6c9f1331d840e257d77e6f9b1e3908ed8d0319dccabfdfffb4ba7f39d9dffdfcf0bbf00b514c1b3</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>fileExitAction</sender>
+ <signal>activated()</signal>
+ <receiver>FtpMainWindow</receiver>
+ <slot>close()</slot>
+ </connection>
+ <connection>
+ <sender>fileDownloadAction</sender>
+ <signal>activated()</signal>
+ <receiver>FtpMainWindow</receiver>
+ <slot>downloadFile()</slot>
+ </connection>
+ <connection>
+ <sender>fileRemoveAction</sender>
+ <signal>activated()</signal>
+ <receiver>FtpMainWindow</receiver>
+ <slot>removeFile()</slot>
+ </connection>
+ <connection>
+ <sender>fileUploadAction</sender>
+ <signal>activated()</signal>
+ <receiver>FtpMainWindow</receiver>
+ <slot>uploadFile()</slot>
+ </connection>
+ <connection>
+ <sender>fileConnectAction</sender>
+ <signal>activated()</signal>
+ <receiver>FtpMainWindow</receiver>
+ <slot>connectToHost()</slot>
+ </connection>
+ <connection>
+ <sender>remotePath</sender>
+ <signal>activated(const TQString&amp;)</signal>
+ <receiver>FtpMainWindow</receiver>
+ <slot>changePath(const TQString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>remoteView</sender>
+ <signal>doubleClicked(TQListViewItem*)</signal>
+ <receiver>FtpMainWindow</receiver>
+ <slot>changePathOrDownload(TQListViewItem*)</slot>
+ </connection>
+ <connection>
+ <sender>remoteView</sender>
+ <signal>returnPressed(TQListViewItem*)</signal>
+ <receiver>FtpMainWindow</receiver>
+ <slot>changePathOrDownload(TQListViewItem*)</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="local" impldecl="in implementation">ftpmainwindow.ui.h</include>
+</includes>
+<forwards>
+ <forward>class TQFtp;</forward>
+ <forward>class TQUrlInfo;</forward>
+</forwards>
+<variables>
+ <variable access="private">TQFtp *ftp</variable>
+ <variable access="private">TQLabel *stateFtp</variable>
+ <variable access="private">TQString currentFtpDir</variable>
+</variables>
+<slots>
+ <slot access="public">connectToHost()</slot>
+ <slot access="private">uploadFile()</slot>
+ <slot access="private">downloadFile()</slot>
+ <slot access="private">removeFile()</slot>
+ <slot access="private">changePath( const TQString &amp; newPath )</slot>
+ <slot access="private">ftp_commandStarted()</slot>
+ <slot access="private">ftp_commandFinished()</slot>
+ <slot access="private">ftp_done( bool error )</slot>
+ <slot access="private">ftp_stateChanged( int state )</slot>
+ <slot access="private">ftp_listInfo( const TQUrlInfo &amp; i )</slot>
+ <slot access="private">ftp_rawCommandReply( int code, const TQString &amp; text )</slot>
+ <slot access="private">changePathOrDownload( TQListViewItem * )</slot>
+</slots>
+<functions>
+ <function access="private">init()</function>
+ <function access="private">destroy()</function>
+</functions>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/examples/network/ftpclient/ftpmainwindow.ui.h b/examples/network/ftpclient/ftpmainwindow.ui.h
new file mode 100644
index 000000000..1c272ffbe
--- /dev/null
+++ b/examples/network/ftpclient/ftpmainwindow.ui.h
@@ -0,0 +1,273 @@
+/****************************************************************************
+**
+** 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.
+**
+*****************************************************************************/
+
+/****************************************************************************
+**
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** The init() function is used in place of a constructor.
+** The destroy() function is used in place of a destructor.
+** The slots uploadFile(), downloadFile(), removeFile() and connectToHost() are
+** connected with the resp. actions of the GUI.
+**
+*****************************************************************************/
+
+#include <qftp.h>
+#include <qlineedit.h>
+#include <qspinbox.h>
+#include <qstatusbar.h>
+#include <qmessagebox.h>
+#include <qfiledialog.h>
+#include <qprogressdialog.h>
+#include <qapplication.h>
+
+#include "connectdialog.h"
+#include "ftpviewitem.h"
+
+void FtpMainWindow::init()
+{
+ stateFtp = new TQLabel( tr("Unconnected"), statusBar() );
+ statusBar()->addWidget( stateFtp, 0, TRUE );
+
+ ftp = new TQFtp( this );
+ connect( ftp, SIGNAL(commandStarted(int)),
+ SLOT(ftp_commandStarted()) );
+ connect( ftp, SIGNAL(commandFinished(int,bool)),
+ SLOT(ftp_commandFinished()) );
+ connect( ftp, SIGNAL(done(bool)),
+ SLOT(ftp_done(bool)) );
+ connect( ftp, SIGNAL(stateChanged(int)),
+ SLOT(ftp_stateChanged(int)) );
+ connect( ftp, SIGNAL(listInfo(const TQUrlInfo &)),
+ SLOT(ftp_listInfo(const TQUrlInfo &)) );
+ connect( ftp, SIGNAL(rawCommandReply(int, const TQString &)),
+ SLOT(ftp_rawCommandReply(int, const TQString &)) );
+}
+
+void FtpMainWindow::destroy()
+{
+ if ( ftp->state() != TQFtp::Unconnected )
+ ftp->close();
+}
+
+void FtpMainWindow::uploadFile()
+{
+ TQString fileName = TQFileDialog::getOpenFileName(
+ TQString::null,
+ TQString::null,
+ this,
+ "upload file dialog",
+ tr("Choose a file to upload") );
+ if ( fileName.isNull() )
+ return;
+
+ TQFile *file = new TQFile( fileName );
+ if ( !file->open( IO_ReadOnly ) ) {
+ TQMessageBox::critical( this, tr("Upload error"),
+ tr("Can't open file '%1' for reading.").arg(fileName) );
+ delete file;
+ return;
+ }
+
+ TQProgressDialog progress(
+ tr("Uploading file..."),
+ tr("Cancel"),
+ 0,
+ this,
+ "upload progress dialog",
+ TRUE );
+ connect( ftp, SIGNAL(dataTransferProgress(int,int)),
+ &progress, SLOT(setProgress(int,int)) );
+ connect( ftp, SIGNAL(commandFinished(int,bool)),
+ &progress, SLOT(reset()) );
+ connect( &progress, SIGNAL(cancelled()),
+ ftp, SLOT(abort()) );
+
+ TQFileInfo fi( fileName );
+ ftp->put( file, fi.fileName() );
+ progress.exec(); // ### takes a lot of time!!!
+
+ ftp->list();
+}
+
+void FtpMainWindow::downloadFile()
+{
+ FtpViewItem *item = (FtpViewItem*)remoteView->selectedItem();
+ if ( !item || item->isDir() )
+ return;
+
+ TQString fileName = TQFileDialog::getSaveFileName(
+ item->text(0),
+ TQString::null,
+ this,
+ "download file dialog",
+ tr("Save downloaded file as") );
+ if ( fileName.isNull() )
+ return;
+
+ // create file on the heap because it has to be valid throughout the whole
+ // asynchronous download operation
+ TQFile *file = new TQFile( fileName );
+ if ( !file->open( IO_WriteOnly ) ) {
+ TQMessageBox::critical( this, tr("Download error"),
+ tr("Can't open file '%1' for writing.").arg(fileName) );
+ delete file;
+ return;
+ }
+
+ TQProgressDialog progress(
+ tr("Downloading file..."),
+ tr("Cancel"),
+ 0,
+ this,
+ "download progress dialog",
+ TRUE );
+ connect( ftp, SIGNAL(dataTransferProgress(int,int)),
+ &progress, SLOT(setProgress(int,int)) );
+ connect( ftp, SIGNAL(commandFinished(int,bool)),
+ &progress, SLOT(reset()) );
+ connect( &progress, SIGNAL(cancelled()),
+ ftp, SLOT(abort()) );
+
+ ftp->get( item->text(0), file );
+ progress.exec(); // ### takes a lot of time!!!
+}
+
+void FtpMainWindow::removeFile()
+{
+ FtpViewItem *item = (FtpViewItem*)remoteView->selectedItem();
+ if ( !item || item->isDir() )
+ return;
+
+ ftp->remove( item->text(0) );
+ ftp->list();
+}
+
+void FtpMainWindow::connectToHost()
+{
+ ConnectDialog connectDialog;
+ if ( connectDialog.exec() == TQDialog::Rejected )
+ return;
+
+ remotePath->clear();
+ remoteView->clear();
+
+ if ( ftp->state() != TQFtp::Unconnected )
+ ftp->close();
+
+ ftp->connectToHost( connectDialog.host->text(), connectDialog.port->value() );
+ ftp->login( connectDialog.username->text(), connectDialog.password->text() );
+ ftp->rawCommand( "PWD" );
+ ftp->list();
+}
+
+// This slot is connected to the TQComboBox::activated() signal of the
+// remotePath.
+void FtpMainWindow::changePath( const TQString &newPath )
+{
+ ftp->cd( newPath );
+ ftp->rawCommand( "PWD" );
+ ftp->list();
+}
+
+// This slot is connected to the TQListView::doubleClicked() and
+// TQListView::returnPressed() signals of the remoteView.
+void FtpMainWindow::changePathOrDownload( TQListViewItem *item )
+{
+ if ( ((FtpViewItem*)item)->isDir() )
+ changePath( item->text(0) );
+ else
+ downloadFile();
+}
+
+/****************************************************************************
+**
+** Slots connected to signals of the TQFtp class
+**
+*****************************************************************************/
+
+void FtpMainWindow::ftp_commandStarted()
+{
+ TQApplication::setOverrideCursor( TQCursor(TQt::WaitCursor) );
+ if ( ftp->currentCommand() == TQFtp::List ) {
+ remoteView->clear();
+ if ( currentFtpDir != "/" )
+ new FtpViewItem( remoteView, FtpViewItem::Directory, "..", "", "" );
+ }
+}
+
+void FtpMainWindow::ftp_commandFinished()
+{
+ TQApplication::restoreOverrideCursor();
+ delete ftp->currentDevice();
+}
+
+void FtpMainWindow::ftp_done( bool error )
+{
+ if ( error ) {
+ TQMessageBox::critical( this, tr("FTP Error"), ftp->errorString() );
+
+ // If we are connected, but not logged in, it is not meaningful to stay
+ // connected to the server since the error is a really fatal one (login
+ // failed).
+ if ( ftp->state() == TQFtp::Connected )
+ ftp->close();
+ }
+}
+
+void FtpMainWindow::ftp_stateChanged( int state )
+{
+ switch ( (TQFtp::State)state ) {
+ case TQFtp::Unconnected:
+ stateFtp->setText( tr("Unconnected") );
+ break;
+ case TQFtp::HostLookup:
+ stateFtp->setText( tr("Host lookup") );
+ break;
+ case TQFtp::Connecting:
+ stateFtp->setText( tr("Connecting") );
+ break;
+ case TQFtp::Connected:
+ stateFtp->setText( tr("Connected") );
+ break;
+ case TQFtp::LoggedIn:
+ stateFtp->setText( tr("Logged in") );
+ break;
+ case TQFtp::Closing:
+ stateFtp->setText( tr("Closing") );
+ break;
+ }
+}
+
+void FtpMainWindow::ftp_listInfo( const TQUrlInfo &i )
+{
+ FtpViewItem::Type type;
+ if ( i.isDir() )
+ type = FtpViewItem::Directory;
+ else
+ type = FtpViewItem::File;
+
+ new FtpViewItem( remoteView, type,
+ i.name(), TQString::number(i.size()), i.lastModified().toString() );
+}
+
+void FtpMainWindow::ftp_rawCommandReply( int code, const TQString &text )
+{
+ if ( code == 257 ) {
+ currentFtpDir = text.section( '"', 1, 1 );
+
+ for ( int i = 0; i<remotePath->count(); i++ ) {
+ // make sure that we don't insert duplicates
+ if ( remotePath->text( i ) == currentFtpDir )
+ remotePath->removeItem( i );
+ }
+ remotePath->insertItem( currentFtpDir, 0 );
+ remotePath->setCurrentItem( 0 );
+ }
+}
diff --git a/examples/network/ftpclient/ftpviewitem.cpp b/examples/network/ftpclient/ftpviewitem.cpp
new file mode 100644
index 000000000..0763c1b0d
--- /dev/null
+++ b/examples/network/ftpclient/ftpviewitem.cpp
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** 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 <qpixmap.h>
+
+#include "ftpviewitem.h"
+
+
+FtpViewItem::FtpViewItem( TQListView *parent, Type t, const TQString &name, const TQString &size, const TQString &lastModified )
+ : TQListViewItem(parent,name,size,lastModified), type(t)
+{
+ // the pixmaps for folders and files are in an image collection
+ if ( type == Directory )
+ setPixmap( 0, TQPixmap::fromMimeSource( "folder.png" ) );
+ else
+ setPixmap( 0, TQPixmap::fromMimeSource( "file.png" ) );
+}
+
+int FtpViewItem::compare( TQListViewItem * i, int col, bool ascending ) const
+{
+ // The entry ".." is always the first one.
+ if ( text(0) == ".." ) {
+ if ( ascending )
+ return -1;
+ else
+ return 1;
+ }
+ if ( i->text(0) == ".." ) {
+ if ( ascending )
+ return 1;
+ else
+ return -1;
+ }
+
+ // Directories are before files.
+ if ( type != ((FtpViewItem*)i)->type ) {
+ if ( type == Directory ) {
+ if ( ascending )
+ return -1;
+ else
+ return 1;
+ } else {
+ if ( ascending )
+ return 1;
+ else
+ return -1;
+ }
+ }
+
+ // Use default sorting otherwise.
+ return TQListViewItem::compare( i, col, ascending );
+}
diff --git a/examples/network/ftpclient/ftpviewitem.h b/examples/network/ftpclient/ftpviewitem.h
new file mode 100644
index 000000000..3387f030a
--- /dev/null
+++ b/examples/network/ftpclient/ftpviewitem.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 FTPVIEWITEM_H
+#define FTPVIEWITEM_H
+
+#include <qlistview.h>
+#include <qdatetime.h>
+
+class FtpViewItem : public TQListViewItem
+{
+public:
+ enum Type {
+ Directory,
+ File
+ };
+
+ FtpViewItem( TQListView *parent, Type t, const TQString &name, const TQString &size, const TQString &lastModified );
+
+ int compare( TQListViewItem * i, int col, bool ascending ) const;
+
+ bool isDir()
+ { return type==Directory; }
+
+private:
+ Type type;
+};
+
+#endif
diff --git a/examples/network/ftpclient/images/file.png b/examples/network/ftpclient/images/file.png
new file mode 100644
index 000000000..f042c917b
--- /dev/null
+++ b/examples/network/ftpclient/images/file.png
Binary files differ
diff --git a/examples/network/ftpclient/images/folder.png b/examples/network/ftpclient/images/folder.png
new file mode 100644
index 000000000..5fd0a4335
--- /dev/null
+++ b/examples/network/ftpclient/images/folder.png
Binary files differ
diff --git a/examples/network/ftpclient/main.cpp b/examples/network/ftpclient/main.cpp
new file mode 100644
index 000000000..df636dcb9
--- /dev/null
+++ b/examples/network/ftpclient/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 "ftpmainwindow.h"
+
+int main( int argc, char **argv )
+{
+ TQApplication a( argc, argv );
+
+ FtpMainWindow m;
+ a.setMainWidget( &m );
+ m.show();
+ a.processEvents();
+ m.connectToHost();
+ return a.exec();
+}