00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#include "kfilelist.h"
00021
00022
#include <qtoolbutton.h>
00023
#include <qlabel.h>
00024
#include <qlayout.h>
00025
#include <qtooltip.h>
00026
#include <qheader.h>
00027
#include <qwhatsthis.h>
00028
00029
#include <kio/netaccess.h>
00030
#include <kurldrag.h>
00031
#include <kfiledialog.h>
00032
#include <klocale.h>
00033
#include <kiconloader.h>
00034
#include <klistview.h>
00035
#include <krun.h>
00036
#include <kmimetype.h>
00037
00038 KFileList::KFileList(
QWidget *parent,
const char *name)
00039 :
QWidget(parent, name)
00040 {
00041
00042
QString whatsThisAddFileButton = i18n(
" <qt> <b>Add File button</b>"
00043
" <p>This button calls the <em>'File Open'</em> dialog to let you"
00044
" select a file for printing. Note, that "
00045
" <ul><li>you can select ASCII or International Text, PDF,"
00046
" PostScript, JPEG, TIFF, PNG, GIF and many other graphic"
00047
" formats."
00048
" <li>you can select various files from different paths"
00049
" and send them as one \"multi-file job\" to the printing"
00050
" system."
00051
" </ul>"
00052
" </qt>" );
00053
00054
QString whatsThisRemoveFileButton = i18n(
" <qt> <b>Remove File button</b>"
00055
" <p>This button removes the highlighted file from the"
00056
" list of to-be-printed files."
00057
" </qt>" );
00058
00059
QString whatsThisMoveFileUpButton = i18n(
" <qt> <b>Move File Up button</b>"
00060
" <p>This button moves the highlighted file up in the list"
00061
" of files to be printed.</p>"
00062
" <p>In effect, this changes the order"
00063
" of the files' printout.</p>"
00064
" </qt>" );
00065
00066
QString whatsThisMoveFileDownButton = i18n(
" <qt> <b>Move File Down button</b>"
00067
" <p>This button moves the highlighted file down in the list"
00068
" of files to be printed.</p>"
00069
" <p>In effect, this changes the order"
00070
" of the files' printout.</p>"
00071
" </qt>" );
00072
00073
QString whatsThisOpenFileButton = i18n(
" <qt> <b>File Open button</b>"
00074
" <p>This button tries to open the highlighted file, so"
00075
" you can view or edit it before you send it to the printing"
00076
" system.</p>"
00077
" <p>If you open"
00078
" files, KDEPrint will use the application matching the MIME type of"
00079
" the file.</p>"
00080
" </qt>" );
00081
00082
QString whatsThisFileSelectionListview = i18n(
" <qt> <b>File List view</b>"
00083
" <p>This list displays all the files you selected for printing."
00084
" You can see the file name(s), file path(s) and the file"
00085
" (MIME) type(s) as determined by KDEPrint. You may re-arrange the "
00086
" initial order of the list "
00087
" with the help of the arrow buttons on the right.</p>"
00088
" <p>The files will be printed as a single job,"
00089
" in the same order as displayed in the list.</p>"
00090
" <p><b>Note:</b> You can select multiple files. The files may be in multiple"
00091
" locations. The files may be of multiple MIME types. The buttons on the right"
00092
" side let you add more files, remove already selected files from the list, "
00093
" re-order the list (by moving files up or down), and open files. If you open"
00094
" files, KDEPrint will use the application matching the MIME type of"
00095
" the file.</p>"
00096
" </qt>" );
00097
00098 m_block =
false;
00099
00100 m_files =
new KListView(
this);
00101 m_files->addColumn(i18n(
"Name"));
00102 m_files->addColumn(i18n(
"Type"));
00103 m_files->addColumn(i18n(
"Path"));
00104 m_files->setAllColumnsShowFocus(
true);
00105 m_files->setSorting(-1);
00106 m_files->setAcceptDrops(
false);
00107 m_files->setSelectionMode(QListView::Extended);
00108 m_files->header()->setStretchEnabled(
true, 2);
00109 QWhatsThis::add(m_files, whatsThisFileSelectionListview);
00110 connect(m_files, SIGNAL(selectionChanged()), SLOT(slotSelectionChanged()));
00111
00112 m_add =
new QToolButton(
this);
00113 m_add->setIconSet(SmallIconSet(
"fileopen"));
00114 connect(m_add, SIGNAL(clicked()), SLOT(slotAddFile()));
00115 QToolTip::add(m_add, i18n(
"Add file"));
00116 QWhatsThis::add(m_add, whatsThisAddFileButton);
00117
00118 m_remove =
new QToolButton(
this);
00119 m_remove->setIconSet(SmallIconSet(
"remove"));
00120 connect(m_remove, SIGNAL(clicked()), SLOT(slotRemoveFile()));
00121 QToolTip::add(m_remove, i18n(
"Remove file"));
00122 QWhatsThis::add(m_remove, whatsThisRemoveFileButton);
00123 m_remove->setEnabled(
false);
00124
00125 m_open =
new QToolButton(
this);
00126 m_open->setIconSet(SmallIconSet(
"filefind"));
00127 connect(m_open, SIGNAL(clicked()), SLOT(slotOpenFile()));
00128 QToolTip::add(m_open, i18n(
"Open file"));
00129 QWhatsThis::add(m_open, whatsThisOpenFileButton);
00130 m_open->setEnabled(
false);
00131
00132 m_up =
new QToolButton(
this);
00133 m_up->setIconSet(SmallIconSet(
"up"));
00134 connect(m_up, SIGNAL(clicked()), SLOT(slotUp()));
00135 QToolTip::add(m_up, i18n(
"Move up"));
00136 QWhatsThis::add(m_up, whatsThisMoveFileUpButton);
00137 m_up->setEnabled(
false);
00138
00139 m_down =
new QToolButton(
this);
00140 m_down->setIconSet(SmallIconSet(
"down"));
00141 connect(m_down, SIGNAL(clicked()), SLOT(slotDown()));
00142 QToolTip::add(m_down, i18n(
"Move down"));
00143 QWhatsThis::add(m_down, whatsThisMoveFileDownButton);
00144 m_down->setEnabled(
false);
00145
00146 setAcceptDrops(
true);
00147
00148 QToolTip::add(m_files, i18n(
00149
"Drag file(s) here or use the button to open a file dialog. "
00150
"Leave empty for <b><STDIN></b>."));
00151
00152
QHBoxLayout *l0 =
new QHBoxLayout(
this, 0, KDialog::spacingHint());
00153
QVBoxLayout *l1 =
new QVBoxLayout(0, 0, 1);
00154 l0->addWidget(m_files);
00155 l0->addLayout(l1);
00156 l1->addWidget(m_add);
00157 l1->addWidget(m_remove);
00158 l1->addWidget(m_open);
00159 l1->addSpacing(10);
00160 l1->addWidget(m_up);
00161 l1->addWidget(m_down);
00162 l1->addStretch(1);
00163 }
00164
00165 KFileList::~KFileList()
00166 {
00167 }
00168
00169
void KFileList::dragEnterEvent(
QDragEnterEvent *e)
00170 {
00171 e->accept(KURLDrag::canDecode(e));
00172 }
00173
00174
void KFileList::dropEvent(
QDropEvent *e)
00175 {
00176 KURL::List files;
00177
if (KURLDrag::decode(e, files))
00178 {
00179 addFiles(files);
00180 }
00181 }
00182
00183
void KFileList::addFiles(
const KURL::List& files)
00184 {
00185
if (files.count() > 0)
00186 {
00187
00188
QListViewItem *item = m_files->firstChild();
00189
while (item && item->nextSibling())
00190 item = item->nextSibling();
00191
00192
00193
QString downloaded;
00194
for (KURL::List::ConstIterator it=files.begin(); it!=files.end(); ++it)
00195
if (KIO::NetAccess::download(*it, downloaded,
this))
00196 {
00197 KURL url;
00198 url.setPath(downloaded);
00199 KMimeType::Ptr mime = KMimeType::findByURL(url, 0,
true,
false);
00200 item =
new QListViewItem(m_files, item, url.fileName(), mime->comment(), downloaded);
00201 item->setPixmap(0, mime->pixmap(url, KIcon::Small));
00202 }
00203
00204 slotSelectionChanged();
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214 }
00215 }
00216
00217
void KFileList::setFileList(
const QStringList& files)
00218 {
00219 m_files->clear();
00220
QListViewItem *item = 0;
00221
for (QStringList::ConstIterator it=files.begin(); it!=files.end(); ++it)
00222 {
00223 KURL url;
00224 url.setPath(*it);
00225 KMimeType::Ptr mime = KMimeType::findByURL(url, 0,
true,
false);
00226 item =
new QListViewItem(m_files, item, url.fileName(), mime->comment(), *it);
00227 item->setPixmap(0, mime->pixmap(url, KIcon::Small));
00228 }
00229 slotSelectionChanged();
00230 }
00231
00232
QStringList KFileList::fileList()
const
00233
{
00234
QStringList l;
00235
QListViewItem *item = m_files->firstChild();
00236
while (item)
00237 {
00238 l << item->text(2);
00239 item = item->nextSibling();
00240 }
00241
return l;
00242 }
00243
00244
void KFileList::slotAddFile()
00245 {
00246 KURL fname = KFileDialog::getOpenURL(QString::null, QString::null,
this);
00247
if (!fname.isEmpty())
00248 addFiles(KURL::List(fname));
00249 }
00250
00251
void KFileList::slotRemoveFile()
00252 {
00253
QPtrList<QListViewItem> l;
00254 selection(l);
00255 l.setAutoDelete(
true);
00256 m_block =
true;
00257 l.clear();
00258 m_block =
false;
00259 slotSelectionChanged();
00260 }
00261
00262
void KFileList::slotOpenFile()
00263 {
00264
QListViewItem *item = m_files->currentItem();
00265
if (item)
00266 {
00267 KURL url( item->text( 2 ) );
00268
new KRun(url);
00269 }
00270 }
00271
00272
QSize KFileList::sizeHint()
const
00273
{
00274
return QSize(100, 100);
00275 }
00276
00277
void KFileList::selection(
QPtrList<QListViewItem>& l)
00278 {
00279 l.setAutoDelete(
false);
00280
QListViewItem *item = m_files->firstChild();
00281
while (item)
00282 {
00283
if (item->isSelected())
00284 l.append(item);
00285 item = item->nextSibling();
00286 }
00287 }
00288
00289
void KFileList::slotSelectionChanged()
00290 {
00291
if (m_block)
00292
return;
00293
00294
QPtrList<QListViewItem> l;
00295 selection(l);
00296 m_remove->setEnabled(l.count() > 0);
00297 m_open->setEnabled(l.count() == 1);
00298 m_up->setEnabled(l.count() == 1 && l.first()->itemAbove());
00299 m_down->setEnabled(l.count() == 1 && l.first()->itemBelow());
00300 }
00301
00302
void KFileList::slotUp()
00303 {
00304
QPtrList<QListViewItem> l;
00305 selection(l);
00306
if (l.count() == 1 && l.first()->itemAbove())
00307 {
00308
QListViewItem *item(l.first()), *clone;
00309 clone =
new QListViewItem(m_files, item->itemAbove()->itemAbove(), item->text(0), item->text(1), item->text(2));
00310 clone->setPixmap(0, *(item->pixmap(0)));
00311
delete item;
00312 m_files->setCurrentItem(clone);
00313 m_files->setSelected(clone,
true);
00314 }
00315 }
00316
00317
void KFileList::slotDown()
00318 {
00319
QPtrList<QListViewItem> l;
00320 selection(l);
00321
if (l.count() == 1 && l.first()->itemBelow())
00322 {
00323
QListViewItem *item(l.first()), *clone;
00324 clone =
new QListViewItem(m_files, item->itemBelow(), item->text(0), item->text(1), item->text(2));
00325 clone->setPixmap(0, *(item->pixmap(0)));
00326
delete item;
00327 m_files->setCurrentItem(clone);
00328 m_files->setSelected(clone,
true);
00329 }
00330 }
00331
00332
#include "kfilelist.moc"