[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-core-devel
Subject: [patch] kbookmarklistener
From: Alexander Kellett <kelletta () eidetica ! com>
Date: 2001-09-30 23:03:15
[Download RAW message or body]
Okay. Cleanup finished.
_skel removed from libkonq
fuzzy address matching is an option (defaults to false)
k_dcop_signals - emitDCOPsignal wrapper
no longer specific to keditbookmarks
This patch requires the dcop stuff just sent to kde-core-devel.
mvg,
Alex
--
Eidetica kelletta@eidetica.com
Kruislaan 400 tel +31 20 888 4090 fax 4001
NL 1098 SM Amsterdam
http://www.eidetica.com/ Alexander Kellett
vim: tw=70 cindent!
["kdebase-konqueror-keditbookmarks.cvsdiff.patch" (text/plain)]
? kbookmarklistener.kidl
? kbookmarklistener_skel.cpp
Index: Makefile.am
===================================================================
RCS file: /home/kde/kdebase/konqueror/keditbookmarks/Makefile.am,v
retrieving revision 1.9
diff -u -3 -p -r1.9 Makefile.am
--- Makefile.am 2000/12/20 13:51:26 1.9
+++ Makefile.am 2001/09/30 21:29:04
@@ -4,7 +4,8 @@ METASOURCES = AUTO
lib_LTLIBRARIES = keditbookmarks.la
-keditbookmarks_la_SOURCES = main.cpp toplevel.cpp commands.cpp
+keditbookmarks_la_SOURCES = main.cpp toplevel.cpp commands.cpp \
kbookmarklistener.skel +kbookmarklistener_DIR = ../../libkonq
keditbookmarks_la_LIBADD = $(top_builddir)/libkonq/libkonq.la
keditbookmarks_la_LDFLAGS = $(all_libraries) -module -avoid-version
Index: toplevel.cpp
===================================================================
RCS file: /home/kde/kdebase/konqueror/keditbookmarks/toplevel.cpp,v
retrieving revision 1.42
diff -u -3 -p -r1.42 toplevel.cpp
--- toplevel.cpp 2001/06/04 01:04:44 1.42
+++ toplevel.cpp 2001/09/30 21:29:05
@@ -17,6 +17,7 @@
*/
#include "toplevel.h"
+#include "kbookmarklistener.h"
#include "commands.h"
#include <kaction.h>
#include <kbookmarkdrag.h>
@@ -40,7 +41,7 @@
#include <assert.h>
#include <stdlib.h>
-//#define DEBUG_ADDRESSES
+#define DEBUG_ADDRESSES
// toplevel item (there should be only one!)
KEBListViewItem::KEBListViewItem(QListView *parent, const KBookmark & group )
@@ -112,7 +113,8 @@ QDragObject *KEBListView::dragObject() c
KEBTopLevel * KEBTopLevel::s_topLevel = 0L;
KEBTopLevel::KEBTopLevel( const QString & bookmarksFile )
- : KMainWindow(), m_commandHistory( actionCollection() )
+ : KMainWindow(), m_commandHistory( actionCollection() ),
+ DCOPObject("KBookmarkListener")
{
// Create the bookmark manager.
// It will be available in KBookmarkManager::self() from now.
@@ -150,13 +152,18 @@ KEBTopLevel::KEBTopLevel( const QString
SLOT(slotSelectionChanged() ) );
connect( kapp->clipboard(), SIGNAL(dataChanged()),
SLOT(slotClipboardDataChanged() ) );
- // If someone plays with konq's bookmarks while we're open, update.
+ // If someone plays with konq's bookmarks while we're open, update. (when \
applicable)
connect( KBookmarkManager::self(), SIGNAL( changed(const QString &, const \
QString &) ),
SLOT( slotBookmarksChanged(const QString &, const QString &) ) );
// Update GUI after executing command
connect( &m_commandHistory, SIGNAL( commandExecuted() ), SLOT( \
slotCommandExecuted() ) );
connect( &m_commandHistory, SIGNAL( documentRestored() ), SLOT( \
slotDocumentRestored() ) );
+ connectDCOPSignal(0, 0, "addBookmark_signal(QString,QString,QString,QString)",
+ "addBookmark(QString,QString,QString,QString)", false);
+ connectDCOPSignal(0, 0, "createNewFolder_signal(QString,QString)",
+ "createNewFolder(QString,QString)", false);
+
fillListView();
// Create the actions
@@ -374,6 +381,35 @@ void KEBTopLevel::slotNewFolder()
}
}
+QString KEBTopLevel::correctAddress(QString address)
+{
+ return KBookmarkManager::self()->findByAddress(address,true).address();
+}
+
+void KEBTopLevel::createNewFolder(QString text, QString address) // DCOP call
+{
+ //kdWarning() << "createNewFolder - " << text << "," << address << endl;
+ if (!m_bModified) return; // see comment below
+ address = correctAddress(address);
+ CreateCommand * cmd = new CreateCommand( i18n("Create Folder in Konqueror"), \
address, text, QString :: null, true ); + m_commandHistory.addCommand( cmd );
+}
+
+void KEBTopLevel::addBookmark(QString url, QString text, QString address, QString \
icon) // DCOP call +{
+ //kdWarning() << "addBookmark - " << url << "," << text << "," << address << \
endl; +
+ /* this check is needed as otherwise we get duplicates as updates are
+ * enabled for a non-modified document... maybe updates should only come
+ * through to keditbookmarks to remove this hack ... */
+
+ if (!m_bModified) return;
+
+ address = correctAddress(address);
+ CreateCommand * cmd = new CreateCommand( i18n("Add Bookmark in Konqueror"), \
address, text, icon, KURL(url) ); + m_commandHistory.addCommand( cmd );
+}
+
void KEBTopLevel::slotNewBookmark()
{
if( !m_pListView->selectedItem() )
@@ -538,6 +574,7 @@ void KEBTopLevel::setModified( bool modi
m_bModified = modified;
setCaption( i18n("Bookmark Editor"), m_bModified );
actionCollection()->action("file_save")->setEnabled( m_bModified );
+ KBookmarkManager::self()->setUpdate( !m_bModified ); // only update when \
non-modified }
void KEBTopLevel::slotDocumentRestored()
Index: toplevel.h
===================================================================
RCS file: /home/kde/kdebase/konqueror/keditbookmarks/toplevel.h,v
retrieving revision 1.16
diff -u -3 -p -r1.16 toplevel.h
--- toplevel.h 2001/06/04 01:04:44 1.16
+++ toplevel.h 2001/09/30 21:29:05
@@ -21,6 +21,7 @@
#include <kmainwindow.h>
#include <kbookmark.h>
+#include <kbookmarklistener.h>
#include <qlistview.h>
#include <klistview.h>
#include <kcommand.h>
@@ -62,7 +63,7 @@ protected:
virtual QDragObject *dragObject() const;
};
-class KEBTopLevel : public KMainWindow
+class KEBTopLevel : public KMainWindow, virtual public KBookmarkListener
{
Q_OBJECT
public:
@@ -71,6 +72,9 @@ public:
KEBTopLevel( const QString & bookmarksFile );
virtual ~KEBTopLevel();
+ void addBookmark( QString url, QString text, QString address, QString icon );
+ void createNewFolder( QString text, QString address );
+
bool save();
void setModified( bool modified = true );
@@ -132,6 +136,7 @@ protected:
void fillListView();
void pasteData( const QString & cmdName, QMimeSource * data, const QString & \
insertionAddress );
void itemMoved(QListViewItem * item, const QString & newAddress, bool copy);
+ QString correctAddress(QString address);
bool m_bModified;
bool m_bCanPaste;
["kdebase-libkonq.cvsdiff.patch" (text/plain)]
? kbookmarklistener.h
Index: Makefile.am
===================================================================
RCS file: /home/kde/kdebase/libkonq/Makefile.am,v
retrieving revision 1.86
diff -u -3 -p -r1.86 Makefile.am
--- Makefile.am 2001/05/19 01:06:41 1.86
+++ Makefile.am 2001/09/30 21:29:07
@@ -26,7 +26,7 @@ libkonq_la_LIBADD = $(LIB_KPARTS)
libkonq_la_SOURCES = konq_popupmenu.cc knewmenu.cc \
kbookmarkmenu.cc kbookmark.cc kbookmarkbar.cc kbookmarkimporter.cc \
kbookmarkexporter.cc kbookmarkmanager.cc kbookmarkmanager.skel \
- kbookmarkdrag.cc \
+ kbookmarkdrag.cc kbookmarklistener.stub \
konq_dirlister.cc \
kfileivi.cc konq_iconviewwidget.cc konq_imagepreviewjob.cc \
konq_settings.cc konq_drag.cc \
@@ -44,9 +44,9 @@ directorydir = $(kde_datadir)/kbookmar
METASOURCES = AUTO
-include_HEADERS = konq_popupmenu.h knewmenu.h \
+include_HEADERS = konq_popupmenu.h knewmenu.h kbookmarklistener.h \
kbookmark.h kbookmarkmenu.h kbookmarkbar.h kbookmarkimporter.h \
- kbookmarkexporter.h kbookmarkmanager.h kbookmarkdrag.h \
+ kbookmarkexporter.h kbookmarkmanager.h kbookmarkdrag.h kbookmarklistener_stub.h \
konq_dirlister.h konq_fileitem.h konq_mimetyperesolver.h \
kfileivi.h konq_drag.h konq_iconviewwidget.h konq_imagepreviewjob.h \
konq_defaults.h konq_settings.h \
Index: kbookmark.cc
===================================================================
RCS file: /home/kde/kdebase/libkonq/kbookmark.cc,v
retrieving revision 1.88
diff -u -3 -p -r1.88 kbookmark.cc
--- kbookmark.cc 2001/07/08 23:43:08 1.88
+++ kbookmark.cc 2001/09/30 21:29:07
@@ -17,6 +17,8 @@
*/
#include "kbookmark.h"
+#include "kbookmarklistener.h"
+#include "kbookmarklistener_stub.h"
#include <kdebug.h>
#include <kglobal.h>
#include <kmimetype.h>
@@ -28,6 +30,8 @@
#include <qtextstream.h>
#include <klocale.h>
#include <assert.h>
+#include <kapp.h>
+#include <dcopclient.h>
#include "konq_faviconmgr.h"
@@ -107,7 +111,13 @@ KBookmarkGroup KBookmarkGroup::createNew
QDomElement textElem = doc.createElement( "title" );
groupElem.appendChild( textElem );
textElem.appendChild( doc.createTextNode( txt ) );
- return KBookmarkGroup(groupElem);
+
+ KBookmarkGroup grp(groupElem);
+
+ emit KBookmarkListener::createNewFolder_signal( grp.fullText(), grp.address() );
+
+ return grp;
+
}
KBookmark KBookmarkGroup::createNewSeparator()
@@ -160,8 +170,12 @@ KBookmark KBookmarkGroup::addBookmark( c
QDomElement textElem = doc.createElement( "title" );
elem.appendChild( textElem );
textElem.appendChild( doc.createTextNode( text ) );
+
+ KBookmark bk(elem);
+
+ emit KBookmarkListener::addBookmark_signal( url.url(), text, bk.address(), icon );
- return KBookmark(elem);
+ return bk;
}
void KBookmarkGroup::deleteBookmark( KBookmark bk )
Index: kbookmarkmanager.cc
===================================================================
RCS file: /home/kde/kdebase/libkonq/kbookmarkmanager.cc,v
retrieving revision 1.13
diff -u -3 -p -r1.13 kbookmarkmanager.cc
--- kbookmarkmanager.cc 2001/05/13 11:56:32 1.13
+++ kbookmarkmanager.cc 2001/09/30 21:29:07
@@ -50,6 +50,8 @@ KBookmarkManager::KBookmarkManager( cons
delete s_pSelf;
s_pSelf = this;
+ m_update = true;
+
if (bookmarksFile.isEmpty())
m_bookmarksFile = locateLocal("data", QString::fromLatin1("konqueror/bookmarks.xml"));
else
@@ -74,6 +76,11 @@ KBookmarkManager::~KBookmarkManager()
s_pSelf = 0L;
}
+void KBookmarkManager::setUpdate(bool update)
+{
+ m_update = update;
+}
+
void KBookmarkManager::parse()
{
//kdDebug(1203) << "KBookmarkManager::parse " << m_bookmarksFile << endl;
@@ -216,26 +223,40 @@ KBookmarkGroup KBookmarkManager::toolbar
return KBookmarkGroup(root().findToolbar());
}
-KBookmark KBookmarkManager::findByAddress( const QString & address )
+KBookmark KBookmarkManager::findByAddress( const QString & address, bool tolerant )
{
//kdDebug(1203) << "KBookmarkManager::findByAddress " << address << endl;
KBookmark result = root();
// The address is something like /5/10/2
- QStringList addresses = QStringList::split('/',address);
- for ( QStringList::Iterator it = addresses.begin() ; it != addresses.end() ; ++it )
+ QStringList addresses = QStringList::split(QRegExp("[/+]"),address);
+ kdWarning() << addresses.join(",") << endl;
+ for ( QStringList::Iterator it = addresses.begin() ; it != addresses.end() ; )
{
+ bool append = ((*it) == "+");
uint number = (*it).toUInt();
- //kdDebug(1203) << "KBookmarkManager::findByAddress " << number << endl;
ASSERT(result.isGroup());
KBookmarkGroup group = result.toGroup();
- KBookmark bk = group.first();
- for ( uint i = 0 ; i < number ; ++i )
+ KBookmark bk = group.first(), lbk = bk; // last non-null bookmark
+ for ( uint i = 0 ; ( (i<number) || append ) && !bk.isNull() ; ++i ) {
+ lbk = bk;
bk = group.next(bk);
- ASSERT(!bk.isNull());
+ //kdWarning() << i << endl;
+ }
+ it++;
+ int shouldBeGroup = !bk.isGroup() && (it != addresses.end());
+ if ( tolerant && ( bk.isNull() || shouldBeGroup ) ) {
+ if (!lbk.isNull()) result = lbk;
+ //kdWarning() << "break" << endl;
+ break;
+ }
+ //kdWarning() << "found section" << endl;
result = bk;
}
- if (result.isNull())
+ if (result.isNull()) {
kdWarning() << "KBookmarkManager::findByAddress: couldn't find item " << address << endl;
+ ASSERT(!tolerant);
+ }
+ //kdWarning() << "found " << result.address() << endl;
return result;
}
@@ -254,8 +275,10 @@ void KBookmarkManager::emitChanged( KBoo
//emit changed( group );
}
-void KBookmarkManager::notifyCompleteChange( QString caller )
+void KBookmarkManager::notifyCompleteChange( QString caller ) // DCOP call
{
+ if (!m_update) return;
+
//kdDebug(1203) << "KBookmarkManager::notifyCompleteChange" << endl;
// The bk editor tells us we should reload everything
// Reparse
@@ -271,6 +294,8 @@ void KBookmarkManager::notifyCompleteCha
void KBookmarkManager::notifyChanged( QString groupAddress ) // DCOP call
{
+ if (!m_update) return;
+
// Reparse (the whole file, no other choice)
// Of course, if we are the emitter this is a bit stupid....
parse();
Index: kbookmarkmanager.h
===================================================================
RCS file: /home/kde/kdebase/libkonq/kbookmarkmanager.h,v
retrieving revision 1.7
diff -u -3 -p -r1.7 kbookmarkmanager.h
--- kbookmarkmanager.h 2001/02/26 23:16:58 1.7
+++ kbookmarkmanager.h 2001/09/30 21:29:07
@@ -68,6 +68,13 @@ public:
~KBookmarkManager();
+
+ /**
+ * Set the update flag.
+ * @param update iff true will KBookmarkManager listen to DCOP update requests.
+ */
+ void KBookmarkManager::setUpdate(bool update);
+
/**
* Save the bookmarks to the XML file on disk.
* @return true if saving was successful
@@ -102,7 +109,7 @@ public:
* @return the bookmark designated by @p address
* @see KBookmark::address
*/
- KBookmark findByAddress( const QString & address );
+ KBookmark findByAddress( const QString & address, bool tolerate = false );
/**
* @internal (for KBookmarkGroup)
@@ -165,6 +172,7 @@ protected:
void convertAttribute( QDomElement elem, const QString & oldName, const QString & newName );
QString m_bookmarksFile;
QDomDocument m_doc;
+ bool m_update;
static KBookmarkManager* s_pSelf;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic