/*************************************************************************** krspwidgets.cpp ------------------- copyright : (C) 2000 by Shie Erlich & Rafi Yanai e-mail : krusader@users.sourceforge.net web site : http://krusader.sourceforge.net --------------------------------------------------------------------------- Description *************************************************************************** A db dD d8888b. db db .d8888. .d8b. d8888b. d88888b d8888b. 88 ,8P' 88 `8D 88 88 88' YP d8' `8b 88 `8D 88' 88 `8D 88,8P 88oobY' 88 88 `8bo. 88ooo88 88 88 88ooooo 88oobY' 88`8b 88`8b 88 88 `Y8b. 88~~~88 88 88 88~~~~~ 88`8b 88 `88. 88 `88. 88b d88 db 8D 88 88 88 .8D 88. 88 `88. YP YD 88 YD ~Y8888P' `8888Y' YP YP Y8888D' Y88888P 88 YD S o u r c e F i l e *************************************************************************** * * * 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. * * * ***************************************************************************/ #include "krspwidgets.h" #include "../krusader.h" #include "../krusaderview.h" #include "../Panel/listpanel.h" #include "../kicons.h" #include "../Filter/filtertabs.h" #include #include #include #include #include #include #include #include #include #include #include #include "../resources.h" ///////////////////// initiation of the static members //////////////////////// TQStrList KRSpWidgets::maskList; /////////////////////////////////////////////////////////////////////////////// KRSpWidgets::KRSpWidgets(){ } KRQuery KRSpWidgets::getMask(TQString caption, bool nameOnly ) { if( !nameOnly ) { return FilterTabs::getQuery(); } else { KRMaskChoiceSub *p=new KRMaskChoiceSub(); p->setCaption(caption); p->exec(); if (p->selection->currentText()=="") return KRQuery(); else return KRQuery( p->selection->currentText() ); } } /////////////////////////// newFTP //////////////////////////////////////// KURL KRSpWidgets::newFTP() { newFTPSub *p=new newFTPSub(); p->exec(); if (p->url->currentText()=="") return KURL(); // empty url KURL url; TQString protocol = p->prefix->currentText(); protocol.truncate(protocol.length() - 3); // remove the trailing :// TQString username = p->username->text().simplifyWhiteSpace(); TQString password = p->password->text().simplifyWhiteSpace(); TQString uri = p->url->currentText(); int uriStart = uri.findRev( '@' ); /* lets the user enter user and password in the URI field */ if( uriStart != -1 ) { TQString uriUser = uri.left( uriStart ); TQString uriPsw = TQString(); uri = uri.mid( uriStart + 1 ); int pswStart = uriUser.find( ':' ); /* getting the password name from the URL */ if( pswStart != -1 ) { uriPsw = uriUser.mid( pswStart + 1 ); uriUser = uriUser.left( pswStart ); } if( !uriUser.isEmpty() ) /* handling the ftp proxy username and password also */ username = username.isEmpty() ? uriUser : username + "@" + uriUser; if( !uriPsw.isEmpty() ) /* handling the ftp proxy username and password also */ password = password.isEmpty() ? uriPsw : password + "@" + uriPsw; } TQString host = uri; /* separating the hostname and path from the uri */ TQString path = TQString(); int pathStart = uri.find( "/" ); if( pathStart != -1 ) { path = host.mid( pathStart ); host = host.left( pathStart ); } /* setting the parameters of the URL */ url.setProtocol(protocol); url.setHost( host ); url.setPath( path ); if ( protocol == "ftp" || protocol == "fish" || protocol == "sftp" ) url.setPort(p->port->cleanText().toInt()); if (!username.isEmpty()) url.setUser( username ); if (!password.isEmpty()) url.setPass( password ); return url; } newFTPSub::newFTPSub() : newFTPGUI(0,0,true) { url->setFocus(); setGeometry(krApp->x()+krApp->width()/2-width()/2,krApp->y()+krApp->height()/2-height()/2,width(),height()); } void newFTPSub::accept() { url->addToHistory( url->currentText() ); // save the history and completion list when the history combo is // destroyed krConfig->setGroup("Private"); TQStringList list = url->completionObject()->items(); krConfig->writeEntry( "newFTP Completion list", list ); list = url->historyItems(); krConfig->writeEntry( "newFTP History list", list ); newFTPGUI::accept(); } void newFTPSub::reject() { url->setCurrentText(""); newFTPGUI::reject(); } /////////////////////////// KRMaskChoiceSub /////////////////////////////// KRMaskChoiceSub::KRMaskChoiceSub() : KRMaskChoice(0,0,true) { PixmapLabel1->setPixmap(krLoader->loadIcon("kr_select", TDEIcon::Desktop, 32)); label->setText(i18n("Enter a selection:")); // the predefined selections list krConfig->setGroup("Private"); TQStrList lst; int i=krConfig->readListEntry("Predefined Selections",lst); if (i>0) preSelections->insertStrList(lst); // the combo-box tweaks selection->setDuplicatesEnabled(false); selection->insertStrList(KRSpWidgets::maskList); selection->lineEdit()->setText("*"); selection->lineEdit()->selectAll(); selection->setFocus(); } void KRMaskChoiceSub::reject() { selection->clear(); KRMaskChoice::reject(); } void KRMaskChoiceSub::accept() { bool add = true; char *tmp; // make sure we don't have that already for ( tmp = KRSpWidgets::maskList.first(); tmp ; tmp = KRSpWidgets::maskList.next() ) if (TQString(tmp).simplifyWhiteSpace() == selection->currentText().simplifyWhiteSpace()) { // break if we found one such as this add = false; break; } if (add) KRSpWidgets::maskList.insert(0,selection->currentText().local8Bit()); // write down the predefined selections list TQStrList list; TQListBoxItem *i=preSelections->firstItem(); while (i!=0) { if (i->text().find(i18n("compare mode"))==-1) list.append(i->text().local8Bit()); i=i->next(); } krConfig->setGroup("Private"); krConfig->writeEntry("Predefined Selections",list); KRMaskChoice::accept(); } void KRMaskChoiceSub::addSelection() { TQString temp=selection->currentText(); bool itemExists=false; TQListBoxItem *i=preSelections->firstItem(); // check if the selection already exists while (i!=0) if (i->text()==temp) { itemExists=true; break; } else i=i->next(); if (temp!="" && !itemExists) { preSelections->insertItem(selection->currentText()); preSelections->update(); } } void KRMaskChoiceSub::deleteSelection() { if (preSelections->currentItem()!=-1 && preSelections->currentText().find(i18n("compare mode"))==-1) { preSelections->removeItem(preSelections->currentItem()); preSelections->update(); } } void KRMaskChoiceSub::clearSelections() { preSelections->clear(); preSelections->update(); } void KRMaskChoiceSub::acceptFromList(TQListBoxItem *i) { selection->insertItem(i->text(),0); accept(); } ////////////////////////// QuickNavLineEdit //////////////////// QuickNavLineEdit::QuickNavLineEdit(const TQString &string, TQWidget *parent, const char *name): KLineEdit(string, parent, name) { init(); } QuickNavLineEdit::QuickNavLineEdit(TQWidget *parent, const char *name): KLineEdit(parent, name) { init(); } int QuickNavLineEdit::findCharFromPos(const TQString & str, const TQFontMetrics & metrics, int pos) { if (pos < 0) return -1; for (int i = 1; i <= (int)str.length(); ++i) if (metrics.width(str, i) > pos) return i; return str.length(); } void QuickNavLineEdit::init() { _numOfSelectedChars=0; _dummyDisplayed=false; _pop=0; //setCompletionMode( TDEGlobalSettings::CompletionPopupAuto ); ==> removed by public demand } void QuickNavLineEdit::leaveEvent(TQEvent *) { clearAll(); } void QuickNavLineEdit::mousePressEvent( TQMouseEvent *m ) { if (m->state()!=ControlButton) clearAll(); else { if (!_numOfSelectedChars) { _numOfSelectedChars = charCount(m); if (_numOfSelectedChars < 0) _numOfSelectedChars = 0; } if (_numOfSelectedChars) emit returnPressed(text().left(_numOfSelectedChars)); } KLineEdit::mousePressEvent(m); } int QuickNavLineEdit::charCount(const TQMouseEvent * const m,TQString * const str) { // find how much of the string we've selected (approx) // and select from from the start to the closet slash (on the right) const TQString tx = text().simplifyWhiteSpace(); if (tx.isEmpty()) { clearAll(); return -1; } int numOfChars = findCharFromPos(tx, fontMetrics(), m->x() - 5); if(str) *str=tx; return tx.find('/', numOfChars); } void QuickNavLineEdit::mouseMoveEvent( TQMouseEvent *m) { if (m->state()!=ControlButton) { // works only with ctrl pressed clearAll(); KLineEdit::mouseMoveEvent(m); return; } TQString tx; int idx=charCount(m,&tx); if (idx == -1 && !_dummyDisplayed) { // pointing on or after the current directory if (_pop) delete _pop; _pop = KPassivePopup::message( i18n("Quick Navigation"), "" + i18n("Already at %1").arg(tx.left(idx)) + "", *(KCursor::handCursor().bitmap()), this); _dummyDisplayed=true; _numOfSelectedChars=0; } else if (idx>0 && idx!=_numOfSelectedChars) { _numOfSelectedChars=idx; if (_pop) delete _pop; _dummyDisplayed=false; _pop = KPassivePopup::message( i18n("Quick Navigation"), "" + i18n("Click to go to %1").arg(tx.left(idx)) + "", *(KCursor::handCursor().bitmap()), this ); } KLineEdit::mouseMoveEvent(m); }