You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ksystemlog/ksystemlog/src/fileList.cpp

278 lines
8.6 KiB

/***************************************************************************
* Copyright (C) 2005 by Nicolas Ternisien *
* nicolas.ternisien@gmail.com *
* *
* 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 "fileList.h"
#include <tqlayout.h>
#include <tqvgroupbox.h>
#include <tqbuttongroup.h>
#include <tqlabel.h>
#include <tqpushbutton.h>
#include <tqvbox.h>
#include <tqhbox.h>
#include <tqwhatsthis.h>
#include <tqtooltip.h>
// KDE includes
#include <tdelocale.h>
#include <tdeactioncollection.h>
#include <kbuttonbox.h>
#include <tdelistbox.h>
#include <tdefiledialog.h>
#include <kurl.h>
#include <tdemessagebox.h>
#include <kiconloader.h>
FileList::FileList(TQWidget *parent, TQString description) :
TQWidget(parent)
{
TQHBoxLayout *layout = new TQHBoxLayout(this);
layout->setAutoAdd(true);
TQVGroupBox* dirBox = new TQVGroupBox(i18n( "Files" ), this);
TQLabel *defaultPathLabel = new TQLabel(description, dirBox);
defaultPathLabel->setTextFormat(RichText);
TQHBox* center= new TQHBox(dirBox);
center->setSpacing(10);
fileList=new TDEListBox(center);
buttons=new TQVBox(center);
fileList->setSelectionMode(TQListBox::Extended);
TQToolTip::add(fileList, i18n("List of files used by this log type"));
TQWhatsThis::add(fileList, i18n("<qt>Here is a list of every files that will be read by KSystemLog to display the current log lines.</qt>"));
add=new TQPushButton(SmallIcon("document-open"), i18n("&Add File..."), buttons);
connect(add, TQ_SIGNAL(clicked()), this, TQ_SLOT(addItem()));
TQToolTip::add(add, i18n("Choose a new file"));
TQWhatsThis::add(add, i18n("Opens a dialog box to choose a new file to be added to the list."));
remove=new TQPushButton(SmallIconSet("edit_remove"), i18n("&Remove"), buttons);
connect(remove, TQ_SIGNAL(clicked()), this, TQ_SLOT(removeSelectedItem()));
TQToolTip::add(remove, i18n("Delete the current file(s)"));
TQWhatsThis::add(remove, i18n("Deletes the selected files of the list."));
up=new TQPushButton(SmallIconSet("go-up"), i18n("Move &Up"), buttons);
connect(up, TQ_SIGNAL(clicked()), this, TQ_SLOT(moveUpItem()));
TQToolTip::add(up, i18n("Move up the current file(s)"));
TQWhatsThis::add(up, i18n("<qt>Moves up the selected files in the list. This option allows the files to be read <b>in first</b> by KSystemLog.</qt>"));
down=new TQPushButton(SmallIconSet("go-down"), i18n("Move &Down"), buttons);
connect(down, TQ_SIGNAL(clicked()), this, TQ_SLOT(moveDownItem()));
TQToolTip::add(down, i18n("Move down the current file(s)"));
TQWhatsThis::add(down, i18n("<qt>Moves down the selected files in the list. This option allows the files to be read <b>at last</b> by KSystemLog.</qt>"));
removeAll=new TQPushButton(SmallIconSet("cancel"), i18n("Re&move All"), buttons);
connect(removeAll, TQ_SIGNAL(clicked()), this, TQ_SLOT(removeAllItem()));
TQToolTip::add(removeAll, i18n("Remove all files"));
TQWhatsThis::add(removeAll, i18n("<qt>Remove all files of the list, even if they are not selected.</qt>"));
fileListMenu=new TDEPopupMenu(this);
fileListMenu->insertTitle(i18n("File List"));
fileListMenu->insertItem(SmallIcon("document-open"), i18n("&Add File..."), this, TQ_SLOT(addItem()), 0, ADD_FILE_MENU_ID);
fileListMenu->insertItem(SmallIcon("edit_remove"), i18n("&Remove"), this, TQ_SLOT(removeSelectedItem()), 0, REMOVE_MENU_ID);
fileListMenu->insertSeparator();
fileListMenu->insertItem(SmallIcon("go-up"), i18n("Move &Up"), this, TQ_SLOT(moveUpItem()), 0, MOVE_UP_MENU_ID);
fileListMenu->insertItem(SmallIcon("go-down"), i18n("Move &Down"), this, TQ_SLOT(moveDownItem()), 0, MOVE_DOWN_MENU_ID);
fileListMenu->insertSeparator();
fileListMenu->insertItem(SmallIcon("cancel"), i18n("Re&move All"), this, TQ_SLOT(removeAllItem()), 0, REMOVE_ALL_MENU_ID);
connect(fileList, TQ_SIGNAL(selectionChanged()), this, TQ_SLOT(updateButtons()));
connect(this, TQ_SIGNAL(fileListChanged(int)), this, TQ_SLOT(updateButtons()));
connect(fileList, TQ_SIGNAL(rightButtonClicked(TQListBoxItem*, const TQPoint &)), this, TQ_SLOT(displayPopupMenu(TQListBoxItem*, const TQPoint&)));
updateButtons();
}
FileList::~FileList() {
}
TQString FileList::getText(int i) {
return(fileList->text(i));
}
void FileList::insertItem(TQString& item) {
fileList->insertItem(item);
}
int FileList::count() {
return(fileList->count());
}
void FileList::displayPopupMenu(TQListBoxItem*, const TQPoint& point) {
fileListMenu->popup(point);
}
void FileList::addItem() {
//Open a standard Filedialog
KURL::List urlList;
urlList=KFileDialog::getOpenURLs(DEFAULT_FOLDER, "*|" + i18n("All Files (*)") + "\n*.log|" + i18n("Log Files (*.log)"), this, i18n("Choose Log File"));
KURL url;
KURL::List::iterator it;
for(it=urlList.begin(); it!=urlList.end(); ++it) {
url=*it;
if (isValidFile(url)) {
fileList->insertItem(url.path());
}
}
emit fileListChanged(fileList->count());
}
bool FileList::isValidFile(KURL url) {
TQString message;
//If it is not valid
if (!url.isValid()) {
message=i18n("'%1' is not valid.").arg(url.path());
KMessageBox::error(this, message, i18n("File selection failed"), KMessageBox::Notify);
return(false);
}
//If it is not a local file
if (!url.isLocalFile()) {
message=i18n("'%1' is not a local file.").arg(url.path());
KMessageBox::error(this, message, i18n("File selection failed"), KMessageBox::Notify);
return(false);
}
//If it's a directory, it's not valid
if (TQDir(url.path()).exists()) {
message=i18n("'%1' is a folder.").arg(url.path());
KMessageBox::error(this, message, i18n("File selection failed"), KMessageBox::Notify);
return(false);
}
return(true);
}
void FileList::removeItem(int id) {
fileList->removeItem(id);
}
void FileList::removeSelectedItem() {
for (int i=0; i<(int) fileList->count(); i++) {
if (fileList->isSelected(i)==true) {
this->removeItem(i);
i--;
}
}
fileList->setSelected(fileList->count()-1, true);
fileList->setCurrentItem(fileList->count()-1);
emit fileListChanged(fileList->count());
}
void FileList::moveUpItem() {
int count=fileList->count();
TQListBoxItem* item;
int index;
for (int i=1; i<count; i++) {
if (fileList->isSelected(i)==true && fileList->isSelected(i-1)==false) {
item=fileList->item(i);
fileList->takeItem(item);
fileList->insertItem(item, i-1);
index=fileList->index(item);
fileList->setSelected(index, true);
fileList->setCurrentItem(index);
}
}
emit fileListChanged(count);
}
void FileList::moveDownItem() {
int count=fileList->count();
TQListBoxItem* item;
int index;
for (int i=count-2; i>=0; i--) {
if (fileList->isSelected(i)==true && fileList->isSelected(i+1)==false) {
item=fileList->item(i);
fileList->takeItem(item);
fileList->insertItem(item, i+1);
index=fileList->index(item);
fileList->setSelected(index, true);
fileList->setCurrentItem(index);
}
}
emit fileListChanged(count);
}
void FileList::removeAllItem() {
int count=fileList->count();
for (int i=0; i<count; i++) {
this->removeItem(0);
}
emit fileListChanged(0);
}
bool FileList::updateButtons() {
int count=fileList->count();
if (count==0)
removeAll->setEnabled(false);
else
removeAll->setEnabled(true);
bool selection=false;
for (int i=0; i<count; i++) {
if (fileList->isSelected(i)==true) {
selection=true;
}
}
//If nothing is selected, disabled special buttons
remove->setEnabled(selection);
up->setEnabled(selection);
down->setEnabled(selection);
return(selection);
}
#include "fileList.moc"