OSDN Git Service

ed26b6ae075e77a107d973b7da9578c5136827f4
[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 //**********************************************\r
23 //**********************************************\r
24 //* Dialog box used to show watched folders\r
25 //**********************************************\r
26 //**********************************************\r
27 \r
28 import java.util.ArrayList;\r
29 import java.util.List;\r
30 \r
31 import com.evernote.edam.type.Notebook;\r
32 import com.trolltech.qt.core.QModelIndex;\r
33 import com.trolltech.qt.core.Qt.ItemDataRole;\r
34 import com.trolltech.qt.gui.QAbstractItemView.SelectionBehavior;\r
35 import com.trolltech.qt.gui.QAbstractItemView.SelectionMode;\r
36 import com.trolltech.qt.gui.QApplication;\r
37 import com.trolltech.qt.gui.QDialog;\r
38 import com.trolltech.qt.gui.QFontMetrics;\r
39 import com.trolltech.qt.gui.QHBoxLayout;\r
40 import com.trolltech.qt.gui.QIcon;\r
41 import com.trolltech.qt.gui.QPushButton;\r
42 import com.trolltech.qt.gui.QTableWidget;\r
43 import com.trolltech.qt.gui.QTableWidgetItem;\r
44 import com.trolltech.qt.gui.QVBoxLayout;\r
45 \r
46 import cx.fbn.nevernote.sql.WatchFolderRecord;\r
47 \r
48 public class WatchFolder extends QDialog {\r
49         private final QPushButton               okButton;\r
50         private final QPushButton               cancelButton;\r
51         private final QPushButton               addButton;\r
52         private final QPushButton               editButton;\r
53         private final QPushButton               deleteButton;\r
54         private boolean                                 okClicked;\r
55         public final QTableWidget               table;\r
56         private final List<Notebook>    notebooks;\r
57         private final List<WatchFolderRecord> records;\r
58         private final String iconPath = new String("classpath:cx/fbn/nevernote/icons/");\r
59         \r
60         public WatchFolder(List<WatchFolderRecord> w, List<Notebook> n) {\r
61                 setWindowIcon(new QIcon(iconPath+"folder.png"));\r
62                 okClicked = false;\r
63                 notebooks = n;\r
64                 records = w;\r
65                 \r
66                 okButton = new QPushButton();\r
67                 okButton.setText(tr("OK"));\r
68                 okButton.pressed.connect(this, "onClicked()");\r
69                 \r
70                 cancelButton = new QPushButton();\r
71                 cancelButton.setText(tr("Cancel"));\r
72                 cancelButton.pressed.connect(this, "onCancel()");\r
73                 \r
74                 QHBoxLayout horizontalLayout = new QHBoxLayout();\r
75                 QHBoxLayout buttonLayout = new QHBoxLayout();\r
76                 buttonLayout.addStretch(1);\r
77                 buttonLayout.addWidget(okButton);\r
78                 buttonLayout.addWidget(cancelButton);\r
79                 setWindowTitle(tr("Auto Import Folders"));      \r
80                 \r
81                 table = new QTableWidget(records.size(),3);\r
82                 List<String> headers = new ArrayList<String>();\r
83                 headers.add(tr("Directory"));\r
84                 headers.add(tr("Target Notebook"));\r
85                 headers.add(tr("Keep"));\r
86                 table.setHorizontalHeaderLabels(headers);\r
87                 table.verticalHeader().setVisible(false);\r
88                 table.setAlternatingRowColors(true);\r
89                 table.setSelectionBehavior(SelectionBehavior.SelectRows);\r
90                 table.setSelectionMode(SelectionMode.SingleSelection);\r
91                 table.itemSelectionChanged.connect(this, "tableSelection()");\r
92                 horizontalLayout.addWidget(table);\r
93                 \r
94                 \r
95                 addButton = new QPushButton();\r
96                 addButton.setText(tr("Add"));\r
97                 addButton.clicked.connect(this, "addPressed()");\r
98                 \r
99                 editButton = new QPushButton();\r
100                 editButton.setText(tr("Edit"));\r
101                 editButton.setEnabled(false);\r
102                 editButton.clicked.connect(this, "editPressed()");\r
103                 \r
104                 deleteButton = new QPushButton();\r
105                 deleteButton.setText(tr("Delete"));\r
106                 deleteButton.setEnabled(false);\r
107                 deleteButton.clicked.connect(this, "deletePressed()");\r
108                 \r
109                 QVBoxLayout editLayout = new QVBoxLayout();\r
110                 editLayout.addWidget(addButton);\r
111                 editLayout.addWidget(editButton);\r
112                 editLayout.addWidget(deleteButton);\r
113                 \r
114                 QHBoxLayout listLayout = new QHBoxLayout();\r
115                 listLayout.addLayout(horizontalLayout);\r
116                 listLayout.addLayout(editLayout);\r
117                 \r
118                 QVBoxLayout mainLayout = new QVBoxLayout();\r
119                 mainLayout.addLayout(listLayout);\r
120                 mainLayout.addSpacing(1);\r
121                 mainLayout.addLayout(buttonLayout);\r
122                 setLayout(mainLayout);\r
123 \r
124 //              QTableWidgetItem dir = new QTableWidgetItem();\r
125 //              QTableWidgetItem book = new QTableWidgetItem();\r
126                 \r
127                 table.setColumnWidth(0, 160);\r
128                 resize(500, 200);\r
129                 load();\r
130                 \r
131         }\r
132         \r
133         @SuppressWarnings("unused")\r
134         private void onClicked() {\r
135                 okClicked = true;\r
136                 close();\r
137         }\r
138         \r
139         @SuppressWarnings("unused")\r
140         private void onCancel() {\r
141                 okClicked = false;\r
142                 close();\r
143         }\r
144         \r
145         public boolean okClicked() {\r
146                 return okClicked;\r
147         }\r
148         \r
149         @SuppressWarnings("unused")\r
150         private void itemSelected() {\r
151                 okButton.setEnabled(true);\r
152         }\r
153         \r
154         private void load() {\r
155                 for (int i=0; i<records.size(); i++) {\r
156                         addRow(i, records.get(i).folder, records.get(i).notebook, records.get(i).keep);\r
157                 }\r
158         }\r
159 \r
160         private void addRow(int row, String folder, String notebook, boolean keepAfter) {\r
161                 QFontMetrics f = QApplication.fontMetrics();\r
162                 int fontHeight = f.height();\r
163 \r
164                 QTableWidgetItem dir = new QTableWidgetItem();\r
165                 dir.setText(folder);\r
166                 table.setItem(row, 0, dir);\r
167                 table.setRowHeight(row, fontHeight);\r
168                 dir.setToolTip(folder);\r
169         \r
170                 QTableWidgetItem book = new QTableWidgetItem();\r
171                 book.setText(notebook);\r
172                 table.setItem(row, 1, book);\r
173                 \r
174                 QTableWidgetItem keep = new QTableWidgetItem();\r
175                 if (keepAfter) {\r
176                         keep.setText(tr("Keep"));\r
177                         keep.setData(ItemDataRole.UserRole, "Keep");\r
178                 } else {\r
179                         keep.setText(tr("Delete"));\r
180                         keep.setData(ItemDataRole.UserRole, "Delete");\r
181                 }\r
182                 table.setItem(row, 2, keep);\r
183 \r
184         }\r
185         \r
186         @SuppressWarnings("unused")\r
187         private void tableSelection() {\r
188                 editButton.setEnabled(true);\r
189                 deleteButton.setEnabled(true);\r
190         }\r
191         \r
192         \r
193         @SuppressWarnings("unused")\r
194         private void addPressed() {\r
195                 WatchFolderAdd dialog = new WatchFolderAdd(null, notebooks);\r
196                 dialog.exec();\r
197                 if (dialog.okClicked()) {\r
198                         String dir = dialog.directory.text();\r
199                         String notebook = dialog.books.currentText();\r
200                         \r
201                         boolean keep;\r
202                         int index = dialog.keep.currentIndex();\r
203                         String value  = (String) dialog.keep.itemData(index);\r
204                         if (value.equalsIgnoreCase("keep"))\r
205                                 keep = true;\r
206                         else\r
207                                 keep = false;\r
208                         table.insertRow(table.rowCount());\r
209                         addRow(table.rowCount()-1, dir, notebook, keep);                \r
210                 }\r
211                 \r
212         }\r
213 \r
214         \r
215         @SuppressWarnings("unused")\r
216         private void editPressed() {\r
217                 WatchFolderRecord record = new WatchFolderRecord();\r
218                 QModelIndex index = table.currentIndex();\r
219                 int row = index.row();\r
220                 QTableWidgetItem item = table.item(row, 0);\r
221                 record.folder = item.text();\r
222                 item = table.item(row, 1);\r
223                 record.notebook = item.text();\r
224                 item = table.item(row,2);\r
225                 if (item.data(ItemDataRole.UserRole).toString().equalsIgnoreCase("keep"))\r
226                         record.keep = true;\r
227                 else\r
228                         record.keep = false;\r
229                 \r
230                 WatchFolderAdd dialog = new WatchFolderAdd(record, notebooks);\r
231                 dialog.exec();\r
232                 if (dialog.okClicked()) {\r
233                         String dir = dialog.directory.text();\r
234                         String notebook = dialog.books.currentText();\r
235                         \r
236                         boolean keep;\r
237                         if (dialog.keep.itemData(ItemDataRole.UserRole).toString().equalsIgnoreCase("keep"))\r
238                                 keep = true;\r
239                         else\r
240                                 keep = false;\r
241                         table.removeRow(row);\r
242                         table.insertRow(table.rowCount());\r
243                         addRow(table.rowCount()-1, dir, notebook, keep);\r
244                         WatchFolderRecord newRecord = new WatchFolderRecord();\r
245                         newRecord.folder = dir;\r
246                         newRecord.notebook = notebook;\r
247                         newRecord.keep = keep;\r
248                         records.add(newRecord);\r
249                 }\r
250                 \r
251         }\r
252         \r
253         \r
254         @SuppressWarnings("unused")\r
255         private void deletePressed() {\r
256                 QModelIndex index = table.currentIndex();\r
257                 int row = index.row();\r
258                 \r
259                 QTableWidgetItem dirWidget = table.item(row, 0);\r
260                 String value = dirWidget.text();\r
261                 table.removeRow(row);\r
262                 \r
263                 for (int i=0; i<records.size(); i++) {\r
264                         if (value.equals(records.get(i).folder)) {\r
265                                 records.remove(i);\r
266                                 i=records.size();\r
267                         }\r
268                 }\r
269                 \r
270                 if (table.rowCount() == 0) {\r
271                         editButton.setEnabled(false);\r
272                         deleteButton.setEnabled(false);\r
273                 }               \r
274         }\r
275 }\r