OSDN Git Service

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