mirror of
https://invent.kde.org/system/dolphin
synced 2024-11-05 18:47:12 +00:00
QListView widget is introduced.
svn path=/trunk/kdebase/kfind/; revision=24840
This commit is contained in:
parent
88ce8f4213
commit
7f85319d8a
4 changed files with 425 additions and 190 deletions
|
@ -75,8 +75,6 @@ Kfind::Kfind( QWidget *parent, const char *name, const char *searchPath )
|
|||
win,SLOT(selectAll()));
|
||||
connect(parentWidget(),SIGNAL(unselectAll()),
|
||||
win,SLOT(unselectAll()));
|
||||
connect(parentWidget(),SIGNAL(invertSelection()),
|
||||
win,SLOT(invertSelection()));
|
||||
|
||||
connect(&findProcess, SIGNAL(processExited(KProcess *)),
|
||||
this, SLOT(stopSearch()));
|
||||
|
|
|
@ -145,15 +145,12 @@ void KfindTop::menuInit()
|
|||
this,SIGNAL(selectAll()) );
|
||||
editUnselectAll = _editMenu->insertItem(i18n("Unse&lect All"),
|
||||
this,SIGNAL(unselectAll()) );
|
||||
editInvertSelection = _editMenu->insertItem(i18n("&Invert Selection"),
|
||||
this,SIGNAL(invertSelection()) );
|
||||
|
||||
_editMenu->setItemEnabled( undo , FALSE );
|
||||
_editMenu->setItemEnabled( cut , FALSE );
|
||||
_editMenu->setItemEnabled( editCopy , FALSE );
|
||||
_editMenu->setItemEnabled( editSelectAll, FALSE );
|
||||
_editMenu->setItemEnabled( editUnselectAll, FALSE );
|
||||
_editMenu->setItemEnabled( editInvertSelection, FALSE );
|
||||
|
||||
_optionMenu->insertItem(i18n("&Preferences ..."),
|
||||
this,SLOT(prefs()));
|
||||
|
@ -240,7 +237,6 @@ void KfindTop::enableSaveResults(bool enable)
|
|||
_fileMenu->setItemEnabled(saveSearchM, enable);
|
||||
_editMenu->setItemEnabled(editSelectAll, enable);
|
||||
_editMenu->setItemEnabled(editUnselectAll, enable);
|
||||
_editMenu->setItemEnabled(editInvertSelection, enable);
|
||||
}
|
||||
|
||||
void KfindTop::enableMenuItems(bool enable)
|
||||
|
|
579
kfind/kfwin.cpp
579
kfind/kfwin.cpp
|
@ -15,78 +15,150 @@
|
|||
#include <time.h>
|
||||
|
||||
#include <qapplication.h>
|
||||
#include <qwidget.h>
|
||||
#include <qframe.h>
|
||||
#include <qlabel.h>
|
||||
#include <qlistbox.h>
|
||||
#include <qstrlist.h>
|
||||
#include <qfileinfo.h>
|
||||
#include <qpushbutton.h>
|
||||
#include <qlineedit.h>
|
||||
#include <qgroupbox.h>
|
||||
#include <qcheckbox.h>
|
||||
#include <qfiledefs.h>
|
||||
#include <qfiledialog.h>
|
||||
#include <qlist.h>
|
||||
#include <qfileinfo.h>
|
||||
#include <qmessagebox.h>
|
||||
#include <qdir.h>
|
||||
#include <qclipboard.h>
|
||||
#include <qevent.h>
|
||||
#include <kfiledialog.h>
|
||||
|
||||
#include <kfiledialog.h>
|
||||
#include <klocale.h>
|
||||
#include <kapp.h>
|
||||
#include <kdebug.h>
|
||||
#include <krun.h>
|
||||
#include <kprocess.h>
|
||||
#include <kpropsdlg.h>
|
||||
#include <krun.h>
|
||||
|
||||
//#include <knewmenu.h>
|
||||
//#include <kpopupmenu.h>
|
||||
|
||||
#include "kfwin.h"
|
||||
#include "kfarch.h"
|
||||
#include "kfsave.h"
|
||||
|
||||
#include <klocale.h>
|
||||
#include <kapp.h>
|
||||
|
||||
#include <qkeycode.h>
|
||||
|
||||
extern KfSaveOptions *saving;
|
||||
extern QList<KfArchiver> *archivers;
|
||||
|
||||
// see comment near use of this variable
|
||||
static const char * egcsWorkaround = "%x %X";
|
||||
|
||||
// Permission strings
|
||||
static QString perm[4] = {
|
||||
QString(i18n( "Read-write" )),
|
||||
QString(i18n( "Read-only" )),
|
||||
QString(i18n( "Write-only" )),
|
||||
QString(i18n( "Inaccessible" )) };
|
||||
#define RW 0
|
||||
#define RO 1
|
||||
#define WO 2
|
||||
#define NA 3
|
||||
|
||||
KfFileLVI::KfFileLVI(QListView* lv, QString file)
|
||||
: QListViewItem(lv)
|
||||
{
|
||||
fileInfo = new QFileInfo(file);
|
||||
|
||||
QString size = QString("%1").arg(fileInfo->size());
|
||||
|
||||
// This code is copyed from QT qfiledialog.cpp
|
||||
QDateTime epoch;
|
||||
epoch.setTime_t( 0 );
|
||||
char date[256];
|
||||
time_t t1 = epoch.secsTo( fileInfo->lastModified() );
|
||||
struct tm * t2 = ::localtime( &t1 );
|
||||
// use a static const char here, so that egcs will not see
|
||||
// the formatting string and give an incorrect warning.
|
||||
if ( t2 && strftime( date, 255, egcsWorkaround, t2 ) <= 0 )
|
||||
strcpy(date, "????");
|
||||
//
|
||||
|
||||
int perm_index;
|
||||
if(fileInfo->isReadable())
|
||||
perm_index = fileInfo->isWritable() ? RW : RO;
|
||||
else
|
||||
perm_index = fileInfo->isWritable() ? WO : NA;
|
||||
|
||||
// Fill the item with data
|
||||
setText(0, fileInfo->fileName());
|
||||
setText(1, fileInfo->dir().path());
|
||||
setText(2, size);
|
||||
setText(3, date);
|
||||
setText(4, perm[perm_index]);
|
||||
}
|
||||
|
||||
KfFileLVI::~KfFileLVI() {
|
||||
delete fileInfo;
|
||||
}
|
||||
|
||||
QString KfFileLVI::key(int column, bool) const
|
||||
{
|
||||
// Returns time in secs from 1/1/1980. Used for sorting
|
||||
if(column == 3) {
|
||||
QDateTime epoch( QDate( 1980, 1, 1 ) );
|
||||
return QString().sprintf("%08d", epoch.secsTo(fileInfo->lastModified()));
|
||||
}
|
||||
|
||||
return text(column);
|
||||
}
|
||||
|
||||
KfindWindow::KfindWindow( QWidget *parent, const char *name )
|
||||
: QListBox( parent, name )
|
||||
{
|
||||
// topLevelWidget()->installEventFilter(lbx);
|
||||
setMultiSelection(FALSE);
|
||||
: QListView( parent, name )
|
||||
{
|
||||
// topLevelWidget()->installEventFilter(lbx);
|
||||
setMultiSelection(TRUE);
|
||||
|
||||
connect(this , SIGNAL(highlighted(int)),
|
||||
this, SLOT(highlighted()) );
|
||||
connect(this, SIGNAL(selected(int)),
|
||||
this, SLOT( openBinding()) );
|
||||
};
|
||||
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);
|
||||
|
||||
KfindWindow::~KfindWindow()
|
||||
{}
|
||||
// Disable autoresize for all columns
|
||||
// Resizing is done by resetColumns() function
|
||||
for(int i=0; i<5; i++)
|
||||
setColumnWidthMode(i, Manual);
|
||||
|
||||
/* TODO
|
||||
connect(this, SIGNAL(rightButtonPressed(QListViewItem *, const QPoint &, int)),
|
||||
this, SLOT(rightButtonPressed(QListViewItem *, const QPoint &, int)));
|
||||
*/
|
||||
|
||||
connect(this, SIGNAL(doubleClicked(QListViewItem *)),
|
||||
this, SLOT(openBinding()));
|
||||
}
|
||||
|
||||
void KfindWindow::beginSearch() {
|
||||
void KfindWindow::beginSearch()
|
||||
{
|
||||
haveSelection = false;
|
||||
|
||||
clear();
|
||||
|
||||
|
||||
resetColumns();
|
||||
|
||||
startTimer(100);
|
||||
|
||||
QString str = i18n("%1 file(s) found").arg(0);
|
||||
emit statusChanged(str.ascii());
|
||||
}
|
||||
|
||||
void KfindWindow::endSearch() {
|
||||
void KfindWindow::endSearch()
|
||||
{
|
||||
killTimers();
|
||||
|
||||
QString str = i18n("%1 file(s) found").arg(count());
|
||||
QString str = i18n("%1 file(s) found").arg(childCount());
|
||||
emit statusChanged(str.ascii());
|
||||
}
|
||||
|
||||
void KfindWindow::timerEvent(QTimerEvent *) {
|
||||
if(count() > 0) {
|
||||
QString str = i18n("%1 file(s) found").arg(count());
|
||||
void KfindWindow::timerEvent(QTimerEvent *)
|
||||
{
|
||||
if(childCount() > 0) {
|
||||
QString str = i18n("%1 file(s) found").arg(childCount());
|
||||
emit statusChanged(str.ascii());
|
||||
}
|
||||
}
|
||||
|
@ -96,9 +168,11 @@ void KfindWindow::timerEvent(QTimerEvent *) {
|
|||
#endif
|
||||
|
||||
void KfindWindow::updateResults(const char *file )
|
||||
{
|
||||
{
|
||||
kdebug(KDEBUG_INFO, 1902, "UPDATERESULTs\n");
|
||||
|
||||
|
||||
printf("UPDATE\n");
|
||||
|
||||
char str[PATH_MAX];
|
||||
int count;
|
||||
|
||||
|
@ -132,8 +206,8 @@ void KfindWindow::updateResults(const char *file )
|
|||
if (!(filename->exists()))
|
||||
strl->removeLast();
|
||||
|
||||
insertStrList(strl,-1);
|
||||
QString statusmsg = i18n("%1 file(s) found").arg(count);
|
||||
// insertStrList(strl,-1);
|
||||
QString statusmsg = i18n("%1 file(s) found").arg(childCount());
|
||||
emit statusChanged(statusmsg.ascii());
|
||||
|
||||
unlink( file );
|
||||
|
@ -142,15 +216,23 @@ void KfindWindow::updateResults(const char *file )
|
|||
delete strl;
|
||||
};
|
||||
|
||||
void KfindWindow::insertItem(QString file) {
|
||||
new KfFileLVI(this, file);
|
||||
}
|
||||
|
||||
// copy to clipboard aka X11 selection
|
||||
void KfindWindow::copySelection() {
|
||||
void KfindWindow::copySelection()
|
||||
{
|
||||
QString s;
|
||||
for(int i = 0; i < (int)count(); i++)
|
||||
if(isSelected(i)) {
|
||||
s.append(text(i));
|
||||
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();
|
||||
|
@ -159,105 +241,140 @@ void KfindWindow::copySelection() {
|
|||
}
|
||||
|
||||
void KfindWindow::changeItem(const char */*itemName*/)
|
||||
{
|
||||
debug("CXHANGE ITEM CALLED\n");
|
||||
// changeItem(itemName,currentItem());
|
||||
};
|
||||
|
||||
void KfindWindow::selectAll() {
|
||||
setAutoUpdate(FALSE);
|
||||
for(int i = 0; i < (int)count(); i++)
|
||||
setSelected(i, TRUE);
|
||||
setAutoUpdate(TRUE);
|
||||
repaint();
|
||||
{
|
||||
debug("CXHANGE ITEM CALLED\n");
|
||||
// changeItem(itemName,currentItem());
|
||||
}
|
||||
|
||||
void KfindWindow::invertSelection() {
|
||||
setAutoUpdate(FALSE);
|
||||
for(int i = 0; i < (int)count(); i++)
|
||||
setSelected(i, !isSelected(i));
|
||||
setAutoUpdate(TRUE);
|
||||
repaint();
|
||||
void KfindWindow::selectAll()
|
||||
{
|
||||
QListViewItem *item = firstChild();
|
||||
while(item != NULL) {
|
||||
setSelected(item, TRUE);
|
||||
item = item->nextSibling();
|
||||
}
|
||||
}
|
||||
|
||||
void KfindWindow::unselectAll() {
|
||||
setAutoUpdate(FALSE);
|
||||
for(int i = 0; i < (int)count(); i++)
|
||||
setSelected(i, FALSE);
|
||||
setAutoUpdate(TRUE);
|
||||
repaint();
|
||||
void KfindWindow::unselectAll()
|
||||
{
|
||||
QListViewItem *item = firstChild();
|
||||
while(item != NULL) {
|
||||
setSelected(item, FALSE);
|
||||
item = item->nextSibling();
|
||||
}
|
||||
}
|
||||
|
||||
void KfindWindow::saveResults()
|
||||
{
|
||||
uint items,item;
|
||||
FILE *results;
|
||||
QString filename;
|
||||
|
||||
if ( saving->getSaveStandard() )
|
||||
{
|
||||
filename = getenv("HOME");
|
||||
filename += "/.kfind-results.html";
|
||||
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)
|
||||
QMessageBox::warning(parentWidget(),i18n("Error"),
|
||||
i18n("It wasn't possible to save results!"),
|
||||
i18n("OK"));
|
||||
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();
|
||||
}
|
||||
else
|
||||
filename = saving->getSaveFile();
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
results=fopen(filename.ascii(),"w");
|
||||
fclose(results);
|
||||
QMessageBox::information(parentWidget(),
|
||||
i18n("Information"),
|
||||
i18n("Results were saved to file\n")+
|
||||
filename,
|
||||
i18n("OK"));
|
||||
}
|
||||
}
|
||||
|
||||
items=count();
|
||||
if (results==0L)
|
||||
QMessageBox::warning(parentWidget(),i18n("Error"),
|
||||
i18n("It wasn't possible to save results!"),
|
||||
i18n("OK"));
|
||||
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=0;
|
||||
while(item!=items)
|
||||
{
|
||||
fprintf(results,"<DT><A HREF=\"file:%s\">file:%s</A>\n",
|
||||
text(item).ascii(),text(item).ascii());
|
||||
item++;
|
||||
};
|
||||
fprintf(results,"</DL><P></BODY></HTML>\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
item=0;
|
||||
while(item!=items)
|
||||
{
|
||||
fprintf(results,"%s\n", text(item).ascii());
|
||||
item++;
|
||||
};
|
||||
|
||||
};
|
||||
fclose(results);
|
||||
QMessageBox::information(parentWidget(),
|
||||
i18n("Information"),
|
||||
i18n("Results were saved to file\n")+
|
||||
filename,
|
||||
i18n("OK"));
|
||||
};
|
||||
};
|
||||
// This function is called when selection is changed (both selected/deselected)
|
||||
// It notifies the parent about selection status and enables/disables menubar
|
||||
void KfindWindow::selectionChanged(bool selectionMade)
|
||||
{
|
||||
if(selectionMade) {
|
||||
if(!haveSelection) {
|
||||
haveSelection = true;
|
||||
emit resultSelected(true);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// If user made deselection we want to check if any items left selected.
|
||||
// If no items are selected disable menubar.
|
||||
QListViewItem *item = firstChild();
|
||||
while(item != NULL) {
|
||||
if(isSelected(item))
|
||||
break;
|
||||
item = item->nextSibling();
|
||||
}
|
||||
|
||||
// Item equal to NULL means we do not have any selection
|
||||
if(item == NULL) {
|
||||
haveSelection = false;
|
||||
emit resultSelected(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void KfindWindow::highlighted()
|
||||
{
|
||||
emit resultSelected(true);
|
||||
};
|
||||
// Currently disabled
|
||||
void KfindWindow::rightButtonPressed(QListViewItem */*ci*/,
|
||||
const QPoint &/*pos*/, int) {
|
||||
/*
|
||||
QStringList urls;
|
||||
QListViewItem *item = firstChild();
|
||||
while(item != NULL) {
|
||||
if(isSelected(item)) {
|
||||
urls.append("file:" + ((KfFileLVI*)item)->fileInfo->absFilePath());
|
||||
}
|
||||
item = item->nextSibling();
|
||||
}
|
||||
KonqPopupMenu popup(urls,
|
||||
0,
|
||||
"file:" + ((KfFileLVI*)ci)->fileInfo->absFilePath(),
|
||||
FALSE,
|
||||
FALSE,
|
||||
FALSE);
|
||||
popup.exec(pos);
|
||||
*/
|
||||
}
|
||||
|
||||
// Currently disables. Should work using KonqPopupMenu().
|
||||
void KfindWindow::deleteFiles()
|
||||
{
|
||||
QString tmp = i18n("Do you really want to delete file:\n%1")
|
||||
/* QString tmp = i18n("Do you really want to delete file:\n%1")
|
||||
.arg(text(currentItem()));
|
||||
if (!QMessageBox::information(parentWidget(),
|
||||
i18n("Delete File - Find Files"),
|
||||
|
@ -323,44 +440,41 @@ void KfindWindow::deleteFiles()
|
|||
|
||||
delete file;
|
||||
};
|
||||
*/
|
||||
};
|
||||
|
||||
void KfindWindow::fileProperties()
|
||||
{
|
||||
QString tmp= "file:";
|
||||
|
||||
QFileInfo *fileInfo = new QFileInfo(text(currentItem()));
|
||||
if (fileInfo->isDir())
|
||||
tmp.append(fileInfo->filePath());
|
||||
else
|
||||
tmp.append(text(currentItem()));
|
||||
(void) new PropertiesDialog(tmp);
|
||||
};
|
||||
{
|
||||
QString tmp= "file:";
|
||||
QFileInfo *fileInfo = ((KfFileLVI *)currentItem())->fileInfo;
|
||||
if (fileInfo->isDir())
|
||||
tmp += fileInfo->filePath();
|
||||
else
|
||||
tmp += fileInfo->absFilePath();
|
||||
(void) new PropertiesDialog(tmp);
|
||||
}
|
||||
|
||||
void KfindWindow::openFolder()
|
||||
{
|
||||
QString tmp;
|
||||
{
|
||||
QString tmp= "file:";
|
||||
QFileInfo *fileInfo = ((KfFileLVI *)currentItem())->fileInfo;
|
||||
if (fileInfo->isDir())
|
||||
tmp += fileInfo->filePath();
|
||||
else
|
||||
tmp += fileInfo->dirPath();
|
||||
(void) new KRun(tmp);
|
||||
}
|
||||
|
||||
QFileInfo *fileInfo = new QFileInfo(text(currentItem()));
|
||||
if (fileInfo->isDir())
|
||||
tmp = "file:" + fileInfo->filePath();
|
||||
else
|
||||
tmp = "file:" + fileInfo->dirPath();
|
||||
|
||||
(void) new KRun(tmp);
|
||||
};
|
||||
|
||||
void KfindWindow::openBinding()
|
||||
{
|
||||
QString tmp= "file:";
|
||||
|
||||
QFileInfo *fileInfo = new QFileInfo(text(currentItem()));
|
||||
if (fileInfo->isDir())
|
||||
tmp.append(fileInfo->filePath());
|
||||
else
|
||||
tmp.append(text(currentItem()));
|
||||
(void) new KRun( tmp );
|
||||
};
|
||||
void KfindWindow::openBinding()
|
||||
{
|
||||
QString tmp= "file:";
|
||||
QFileInfo *fileInfo = ((KfFileLVI*)currentItem())->fileInfo;
|
||||
if (fileInfo->isDir())
|
||||
tmp += fileInfo->filePath();
|
||||
else
|
||||
tmp += fileInfo->absFilePath();
|
||||
(void) new KRun( tmp );
|
||||
}
|
||||
|
||||
void KfindWindow::addToArchive()
|
||||
{
|
||||
|
@ -384,12 +498,11 @@ void KfindWindow::addToArchive()
|
|||
execAddToArchive(arch,filename);
|
||||
else
|
||||
QMessageBox::warning(parentWidget(),i18n("Error"),
|
||||
i18n("Couldn't recognize archive type!"),
|
||||
i18n("OK"));
|
||||
i18n("Couldn't recognize archive type!"),
|
||||
i18n("OK"));
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
void KfindWindow::execAddToArchive(KfArchiver *arch,QString archname)
|
||||
void KfindWindow::execAddToArchive(KfArchiver *arch, QString archname)
|
||||
{
|
||||
QFileInfo archiv(archname);
|
||||
QString buffer,pom;
|
||||
|
@ -416,33 +529,143 @@ void KfindWindow::execAddToArchive(KfArchiver *arch,QString archname)
|
|||
{
|
||||
pos = buffer.find(" ");
|
||||
pom = buffer.left(pos);
|
||||
|
||||
if ( pom=="%d" )
|
||||
{
|
||||
QFileInfo *fileInfo = new QFileInfo(text(currentItem()));
|
||||
QFileInfo *fileInfo = ((KfFileLVI*)currentItem())->fileInfo;
|
||||
pom = fileInfo->dirPath(TRUE)+'/';
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
if ( pom=="%a" )
|
||||
pom = archname;
|
||||
|
||||
if ( pom=="%f" )
|
||||
pom = text(currentItem());
|
||||
|
||||
pom = ((KfFileLVI*)currentItem())->fileInfo->absFilePath();;
|
||||
|
||||
if ( pom=="%n" )
|
||||
{
|
||||
QFileInfo *fileInfo = new QFileInfo(text(currentItem()));
|
||||
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 QListView to ocuppy all space
|
||||
void KfindWindow::resizeEvent(QResizeEvent *e) {
|
||||
resetColumns();
|
||||
QListView::resizeEvent(e);
|
||||
}
|
||||
|
||||
// The following to functions are an attemp to implement MS-like selection
|
||||
// (Control/Shift style). Not very elegant.
|
||||
|
||||
void KfindWindow::contentsMousePressEvent(QMouseEvent *e) {
|
||||
|
||||
QListViewItem *item = itemAt(contentsToViewport(e->pos()));
|
||||
if(item == NULL) { // Just in case. Should not happen
|
||||
QListView::contentsMousePressEvent(e);
|
||||
return;
|
||||
}
|
||||
|
||||
// We want to execute QListView::contentsMousePressEvent(e), but
|
||||
// we do not want it to change selection and current item.
|
||||
// To do it we store current item and make the item we click on unselectable.
|
||||
// We restore all this after the contentsMousePressEvent() call
|
||||
QListViewItem *anchor;
|
||||
if(e->state() & ShiftButton)
|
||||
anchor = currentItem();
|
||||
item->setSelectable(FALSE);
|
||||
|
||||
QListView::contentsMousePressEvent(e);
|
||||
|
||||
item->setSelectable(TRUE);
|
||||
if(e->state() & ShiftButton)
|
||||
setCurrentItem(anchor);
|
||||
|
||||
// No analize what we got and make our selections
|
||||
|
||||
// No modifiers
|
||||
if(!(e->state() & ControlButton) &&
|
||||
!(e->state() & ShiftButton)) {
|
||||
clearSelection();
|
||||
setSelected(item, TRUE);
|
||||
selectionChanged(TRUE);
|
||||
return;
|
||||
}
|
||||
|
||||
// Control
|
||||
if(e->state() & ControlButton) {
|
||||
setSelected(item, !isSelected(item));
|
||||
selectionChanged(isSelected(item));
|
||||
return;
|
||||
}
|
||||
|
||||
// Shift
|
||||
if(e->state() & ShiftButton) {
|
||||
bool down = itemPos(currentItem()) < itemPos(item);
|
||||
|
||||
// Selects area from the current item to our item
|
||||
QListViewItem *i = currentItem();
|
||||
if(down) {
|
||||
while(i != item) {
|
||||
setSelected(i, TRUE);
|
||||
i = i->itemBelow();
|
||||
}
|
||||
}
|
||||
else {
|
||||
while(i != item) {
|
||||
setSelected(i, TRUE);
|
||||
i = i->itemAbove();
|
||||
}
|
||||
}
|
||||
setSelected(item, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
void KfindWindow::contentsMouseReleaseEvent(QMouseEvent *e) {
|
||||
|
||||
QListViewItem *item = itemAt(contentsToViewport(e->pos()));
|
||||
if(item == NULL) { // Just in case. Should not happen
|
||||
QListView::contentsMouseReleaseEvent(e);
|
||||
return;
|
||||
}
|
||||
|
||||
// See comment for the contentsMousePressEvent() function.
|
||||
// We just want to disable any selection/current item changes.
|
||||
QListViewItem *anchor;
|
||||
if(e->state() & ShiftButton)
|
||||
anchor = currentItem();
|
||||
item->setSelectable(FALSE);
|
||||
|
||||
QListView::contentsMouseReleaseEvent(e);
|
||||
|
||||
item->setSelectable(TRUE);
|
||||
if(e->state() & ShiftButton)
|
||||
setCurrentItem(anchor);
|
||||
}
|
||||
|
||||
void KfindWindow::resetColumns() {
|
||||
|
||||
|
||||
QFontMetrics fm = fontMetrics();
|
||||
int perm_w = fm.width(perm[RO]) + 15;
|
||||
int size_w = fm.width("0000000") + 15;
|
||||
int mod_w = fm.width("00/00/00 00:00:00") + 15;
|
||||
int free_space = width() - perm_w - size_w - mod_w;
|
||||
int name_w = (int)(free_space*0.3); // 30%
|
||||
int dir_w = free_space - name_w; // 70%
|
||||
|
||||
setColumnWidth(0, name_w);
|
||||
setColumnWidth(1, dir_w);
|
||||
setColumnWidth(2, size_w);
|
||||
setColumnWidth(3, mod_w);
|
||||
setColumnWidth(4, perm_w);
|
||||
}
|
||||
|
|
|
@ -7,16 +7,27 @@
|
|||
#ifndef KFWIN_H
|
||||
#define KFWIN_H
|
||||
|
||||
#include <qlistbox.h>
|
||||
#include <qlistview.h>
|
||||
|
||||
class KfArchiver;
|
||||
class QFileInfo;
|
||||
|
||||
class KfindWindow: public QListBox
|
||||
class KfFileLVI : public QListViewItem
|
||||
{
|
||||
public:
|
||||
KfFileLVI(QListView* lv, QString file);
|
||||
~KfFileLVI();
|
||||
|
||||
QString key(int column, bool) const;
|
||||
|
||||
QFileInfo *fileInfo;
|
||||
};
|
||||
|
||||
class KfindWindow: public QListView
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
KfindWindow( QWidget * parent = 0, const char * name = 0 );
|
||||
virtual ~KfindWindow();
|
||||
|
||||
virtual void timerEvent(QTimerEvent *);
|
||||
|
||||
|
@ -27,13 +38,14 @@ public:
|
|||
|
||||
void copySelection();
|
||||
|
||||
void insertItem(QString str);
|
||||
|
||||
public slots:
|
||||
void selectAll();
|
||||
void unselectAll();
|
||||
void invertSelection();
|
||||
|
||||
private slots:
|
||||
void highlighted();
|
||||
void rightButtonPressed(QListViewItem *, const QPoint &, int);
|
||||
void deleteFiles();
|
||||
void fileProperties();
|
||||
void openFolder();
|
||||
|
@ -43,13 +55,19 @@ private slots:
|
|||
void openBinding();
|
||||
|
||||
protected:
|
||||
void resizeEvent(QResizeEvent *e);
|
||||
void contentsMouseReleaseEvent(QMouseEvent *e);
|
||||
void contentsMousePressEvent(QMouseEvent *e);
|
||||
|
||||
signals:
|
||||
void resultSelected(bool);
|
||||
void statusChanged(const char *);
|
||||
|
||||
private:
|
||||
void execAddToArchive(KfArchiver *arch,QString filename);
|
||||
bool haveSelection;
|
||||
void execAddToArchive(KfArchiver *arch, QString filename);
|
||||
void resetColumns();
|
||||
void selectionChanged(bool selectionMade);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue