1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
|
/***************************************************************************
* Copyright (C) 2005 by S�astien Laot *
* [email protected] *
* *
* 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 <tqstring.h>
#include <tqcolor.h>
#include <tqfont.h>
#include <tqvaluelist.h>
#include <kaction.h>
#include <kshortcut.h>
class TQPainter;
class Tag;
/**
* @author S�astien Laot
*/
class State
{
public:
/// LIST OF STATES:
typedef TQValueList<State*> List;
public:
/// CONSTRUCTOR AND DESTRUCTOR:
State(const TQString &id = TQString(), Tag *tag = 0);
~State();
/// SET PROPERTIES:
void setId(const TQString &id) { m_id = id; }
void setName(const TQString &name) { m_name = name; }
void setEmblem(const TQString &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 TQColor &color) { m_textColor = color; }
void setFontName(const TQString &font) { m_fontName = font; }
void setFontSize(int size) { m_fontSize = size; }
void setBackgroundColor(const TQColor &color) { m_backgroundColor = color; }
void setTextEquivalent(const TQString &text) { m_textEquivalent = text; }
void setOnAllTextLines(bool yes) { m_onAllTextLines = yes; }
void setParentTag(Tag *tag) { m_parentTag = tag; }
/// GET PROPERTIES:
TQString id() const { return m_id; }
TQString name() const { return m_name; }
TQString 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; }
TQColor textColor() const { return m_textColor; }
TQString fontName() const { return m_fontName; }
int fontSize() const { return m_fontSize; }
TQColor backgroundColor() const { return m_backgroundColor; }
TQString textEquivalent() const { return m_textEquivalent; }
bool onAllTextLines() const { return m_onAllTextLines; }
Tag* parentTag() const { return m_parentTag; }
/// HELPING FUNCTIONS:
State *nextState(bool cycle = true);
TQString fullName();
TQFont font(TQFont base);
TQString toCSS(const TQString &gradientFolderPath, const TQString &gradientFolderName, const TQFont &baseFont);
static void merge(const List &states, State *result, int *emblemsCount, bool *haveInvisibleTags, const TQColor &backgroundColor);
void copyTo(State *other);
private:
/// PROPERTIES:
TQString m_id;
TQString m_name;
TQString m_emblem;
bool m_bold;
bool m_italic;
bool m_underline;
bool m_strikeOut;
TQColor m_textColor;
TQString m_fontName;
int m_fontSize;
TQColor m_backgroundColor;
TQString 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 TQValueList<Tag*> List;
static Tag::List all;
static State* stateForId(const TQString &id);
static Tag* tagForKAction(KAction *action);
static Tag* tagSimilarTo(Tag *tagToTest);
static TQMap<TQString, TQString> loadTags(const TQString &path = TQString()/*, 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(TQValueList<Tag*> &list, const TQString &fullPath);
static void createDefaultTagsSet(const TQString &file);
static long getNextStateUid();
private:
static long nextStateUid;
public:
/// CONSTRUCTOR AND DESTRUCTOR:
Tag(/*State *firstState, const TQString &name, bool inheritedBySiblings*/);
~Tag();
/// SET PROPERTIES:
void setName(const TQString &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:
TQString 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:
TQString m_name;
KAction *m_action;
bool m_inheritedBySiblings;
State::List m_states;
};
#include <tqiconset.h>
#include <tqmenudata.h>
#include <tqstring.h>
class TQPainter;
/** 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 TQCustomMenuItem
{
public:
IndentedMenuItem(const TQString &text, const TQString &icon = "", const TQString &shortcut = "");
~IndentedMenuItem();
void paint(TQPainter *painter, const TQColorGroup &cg, bool active, bool enabled, int x, int y, int w, int h);
TQSize tqsizeHint();
bool fullSpan() { return true; }
private:
TQString m_text;
TQString m_icon;
TQString m_shortcut;
};
/** A menu item representing a State or a Tag.
* @author S�astien Laot
*/
class StateMenuItem : public TQCustomMenuItem
{
public:
StateMenuItem(State *state, const TQString &shortcut, bool withTagName = false);
~StateMenuItem();
void paint(TQPainter *painter, const TQColorGroup &cg, bool active, bool enabled, int x, int y, int w, int h);
TQSize tqsizeHint();
bool fullSpan() { return true; }
private:
State *m_state;
TQString m_name;
TQString m_shortcut;
public:
static TQIconSet checkBoxIconSet(bool checked, TQColorGroup cg);
static TQIconSet radioButtonIconSet(bool checked, TQColorGroup cg);
static int iconMargin() { return 5; }
};
#endif // TAG_H
|