summaryrefslogtreecommitdiffstats
path: root/tdm/kfrontend/kchooser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdm/kfrontend/kchooser.cpp')
-rw-r--r--tdm/kfrontend/kchooser.cpp227
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