• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdehtml
 

tdehtml

  • tdehtml
tdehtml_ext.cpp
1/* This file is part of the KDE project
2 *
3 * Copyright (C) 2000-2003 Simon Hausmann <hausmann@kde.org>
4 * 2001-2003 George Staikos <staikos@kde.org>
5 * 2001-2003 Laurent Montel <montel@kde.org>
6 * 2001-2003 Dirk Mueller <mueller@kde.org>
7 * 2001-2003 Waldo Bastian <bastian@kde.org>
8 * 2001-2003 David Faure <faure@kde.org>
9 * 2001-2003 Daniel Naber <dnaber@kde.org>
10 *
11 * This library is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Library General Public
13 * License as published by the Free Software Foundation; either
14 * version 2 of the License, or (at your option) any later version.
15 *
16 * This library is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Library General Public License for more details.
20 *
21 * You should have received a copy of the GNU Library General Public License
22 * along with this library; see the file COPYING.LIB. If not, write to
23 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24 * Boston, MA 02110-1301, USA.
25 */
26
27#include <assert.h>
28#include "tdehtml_ext.h"
29#include "tdehtmlview.h"
30#include "tdehtml_pagecache.h"
31#include "rendering/render_form.h"
32#include "rendering/render_image.h"
33#include "html/html_imageimpl.h"
34#include "misc/loader.h"
35#include "dom/html_form.h"
36#include "dom/html_image.h"
37#include <tqclipboard.h>
38#include <tqfileinfo.h>
39#include <tqpopupmenu.h>
40#include <tqurl.h>
41#include <tqmetaobject.h>
42#include <private/tqucomextra_p.h>
43#include <tqdragobject.h>
44
45#include <kdebug.h>
46#include <tdelocale.h>
47#include <tdefiledialog.h>
48#include <tdeio/job.h>
49#include <tdeprocess.h>
50#include <tdetoolbarbutton.h>
51#include <tdetoolbar.h>
52#include <ksavefile.h>
53#include <kurldrag.h>
54#include <kstringhandler.h>
55#include <tdeapplication.h>
56#include <tdemessagebox.h>
57#include <tdestandarddirs.h>
58#include <krun.h>
59#include <kurifilter.h>
60#include <kiconloader.h>
61#include <kdesktopfile.h>
62#include <tdemultipledrag.h>
63#include <kinputdialog.h>
64
65#include "tdehtml_factory.h"
66
67#include "dom/dom_element.h"
68#include "misc/htmltags.h"
69
70#include "tdehtmlpart_p.h"
71
72TDEHTMLPartBrowserExtension::TDEHTMLPartBrowserExtension( TDEHTMLPart *parent, const char *name )
73: KParts::BrowserExtension( parent, name )
74{
75 m_part = parent;
76 setURLDropHandlingEnabled( true );
77
78 enableAction( "cut", false );
79 enableAction( "copy", false );
80 enableAction( "paste", false );
81
82 m_connectedToClipboard = false;
83}
84
85int TDEHTMLPartBrowserExtension::xOffset()
86{
87 return m_part->view()->contentsX();
88}
89
90int TDEHTMLPartBrowserExtension::yOffset()
91{
92 return m_part->view()->contentsY();
93}
94
95void TDEHTMLPartBrowserExtension::saveState( TQDataStream &stream )
96{
97 //kdDebug( 6050 ) << "saveState!" << endl;
98 m_part->saveState( stream );
99}
100
101void TDEHTMLPartBrowserExtension::restoreState( TQDataStream &stream )
102{
103 //kdDebug( 6050 ) << "restoreState!" << endl;
104 m_part->restoreState( stream );
105}
106
107void TDEHTMLPartBrowserExtension::editableWidgetFocused( TQWidget *widget )
108{
109 m_editableFormWidget = widget;
110 updateEditActions();
111
112 if ( !m_connectedToClipboard && m_editableFormWidget )
113 {
114 connect( TQApplication::clipboard(), TQ_SIGNAL( dataChanged() ),
115 this, TQ_SLOT( updateEditActions() ) );
116
117 if ( m_editableFormWidget->inherits( "TQLineEdit" ) || m_editableFormWidget->inherits( "TQTextEdit" ) )
118 connect( m_editableFormWidget, TQ_SIGNAL( selectionChanged() ),
119 this, TQ_SLOT( updateEditActions() ) );
120
121 m_connectedToClipboard = true;
122 }
123 editableWidgetFocused();
124}
125
126void TDEHTMLPartBrowserExtension::editableWidgetBlurred( TQWidget * /*widget*/ )
127{
128 TQWidget *oldWidget = m_editableFormWidget;
129
130 m_editableFormWidget = 0;
131 enableAction( "cut", false );
132 enableAction( "paste", false );
133 m_part->emitSelectionChanged();
134
135 if ( m_connectedToClipboard )
136 {
137 disconnect( TQApplication::clipboard(), TQ_SIGNAL( dataChanged() ),
138 this, TQ_SLOT( updateEditActions() ) );
139
140 if ( oldWidget )
141 {
142 if ( oldWidget->inherits( "TQLineEdit" ) || oldWidget->inherits( "TQTextEdit" ) )
143 disconnect( oldWidget, TQ_SIGNAL( selectionChanged() ),
144 this, TQ_SLOT( updateEditActions() ) );
145 }
146
147 m_connectedToClipboard = false;
148 }
149 editableWidgetBlurred();
150}
151
152void TDEHTMLPartBrowserExtension::setExtensionProxy( KParts::BrowserExtension *proxy )
153{
154 if ( m_extensionProxy )
155 {
156 disconnect( m_extensionProxy, TQ_SIGNAL( enableAction( const char *, bool ) ),
157 this, TQ_SLOT( extensionProxyActionEnabled( const char *, bool ) ) );
158 if ( m_extensionProxy->inherits( "TDEHTMLPartBrowserExtension" ) )
159 {
160 disconnect( m_extensionProxy, TQ_SIGNAL( editableWidgetFocused() ),
161 this, TQ_SLOT( extensionProxyEditableWidgetFocused() ) );
162 disconnect( m_extensionProxy, TQ_SIGNAL( editableWidgetBlurred() ),
163 this, TQ_SLOT( extensionProxyEditableWidgetBlurred() ) );
164 }
165 }
166
167 m_extensionProxy = proxy;
168
169 if ( m_extensionProxy )
170 {
171 connect( m_extensionProxy, TQ_SIGNAL( enableAction( const char *, bool ) ),
172 this, TQ_SLOT( extensionProxyActionEnabled( const char *, bool ) ) );
173 if ( m_extensionProxy->inherits( "TDEHTMLPartBrowserExtension" ) )
174 {
175 connect( m_extensionProxy, TQ_SIGNAL( editableWidgetFocused() ),
176 this, TQ_SLOT( extensionProxyEditableWidgetFocused() ) );
177 connect( m_extensionProxy, TQ_SIGNAL( editableWidgetBlurred() ),
178 this, TQ_SLOT( extensionProxyEditableWidgetBlurred() ) );
179 }
180
181 enableAction( "cut", m_extensionProxy->isActionEnabled( "cut" ) );
182 enableAction( "copy", m_extensionProxy->isActionEnabled( "copy" ) );
183 enableAction( "paste", m_extensionProxy->isActionEnabled( "paste" ) );
184 }
185 else
186 {
187 updateEditActions();
188 enableAction( "copy", false ); // ### re-check this
189 }
190}
191
192void TDEHTMLPartBrowserExtension::cut()
193{
194 if ( m_extensionProxy )
195 {
196 callExtensionProxyMethod( "cut()" );
197 return;
198 }
199
200 if ( !m_editableFormWidget )
201 return;
202
203 if ( m_editableFormWidget->inherits( "TQLineEdit" ) )
204 static_cast<TQLineEdit *>( &(*m_editableFormWidget) )->cut();
205 else if ( m_editableFormWidget->inherits( "TQTextEdit" ) )
206 static_cast<TQTextEdit *>( &(*m_editableFormWidget) )->cut();
207}
208
209void TDEHTMLPartBrowserExtension::copy()
210{
211 if ( m_extensionProxy )
212 {
213 callExtensionProxyMethod( "copy()" );
214 return;
215 }
216
217 kdDebug( 6050 ) << "************! TDEHTMLPartBrowserExtension::copy()" << endl;
218 if ( !m_editableFormWidget )
219 {
220 // get selected text and paste to the clipboard
221 TQString text= m_part->selectedText();
222 text.replace( TQChar( 0xa0 ), ' ' );
223
224
225 TQClipboard *cb = TQApplication::clipboard();
226 disconnect( cb, TQ_SIGNAL( selectionChanged() ), m_part, TQ_SLOT( slotClearSelection() ) );
227#ifndef TQT_NO_MIMECLIPBOARD
228 TQString htmltext;
229 /*
230 * When selectionModeEnabled, that means the user has just selected
231 * the text, not ctrl+c to copy it. The selection clipboard
232 * doesn't seem to support mime type, so to save time, don't calculate
233 * the selected text as html.
234 * optomisation disabled for now until everything else works.
235 */
236 //if(!cb->selectionModeEnabled())
237 htmltext = m_part->selectedTextAsHTML();
238 TQTextDrag *textdrag = new TQTextDrag(text, 0L);
239 KMultipleDrag *drag = new KMultipleDrag( m_editableFormWidget );
240 drag->addDragObject( textdrag );
241 if(!htmltext.isEmpty()) {
242 htmltext.replace( TQChar( 0xa0 ), ' ' );
243 TQTextDrag *htmltextdrag = new TQTextDrag(htmltext, 0L);
244 htmltextdrag->setSubtype("html");
245 drag->addDragObject( htmltextdrag );
246 }
247 cb->setData(drag);
248#else
249 cb->setText(text);
250#endif
251
252 connect( cb, TQ_SIGNAL( selectionChanged() ), m_part, TQ_SLOT( slotClearSelection() ) );
253 }
254 else
255 {
256 if ( m_editableFormWidget->inherits( "TQLineEdit" ) )
257 static_cast<TQLineEdit *>( &(*m_editableFormWidget) )->copy();
258 else if ( m_editableFormWidget->inherits( "TQTextEdit" ) )
259 static_cast<TQTextEdit *>( &(*m_editableFormWidget) )->copy();
260 }
261}
262
263void TDEHTMLPartBrowserExtension::searchProvider()
264{
265 // action name is of form "previewProvider[<searchproviderprefix>:]"
266 const TQString searchProviderPrefix = TQString( sender()->name() ).mid( 14 );
267
268 KURIFilterData data;
269 TQStringList list;
270 data.setData( searchProviderPrefix + m_part->selectedText() );
271 list << "kurisearchfilter" << "kuriikwsfilter";
272
273 if( !KURIFilter::self()->filterURI(data, list) )
274 {
275 KDesktopFile file("searchproviders/google.desktop", true, "services");
276 TQString encodedSearchTerm = m_part->selectedText();
277 TQUrl::encode(encodedSearchTerm);
278 data.setData(file.readEntry("Query").replace("\\{@}", encodedSearchTerm));
279 }
280
281 KParts::URLArgs args;
282 args.frameName = "_blank";
283
284 emit m_part->browserExtension()->openURLRequest( data.uri(), args );
285}
286
287void TDEHTMLPartBrowserExtension::openSelection()
288{
289 KParts::URLArgs args;
290 args.frameName = "_blank";
291
292 emit m_part->browserExtension()->openURLRequest( m_part->selectedText(), args );
293}
294
295void TDEHTMLPartBrowserExtension::paste()
296{
297 if ( m_extensionProxy )
298 {
299 callExtensionProxyMethod( "paste()" );
300 return;
301 }
302
303 if ( !m_editableFormWidget )
304 return;
305
306 if ( m_editableFormWidget->inherits( "TQLineEdit" ) )
307 static_cast<TQLineEdit *>( &(*m_editableFormWidget) )->paste();
308 else if ( m_editableFormWidget->inherits( "TQTextEdit" ) )
309 static_cast<TQTextEdit *>( &(*m_editableFormWidget) )->paste();
310}
311
312void TDEHTMLPartBrowserExtension::callExtensionProxyMethod( const char *method )
313{
314 if ( !m_extensionProxy )
315 return;
316
317 int slot = m_extensionProxy->metaObject()->findSlot( method );
318 if ( slot == -1 )
319 return;
320
321 TQUObject o[ 1 ];
322 m_extensionProxy->tqt_invoke( slot, o );
323}
324
325void TDEHTMLPartBrowserExtension::updateEditActions()
326{
327 if ( !m_editableFormWidget )
328 {
329 enableAction( "cut", false );
330 enableAction( "copy", false );
331 enableAction( "paste", false );
332 return;
333 }
334
335 // ### duplicated from KonqMainWindow::slotClipboardDataChanged
336#ifndef TQT_NO_MIMECLIPBOARD // Handle minimalized versions of Qt Embedded
337 TQMimeSource *data = TQApplication::clipboard()->data();
338 enableAction( "paste", data->provides( "text/plain" ) );
339#else
340 TQString data=TQApplication::clipboard()->text();
341 enableAction( "paste", data.contains("://"));
342#endif
343 bool hasSelection = false;
344
345 if( m_editableFormWidget) {
346 if ( ::tqt_cast<TQLineEdit*>(m_editableFormWidget))
347 hasSelection = static_cast<TQLineEdit *>( &(*m_editableFormWidget) )->hasSelectedText();
348 else if(::tqt_cast<TQTextEdit*>(m_editableFormWidget))
349 hasSelection = static_cast<TQTextEdit *>( &(*m_editableFormWidget) )->hasSelectedText();
350 }
351
352 enableAction( "copy", hasSelection );
353 enableAction( "cut", hasSelection );
354}
355
356void TDEHTMLPartBrowserExtension::extensionProxyEditableWidgetFocused() {
357 editableWidgetFocused();
358}
359
360void TDEHTMLPartBrowserExtension::extensionProxyEditableWidgetBlurred() {
361 editableWidgetBlurred();
362}
363
364void TDEHTMLPartBrowserExtension::extensionProxyActionEnabled( const char *action, bool enable )
365{
366 // only forward enableAction calls for actions we actually do forward
367 if ( strcmp( action, "cut" ) == 0 ||
368 strcmp( action, "copy" ) == 0 ||
369 strcmp( action, "paste" ) == 0 ) {
370 enableAction( action, enable );
371 }
372}
373
374void TDEHTMLPartBrowserExtension::reparseConfiguration()
375{
376 m_part->reparseConfiguration();
377}
378
379void TDEHTMLPartBrowserExtension::print()
380{
381 m_part->view()->print();
382}
383
384void TDEHTMLPartBrowserExtension::disableScrolling()
385{
386 TQScrollView *scrollView = m_part->view();
387 if (scrollView) {
388 scrollView->setVScrollBarMode(TQScrollView::AlwaysOff);
389 scrollView->setHScrollBarMode(TQScrollView::AlwaysOff);
390 }
391}
392
393class TDEHTMLPopupGUIClient::TDEHTMLPopupGUIClientPrivate
394{
395public:
396 TDEHTMLPart *m_tdehtml;
397 KURL m_url;
398 KURL m_imageURL;
399 TQPixmap m_pixmap;
400 TQString m_suggestedFilename;
401};
402
403
404TDEHTMLPopupGUIClient::TDEHTMLPopupGUIClient( TDEHTMLPart *tdehtml, const TQString &doc, const KURL &url )
405 : TQObject( tdehtml )
406{
407 d = new TDEHTMLPopupGUIClientPrivate;
408 d->m_tdehtml = tdehtml;
409 d->m_url = url;
410 bool isImage = false;
411 bool hasSelection = tdehtml->hasSelection();
412 setInstance( tdehtml->instance() );
413
414 DOM::Element e;
415 e = tdehtml->nodeUnderMouse();
416
417 if ( !e.isNull() && (e.elementId() == ID_IMG ||
418 (e.elementId() == ID_INPUT && !static_cast<DOM::HTMLInputElement>(e).src().isEmpty())))
419 {
420 if (e.elementId() == ID_IMG) {
421 DOM::HTMLImageElementImpl *ie = static_cast<DOM::HTMLImageElementImpl*>(e.handle());
422 tdehtml::RenderImage *ri = dynamic_cast<tdehtml::RenderImage*>(ie->renderer());
423 if (ri && ri->contentObject()) {
424 d->m_suggestedFilename = static_cast<tdehtml::CachedImage*>(ri->contentObject())->suggestedFilename();
425 }
426 }
427 isImage=true;
428 }
429
430 if (hasSelection)
431 {
432 TDEAction* copyAction = KStdAction::copy( d->m_tdehtml->browserExtension(), TQ_SLOT( copy() ), actionCollection(), "copy" );
433 copyAction->setText(i18n("&Copy Text"));
434 copyAction->setEnabled(d->m_tdehtml->browserExtension()->isActionEnabled( "copy" ));
435 actionCollection()->insert( tdehtml->actionCollection()->action( "selectAll" ) );
436
437
438 // Fill search provider entries
439 TDEConfig config("kuriikwsfilterrc");
440 config.setGroup("General");
441 const TQString defaultEngine = config.readEntry("DefaultSearchEngine", "google");
442 const char keywordDelimiter = config.readNumEntry("KeywordDelimiter", ':');
443
444 // search text
445 TQString selectedText = tdehtml->selectedText();
446 selectedText.replace("&", "&&");
447 if ( selectedText.length()>18 ) {
448 selectedText.truncate(15);
449 selectedText+="...";
450 }
451
452 // default search provider
453 KService::Ptr service = KService::serviceByDesktopPath(TQString("searchproviders/%1.desktop").arg(defaultEngine));
454
455 // search provider icon
456 TQPixmap icon;
457 KURIFilterData data;
458 TQStringList list;
459 data.setData( TQString("some keyword") );
460 list << "kurisearchfilter" << "kuriikwsfilter";
461
462 TQString name;
463 if ( KURIFilter::self()->filterURI(data, list) )
464 {
465 TQString iconPath = locate("cache", KMimeType::favIconForURL(data.uri()) + ".png");
466 if ( iconPath.isEmpty() )
467 icon = SmallIcon("edit-find");
468 else
469 icon = TQPixmap( iconPath );
470 name = service->name();
471 }
472 else
473 {
474 icon = SmallIcon("google");
475 name = "Google";
476 }
477
478 // using .arg(foo, bar) instead of .arg(foo).arg(bar), as foo can contain %x
479 new TDEAction( i18n( "Search for '%1' with %2" ).arg( selectedText, name ), icon, 0, d->m_tdehtml->browserExtension(),
480 TQ_SLOT( searchProvider() ), actionCollection(), "searchProvider" );
481
482 // favorite search providers
483 TQStringList favoriteEngines;
484 favoriteEngines << "google" << "google_groups" << "google_news" << "webster" << "dmoz" << "wikipedia";
485 favoriteEngines = config.readListEntry("FavoriteSearchEngines", favoriteEngines);
486
487 if ( !favoriteEngines.isEmpty()) {
488 TDEActionMenu* providerList = new TDEActionMenu( i18n( "Search for '%1' with" ).arg( selectedText ), actionCollection(), "searchProviderList" );
489
490 TQStringList::ConstIterator it = favoriteEngines.begin();
491 for ( ; it != favoriteEngines.end(); ++it ) {
492 if (*it==defaultEngine)
493 continue;
494 service = KService::serviceByDesktopPath(TQString("searchproviders/%1.desktop").arg(*it));
495 if (!service)
496 continue;
497 const TQString searchProviderPrefix = *(service->property("Keys").toStringList().begin()) + keywordDelimiter;
498 data.setData( searchProviderPrefix + "some keyword" );
499
500 if ( KURIFilter::self()->filterURI(data, list) )
501 {
502 TQString iconPath = locate("cache", KMimeType::favIconForURL(data.uri()) + ".png");
503 if ( iconPath.isEmpty() )
504 icon = SmallIcon("edit-find");
505 else
506 icon = TQPixmap( iconPath );
507 name = service->name();
508
509 providerList->insert( new TDEAction( name, icon, 0, d->m_tdehtml->browserExtension(),
510 TQ_SLOT( searchProvider() ), actionCollection(), TQString( "searchProvider" + searchProviderPrefix ).latin1() ) );
511 }
512 }
513 }
514
515
516 if ( selectedText.contains("://") && KURL(selectedText).isValid() )
517 new TDEAction( i18n( "Open '%1'" ).arg( selectedText ), "window-new", 0,
518 d->m_tdehtml->browserExtension(), TQ_SLOT( openSelection() ), actionCollection(), "openSelection" );
519 }
520 else if ( url.isEmpty() && !isImage )
521 {
522 actionCollection()->insert( tdehtml->actionCollection()->action( "security" ) );
523 actionCollection()->insert( tdehtml->actionCollection()->action( "setEncoding" ) );
524 new TDEAction( i18n( "Stop Animations" ), 0, this, TQ_SLOT( slotStopAnimations() ),
525 actionCollection(), "stopanimations" );
526 }
527
528 if ( !url.isEmpty() )
529 {
530 if (url.protocol() == "mailto")
531 {
532 new TDEAction( i18n( "Copy Email Address" ), 0, this, TQ_SLOT( slotCopyLinkLocation() ),
533 actionCollection(), "copylinklocation" );
534 }
535 else
536 {
537 new TDEAction( i18n( "&Save Link As..." ), 0, this, TQ_SLOT( slotSaveLinkAs() ),
538 actionCollection(), "savelinkas" );
539 new TDEAction( i18n( "Copy &Link Address" ), 0, this, TQ_SLOT( slotCopyLinkLocation() ),
540 actionCollection(), "copylinklocation" );
541 }
542 }
543
544 // frameset? -> add "Reload Frame" etc.
545 if (!hasSelection)
546 {
547 if ( tdehtml->parentPart() )
548 {
549 new TDEAction( i18n( "Open in New &Window" ), "window-new", 0, this, TQ_SLOT( slotFrameInWindow() ),
550 actionCollection(), "frameinwindow" );
551 new TDEAction( i18n( "Open in &This Window" ), 0, this, TQ_SLOT( slotFrameInTop() ),
552 actionCollection(), "frameintop" );
553 new TDEAction( i18n( "Open in &New Tab" ), "tab_new", 0, this, TQ_SLOT( slotFrameInTab() ),
554 actionCollection(), "frameintab" );
555 new TDEAction( i18n( "Reload Frame" ), 0, this, TQ_SLOT( slotReloadFrame() ),
556 actionCollection(), "reloadframe" );
557
558 if ( TDEHTMLFactory::defaultHTMLSettings()->isAdFilterEnabled() ) {
559 if ( tdehtml->d->m_frame->m_type == tdehtml::ChildFrame::IFrame )
560 new TDEAction( i18n( "Block IFrame..." ), 0, this, TQ_SLOT( slotBlockIFrame() ), actionCollection(), "blockiframe" );
561 }
562
563 new TDEAction( i18n( "View Frame Source" ), 0, d->m_tdehtml, TQ_SLOT( slotViewDocumentSource() ),
564 actionCollection(), "viewFrameSource" );
565 new TDEAction( i18n( "View Frame Information" ), 0, d->m_tdehtml, TQ_SLOT( slotViewPageInfo() ), actionCollection(), "viewFrameInfo" );
566 // This one isn't in tdehtml_popupmenu.rc anymore, because Print isn't either,
567 // and because print frame is already in the toolbar and the menu.
568 // But leave this here, so that it's easy to read it.
569 new TDEAction( i18n( "Print Frame..." ), "frameprint", 0, d->m_tdehtml->browserExtension(), TQ_SLOT( print() ), actionCollection(), "printFrame" );
570 new TDEAction( i18n( "Save &Frame As..." ), 0, d->m_tdehtml, TQ_SLOT( slotSaveFrame() ), actionCollection(), "saveFrame" );
571
572 actionCollection()->insert( tdehtml->parentPart()->actionCollection()->action( "viewDocumentSource" ) );
573 actionCollection()->insert( tdehtml->parentPart()->actionCollection()->action( "viewPageInfo" ) );
574 } else {
575 actionCollection()->insert( tdehtml->actionCollection()->action( "viewDocumentSource" ) );
576 actionCollection()->insert( tdehtml->actionCollection()->action( "viewPageInfo" ) );
577 }
578 } else if (isImage || !url.isEmpty()) {
579 actionCollection()->insert( tdehtml->actionCollection()->action( "viewDocumentSource" ) );
580 actionCollection()->insert( tdehtml->actionCollection()->action( "viewPageInfo" ) );
581 new TDEAction( i18n( "Stop Animations" ), 0, this, TQ_SLOT( slotStopAnimations() ),
582 actionCollection(), "stopanimations" );
583 }
584
585 if (isImage)
586 {
587 if ( e.elementId() == ID_IMG ) {
588 d->m_imageURL = KURL( static_cast<DOM::HTMLImageElement>( e ).src().string() );
589 DOM::HTMLImageElementImpl *imageimpl = static_cast<DOM::HTMLImageElementImpl *>( e.handle() );
590 Q_ASSERT(imageimpl);
591 if(imageimpl) // should be true always. right?
592 {
593 if(imageimpl->complete()) {
594 d->m_pixmap = imageimpl->currentPixmap();
595 }
596 }
597 }
598 else
599 d->m_imageURL = KURL( static_cast<DOM::HTMLInputElement>( e ).src().string() );
600 new TDEAction( i18n( "Save Image As..." ), 0, this, TQ_SLOT( slotSaveImageAs() ),
601 actionCollection(), "saveimageas" );
602 new TDEAction( i18n( "Send Image..." ), 0, this, TQ_SLOT( slotSendImage() ),
603 actionCollection(), "sendimage" );
604
605
606#ifndef TQT_NO_MIMECLIPBOARD
607 (new TDEAction( i18n( "Copy Image" ), 0, this, TQ_SLOT( slotCopyImage() ),
608 actionCollection(), "copyimage" ))->setEnabled(!d->m_pixmap.isNull());
609#endif
610
611 if(d->m_pixmap.isNull()) { //fallback to image location if still loading the image. this will always be true if ifdef TQT_NO_MIMECLIPBOARD
612 new TDEAction( i18n( "Copy Image Location" ), 0, this, TQ_SLOT( slotCopyImageLocation() ),
613 actionCollection(), "copyimagelocation" );
614 }
615
616 TQString name = KStringHandler::csqueeze(d->m_imageURL.fileName()+d->m_imageURL.query(), 25);
617 new TDEAction( i18n( "View Image (%1)" ).arg(d->m_suggestedFilename.isEmpty() ? name.replace("&", "&&") : d->m_suggestedFilename.replace("&", "&&")), 0, this, TQ_SLOT( slotViewImage() ),
618 actionCollection(), "viewimage" );
619
620 if (TDEHTMLFactory::defaultHTMLSettings()->isAdFilterEnabled())
621 {
622 new TDEAction( i18n( "Block Image..." ), 0, this, TQ_SLOT( slotBlockImage() ),
623 actionCollection(), "blockimage" );
624
625 if (!d->m_imageURL.host().isEmpty() &&
626 !d->m_imageURL.protocol().isEmpty())
627 {
628 new TDEAction( i18n( "Block Images From %1" ).arg(d->m_imageURL.host()), 0, this, TQ_SLOT( slotBlockHost() ),
629 actionCollection(), "blockhost" );
630 }
631 }
632 }
633
634 setXML( doc );
635 setDOMDocument( TQDomDocument(), true ); // ### HACK
636
637 TQDomElement menu = domDocument().documentElement().namedItem( "Menu" ).toElement();
638
639 if ( actionCollection()->count() > 0 )
640 menu.insertBefore( domDocument().createElement( "separator" ), menu.firstChild() );
641}
642
643TDEHTMLPopupGUIClient::~TDEHTMLPopupGUIClient()
644{
645 delete d;
646}
647
648void TDEHTMLPopupGUIClient::slotSaveLinkAs()
649{
650 TDEIO::MetaData metaData;
651 metaData["referrer"] = d->m_tdehtml->referrer();
652 saveURL( d->m_tdehtml->widget(), i18n( "Save Link As" ), d->m_url, metaData );
653}
654
655void TDEHTMLPopupGUIClient::slotSendImage()
656{
657 TQStringList urls;
658 urls.append( d->m_imageURL.url());
659 TQString subject = d->m_imageURL.url();
660 tdeApp->invokeMailer(TQString::null, TQString::null, TQString::null, subject,
661 TQString::null, //body
662 TQString::null,
663 urls); // attachments
664
665
666}
667
668void TDEHTMLPopupGUIClient::slotSaveImageAs()
669{
670 TDEIO::MetaData metaData;
671 metaData["referrer"] = d->m_tdehtml->referrer();
672 saveURL( d->m_tdehtml->widget(), i18n( "Save Image As" ), d->m_imageURL, metaData, TQString::null, 0, d->m_suggestedFilename );
673}
674
675void TDEHTMLPopupGUIClient::slotBlockHost()
676{
677 TQString name=d->m_imageURL.protocol()+"://"+d->m_imageURL.host()+"/*";
678 TDEHTMLFactory::defaultHTMLSettings()->addAdFilter( name );
679 d->m_tdehtml->reparseConfiguration();
680}
681
682void TDEHTMLPopupGUIClient::slotBlockImage()
683{
684 bool ok = false;
685
686 TQString url = KInputDialog::getText( i18n("Add URL to Filter"),
687 i18n("Enter the URL:"),
688 d->m_imageURL.url(),
689 &ok);
690 if ( ok ) {
691 TDEHTMLFactory::defaultHTMLSettings()->addAdFilter( url );
692 d->m_tdehtml->reparseConfiguration();
693 }
694}
695
696void TDEHTMLPopupGUIClient::slotBlockIFrame()
697{
698 bool ok = false;
699 TQString url = KInputDialog::getText( i18n( "Add URL to Filter"),
700 i18n("Enter the URL:"),
701 d->m_tdehtml->url().url(),
702 &ok );
703 if ( ok ) {
704 TDEHTMLFactory::defaultHTMLSettings()->addAdFilter( url );
705 d->m_tdehtml->reparseConfiguration();
706 }
707}
708
709void TDEHTMLPopupGUIClient::slotCopyLinkLocation()
710{
711 KURL safeURL(d->m_url);
712 safeURL.setPass(TQString::null);
713#ifndef TQT_NO_MIMECLIPBOARD
714 // Set it in both the mouse selection and in the clipboard
715 KURL::List lst;
716 lst.append( safeURL );
717 TQApplication::clipboard()->setData( new KURLDrag( lst ), TQClipboard::Clipboard );
718 TQApplication::clipboard()->setData( new KURLDrag( lst ), TQClipboard::Selection );
719#else
720 TQApplication::clipboard()->setText( safeURL.url() ); //FIXME(E): Handle multiple entries
721#endif
722}
723
724void TDEHTMLPopupGUIClient::slotStopAnimations()
725{
726 d->m_tdehtml->stopAnimations();
727}
728
729void TDEHTMLPopupGUIClient::slotCopyImage()
730{
731#ifndef TQT_NO_MIMECLIPBOARD
732 KURL safeURL(d->m_imageURL);
733 safeURL.setPass(TQString::null);
734
735 KURL::List lst;
736 lst.append( safeURL );
737 KMultipleDrag *drag = new KMultipleDrag(d->m_tdehtml->view(), "Image");
738
739 drag->addDragObject( new TQImageDrag(d->m_pixmap.convertToImage()) );
740 drag->addDragObject( new KURLDrag(lst, d->m_tdehtml->view(), "Image URL") );
741
742 // Set it in both the mouse selection and in the clipboard
743 TQApplication::clipboard()->setData( drag, TQClipboard::Clipboard );
744 TQApplication::clipboard()->setData( new KURLDrag(lst), TQClipboard::Selection );
745#else
746 kdDebug() << "slotCopyImage called when the clipboard does not support this. This should not be possible." << endl;
747#endif
748}
749
750void TDEHTMLPopupGUIClient::slotCopyImageLocation()
751{
752 KURL safeURL(d->m_imageURL);
753 safeURL.setPass(TQString::null);
754#ifndef TQT_NO_MIMECLIPBOARD
755 // Set it in both the mouse selection and in the clipboard
756 KURL::List lst;
757 lst.append( safeURL );
758 TQApplication::clipboard()->setData( new KURLDrag( lst ), TQClipboard::Clipboard );
759 TQApplication::clipboard()->setData( new KURLDrag( lst ), TQClipboard::Selection );
760#else
761 TQApplication::clipboard()->setText( safeURL.url() ); //FIXME(E): Handle multiple entries
762#endif
763}
764
765void TDEHTMLPopupGUIClient::slotViewImage()
766{
767 d->m_tdehtml->browserExtension()->createNewWindow(d->m_imageURL);
768}
769
770void TDEHTMLPopupGUIClient::slotReloadFrame()
771{
772 KParts::URLArgs args( d->m_tdehtml->browserExtension()->urlArgs() );
773 args.reload = true;
774 args.metaData()["referrer"] = d->m_tdehtml->pageReferrer();
775 // reload document
776 d->m_tdehtml->closeURL();
777 d->m_tdehtml->browserExtension()->setURLArgs( args );
778 d->m_tdehtml->openURL( d->m_tdehtml->url() );
779}
780
781void TDEHTMLPopupGUIClient::slotFrameInWindow()
782{
783 KParts::URLArgs args( d->m_tdehtml->browserExtension()->urlArgs() );
784 args.metaData()["referrer"] = d->m_tdehtml->pageReferrer();
785 args.metaData()["forcenewwindow"] = "true";
786 emit d->m_tdehtml->browserExtension()->createNewWindow( d->m_tdehtml->url(), args );
787}
788
789void TDEHTMLPopupGUIClient::slotFrameInTop()
790{
791 KParts::URLArgs args( d->m_tdehtml->browserExtension()->urlArgs() );
792 args.metaData()["referrer"] = d->m_tdehtml->pageReferrer();
793 args.frameName = "_top";
794 emit d->m_tdehtml->browserExtension()->openURLRequest( d->m_tdehtml->url(), args );
795}
796
797void TDEHTMLPopupGUIClient::slotFrameInTab()
798{
799 KParts::URLArgs args( d->m_tdehtml->browserExtension()->urlArgs() );
800 args.metaData()["referrer"] = d->m_tdehtml->pageReferrer();
801 args.setNewTab(true);
802 emit d->m_tdehtml->browserExtension()->createNewWindow( d->m_tdehtml->url(), args );
803}
804
805void TDEHTMLPopupGUIClient::saveURL( TQWidget *parent, const TQString &caption,
806 const KURL &url,
807 const TQMap<TQString, TQString> &metadata,
808 const TQString &filter, long cacheId,
809 const TQString & suggestedFilename )
810{
811 TQString name = TQString::fromLatin1( "index.html" );
812 if ( !suggestedFilename.isEmpty() )
813 name = suggestedFilename;
814 else if ( !url.fileName().isEmpty() )
815 name = url.fileName();
816
817 KURL destURL;
818 int query;
819 do {
820 query = KMessageBox::Yes;
821 destURL = KFileDialog::getSaveURL( name, filter, parent, caption );
822 if( destURL.isLocalFile() )
823 {
824 TQFileInfo info( destURL.path() );
825 if( info.exists() ) {
826 // TODO: use TDEIO::RenameDlg (shows more information)
827 query = KMessageBox::warningContinueCancel( parent, i18n( "A file named \"%1\" already exists. " "Are you sure you want to overwrite it?" ).arg( info.fileName() ), i18n( "Overwrite File?" ), i18n( "Overwrite" ) );
828 }
829 }
830 } while ( query == KMessageBox::Cancel );
831
832 if ( destURL.isValid() )
833 saveURL(url, destURL, metadata, cacheId);
834}
835
836void TDEHTMLPopupGUIClient::saveURL( const KURL &url, const KURL &destURL,
837 const TQMap<TQString, TQString> &metadata,
838 long cacheId )
839{
840 if ( destURL.isValid() )
841 {
842 bool saved = false;
843 if (TDEHTMLPageCache::self()->isComplete(cacheId))
844 {
845 if (destURL.isLocalFile())
846 {
847 KSaveFile destFile(destURL.path());
848 if (destFile.status() == 0)
849 {
850 TDEHTMLPageCache::self()->saveData(cacheId, destFile.dataStream());
851 saved = true;
852 }
853 }
854 else
855 {
856 // save to temp file, then move to final destination.
857 KTempFile destFile;
858 if (destFile.status() == 0)
859 {
860 TDEHTMLPageCache::self()->saveData(cacheId, destFile.dataStream());
861 destFile.close();
862 KURL url2 = KURL();
863 url2.setPath(destFile.name());
864 TDEIO::file_move(url2, destURL, -1, true /*overwrite*/);
865 saved = true;
866 }
867 }
868 }
869 if(!saved)
870 {
871 // DownloadManager <-> konqueror integration
872 // find if the integration is enabled
873 // the empty key means no integration
874 // only use download manager for non-local urls!
875 bool downloadViaKIO = true;
876 if ( !url.isLocalFile() )
877 {
878 TDEConfig cfg("konquerorrc", false, false);
879 cfg.setGroup("HTML Settings");
880 TQString downloadManger = cfg.readPathEntry("DownloadManager");
881 if (!downloadManger.isEmpty())
882 {
883 // then find the download manager location
884 kdDebug(1000) << "Using: "<<downloadManger <<" as Download Manager" <<endl;
885 TQString cmd = TDEStandardDirs::findExe(downloadManger);
886 if (cmd.isEmpty())
887 {
888 TQString errMsg=i18n("The Download Manager (%1) could not be found in your $PATH ").arg(downloadManger);
889 TQString errMsgEx= i18n("Try to reinstall it \n\nThe integration with Konqueror will be disabled!");
890 KMessageBox::detailedSorry(0,errMsg,errMsgEx);
891 cfg.writePathEntry("DownloadManager",TQString::null);
892 cfg.sync ();
893 }
894 else
895 {
896 downloadViaKIO = false;
897 KURL cleanDest = destURL;
898 cleanDest.setPass( TQString::null ); // don't put password into commandline
899 cmd += " " + TDEProcess::quote(url.url()) + " " +
900 TDEProcess::quote(cleanDest.url());
901 kdDebug(1000) << "Calling command "<<cmd<<endl;
902 KRun::runCommand(cmd);
903 }
904 }
905 }
906
907 if ( downloadViaKIO )
908 {
909 TDEIO::Job *job = TDEIO::file_copy( url, destURL, -1, true /*overwrite*/ );
910 job->setMetaData(metadata);
911 job->addMetaData("MaxCacheSize", "0"); // Don't store in http cache.
912 job->addMetaData("cache", "cache"); // Use entry from cache if available.
913 job->setAutoErrorHandlingEnabled( true );
914 }
915 } //end if(!saved)
916 }
917}
918
919TDEHTMLPartBrowserHostExtension::TDEHTMLPartBrowserHostExtension( TDEHTMLPart *part )
920: KParts::BrowserHostExtension( part )
921{
922 m_part = part;
923}
924
925TDEHTMLPartBrowserHostExtension::~TDEHTMLPartBrowserHostExtension()
926{
927}
928
929TQStringList TDEHTMLPartBrowserHostExtension::frameNames() const
930{
931 return m_part->frameNames();
932}
933
934const TQPtrList<KParts::ReadOnlyPart> TDEHTMLPartBrowserHostExtension::frames() const
935{
936 return m_part->frames();
937}
938
939bool TDEHTMLPartBrowserHostExtension::openURLInFrame( const KURL &url, const KParts::URLArgs &urlArgs )
940{
941 return m_part->openURLInFrame( url, urlArgs );
942}
943
944void TDEHTMLPartBrowserHostExtension::virtual_hook( int id, void *data )
945{
946 if (id == VIRTUAL_FIND_FRAME_PARENT)
947 {
948 FindFrameParentParams *param = static_cast<FindFrameParentParams*>(data);
949 TDEHTMLPart *parentPart = m_part->findFrameParent(param->callingPart, param->frame);
950 if (parentPart)
951 param->parent = parentPart->browserHostExtension();
952 return;
953 }
954 BrowserHostExtension::virtual_hook( id, data );
955}
956
957
958// defined in tdehtml_part.cpp
959extern const int TDE_NO_EXPORT fastZoomSizes[];
960extern const int TDE_NO_EXPORT fastZoomSizeCount;
961
962// BCI: remove in KDE 4
963TDEHTMLZoomFactorAction::TDEHTMLZoomFactorAction( TDEHTMLPart *part, bool direction, const TQString &text, const TQString &icon, const TQObject *receiver, const char *slot, TQObject *parent, const char *name )
964 : TDEAction( text, icon, 0, receiver, slot, parent, name )
965{
966 init(part, direction);
967}
968
969TDEHTMLZoomFactorAction::TDEHTMLZoomFactorAction( TDEHTMLPart *part, bool direction, const TQString &text, const TQString &icon, const TDEShortcut &cut, const TQObject *receiver, const char *slot, TQObject *parent, const char *name )
970 : TDEAction( text, icon, cut, receiver, slot, parent, name )
971{
972 init(part, direction);
973}
974
975void TDEHTMLZoomFactorAction::init(TDEHTMLPart *part, bool direction)
976{
977 m_direction = direction;
978 m_part = part;
979
980 m_popup = new TQPopupMenu;
981 // xgettext: no-c-format
982 m_popup->insertItem( i18n( "Default Font Size (100%)" ) );
983
984 int m = m_direction ? 1 : -1;
985 int ofs = fastZoomSizeCount / 2; // take index of 100%
986
987 // this only works if there is an odd number of elements in fastZoomSizes[]
988 for ( int i = m; i != m*(ofs+1); i += m )
989 {
990 int num = i * m;
991 TQString numStr = TQString::number( num );
992 if ( num > 0 ) numStr.prepend( '+' );
993
994 // xgettext: no-c-format
995 m_popup->insertItem( i18n( "%1%" ).arg( fastZoomSizes[ofs + i] ) );
996 }
997
998 connect( m_popup, TQ_SIGNAL( activated( int ) ), this, TQ_SLOT( slotActivated( int ) ) );
999}
1000
1001TDEHTMLZoomFactorAction::~TDEHTMLZoomFactorAction()
1002{
1003 delete m_popup;
1004}
1005
1006int TDEHTMLZoomFactorAction::plug( TQWidget *w, int index )
1007{
1008 int containerId = TDEAction::plug( w, index );
1009 if ( containerId == -1 || !w->inherits( "TDEToolBar" ) )
1010 return containerId;
1011
1012 TDEToolBarButton *button = static_cast<TDEToolBar *>( w )->getButton( itemId( containerId ) );
1013 if ( !button )
1014 return containerId;
1015
1016 button->setDelayedPopup( m_popup );
1017 return containerId;
1018}
1019
1020void TDEHTMLZoomFactorAction::slotActivated( int id )
1021{
1022 int idx = m_popup->indexOf( id );
1023
1024 if (idx == 0)
1025 m_part->setZoomFactor(100);
1026 else
1027 m_part->setZoomFactor(fastZoomSizes[fastZoomSizeCount/2 + (m_direction ? 1 : -1)*idx]);
1028}
1029
1030#include "tdehtml_ext.moc"
1031
DOM::Element
By far the vast majority of objects (apart from text) that authors encounter when traversing a docume...
Definition: dom_element.h:211
DOM::HTMLImageElement
Embedded image.
Definition: html_image.h:186
DOM::HTMLInputElement
Form control.
Definition: html_form.h:350
DOM::HTMLInputElement::src
DOMString src() const
When the type attribute has the value "Image", this attribute specifies the location of the image to ...
Definition: html_form.cpp:501
DOM::Node::isNull
bool isNull() const
tests if this Node is 0.
Definition: dom_node.h:892
KDesktopFile
KInputDialog::getText
static TQString getText(const TQString &caption, const TQString &label, const TQString &value=TQString::null, bool *ok=0, TQWidget *parent=0, const char *name=0, TQValidator *validator=0, const TQString &mask=TQString::null)
KMessageBox::detailedSorry
static void detailedSorry(TQWidget *parent, const TQString &text, const TQString &details, const TQString &caption=TQString::null, int options=Notify)
KMessageBox::warningContinueCancel
static int warningContinueCancel(TQWidget *parent, const TQString &text, const TQString &caption=TQString::null, const KGuiItem &buttonContinue=KStdGuiItem::cont(), const TQString &dontAskAgainName=TQString::null, int options=Notify)
KMultipleDrag
KMultipleDrag::addDragObject
void addDragObject(TQDragObject *dragObject)
KParts::BrowserExtension
KParts::BrowserExtension::enableAction
void enableAction(const char *name, bool enabled)
KParts::BrowserExtension::openURLRequest
void openURLRequest(const KURL &url, const KParts::URLArgs &args=KParts::URLArgs())
KParts::ReadOnlyPart::m_url
KURL m_url
KSaveFile
KStringHandler::csqueeze
static TQString csqueeze(const TQString &str, uint maxlen=40)
KTempFile
KTempFile::dataStream
TQDataStream * dataStream()
KTempFile::status
int status() const
KTempFile::close
bool close()
KTempFile::name
TQString name() const
KURLDrag
KURL::List
KURL
KURL::path
TQString path() const
KURL::setPath
void setPath(const TQString &path)
KURL::setPass
void setPass(const TQString &_txt)
KURL::protocol
TQString protocol() const
KURL::isEmpty
bool isEmpty() const
KURL::fileName
TQString fileName(bool _ignore_trailing_slash_in_path=true) const
KURL::url
TQString url(int _trailing=0, int encoding_hint=0) const
KURL::isLocalFile
bool isLocalFile() const
KURL::isValid
bool isValid() const
KXMLGUIClient::instance
virtual TDEInstance * instance() const
KXMLGUIClient::actionCollection
virtual TDEActionCollection * actionCollection() const
TDEActionCollection::action
virtual TDEAction * action(int index) const
TDEActionMenu
TDEAction
TDEAction::setEnabled
virtual void setEnabled(bool enable)
TDEAction::setText
virtual void setText(const TQString &text)
TDEAction::plug
virtual int plug(TQWidget *widget, int index=-1)
TDEConfig
TDEHTMLPageCache::saveData
void saveData(long id, TQDataStream *str)
Save the data of cache entry id to the datastream str.
Definition: tdehtml_pagecache.cpp:272
TDEHTMLPageCache::self
static TDEHTMLPageCache * self()
static "constructor".
Definition: tdehtml_pagecache.cpp:121
TDEHTMLPart
This class is tdehtml's main class.
Definition: tdehtml_part.h:184
TDEHTMLPart::frameNames
TQStringList frameNames() const
Returns a list of names of all frame (including iframe) objects of the current document.
Definition: tdehtml_part.cpp:5891
TDEHTMLPart::findFrameParent
TDEHTMLPart * findFrameParent(KParts::ReadOnlyPart *callingPart, const TQString &f, tdehtml::ChildFrame **childFrame=0)
Recursively finds the part containing the frame with name f and checks if it is accessible by calling...
Definition: tdehtml_part.cpp:5215
TDEHTMLPart::browserExtension
KParts::BrowserExtension * browserExtension() const
Returns a pointer to the KParts::BrowserExtension.
Definition: tdehtml_part.cpp:896
TDEHTMLPart::view
TDEHTMLView * view() const
Returns a pointer to the HTML document's view.
Definition: tdehtml_part.cpp:906
TDEHTMLPart::saveState
virtual void saveState(TQDataStream &stream)
Saves the TDEHTMLPart's complete state (including child frame objects) to the provided TQDataStream.
Definition: tdehtml_part.cpp:5358
TDEHTMLPart::hasSelection
bool hasSelection() const
Has the user selected anything?
Definition: tdehtml_part.cpp:3596
TDEHTMLPart::selectedTextAsHTML
TQString selectedTextAsHTML() const
Return the text the user has marked.
Definition: tdehtml_part.cpp:3437
TDEHTMLPart::selectedText
virtual TQString selectedText() const
Returns the text the user has marked.
Definition: tdehtml_part.cpp:3454
TDEHTMLPart::nodeUnderMouse
DOM::Node nodeUnderMouse() const
Returns the Node currently under the mouse.
Definition: tdehtml_part.cpp:5644
TDEHTMLPart::parentPart
TDEHTMLPart * parentPart()
Returns a pointer to the parent TDEHTMLPart if the part is a frame in an HTML frameset.
Definition: tdehtml_part.cpp:5321
TDEHTMLPart::restoreState
virtual void restoreState(TQDataStream &stream)
Restores the TDEHTMLPart's previously saved state (including child frame objects) from the provided T...
Definition: tdehtml_part.cpp:5444
TDEHTMLView::setVScrollBarMode
virtual void setVScrollBarMode(ScrollBarMode mode)
Sets verticals scrollbar mode.
Definition: tdehtmlview.cpp:3016
TDEHTMLView::print
void print()
Prints the HTML document.
Definition: tdehtmlview.cpp:2767
TDEProcess::quote
static TQString quote(const TQString &arg)
TDEShortcut
TDEStandardDirs::findExe
static TQString findExe(const TQString &appname, const TQString &pathstr=TQString::null, bool ignoreExecBit=false)
TDEToolBarButton
TDEToolBarButton::setDelayedPopup
void setDelayedPopup(TQPopupMenu *p, bool unused=false)
TDEToolBar
endl
kndbgstream & endl(kndbgstream &s)
kdDebug
kdbgstream kdDebug(int area=0)
locate
TQString locate(const char *type, const TQString &filename, const TDEInstance *instance=TDEGlobal::instance())
KStdAction::copy
TDEAction * copy(const TQObject *recvr, const char *slot, TDEActionCollection *parent, const char *name=0)
TDEStdAccel::copy
const TDEShortcut & copy()
TDEStdAccel::name
TQString name(StdAccel id)
TDEStdAccel::cut
const TDEShortcut & cut()
TDEStdAccel::print
const TDEShortcut & print()
KParts::URLArgs
KParts::URLArgs::setNewTab
void setNewTab(bool newTab)
KParts::URLArgs::metaData
TQMap< TQString, TQString > & metaData()
KParts::URLArgs::frameName
TQString frameName
KParts::URLArgs::reload
bool reload
tdelocale.h

tdehtml

Skip menu "tdehtml"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

tdehtml

Skip menu "tdehtml"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdehtml by doxygen 1.9.4
This website is maintained by Timothy Pearson.