qdirmultilineedit.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "qdirmultilineedit.h"
00021
00022 #include <qlayout.h>
00023 #include <qheader.h>
00024 #include <qpushbutton.h>
00025 #include <klistview.h>
00026 #include <klocale.h>
00027 #include <kfiledialog.h>
00028 #include <kiconloader.h>
00029
00030 QDirMultiLineEdit::QDirMultiLineEdit(QWidget *parent, const char *name)
00031 : QWidget(parent, name)
00032 {
00033 m_view = new KListView(this);
00034 m_view->header()->hide();
00035 m_view->addColumn("");
00036 m_view->setFullWidth(true);
00037 connect(m_view, SIGNAL(selectionChanged(QListViewItem*)), SLOT(slotSelected(QListViewItem*)));
00038
00039 m_add = new QPushButton(this);
00040 m_add->setPixmap(SmallIcon("folder_new"));
00041 connect(m_add, SIGNAL(clicked()), SLOT(slotAddClicked()));
00042 m_remove = new QPushButton(this);
00043 m_remove->setPixmap(SmallIcon("editdelete"));
00044 connect(m_remove, SIGNAL(clicked()), SLOT(slotRemoveClicked()));
00045 m_remove->setEnabled(false);
00046
00047 m_view->setFixedHeight(QMAX(m_view->fontMetrics().lineSpacing()*3+m_view->lineWidth()*2, m_add->sizeHint().height()*2));
00048
00049 QHBoxLayout *l0 = new QHBoxLayout(this, 0, 3);
00050 QVBoxLayout *l1 = new QVBoxLayout(0, 0, 0);
00051 l0->addWidget(m_view);
00052 l0->addLayout(l1);
00053 l1->addWidget(m_add);
00054 l1->addWidget(m_remove);
00055 l1->addStretch(1);
00056 }
00057
00058 QDirMultiLineEdit::~QDirMultiLineEdit()
00059 {
00060 }
00061
00062 void QDirMultiLineEdit::setURLs(const QStringList& urls)
00063 {
00064 m_view->clear();
00065 for (QStringList::ConstIterator it=urls.begin(); it!=urls.end(); ++it)
00066 addURL(*it);
00067 }
00068
00069 QStringList QDirMultiLineEdit::urls()
00070 {
00071 QListViewItem *item = m_view->firstChild();
00072 QStringList l;
00073 while (item)
00074 {
00075 l << item->text(0);
00076 item = item->nextSibling();
00077 }
00078 return l;
00079 }
00080
00081 void QDirMultiLineEdit::addURL(const QString& url)
00082 {
00083 QListViewItem *item = new QListViewItem(m_view, url);
00084 item->setRenameEnabled(0, true);
00085 }
00086
00087 void QDirMultiLineEdit::slotAddClicked()
00088 {
00089 QString dirname = KFileDialog::getExistingDirectory(QString::null, this);
00090 if (!dirname.isEmpty())
00091 addURL(dirname);
00092 }
00093
00094 void QDirMultiLineEdit::slotRemoveClicked()
00095 {
00096 QListViewItem *item = m_view->currentItem();
00097 if (item)
00098 {
00099 delete item;
00100 slotSelected(m_view->currentItem());
00101 }
00102 }
00103
00104 void QDirMultiLineEdit::slotSelected(QListViewItem *item)
00105 {
00106 m_remove->setEnabled((item != NULL));
00107 }
00108
00109 #include "qdirmultilineedit.moc"
|