File indexing completed on 2024-10-13 08:07:09
0001 /*************************************************************************** 0002 * Copyright (C) 2003-2006 David Saxton <david@bluehaze.org> * 0003 * * 0004 * This program is free software; you can redistribute it and/or modify * 0005 * it under the terms of the GNU General Public License as published by * 0006 * the Free Software Foundation; either version 2 of the License, or * 0007 * (at your option) any later version. * 0008 ***************************************************************************/ 0009 0010 #ifndef ITEMLIBRARY_H 0011 #define ITEMLIBRARY_H 0012 0013 #include <KLocalizedString> 0014 0015 #include <QColor> 0016 #include <QMap> 0017 #include <QObject> 0018 0019 class Component; 0020 class Document; 0021 class Item; 0022 class ItemDocument; 0023 class ItemLibrary; 0024 class LibraryItem; 0025 inline ItemLibrary *itemLibrary(); 0026 0027 typedef QMap<QString, QString> QStringMap; 0028 typedef QMap<QString, QStringMap> QStringMapMap; 0029 typedef QMap<QString, QImage> ImageMap; 0030 typedef QList<LibraryItem *> LibraryItemList; 0031 0032 /** 0033 While the program is running, only one instance of this class is created. 0034 You can get it by calling itemLibrary() 0035 @short Holds the list of CNItems 0036 @author David Saxton 0037 */ 0038 class ItemLibrary : public QObject 0039 { 0040 Q_OBJECT 0041 public: 0042 ~ItemLibrary() override; 0043 /** 0044 * Append the given item into the library 0045 */ 0046 void addLibraryItem(LibraryItem *item); 0047 /** 0048 * Returns a list of items in the library 0049 */ 0050 LibraryItemList *items() 0051 { 0052 return &m_items; 0053 } 0054 /** 0055 * @return the LibraryItem for the item with the given type (id) const. 0056 */ 0057 LibraryItem *libraryItem(QString type) const; 0058 /** 0059 * Creates a new item with the given id, and returns a pointer to it 0060 */ 0061 Item *createItem(const QString &id, ItemDocument *itemDocument, bool newItem, const char *newId = nullptr, bool finishCreation = true); 0062 /** 0063 * Returns an image of the given component. As QPixmap::toImage is 0064 * a slow function, this will cache the result and return that for large 0065 * images. 0066 * @param component A pointer to the Component. 0067 * @param maxSize The maximum size (in pixels) before the image is 0068 * cached. 0069 */ 0070 QImage componentImage(Component *component, const uint maxSize = 36000); 0071 /** 0072 * Does similar to that above, but will not be able to return a description 0073 * if there is none saved on file (instead of the above, which falls back to 0074 * calling item->description()). 0075 * @param type the id of the item. 0076 * @param language the language code, e.g. "es". 0077 */ 0078 QString description(QString type, const QString &language) const; 0079 /** 0080 * @return if we have a description for the item in language. 0081 */ 0082 bool haveDescription(QString type, const QString &language) const; 0083 /** 0084 * Gives the type item the description. 0085 * @param type the type of item this description is for. 0086 * @param language the language code, e.g. "es". 0087 * @return whether the descriptions file could be saved. 0088 */ 0089 bool setDescription(QString type, const QString &description, const QString &language); 0090 /** 0091 * @return the directory containing the item descriptions. By default, 0092 * this is something like "/usr/share/apps/ktechlab/contexthelp/". But 0093 * can be changed by calling setDescriptionsDirectory. 0094 */ 0095 QString itemDescriptionsDirectory() const; 0096 /** 0097 * Stores the item descriptions directory in the users config. 0098 */ 0099 void setItemDescriptionsDirectory(QString dir); 0100 /** 0101 * @return the item description file for the given language. 0102 */ 0103 QString itemDescriptionsFile(const QString &language) const; 0104 /** 0105 * @return the string used for an empty item description - something like 0106 * "The help for English does not yet exist..". This is created by inserting 0107 * the current language name into m_emptyItemDescription; 0108 */ 0109 QString emptyItemDescription(const QString &language) const; 0110 /** 0111 * @return the list of language-codes that have item descriptions. 0112 */ 0113 QStringList descriptionLanguages() const 0114 { 0115 return m_itemDescriptions.keys(); 0116 } 0117 0118 protected: 0119 /** 0120 * Saves the item descriptions to the file specified in the config. 0121 * @return whether successful (e.g. if the file could be opened for 0122 * writing). 0123 */ 0124 bool saveDescriptions(const QString &language); 0125 void loadItemDescriptions(); 0126 void addComponents(); 0127 void addFlowParts(); 0128 void addMechanics(); 0129 void addDrawParts(); 0130 0131 ItemLibrary(); 0132 0133 LibraryItemList m_items; 0134 ImageMap m_imageMap; 0135 QStringMapMap m_itemDescriptions; // (Language, type) <--> description 0136 static KLocalizedString m_emptyItemDescription; // Description template for when a description does not yet exist 0137 0138 friend ItemLibrary *itemLibrary(); 0139 }; 0140 0141 inline ItemLibrary *itemLibrary() 0142 { 0143 // are we really sure we aren't calling new over and over again? 0144 static ItemLibrary *_itemLibrary = new ItemLibrary(); 0145 return _itemLibrary; 0146 } 0147 0148 #endif