OSDN Git Service

Add logic to display stacks in notebook tree
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / dialog / WatchFolder.java
1 /*\r
2  * This file is part of NeverNote \r
3  * Copyright 2009 Randy Baumgarte\r
4  * \r
5  * This file may be licensed under the terms of of the\r
6  * GNU General Public License Version 2 (the ``GPL'').\r
7  *\r
8  * Software distributed under the License is distributed\r
9  * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either\r
10  * express or implied. See the GPL for the specific language\r
11  * governing rights and limitations.\r
12  *\r
13  * You should have received a copy of the GPL along with this\r
14  * program. If not, go to http://www.gnu.org/licenses/gpl.html\r
15  * or write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\r
17  *\r
18 */\r
19 \r
20 package cx.fbn.nevernote.dialog;\r
21 \r
22 import java.util.ArrayList;\r
23 import java.util.List;\r
24 \r
25 import com.evernote.edam.type.Notebook;\r
26 import com.trolltech.qt.core.QModelIndex;\r
27 import com.trolltech.qt.core.Qt.ItemDataRole;\r
28 import com.trolltech.qt.gui.QAbstractItemView.SelectionBehavior;\r
29 import com.trolltech.qt.gui.QAbstractItemView.SelectionMode;\r
30 import com.trolltech.qt.gui.QApplication;\r
31 import com.trolltech.qt.gui.QDialog;\r
32 import com.trolltech.qt.gui.QFontMetrics;\r
33 import com.trolltech.qt.gui.QHBoxLayout;\r
34 import com.trolltech.qt.gui.QIcon;\r
35 import com.trolltech.qt.gui.QPushButton;\r
36 import com.trolltech.qt.gui.QTableWidget;\r
37 import com.trolltech.qt.gui.QTableWidgetItem;\r
38 import com.trolltech.qt.gui.QVBoxLayout;\r
39 \r
40 import cx.fbn.nevernote.sql.WatchFolderRecord;\r
41 \r
42 public class WatchFolder extends QDialog {\r
43         private final QPushButton               okButton;\r
44         private final QPushButton               cancelButton;\r
45         private final QPushButton               addButton;\r
46         private final QPushButton               editButton;\r
47         private final QPushButton               deleteButton;\r
48         private boolean                                 okClicked;\r
49         public final QTableWidget               table;\r
50         private final List<Notebook>    notebooks;\r
51         private final List<WatchFolderRecord> records;\r
52         private final String iconPath = new String("classpath:cx/fbn/nevernote/icons/");\r
53         \r
54         public WatchFolder(List<WatchFolderRecord> w, List<Notebook> n) {\r
55                 setWindowIcon(new QIcon(iconPath+"folder.png"));\r
56                 okClicked = false;\r
57                 notebooks = n;\r
58                 records = w;\r
59                 \r
60                 okButton = new QPushButton();\r
61                 okButton.setText(tr("OK"));\r
62                 okButton.pressed.connect(this, "onClicked()");\r
63                 \r
64                 cancelButton = new QPushButton();\r
65                 cancelButton.setText(tr("Cancel"));\r
66                 cancelButton.pressed.connect(this, "onCancel()");\r
67                 \r
68                 QHBoxLayout horizontalLayout = new QHBoxLayout();\r
69                 QHBoxLayout buttonLayout = new QHBoxLayout();\r
70                 buttonLayout.addStretch(1);\r
71                 buttonLayout.addWidget(okButton);\r
72                 buttonLayout.addWidget(cancelButton);\r
73                 setWindowTitle(tr("Auto Import Folders"));      \r
74                 \r
75                 table = new QTableWidget(records.size(),3);\r
76                 List<String> headers = new ArrayList<String>();\r
77                 headers.add(tr("Directory"));\r
78                 headers.add(tr("Target Notebook"));\r
79                 headers.add(tr("Keep"));\r
80                 table.setHorizontalHeaderLabels(headers);\r
81                 table.verticalHeader().setVisible(false);\r
82                 table.setAlternatingRowColors(true);\r
83                 table.setSelectionBehavior(SelectionBehavior.SelectRows);\r
84                 table.setSelectionMode(SelectionMode.SingleSelection);\r
85                 table.itemSelectionChanged.connect(this, "tableSelection()");\r
86                 horizontalLayout.addWidget(table);\r
87                 \r
88                 \r
89                 addButton = new QPushButton();\r
90                 addButton.setText(tr("Add"));\r
91                 addButton.clicked.connect(this, "addPressed()");\r
92                 \r
93                 editButton = new QPushButton();\r
94                 editButton.setText(tr("Edit"));\r
95                 editButton.setEnabled(false);\r
96                 editButton.clicked.connect(this, "editPressed()");\r
97                 \r
98                 deleteButton = new QPushButton();\r
99                 deleteButton.setText(tr("Delete"));\r
100                 deleteButton.setEnabled(false);\r
101                 deleteButton.clicked.connect(this, "deletePressed()");\r
102                 \r
103                 QVBoxLayout editLayout = new QVBoxLayout();\r
104                 editLayout.addWidget(addButton);\r
105                 editLayout.addWidget(editButton);\r
106                 editLayout.addWidget(deleteButton);\r
107                 \r
108                 QHBoxLayout listLayout = new QHBoxLayout();\r
109                 listLayout.addLayout(horizontalLayout);\r
110                 listLayout.addLayout(editLayout);\r
111                 \r
112                 QVBoxLayout mainLayout = new QVBoxLayout();\r
113                 mainLayout.addLayout(listLayout);\r
114                 mainLayout.addSpacing(1);\r
115                 mainLayout.addLayout(buttonLayout);\r
116                 setLayout(mainLayout);\r
117 \r
118 //              QTableWidgetItem dir = new QTableWidgetItem();\r
119 //              QTableWidgetItem book = new QTableWidgetItem();\r
120                 \r
121                 table.setColumnWidth(0, 160);\r
122                 resize(500, 200);\r
123                 load();\r
124                 \r
125         }\r
126         \r
127         @SuppressWarnings("unused")\r
128         private void onClicked() {\r
129                 okClicked = true;\r
130                 close();\r
131         }\r
132         \r
133         @SuppressWarnings("unused")\r
134         private void onCancel() {\r
135                 okClicked = false;\r
136                 close();\r
137         }\r
138         \r
139         public boolean okClicked() {\r
140                 return okClicked;\r
141         }\r
142         \r
143         @SuppressWarnings("unused")\r
144         private void itemSelected() {\r
145                 okButton.setEnabled(true);\r
146         }\r
147         \r
148         private void load() {\r
149                 for (int i=0; i<records.size(); i++) {\r
150                         addRow(i, records.get(i).folder, records.get(i).notebook, records.get(i).keep);\r
151                 }\r
152         }\r
153 \r
154         private void addRow(int row, String folder, String notebook, boolean keepAfter) {\r
155                 QFontMetrics f = QApplication.fontMetrics();\r
156                 int fontHeight = f.height();\r
157 \r
158                 QTableWidgetItem dir = new QTableWidgetItem();\r
159                 dir.setText(folder);\r
160                 table.setItem(row, 0, dir);\r
161                 table.setRowHeight(row, fontHeight);\r
162                 dir.setToolTip(folder);\r
163         \r
164                 QTableWidgetItem book = new QTableWidgetItem();\r
165                 book.setText(notebook);\r
166                 table.setItem(row, 1, book);\r
167                 \r
168                 QTableWidgetItem keep = new QTableWidgetItem();\r
169                 if (keepAfter) {\r
170                         keep.setText(tr("Keep"));\r
171                         keep.setData(ItemDataRole.UserRole, "Keep");\r
172                 } else {\r
173                         keep.setText(tr("Delete"));\r
174                         keep.setData(ItemDataRole.UserRole, "Delete");\r
175                 }\r
176                 table.setItem(row, 2, keep);\r
177 \r
178         }\r
179         \r
180         @SuppressWarnings("unused")\r
181         private void tableSelection() {\r
182                 editButton.setEnabled(true);\r
183                 deleteButton.setEnabled(true);\r
184         }\r
185         \r
186         \r
187         @SuppressWarnings("unused")\r
188         private void addPressed() {\r
189                 WatchFolderAdd dialog = new WatchFolderAdd(null, notebooks);\r
190                 dialog.exec();\r
191                 if (dialog.okClicked()) {\r
192                         String dir = dialog.directory.text();\r
193                         String notebook = dialog.books.currentText();\r
194                         \r
195                         boolean keep;\r
196                         int index = dialog.keep.currentIndex();\r
197                         String value  = (String) dialog.keep.itemData(index);\r
198                         if (value.equalsIgnoreCase("keep"))\r
199                                 keep = true;\r
200                         else\r
201                                 keep = false;\r
202                         table.insertRow(table.rowCount());\r
203                         addRow(table.rowCount()-1, dir, notebook, keep);                \r
204                 }\r
205                 \r
206         }\r
207 \r
208         \r
209         @SuppressWarnings("unused")\r
210         private void editPressed() {\r
211                 WatchFolderRecord record = new WatchFolderRecord();\r
212                 QModelIndex index = table.currentIndex();\r
213                 int row = index.row();\r
214                 QTableWidgetItem item = table.item(row, 0);\r
215                 record.folder = item.text();\r
216                 item = table.item(row, 1);\r
217                 record.notebook = item.text();\r
218                 item = table.item(row,2);\r
219                 if (item.data(ItemDataRole.UserRole).toString().equalsIgnoreCase("keep"))\r
220                         record.keep = true;\r
221                 else\r
222                         record.keep = false;\r
223                 \r
224                 WatchFolderAdd dialog = new WatchFolderAdd(record, notebooks);\r
225                 dialog.exec();\r
226                 if (dialog.okClicked()) {\r
227                         String dir = dialog.directory.text();\r
228                         String notebook = dialog.books.currentText();\r
229                         \r
230                         boolean keep;\r
231                         if (dialog.keep.itemData(ItemDataRole.UserRole).toString().equalsIgnoreCase("keep"))\r
232                                 keep = true;\r
233                         else\r
234                                 keep = false;\r
235                         table.removeRow(row);\r
236                         table.insertRow(table.rowCount());\r
237                         addRow(table.rowCount()-1, dir, notebook, keep);\r
238                         WatchFolderRecord newRecord = new WatchFolderRecord();\r
239                         newRecord.folder = dir;\r
240                         newRecord.notebook = notebook;\r
241                         newRecord.keep = keep;\r
242                         records.add(newRecord);\r
243                 }\r
244                 \r
245         }\r
246         \r
247         \r
248         @SuppressWarnings("unused")\r
249         private void deletePressed() {\r
250                 QModelIndex index = table.currentIndex();\r
251                 int row = index.row();\r
252                 \r
253                 QTableWidgetItem dirWidget = table.item(row, 0);\r
254                 String value = dirWidget.text();\r
255                 table.removeRow(row);\r
256                 \r
257                 for (int i=0; i<records.size(); i++) {\r
258                         if (value.equals(records.get(i).folder)) {\r
259                                 records.remove(i);\r
260                                 i=records.size();\r
261                         }\r
262                 }\r
263                 \r
264                 if (table.rowCount() == 0) {\r
265                         editButton.setEnabled(false);\r
266                         deleteButton.setEnabled(false);\r
267                 }               \r
268         }\r
269 }\r