import java.util.HashMap;\r
import java.util.List;\r
\r
+import com.evernote.edam.type.Note;\r
import com.evernote.edam.type.Notebook;\r
import com.trolltech.qt.core.QByteArray;\r
import com.trolltech.qt.core.QMimeData;\r
import com.trolltech.qt.gui.QHeaderView;\r
import com.trolltech.qt.gui.QIcon;\r
import com.trolltech.qt.gui.QMenu;\r
+import com.trolltech.qt.gui.QMouseEvent;\r
import com.trolltech.qt.gui.QTreeWidget;\r
import com.trolltech.qt.gui.QTreeWidgetItem;\r
import com.trolltech.qt.gui.QTreeWidgetItem.ChildIndicatorPolicy;\r
private QAction editAction;\r
private QAction iconAction;\r
private QAction stackAction;\r
+ private QAction publishAction;\r
+ private QAction shareAction;\r
public NoteSignal noteSignal;\r
+ public Signal0 selectionSignal;\r
+ private String selectedNotebook;\r
private HashMap<String, QIcon> icons;\r
private final DatabaseConnection db;\r
private final HashMap<String, QTreeWidgetItem> stacks;\r
-// private final QTreeWidgetItem previousMouseOver;\r
-// private boolean previousMouseOverWasSelected;\r
+ private boolean rightButtonClicked;\r
\r
public void setAddAction(QAction a) {\r
addAction = a;\r
}\r
\r
+ public void setPublishAction(QAction p) {\r
+ publishAction = p;\r
+ }\r
+ \r
+ public void setShareAction(QAction s) {\r
+ shareAction = s;\r
+ }\r
+ \r
public void setDeleteAction(QAction d) {\r
deleteAction = d;\r
}\r
// if (width>0)\r
// setColumnWidth(0, width);\r
// previousMouseOver = new QTreeWidgetItem();\r
+ selectionSignal = new Signal0();\r
+ selectedNotebook = "";\r
+ rightButtonClicked = false;\r
+ itemClicked.connect(this, "itemClicked()");\r
}\r
\r
public void selectNotebook(QTreeWidgetItem item) {\r
QIcon greenIcon = new QIcon(iconPath+"notebook-green.png");\r
QIcon redIcon = new QIcon(iconPath+"notebook-red.png");\r
QIcon yellowIcon = new QIcon(iconPath+"notebook-yellow.png");\r
-\r
- if (localBooks.contains(guid)) {\r
- return yellowIcon;\r
- }\r
+ QIcon orangeIcon = new QIcon(iconPath+"notebook-orange.png");\r
\r
if (localBooks.contains(guid) && \r
(name.equalsIgnoreCase("Conflicting Changes") ||\r
name.equalsIgnoreCase("Conflicting Changes (Local)")))\r
return redIcon;\r
+ if (localBooks.contains(guid)) {\r
+ return yellowIcon;\r
+ }\r
if (isPublished)\r
return blueIcon;\r
+ \r
+ if (db.getNotebookTable().isLinked(guid))\r
+ return orangeIcon;\r
\r
return greenIcon;\r
}\r
\r
public void load(List<Notebook> books, List<String> localBooks) {\r
Notebook book;\r
- QTreeWidgetItem child;\r
+ NTreeWidgetItem child;\r
+ \r
+ /* First, let's find out which stacks are expanded */\r
+ QTreeWidgetItem root = invisibleRootItem();\r
+ List<String> expandedStacks = new ArrayList<String>();\r
+ for (int i=0; i<root.childCount(); i++) {\r
+ if (root.child(i).isExpanded())\r
+ expandedStacks.add(root.child(i).text(0));\r
+ }\r
+ \r
clear();\r
stacks.clear();\r
\r
Qt.Alignment ra = new Qt.Alignment(Qt.AlignmentFlag.AlignRight);\r
for (int i=0; i<books.size(); i++) {\r
book = books.get(i);\r
- child = new QTreeWidgetItem();\r
+ child = new NTreeWidgetItem();\r
child.setChildIndicatorPolicy(ChildIndicatorPolicy.DontShowIndicatorWhenChildless);\r
child.setText(0, book.getName());\r
if (icons != null && !icons.containsKey(book.getGuid())) {\r
if (allIcon == null)\r
allIcon = new QIcon(iconPath+"notebook-green.png");\r
\r
- child = new QTreeWidgetItem();\r
+ child = new NTreeWidgetItem();\r
child.setIcon(0, allIcon);\r
child.setText(0, "All Notebooks");\r
child.setText(2, "");\r
}\r
resizeColumnToContents(0);\r
resizeColumnToContents(1);\r
+ \r
+ // Finally, expand the stacks back out\r
+ root = invisibleRootItem();\r
+ for (int i=0; i<root.childCount(); i++) {\r
+ for (int j=0; j<expandedStacks.size(); j++) {\r
+ if (root.child(i).text(0).equalsIgnoreCase(expandedStacks.get(j))) {\r
+ expandItem(root.child(i));\r
+ j=expandedStacks.size();\r
+ }\r
+ }\r
+ }\r
}\r
\r
+\r
// update the display with the current number of notes\r
public void updateCounts(List<Notebook> books, List<NotebookCounter> counts) {\r
QTreeWidgetItem root = invisibleRootItem();\r
menu.addAction(deleteAction);\r
menu.addAction(stackAction);\r
menu.addSeparator();\r
+ menu.addAction(publishAction);\r
+ menu.addAction(shareAction);\r
+ menu.addSeparator();\r
menu.addAction(iconAction);\r
menu.exec(event.globalPos());\r
}\r
return false;\r
}\r
\r
+ // This is really dead code. it is the beginning of logic to create stacks by\r
+ // dragging.\r
if (data.hasFormat("application/x-nevernote-notebook")) {\r
QByteArray d = data.data("application/x-nevernote-notebook");\r
String current = d.toString();\r
\r
// If we are dropping a note onto a notebook\r
if (data.hasFormat("application/x-nevernote-note")) {\r
+ // If we are dropping onto a read-only notebook, we are done.\r
+ if (db.getNotebookTable().isReadOnly(parent.text(2)))\r
+ return false;\r
+ \r
QByteArray d = data.data("application/x-nevernote-note");\r
String s = d.toString();\r
String noteGuidArray[] = s.split(" ");\r
for (String element : noteGuidArray) {\r
- if (!parent.text(0).equalsIgnoreCase("All Notebooks") && \r
- !parent.text(2).equalsIgnoreCase("STACK"))\r
+ Note n = db.getNoteTable().getNote(element.trim(), false, false, false, false, true);\r
+ \r
+ // We need to be sure that...\r
+ // 1.) We are not dropping onto the "All Notebooks" stack\r
+ // 2.) We are not dropping onto a stack\r
+ // 3.) We are actually dropping onto a different notebook.\r
+ if (!parent.text(2).equalsIgnoreCase("") && \r
+ !parent.text(2).equalsIgnoreCase(tr("STACK")) &&\r
+ !(n.getNotebookGuid().equalsIgnoreCase(parent.text(2))\r
+ )) {\r
noteSignal.notebookChanged.emit(element.trim(), parent.text(2));\r
+ if (db.getNotebookTable().isLinked(parent.text(2))) {\r
+ noteSignal.tagsChanged.emit(element.trim(), new ArrayList<String>());\r
+ }\r
+ }\r
}\r
return true;\r
}\r
return target;\r
}\r
\r
+ \r
+ @SuppressWarnings("unused")\r
+ private void itemClicked() {\r
+ List<QTreeWidgetItem> selectedItem = selectedItems();\r
+ if (selectedItem.size() == 1) {\r
+ if (selectedItem.get(0).text(0).equalsIgnoreCase(selectedNotebook) && \r
+ !Global.mimicEvernoteInterface && !rightButtonClicked) {\r
+ selectedNotebook = "";\r
+ clearSelection();\r
+ } else {\r
+ selectedNotebook = selectedItem.get(0).text(0);\r
+ }\r
+ \r
+ }\r
+ selectionSignal.emit();\r
+ }\r
+\r
+ \r
+ @Override\r
+ public void mousePressEvent(QMouseEvent e) {\r
+ if (e.button() == Qt.MouseButton.RightButton)\r
+ rightButtonClicked = true;\r
+ else\r
+ rightButtonClicked = false;\r
+ super.mousePressEvent(e);\r
+ }\r
}\r