[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