Changed code drastically. Support transition effect between views. Added uncheck...
[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 }\r
12 \r
13 MyCheckBoxContainer::~MyCheckBoxContainer()\r
14 {\r
15     --instances;\r
16     qDebug() << "MyCheckBoxContainer instances left:" << instances;\r
17     clear();\r
18 }\r
19 \r
20 MyCheckBoxContainer * MyCheckBoxContainer::getInstance()\r
21 {\r
22     if(instance == 0)\r
23     {\r
24         instance = new MyCheckBoxContainer();\r
25     }\r
26     return instance;\r
27 }\r
28 \r
29 void MyCheckBoxContainer::add(QString item)\r
30 {\r
31     QStringList list = item.split("\n");\r
32     foreach(QString item, list)\r
33     {\r
34         if(item.length() > 0)\r
35         {\r
36             MyCheckBox * checkBox;\r
37             if(item.startsWith("!"))\r
38             {\r
39                 checkBox = new MyCheckBox(item.right(item.length()-1));\r
40                 checkBox->setChecked(true);\r
41             }\r
42             else\r
43             {\r
44                 checkBox = new MyCheckBox(item);\r
45             }\r
46             connect(checkBox, SIGNAL(clicked()), this, SLOT(clickedAction()));\r
47             checkBoxes.append(checkBox);\r
48         }\r
49     }\r
50     sortCheckedToBottom();\r
51 }\r
52 \r
53 void MyCheckBoxContainer::set(QString item)\r
54 {\r
55     clear();\r
56     add(item);\r
57 }\r
58 \r
59 void MyCheckBoxContainer::clear()\r
60 {\r
61     foreach(MyCheckBox * item, checkBoxes)\r
62     {\r
63         item->setParent(0);\r
64         item->deleteLater();\r
65     }\r
66     checkBoxes.clear();\r
67 }\r
68 \r
69 void MyCheckBoxContainer::sortCheckedToBottom()\r
70 {\r
71     if(sortToBottom)\r
72     {\r
73         qDebug() << "Sort checked to bottom";\r
74         QList<MyCheckBox * > tempList;\r
75         QList<MyCheckBox * > tempListChecked;\r
76         foreach(MyCheckBox * item, checkBoxes)\r
77         {\r
78             if(item->isChecked())\r
79             {\r
80                 tempListChecked.append(item);\r
81             }\r
82             else\r
83             {\r
84                 tempList.append(item);\r
85             }\r
86         }\r
87         checkBoxes.clear();\r
88         checkBoxes.append(tempList);\r
89         checkBoxes.append(tempListChecked);\r
90         emit signalSorted();\r
91     }\r
92 }\r
93 \r
94 QList<MyCheckBox * > const & MyCheckBoxContainer::getCheckBoxes()\r
95 {\r
96     return checkBoxes;\r
97 }\r
98 \r
99 QString MyCheckBoxContainer::getListText()\r
100 {\r
101     QString listText("");\r
102     foreach(MyCheckBox * item, checkBoxes)\r
103     {\r
104         if(item->isChecked())\r
105         {\r
106             listText.append("!");\r
107         }\r
108         listText.append(item->text());\r
109         listText.append("\n");\r
110     }\r
111     return listText;\r
112 }\r
113 \r
114 void MyCheckBoxContainer::uncheckAll()\r
115 {\r
116     foreach(MyCheckBox * item, checkBoxes)\r
117     {\r
118         item->setChecked(false);\r
119     }\r
120 }\r
121 \r
122 void MyCheckBoxContainer::removeChecked()\r
123 {\r
124     QMutableListIterator<MyCheckBox * > i(checkBoxes);\r
125     while (i.hasNext())\r
126     {\r
127         MyCheckBox * item = i.next();\r
128         if (item->isChecked())\r
129         {\r
130             item->setParent(0);\r
131             item->deleteLater();\r
132             i.remove();\r
133         }\r
134     }\r
135 }\r
136 \r
137 void MyCheckBoxContainer::setSortCheckedToBottom(bool sortToBottom)\r
138 {\r
139     this->sortToBottom = sortToBottom;\r
140     sortCheckedToBottom();\r
141 }\r
142 \r
143 void MyCheckBoxContainer::clickedAction()\r
144 {\r
145     qDebug() << "Clicked a MyCheckBox";\r
146     sortCheckedToBottom();\r
147 }\r