diff options
Diffstat (limited to 'tdeio/misc/uiserver.h')
-rw-r--r-- | tdeio/misc/uiserver.h | 430 |
1 files changed, 430 insertions, 0 deletions
diff --git a/tdeio/misc/uiserver.h b/tdeio/misc/uiserver.h new file mode 100644 index 000000000..baf495dfe --- /dev/null +++ b/tdeio/misc/uiserver.h @@ -0,0 +1,430 @@ +/* This file is part of the KDE libraries + Copyright (C) 2000 Matej Koss <koss@miesto.sk> + David Faure <faure@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +#ifndef __tdeio_uiserver_h__ +#define __tdeio_uiserver_h__ + +#include <tqintdict.h> +#include <tqdatetime.h> +#include <tqtimer.h> + +#include <dcopobject.h> +#include <tdeio/global.h> +#include <tdeio/authinfo.h> +#include <kurl.h> +#include <kmainwindow.h> +#include <kdatastream.h> +#include <klistview.h> +#include <ksslcertdlg.h> + +class ListProgress; +class KSqueezedTextLabel; +class ProgressItem; +class UIServer; + +namespace TDEIO { + class Job; + class DefaultProgress; +} + + +struct ListProgressColumnConfig +{ + TQString title; + int index; + int width; + bool enabled; +}; + +/** +* List view in the UIServer. +* @internal +*/ +class TDEIO_EXPORT ListProgress : public KListView { + + Q_OBJECT + +public: + + ListProgress (TQWidget *parent = 0, const char *name = 0 ); + + virtual ~ListProgress(); + + /** + * Field constants + */ + enum ListProgressFields { + TB_OPERATION = 0, + TB_LOCAL_FILENAME = 1, + TB_RESUME = 2, + TB_COUNT = 3, //lv_count + TB_PROGRESS = 4, // lv_progress + TB_TOTAL = 5, + TB_SPEED = 6, + TB_REMAINING_TIME = 7, + TB_ADDRESS = 8, + TB_MAX = 9 + }; + + friend class ProgressItem; + friend class UIServer; +protected slots: + void columnWidthChanged(int column); +protected: + + void writeSettings(); + void readSettings(); + void applySettings(); + void createColumns(); + + bool m_showHeader; + bool m_fixedColumnWidths; + ListProgressColumnConfig m_lpcc[TB_MAX]; + //hack, alexxx + KSqueezedTextLabel *m_squeezer; +}; + +/** +* One item in the ListProgress +* @internal +*/ +class TDEIO_EXPORT ProgressItem : public TQObject, public TQListViewItem { + + Q_OBJECT + +public: + ProgressItem( ListProgress* view, TQListViewItem *after, TQCString app_id, int job_id, + bool showDefault = true ); + ~ProgressItem(); + + TQCString appId() { return m_sAppId; } + int jobId() { return m_iJobId; } + + bool keepOpen() const; + void finished(); + + void setVisible( bool visible ); + void setDefaultProgressVisible( bool visible ); + bool isVisible() const { return m_visible; } + + void setTotalSize( TDEIO::filesize_t bytes ); + void setTotalFiles( unsigned long files ); + void setTotalDirs( unsigned long dirs ); + + void setProcessedSize( TDEIO::filesize_t size ); + void setProcessedFiles( unsigned long files ); + void setProcessedDirs( unsigned long dirs ); + + void setPercent( unsigned long percent ); + void setSpeed( unsigned long bytes_per_second ); + void setInfoMessage( const TQString & msg ); + + void setCopying( const KURL& from, const KURL& to ); + void setMoving( const KURL& from, const KURL& to ); + void setDeleting( const KURL& url ); + void setTransferring( const KURL& url ); + void setCreatingDir( const KURL& dir ); + void setStating( const KURL& url ); + void setMounting( const TQString & dev, const TQString & point ); + void setUnmounting( const TQString & point ); + + void setCanResume( TDEIO::filesize_t offset ); + + TDEIO::filesize_t totalSize() { return m_iTotalSize; } + unsigned long totalFiles() { return m_iTotalFiles; } + TDEIO::filesize_t processedSize() { return m_iProcessedSize; } + unsigned long processedFiles() { return m_iProcessedFiles; } + unsigned long speed() { return m_iSpeed; } + unsigned int remainingSeconds() { return m_remainingSeconds; } + + const TQString& fullLengthAddress() const {return m_fullLengthAddress;} + void setText(ListProgress::ListProgressFields field, const TQString& text); +public slots: + void slotShowDefaultProgress(); + void slotToggleDefaultProgress(); + +protected slots: + void slotCanceled(); + +signals: + void jobCanceled( ProgressItem* ); + +protected: + void updateVisibility(); + + // ids that uniquely identify this progress item + TQCString m_sAppId; + int m_iJobId; + + // whether shown or not (it is hidden if a rename dialog pops up for the same job) + bool m_visible; + bool m_defaultProgressVisible; + + // parent listview + ListProgress *listProgress; + + // associated default progress dialog + TDEIO::DefaultProgress *defaultProgress; + + // we store these values for calculation of totals ( for statusbar ) + TDEIO::filesize_t m_iTotalSize; + unsigned long m_iTotalFiles; + TDEIO::filesize_t m_iProcessedSize; + unsigned long m_iProcessedFiles; + unsigned long m_iSpeed; + int m_remainingSeconds; + TQTimer m_showTimer; + TQString m_fullLengthAddress; +}; + +class TQResizeEvent; +class TQHideEvent; +class TQShowEvent; +class ProgressConfigDialog; +class TQPopupMenu; +class UIServerSystemTray; + +/** + * It's purpose is to show progress of IO operations. + * There is only one instance of this window for all jobs. + * + * All IO operations ( jobs ) are displayed in this window, one line per operation. + * User can cancel operations with Cancel button on toolbar. + * + * Double clicking an item in the list opens a small download window ( DefaultProgress ). + * + * @short Graphical server for progress information with an optional all-in-one progress window. + * @author David Faure <faure@kde.org> + * @author Matej Koss <koss@miesto.sk> + * + * @internal + */ +class TDEIO_EXPORT UIServer : public KMainWindow, public DCOPObject { + + K_DCOP + Q_OBJECT + + UIServer(); + virtual ~UIServer(); + +public: + static UIServer* createInstance(); + +k_dcop: + + /** + * Signal a new job + * @param appId the DCOP application id of the job's parent application + * @see TDEIO::Observer::newJob + * @param showProgress whether to popup the progress for the job. + * Usually true, but may be false when we use tdeio_uiserver for + * other things, like SSL dialogs. + * @return the job id + */ + int newJob( TQCString appId, bool showProgress ); + + ASYNC jobFinished( int id ); + + ASYNC totalSize( int id, unsigned long size ); + ASYNC totalSize64( int id, TDEIO::filesize_t size ); + ASYNC totalFiles( int id, unsigned long files ); + ASYNC totalDirs( int id, unsigned long dirs ); + + ASYNC processedSize( int id, unsigned long bytes ); + ASYNC processedSize64( int id, TDEIO::filesize_t bytes ); + ASYNC processedFiles( int id, unsigned long files ); + ASYNC processedDirs( int id, unsigned long dirs ); + + ASYNC percent( int id, unsigned long ipercent ); + ASYNC speed( int id, unsigned long bytes_per_second ); + ASYNC infoMessage( int id, const TQString & msg ); + + ASYNC copying( int id, KURL from, KURL to ); + ASYNC moving( int id, KURL from, KURL to ); + ASYNC deleting( int id, KURL url ); + ASYNC transferring( int id, KURL url ); + ASYNC creatingDir( int id, KURL dir ); + ASYNC stating( int id, KURL url ); + + ASYNC mounting( int id, TQString dev, TQString point ); + ASYNC unmounting( int id, TQString point ); + + ASYNC canResume( int id, unsigned long offset ); + ASYNC canResume64( int id, TDEIO::filesize_t offset ); + + /** + * @deprecated (it blocks other apps). + * Use TDEIO::PasswordDialog::getNameAndPassword instead. + * To be removed in KDE 4.0. + */ + TQByteArray openPassDlg( const TDEIO::AuthInfo &info ); + + /** + * Popup a message box. + * @param id The message identifier. + * @param type type of message box: QuestionYesNo, WarningYesNo, WarningContinueCancel... + * This enum is defined in slavebase.h, it currently is: + * QuestionYesNo = 1, WarningYesNo = 2, WarningContinueCancel = 3, + * WarningYesNoCancel = 4, Information = 5, SSLMessageBox = 6 + * @param text Message string. May contain newlines. + * @param caption Message box title. + * @param buttonYes The text for the first button. + * The default is i18n("&Yes"). + * @param buttonNo The text for the second button. + * The default is i18n("&No"). + * Note: for ContinueCancel, buttonYes is the continue button and buttonNo is unused. + * and for Information, none is used. + * @return a button code, as defined in KMessageBox, or 0 on communication error. + */ + int messageBox( int id, int type, const TQString &text, const TQString &caption, + const TQString &buttonYes, const TQString &buttonNo ); + + /** + * @deprecated (it blocks other apps). + * Use TDEIO::open_RenameDlg instead. + * To be removed in KDE 4.0. + */ + TQByteArray open_RenameDlg64( int id, + const TQString & caption, + const TQString& src, const TQString & dest, + int /* TDEIO::RenameDlg_Mode */ mode, + TDEIO::filesize_t sizeSrc, + TDEIO::filesize_t sizeDest, + unsigned long /* time_t */ ctimeSrc, + unsigned long /* time_t */ ctimeDest, + unsigned long /* time_t */ mtimeSrc, + unsigned long /* time_t */ mtimeDest + ); + /** + * @deprecated (it blocks other apps). + * Use TDEIO::open_RenameDlg instead. + * To be removed in KDE 4.0. + */ + TQByteArray open_RenameDlg( int id, + const TQString & caption, + const TQString& src, const TQString & dest, + int /* TDEIO::RenameDlg_Mode */ mode, + unsigned long sizeSrc, + unsigned long sizeDest, + unsigned long /* time_t */ ctimeSrc, + unsigned long /* time_t */ ctimeDest, + unsigned long /* time_t */ mtimeSrc, + unsigned long /* time_t */ mtimeDest + ); + + /** + * @deprecated (it blocks other apps). + * Use TDEIO::open_SkipDlg instead. + * To be removed in KDE 4.0. + */ + int open_SkipDlg( int id, + int /*bool*/ multi, + const TQString & error_text ); + + /** + * Switch to or from list mode - called by the kcontrol module + */ + void setListMode( bool list ); + + /** + * Hide or show a job. Typically, we hide a job while a "skip" or "rename" dialog + * is being shown for this job. This prevents killing it from the uiserver. + */ + void setJobVisible( int id, bool visible ); + + /** + * Show a SSL Information Dialog + */ + void showSSLInfoDialog(const TQString &url, const TDEIO::MetaData &data, int mainwindow); + + /** + * @deprecated + */ + void showSSLInfoDialog(const TQString &url, const TDEIO::MetaData &data); + + /* + * Show an SSL Certificate Selection Dialog + */ + KSSLCertDlgRet showSSLCertDialog(const TQString& host, const TQStringList& certList, int mainwindow); + + /* + * @deprecated + */ + KSSLCertDlgRet showSSLCertDialog(const TQString& host, const TQStringList& certList); + +public slots: + void slotConfigure(); + void slotRemoveSystemTrayIcon(); +protected slots: + + void slotUpdate(); + void slotQuit(); + + void slotCancelCurrent(); + + void slotToggleDefaultProgress( TQListViewItem * ); + void slotSelection(); + + void slotJobCanceled( ProgressItem * ); + void slotApplyConfig(); + void slotShowContextMenu(KListView*, TQListViewItem *item, const TQPoint& pos); + +protected: + + ProgressItem* findItem( int id ); + + virtual void resizeEvent(TQResizeEvent* e); + virtual bool queryClose(); + + void setItemVisible( ProgressItem * item, bool visible ); + + TQTimer* updateTimer; + ListProgress* listProgress; + + KToolBar::BarPosition toolbarPos; + TQString properties; + + void applySettings(); + void readSettings(); + void writeSettings(); +private: + + void killJob( TQCString observerAppId, int progressId ); + + int m_initWidth; + int m_initHeight; + int m_idCancelItem; + bool m_bShowList; + bool m_showStatusBar; + bool m_showToolBar; + bool m_keepListOpen; + bool m_showSystemTray; + bool m_shuttingDown; + + // true if there's a new job that hasn't been shown yet. + bool m_bUpdateNewJob; + ProgressConfigDialog *m_configDialog; + TQPopupMenu* m_contextMenu; + UIServerSystemTray *m_systemTray; + + static int s_jobId; + friend class no_bogus_warning_from_gcc; +}; + +// -*- mode: c++; c-basic-offset: 2 -*- +#endif |