[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-core-devel
Subject: Re: in-place-editing patch for konqueror bookmarks
From: Oelewapperke <oelewapperke () ulyssis ! org>
Date: 2003-01-16 15:54:26
[Download RAW message or body]
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On Wednesday 15 January 2003 16:23, David Faure wrote:
> On Wednesday 15 January 2003 15:08, Oelewapperke wrote:
> > indeed. I will post an additional patch to do that later. (btw I never
> > ever use the menu except to get to "edit bookmarks").
>
> But what matters is that it's implemented in a consistent and generic way.
> Both KBookmarkBar and the bookmark menu use KBookmarkMenu - it's the
> class for _any_ bookmark popupmenu (main menu or submenu). So I would
> expect that most of the code goes in there.
I have made a subclass of QPopupmenu to do this. I could easily make it
inherit from KBookmarkMenu, but it would only introduce overhead as I'm
not using any functionality of that class.
> > I couldn't use the normal KToolbarButton drawing routines, as they need
> > the button to show a QPopupmenu that is constructed ahead of time,
> > something I don't do (and why should I ? It slows the startup time
>
> You can pass a new but empty QPopupMenu to KToolbatButton, and connect
> to aboutToShow() (from QPopupMenu). This is what the KBookmarkMenu already
> does. Which means you don't even have to do that. Simply do the changes in
> KBookmarkMenu::refill() (which is called by slotAboutToShow()).
> Or do I miss something?
this isn't an option as refill() is not virtual, I can override it in a
subclass, but it wouldn't get called at all.
ipe_patch1 is for the directory kdelibs/kio/bookmarks
the 2 files kipebookmarkbar.cc and .h also for that directory (I am sorry but
I cannot cvs add, because I don't have write access)
konq_patch is for kdebase/konqueror
(right mouse menu is not yet implemented, but middle click to open in a new
tab is (for the menu's) )
still needs quite a few fixes, cleanups and additions, but I am in the middle
of my exams, and still learning about kde too, so it will probably take a
while.
Oelewapperke
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)
iD8DBQE+JtWyJFU6C5Uo8MgRAlu1AKDWr92NKsddQVrYa+3ejB0SbUDA5ACbB6FY
3xTGaBlS2MdcNs5SZEVJKkU=
=8AlR
-----END PGP SIGNATURE-----
["ipe_patch1" (text/x-diff)]
? kipebookmarkbar.cc
? kipebookmarkbar.h
Index: Makefile.am
===================================================================
RCS file: /home/kde/kdelibs/kio/bookmarks/Makefile.am,v
retrieving revision 1.1
diff -u -3 -p -b -r1.1 Makefile.am
--- Makefile.am 4 Mar 2002 13:40:28 -0000 1.1
+++ Makefile.am 16 Jan 2003 15:47:15 -0000
@@ -27,8 +27,9 @@ METASOURCES = AUTO
include_HEADERS = \
kbookmark.h kbookmarkbar.h kbookmarkdrag.h kbookmarkexporter.h \
- kbookmarkimporter.h kbookmarkmanager.h kbookmarkmenu.h kbookmarknotifier.h
+ kbookmarkimporter.h kbookmarkmanager.h kbookmarkmenu.h kbookmarknotifier.h \
+ kipebookmarkbar.h
libkbookmarks_la_SOURCES = \
kbookmark.cc kbookmarkbar.cc kbookmarkdrag.cc kbookmarkexporter.cc \
kbookmarkimporter.cc kbookmarkmanager.cc kbookmarkmenu.cc \
- kbookmarkmanager.skel kbookmarknotifier.skel
+ kbookmarkmanager.skel kbookmarknotifier.skel kipebookmarkbar.cc
Index: kbookmarkmanager.h
===================================================================
RCS file: /home/kde/kdelibs/kio/bookmarks/kbookmarkmanager.h,v
retrieving revision 1.17
diff -u -3 -p -b -r1.17 kbookmarkmanager.h
--- kbookmarkmanager.h 30 Mar 2002 07:13:27 -0000 1.17
+++ kbookmarkmanager.h 16 Jan 2003 15:47:15 -0000
@@ -266,4 +266,29 @@ protected:
virtual void virtual_hook( int id, void* data );
};
+class KIPEBookmarkOwner : public KBookmarkOwner
+{
+public:
+ /**
+ * These functions are called when a mouse event occurs over a bookmark
+ * by default, they do nothing.
+ * If they return "true" that means the user has given some sort of command, and you
+ * think the popupmenu should be closed
+ */
+ virtual bool mousePressEvent ( KBookmark & b, QMouseEvent * e )
+ {
+ return true;
+ }
+
+ virtual bool mouseReleaseEvent ( KBookmark & b, QMouseEvent * e )
+ {
+ return true;
+ }
+
+ virtual bool mouseDoubleClickEvent ( KBookmark & b, QMouseEvent * e )
+ {
+ return true;
+ }
+};
+
#endif
["kipebookmarkbar.cc" (text/x-c++src)]
/* This file is part of the KDE project
Copyright (C) 1999 Kurt Granroth <granroth@kde.org>
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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#include <qregexp.h>
#include <kaction.h>
#include <kbookmarkmenu.h>
#include <ktoolbar.h>
#include <kconfig.h>
#include <kpopupmenu.h>
#include <kipebookmarkbar.h>
KIPEBookmarkBar::KIPEBookmarkBar( KBookmarkManager* mgr,
KIPEBookmarkOwner *_owner, KToolBar *_toolBar,
KActionCollection *coll,
QObject *parent, const char *name )
: QObject( parent, name ), m_pOwner(_owner), m_toolBar(_toolBar),
m_actionCollection( coll ), m_pManager(mgr)
{
m_lstSubMenus.setAutoDelete( true );
connect( mgr, SIGNAL( changed(const QString &, const QString &) ),
SLOT( slotBookmarksChanged(const QString &) ) );
KBookmarkGroup toolbar = mgr->toolbar();
fillBookmarkBar( toolbar );
}
KIPEBookmarkBar::~KIPEBookmarkBar()
{
clear();
}
void KIPEBookmarkBar::clear()
{
m_lstSubMenus.clear();
if ( m_toolBar )
m_toolBar->clear();
}
void KIPEBookmarkBar::slotBookmarksChanged( const QString & group )
{
KBookmarkGroup tb = m_pManager->toolbar();
if ( tb.isNull() )
return;
if ( tb.address() == group )
{
clear();
fillBookmarkBar( tb );
} else
{
// Iterate recursively into child menus
QPtrListIterator<KBookmarkMenu> it( m_lstSubMenus );
for (; it.current(); ++it )
{
it.current()->slotBookmarksChanged( group );
}
}
}
void KIPEBookmarkBar::fillBookmarkBar(KBookmarkGroup & parent)
{
if (parent.isNull())
return;
for (KBookmark bm = parent.first(); !bm.isNull(); bm = parent.next(bm))
{
QString text = bm.text();
text.replace( '&', "&&" );
if ( bm.isSeparator() )
m_toolBar->insertLineSeparator();
else
{
m_toolBar->insertWidget( 0, 25, new KIPEToolBarButton( m_toolBar, bm, m_pOwner ) );
}
}
}
void KIPEBookmarkBar::slotBookmarkSelected()
{
if (!m_pOwner) return; // this view doesn't handle bookmarks...
m_pOwner->openBookmarkURL(QString::fromUtf8(sender()->name()));
}
#include "kipebookmarkbar.moc"
["kipebookmarkbar.h" (text/x-chdr)]
/* This file is part of the KDE project
Copyright (C) 1999 Kurt Granroth <granroth@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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#ifndef KIPEBOOKMARKBAR_H
#define KIPEBOOKMARKBAR_H
#include <qobject.h>
#include <qguardedptr.h>
#include <qptrlist.h>
#include <kbookmark.h>
#include <ktoolbar.h>
#include <qpopupmenu.h>
#include <kiconloader.h>
#include <ktoolbarbutton.h>
#include <qstyle.h>
#include <kbookmarkmanager.h>
class KBookmarkMenu;
class KIPEBookmarkOwner;
class KActionCollection;
class KAction;
/**
* This class provides a bookmark toolbar. Using this class is nearly
* identical to using @ref KBookmarkMenu so follow the directions
* there.
*/
class KIPEBookmarkBar : public QObject
{
Q_OBJECT
public:
/**
* Is a bookmark toolbar
*/
KIPEBookmarkBar( KBookmarkManager* mgr,
KIPEBookmarkOwner *owner, KToolBar *toolBar,
KActionCollection *,
QObject *parent = 0L, const char *name = 0L);
virtual ~KIPEBookmarkBar();
public slots:
void slotBookmarksChanged( const QString & );
void slotBookmarkSelected();
void clear();
protected:
void fillBookmarkBar( KBookmarkGroup & parent );
private:
KIPEBookmarkOwner *m_pOwner;
QGuardedPtr<KToolBar> m_toolBar;
KActionCollection *m_actionCollection;
KBookmarkManager *m_pManager;
QPtrList<KBookmarkMenu> m_lstSubMenus;
};
class KIPEBookmarkPopup : public QPopupMenu
{
Q_OBJECT
public:
KIPEBookmarkPopup(QPoint start, KBookmarkGroup & bm, KIPEBookmarkOwner * owner) : \
QPopupMenu(), _owner(owner), _bm(bm) {
// kdDebug() << k_funcinfo << endl;
insertItems();
popup( start );
}
bool isCheckable()
{
return false;
}
private:
KIPEBookmarkOwner * _owner;
int selecteditem;
KBookmarkGroup & _bm;
protected:
void insertItems()
{
clear();
int i = 0;
for (KBookmark bm = _bm.first(); !bm.isNull(); bm = _bm.next(bm))
{
QPixmap pm = KGlobal::iconLoader()->loadIcon( bm.icon() , KIcon::Toolbar);
insertItem( pm, bm.text(), this, SLOT( doNothing() ), i++ );
}
}
virtual void mousePressEvent( QMouseEvent * e )
{
int item = itemAtPos( e->pos() );
KBookmark b(bookmarkFromItem(item));
if (_owner->mousePressEvent(b, e)) close(false);
}
// virtual void mouseReleaseEvent( QMouseEvent * e )
// {
// int item = itemAtPos( e->pos() );
// KBookmark b(bookmarkFromItem(item));
//
// if (_owner->mouseReleaseEvent(b, e)) close(true);
// }
virtual void mouseDoubleClickEvent( QMouseEvent * e )
{
int item = itemAtPos( e->pos() );
KBookmark b(bookmarkFromItem(item));
if (_owner->mouseDoubleClickEvent(b, e)) close(false);
}
KBookmark bookmarkFromItem(const int item)
{
KBookmark bm;
int i = 0;
for (bm = _bm.first(); !bm.isNull(); bm = _bm.next(bm))
{
if (i == item) break;
i++;
}
assert(i == item);
return bm;
}
};
class KIPEToolBarButton : public KToolBarButton
{
Q_OBJECT
public:
KIPEToolBarButton(QWidget* w, KBookmark bm, KIPEBookmarkOwner * owner)
: KToolBarButton( bm.icon(), 0, w, NULL, bm.text()) ,_bm(bm), _owner(owner)
{
//kdDebug() << k_funcinfo << endl;
}
private:
KBookmark _bm;
KIPEBookmarkOwner * _owner;
protected:
void drawButton( QPainter *p)
{
KToolBarButton::drawButton(p);
if (! _bm.isNull())
if (_bm.isGroup())
{
QStyle::SFlags arrowFlags = QStyle::Style_Default;
if (isDown()) arrowFlags |= QStyle::Style_Down;
if (isEnabled()) arrowFlags |= QStyle::Style_Enabled;
style().drawPrimitive(QStyle::PE_ArrowDown, p,
QRect(width()-7, height()-7, 7, 7), colorGroup(),
arrowFlags, QStyleOption() );
}
}
virtual void mousePressEvent( QMouseEvent * me )
{
//kdDebug() << k_funcinfo << endl;
if (me->button() == Qt::RightButton)
{
return;
}
if (me->button() == Qt::LeftButton && _bm.isGroup() )
{
new KIPEBookmarkPopup( QPoint( mapToGlobal( QPoint(0, height() ) ).x(), \
mapToGlobal( QPoint(0, height() ) ).y() ), (KBookmarkGroup&) _bm, _owner); return;
}
KToolBarButton::mousePressEvent( me );
}
};
#endif // KIPEBOOKMARKBAR_H
["konq_patch" (text/x-diff)]
? preloader/Makefile.in
Index: konq_mainwindow.cc
===================================================================
RCS file: /home/kde/kdebase/konqueror/konq_mainwindow.cc,v
retrieving revision 1.1083.2.3
diff -u -3 -p -b -r1.1083.2.3 konq_mainwindow.cc
--- konq_mainwindow.cc 19 Dec 2002 10:58:13 -0000 1.1083.2.3
+++ konq_mainwindow.cc 16 Jan 2003 15:49:23 -0000
@@ -61,7 +61,7 @@
#include <dcopclient.h>
#include <kaboutdata.h>
-#include <kbookmarkbar.h>
+#include <kipebookmarkbar.h>
#include <kbookmarkmenu.h>
#include <kdebug.h>
#include <kedittoolbar.h>
@@ -304,7 +304,7 @@ void KonqMainWindow::initBookmarkBar()
if (!bar) return;
if (m_paBookmarkBar) return;
- m_paBookmarkBar = new KBookmarkBar( KonqBookmarkManager::self(), this, bar, \
m_bookmarkBarActionCollection, this ); + m_paBookmarkBar = new KIPEBookmarkBar( \
KonqBookmarkManager::self(), this, bar, m_bookmarkBarActionCollection, this );
// hide if empty
if (bar->count() == 0 )
Index: konq_mainwindow.h
===================================================================
RCS file: /home/kde/kdebase/konqueror/konq_mainwindow.h,v
retrieving revision 1.374
diff -u -3 -p -b -r1.374 konq_mainwindow.h
--- konq_mainwindow.h 8 Nov 2002 10:41:46 -0000 1.374
+++ konq_mainwindow.h 16 Jan 2003 15:49:23 -0000
@@ -40,6 +40,9 @@
#include "konq_combo.h"
#include "konq_frame.h"
+//FIXME only for debugging ...
+#include <kdebug.h>
+
class QFile;
class KAction;
class KActionCollection;
@@ -51,7 +54,7 @@ class KProgress;
class KSelectAction;
class KToggleAction;
class KonqBidiHistoryAction;
-class KBookmarkBar;
+class KIPEBookmarkBar;
class KonqView;
class KonqComboAction;
class KonqFrame;
@@ -82,7 +85,7 @@ namespace KParts {
class KonqMainWindow : public KParts::MainWindow,
- virtual public KBookmarkOwner,
+ virtual public KIPEBookmarkOwner,
public KonqFrameContainerBase
{
Q_OBJECT
@@ -437,6 +440,29 @@ protected slots:
void slotIconsChanged();
protected:
+
+ // KIPEBookmarkOwner implementation
+ virtual bool mousePressEvent ( KBookmark & b, QMouseEvent * e )
+ {
+ kdDebug() << "boem baby" << endl;
+ switch ( e->button() )
+ {
+ case LeftButton:
+ openBookmarkURL(QString::fromUtf8(b.url().url().utf8()));
+ break;
+ case RightButton:
+ openBookmarkURL("www.newsforge.org");
+ break;
+ case MidButton:
+ KonqOpenURLRequest req;
+ req.newTab = true;
+ req.newTabInFront = true;
+ openURL( 0L, QString::fromUtf8(b.url().url().utf8()), QString::null, req );
+ break;
+ }
+ return true; // true = close the menu
+ }
+
static QString detectNameFilter( QString & url );
virtual bool eventFilter(QObject*obj,QEvent *ev);
@@ -570,7 +596,7 @@ private:
KonqLogoAction *m_paAnimatedLogo;
- KBookmarkBar *m_paBookmarkBar;
+ KIPEBookmarkBar *m_paBookmarkBar;
KAction * m_paFindFiles;
KToggleAction *m_ptaUseHTML;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic