+/*\r
+ * This file is part of NeverNote \r
+ * Copyright 2009 Randy Baumgarte\r
+ * \r
+ * This file may be licensed under the terms of of the\r
+ * GNU General Public License Version 2 (the ``GPL'').\r
+ *\r
+ * Software distributed under the License is distributed\r
+ * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either\r
+ * express or implied. See the GPL for the specific language\r
+ * governing rights and limitations.\r
+ *\r
+ * You should have received a copy of the GPL along with this\r
+ * program. If not, go to http://www.gnu.org/licenses/gpl.html\r
+ * or write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\r
+ *\r
+*/\r
+\r
+package cx.fbn.nevernote.dialog;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.apache.thrift.TException;\r
+\r
+import com.evernote.edam.error.EDAMNotFoundException;\r
+import com.evernote.edam.error.EDAMSystemException;\r
+import com.evernote.edam.error.EDAMUserException;\r
+import com.evernote.edam.type.Notebook;\r
+import com.evernote.edam.type.SharedNotebook;\r
+import com.trolltech.qt.core.QModelIndex;\r
+import com.trolltech.qt.core.Qt.ItemFlag;\r
+import com.trolltech.qt.core.Qt.ItemFlags;\r
+import com.trolltech.qt.gui.QAbstractItemView.SelectionBehavior;\r
+import com.trolltech.qt.gui.QAbstractItemView.SelectionMode;\r
+import com.trolltech.qt.gui.QApplication;\r
+import com.trolltech.qt.gui.QDialog;\r
+import com.trolltech.qt.gui.QFontMetrics;\r
+import com.trolltech.qt.gui.QHBoxLayout;\r
+import com.trolltech.qt.gui.QIcon;\r
+import com.trolltech.qt.gui.QLabel;\r
+import com.trolltech.qt.gui.QPushButton;\r
+import com.trolltech.qt.gui.QTableWidget;\r
+import com.trolltech.qt.gui.QTableWidgetItem;\r
+import com.trolltech.qt.gui.QVBoxLayout;\r
+\r
+import cx.fbn.nevernote.sql.DatabaseConnection;\r
+import cx.fbn.nevernote.threads.SyncRunner;\r
+\r
+public class ShareNotebook extends QDialog {\r
+ private final QPushButton okButton;\r
+ private final QPushButton addButton;\r
+ private final QPushButton deleteButton;\r
+ private boolean okClicked;\r
+ public final QTableWidget table;\r
+ private final List<SharedNotebook> notebooks;\r
+ private final DatabaseConnection conn;\r
+ private final Notebook notebook;\r
+ private final SyncRunner syncRunner;\r
+ private final String iconPath = new String("classpath:cx/fbn/nevernote/icons/");\r
+ \r
+ public ShareNotebook(String guid, DatabaseConnection c, Notebook n,\r
+ SyncRunner s) {\r
+ setWindowIcon(new QIcon(iconPath+"globe.png"));\r
+ okClicked = false;\r
+ conn = c;\r
+ syncRunner = s;;\r
+ notebook = n;\r
+ \r
+ notebooks = conn.getSharedNotebookTable().getForNotebook(n.getGuid());\r
+ okButton = new QPushButton();\r
+ okButton.setText(tr("OK"));\r
+ okButton.pressed.connect(this, "onClicked()");\r
+ \r
+ QHBoxLayout horizontalLayout = new QHBoxLayout();\r
+ QHBoxLayout buttonLayout = new QHBoxLayout();\r
+ buttonLayout.addStretch(1);\r
+ buttonLayout.addWidget(okButton);\r
+ setWindowTitle(tr("Share Notebook \"") +notebook.getName() + tr("\" With Others")); \r
+ \r
+ table = new QTableWidget(notebooks.size(),3);\r
+ List<String> headers = new ArrayList<String>();\r
+ headers.add(tr("Email"));\r
+ headers.add(tr("Access"));\r
+ headers.add(tr("Login Required"));\r
+ table.setHorizontalHeaderLabels(headers);\r
+ table.verticalHeader().setVisible(false);\r
+ table.setAlternatingRowColors(true);\r
+ table.setSelectionBehavior(SelectionBehavior.SelectRows);\r
+ table.setSelectionMode(SelectionMode.SingleSelection);\r
+ table.itemSelectionChanged.connect(this, "tableSelection()");\r
+ horizontalLayout.addWidget(table);\r
+ \r
+ \r
+ addButton = new QPushButton();\r
+ addButton.setText(tr("Add"));\r
+ addButton.clicked.connect(this, "addPressed()");\r
+ \r
+ deleteButton = new QPushButton();\r
+ deleteButton.setText(tr("Delete"));\r
+ deleteButton.setEnabled(false);\r
+ deleteButton.clicked.connect(this, "deletePressed()");\r
+ \r
+ QVBoxLayout editLayout = new QVBoxLayout();\r
+ editLayout.addWidget(addButton);\r
+ editLayout.addWidget(deleteButton);\r
+ \r
+ QHBoxLayout listLayout = new QHBoxLayout();\r
+ listLayout.addLayout(horizontalLayout);\r
+ listLayout.addLayout(editLayout);\r
+ \r
+ QVBoxLayout mainLayout = new QVBoxLayout();\r
+ if (syncRunner.authToken == null) {\r
+ QLabel msg = new QLabel(tr("You must be connected to make changes."));\r
+ mainLayout.addWidget(msg);\r
+ }\r
+ mainLayout.addLayout(listLayout);\r
+ mainLayout.addSpacing(1);\r
+ mainLayout.addLayout(buttonLayout);\r
+ setLayout(mainLayout);\r
+ \r
+ table.setColumnWidth(0, 160);\r
+ resize(500, 200);\r
+ load();\r
+ \r
+ if (syncRunner.authToken == null) {\r
+ addButton.setEnabled(false);\r
+ deleteButton.setEnabled(false);\r
+ }\r
+ \r
+ }\r
+ \r
+ @SuppressWarnings("unused")\r
+ private void onClicked() {\r
+ okClicked = true;\r
+ close();\r
+ }\r
+ \r
+\r
+ public boolean okClicked() {\r
+ return okClicked;\r
+ }\r
+ \r
+ @SuppressWarnings("unused")\r
+ private void itemSelected() {\r
+ okButton.setEnabled(true);\r
+ }\r
+ \r
+ private void load() {\r
+ for (int i=0; i<notebooks.size(); i++) {\r
+ addRow(i, notebooks.get(i).getEmail(), \r
+ notebooks.get(i).isNotebookModifiable(),\r
+ notebooks.get(i).isRequireLogin());\r
+ }\r
+ }\r
+\r
+ private void addRow(int row, String email, boolean mod, boolean login) {\r
+ QFontMetrics f = QApplication.fontMetrics();\r
+ int fontHeight = f.height();\r
+\r
+ QTableWidgetItem emailWidget = new QTableWidgetItem();\r
+ emailWidget.setText(email);\r
+ table.setItem(row, 0, emailWidget);\r
+ table.setRowHeight(row, fontHeight);\r
+ emailWidget.setToolTip(email);\r
+ ItemFlags flags = emailWidget.flags();\r
+ flags.clear(ItemFlag.ItemIsEditable);\r
+ emailWidget.setFlags(flags);\r
+\r
+ QTableWidgetItem accessWidget = new QTableWidgetItem();\r
+ if (mod)\r
+ accessWidget.setText(tr("Modify"));\r
+ else\r
+ accessWidget.setText(tr("Read Only"));\r
+ table.setItem(row, 1,accessWidget);\r
+ accessWidget.setFlags(flags);\r
+\r
+ QTableWidgetItem loginWidget = new QTableWidgetItem();\r
+ if (login)\r
+ loginWidget.setText(tr("True"));\r
+ else\r
+ loginWidget.setText(tr("False"));\r
+ table.setItem(row, 2, loginWidget);\r
+ loginWidget.setFlags(flags);\r
+ \r
+\r
+ }\r
+ \r
+ @SuppressWarnings("unused")\r
+ private void tableSelection() {\r
+ if (syncRunner.authToken != null)\r
+ deleteButton.setEnabled(true);\r
+ }\r
+ \r
+ \r
+ @SuppressWarnings("unused")\r
+ private void addPressed() {\r
+\r
+ \r
+ }\r
+ \r
+ \r
+ @SuppressWarnings("unused")\r
+ private void deletePressed() {\r
+ QModelIndex index = table.currentIndex();\r
+ int row = index.row();\r
+ \r
+ QTableWidgetItem dirWidget = table.item(row, 0);\r
+ String value = dirWidget.text();\r
+ List<SharedNotebook> notebooks = conn.getSharedNotebookTable().getForNotebook(notebook.getGuid());\r
+ \r
+ List<Long> ids = new ArrayList<Long>();\r
+ for (int i=0; i<notebooks.size(); i++) {\r
+ if (notebooks.get(i).getEmail().equalsIgnoreCase(value)) {\r
+ ids.add(notebooks.get(i).getId());\r
+ }\r
+ }\r
+ \r
+ if (ids.size() > 0) {\r
+ try {\r
+ syncRunner.noteStore.expungeSharedNotebooks(syncRunner.authToken, ids);\r
+ } catch (EDAMUserException e) {\r
+ e.printStackTrace();\r
+ } catch (EDAMNotFoundException e) {\r
+ e.printStackTrace();\r
+ } catch (EDAMSystemException e) {\r
+ e.printStackTrace();\r
+ } catch (TException e) {\r
+ e.printStackTrace();\r
+ }\r
+ for (int i=0; i<ids.size(); i++)\r
+ conn.getSharedNotebookTable().expungeNotebook(ids.get(i), false);\r
+ }\r
+ \r
+ table.clear();\r
+ load();\r
+ if (table.rowCount() == 0) {\r
+ deleteButton.setEnabled(false);\r
+ } \r
+ }\r
+}\r