diff options
Diffstat (limited to 'tdm/kfrontend/kchooser.cpp')
-rw-r--r-- | tdm/kfrontend/kchooser.cpp | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/tdm/kfrontend/kchooser.cpp b/tdm/kfrontend/kchooser.cpp new file mode 100644 index 000000000..00b08cd35 --- /dev/null +++ b/tdm/kfrontend/kchooser.cpp @@ -0,0 +1,227 @@ +/* + +chooser widget for TDM + +Copyright (C) 2002-2003 Oswald Buddenhagen <ossi@kde.org> +based on the chooser (C) 1999 by Harald Hoyer <Harald.Hoyer@RedHat.de> + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program 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 General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include <config.h> + +#ifdef XDMCP + +#include "kchooser.h" +#include "kconsole.h" +#include "tdmconfig.h" +#include "tdm_greet.h" + +#include <klocale.h> + +#include <tqlayout.h> +#include <tqlabel.h> +#include <tqpushbutton.h> +#include <tqpopupmenu.h> +#include <tqsocketnotifier.h> +#include <tqlistview.h> +#include <tqlineedit.h> + +#include <stdlib.h> // for free() + +class ChooserListViewItem : public TQListViewItem { + public: + ChooserListViewItem( TQListView* parent, int _id, const TQString& nam, const TQString& sts ) + : TQListViewItem( parent, nam, sts ) { id = _id; }; + + int id; +}; + + +ChooserDlg::ChooserDlg() + : inherited() +{ + completeMenu( LOGIN_REMOTE_ONLY, ex_greet, i18n("&Local Login"), ALT+Key_L ); + + TQBoxLayout *vbox = new TQVBoxLayout( this, 10, 10 ); + + TQLabel *title = new TQLabel( i18n("XDMCP Host Menu"), this ); + title->setAlignment( AlignCenter ); + vbox->addWidget( title ); + + host_view = new TQListView( this, "hosts" ); + host_view->addColumn( i18n("Hostname") ); + host_view->setColumnWidth( 0, fontMetrics().width( "login.crap.net" ) ); + host_view->addColumn( i18n("Status") ); + host_view->setMinimumWidth( fontMetrics().width( "login.crap.com Display not authorized to connect this server" ) ); + host_view->setResizeMode( TQListView::LastColumn ); + host_view->setAllColumnsShowFocus( true ); + vbox->addWidget( host_view ); + + iline = new TQLineEdit( this ); + iline->setEnabled( TRUE ); + TQLabel *itxt = new TQLabel( iline, i18n("Hos&t:"), this ); + TQPushButton *addButton = new TQPushButton( i18n("A&dd"), this ); + connect( addButton, TQT_SIGNAL(clicked()), TQT_SLOT(addHostname()) ); + TQBoxLayout *hibox = new TQHBoxLayout( vbox, 10 ); + hibox->addWidget( itxt ); + hibox->addWidget( iline ); + hibox->addWidget( addButton ); + + // Buttons + TQPushButton *acceptButton = new TQPushButton( i18n("&Accept"), this ); + acceptButton->setDefault( true ); + TQPushButton *pingButton = new TQPushButton( i18n("&Refresh"), this ); + + TQBoxLayout *hbox = new TQHBoxLayout( vbox, 20 ); + hbox->addWidget( acceptButton ); + hbox->addWidget( pingButton ); + hbox->addStretch( 1 ); + + if (optMenu) { + TQPushButton *menuButton = new TQPushButton( i18n("&Menu"), this ); + menuButton->setPopup( optMenu ); + hbox->addWidget( menuButton ); + hbox->addStretch( 1 ); + } + +// TQPushButton *helpButton = new TQPushButton( i18n("&Help"), this ); +// hbox->addWidget( helpButton ); + +#ifdef WITH_TDM_XCONSOLE + if (consoleView) + vbox->addWidget( consoleView ); +#endif + + sn = new TQSocketNotifier( rfd, TQSocketNotifier::Read, TQT_TQOBJECT(this) ); + connect( sn, TQT_SIGNAL(activated( int )), TQT_SLOT(slotReadPipe()) ); + + connect( pingButton, TQT_SIGNAL(clicked()), TQT_SLOT(pingHosts()) ); + connect( acceptButton, TQT_SIGNAL(clicked()), TQT_SLOT(accept()) ); +// connect( helpButton, TQT_SIGNAL(clicked()), TQT_SLOT(slotHelp()) ); + connect( host_view, TQT_SIGNAL(doubleClicked(TQListViewItem *)), TQT_SLOT(accept()) ); + + adjustGeometry(); +} + +/* +void ChooserDlg::slotHelp() +{ + KMessageBox::information(0, + i18n("Choose a host, you want to work on,\n" + "in the list or add one.\n\n" + "After this box, you must press cancel\n" + "in the Host Menu to enter a host. :(")); + iline->setFocus(); +} +*/ + +void ChooserDlg::addHostname() +{ + if (!iline->text().isEmpty()) { + GSendInt( G_Ch_RegisterHost ); + GSendStr( iline->text().latin1() ); + iline->clear(); + } +} + +void ChooserDlg::pingHosts() +{ + GSendInt( G_Ch_Refresh ); +} + +void ChooserDlg::accept() +{ + if (focusWidget() == iline) { + if (!iline->text().isEmpty()) { + GSendInt( G_Ch_DirectChoice ); + GSendStr( iline->text().latin1() ); + iline->clear(); + } + return; + } else /*if (focusWidget() == host_view)*/ { + TQListViewItem *item = host_view->currentItem(); + if (item) { + GSendInt( G_Ready ); + GSendInt( ((ChooserListViewItem *)item)->id ); + ::exit( EX_NORMAL ); + } + } +} + +void ChooserDlg::reject() +{ +} + +TQString ChooserDlg::recvStr() +{ + char *arr = GRecvStr(); + if (arr) { + TQString str = TQString::fromLatin1( arr ); + free( arr ); + return str; + } else + return i18n("<unknown>"); +} + +TQListViewItem *ChooserDlg::findItem( int id ) +{ + TQListViewItem *itm; + for (TQListViewItemIterator it( host_view ); (itm = it.current()); ++it) + if (((ChooserListViewItem *)itm)->id == id) + return itm; + return 0; +} + +void ChooserDlg::slotReadPipe() +{ + int id; + TQString nam, sts; + + int cmd = GRecvInt(); + switch (cmd) { + case G_Ch_AddHost: + case G_Ch_ChangeHost: + id = GRecvInt(); + nam = recvStr(); + sts = recvStr(); + GRecvInt(); /* swallow willing for now */ + if (cmd == G_Ch_AddHost) + host_view->insertItem( + new ChooserListViewItem( host_view, id, nam, sts ) ); + else { + TQListViewItem *itm = findItem( id ); + itm->setText( 0, nam ); + itm->setText( 1, sts ); + } + break; + case G_Ch_RemoveHost: + delete findItem( GRecvInt() ); + break; + case G_Ch_BadHost: + KFMsgBox::box( this, TQMessageBox::Warning, i18n("Unknown host %1").arg( recvStr() ) ); + break; + case G_Ch_Exit: + done( ex_exit ); + break; + default: /* XXX huuh ...? */ + break; + } +} + +#include "kchooser.moc" + +#endif |