Alphabetical sorting now ignores case. Checked items now have grey text instead of...
[easylist] / src / 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         int listSize = list.size();\r
37         int pos = 0;\r
38         for(int i = 0; i < listSize; ++i)\r
39         {\r
40             int list2Size = list2.size();\r
41             for(int j = 0; j < list2Size; ++j)\r
42             {\r
43                 pos = j;\r
44                 if(list[i].toUpper() > list2[j].toUpper())\r
45                 {\r
46                     break;\r
47                 }\r
48             }\r
49             list2.append(list[i]);\r
50         }\r
51         list = list2;\r
52     }\r
53     foreach(QString item, list)\r
54     {\r
55         if(item.length() > 0)\r
56         {\r
57             MyCheckBox * checkBox;\r
58             if(item.startsWith("!"))\r
59             {\r
60                 checkBox = new MyCheckBox(item.right(item.length()-1));\r
61                 checkBox->setChecked(true);\r
62             }\r
63             else\r
64             {\r
65                 checkBox = new MyCheckBox(item);\r
66             }\r
67             connect(checkBox, SIGNAL(clicked()), this, SLOT(clickedAction()));\r
68             checkBoxes.append(checkBox);\r
69         }\r
70     }\r
71     sortCheckedToBottom();\r
72 }\r
73 \r
74 void MyCheckBoxContainer::set(QString item)\r
75 {\r
76     qDebug() << item;\r
77     clear();\r
78     add(item);\r
79 }\r
80 \r
81 void MyCheckBoxContainer::clear()\r
82 {\r
83     foreach(MyCheckBox * item, checkBoxes)\r
84     {\r
85         item->setParent(0);\r
86         item->deleteLater();\r
87     }\r
88     checkBoxes.clear();\r
89 }\r
90 \r
91 void MyCheckBoxContainer::sortCheckedToBottom()\r
92 {\r
93     if(sortToBottom)\r
94     {\r
95         qDebug() << "Sort checked to bottom";\r
96         QList<MyCheckBox * > tempList;\r
97         QList<MyCheckBox * > tempListChecked;\r
98         foreach(MyCheckBox * item, checkBoxes)\r
99         {\r
100             if(item->isChecked())\r
101             {\r
102                 if(sortAlphabetically)\r
103                 {\r
104                     int size = tempListChecked.size();\r
105                     int pos = 0;\r
106                     for(pos = 0; pos < size; ++pos)\r
107                     {\r
108                         if(tempListChecked[pos]->text().toUpper() > item->text().toUpper())\r
109                         {\r
110                             break;\r
111                         }\r
112                     }\r
113                     tempListChecked.insert(pos, item);\r
114                 }\r
115                 else\r
116                 {\r
117                     tempListChecked.append(item);\r
118                 }\r
119             }\r
120             else\r
121             {\r
122                 if(sortAlphabetically)\r
123                 {\r
124                     int size = tempList.size();\r
125                     int pos = 0;\r
126                     for(pos = 0; pos < size; ++pos)\r
127                     {\r
128                         if(tempList[pos]->text().toUpper() > item->text().toUpper())\r
129                         {\r
130                             break;\r
131                         }\r
132                     }\r
133                     tempList.insert(pos, item);\r
134                 }\r
135                 else\r
136                 {\r
137                     tempList.append(item);\r
138                 }\r
139             }\r
140         }\r
141         checkBoxes.clear();\r
142         checkBoxes.append(tempList);\r
143         checkBoxes.append(tempListChecked);\r
144         emit signalSorted();\r
145     }\r
146 }\r
147 \r
148 QList<MyCheckBox * > const & MyCheckBoxContainer::getCheckBoxes()\r
149 {\r
150     return checkBoxes;\r
151 }\r
152 \r
153 QString MyCheckBoxContainer::getListText()\r
154 {\r
155     QString listText("");\r
156     foreach(MyCheckBox * item, checkBoxes)\r
157     {\r
158         if(item->isChecked())\r
159         {\r
160             listText.append("!");\r
161         }\r
162         listText.append(item->text());\r
163         listText.append("\n");\r
164     }\r
165     return listText;\r
166 }\r
167 \r
168 void MyCheckBoxContainer::uncheckAll()\r
169 {\r
170     foreach(MyCheckBox * item, checkBoxes)\r
171     {\r
172         item->setChecked(false);\r
173     }\r
174     if(sortAlphabetically)\r
175     {\r
176         set(getListText());\r
177     }\r
178 }\r
179 \r
180 void MyCheckBoxContainer::removeChecked()\r
181 {\r
182     QMutableListIterator<MyCheckBox * > i(checkBoxes);\r
183     while (i.hasNext())\r
184     {\r
185         MyCheckBox * item = i.next();\r
186         if (item->isChecked())\r
187         {\r
188             item->setParent(0);\r
189             item->deleteLater();\r
190             i.remove();\r
191         }\r
192     }\r
193 }\r
194 \r
195 void MyCheckBoxContainer::setSortCheckedToBottom(bool sortToBottom)\r
196 {\r
197     this->sortToBottom = sortToBottom;\r
198     sortCheckedToBottom();\r
199 }\r
200 \r
201 void MyCheckBoxContainer::setSortAlphabetically(bool sortAlphabetically)\r
202 {\r
203     this->sortAlphabetically = sortAlphabetically;\r
204     if(sortAlphabetically)\r
205     {\r
206         set(getListText());\r
207     }\r
208 }\r
209 \r
210 void MyCheckBoxContainer::clickedAction()\r
211 {\r
212     qDebug() << "Clicked a MyCheckBox";\r
213     sortCheckedToBottom();\r
214 }\r