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