summaryrefslogtreecommitdiffstats
path: root/kio/bookmarks/kbookmarkmenu.cc
diff options
context:
space:
mode:
Diffstat (limited to 'kio/bookmarks/kbookmarkmenu.cc')
-rw-r--r--kio/bookmarks/kbookmarkmenu.cc1187
1 files changed, 0 insertions, 1187 deletions
diff --git a/kio/bookmarks/kbookmarkmenu.cc b/kio/bookmarks/kbookmarkmenu.cc
deleted file mode 100644
index 5e85bc1f6..000000000
--- a/kio/bookmarks/kbookmarkmenu.cc
+++ /dev/null
@@ -1,1187 +0,0 @@
-// -*- c-basic-offset:4; indent-tabs-mode:nil -*-
-// vim: set ts=4 sts=4 sw=4 et:
-/* This file is part of the KDE project
- Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kbookmarkmenu.h"
-#include "kbookmarkmenu_p.h"
-#include "kbookmarkimporter.h"
-#include "kbookmarkimporter_opera.h"
-#include "kbookmarkimporter_ie.h"
-#include "kbookmarkdrag.h"
-
-#include <kapplication.h>
-#include <kconfig.h>
-#include <kdebug.h>
-#include <kdialogbase.h>
-#include <kiconloader.h>
-#include <klineedit.h>
-#include <klocale.h>
-#include <kmessagebox.h>
-#include <kpopupmenu.h>
-#include <kstdaccel.h>
-#include <kstdaction.h>
-#include <kstringhandler.h>
-
-#include <tqclipboard.h>
-#include <tqfile.h>
-#include <tqheader.h>
-#include <tqlabel.h>
-#include <tqlayout.h>
-#include <tqlineedit.h>
-#include <tqlistview.h>
-#include <tqpushbutton.h>
-
-#include <dptrtemplate.h>
-
-template class TQPtrList<KBookmarkMenu>;
-
-static TQString makeTextNodeMod(KBookmark bk, const TQString &m_nodename, const TQString &m_newText) {
- TQDomNode subnode = bk.internalElement().namedItem(m_nodename);
- if (subnode.isNull()) {
- subnode = bk.internalElement().ownerDocument().createElement(m_nodename);
- bk.internalElement().appendChild(subnode);
- }
-
- if (subnode.firstChild().isNull()) {
- TQDomText domtext = subnode.ownerDocument().createTextNode("");
- subnode.appendChild(domtext);
- }
-
- TQDomText domtext = subnode.firstChild().toText();
-
- TQString m_oldText = domtext.data();
- domtext.setData(m_newText);
-
- return m_oldText;
-}
-
-/********************************************************************/
-/********************************************************************/
-/********************************************************************/
-
-KBookmarkMenu::KBookmarkMenu( KBookmarkManager* mgr,
- KBookmarkOwner * _owner, KPopupMenu * _parentMenu,
- KActionCollection *collec, bool _isRoot, bool _add,
- const TQString & parentAddress )
- : TQObject(),
- m_bIsRoot(_isRoot), m_bAddBookmark(_add),
- m_bAddShortcuts(true),
- m_pManager(mgr), m_pOwner(_owner),
- m_parentMenu( _parentMenu ),
- m_actionCollection( collec ),
- m_parentAddress( parentAddress )
-{
- m_parentMenu->setKeyboardShortcutsEnabled( true );
-
- m_lstSubMenus.setAutoDelete( true );
- m_actions.setAutoDelete( true );
-
- if (m_actionCollection)
- {
- m_actionCollection->setHighlightingEnabled(true);
- disconnect( m_actionCollection, TQT_SIGNAL( actionHighlighted( KAction * ) ), 0, 0 );
- connect( m_actionCollection, TQT_SIGNAL( actionHighlighted( KAction * ) ),
- this, TQT_SLOT( slotActionHighlighted( KAction * ) ) );
- }
-
- m_bNSBookmark = m_parentAddress.isNull();
- if ( !m_bNSBookmark ) // not for the netscape bookmark
- {
- //kdDebug(7043) << "KBookmarkMenu::KBookmarkMenu " << this << " address : " << m_parentAddress << endl;
-
- connect( _parentMenu, TQT_SIGNAL( aboutToShow() ),
- TQT_SLOT( slotAboutToShow() ) );
-
- if ( KBookmarkSettings::self()->m_contextmenu )
- {
- (void) _parentMenu->contextMenu();
- connect( _parentMenu, TQT_SIGNAL( aboutToShowContextMenu(KPopupMenu*, int, TQPopupMenu*) ),
- this, TQT_SLOT( slotAboutToShowContextMenu(KPopupMenu*, int, TQPopupMenu*) ));
- }
-
- if ( m_bIsRoot )
- {
- connect( m_pManager, TQT_SIGNAL( changed(const TQString &, const TQString &) ),
- TQT_SLOT( slotBookmarksChanged(const TQString &) ) );
- }
- }
-
- // add entries that possibly have a shortcut, so they are available _before_ first popup
- if ( m_bIsRoot )
- {
- if ( m_bAddBookmark )
- {
- addAddBookmark();
- if ( extOwner() )
- addAddBookmarksList(); // FIXME
- }
-
- addEditBookmarks();
- }
-
- m_bDirty = true;
-}
-
-KBookmarkMenu::~KBookmarkMenu()
-{
- //kdDebug(7043) << "KBookmarkMenu::~KBookmarkMenu() " << this << endl;
- TQPtrListIterator<KAction> it( m_actions );
- for (; it.current(); ++it )
- it.current()->unplugAll();
-
- m_lstSubMenus.clear();
- m_actions.clear();
-}
-
-void KBookmarkMenu::ensureUpToDate()
-{
- slotAboutToShow();
-}
-
-void KBookmarkMenu::slotAboutToShow()
-{
- // Did the bookmarks change since the last time we showed them ?
- if ( m_bDirty )
- {
- m_bDirty = false;
- refill();
- }
-}
-
-TQString KBookmarkMenu::s_highlightedAddress;
-TQString KBookmarkMenu::s_highlightedImportType;
-TQString KBookmarkMenu::s_highlightedImportLocation;
-
-void KBookmarkMenu::slotActionHighlighted( KAction* action )
-{
- if (action->isA("KBookmarkActionMenu") || action->isA("KBookmarkAction"))
- {
- s_highlightedAddress = action->property("address").toString();
- //kdDebug() << "KBookmarkMenu::slotActionHighlighted" << s_highlightedAddress << endl;
- }
- else if (action->isA("KImportedBookmarksActionMenu"))
- {
- s_highlightedImportType = action->property("type").toString();
- s_highlightedImportLocation = action->property("location").toString();
- }
- else
- {
- s_highlightedAddress = TQString::null;
- s_highlightedImportType = TQString::null;
- s_highlightedImportLocation = TQString::null;
- }
-}
-
-/********************************************************************/
-/********************************************************************/
-/********************************************************************/
-
-class KBookmarkMenuRMBAssoc : public dPtrTemplate<KBookmarkMenu, RMB> { };
-template<> TQPtrDict<RMB>* dPtrTemplate<KBookmarkMenu, RMB>::d_ptr = 0;
-
-static RMB* rmbSelf(KBookmarkMenu *m) { return KBookmarkMenuRMBAssoc::d(m); }
-
-// TODO check via dcop before making any changes to the bookmarks file???
-
-void RMB::begin_rmb_action(KBookmarkMenu *self)
-{
- RMB *s = rmbSelf(self);
- s->recv = self;
- s->m_parentAddress = self->m_parentAddress;
- s->s_highlightedAddress = KBookmarkMenu::s_highlightedAddress;
- s->m_pManager = self->m_pManager;
- s->m_pOwner = self->m_pOwner;
- s->m_parentMenu = self->m_parentMenu;
-}
-
-bool RMB::invalid( int val )
-{
- bool valid = true;
-
- if (val == 1)
- s_highlightedAddress = m_parentAddress;
-
- if (s_highlightedAddress.isNull())
- valid = false;
-
- return !valid;
-}
-
-KBookmark RMB::atAddress(const TQString & address)
-{
- KBookmark bookmark = m_pManager->findByAddress( address );
- Q_ASSERT(!bookmark.isNull());
- return bookmark;
-}
-
-void KBookmarkMenu::slotAboutToShowContextMenu( KPopupMenu*, int, TQPopupMenu* contextMenu )
-{
- //kdDebug(7043) << "KBookmarkMenu::slotAboutToShowContextMenu" << s_highlightedAddress << endl;
- if (s_highlightedAddress.isNull())
- {
- KPopupMenu::contextMenuFocus()->hideContextMenu();
- return;
- }
- contextMenu->clear();
- fillContextMenu( contextMenu, s_highlightedAddress, 0 );
-}
-
-void RMB::fillContextMenu( TQPopupMenu* contextMenu, const TQString & address, int val )
-{
- KBookmark bookmark = atAddress(address);
-
- int id;
-
- // binner:
- // "Add Bookmark Here" when pointing at a bookmark looks strange and if you
- // call it you have to close and reopen the menu to see an entry was added?
- //
- // TODO rename these, but, message freeze... umm...
-
-// if (bookmark.isGroup()) {
- id = contextMenu->insertItem( SmallIcon("bookmark_add"), i18n( "Add Bookmark Here" ), recv, TQT_SLOT(slotRMBActionInsert(int)) );
- contextMenu->setItemParameter( id, val );
-/* }
- else
- {
- id = contextMenu->insertItem( SmallIcon("bookmark_add"), i18n( "Add Bookmark Here" ), recv, TQT_SLOT(slotRMBActionInsert(int)) );
- contextMenu->setItemParameter( id, val );
- }*/
-}
-
-void RMB::fillContextMenu2( TQPopupMenu* contextMenu, const TQString & address, int val )
-{
- KBookmark bookmark = atAddress(address);
-
- int id;
-
- if (bookmark.isGroup()) {
- id = contextMenu->insertItem( i18n( "Open Folder in Bookmark Editor" ), recv, TQT_SLOT(slotRMBActionEditAt(int)) );
- contextMenu->setItemParameter( id, val );
- contextMenu->insertSeparator();
- id = contextMenu->insertItem( SmallIcon("editdelete"), i18n( "Delete Folder" ), recv, TQT_SLOT(slotRMBActionRemove(int)) );
- contextMenu->setItemParameter( id, val );
- contextMenu->insertSeparator();
- id = contextMenu->insertItem( i18n( "Properties" ), recv, TQT_SLOT(slotRMBActionProperties(int)) );
- contextMenu->setItemParameter( id, val );
- }
- else
- {
- id = contextMenu->insertItem( i18n( "Copy Link Address" ), recv, TQT_SLOT(slotRMBActionCopyLocation(int)) );
- contextMenu->setItemParameter( id, val );
- contextMenu->insertSeparator();
- id = contextMenu->insertItem( SmallIcon("editdelete"), i18n( "Delete Bookmark" ), recv, TQT_SLOT(slotRMBActionRemove(int)) );
- contextMenu->setItemParameter( id, val );
- contextMenu->insertSeparator();
- id = contextMenu->insertItem( i18n( "Properties" ), recv, TQT_SLOT(slotRMBActionProperties(int)) );
- contextMenu->setItemParameter( id, val );
- }
-}
-
-void RMB::slotRMBActionEditAt( int val )
-{
- kdDebug(7043) << "KBookmarkMenu::slotRMBActionEditAt" << s_highlightedAddress << endl;
- if (invalid(val)) { hidePopup(); return; }
-
- KBookmark bookmark = atAddress(s_highlightedAddress);
-
- m_pManager->slotEditBookmarksAtAddress( s_highlightedAddress );
-}
-
-void RMB::slotRMBActionProperties( int val )
-{
- kdDebug(7043) << "KBookmarkMenu::slotRMBActionProperties" << s_highlightedAddress << endl;
- if (invalid(val)) { hidePopup(); return; }
-
- KBookmark bookmark = atAddress(s_highlightedAddress);
-
- TQString folder = bookmark.isGroup() ? TQString::null : bookmark.url().pathOrURL();
- KBookmarkEditDialog dlg( bookmark.fullText(), folder,
- m_pManager, KBookmarkEditDialog::ModifyMode, 0,
- 0, 0, i18n("Bookmark Properties") );
- if ( dlg.exec() != KDialogBase::Accepted )
- return;
-
- makeTextNodeMod(bookmark, "title", dlg.finalTitle());
- if ( !dlg.finalUrl().isNull() )
- {
- KURL u = KURL::fromPathOrURL(dlg.finalUrl());
- bookmark.internalElement().setAttribute("href", u.url(0, 106));
- }
-
- kdDebug(7043) << "Requested move to " << dlg.finalAddress() << "!" << endl;
-
- KBookmarkGroup parentBookmark = atAddress(m_parentAddress).toGroup();
- m_pManager->emitChanged( parentBookmark );
-}
-
-void RMB::slotRMBActionInsert( int val )
-{
- kdDebug(7043) << "KBookmarkMenu::slotRMBActionInsert" << s_highlightedAddress << endl;
- if (invalid(val)) { hidePopup(); return; }
-
- TQString url = m_pOwner->currentURL();
- if (url.isEmpty())
- {
- KMessageBox::error( 0L, i18n("Cannot add bookmark with empty URL."));
- return;
- }
- TQString title = m_pOwner->currentTitle();
- if (title.isEmpty())
- title = url;
-
- KBookmark bookmark = atAddress( s_highlightedAddress );
-
- // TODO use unique title
-
- if (bookmark.isGroup())
- {
- KBookmarkGroup parentBookmark = bookmark.toGroup();
- Q_ASSERT(!parentBookmark.isNull());
- parentBookmark.addBookmark( m_pManager, title, KURL( url ) );
- m_pManager->emitChanged( parentBookmark );
- }
- else
- {
- KBookmarkGroup parentBookmark = bookmark.parentGroup();
- Q_ASSERT(!parentBookmark.isNull());
- KBookmark newBookmark = parentBookmark.addBookmark( m_pManager, title, KURL( url ) );
- parentBookmark.moveItem( newBookmark, parentBookmark.previous(bookmark) );
- m_pManager->emitChanged( parentBookmark );
- }
-}
-
-void RMB::slotRMBActionRemove( int val )
-{
- //kdDebug(7043) << "KBookmarkMenu::slotRMBActionRemove" << s_highlightedAddress << endl;
- if (invalid(val)) { hidePopup(); return; }
-
- KBookmark bookmark = atAddress( s_highlightedAddress );
- bool folder = bookmark.isGroup();
-
- if (KMessageBox::warningContinueCancel(
- m_parentMenu,
- folder ? i18n("Are you sure you wish to remove the bookmark folder\n\"%1\"?").arg(bookmark.text())
- : i18n("Are you sure you wish to remove the bookmark\n\"%1\"?").arg(bookmark.text()),
- folder ? i18n("Bookmark Folder Deletion")
- : i18n("Bookmark Deletion"),
- KStdGuiItem::del())
- != KMessageBox::Continue
- )
- return;
-
- KBookmarkGroup parentBookmark = atAddress( m_parentAddress ).toGroup();
- parentBookmark.deleteBookmark( bookmark );
- m_pManager->emitChanged( parentBookmark );
- if (m_parentMenu)
- m_parentMenu->hide();
-}
-
-void RMB::slotRMBActionCopyLocation( int val )
-{
- //kdDebug(7043) << "KBookmarkMenu::slotRMBActionCopyLocation" << s_highlightedAddress << endl;
- if (invalid(val)) { hidePopup(); return; }
-
- KBookmark bookmark = atAddress( s_highlightedAddress );
-
- if ( !bookmark.isGroup() )
- {
- kapp->clipboard()->setData( KBookmarkDrag::newDrag(bookmark, 0),
- TQClipboard::Selection );
- kapp->clipboard()->setData( KBookmarkDrag::newDrag(bookmark, 0),
- TQClipboard::Clipboard );
- }
-}
-
-void RMB::hidePopup() {
- KPopupMenu::contextMenuFocus()->hideContextMenu();
-}
-
-/********************************************************************/
-/********************************************************************/
-/********************************************************************/
-
-void KBookmarkMenu::fillContextMenu( TQPopupMenu* contextMenu, const TQString & address, int val )
-{
- RMB::begin_rmb_action(this);
- rmbSelf(this)->fillContextMenu(contextMenu, address, val);
- emit aboutToShowContextMenu( rmbSelf(this)->atAddress(address), contextMenu);
- rmbSelf(this)->fillContextMenu2(contextMenu, address, val);
-}
-
-void KBookmarkMenu::slotRMBActionEditAt( int val )
-{ RMB::begin_rmb_action(this); rmbSelf(this)->slotRMBActionEditAt( val ); }
-
-void KBookmarkMenu::slotRMBActionProperties( int val )
-{ RMB::begin_rmb_action(this); rmbSelf(this)->slotRMBActionProperties( val ); }
-
-void KBookmarkMenu::slotRMBActionInsert( int val )
-{ RMB::begin_rmb_action(this); rmbSelf(this)->slotRMBActionInsert( val ); }
-
-void KBookmarkMenu::slotRMBActionRemove( int val )
-{ RMB::begin_rmb_action(this); rmbSelf(this)->slotRMBActionRemove( val ); }
-
-void KBookmarkMenu::slotRMBActionCopyLocation( int val )
-{ RMB::begin_rmb_action(this); rmbSelf(this)->slotRMBActionCopyLocation( val ); }
-
-void KBookmarkMenu::slotBookmarksChanged( const TQString & groupAddress )
-{
- if (m_bNSBookmark)
- return;
-
- if ( groupAddress == m_parentAddress )
- {
- //kdDebug(7043) << "KBookmarkMenu::slotBookmarksChanged -> setting m_bDirty on " << groupAddress << endl;
- m_bDirty = true;
- }
- else
- {
- // Iterate recursively into child menus
- TQPtrListIterator<KBookmarkMenu> it( m_lstSubMenus );
- for (; it.current(); ++it )
- {
- it.current()->slotBookmarksChanged( groupAddress );
- }
- }
-}
-
-void KBookmarkMenu::refill()
-{
- //kdDebug(7043) << "KBookmarkMenu::refill()" << endl;
- m_lstSubMenus.clear();
-
- TQPtrListIterator<KAction> it( m_actions );
- for (; it.current(); ++it )
- it.current()->unplug( m_parentMenu );
-
- m_parentMenu->clear();
- m_actions.clear();
-
- fillBookmarkMenu();
- m_parentMenu->adjustSize();
-}
-
-void KBookmarkMenu::addAddBookmarksList()
-{
- if (!kapp->authorizeKAction("bookmarks"))
- return;
-
- TQString title = i18n( "Bookmark Tabs as Folder..." );
-
- KAction * paAddBookmarksList = new KAction( title,
- "bookmarks_list_add",
- 0,
- this,
- TQT_SLOT( slotAddBookmarksList() ),
- m_actionCollection, m_bIsRoot ? "add_bookmarks_list" : 0 );
-
- paAddBookmarksList->setToolTip( i18n( "Add a folder of bookmarks for all open tabs." ) );
-
- paAddBookmarksList->plug( m_parentMenu );
- m_actions.append( paAddBookmarksList );
-}
-
-void KBookmarkMenu::addAddBookmark()
-{
- if (!kapp->authorizeKAction("bookmarks"))
- return;
-
- TQString title = i18n( "Add Bookmark" );
-
- KAction * paAddBookmarks = new KAction( title,
- "bookmark_add",
- m_bIsRoot && m_bAddShortcuts ? KStdAccel::addBookmark() : KShortcut(),
- this,
- TQT_SLOT( slotAddBookmark() ),
- m_actionCollection, m_bIsRoot ? "add_bookmark" : 0 );
-
- paAddBookmarks->setToolTip( i18n( "Add a bookmark for the current document" ) );
-
- paAddBookmarks->plug( m_parentMenu );
- m_actions.append( paAddBookmarks );
-}
-
-void KBookmarkMenu::addEditBookmarks()
-{
- if (!kapp->authorizeKAction("bookmarks"))
- return;
-
- KAction * m_paEditBookmarks = KStdAction::editBookmarks( m_pManager, TQT_SLOT( slotEditBookmarks() ),
- m_actionCollection, "edit_bookmarks" );
- m_paEditBookmarks->plug( m_parentMenu );
- m_paEditBookmarks->setToolTip( i18n( "Edit your bookmark collection in a separate window" ) );
- m_actions.append( m_paEditBookmarks );
-}
-
-void KBookmarkMenu::addNewFolder()
-{
- if (!kapp->authorizeKAction("bookmarks"))
- return;
-
- TQString title = i18n( "&New Bookmark Folder..." );
- int p;
- while ( ( p = title.find( '&' ) ) >= 0 )
- title.remove( p, 1 );
-
- KAction * paNewFolder = new KAction( title,
- "folder_new", //"folder",
- 0,
- this,
- TQT_SLOT( slotNewFolder() ),
- m_actionCollection );
-
- paNewFolder->setToolTip( i18n( "Create a new bookmark folder in this menu" ) );
-
- paNewFolder->plug( m_parentMenu );
- m_actions.append( paNewFolder );
-}
-
-void KBookmarkMenu::fillBookmarkMenu()
-{
- if (!kapp->authorizeKAction("bookmarks"))
- return;
-
- if ( m_bIsRoot )
- {
- if ( m_bAddBookmark )
- {
- addAddBookmark();
- if ( extOwner() )
- addAddBookmarksList(); // FIXME
- }
-
- addEditBookmarks();
-
- if ( m_bAddBookmark && !KBookmarkSettings::self()->m_advancedaddbookmark )
- addNewFolder();
- }
-
- if ( m_bIsRoot
- && KBookmarkManager::userBookmarksFile() == m_pManager->path() )
- {
- bool haveSep = false;
-
- TQValueList<TQString> keys = KBookmarkMenu::dynamicBookmarksList();
- TQValueList<TQString>::const_iterator it;
- for ( it = keys.begin(); it != keys.end(); ++it )
- {
- DynMenuInfo info;
- info = showDynamicBookmarks((*it));
-
- if ( !info.show || !TQFile::exists( info.location ) )
- continue;
-
- if (!haveSep)
- {
- m_parentMenu->insertSeparator();
- haveSep = true;
- }
-
- KActionMenu * actionMenu;
- actionMenu = new KImportedBookmarksActionMenu(
- info.name, info.type,
- m_actionCollection, "kbookmarkmenu" );
-
- actionMenu->setProperty( "type", info.type );
- actionMenu->setProperty( "location", info.location );
-
- actionMenu->plug( m_parentMenu );
- m_actions.append( actionMenu );
-
- KBookmarkMenu *subMenu =
- new KBookmarkMenu( m_pManager, m_pOwner, actionMenu->popupMenu(),
- m_actionCollection, false,
- m_bAddBookmark, TQString::null );
- connect( subMenu, TQT_SIGNAL( openBookmark( const TQString &, TQt::ButtonState ) ),
- this, TQT_SIGNAL( openBookmark( const TQString &, TQt::ButtonState ) ));
- m_lstSubMenus.append(subMenu);
-
- connect(actionMenu->popupMenu(), TQT_SIGNAL(aboutToShow()), subMenu, TQT_SLOT(slotNSLoad()));
- }
- }
-
- KBookmarkGroup parentBookmark = m_pManager->findByAddress( m_parentAddress ).toGroup();
- Q_ASSERT(!parentBookmark.isNull());
- bool separatorInserted = false;
- for ( KBookmark bm = parentBookmark.first(); !bm.isNull(); bm = parentBookmark.next(bm) )
- {
- TQString text = KStringHandler::csqueeze(bm.fullText(), 60);
- text.replace( '&', "&&" );
- if ( !separatorInserted && m_bIsRoot) {
- // inserted before the first konq bookmark, to avoid the separator if no konq bookmark
- m_parentMenu->insertSeparator();
- separatorInserted = true;
- }
- if ( !bm.isGroup() )
- {
- if ( bm.isSeparator() )
- {
- m_parentMenu->insertSeparator();
- }
- else
- {
- //kdDebug(7043) << "Creating URL bookmark menu item for " << bm.text() << endl;
- KAction * action = new KBookmarkAction( text, bm.icon(), 0, m_actionCollection, 0 );
- connect(action, TQT_SIGNAL( activated ( KAction::ActivationReason, TQt::ButtonState )),
- this, TQT_SLOT( slotBookmarkSelected( KAction::ActivationReason, TQt::ButtonState ) ));
-
- action->setProperty( "url", bm.url().url() );
- action->setProperty( "address", bm.address() );
-
- action->setToolTip( bm.url().pathOrURL() );
-
- action->plug( m_parentMenu );
- m_actions.append( action );
- }
- }
- else
- {
- //kdDebug(7043) << "Creating bookmark submenu named " << bm.text() << endl;
- KActionMenu * actionMenu = new KBookmarkActionMenu( text, bm.icon(),
- m_actionCollection,
- "kbookmarkmenu" );
- actionMenu->setProperty( "address", bm.address() );
- actionMenu->plug( m_parentMenu );
- m_actions.append( actionMenu );
-
- KBookmarkMenu *subMenu = new KBookmarkMenu( m_pManager, m_pOwner, actionMenu->popupMenu(),
- m_actionCollection, false,
- m_bAddBookmark,
- bm.address() );
-
- connect(subMenu, TQT_SIGNAL( aboutToShowContextMenu( const KBookmark &, TQPopupMenu * ) ),
- this, TQT_SIGNAL( aboutToShowContextMenu( const KBookmark &, TQPopupMenu * ) ));
- connect(subMenu, TQT_SIGNAL( openBookmark( const TQString &, TQt::ButtonState ) ),
- this, TQT_SIGNAL( openBookmark( const TQString &, TQt::ButtonState ) ));
- m_lstSubMenus.append( subMenu );
- }
- }
-
- if ( !m_bIsRoot && m_bAddBookmark )
- {
- if ( m_parentMenu->count() > 0 )
- m_parentMenu->insertSeparator();
-
- if ( KBookmarkSettings::self()->m_quickactions )
- {
- KActionMenu * actionMenu = new KActionMenu( i18n("Quick Actions"), m_actionCollection, 0L );
- fillContextMenu( actionMenu->popupMenu(), m_parentAddress, 1 );
- actionMenu->plug( m_parentMenu );
- m_actions.append( actionMenu );
- }
- else
- {
- addAddBookmark();
- if ( extOwner() )
- addAddBookmarksList(); // FIXME
- addNewFolder();
- }
- }
-}
-
-void KBookmarkMenu::slotAddBookmarksList()
-{
- KExtendedBookmarkOwner *extOwner = dynamic_cast<KExtendedBookmarkOwner*>(m_pOwner);
- if (!extOwner)
- {
- kdWarning() << "erm, sorry ;-)" << endl;
- return;
- }
-
- KExtendedBookmarkOwner::QStringPairList list;
- extOwner->fillBookmarksList( list );
-
- KBookmarkGroup parentBookmark = m_pManager->findByAddress( m_parentAddress ).toGroup();
- Q_ASSERT(!parentBookmark.isNull());
- KBookmarkGroup group = parentBookmark.createNewFolder( m_pManager );
- if ( group.isNull() )
- return; // user canceled i guess
-
- KExtendedBookmarkOwner::QStringPairList::const_iterator it;
- for ( it = list.begin(); it != list.end(); ++it )
- group.addBookmark( m_pManager, (*it).first, KURL((*it).second) );
-
- m_pManager->emitChanged( parentBookmark );
-}
-
-
-void KBookmarkMenu::slotAddBookmark()
-{
- KBookmarkGroup parentBookmark;
- parentBookmark = m_pManager->addBookmarkDialog(m_pOwner->currentURL(), m_pOwner->currentTitle(), m_parentAddress);
- if (!parentBookmark.isNull())
- m_pManager->emitChanged( parentBookmark );
-}
-
-void KBookmarkMenu::slotNewFolder()
-{
- if ( !m_pOwner ) return; // this view doesn't handle bookmarks...
- KBookmarkGroup parentBookmark = m_pManager->findByAddress( m_parentAddress ).toGroup();
- Q_ASSERT(!parentBookmark.isNull());
- KBookmarkGroup group = parentBookmark.createNewFolder( m_pManager );
- if ( !group.isNull() )
- {
- KBookmarkGroup parentGroup = group.parentGroup();
- m_pManager->emitChanged( parentGroup );
- }
-}
-
-void KBookmarkMenu::slotBookmarkSelected( KAction::ActivationReason /*reason*/, TQt::ButtonState state )
-{
- kdDebug(7043) << "KBookmarkMenu::slotBookmarkSelected()" << endl;
- if ( !m_pOwner ) return; // this view doesn't handle bookmarks...
- const KAction* action = dynamic_cast<const KAction *>(sender());
- if(action)
- {
- const TQString& url = sender()->property("url").toString();
- m_pOwner->openBookmarkURL( url );
- emit openBookmark( url, state );
- }
-}
-
-void KBookmarkMenu::slotBookmarkSelected()
-{
- slotBookmarkSelected(KAction::PopupMenuActivation, Qt::NoButton);
-}
-
-KExtendedBookmarkOwner* KBookmarkMenu::extOwner()
-{
- return dynamic_cast<KExtendedBookmarkOwner*>(m_pOwner);
-}
-
-void KBookmarkMenu::slotNSLoad()
-{
- // only fill menu once
- m_parentMenu->disconnect(TQT_SIGNAL(aboutToShow()));
-
- // not NSImporter, but kept old name for BC reasons
- KBookmarkMenuNSImporter importer( m_pManager, this, m_actionCollection );
- importer.openBookmarks(s_highlightedImportLocation, s_highlightedImportType);
-}
-
-/********************************************************************/
-/********************************************************************/
-/********************************************************************/
-
-KBookmarkEditFields::KBookmarkEditFields(TQWidget *main, TQBoxLayout *vbox, FieldsSet fieldsSet)
-{
- bool isF = (fieldsSet != FolderFieldsSet);
-
- TQGridLayout *grid = new TQGridLayout( vbox, 2, isF ? 2 : 1 );
-
- m_title = new KLineEdit( main );
- grid->addWidget( m_title, 0, 1 );
- grid->addWidget( new TQLabel( m_title, i18n( "Name:" ), main ), 0, 0 );
- m_title->setFocus();
- if (isF)
- {
- m_url = new KLineEdit( main );
- grid->addWidget( m_url, 1, 1 );
- grid->addWidget( new TQLabel( m_url, i18n( "Location:" ), main ), 1, 0 );
- }
- else
- {
- m_url = 0;
- }
-
- main->setMinimumSize( 300, 0 );
-}
-
-void KBookmarkEditFields::setName(const TQString &str)
-{
- m_title->setText(str);
-}
-
-void KBookmarkEditFields::setLocation(const TQString &str)
-{
- m_url->setText(str);
-}
-
-/********************************************************************/
-/********************************************************************/
-/********************************************************************/
-
-// TODO - make the dialog use Properties as a title when in Modify mode... (dirk noticed the bug...)
-KBookmarkEditDialog::KBookmarkEditDialog(const TQString& title, const TQString& url, KBookmarkManager * mgr, BookmarkEditType editType, const TQString& address,
- TQWidget * parent, const char * name, const TQString& caption )
- : KDialogBase(parent, name, true, caption,
- (editType == InsertionMode) ? (User1|Ok|Cancel) : (Ok|Cancel),
- Ok, false, KGuiItem()),
- m_folderTree(0), m_mgr(mgr), m_editType(editType), m_address(address)
-{
- setButtonOK( (editType == InsertionMode) ? KGuiItem( i18n( "&Add" ), "bookmark_add") : i18n( "&Update" ) );
- if (editType == InsertionMode) {
- setButtonGuiItem( User1, KGuiItem( i18n( "&New Folder..." ), "folder_new") );
- }
-
- bool folder = url.isNull();
-
- m_main = new TQWidget( this );
- setMainWidget( m_main );
-
- TQBoxLayout *vbox = new TQVBoxLayout( m_main, 0, spacingHint() );
- KBookmarkEditFields::FieldsSet fs =
- folder ? KBookmarkEditFields::FolderFieldsSet
- : KBookmarkEditFields::BookmarkFieldsSet;
- m_fields = new KBookmarkEditFields(m_main, vbox, fs);
- m_fields->setName(title);
- if ( !folder )
- m_fields->setLocation(url);
-
- if ( editType == InsertionMode )
- {
- m_folderTree = KBookmarkFolderTree::createTree( m_mgr, m_main, name, m_address );
- connect( m_folderTree, TQT_SIGNAL( doubleClicked(TQListViewItem*) ),
- this, TQT_SLOT( slotDoubleClicked(TQListViewItem*) ) );
- vbox->addWidget( m_folderTree );
- connect( this, TQT_SIGNAL( user1Clicked() ), TQT_SLOT( slotUser1() ) );
- }
-}
-
-void KBookmarkEditDialog::slotDoubleClicked( TQListViewItem* item )
-{
- Q_ASSERT( m_folderTree );
- m_folderTree->setCurrentItem( item );
- accept();
-}
-
-void KBookmarkEditDialog::slotOk()
-{
- accept();
-}
-
-void KBookmarkEditDialog::slotCancel()
-{
- reject();
-}
-
-TQString KBookmarkEditDialog::finalAddress() const
-{
- Q_ASSERT( m_folderTree );
- return KBookmarkFolderTree::selectedAddress( m_folderTree );
-}
-
-TQString KBookmarkEditDialog::finalUrl() const
-{
- return m_fields->m_url ? m_fields->m_url->text() : TQString::null;
-}
-
-TQString KBookmarkEditDialog::finalTitle() const
-{
- return m_fields->m_title ? m_fields->m_title->text() : TQString::null;
-}
-
-void KBookmarkEditDialog::slotUser1()
-{
- // kdDebug(7043) << "KBookmarkEditDialog::slotUser1" << endl;
- Q_ASSERT( m_folderTree );
-
- TQString address = KBookmarkFolderTree::selectedAddress( m_folderTree );
- if ( address.isNull() ) return;
- KBookmarkGroup bm = m_mgr->findByAddress( address ).toGroup();
- Q_ASSERT(!bm.isNull());
- Q_ASSERT(m_editType == InsertionMode);
-
- KBookmarkGroup group = bm.createNewFolder( m_mgr );
- if ( !group.isNull() )
- {
- KBookmarkGroup parentGroup = group.parentGroup();
- m_mgr->emitChanged( parentGroup );
- }
- KBookmarkFolderTree::fillTree( m_folderTree, m_mgr );
-}
-
-/********************************************************************/
-/********************************************************************/
-/********************************************************************/
-
-static void fillGroup( TQListView* listview, KBookmarkFolderTreeItem * parentItem, KBookmarkGroup group, bool expandOpenGroups = true, const TQString& address = TQString::null )
-{
- bool noSubGroups = true;
- KBookmarkFolderTreeItem * lastItem = 0L;
- KBookmarkFolderTreeItem * item = 0L;
- for ( KBookmark bk = group.first() ; !bk.isNull() ; bk = group.next(bk) )
- {
- if ( bk.isGroup() )
- {
- KBookmarkGroup grp = bk.toGroup();
- item = new KBookmarkFolderTreeItem( parentItem, lastItem, grp );
- fillGroup( listview, item, grp, expandOpenGroups, address );
- if ( expandOpenGroups && grp.isOpen() )
- item->setOpen( true );
- lastItem = item;
- noSubGroups = false;
- }
- if (bk.address() == address) {
- listview->setCurrentItem( lastItem );
- listview->ensureItemVisible( item );
- }
- }
- if ( noSubGroups ) {
- parentItem->setOpen( true );
- }
-}
-
-TQListView* KBookmarkFolderTree::createTree( KBookmarkManager* mgr, TQWidget* parent, const char* name, const TQString& address )
-{
- TQListView *listview = new TQListView( parent, name );
-
- listview->setRootIsDecorated( false );
- listview->header()->hide();
- listview->addColumn( i18n("Bookmark"), 200 );
- listview->setSorting( -1, false );
- listview->setSelectionMode( TQListView::Single );
- listview->setAllColumnsShowFocus( true );
- listview->setResizeMode( TQListView::AllColumns );
- listview->setMinimumSize( 60, 100 );
-
- fillTree( listview, mgr, address );
-
- return listview;
-}
-
-void KBookmarkFolderTree::fillTree( TQListView *listview, KBookmarkManager* mgr, const TQString& address )
-{
- listview->clear();
-
- KBookmarkGroup root = mgr->root();
- KBookmarkFolderTreeItem * rootItem = new KBookmarkFolderTreeItem( listview, root );
- listview->setCurrentItem( rootItem );
- rootItem->setSelected( true );
- fillGroup( listview, rootItem, root, (address == root.groupAddress() || address.isNull()) ? true : false, address );
- rootItem->setOpen( true );
-}
-
-static KBookmarkFolderTreeItem* ft_cast( TQListViewItem *i )
-{
- return static_cast<KBookmarkFolderTreeItem*>( i );
-}
-
-TQString KBookmarkFolderTree::selectedAddress( TQListView *listview )
-{
- if ( !listview)
- return TQString::null;
- KBookmarkFolderTreeItem *item = ft_cast( listview->currentItem() );
- return item ? item->m_bookmark.address() : TQString::null;
-}
-
-void KBookmarkFolderTree::setAddress( TQListView *listview, const TQString & address )
-{
- KBookmarkFolderTreeItem* it = ft_cast( listview->firstChild() );
- while ( true ) {
- kdDebug(7043) << it->m_bookmark.address() << endl;
- it = ft_cast( it->itemBelow() );
- if ( !it )
- return;
- if ( it->m_bookmark.address() == address )
- break;
- }
- it->setSelected( true );
- listview->setCurrentItem( it );
-}
-
-/********************************************************************/
-/********************************************************************/
-/********************************************************************/
-
-// toplevel item
-KBookmarkFolderTreeItem::KBookmarkFolderTreeItem( TQListView *parent, const KBookmark & gp )
- : TQListViewItem(parent, i18n("Bookmarks")), m_bookmark(gp)
-{
- setPixmap(0, SmallIcon("bookmark"));
- setExpandable(true);
-}
-
-// group
-KBookmarkFolderTreeItem::KBookmarkFolderTreeItem( KBookmarkFolderTreeItem *parent, TQListViewItem *after, const KBookmarkGroup & gp )
- : TQListViewItem(parent, after, gp.fullText()), m_bookmark(gp)
-{
- setPixmap(0, SmallIcon( gp.icon() ) );
- setExpandable(true);
-}
-
-/********************************************************************/
-/********************************************************************/
-/********************************************************************/
-
-// NOTE - KBookmarkMenuNSImporter is really === KBookmarkMenuImporter
-// i.e, it is _not_ ns specific. and in KDE4 it should be renamed.
-
-void KBookmarkMenuNSImporter::openNSBookmarks()
-{
- openBookmarks( KNSBookmarkImporter::netscapeBookmarksFile(), "netscape" );
-}
-
-void KBookmarkMenuNSImporter::openBookmarks( const TQString &location, const TQString &type )
-{
- mstack.push(m_menu);
-
- KBookmarkImporterBase *importer = KBookmarkImporterBase::factory(type);
- if (!importer)
- return;
- importer->setFilename(location);
- connectToImporter(*importer);
- importer->parse();
-
- delete importer;
-}
-
-void KBookmarkMenuNSImporter::connectToImporter(const TQObject &importer)
-{
- connect( &importer, TQT_SIGNAL( newBookmark( const TQString &, const TQCString &, const TQString & ) ),
- TQT_SLOT( newBookmark( const TQString &, const TQCString &, const TQString & ) ) );
- connect( &importer, TQT_SIGNAL( newFolder( const TQString &, bool, const TQString & ) ),
- TQT_SLOT( newFolder( const TQString &, bool, const TQString & ) ) );
- connect( &importer, TQT_SIGNAL( newSeparator() ), TQT_SLOT( newSeparator() ) );
- connect( &importer, TQT_SIGNAL( endFolder() ), TQT_SLOT( endFolder() ) );
-}
-
-void KBookmarkMenuNSImporter::newBookmark( const TQString & text, const TQCString & url, const TQString & )
-{
- TQString _text = KStringHandler::csqueeze(text);
- _text.replace( '&', "&&" );
- KAction * action = new KBookmarkAction(_text, "html", 0, 0, "", m_actionCollection, 0);
- connect(action, TQT_SIGNAL( activated ( KAction::ActivationReason, TQt::ButtonState )),
- m_menu, TQT_SLOT( slotBookmarkSelected( KAction::ActivationReason, TQt::ButtonState ) ));
- action->setProperty( "url", url );
- action->setToolTip( url );
- action->plug( mstack.top()->m_parentMenu );
- mstack.top()->m_actions.append( action );
-}
-
-void KBookmarkMenuNSImporter::newFolder( const TQString & text, bool, const TQString & )
-{
- TQString _text = KStringHandler::csqueeze(text);
- _text.replace( '&', "&&" );
- KActionMenu * actionMenu = new KActionMenu( _text, "folder", m_actionCollection, 0L );
- actionMenu->plug( mstack.top()->m_parentMenu );
- mstack.top()->m_actions.append( actionMenu );
- KBookmarkMenu *subMenu = new KBookmarkMenu( m_pManager, m_menu->m_pOwner, actionMenu->popupMenu(),
- m_actionCollection, false,
- m_menu->m_bAddBookmark, TQString::null );
- connect( subMenu, TQT_SIGNAL( openBookmark( const TQString &, TQt::ButtonState ) ),
- m_menu, TQT_SIGNAL( openBookmark( const TQString &, TQt::ButtonState ) ));
- mstack.top()->m_lstSubMenus.append( subMenu );
-
- mstack.push(subMenu);
-}
-
-void KBookmarkMenuNSImporter::newSeparator()
-{
- mstack.top()->m_parentMenu->insertSeparator();
-}
-
-void KBookmarkMenuNSImporter::endFolder()
-{
- mstack.pop();
-}
-
-/********************************************************************/
-/********************************************************************/
-/********************************************************************/
-
-KBookmarkMenu::DynMenuInfo KBookmarkMenu::showDynamicBookmarks( const TQString &id )
-{
- TDEConfig config("kbookmarkrc", false, false);
- config.setGroup("Bookmarks");
-
- DynMenuInfo info;
- info.show = false;
-
- if (!config.hasKey("DynamicMenus")) {
- // upgrade path
- if (id == "netscape") {
- KBookmarkManager *manager = KBookmarkManager::userBookmarksManager();
- info.show = manager->root().internalElement().attribute("hide_nsbk") != "yes";
- info.location = KNSBookmarkImporter::netscapeBookmarksFile();
- info.type = "netscape";
- info.name = i18n("Netscape Bookmarks");
- } // else, no show
-
- } else {
- // have new version config
- if (config.hasGroup("DynamicMenu-" + id)) {
- config.setGroup("DynamicMenu-" + id);
- info.show = config.readBoolEntry("Show");
- info.location = config.readPathEntry("Location");
- info.type = config.readEntry("Type");
- info.name = config.readEntry("Name");
- } // else, no show
- }
-
- return info;
-}
-
-TQStringList KBookmarkMenu::dynamicBookmarksList()
-{
- TDEConfig config("kbookmarkrc", false, false);
- config.setGroup("Bookmarks");
-
- TQStringList mlist;
- if (config.hasKey("DynamicMenus"))
- mlist = config.readListEntry("DynamicMenus");
- else
- mlist << "netscape";
-
- return mlist;
-}
-
-void KBookmarkMenu::setDynamicBookmarks(const TQString &id, const DynMenuInfo &newMenu)
-{
- TDEConfig config("kbookmarkrc", false, false);
-
- // add group unconditionally
- config.setGroup("DynamicMenu-" + id);
- config.writeEntry("Show", newMenu.show);
- config.writePathEntry("Location", newMenu.location);
- config.writeEntry("Type", newMenu.type);
- config.writeEntry("Name", newMenu.name);
-
- TQStringList elist;
-
- config.setGroup("Bookmarks");
- if (!config.hasKey("DynamicMenus")) {
- if (newMenu.type != "netscape") {
- // update from old xbel method to new rc method
- // though only if not writing the netscape setting
- config.setGroup("DynamicMenu-" "netscape");
- DynMenuInfo xbelSetting;
- xbelSetting = showDynamicBookmarks("netscape");
- config.writeEntry("Show", xbelSetting.show);
- config.writePathEntry("Location", xbelSetting.location);
- config.writeEntry("Type", xbelSetting.type);
- config.writeEntry("Name", xbelSetting.name);
- }
- } else {
- elist = config.readListEntry("DynamicMenus");
- }
-
- // make sure list includes type
- config.setGroup("Bookmarks");
- if (elist.contains(id) < 1) {
- elist << id;
- config.writeEntry("DynamicMenus", elist);
- }
-
- config.sync();
-}
-
-#include "kbookmarkmenu.moc"
-#include "kbookmarkmenu_p.moc"