Added include for QTimer in header file.
[easylist] / mycheckboxcontainer.cpp
1 #include "mycheckboxcontainer.h"\r
2 \r
3 MyCheckBoxContainer * MyCheckBoxContainer::instance = 0;\r
4 int MyCheckBoxContainer::instances = 0;\r
5 \r
6 MyCheckBoxContainer::MyCheckBoxContainer()\r
7 {\r
8     ++instances;\r
9     qDebug() << "MyCheckBoxContainer instances:" << instances;\r
10     sortToBottom = false;\r
11     sortAlphabetically = false;\r
12 }\r
13 \r
14 MyCheckBoxContainer::~MyCheckBoxContainer()\r
15 {\r
16     --instances;\r
17     qDebug() << "MyCheckBoxContainer instances left:" << instances;\r
18     clear();\r
19 }\r
20 \r
21 MyCheckBoxContainer * MyCheckBoxContainer::getInstance()\r
22 {\r
23     if(instance == 0)\r
24     {\r
25         instance = new MyCheckBoxContainer();\r
26     }\r
27     return instance;\r
28 }\r
29 \r
30 void MyCheckBoxContainer::add(QString item)\r
31 {\r
32     QStringList list = item.split("\n");\r
33     QStringList list2;\r
34     if(sortAlphabetically)\r
35     {\r
36         list2.append(list.takeFirst());\r
37         int listSize = list.size();\r
38         int pos = 0;\r
39         bool inserted = false;\r
40         for(int i = 0; i < listSize; ++i)\r
41         {\r
42             inserted = false;\r
43             int list2Size = list2.size();\r
44             for(int j = 0; j < list2Size; ++j)\r
45             {\r
46                 pos = j;\r
47                 if(list[i].toUpper() < list2[j].toUpper())\r
48                 {\r
49                     list2.insert(pos, list[i]);\r
50                     inserted = true;\r
51                     break;\r
52                 }\r
53             }\r
54             if(inserted == false)\r
55             {\r
56                 list2.append(list[i]);\r
57             }\r
58         }\r
59         list = list2;\r
60     }\r
61     qDebug() << "list" << list;\r
62     foreach(QString item, list)\r
63     {\r
64         if(item.length() > 0)\r
65         {\r
66             MyCheckBox * checkBox;\r
67             if(item.startsWith("!"))\r
68             {\r
69                 checkBox = new MyCheckBox(item.right(item.length()-1));\r
70                 checkBox->setChecked(true);\r
71             }\r
72             else\r
73             {\r
74                 checkBox = new MyCheckBox(item);\r
75             }\r
76             connect(checkBox, SIGNAL(clicked()), this, SLOT(clickedAction()));\r
77             checkBoxes.append(checkBox);\r
78         }\r
79     }\r
80     sortCheckedToBottom();\r
81 }\r
82 \r
83 void MyCheckBoxContainer::set(QString item)\r
84 {\r
85     clear();\r
86     add(item);\r
87 }\r
88 \r
89 void MyCheckBoxContainer::clear()\r
90 {\r
91     foreach(MyCheckBox * item, checkBoxes)\r
92     {\r
93         item->setParent(0);\r
94         item->deleteLater();\r
95     }\r
96     checkBoxes.clear();\r
97 }\r
98 \r
99 void MyCheckBoxContainer::sortCheckedToBottom()\r
100 {\r
101     if(sortToBottom)\r
102     {\r
103         qDebug() << "Sort checked to bottom";\r
104         QList<MyCheckBox * > tempList;\r
105         QList<MyCheckBox * > tempListChecked;\r
106         foreach(MyCheckBox * item, checkBoxes)\r
107         {\r
108             if(item->isChecked())\r
109             {\r
110                 if(sortAlphabetically)\r
111                 {\r
112                     int size = tempListChecked.size();\r
113                     int pos = 0;\r
114                     for(pos = 0; pos < size; ++pos)\r
115                     {\r
116                         if(tempListChecked[pos]->text().toUpper() > item->text().toUpper())\r
117                         {\r
118                             break;\r
119                         }\r
120                     }\r
121                     tempListChecked.insert(pos, item);\r
122                 }\r
123                 else\r
124                 {\r
125                     tempListChecked.append(item);\r
126                 }\r
127             }\r
128             else\r
129             {\r
130                 if(sortAlphabetically)\r
131                 {\r
132                     int size = tempList.size();\r
133                     int pos = 0;\r
134                     for(pos = 0; pos < size; ++pos)\r
135                     {\r
136                         if(tempList[pos]->text().toUpper() > item->text().toUpper())\r
137                         {\r
138                             break;\r
139                         }\r
140                     }\r
141                     tempList.insert(pos, item);\r
142                 }\r
143                 else\r
144                 {\r
145                     tempList.append(item);\r
146                 }\r
147             }\r
148         }\r
149         checkBoxes.clear();\r
150         checkBoxes.append(tempList);\r
151         checkBoxes.append(tempListChecked);\r
152     }\r
153     emit signalSorted();\r
154 }\r
155 \r
156 QList<MyCheckBox * > const & MyCheckBoxContainer::getCheckBoxes()\r
157 {\r
158     return checkBoxes;\r
159 }\r
160 \r
161 QString MyCheckBoxContainer::getListText()\r
162 {\r
163     QString listText("");\r
164     foreach(MyCheckBox * item, checkBoxes)\r
165     {\r
166         if(item->isChecked())\r
167         {\r
168             listText.append("!");\r
169         }\r
170         listText.append(item->text());\r
171         listText.append("\n");\r
172     }\r
173     return listText;\r
174 }\r
175 \r
176 void MyCheckBoxContainer::uncheckAll()\r
177 {\r
178     foreach(MyCheckBox * item, checkBoxes)\r
179     {\r
180         item->setChecked(false);\r
181     }\r
182     if(sortAlphabetically)\r
183     {\r
184         set(getListText());\r
185     }\r
186 }\r
187 \r
188 void MyCheckBoxContainer::removeChecked()\r
189 {\r
190     QMutableListIterator<MyCheckBox * > i(checkBoxes);\r
191     while (i.hasNext())\r
192     {\r
193         MyCheckBox * item = i.next();\r
194         if (item->isChecked())\r
195         {\r
196             item->setParent(0);\r
197             item->deleteLater();\r
198             i.remove();\r
199         }\r
200     }\r
201 }\r
202 \r
203 void MyCheckBoxContainer::setSortCheckedToBottom(bool sortToBottom)\r
204 {\r
205     this->sortToBottom = sortToBottom;\r
206     sortCheckedToBottom();\r
207 }\r
208 \r
209 void MyCheckBoxContainer::setSortAlphabetically(bool sortAlphabetically)\r
210 {\r
211     this->sortAlphabetically = sortAlphabetically;\r
212     if(sortAlphabetically)\r
213     {\r
214         set(getListText());\r
215     }\r
216 }\r
217 \r
218 void MyCheckBoxContainer::clickedAction()\r
219 {\r
220     qDebug() << "Clicked a MyCheckBox";\r
221     sortCheckedToBottom();\r
222 }\r