OSDN Git Service

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