OSDN Git Service

Correct LaTeX images. Upgrade to 0.99
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / dialog / ShareNotebook.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 org.apache.thrift.TException;\r
26 \r
27 import com.evernote.edam.error.EDAMNotFoundException;\r
28 import com.evernote.edam.error.EDAMSystemException;\r
29 import com.evernote.edam.error.EDAMUserException;\r
30 import com.evernote.edam.type.Notebook;\r
31 import com.evernote.edam.type.SharedNotebook;\r
32 import com.trolltech.qt.core.QModelIndex;\r
33 import com.trolltech.qt.core.Qt.ItemFlag;\r
34 import com.trolltech.qt.core.Qt.ItemFlags;\r
35 import com.trolltech.qt.gui.QAbstractItemView.SelectionBehavior;\r
36 import com.trolltech.qt.gui.QAbstractItemView.SelectionMode;\r
37 import com.trolltech.qt.gui.QApplication;\r
38 import com.trolltech.qt.gui.QDialog;\r
39 import com.trolltech.qt.gui.QFontMetrics;\r
40 import com.trolltech.qt.gui.QHBoxLayout;\r
41 import com.trolltech.qt.gui.QIcon;\r
42 import com.trolltech.qt.gui.QLabel;\r
43 import com.trolltech.qt.gui.QPushButton;\r
44 import com.trolltech.qt.gui.QTableWidget;\r
45 import com.trolltech.qt.gui.QTableWidgetItem;\r
46 import com.trolltech.qt.gui.QVBoxLayout;\r
47 \r
48 import cx.fbn.nevernote.sql.DatabaseConnection;\r
49 import cx.fbn.nevernote.threads.SyncRunner;\r
50 \r
51 public class ShareNotebook extends QDialog {\r
52         private final QPushButton                               okButton;\r
53         private final QPushButton                               addButton;\r
54         private final QPushButton                               deleteButton;\r
55         private boolean                                                 okClicked;\r
56         public final QTableWidget                               table;\r
57         private final List<SharedNotebook>              notebooks;\r
58         private final DatabaseConnection                conn;\r
59         private final Notebook                                  notebook;\r
60         private final SyncRunner                                syncRunner;\r
61         private final String iconPath = new String("classpath:cx/fbn/nevernote/icons/");\r
62         \r
63         public ShareNotebook(String guid, DatabaseConnection c, Notebook n,\r
64                                                 SyncRunner s) {\r
65                 setWindowIcon(new QIcon(iconPath+"globe.png"));\r
66                 okClicked = false;\r
67                 conn = c;\r
68                 syncRunner = s;;\r
69                 notebook = n;\r
70                 \r
71                 notebooks = conn.getSharedNotebookTable().getForNotebook(n.getGuid());\r
72                 okButton = new QPushButton();\r
73                 okButton.setText(tr("OK"));\r
74                 okButton.pressed.connect(this, "onClicked()");\r
75                 \r
76                 QHBoxLayout horizontalLayout = new QHBoxLayout();\r
77                 QHBoxLayout buttonLayout = new QHBoxLayout();\r
78                 buttonLayout.addStretch(1);\r
79                 buttonLayout.addWidget(okButton);\r
80                 setWindowTitle(tr("Share Notebook \"") +notebook.getName() + tr("\" With Others"));     \r
81                 \r
82                 table = new QTableWidget(notebooks.size(),3);\r
83                 List<String> headers = new ArrayList<String>();\r
84                 headers.add(tr("Email"));\r
85                 headers.add(tr("Access"));\r
86                 headers.add(tr("Login Required"));\r
87                 table.setHorizontalHeaderLabels(headers);\r
88                 table.verticalHeader().setVisible(false);\r
89                 table.setAlternatingRowColors(true);\r
90                 table.setSelectionBehavior(SelectionBehavior.SelectRows);\r
91                 table.setSelectionMode(SelectionMode.SingleSelection);\r
92                 table.itemSelectionChanged.connect(this, "tableSelection()");\r
93                 horizontalLayout.addWidget(table);\r
94                 \r
95                 \r
96                 addButton = new QPushButton();\r
97                 addButton.setText(tr("Add"));\r
98                 addButton.clicked.connect(this, "addPressed()");\r
99                 \r
100                 deleteButton = new QPushButton();\r
101                 deleteButton.setText(tr("Delete"));\r
102                 deleteButton.setEnabled(false);\r
103                 deleteButton.clicked.connect(this, "deletePressed()");\r
104                 \r
105                 QVBoxLayout editLayout = new QVBoxLayout();\r
106                 editLayout.addWidget(addButton);\r
107                 editLayout.addWidget(deleteButton);\r
108                 \r
109                 QHBoxLayout listLayout = new QHBoxLayout();\r
110                 listLayout.addLayout(horizontalLayout);\r
111                 listLayout.addLayout(editLayout);\r
112                 \r
113                 QVBoxLayout mainLayout = new QVBoxLayout();\r
114                 if (syncRunner.authToken == null) {\r
115                         QLabel msg = new QLabel(tr("You must be connected to make changes."));\r
116                         mainLayout.addWidget(msg);\r
117                 }\r
118                 mainLayout.addLayout(listLayout);\r
119                 mainLayout.addSpacing(1);\r
120                 mainLayout.addLayout(buttonLayout);\r
121                 setLayout(mainLayout);\r
122                 \r
123                 table.setColumnWidth(0, 160);\r
124                 resize(500, 200);\r
125                 load();\r
126                 \r
127                 if (syncRunner.authToken == null) {\r
128                         addButton.setEnabled(false);\r
129                         deleteButton.setEnabled(false);\r
130                 }\r
131                 \r
132         }\r
133         \r
134         @SuppressWarnings("unused")\r
135         private void onClicked() {\r
136                 okClicked = true;\r
137                 close();\r
138         }\r
139         \r
140 \r
141         public boolean okClicked() {\r
142                 return okClicked;\r
143         }\r
144         \r
145         @SuppressWarnings("unused")\r
146         private void itemSelected() {\r
147                 okButton.setEnabled(true);\r
148         }\r
149         \r
150         private void load() {\r
151                 for (int i=0; i<notebooks.size(); i++) {\r
152                         addRow(i, notebooks.get(i).getEmail(), \r
153                                          notebooks.get(i).isNotebookModifiable(),\r
154                                          notebooks.get(i).isRequireLogin());\r
155                 }\r
156         }\r
157 \r
158         private void addRow(int row, String email, boolean mod, boolean login) {\r
159                 QFontMetrics f = QApplication.fontMetrics();\r
160                 int fontHeight = f.height();\r
161 \r
162                 QTableWidgetItem emailWidget = new QTableWidgetItem();\r
163                 emailWidget.setText(email);\r
164                 table.setItem(row, 0, emailWidget);\r
165                 table.setRowHeight(row, fontHeight);\r
166                 emailWidget.setToolTip(email);\r
167                 ItemFlags flags = emailWidget.flags();\r
168                 flags.clear(ItemFlag.ItemIsEditable);\r
169                 emailWidget.setFlags(flags);\r
170 \r
171                 QTableWidgetItem accessWidget = new QTableWidgetItem();\r
172                 if (mod)\r
173                         accessWidget.setText(tr("Modify"));\r
174                 else\r
175                         accessWidget.setText(tr("Read Only"));\r
176                 table.setItem(row, 1,accessWidget);\r
177                 accessWidget.setFlags(flags);\r
178 \r
179                 QTableWidgetItem loginWidget = new QTableWidgetItem();\r
180                 if (login)\r
181                         loginWidget.setText(tr("True"));\r
182                 else\r
183                         loginWidget.setText(tr("False"));\r
184                 table.setItem(row, 2, loginWidget);\r
185                 loginWidget.setFlags(flags);\r
186                 \r
187 \r
188         }\r
189         \r
190         @SuppressWarnings("unused")\r
191         private void tableSelection() {\r
192                 if (syncRunner.authToken != null)\r
193                         deleteButton.setEnabled(true);\r
194         }\r
195         \r
196         \r
197         @SuppressWarnings("unused")\r
198         private void addPressed() {\r
199 \r
200                 \r
201         }\r
202         \r
203         \r
204         @SuppressWarnings("unused")\r
205         private void deletePressed() {\r
206                 QModelIndex index = table.currentIndex();\r
207                 int row = index.row();\r
208                 \r
209                 QTableWidgetItem dirWidget = table.item(row, 0);\r
210                 String value = dirWidget.text();\r
211                 List<SharedNotebook> notebooks = conn.getSharedNotebookTable().getForNotebook(notebook.getGuid());\r
212                 \r
213                 List<Long> ids = new ArrayList<Long>();\r
214                 for (int i=0; i<notebooks.size(); i++) {\r
215                         if (notebooks.get(i).getEmail().equalsIgnoreCase(value)) {\r
216                                 ids.add(notebooks.get(i).getId());\r
217                         }\r
218                 }\r
219                 \r
220                 if (ids.size() > 0) {\r
221                         try {\r
222                                 syncRunner.localNoteStore.expungeSharedNotebooks(syncRunner.authToken, ids);\r
223                         } catch (EDAMUserException e) {\r
224                                 e.printStackTrace();\r
225                         } catch (EDAMNotFoundException e) {\r
226                                 e.printStackTrace();\r
227                         } catch (EDAMSystemException e) {\r
228                                 e.printStackTrace();\r
229                         } catch (TException e) {\r
230                                 e.printStackTrace();\r
231                         }\r
232                         for (int i=0; i<ids.size(); i++)\r
233                                 conn.getSharedNotebookTable().expungeNotebook(ids.get(i), false);\r
234                 }\r
235                 \r
236                 table.clear();\r
237                 load();\r
238                 if (table.rowCount() == 0) {\r
239                         deleteButton.setEnabled(false);\r
240                 }               \r
241         }\r
242 }\r