27#include <tqcombobox.h>
32#include <kdesktopfile.h>
33#include <kdialogbase.h>
34#include <kiconloader.h>
36#include <tdemessagebox.h>
38#include <tderecentdocument.h>
39#include <kurlrequester.h>
43class LinkDialog::Private
47 TQFrame* internetPage;
48 KLineEdit* internetText;
49 KLineEdit* internetLink;
55 KURLRequester* fileLink;
61LinkDialog::LinkDialog( TQWidget*,
const char* )
62 : KDialogBase( KDialogBase::IconList,i18n(
"Insert Link") ,
63 KDialogBase::Ok | KDialogBase::Cancel,
69 d->internetPage = addPage( i18n(
"Internet" ), TQString(),
70 BarIcon(
"text-html",TDEIcon::SizeMedium ) );
71 TQVBoxLayout* iLayout =
new TQVBoxLayout( d->internetPage, marginHint(), spacingHint() );
72 iLayout->add(
new TQLabel( i18n(
"Text to display:" ), d->internetPage ) );
73 d->internetText =
new KLineEdit( d->internetPage );
74 iLayout->add( d->internetText );
75 iLayout->add(
new TQLabel( i18n(
"Internet address:" ), d->internetPage ) );
76 d->internetLink =
new KLineEdit( d->internetPage );
77 iLayout->add( d->internetLink );
78 iLayout->addItem(
new TQSpacerItem( 0, 0, TQSizePolicy::Minimum, TQSizePolicy::Expanding ) );
79 connect( d->internetText, TQ_SIGNAL( textChanged(
const TQString& ) ),
this,
80 TQ_SLOT( setText(
const TQString& ) ) );
83 d->mailPage = addPage( i18n(
"Mail" ), TQString(),
84 BarIcon(
"mail_generic",TDEIcon::SizeMedium ) );
85 TQVBoxLayout* mLayout =
new TQVBoxLayout( d->mailPage, marginHint(), spacingHint() );
86 mLayout->add(
new TQLabel( i18n(
"Text to display:" ), d->mailPage ) );
87 d->mailText =
new KLineEdit( d->mailPage );
88 mLayout->add( d->mailText );
89 mLayout->add(
new TQLabel( i18n(
"Email:" ), d->mailPage ) );
90 d->mailLink =
new KLineEdit( d->mailPage );
91 mLayout->add( d->mailLink );
92 mLayout->addItem(
new TQSpacerItem( 0, 0, TQSizePolicy::Minimum, TQSizePolicy::Expanding ) );
93 connect( d->mailText, TQ_SIGNAL( textChanged(
const TQString& ) ),
this,
94 TQ_SLOT( setText(
const TQString& ) ) );
97 d->filePage = addPage( i18n(
"File" ), TQString(),
98 BarIcon(
"document-new",TDEIcon::SizeMedium ) );
99 TQVBoxLayout* fLayout =
new TQVBoxLayout( d->filePage, marginHint(), spacingHint() );
100 fLayout->add(
new TQLabel( i18n(
"Text to display:" ), d->filePage ) );
101 d->fileText =
new KLineEdit( d->filePage );
102 fLayout->add( d->fileText );
103 fLayout->add(
new TQLabel( i18n(
"File location:" ), d->filePage ) );
104 d->fileLink =
new KURLRequester( d->filePage );
105 fLayout->add( d->fileLink );
106 fLayout->add(
new TQLabel( i18n(
"Recent file:" ), d->filePage ) );
107 TQComboBox* recentFile =
new TQComboBox( d->filePage );
108 recentFile->setSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Fixed );
109 fLayout->add( recentFile );
110 fLayout->addItem(
new TQSpacerItem( 0, 40, TQSizePolicy::Minimum, TQSizePolicy::MinimumExpanding ) );
111 connect( d->fileText, TQ_SIGNAL( textChanged(
const TQString& ) ),
this,
112 TQ_SLOT( setText(
const TQString& ) ) );
113 TQObject::connect( recentFile, TQ_SIGNAL( highlighted (
const TQString &) ),
114 d->fileLink->lineEdit(), TQ_SLOT( setText(
const TQString & ) ) );
118 TQStringList fileList = TDERecentDocument::recentDocuments();
119 for( TQStringList::ConstIterator it = fileList.begin();it != fileList.end(); ++it )
121 KDesktopFile f(*it,
true );
122 if ( !f.readURL().isEmpty() )
123 recentFile->insertItem( f.readURL() );
125 if( recentFile->count()==0 )
127 recentFile->insertItem( i18n(
"No Entries") );
128 recentFile->setEnabled(
false );
132 d->cellPage = addPage( i18n(
"Cell" ), TQString(),
133 BarIcon(
"misc",TDEIcon::SizeMedium ) );
134 TQVBoxLayout* cLayout =
new TQVBoxLayout( d->cellPage, marginHint(), spacingHint() );
135 cLayout->add(
new TQLabel( i18n(
"Text to display:" ), d->cellPage ) );
136 d->cellText =
new KLineEdit( d->cellPage );
137 cLayout->add( d->cellText );
138 cLayout->add(
new TQLabel( i18n(
"Cell:" ), d->cellPage ) );
139 d->cellLink =
new KLineEdit( d->cellPage );
140 cLayout->add( d->cellLink );
141 cLayout->addItem(
new TQSpacerItem( 0, 0, TQSizePolicy::Minimum, TQSizePolicy::Expanding ) );
142 connect( d->cellText, TQ_SIGNAL( textChanged(
const TQString& ) ),
this,
143 TQ_SLOT( setText(
const TQString& ) ) );
145 enableButtonSeparator(
true );
146 d->internetText->setFocus();
150LinkDialog::~LinkDialog()
155TQString LinkDialog::text()
const
160TQString LinkDialog::link()
const
163 switch( activePageIndex() )
166 str = d->internetLink->text();
168 if( str.find(
"http://" )==-1 )
169 if( str.find(
"https://" )==-1 )
170 if( str.find(
"ftp://" )==-1 )
171 str.prepend(
"http://" );
175 str = d->mailLink->text();
177 if( str.find(
"mailto:" )==-1 )
178 str.prepend(
"mailto:" );
182 str = d->fileLink->lineEdit()->text();
184 if( str.find(
"file:/" )==-1 )
185 str.prepend(
"file://" );
189 str = d->cellLink->text();
197void LinkDialog::setText(
const TQString& text )
201 d->internetText->blockSignals(
true );
202 d->internetText->setText( text );
203 d->internetText->blockSignals(
false );
205 d->mailText->blockSignals(
true );
206 d->mailText->setText( text );
207 d->mailText->blockSignals(
false );
209 d->fileText->blockSignals(
true );
210 d->fileText->setText( text );
211 d->fileText->blockSignals(
false );
213 d->cellText->blockSignals(
true );
214 d->cellText->setText( text );
215 d->cellText->blockSignals(
false );
220void LinkDialog::setLink(
const TQString& link )
222 if( link.startsWith(
"https://" ) )
224 d->internetLink->setText( link.mid( TQString(
"https://").length() ) );
229 if( link.startsWith(
"http://" ) )
231 d->internetLink->setText( link.mid( TQString(
"http://").length() ) );
236 if( link.startsWith(
"ftp://" ) )
238 d->internetLink->setText( link.mid( TQString(
"ftp://").length() ) );
243 if( link.startsWith(
"mailto:" ) )
245 d->mailLink->setText( link.mid( TQString(
"mailto:").length() ) );
250 if( link.startsWith(
"file:/" ) )
252 TQString s = link.mid( TQString(
"file:/").length() );
253 while(s.startsWith(
"//")) s.remove(0,1);
254 d->fileLink->lineEdit()->setText(s);
260 d->cellLink->setText( link );
264void LinkDialog::slotOk()
267 switch( activePageIndex() )
269 case 0: str = i18n(
"Internet address is empty" );
break;
270 case 1: str = i18n(
"Mail address is empty" );
break;
271 case 2: str = i18n(
"File name is empty" );
break;
272 case 3: str = i18n(
"Destination cell is empty" );
break;
276 if( link().isEmpty() )
278 KMessageBox::error(
this, str );
282 if( d->text.isEmpty() )