summaryrefslogtreecommitdiffabout
path: root/microkde/kio/kfile/kurlrequester.cpp
Unidiff
Diffstat (limited to 'microkde/kio/kfile/kurlrequester.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/kio/kfile/kurlrequester.cpp406
1 files changed, 406 insertions, 0 deletions
diff --git a/microkde/kio/kfile/kurlrequester.cpp b/microkde/kio/kfile/kurlrequester.cpp
new file mode 100644
index 0000000..6d39308
--- a/dev/null
+++ b/microkde/kio/kfile/kurlrequester.cpp
@@ -0,0 +1,406 @@
1/* This file is part of the KDE libraries
2 Copyright (C) 1999,2000,2001 Carsten Pfeiffer <pfeiffer@kde.org>
3
4 library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License version 2, as published by the Free Software Foundation.
7
8 This library is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 Library General Public License for more details.
12
13 You should have received a copy of the GNU Library General Public License
14 along with this library; see the file COPYING.LIB. If not, write to
15 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16 Boston, MA 02111-1307, USA.
17*/
18
19
20#include <sys/stat.h>
21#ifdef _WIN32_
22
23#else
24#include <unistd.h>
25#endif
26#include <qstring.h>
27//US #include <qtooltip.h>
28
29#include <qpushbutton.h>
30
31//US #include <kaccel.h>
32//US #include <kcombobox.h>
33#include <kdebug.h>
34#include <kdialog.h>
35#include <kfiledialog.h>
36#include <kglobal.h>
37#include <kiconloader.h>
38#include <klineedit.h>
39#include <klocale.h>
40//US #include <kurlcompletion.h>
41//US #include <kurldrag.h>
42//US #include <kprotocolinfo.h>
43
44
45#include "kurlrequester.h"
46
47
48class KURLDragPushButton : public QPushButton
49{
50public:
51 KURLDragPushButton( QWidget *parent, const char *name=0 )
52 : QPushButton( parent, name ) {
53 //US setDragEnabled( true );
54 }
55 ~KURLDragPushButton() {}
56
57 void setURL( const KURL& url ) {
58 m_urls.clear();
59 m_urls.append( url );
60 }
61
62 /* not needed so far
63 void setURLs( const KURL::List& urls ) {
64 m_urls = urls;
65 }
66 const KURL::List& urls() const { return m_urls; }
67 */
68
69protected:
70/*US
71 virtual QDragObject *dragObject() {
72 if ( m_urls.isEmpty() )
73 return 0L;
74
75 QDragObject *drag = KURLDrag::newDrag( m_urls, this, "url drag" );
76 return drag;
77 }
78*/
79private:
80 KURL::List m_urls;
81
82};
83
84
85/*
86*************************************************************************
87*/
88
89class KURLRequester::KURLRequesterPrivate
90{
91public:
92 KURLRequesterPrivate() {
93 edit = 0L;
94 //UScombo = 0L;
95//US fileDialogMode = KFile::File | KFile::ExistingOnly | KFile::LocalOnly;
96 }
97
98 void setText( const QString& text ) {
99/*US
100 if ( combo )
101 {
102 if (combo->editable())
103 {
104 combo->setEditText( text );
105 }
106 else
107 {
108 combo->insertItem( text );
109 combo->setCurrentItem( combo->count()-1 );
110 }
111 }
112 else
113*/
114 {
115 edit->setText( text );
116 }
117 }
118
119 void connectSignals( QObject *receiver ) {
120 QObject *sender;
121 /*USif ( combo )
122 sender = combo;
123 else
124*/
125 sender = edit;
126
127 connect( sender, SIGNAL( textChanged( const QString& )),
128 receiver, SIGNAL( textChanged( const QString& )));
129 connect( sender, SIGNAL( returnPressed() ),
130 receiver, SIGNAL( returnPressed() ));
131 //USconnect( sender, SIGNAL( returnPressed( const QString& ) ),
132 //US receiver, SIGNAL( returnPressed( const QString& ) ));
133 }
134/*US
135 void setCompletionObject( KCompletion *comp ) {
136 if ( combo )
137 combo->setCompletionObject( comp );
138 else
139 edit->setCompletionObject( comp );
140 }
141 */
142 /**
143 * replaces ~user or $FOO, if necessary
144 */
145 QString url() {
146 QString txt = /*US combo ? combo->currentText() : */ edit->text();
147/*US KURLCompletion *comp;
148 if ( combo )
149 comp = dynamic_cast<KURLCompletion*>(combo->completionObject());
150 else
151 comp = dynamic_cast<KURLCompletion*>(edit->completionObject());
152
153 if ( comp )
154 return comp->replacedPath( txt );
155 else
156*/
157 return txt;
158 }
159
160 KLineEdit *edit;
161//US KComboBox *combo;
162 int fileDialogMode;
163 QString fileDialogFilter;
164};
165
166
167/*US
168KURLRequester::KURLRequester( QWidget *editWidget, QWidget *parent,
169 const char *name )
170 : QHBox( parent, name )
171{
172 d = new KURLRequesterPrivate;
173
174 // must have this as parent
175 editWidget->reparent( this, 0, QPoint(0,0) );
176//US d->edit = dynamic_cast<KLineEdit*>( editWidget );
177 d->edit = (KLineEdit*)( editWidget );
178//US d->combo = dynamic_cast<KComboBox*>( editWidget );
179
180 init();
181}
182*/
183
184KURLRequester::KURLRequester( QWidget *parent, const char *name )
185 : QHBox( parent, name )
186{
187 d = new KURLRequesterPrivate;
188 init();
189}
190
191
192KURLRequester::KURLRequester( const QString& url, QWidget *parent,
193 const char *name )
194 : QHBox( parent, name )
195{
196 d = new KURLRequesterPrivate;
197 init();
198 setURL( url );
199}
200
201
202KURLRequester::~KURLRequester()
203{
204//US delete myCompletion;
205 delete myFileDialog;
206 delete d;
207}
208
209
210void KURLRequester::init()
211{
212 myFileDialog = 0L;
213 myShowLocalProt = false;
214
215 if (/*US !d->combo && */ !d->edit )
216 d->edit = new KLineEdit( this, "KURLRequester::KLineEdit" );
217
218 myButton = new KURLDragPushButton( this, "kfile button");
219 QIconSet iconSet = SmallIconSet("fileopen");
220 QPixmap pixMap = iconSet.pixmap( QIconSet::Small, QIconSet::Normal );
221 myButton->setIconSet( iconSet );
222 myButton->setFixedSize( pixMap.width()+8, pixMap.height()+8 );
223//US QToolTip::add(myButton, i18n("Open file dialog"));
224
225 connect( myButton, SIGNAL( pressed() ), SLOT( slotUpdateURL() ));
226
227 setSpacing( KDialog::spacingHint() );
228
229 QWidget *widget = /*US d->combo ? (QWidget*) d->combo : */ (QWidget*) d->edit;
230 setFocusProxy( widget );
231
232 d->connectSignals( this );
233 connect( myButton, SIGNAL( clicked() ), this, SLOT( slotOpenDialog() ));
234/*US
235 myCompletion = new KURLCompletion();
236 d->setCompletionObject( myCompletion );
237
238 KAccel *accel = new KAccel( this );
239 accel->insert( KStdAccel::Open, this, SLOT( slotOpenDialog() ));
240 accel->readSettings();
241*/
242}
243
244
245void KURLRequester::setURL( const QString& url )
246{
247 bool hasLocalPrefix = (url.startsWith("file:"));
248
249 if ( !myShowLocalProt && hasLocalPrefix )
250 d->setText( url.mid( 5, url.length()-5 ));
251 else
252 d->setText( url );
253}
254
255void KURLRequester::setCaption( const QString& caption )
256{
257 //USfileDialog()->setCaption( caption );
258 //USQWidget::setCaption( caption );
259}
260
261QString KURLRequester::url() const
262{
263 return d->url();
264}
265
266
267void KURLRequester::slotOpenDialog()
268{
269 emit openFileDialog( this );
270
271//US use our special KFIleDialog instead
272 KURL u( url() );
273 //QString fn = u.url();
274 QString fn = d->edit->text();
275 fn = KFileDialog::getSaveFileName( fn, "Save backup filename", this );
276
277 if ( fn == "" )
278 return;
279
280 setURL( fn );
281 emit urlSelected( d->url() );
282/*US
283 KFileDialog *dlg = fileDialog();
284 if ( !d->url().isEmpty() ) {
285 KURL u( url() );
286 // If we won't be able to list it (e.g. http), then don't try :)
287 if ( KProtocolInfo::supportsListing( u.protocol() ) )
288 dlg->setSelection( u.url() );
289 }
290
291 if ( dlg->exec() == QDialog::Accepted )
292 {
293 setURL( dlg->selectedURL().prettyURL() );
294 emit urlSelected( d->url() );
295 }
296*/
297
298}
299
300void KURLRequester::setMode(unsigned int mode)
301{
302/*US
303 Q_ASSERT( (mode & KFile::Files) == 0 );
304 d->fileDialogMode = mode;
305 if ( (mode & KFile::Directory) && !(mode & KFile::File) )
306 myCompletion->setMode( KURLCompletion::DirCompletion );
307
308 if (myFileDialog)
309 myFileDialog->setMode( d->fileDialogMode );
310*/
311}
312
313void KURLRequester::setFilter(const QString &filter)
314{
315/*US
316 d->fileDialogFilter = filter;
317 if (myFileDialog)
318 myFileDialog->setFilter( d->fileDialogFilter );
319*/
320}
321
322KFileDialog * KURLRequester::fileDialog() const
323{
324/*US
325 if ( !myFileDialog ) {
326 QWidget *p = parentWidget();
327 myFileDialog = new KFileDialog( QString::null, QString::null, p,
328 "file dialog", true );
329
330 myFileDialog->setMode( d->fileDialogMode );
331 myFileDialog->setFilter( d->fileDialogFilter );
332 }
333
334 return myFileDialog;
335*/
336 return 0;
337}
338
339
340void KURLRequester::setShowLocalProtocol( bool b )
341{
342 if ( myShowLocalProt == b )
343 return;
344
345 myShowLocalProt = b;
346 setURL( url() );
347}
348
349void KURLRequester::clear()
350{
351 d->setText( QString::null );
352}
353
354KLineEdit * KURLRequester::lineEdit() const
355{
356 return d->edit;
357}
358/*US
359KComboBox * KURLRequester::comboBox() const
360{
361 return d->combo;
362}
363*/
364void KURLRequester::slotUpdateURL()
365{
366 // bin compat, myButton is declared as QPushButton
367//US KURL u( QDir::currentDirPath() + '/', url() );
368 KURL u( url() );
369 (static_cast<KURLDragPushButton *>( myButton))->setURL( u );
370}
371
372QPushButton * KURLRequester::button() const
373{
374 return myButton;
375}
376/*US
377KEditListBox::CustomEditor KURLRequester::customEditor()
378{
379 setSizePolicy(QSizePolicy( QSizePolicy::Preferred,
380 QSizePolicy::Fixed));
381
382 KLineEdit *edit = d->edit;
383 if ( !edit && d->combo )
384 edit = dynamic_cast<KLineEdit*>( d->combo->lineEdit() );
385
386#ifndef NDEBUG
387 if ( !edit )
388 kdWarning() << "KURLRequester's lineedit is not a KLineEdit!??\n";
389#endif
390
391 KEditListBox::CustomEditor editor( this, edit );
392 return editor;
393}
394*/
395void KURLRequester::virtual_hook( int, void* )
396{ /*BASE::virtual_hook( id, data );*/ }
397
398/*US
399KURLComboRequester::KURLComboRequester( QWidget *parent,
400 const char *name )
401 : KURLRequester( new KComboBox(false), parent, name)
402{
403}
404*/
405
406//US #include "kurlrequester.moc"