Package cx.fbn.nevernote.dialog

Source Code of cx.fbn.nevernote.dialog.ShareNotebook

/*
* This file is part of NixNote
* Copyright 2009 Randy Baumgarte
*
* This file may be licensed under the terms of of the
* GNU General Public License Version 2 (the ``GPL'').
*
* Software distributed under the License is distributed
* on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
* express or implied. See the GPL for the specific language
* governing rights and limitations.
*
* You should have received a copy of the GPL along with this
* program. If not, go to http://www.gnu.org/licenses/gpl.html
* or write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/

package cx.fbn.nevernote.dialog;

//**********************************************
//**********************************************
//* Share a notebook with another user.
//**********************************************
//**********************************************

import java.util.ArrayList;
import java.util.List;

import org.apache.thrift.TException;

import com.evernote.edam.error.EDAMNotFoundException;
import com.evernote.edam.error.EDAMSystemException;
import com.evernote.edam.error.EDAMUserException;
import com.evernote.edam.type.Notebook;
import com.evernote.edam.type.SharedNotebook;
import com.trolltech.qt.core.QModelIndex;
import com.trolltech.qt.core.Qt.ItemFlag;
import com.trolltech.qt.core.Qt.ItemFlags;
import com.trolltech.qt.gui.QAbstractItemView.SelectionBehavior;
import com.trolltech.qt.gui.QAbstractItemView.SelectionMode;
import com.trolltech.qt.gui.QApplication;
import com.trolltech.qt.gui.QDialog;
import com.trolltech.qt.gui.QFontMetrics;
import com.trolltech.qt.gui.QHBoxLayout;
import com.trolltech.qt.gui.QIcon;
import com.trolltech.qt.gui.QLabel;
import com.trolltech.qt.gui.QPushButton;
import com.trolltech.qt.gui.QTableWidget;
import com.trolltech.qt.gui.QTableWidgetItem;
import com.trolltech.qt.gui.QVBoxLayout;

import cx.fbn.nevernote.sql.DatabaseConnection;
import cx.fbn.nevernote.threads.SyncRunner;

public class ShareNotebook extends QDialog {
  private final QPushButton        okButton;
  private final QPushButton        addButton;
  private final QPushButton        deleteButton;
  private boolean              okClicked;
  public final QTableWidget        table;
  private final List<SharedNotebook>    notebooks;
  private final DatabaseConnection    conn;
  private final Notebook          notebook;
  private final SyncRunner        syncRunner;
  private final String iconPath = new String("classpath:cx/fbn/nevernote/icons/");
 
  public ShareNotebook(String guid, DatabaseConnection c, Notebook n,
            SyncRunner s) {
    setWindowIcon(new QIcon(iconPath+"globe.png"));
    okClicked = false;
    conn = c;
    syncRunner = s;;
    notebook = n;
   
    notebooks = conn.getSharedNotebookTable().getForNotebook(n.getGuid());
    okButton = new QPushButton();
    okButton.setText(tr("OK"));
    okButton.pressed.connect(this, "onClicked()");
   
    QHBoxLayout horizontalLayout = new QHBoxLayout();
    QHBoxLayout buttonLayout = new QHBoxLayout();
    buttonLayout.addStretch(1);
    buttonLayout.addWidget(okButton);
    setWindowTitle(tr("Share Notebook \"") +notebook.getName() + tr("\" With Others"))
   
    table = new QTableWidget(notebooks.size(),3);
    List<String> headers = new ArrayList<String>();
    headers.add(tr("Email"));
    headers.add(tr("Access"));
    headers.add(tr("Login Required"));
    table.setHorizontalHeaderLabels(headers);
    table.verticalHeader().setVisible(false);
    table.setAlternatingRowColors(true);
    table.setSelectionBehavior(SelectionBehavior.SelectRows);
    table.setSelectionMode(SelectionMode.SingleSelection);
    table.itemSelectionChanged.connect(this, "tableSelection()");
    horizontalLayout.addWidget(table);
   
   
    addButton = new QPushButton();
    addButton.setText(tr("Add"));
    addButton.clicked.connect(this, "addPressed()");
   
    deleteButton = new QPushButton();
    deleteButton.setText(tr("Delete"));
    deleteButton.setEnabled(false);
    deleteButton.clicked.connect(this, "deletePressed()");
   
    QVBoxLayout editLayout = new QVBoxLayout();
    editLayout.addWidget(addButton);
    editLayout.addWidget(deleteButton);
   
    QHBoxLayout listLayout = new QHBoxLayout();
    listLayout.addLayout(horizontalLayout);
    listLayout.addLayout(editLayout);
   
    QVBoxLayout mainLayout = new QVBoxLayout();
    if (syncRunner.authToken == null) {
      QLabel msg = new QLabel(tr("You must be connected to make changes."));
      mainLayout.addWidget(msg);
    }
    mainLayout.addLayout(listLayout);
    mainLayout.addSpacing(1);
    mainLayout.addLayout(buttonLayout);
    setLayout(mainLayout);
   
    table.setColumnWidth(0, 160);
    resize(500, 200);
    load();
   
    if (syncRunner.authToken == null) {
      addButton.setEnabled(false);
      deleteButton.setEnabled(false);
    }
   
  }
 
  @SuppressWarnings("unused")
  private void onClicked() {
    okClicked = true;
    close();
  }
 

  public boolean okClicked() {
    return okClicked;
  }
 
  @SuppressWarnings("unused")
  private void itemSelected() {
    okButton.setEnabled(true);
  }
 
  private void load() {
    for (int i=0; i<notebooks.size(); i++) {
      addRow(i, notebooks.get(i).getEmail(),
           notebooks.get(i).isNotebookModifiable(),
           notebooks.get(i).isRequireLogin());
    }
  }

  private void addRow(int row, String email, boolean mod, boolean login) {
    QFontMetrics f = QApplication.fontMetrics();
    int fontHeight = f.height();

    QTableWidgetItem emailWidget = new QTableWidgetItem();
    emailWidget.setText(email);
    table.setItem(row, 0, emailWidget);
    table.setRowHeight(row, fontHeight);
    emailWidget.setToolTip(email);
    ItemFlags flags = emailWidget.flags();
    flags.clear(ItemFlag.ItemIsEditable);
    emailWidget.setFlags(flags);

    QTableWidgetItem accessWidget = new QTableWidgetItem();
    if (mod)
      accessWidget.setText(tr("Modify"));
    else
      accessWidget.setText(tr("Read Only"));
    table.setItem(row, 1,accessWidget);
    accessWidget.setFlags(flags);

    QTableWidgetItem loginWidget = new QTableWidgetItem();
    if (login)
      loginWidget.setText(tr("True"));
    else
      loginWidget.setText(tr("False"));
    table.setItem(row, 2, loginWidget);
    loginWidget.setFlags(flags);
   

  }
 
  @SuppressWarnings("unused")
  private void tableSelection() {
    if (syncRunner.authToken != null)
      deleteButton.setEnabled(true);
  }
 
 
  @SuppressWarnings("unused")
  private void addPressed() {

   
  }
 
 
  @SuppressWarnings("unused")
  private void deletePressed() {
    QModelIndex index = table.currentIndex();
    int row = index.row();
   
    QTableWidgetItem dirWidget = table.item(row, 0);
    String value = dirWidget.text();
    List<SharedNotebook> notebooks = conn.getSharedNotebookTable().getForNotebook(notebook.getGuid());
   
    List<Long> ids = new ArrayList<Long>();
    for (int i=0; i<notebooks.size(); i++) {
      if (notebooks.get(i).getEmail().equalsIgnoreCase(value)) {
        ids.add(notebooks.get(i).getId());
      }
    }
   
    if (ids.size() > 0) {
      try {
        syncRunner.localNoteStore.expungeSharedNotebooks(syncRunner.authToken, ids);
      } catch (EDAMUserException e) {
        e.printStackTrace();
      } catch (EDAMNotFoundException e) {
        e.printStackTrace();
      } catch (EDAMSystemException e) {
        e.printStackTrace();
      } catch (TException e) {
        e.printStackTrace();
      }
      for (int i=0; i<ids.size(); i++)
        conn.getSharedNotebookTable().expungeNotebook(ids.get(i), false);
    }
   
    table.clear();
    load();
    if (table.rowCount() == 0) {
      deleteButton.setEnabled(false);
    }   
  }
}
TOP

Related Classes of cx.fbn.nevernote.dialog.ShareNotebook

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.