1 package cx.fbn.nevernote.gui;
\r
3 import java.text.SimpleDateFormat;
\r
4 import java.util.ArrayList;
\r
5 import java.util.HashMap;
\r
6 import java.util.List;
\r
8 import com.evernote.edam.type.Note;
\r
9 import com.trolltech.qt.core.QDateTime;
\r
10 import com.trolltech.qt.core.QModelIndex;
\r
11 import com.trolltech.qt.core.Qt;
\r
12 import com.trolltech.qt.gui.QAbstractTableModel;
\r
13 import com.trolltech.qt.gui.QColor;
\r
15 import cx.fbn.nevernote.Global;
\r
16 import cx.fbn.nevernote.filters.NoteSortFilterProxyModel;
\r
17 import cx.fbn.nevernote.utilities.ListManager;
\r
19 public class NoteTableModel extends QAbstractTableModel {
\r
20 private final ListManager listManager;
\r
21 private final Object[] headers;
\r
22 private List<Note> noteIndex;
\r
23 private List<Note> masterNoteIndex;
\r
24 private List<String> unsynchronizedNotes;
\r
25 public HashMap<String,Integer> titleColors;
\r
26 public NoteSortFilterProxyModel proxyModel; // note sort model
\r
28 public NoteTableModel(ListManager m) {
\r
29 headers = new Object[Global.noteTableColumnCount];
\r
31 masterNoteIndex = null;
\r
32 unsynchronizedNotes = new ArrayList<String>();
\r
35 public List<Note> getNoteIndex() {
\r
38 public void setNoteIndex(List<Note> list) {
\r
41 public List<Note> getMasterNoteIndex() {
\r
42 return masterNoteIndex;
\r
44 public void setMasterNoteIndex(List<Note> list) {
\r
45 masterNoteIndex = list;
\r
47 public void setSortProxyModel(NoteSortFilterProxyModel m) {
\r
51 public List<String> getUnsynchronizedNotes() {
\r
52 return unsynchronizedNotes;
\r
54 public void setUnsynchronizedNotes(List<String> list) {
\r
55 unsynchronizedNotes = list;
\r
58 public HashMap<String, Integer> getTitleColors() {
\r
61 public void setTitleColors(HashMap<String, Integer> map) {
\r
66 public int columnCount(QModelIndex arg0) {
\r
67 return Global.noteTableColumnCount;
\r
71 public Object data(QModelIndex index, int role) {
\r
75 case Qt.ItemDataRole.DisplayRole: {
\r
76 return valueAt(index.row(), index.column());
\r
78 case Qt.ItemDataRole.BackgroundRole: {
\r
79 String guid = valueAt(index.row(), Global.noteTableGuidPosition);
\r
80 QColor backgroundColor = new QColor(QColor.white);
\r
81 if (titleColors != null && titleColors.containsKey(guid)) {
\r
82 int color = titleColors.get(guid);
\r
83 backgroundColor.setRgb(color);
\r
85 return backgroundColor;
\r
87 case Qt.ItemDataRole.ForegroundRole: {
\r
88 String guid = valueAt(index.row(), Global.noteTableGuidPosition);
\r
89 QColor backgroundColor = new QColor(QColor.white);
\r
90 QColor foregroundColor = new QColor(QColor.black);
\r
91 if (titleColors != null && titleColors.containsKey(guid)) {
\r
92 int color = titleColors.get(guid);
\r
93 backgroundColor.setRgb(color);
\r
94 if (backgroundColor.rgb() == QColor.black.rgb() || backgroundColor.rgb() == QColor.blue.rgb())
\r
95 foregroundColor.setRgb(QColor.white.rgb());
\r
97 return foregroundColor;
\r
106 public int rowCount(QModelIndex arg0) {
\r
107 if (listManager != null && listManager.getMasterNoteIndex() != null)
\r
108 return listManager.getMasterNoteIndex().size();
\r
114 private String valueAt(int row, int col) {
\r
115 Note note = listManager.getMasterNoteIndex().get(row);
\r
117 if (col == Global.noteTableGuidPosition)
\r
118 return note.getGuid();
\r
119 if (col == Global.noteTableCreationPosition)
\r
120 return formattedDate(note.getCreated());
\r
121 if (col == Global.noteTableChangedPosition)
\r
122 return formattedDate(note.getUpdated());
\r
123 if (col == Global.noteTableSubjectDatePosition) {
\r
124 if (note.getAttributes().getSubjectDate() > 0)
\r
125 return formattedDate(note.getAttributes().getSubjectDate());
\r
127 return formattedDate(note.getCreated());
\r
129 if (col == Global.noteTableTitlePosition)
\r
130 return note.getTitle();
\r
131 if (col == Global.noteTableAuthorPosition)
\r
132 return note.getAttributes().getAuthor();
\r
133 if (col == Global.noteTableSourceUrlPosition)
\r
134 return note.getAttributes().getSourceURL();
\r
135 if (col == Global.noteTableSynchronizedPosition) {
\r
136 String guid = note.getGuid();
\r
137 for (int i=0; i<unsynchronizedNotes.size(); i++) {
\r
138 if (unsynchronizedNotes.get(i).equalsIgnoreCase(guid))
\r
143 if (col == Global.noteTableTagPosition) {
\r
144 String tags = new String();
\r
145 for (int i=0; i<note.getTagNamesSize(); i++) {
\r
146 tags = tags + note.getTagNames().get(i);
\r
147 if (i!=note.getTagNamesSize()-1)
\r
148 tags = tags + ", ";
\r
152 if (col == Global.noteTableNotebookPosition) {
\r
153 for (int i=0; i<listManager.getNotebookIndex().size(); i++) {
\r
154 if (listManager.getNotebookIndex().get(i).getGuid().equals(note.getNotebookGuid()))
\r
155 return listManager.getNotebookIndex().get(i).getName();
\r
161 private String formattedDate(long d) {
\r
162 String fmt = Global.getDateFormat() + " " + Global.getTimeFormat();
\r
163 String dateTimeFormat = new String(fmt);
\r
164 SimpleDateFormat simple = new SimpleDateFormat(dateTimeFormat);
\r
166 StringBuilder date = new StringBuilder(simple.format(d));
\r
167 QDateTime created = QDateTime.fromString(date.toString(), fmt);
\r
168 return created.toString(fmt);
\r
174 public void sort(int column, Qt.SortOrder order) {
\r
175 layoutAboutToBeChanged.emit();
\r
176 boolean finished = false;
\r
177 while (!finished) {
\r
179 for (int i=1; i<rowCount(); i++) {
\r
180 String val1 = valueAt(i-1,column-1);
\r
181 Note n1 = getMasterNoteIndex().get(i-1);
\r
182 String val2 = valueAt(i,column);
\r
183 Note n2 = getMasterNoteIndex().get(i);
\r
185 if (val1.compareTo(val2) > 0) {
\r
187 getMasterNoteIndex().set(i-1, n2);
\r
188 getMasterNoteIndex().set(i, n1);
\r
192 layoutChanged.emit();
\r
197 public java.lang.Object headerData(int section, Qt.Orientation orientation, int role) {
\r
198 if (role != Qt.ItemDataRole.DisplayRole)
\r
201 if (orientation == Qt.Orientation.Horizontal && section < headers.length) {
\r
202 return headers[section];
\r
210 public boolean setHeaderData(int section, Qt.Orientation orientation, Object value, int role) {
\r
211 if (orientation == Qt.Orientation.Horizontal && section < headers.length && role == Qt.ItemDataRole.DisplayRole) {
\r
212 headers[section] = value;
\r
213 headerDataChanged.emit(orientation, section, section);
\r
220 // Update a note title
\r
221 public void updateNoteTitle(String guid, String title) {
\r
222 for (int i=0; i<getMasterNoteIndex().size(); i++) {
\r
223 if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {
\r
224 getMasterNoteIndex().get(i).setTitle(title);
\r
225 QModelIndex idx = createIndex(i, Global.noteTableTitlePosition, nativePointer());
\r
226 setData(idx, title, Qt.ItemDataRole.EditRole);
\r
227 i = getMasterNoteIndex().size();
\r
230 // Update the list tables
\r
231 for (int i=0; i<getNoteIndex().size(); i++) {
\r
232 if (getNoteIndex().get(i).getGuid().equals(guid)) {
\r
233 getNoteIndex().get(i).setTitle(title);
\r
234 i = getNoteIndex().size();
\r
239 public void updateNoteCreatedDate(String guid, QDateTime date) {
\r
241 for (int i=0; i<getMasterNoteIndex().size(); i++) {
\r
242 if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {
\r
243 getMasterNoteIndex().get(i).setCreated((long)date.toTime_t()*1000);
\r
244 QModelIndex idx = createIndex(i, Global.noteTableCreationPosition, nativePointer());
\r
245 setData(idx, new Long(getMasterNoteIndex().get(i).getCreated()), Qt.ItemDataRole.EditRole);
\r
246 i = getMasterNoteIndex().size();
\r
250 // Update the list tables
\r
251 for (int i=0; i<getNoteIndex().size(); i++) {
\r
252 if (getNoteIndex().get(i).getGuid().equals(guid)) {
\r
253 getNoteIndex().get(i).setCreated((long)date.toTime_t()*1000);
\r
254 i = getNoteIndex().size();
\r
259 public void updateNoteSubjectDate(String guid, QDateTime date) {
\r
261 for (int i=0; i<getMasterNoteIndex().size(); i++) {
\r
262 if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {
\r
263 getMasterNoteIndex().get(i).getAttributes().setSubjectDate((long)date.toTime_t()*1000);
\r
264 QModelIndex idx = createIndex(i, Global.noteTableSubjectDatePosition, nativePointer());
\r
265 setData(idx, new Long(getMasterNoteIndex().get(i).getAttributes().getSubjectDate()), Qt.ItemDataRole.EditRole);
\r
266 i = getMasterNoteIndex().size();
\r
270 // Update the list tables
\r
271 for (int i=0; i<getNoteIndex().size(); i++) {
\r
272 if (getNoteIndex().get(i).getGuid().equals(guid)) {
\r
273 getNoteIndex().get(i).getAttributes().setSubjectDate((long)date.toTime_t()*1000);
\r
274 i = getNoteIndex().size();
\r
279 public void updateNoteChangedDate(String guid, QDateTime date) {
\r
280 for (int i=0; i<getMasterNoteIndex().size(); i++) {
\r
281 if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {
\r
282 getMasterNoteIndex().get(i).setUpdated((long)date.toTime_t()*1000);
\r
283 QModelIndex idx = createIndex(i, Global.noteTableChangedPosition, nativePointer());
\r
284 setData(idx, new Long(getMasterNoteIndex().get(i).getAttributes().getSubjectDate()), Qt.ItemDataRole.EditRole);
\r
285 i = getMasterNoteIndex().size();
\r
288 // Update the list tables
\r
289 for (int i=0; i<getNoteIndex().size(); i++) {
\r
290 if (getNoteIndex().get(i).getGuid().equals(guid)) {
\r
291 getNoteIndex().get(i).setUpdated((long)date.toTime_t()*1000);
\r
292 i = getNoteIndex().size();
\r
297 public void updateNoteGuid(String oldGuid, String newGuid) {
\r
298 for (int i=0; i<getMasterNoteIndex().size(); i++) {
\r
299 if (getMasterNoteIndex().get(i).getGuid() != null && getMasterNoteIndex().get(i).getGuid().equals(oldGuid)) {
\r
300 getMasterNoteIndex().get(i).setGuid(newGuid);
\r
301 QModelIndex idx = createIndex(i, Global.noteTableGuidPosition, nativePointer());
\r
302 setData(idx, new Long(getMasterNoteIndex().get(i).getGuid()), Qt.ItemDataRole.EditRole);
\r
303 i=getMasterNoteIndex().size()+1;
\r
306 for (int i=0; i<getNoteIndex().size(); i++) {
\r
307 if (getNoteIndex().get(i).getGuid() != null && getNoteIndex().get(i).getGuid().equals(oldGuid)) {
\r
308 getNoteIndex().get(i).setGuid(newGuid);;
\r
309 i=getNoteIndex().size()+1;
\r
314 public void updateNoteNotebook(String guid, String notebookGuid) {
\r
315 for (int i=0; i<getMasterNoteIndex().size(); i++) {
\r
316 if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {
\r
317 getMasterNoteIndex().get(i).setNotebookGuid(notebookGuid);
\r
318 for (int j=0; j<listManager.getNotebookIndex().size(); j++) {
\r
319 if (listManager.getNotebookIndex().get(j).getGuid().equals(notebookGuid)) {
\r
320 String name = listManager.getNotebookIndex().get(j).getName();
\r
321 QModelIndex idx = createIndex(i, Global.noteTableNotebookPosition, nativePointer());
\r
322 setData(idx, name, Qt.ItemDataRole.EditRole);
\r
323 j=listManager.getNotebookIndex().size();
\r
326 i=getMasterNoteIndex().size();
\r
329 for (int i=0; i<getNoteIndex().size(); i++) {
\r
330 if (getNoteIndex().get(i).getGuid().equals(guid)) {
\r
331 getNoteIndex().get(i).setNotebookGuid(notebookGuid);
\r
332 i=getNoteIndex().size();
\r
337 public void updateNoteAuthor(String guid, String author) {
\r
338 for (int i=0; i<getMasterNoteIndex().size(); i++) {
\r
339 if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {
\r
340 getMasterNoteIndex().get(i).getAttributes().setAuthor(author);
\r
341 getMasterNoteIndex().get(i).getAttributes().setAltitudeIsSet(true);
\r
342 QModelIndex idx = createIndex(i, Global.noteTableAuthorPosition, nativePointer());
\r
343 setData(idx, author, Qt.ItemDataRole.EditRole);
\r
345 i = getMasterNoteIndex().size();
\r
348 // Update the list tables
\r
349 for (int i=0; i<getNoteIndex().size(); i++) {
\r
350 if (getNoteIndex().get(i).getGuid().equals(guid)) {
\r
351 getNoteIndex().get(i).getAttributes().setAuthor(author);
\r
352 getNoteIndex().get(i).getAttributes().setAuthorIsSet(true);
\r
353 i = getNoteIndex().size();
\r
358 public void updateNoteSourceUrl(String guid, String url) {
\r
359 for (int i=0; i<getMasterNoteIndex().size(); i++) {
\r
360 if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {
\r
361 getMasterNoteIndex().get(i).getAttributes().setSourceURL(url);
\r
362 getMasterNoteIndex().get(i).getAttributes().setSourceURLIsSet(true);
\r
363 QModelIndex idx = createIndex(i, Global.noteTableSourceUrlPosition, nativePointer());
\r
364 setData(idx, url, Qt.ItemDataRole.EditRole);
\r
365 i = getMasterNoteIndex().size();
\r
368 // Update the list tables
\r
369 for (int i=0; i<getNoteIndex().size(); i++) {
\r
370 if (getNoteIndex().get(i).getGuid().equals(guid)) {
\r
371 getNoteIndex().get(i).getAttributes().setSourceURL(url);
\r
372 getNoteIndex().get(i).getAttributes().setSourceURLIsSet(true);
\r
373 i = getNoteIndex().size();
\r
379 public void addNote(Note n) {
\r
380 beginInsertRows(null, 0, 1);
\r
381 getNoteIndex().add(n);
\r
382 getMasterNoteIndex().add(n);
\r
383 proxyModel.addGuid(n.getGuid());
\r
389 public boolean setData(QModelIndex index, Object value,int role) {
\r
390 if (role == Qt.ItemDataRole.EditRole) {
\r
391 dataChanged.emit(index, index);
\r
394 return super.setData(index, value, role);
\r
398 public void updateNoteTitleColor(String guid, Integer color) {
\r
399 getTitleColors().remove(guid);
\r
400 getTitleColors().put(guid, color);
\r
401 layoutChanged.emit();
\r