/*************************************************************************** * Copyright (C) 2005 by S�astien Laot * * slaout@linux62.org * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program 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 General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #ifndef TAG_H #define TAG_H #include #include #include #include #include #include class QPainter; class Tag; /** * @author S�astien Laot */ class State { public: /// LIST OF STATES: typedef QValueList List; public: /// CONSTRUCTOR AND DESTRUCTOR: State(const QString &id = QString(), Tag *tag = 0); ~State(); /// SET PROPERTIES: void setId(const QString &id) { m_id = id; } void setName(const QString &name) { m_name = name; } void setEmblem(const QString &emblem) { m_emblem = emblem; } void setBold(bool bold) { m_bold = bold; } void setItalic(bool italic) { m_italic = italic; } void setUnderline(bool underline) { m_underline = underline; } void setStrikeOut(bool strikeOut) { m_strikeOut = strikeOut; } void setTextColor(const QColor &color) { m_textColor = color; } void setFontName(const QString &font) { m_fontName = font; } void setFontSize(int size) { m_fontSize = size; } void setBackgroundColor(const QColor &color) { m_backgroundColor = color; } void setTextEquivalent(const QString &text) { m_textEquivalent = text; } void setOnAllTextLines(bool yes) { m_onAllTextLines = yes; } void setParentTag(Tag *tag) { m_parentTag = tag; } /// GET PROPERTIES: QString id() const { return m_id; } QString name() const { return m_name; } QString emblem() const { return m_emblem; } bool bold() const { return m_bold; } bool italic() const { return m_italic; } bool underline() const { return m_underline; } bool strikeOut() const { return m_strikeOut; } QColor textColor() const { return m_textColor; } QString fontName() const { return m_fontName; } int fontSize() const { return m_fontSize; } QColor backgroundColor() const { return m_backgroundColor; } QString textEquivalent() const { return m_textEquivalent; } bool onAllTextLines() const { return m_onAllTextLines; } Tag* parentTag() const { return m_parentTag; } /// HELPING FUNCTIONS: State *nextState(bool cycle = true); QString fullName(); QFont font(QFont base); QString toCSS(const QString &gradientFolderPath, const QString &gradientFolderName, const QFont &baseFont); static void merge(const List &states, State *result, int *emblemsCount, bool *haveInvisibleTags, const QColor &backgroundColor); void copyTo(State *other); private: /// PROPERTIES: QString m_id; QString m_name; QString m_emblem; bool m_bold; bool m_italic; bool m_underline; bool m_strikeOut; QColor m_textColor; QString m_fontName; int m_fontSize; QColor m_backgroundColor; QString m_textEquivalent; bool m_onAllTextLines; Tag *m_parentTag; }; /** A Tag is a category of Notes. * A Note can have 0, 1 or more Tags. * A Tag can have a unique State or several States. * @author S�astien Laot */ class Tag { public: /// LIST OF ALL TAGS IN THE APPLICATION: typedef QValueList List; static Tag::List all; static State* stateForId(const QString &id); static Tag* tagForKAction(KAction *action); static Tag* tagSimilarTo(Tag *tagToTest); static QMap loadTags(const QString &path = QString()/*, bool merge = false*/); /// << Load the tags contained in the XML file @p path or those in the application settings if @p path isEmpty(). If @p merge is true and a tag with the id of a tag that should be loaded already exist, the tag will get a new id. Otherwise, the tag will be dismissed. static void saveTags(); static void saveTagsTo(QValueList &list, const QString &fullPath); static void createDefaultTagsSet(const QString &file); static long getNextStateUid(); private: static long nextStateUid; public: /// CONSTRUCTOR AND DESTRUCTOR: Tag(/*State *firstState, const QString &name, bool inheritedBySiblings*/); ~Tag(); /// SET PROPERTIES: void setName(const QString &name); void setShortcut(const KShortcut &shortcut) { m_action->setShortcut(shortcut); } void setInheritedBySiblings(bool inherited) { m_inheritedBySiblings = inherited; } void appendState(State *state) { m_states.append(state); state->setParentTag(this); } void removeState(State *state) { m_states.remove(state); state->setParentTag(0); } /// GET PROPERTIES: QString name() const { return m_name; } KShortcut shortcut() const { return m_action->shortcut(); } bool inheritedBySiblings() const { return m_inheritedBySiblings; } State::List& states() const { return (State::List&)m_states; } int countStates() const { return m_states.count(); } void copyTo(Tag *other); private: /// PROPERTIES: QString m_name; KAction *m_action; bool m_inheritedBySiblings; State::List m_states; }; #include #include #include class QPainter; /** A menu item to indent icon and text (to keep place for a checkbox or a radiobutton on left). * You should not set any icon when adding this entry to the menu. * Instead, the constructor take the icon and the item take care to draw it itself. * Better suited to be used with StateMenuItem (or TagMenuItem). * @author S�astien Laot */ class IndentedMenuItem : public QCustomMenuItem { public: IndentedMenuItem(const QString &text, const QString &icon = "", const QString &shortcut = ""); ~IndentedMenuItem(); void paint(QPainter *painter, const QColorGroup &cg, bool active, bool enabled, int x, int y, int w, int h); QSize sizeHint(); bool fullSpan() { return true; } private: QString m_text; QString m_icon; QString m_shortcut; }; /** A menu item representing a State or a Tag. * @author S�astien Laot */ class StateMenuItem : public QCustomMenuItem { public: StateMenuItem(State *state, const QString &shortcut, bool withTagName = false); ~StateMenuItem(); void paint(QPainter *painter, const QColorGroup &cg, bool active, bool enabled, int x, int y, int w, int h); QSize sizeHint(); bool fullSpan() { return true; } private: State *m_state; QString m_name; QString m_shortcut; public: static QIconSet checkBoxIconSet(bool checked, QColorGroup cg); static QIconSet radioButtonIconSet(bool checked, QColorGroup cg); static int iconMargin() { return 5; } }; #endif // TAG_H