summaryrefslogtreecommitdiffstats
path: root/lib/kotext/KoUserStyleCollection.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kotext/KoUserStyleCollection.h')
-rw-r--r--lib/kotext/KoUserStyleCollection.h154
1 files changed, 154 insertions, 0 deletions
diff --git a/lib/kotext/KoUserStyleCollection.h b/lib/kotext/KoUserStyleCollection.h
new file mode 100644
index 000000000..709103999
--- /dev/null
+++ b/lib/kotext/KoUserStyleCollection.h
@@ -0,0 +1,154 @@
+/* This file is part of the KDE project
+ Copyright (C) 2005 David Faure <faure@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 KOUSERSTYLECOLLECTION_H
+#define KOUSERSTYLECOLLECTION_H
+
+class KoUserStyle;
+#include <koffice_export.h>
+#include <qstringlist.h>
+
+/**
+ * Generic style collection class, for all "user styles" (see KoUserStyle).
+ * To use this for a particular kind of style, derive from KoUserStyle (to add the properties)
+ * and derive from KoUserStyleCollection (to add loading, saving, as well as
+ * re-defined findStyle and addStyle in order to cast to the correct style class).
+ */
+class KOTEXT_EXPORT KoUserStyleCollection
+{
+public:
+ /**
+ * Constructor
+ * @param prefix used by generateUniqueName to prefix new style names
+ * (to avoid clashes between different kinds of styles)
+ */
+ KoUserStyleCollection( const QString& prefix );
+
+ /**
+ * Destructor
+ * Deletes all styles.
+ */
+ ~KoUserStyleCollection();
+
+ /**
+ * Erase all styles
+ */
+ void clear();
+
+ /**
+ * @return true if the collection is empty
+ */
+ bool isEmpty() const { return m_styleList.isEmpty(); }
+ /**
+ * @return the number of items in the collection
+ */
+ int count() const { return m_styleList.count(); }
+ /**
+ * @return the index of @p style in the collection
+ */
+ int indexOf( KoUserStyle* style ) const { return m_styleList.findIndex( style ); }
+
+ /**
+ * Return the list of all styles in the collection.
+ */
+ QValueList<KoUserStyle *> styleList() const { return m_styleList; }
+
+ /**
+ * Generate a new unique name, to create a style whose internal name
+ * differs from the internal name of all existing styles.
+ * The prefix passed to the constructor is used here.
+ */
+ QString generateUniqueName() const;
+
+ /**
+ * Return the list composed of the display-name of each style in the collection
+ */
+ QStringList displayNameList() const;
+
+ /**
+ * Find style based on the internal name @p name.
+ * If the style with that name can't be found, then<br>
+ * 1) if @p name equals @p defaultStyleName, return the first one, never 0<br>
+ * 2) otherwise return 0
+ */
+ KoUserStyle* findStyle( const QString & name, const QString& defaultStyleName ) const;
+
+ /**
+ * Find style based on the display name @p displayName.
+ * There could be 0, 1 or more than 1 style with that name,
+ * the method simply returns the first one found, or 0 if none was found.
+ * This is mostly useful to detect similar styles when importing styles
+ * from another document.
+ */
+ KoUserStyle* findStyleByDisplayName( const QString& displayName ) const;
+
+ /**
+ * Remove @p style from the collection. If the style isn't in the collection, nothing happens.
+ * The style mustn't be deleted yet; it is stored into a list of styles to delete in clear().
+ */
+ void removeStyle( KoUserStyle *style );
+
+ /**
+ * Reorder the styles in the collection.
+ * @param list the list of internal names of the styles
+ * WARNING, if an existing style isn't listed, it will be lost
+ */
+ void updateStyleListOrder( const QStringList& list );
+
+ /**
+ * Try adding @p sty to the collection.
+ * From the moment of this call, the collection owns the style.
+ *
+ * Either this succeeds, and @p sty is returned, or a style with the exact same
+ * internal name and display name is present already, in which case the existing style
+ * is updated, @p sty is deleted, and the existing style is returned.
+ *
+ * WARNING: @p sty can be deleted; use the returned value for any further processing.
+ */
+ KoUserStyle* addStyle( KoUserStyle* sty );
+
+ /**
+ * @return true if this collection only holds the default styles provided by the application
+ * When true, those styles don't need to be saved.
+ */
+ bool isDefault() const { return m_default; }
+ /**
+ * Set whether this collection only holds the default styles provided by the application
+ */
+ void setDefault( bool d ) { m_default = d; }
+
+protected:
+ KoUserStyleCollection( const KoUserStyleCollection& rhs ); ///< forbidden
+ void operator=( const KoUserStyleCollection& rhs ); ///< forbidden
+
+ QValueList<KoUserStyle *> m_styleList;
+
+private:
+ QValueList<KoUserStyle *> m_deletedStyles;
+ const QString m_prefix;
+ // can become d pointer if needed
+ mutable KoUserStyle *m_lastStyle; ///< Last style that was searched
+ bool m_default;
+ bool m_unused1;
+ bool m_unused2;
+ bool m_unused3;
+};
+
+
+#endif /* KOUSERSTYLECOLLECTION_H */
+