Source Code (Use browser search to find items of interest.)
Class Index
kfind'KfindWindow (./kdeutils/kfind/kfwin.h:27)
class KfindWindow: public KListView
{
Q_OBJECT
public:
KfindWindow( QWidget * parent = 0, const char * name = 0 );
void beginSearch();
void endSearch();
void copySelection();
void insertItem(QString str);
public slots:
void selectAll();
void unselectAll();
private slots:
void deleteFiles();
void fileProperties();
void openFolder();
void saveResults();
void addToArchive();
void openBinding();
void selectionHasChanged();
protected:
virtual void resizeEvent(QResizeEvent *e);
virtual void contentsMousePressEvent(QMouseEvent *e);
virtual void contentsMouseReleaseEvent(QMouseEvent *e);
virtual void contentsMouseMoveEvent(QMouseEvent *e);
QList<KfFileLVI> * selectedItems();
signals:
void resultSelected(bool);
private:
bool haveSelection;
bool m_pressed;
void execAddToArchive(KfArchiver *arch, QString filename);
void resetColumns(bool init);
QList<KfFileLVI> mySelectedItems;
};
kfind'KfindWindow::KfindWindow() (./kdeutils/kfind/kfwin.cpp:104)
KfindWindow::KfindWindow( QWidget *parent, const char *name )
: KListView( parent, name )
{
setSelectionMode( KListView::Extended );
setShowSortIndicator( TRUE );
addColumn(i18n("Name"));
addColumn(i18n("In directory"));
addColumn(i18n("Size"));
setColumnAlignment(2, AlignRight);
addColumn(i18n("Modified"));
setColumnAlignment(3, AlignRight);
addColumn(i18n("Permissions"));
setColumnAlignment(4, AlignRight);
// Disable autoresize for all columns
// Resizing is done by resetColumns() function
for(int i=0; i<5; i++)
setColumnWidthMode(i, Manual);
resetColumns(TRUE);
connect(this, SIGNAL(executed(QListViewItem *)),
this, SLOT(openBinding()));
connect( this, SIGNAL(selectionChanged()),
this, SLOT( selectionHasChanged() ));
}
kfind'KfindWindow::beginSearch() (./kdeutils/kfind/kfwin.cpp:132)
void KfindWindow::beginSearch()
{
haveSelection = false;
clear();
}
kfind'KfindWindow::endSearch() (./kdeutils/kfind/kfwin.cpp:138)
void KfindWindow::endSearch()
{
}
kfind'KfindWindow::insertItem() (./kdeutils/kfind/kfwin.cpp:142)
void KfindWindow::insertItem(QString file) {
new KfFileLVI(this, file);
}
// copy to clipboard aka X11 selection
kfind'KfindWindow::copySelection() (./kdeutils/kfind/kfwin.cpp:147)
void KfindWindow::copySelection()
{
QString s;
QListViewItem *item = firstChild();
while(item != NULL) {
if(isSelected(item)) {
s.append(((KfFileLVI*)item)->fileInfo->absFilePath());
s.append(" ");
}
item = item->nextSibling();
}
if(s.length() > 0) {
QClipboard *cb = kapp->clipboard();
cb->clear();
cb->setText(s);
}
}
kfind'KfindWindow::selectAll() (./kdeutils/kfind/kfwin.cpp:166)
void KfindWindow::selectAll()
{
QListViewItem *item = firstChild();
while(item != NULL) {
setSelected(item, TRUE);
item = item->nextSibling();
}
selectionHasChanged();
}
kfind'KfindWindow::unselectAll() (./kdeutils/kfind/kfwin.cpp:176)
void KfindWindow::unselectAll()
{
QListViewItem *item = firstChild();
while(item != NULL) {
setSelected(item, FALSE);
item = item->nextSibling();
}
selectionHasChanged();
}
kfind'KfindWindow::saveResults() (./kdeutils/kfind/kfwin.cpp:186)
void KfindWindow::saveResults()
{
QListViewItem *item;
FILE *results;
QString filename;
if ( saving->getSaveStandard() ) {
filename = getenv("HOME");
filename += "/.kfind-results.html";
}
else
filename = saving->getSaveFile();
results=fopen(filename.ascii(),"w");
if (results == 0L)
KMessageBox::error(parentWidget(), i18n("It wasn't possible to save results!"));
else {
if ( saving->getSaveFormat() == "HTML" ) {
fprintf(results,"<HTML><HEAD>\n");
fprintf(results,"<!DOCTYPE %s>\n",
i18n("KFind Results File").ascii());
fprintf(results,"<TITLE>%sKFind Results File</TITLE></HEAD>\n",
i18n("KFind Results File").ascii());
fprintf(results,"<BODY><H1>%s</H1>\n",
i18n("KFind Results File").ascii());
fprintf(results,"<DL><p>\n");
item = firstChild();
while(item != NULL) {
QString path=((KfFileLVI*)item)->fileInfo->absFilePath();
fprintf(results,"<DT><A HREF=\"file:%s\">file:%s</A>\n",
path.ascii(), path.ascii());
item = item->nextSibling();
}
fprintf(results,"</DL><P></BODY></HTML>\n");
}
else {
item = firstChild();
while(item != NULL) {
QString path=((KfFileLVI*)item)->fileInfo->absFilePath();
fprintf(results,"%s\n", path.ascii());
item = item->nextSibling();
}
}
fclose(results);
KMessageBox::information(parentWidget(),
i18n("Results were saved to file\n")+
filename);
}
}
// This function is called when selection is changed (both selected/deselected)
// It notifies the parent about selection status and enables/disables menubar
kfind'KfindWindow::selectionHasChanged() (./kdeutils/kfind/kfwin.cpp:241)
void KfindWindow::selectionHasChanged()
{
emit resultSelected(true);
QListViewItem *item = firstChild();
while(item != 0L) {
if(isSelected(item)) {
emit resultSelected( true );
haveSelection = true;
return;
}
item = item->nextSibling();
}
haveSelection = false;
emit resultSelected(false);
}
kfind'KfindWindow::deleteFiles() (./kdeutils/kfind/kfwin.cpp:260)
void KfindWindow::deleteFiles()
{
QString tmp = i18n("Do you really want to delete selected file(s)?");
if(KMessageBox::questionYesNo(parentWidget(), tmp) == KMessageBox::No)
return;
// Iterate on all selected elements
QList<KfFileLVI> *selected = selectedItems();
for ( uint i = 0; i < selected->count(); i++ ) {
KfFileLVI *item = selected->at(i);
QFileInfo *file = item->fileInfo;
// Regular file
if (file->isFile() ||
file->isSymLink()) {
if (remove(file->filePath().ascii()) == -1)
switch(errno) {
case EACCES:
KMessageBox::error(parentWidget(),
i18n("You have no permission\nto delete this file(s)"));
break;
default:
KMessageBox::error(parentWidget(),
i18n("It is not possible to delete\nselected file(s)"));
}
else
removeItem(item);
}
// Directory
else {
if (rmdir(file->filePath().ascii()) == -1) {
switch(errno) {
case EACCES:
KMessageBox::error(parentWidget(),
i18n("You have no permission\nto delete this directory"));
break;
case ENOTEMPTY:
KMessageBox::error(parentWidget(),
i18n("Specified directory\nis not empty"));
break;
default:
KMessageBox::error(parentWidget(),
i18n("It is not possible to delete\nselected directory"));
}
}
else
removeItem(item);
}
}
}
kfind'KfindWindow::fileProperties() (./kdeutils/kfind/kfwin.cpp:314)
void KfindWindow::fileProperties()
{
QString tmp= "file:";
QFileInfo *fileInfo = ((KfFileLVI *)currentItem())->fileInfo;
if (fileInfo->isDir())
tmp += fileInfo->filePath();
else
tmp += fileInfo->absFilePath();
(void) new PropertiesDialog(tmp);
}
kfind'KfindWindow::openFolder() (./kdeutils/kfind/kfwin.cpp:325)
void KfindWindow::openFolder()
{
QString tmp= "file:";
QFileInfo *fileInfo = ((KfFileLVI *)currentItem())->fileInfo;
if (fileInfo->isDir())
tmp += fileInfo->filePath();
else
tmp += fileInfo->dirPath();
if ( !KOpenWithHandler::exists() )
(void) new KFileOpenWithHandler();
(void) new KRun(tmp, 0, true, true);
}
kfind'KfindWindow::openBinding() (./kdeutils/kfind/kfwin.cpp:339)
void KfindWindow::openBinding()
{
QString tmp= "file:";
QFileInfo *fileInfo = ((KfFileLVI*)currentItem())->fileInfo;
if (fileInfo->isDir())
tmp += fileInfo->filePath();
else
tmp += fileInfo->absFilePath();
if ( !KOpenWithHandler::exists() )
(void) new KFileOpenWithHandler();
(void) new KRun( tmp, 0, true, true );
}
kfind'KfindWindow::addToArchive() (./kdeutils/kfind/kfwin.cpp:353)
void KfindWindow::addToArchive()
{
KfArchiver *arch;
KURL url( KFileDialog::getOpenURL() );
if ( url.isEmpty() )
return;
if ( !url.isLocalFile()) {
KMessageBox::sorry(this, i18n("No local archives are currently supported."));
return;
}
QString filename = url.path();
int pos1 = filename.findRev(".");
int pos2 = filename.findRev(".",pos1-1);
QString pattern1 = filename.right(filename.length()-pos1);
QString pattern2 = "*"+filename.mid(pos2,pos1-pos2)+pattern1;
if ( (arch = KfArchiver::findByPattern(pattern2.ascii()))!=0L)
execAddToArchive(arch,filename);
else
if ( (arch = KfArchiver::findByPattern(("*"+pattern1).ascii()))!=0L)
execAddToArchive(arch,filename);
else
KMessageBox::error(parentWidget(),
i18n("Couldn't recognize archive type!"));
}
kfind'KfindWindow::execAddToArchive() (./kdeutils/kfind/kfwin.cpp:381)
void KfindWindow::execAddToArchive(KfArchiver *arch, QString archname)
{
QFileInfo archiv(archname);
QString buffer,pom;
KProcess archProcess;
int pos;
if ( archiv.exists() )
buffer = arch->getOnUpdate();
else
buffer = arch->getOnCreate();
buffer=buffer.simplifyWhiteSpace();
pos = buffer.find(" ");
pom = buffer.left(pos);
if (pos==-1)
pos = buffer.length();
buffer = buffer.remove(0,pos+1);
archProcess.clearArguments ();
archProcess.setExecutable(pom);
while( !buffer.isEmpty() )
{
pos = buffer.find(" ");
pom = buffer.left(pos);
if ( pom=="%d" )
{
QFileInfo *fileInfo = ((KfFileLVI*)currentItem())->fileInfo;
pom = fileInfo->dirPath(TRUE)+'/';
}
if ( pom=="%a" )
pom = archname;
if ( pom=="%f" )
pom = ((KfFileLVI*)currentItem())->fileInfo->absFilePath();;
if ( pom=="%n" )
{
QFileInfo *fileInfo = ((KfFileLVI*)currentItem())->fileInfo;
pom = fileInfo->fileName();
}
archProcess << pom;
if (pos==-1)
pos = buffer.length();
buffer = buffer.remove(0,pos+1);
}
if ( !archProcess.start(KProcess::DontCare) )
warning(i18n("Error while creating child process!").ascii());
}
// Resizes KListView to occupy all visible space
kfind'KfindWindow::resizeEvent() (./kdeutils/kfind/kfwin.cpp:438)
void KfindWindow::resizeEvent(QResizeEvent *e)
{
KListView::resizeEvent(e);
resetColumns(FALSE);
clipper()->repaint();
}
kfind'KfindWindow::contentsMousePressEvent() (./kdeutils/kfind/kfwin.cpp:446)
void KfindWindow::contentsMousePressEvent(QMouseEvent *e)
{
KListView::contentsMousePressEvent( e );
KfFileLVI *item = (KfFileLVI *) itemAt(contentsToViewport(e->pos()));
if ( !item )
return;
if ( e->button() == LeftButton )
m_pressed = true;
}
kfind'KfindWindow::contentsMouseReleaseEvent() (./kdeutils/kfind/kfwin.cpp:457)
void KfindWindow::contentsMouseReleaseEvent( QMouseEvent * e )
{
m_pressed = false;
KListView::contentsMouseReleaseEvent( e );
}
// drag items from the list
kfind'KfindWindow::contentsMouseMoveEvent() (./kdeutils/kfind/kfwin.cpp:464)
void KfindWindow::contentsMouseMoveEvent(QMouseEvent *e)
{
KListView::contentsMouseMoveEvent(e);
if ( !m_pressed ) // Just moving, not a drag
return;
KfFileLVI *item = (KfFileLVI *) itemAt(contentsToViewport(e->pos()));
if ( !item )
return;
QStringList uris;
QList<KfFileLVI> *selected = selectedItems();
// create a list of URIs from selection
for ( uint i = 0; i < selected->count(); i++ ) {
if ( (item = selected->at( i )) ) {
uris.append( item->fileInfo->absFilePath() );;
}
}
if ( uris.count() > 0 ) {
// Do not handle and more mouse move or mouse release events
m_pressed = false;
QUriDrag *ud = new QUriDrag( this, "kfind uridrag" );
ud->setFilenames( uris );
const QPixmap *pix = currentItem()->pixmap(0);
if ( pix && !pix->isNull() )
ud->setPixmap( *pix );
// true => move operation, we need to update the list
if ( ud->drag() && false ) { // FIXME, why does drag() always return true??
// Seems it's not yet implemented in Qt (David)
for ( uint i = 0; i < selected->count(); i++ ) {
if ( (item = selected->at( i )) ) {
removeItem( item );
}
}
}
}
}
kfind'KfindWindow::resetColumns() (./kdeutils/kfind/kfwin.cpp:508)
void KfindWindow::resetColumns(bool init)
{
if(init) {
QFontMetrics fm = fontMetrics();
setColumnWidth(2, QMAX(fm.width(columnText(2)), fm.width("0000000")) + 15);
QString sampleDate =
KGlobal::locale()->formatDate(QDate::currentDate(), true) +
" " +
KGlobal::locale()->formatTime(QTime::currentTime(), true);
setColumnWidth(3, QMAX(fm.width(columnText(3)), fm.width(sampleDate)) + 15);
setColumnWidth(4, QMAX(fm.width(columnText(4)), fm.width(i18n(perm[RO]))) + 15);
}
int free_space = visibleWidth() -
columnWidth(2) - columnWidth(3) - columnWidth(4);
int name_w = QMIN((int)(free_space*0.5), 150);
int dir_w = free_space - name_w;
setColumnWidth(0, name_w);
setColumnWidth(1, dir_w);
}
// returns a pointer to a list of all selected ListViewItems
kfind'KfindWindow::selectedItems() (./kdeutils/kfind/kfwin.cpp:533)
QList<KfFileLVI> * KfindWindow::selectedItems()
{
mySelectedItems.clear();
if ( haveSelection ) {
QListViewItem *item = firstChild();
while ( item != 0L ) {
if ( isSelected( item ) )
mySelectedItems.append( (KfFileLVI *) item );
item = item->nextSibling();
}
}
return &mySelectedItems;
}