summaryrefslogtreecommitdiffstats
path: root/kdecore/ksycoca.h
diff options
context:
space:
mode:
Diffstat (limited to 'kdecore/ksycoca.h')
-rw-r--r--kdecore/ksycoca.h186
1 files changed, 186 insertions, 0 deletions
diff --git a/kdecore/ksycoca.h b/kdecore/ksycoca.h
new file mode 100644
index 000000000..00c72431f
--- /dev/null
+++ b/kdecore/ksycoca.h
@@ -0,0 +1,186 @@
+/* This file is part of the KDE libraries
+ * Copyright (C) 1999 Waldo Bastian <bastian@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 version 2 as published by the Free Software Foundation;
+ *
+ * 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.
+ **/
+
+#ifndef __ksycoca_h__
+#define __ksycoca_h__
+
+#include <dcopobject.h>
+#include <qobject.h>
+#include <qstringlist.h>
+#include "ksycocatype.h"
+#include <kdelibs_export.h>
+
+class QDataStream;
+class KSycocaPrivate;
+class KSycocaFactory;
+class KSycocaFactoryList;
+
+/*
+ * Sycoca file version number.
+ * If the existing file is outdated, it will not get read
+ * but instead we'll ask kded to regenerate a new one...
+*/
+#define KSYCOCA_VERSION 94
+
+/**
+ * @internal
+ * Read-only SYstem COnfiguration CAche
+ */
+class KDECORE_EXPORT KSycoca : public QObject, public DCOPObject
+{
+ Q_OBJECT
+ K_DCOP
+
+protected:
+ /**
+ * @internal
+ * Building database
+ */
+ KSycoca( bool /* buildDatabase */ );
+
+public:
+
+ /**
+ * Read-only database
+ */
+ KSycoca();
+
+ /**
+ * Get or create the only instance of KSycoca (read-only)
+ */
+ static KSycoca *self();
+
+ virtual ~KSycoca();
+
+ static int version();
+
+ /**
+ * @internal - called by factories in read-only mode
+ * This is how factories get a stream to an entry
+ */
+ QDataStream *findEntry(int offset, KSycocaType &type);
+ /**
+ * @internal - called by factories in read-only mode
+ */
+ QDataStream *findFactory( KSycocaFactoryId id);
+ /**
+ * @internal - returns kfsstnd stored inside database
+ */
+ QString kfsstnd_prefixes();
+ /**
+ * @internal - returns language stored inside database
+ */
+ QString language();
+
+ /**
+ * @internal - returns timestamp of database
+ *
+ * The database contains all changes made _before_ this time and
+ * _might_ contain changes made after that.
+ */
+ Q_UINT32 timeStamp();
+
+ /**
+ * @internal - returns update signature of database
+ *
+ * Signature that keeps track of changes to
+ * $KDEDIR/share/services/update_ksycoca
+ *
+ * Touching this file causes the database to be recreated
+ * from scratch.
+ */
+ Q_UINT32 updateSignature();
+
+ /**
+ * @internal - returns all directories with information
+ * stored inside sycoca.
+ */
+ QStringList allResourceDirs();
+
+ /**
+ * @internal - add a factory
+ */
+ void addFactory( KSycocaFactory * );
+
+ /**
+ * @internal
+ * @return true if building (i.e. if a KBuildSycoca);
+ */
+ virtual bool isBuilding() { return false; }
+
+ /**
+ * @internal - disables launching of kbuildsycoca
+ */
+ void disableAutoRebuild();
+
+ /**
+ * Determine relative path for a .desktop file from a full path and a resource name
+ */
+ static QString determineRelativePath( const QString & _fullpath, const char *_resource );
+
+ /**
+ * When you receive a "databaseChanged" signal, you can query here if
+ * a change has occurred in a specific resource type.
+ * @see KStandardDirs for the various resource types.
+ */
+ static bool isChanged(const char *type);
+
+ /**
+ * A read error occurs.
+ */
+ static void flagError();
+
+ /**
+ * Returns read error status and clears flag.
+ */
+ static bool readError();
+
+k_dcop:
+ /**
+ * internal function for receiving kded/kbuildsycoca's signal, when the sycoca file changes
+ */
+ void notifyDatabaseChanged(const QStringList &);
+
+signals:
+ /**
+ * Connect to this to get notified when the database changes
+ * (Usually apps showing icons do a 'refresh' to take into account the new mimetypes)
+ */
+ void databaseChanged();
+
+protected:
+ bool checkVersion(bool abortOnError=true);
+ bool openDatabase(bool openDummyIfNotFound=true);
+ void closeDatabase();
+ KSycocaFactoryList *m_lstFactories;
+ QDataStream *m_str;
+ bool bNoDatabase;
+ size_t m_sycoca_size;
+ const char *m_sycoca_mmap;
+ Q_UINT32 m_timeStamp;
+
+public:
+ static KSycoca *_self; // Internal use only.
+
+protected:
+ virtual void virtual_hook( int id, void* data );
+private:
+ KSycocaPrivate *d;
+};
+
+#endif