00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <klocale.h>
00021
00022 #include <qlayout.h>
00023 #include <qvbox.h>
00024 #include <kdebug.h>
00025 #include <qlabel.h>
00026 #include <qcombobox.h>
00027
00028 #include <klineedit.h>
00029 #include <kurlrequester.h>
00030 #include <kseparator.h>
00031 #include <kiconloader.h>
00032 #include "koInsertLink.h"
00033 #include <kdesktopfile.h>
00034 #include <krecentdocument.h>
00035
00036
00037 KoInsertLinkDia::KoInsertLinkDia( QWidget *, const char *,bool displayBookmarkLink )
00038 : KDialogBase( KDialogBase::IconList, i18n("Insert Link"),
00039 KDialogBase::Ok | KDialogBase::Cancel,
00040 KDialogBase::Ok)
00041 {
00042 bookmarkLink = 0L;
00043 QVBox *page=addVBoxPage(i18n("Internet"), QString::null,BarIcon("html",KIcon::SizeMedium));
00044 internetLink = new internetLinkPage(page );
00045 connect(internetLink,SIGNAL(textChanged()),this,SLOT(slotTextChanged ( )));
00046
00047 page=addVBoxPage(i18n("Mail & News"), QString::null,BarIcon("mail_generic",KIcon::SizeMedium));
00048 mailLink = new mailLinkPage(page );
00049 connect(mailLink,SIGNAL(textChanged()),this,SLOT(slotTextChanged ()));
00050
00051 page=addVBoxPage(i18n("File"), QString::null,BarIcon("filenew",KIcon::SizeMedium));
00052 fileLink = new fileLinkPage(page );
00053 connect(fileLink,SIGNAL(textChanged()),this,SLOT(slotTextChanged ()));
00054
00055 if ( displayBookmarkLink)
00056 {
00057 page=addVBoxPage(i18n("Bookmark"), QString::null,BarIcon("bookmark",KIcon::SizeMedium));
00058 bookmarkLink = new bookmarkLinkPage(page );
00059 connect(bookmarkLink,SIGNAL(textChanged()),this,SLOT(slotTextChanged ()));
00060 }
00061
00062 slotTextChanged ( );
00063 resize(400,300);
00064 }
00065
00066
00067 void KoInsertLinkDia::slotTextChanged ( )
00068 {
00069 enableButtonOK( !(linkName().isEmpty() || hrefName().isEmpty()));
00070 }
00071
00072 bool KoInsertLinkDia::createLinkDia(QString & _linkName, QString & _hrefName, QStringList bkmlist, bool displayBookmarkLink)
00073 {
00074 bool res = false;
00075
00076 KoInsertLinkDia *dlg = new KoInsertLinkDia( 0L, "Insert Link", displayBookmarkLink );
00077 dlg->setHrefLinkName(_hrefName,_linkName, bkmlist);
00078 if ( dlg->exec() == Accepted )
00079 {
00080 _linkName = dlg->linkName();
00081 _hrefName = dlg->hrefName();
00082 res = true;
00083 }
00084 delete dlg;
00085
00086 return res;
00087 }
00088
00089 void KoInsertLinkDia::setHrefLinkName(const QString &_href, const QString &_link, const QStringList & bkmlist)
00090 {
00091 if ( bookmarkLink)
00092 bookmarkLink->setBookmarkList(bkmlist);
00093 if( _href.isEmpty())
00094 return;
00095 if(_href.find("http://")!=-1 || _href.find("https://")!=-1 ||_href.find("ftp://")!=-1 )
00096 {
00097 internetLink->setHrefName(_href);
00098 internetLink->setLinkName(_link);
00099 showPage(0);
00100 }
00101 else if(_href.find("file:/")!=-1)
00102 {
00103 fileLink->setHrefName(_href);
00104 fileLink->setLinkName(_link);
00105 showPage(2);
00106 }
00107 else if(_href.find("mailto:")!=-1 || _href.find("news:")!=-1)
00108 {
00109 mailLink->setHrefName(_href);
00110 mailLink->setLinkName(_link);
00111 showPage(1);
00112 }
00113 else if(_href.find("bkm://")!=-1)
00114 {
00115 if ( bookmarkLink )
00116 {
00117 bookmarkLink->setHrefName(_href.mid(6));
00118 bookmarkLink->setLinkName(_link);
00119 showPage(3);
00120 }
00121 }
00122 slotTextChanged ( );
00123 }
00124
00125 QString KoInsertLinkDia::linkName()const
00126 {
00127 QString result;
00128 switch(activePageIndex())
00129 {
00130 case 0:
00131 result=internetLink->linkName();
00132 break;
00133 case 1:
00134 result=mailLink->linkName();
00135 break;
00136 case 2:
00137 result=fileLink->linkName();
00138 break;
00139 case 3:
00140 {
00141 if ( bookmarkLink)
00142 result=bookmarkLink->linkName();
00143 }
00144 break;
00145 default:
00146 kdDebug()<<"Error in linkName\n";
00147 }
00148 return result;
00149 }
00150
00151 QString KoInsertLinkDia::hrefName()
00152 {
00153 QString result;
00154 switch(activePageIndex())
00155 {
00156 case 0:
00157 result=internetLink->hrefName();
00158 break;
00159 case 1:
00160 result=mailLink->hrefName();
00161 break;
00162 case 2:
00163 result=fileLink->hrefName();
00164 break;
00165 case 3:
00166 {
00167 if ( bookmarkLink )
00168 result=bookmarkLink->hrefName();
00169 }
00170 break;
00171 default:
00172 kdDebug()<<"Error in hrefName\n";
00173 }
00174 return result;
00175 }
00176
00177 void KoInsertLinkDia::slotOk()
00178 {
00179 KDialogBase::slotOk();
00180 }
00181
00182
00183 internetLinkPage::internetLinkPage( QWidget *parent , char *name )
00184 : QWidget(parent,name)
00185 {
00186 QVBoxLayout *lay1 = new QVBoxLayout( this );
00187 lay1->setMargin( KDialog::marginHint() );
00188 lay1->setSpacing( KDialog::spacingHint() );
00189 QVBoxLayout *lay2 = new QVBoxLayout( lay1);
00190 lay2->setSpacing( KDialog::spacingHint() );
00191
00192 QLabel* tmpQLabel = new QLabel( this);
00193
00194 lay2->addWidget(tmpQLabel);
00195 tmpQLabel->setText(i18n("Comment:"));
00196
00197 m_linkName = new QLineEdit( this );
00198 lay2->addWidget(m_linkName);
00199
00200 tmpQLabel = new QLabel( this);
00201 lay2->addWidget(tmpQLabel);
00202
00203 tmpQLabel->setText(i18n("Internet address:"));
00204 m_hrefName = new QLineEdit( this );
00205
00206 lay2->addWidget(m_hrefName);
00207
00208 m_linkName->setFocus();
00209
00210 connect(m_linkName,SIGNAL(textChanged ( const QString & )),this,SLOT(textChanged ( const QString & )));
00211 connect(m_hrefName,SIGNAL(textChanged ( const QString & )),this,SLOT(textChanged ( const QString & )));
00212 KSeparator* bar1 = new KSeparator( KSeparator::HLine, this);
00213 bar1->setFixedHeight( 10 );
00214 lay2->addWidget( bar1 );
00215 }
00216
00217 QString internetLinkPage::createInternetLink()
00218 {
00219 QString result=m_hrefName->text();
00220
00221 if(result.isEmpty())
00222 return result;
00223
00224 if(result.find("http://")==-1 && result.find("https://")==-1 && result.find("ftp://")==-1)
00225 result = "http://"+result;
00226 return result;
00227 }
00228
00229
00230 void internetLinkPage::setLinkName(const QString & _name)
00231 {
00232 m_linkName->setText(_name);
00233 }
00234
00235 void internetLinkPage::setHrefName(const QString &_name)
00236 {
00237 m_hrefName->setText(_name);
00238 }
00239
00240 QString internetLinkPage::linkName()const
00241 {
00242 return m_linkName->text();
00243 }
00244
00245 QString internetLinkPage::hrefName()
00246 {
00247 return createInternetLink();
00248 }
00249
00250 void internetLinkPage::textChanged ( const QString & )
00251 {
00252 emit textChanged();
00253 }
00254
00255 bookmarkLinkPage::bookmarkLinkPage( QWidget *parent , char *name )
00256 : QWidget(parent,name)
00257 {
00258 QVBoxLayout *lay1 = new QVBoxLayout( this );
00259 lay1->setMargin( KDialog::marginHint() );
00260 lay1->setSpacing( KDialog::spacingHint() );
00261 QVBoxLayout *lay2 = new QVBoxLayout( lay1);
00262 lay2->setSpacing( KDialog::spacingHint() );
00263
00264 QLabel* tmpQLabel = new QLabel( this);
00265
00266 lay2->addWidget(tmpQLabel);
00267 tmpQLabel->setText(i18n("Comment:"));
00268
00269 m_linkName = new QLineEdit( this );
00270 lay2->addWidget(m_linkName);
00271
00272 tmpQLabel = new QLabel( this);
00273 lay2->addWidget(tmpQLabel);
00274
00275 tmpQLabel->setText(i18n("Bookmark name:"));
00276 m_hrefName = new QComboBox( this );
00277
00278 lay2->addWidget(m_hrefName);
00279
00280 m_linkName->setFocus();
00281
00282 connect(m_linkName,SIGNAL(textChanged ( const QString & )),this,SLOT(textChanged ( const QString & )));
00283 connect(m_hrefName,SIGNAL(textChanged ( const QString & )),this,SLOT(textChanged ( const QString & )));
00284 KSeparator* bar1 = new KSeparator( KSeparator::HLine, this);
00285 bar1->setFixedHeight( 10 );
00286 lay2->addWidget( bar1 );
00287 }
00288
00289 QString bookmarkLinkPage::createBookmarkLink()
00290 {
00291 QString result=m_hrefName->currentText();
00292
00293 if(result.isEmpty())
00294 return result;
00295
00296 if(result.find("bkm://")==-1)
00297 result = "bkm://"+result;
00298 return result;
00299 }
00300
00301
00302 void bookmarkLinkPage::setLinkName(const QString & _name)
00303 {
00304 m_linkName->setText(_name);
00305 }
00306
00307 void bookmarkLinkPage::setHrefName(const QString &_name)
00308 {
00309 m_hrefName->setCurrentText(_name);
00310 }
00311
00312 void bookmarkLinkPage::setBookmarkList(const QStringList & bkmlist)
00313 {
00314 m_hrefName->clear();
00315 m_hrefName->insertStringList(bkmlist, 0);
00316 if ( bkmlist.isEmpty())
00317 m_linkName->setEnabled( false);
00318
00319 }
00320
00321 QString bookmarkLinkPage::linkName()const
00322 {
00323 return m_linkName->text();
00324 }
00325
00326 QString bookmarkLinkPage::hrefName()
00327 {
00328 return createBookmarkLink();
00329 }
00330
00331 void bookmarkLinkPage::textChanged ( const QString & )
00332 {
00333 emit textChanged();
00334 }
00335
00336 mailLinkPage::mailLinkPage( QWidget *parent , char *name )
00337 : QWidget(parent,name)
00338 {
00339 QVBoxLayout *lay1 = new QVBoxLayout( this );
00340 lay1->setMargin( KDialog::marginHint() );
00341 lay1->setSpacing( KDialog::spacingHint() );
00342 QVBoxLayout *lay2 = new QVBoxLayout( lay1);
00343 lay2->setSpacing( KDialog::spacingHint() );
00344
00345 QLabel* tmpQLabel = new QLabel( this);
00346
00347 lay2->addWidget(tmpQLabel);
00348 tmpQLabel->setText(i18n("Comment:"));
00349
00350 m_linkName = new QLineEdit( this );
00351 lay2->addWidget(m_linkName);
00352
00353 tmpQLabel = new QLabel( this);
00354 lay2->addWidget(tmpQLabel);
00355
00356 tmpQLabel->setText(i18n("Target:"));
00357 m_hrefName = new QLineEdit( this );
00358
00359 lay2->addWidget(m_hrefName);
00360 connect(m_linkName,SIGNAL(textChanged ( const QString & )),this,SLOT(textChanged ( const QString & )));
00361 connect(m_hrefName,SIGNAL(textChanged ( const QString & )),this,SLOT(textChanged ( const QString & )));
00362 KSeparator* bar1 = new KSeparator( KSeparator::HLine, this);
00363 bar1->setFixedHeight( 10 );
00364 lay2->addWidget( bar1 );
00365 }
00366
00367 QString mailLinkPage::createMailLink()
00368 {
00369 QString result=m_hrefName->text();
00370
00371 if(result.isEmpty())
00372 return result;
00373
00374 if(result.find("mailto:")==-1 && result.find("news:")==-1)
00375 result = "mailto:"+result;
00376 return result;
00377 }
00378
00379
00380 void mailLinkPage::setLinkName(const QString & _name)
00381 {
00382 m_linkName->setText(_name);
00383 }
00384
00385 void mailLinkPage::setHrefName(const QString &_name)
00386 {
00387 m_hrefName->setText(_name);
00388 }
00389
00390 QString mailLinkPage::linkName()const
00391 {
00392 return m_linkName->text();
00393 }
00394
00395 QString mailLinkPage::hrefName()
00396 {
00397 return createMailLink();
00398 }
00399
00400 void mailLinkPage::textChanged ( const QString & )
00401 {
00402 emit textChanged();
00403 }
00404
00405 fileLinkPage::fileLinkPage( QWidget *parent , char *name )
00406 : QWidget(parent,name)
00407 {
00408 QVBoxLayout *lay1 = new QVBoxLayout( this );
00409 lay1->setMargin( KDialog::marginHint() );
00410 lay1->setSpacing( KDialog::spacingHint() );
00411 QVBoxLayout *lay2 = new QVBoxLayout( lay1);
00412 lay2->setSpacing( KDialog::spacingHint() );
00413
00414 QLabel* tmpQLabel = new QLabel( this);
00415
00416 lay2->addWidget(tmpQLabel);
00417 tmpQLabel->setText(i18n("Comment:"));
00418
00419 m_linkName = new QLineEdit( this );
00420 lay2->addWidget(m_linkName);
00421
00422 tmpQLabel = new QLabel( this);
00423 lay2->addWidget(tmpQLabel);
00424 tmpQLabel->setText(i18n("Recent file:"));
00425
00426
00427 QComboBox * recentFile = new QComboBox( this );
00428 lay2->addWidget(recentFile);
00429
00430 QStringList fileList = KRecentDocument::recentDocuments();
00431 QStringList lst;
00432 lst <<"";
00433 for (QStringList::ConstIterator it = fileList.begin();it != fileList.end(); ++it)
00434 {
00435 KDesktopFile f(*it, true );
00436 if ( !f.readURL().isEmpty())
00437 lst.append( f.readURL());
00438 }
00439 if ( lst.count()<= 1 )
00440 {
00441 recentFile->clear();
00442 recentFile->insertItem( i18n("No Entries") );
00443 recentFile->setEnabled( false );
00444 }
00445 else
00446 recentFile->insertStringList( lst);
00447 connect( recentFile , SIGNAL(highlighted ( const QString &)), this, SLOT( slotSelectRecentFile( const QString & )));
00448
00449 tmpQLabel = new QLabel( this);
00450 lay2->addWidget(tmpQLabel);
00451
00452 tmpQLabel->setText(i18n("File location:"));
00453 m_hrefName = new KURLRequester( this );
00454
00455 lay2->addWidget(m_hrefName);
00456
00457 connect(m_linkName,SIGNAL(textChanged ( const QString & )),this,SLOT(textChanged ( const QString & )));
00458 connect(m_hrefName,SIGNAL(textChanged ( const QString & )),this,SLOT(textChanged ( const QString & )));
00459
00460 KSeparator* bar1 = new KSeparator( KSeparator::HLine, this);
00461 bar1->setFixedHeight( 10 );
00462 lay2->addWidget( bar1 );
00463 }
00464
00465 void fileLinkPage::slotSelectRecentFile( const QString &_file )
00466 {
00467 m_hrefName->lineEdit()->setText(_file );
00468 }
00469
00470 QString fileLinkPage::createFileLink()
00471 {
00472 QString result=m_hrefName->lineEdit()->text();
00473 if(result.isEmpty())
00474 return result;
00475
00476 if(result.find("file:/")==-1)
00477 result = "file:/"+result;
00478 return result;
00479 }
00480
00481 void fileLinkPage::setLinkName(const QString & _name)
00482 {
00483 m_linkName->setText(_name);
00484 }
00485
00486 void fileLinkPage::setHrefName(const QString &_name)
00487 {
00488 m_hrefName->lineEdit()->setText(_name);
00489 }
00490
00491 QString fileLinkPage::linkName()const
00492 {
00493 return m_linkName->text();
00494 }
00495
00496 QString fileLinkPage::hrefName()
00497 {
00498 return createFileLink();
00499 }
00500
00501 void fileLinkPage::textChanged ( const QString & )
00502 {
00503 emit textChanged();
00504 }
00505
00506 #include "koInsertLink.moc"