⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 krspwidgets.cpp

📁 LINUX 下, 以 QT/KDE 写的档案管理员
💻 CPP
字号:
/***************************************************************************                                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 <qcombobox.h>#include <qlabel.h>#include <qlineedit.h>#include <qcheckbox.h>#include <qlistbox.h>#include <qspinbox.h>#include <klocale.h>#include <kcombobox.h>#include <kiconloader.h>#include <kcursor.h>#include <qbitmap.h>#include "../resources.h"///////////////////// initiation of the static members ////////////////////////QStrList KRSpWidgets::maskList;///////////////////////////////////////////////////////////////////////////////KRSpWidgets::KRSpWidgets(){}KRQuery KRSpWidgets::getMask(QString 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;		QString protocol = p->prefix->currentText();	protocol.truncate(protocol.length() - 3); // remove the trailing ://	QString username = p->username->text().simplifyWhiteSpace();	QString password = p->password->text().simplifyWhiteSpace();	QString uri = p->url->currentText();	int uriStart = uri.findRev( '@' ); /* lets the user enter user and password in the URI field */	if( uriStart != -1 ) {		QString uriUser = uri.left( uriStart );		QString uriPsw = QString::null;		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;	}	QString host = uri;               /* separating the hostname and path from the uri */	QString path = QString::null;	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");  QStringList 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", KIcon::Desktop, 32));  label->setText(i18n("Enter a selection:"));  // the predefined selections list  krConfig->setGroup("Private");  QStrList 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 (QString(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  QStrList list;  QListBoxItem *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() {  QString temp=selection->currentText();  bool itemExists=false;  QListBoxItem *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(QListBoxItem *i) {  selection->insertItem(i->text(),0);  accept();}////////////////////////// QuickNavLineEdit ////////////////////QuickNavLineEdit::QuickNavLineEdit(const QString &string, QWidget *parent, const char *name):	KLineEdit(string, parent, name) { init(); }	QuickNavLineEdit::QuickNavLineEdit(QWidget *parent, const char *name): 	KLineEdit(parent, name) { init(); }int QuickNavLineEdit::findCharFromPos(const QString & str, const QFontMetrics & 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( KGlobalSettings::CompletionPopupAuto );  ==> removed by public demand}void QuickNavLineEdit::leaveEvent(QEvent *) {	clearAll();}void QuickNavLineEdit::mousePressEvent( QMouseEvent *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 QMouseEvent * const m,QString * 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 QString 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( QMouseEvent *m) {	if (m->state()!=ControlButton) { // works only with ctrl pressed		clearAll();		KLineEdit::mouseMoveEvent(m);		return;	}  QString 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"),				"<qt>" + i18n("Already at <i>%1</i>").arg(tx.left(idx)) + "</qt>",				*(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"),				"<qt>" + i18n("Click to go to <i>%1</i>").arg(tx.left(idx)) + "</qt>",				*(KCursor::handCursor().bitmap()), this );		}	KLineEdit::mouseMoveEvent(m);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -