31 #include <HbGroupBox> |
31 #include <HbGroupBox> |
32 #include <HbListViewItem> |
32 #include <HbListViewItem> |
33 #include <HbNotificationDialog> |
33 #include <HbNotificationDialog> |
34 |
34 |
35 // User includes |
35 // User includes |
|
36 #include <agendautil.h> |
36 #include "notesfavoriteview.h" |
37 #include "notesfavoriteview.h" |
37 #include "notescommon.h" |
38 #include "notescommon.h" |
38 #include "notesdocloader.h" |
39 #include "notesdocloader.h" |
39 #include "agendautil.h" |
|
40 #include "notesmodel.h" |
40 #include "notesmodel.h" |
41 #include "notessortfilterproxymodel.h" |
41 #include "notessortfilterproxymodel.h" |
42 #include "noteseditor.h" |
42 #include "noteseditor.h" |
|
43 #include "OstTraceDefinitions.h" |
|
44 #ifdef OST_TRACE_COMPILER_IN_USE |
|
45 #include "notesfavoriteviewTraces.h" |
|
46 #endif |
|
47 |
43 |
48 |
44 /*! |
49 /*! |
45 \class NotesFavoriteView |
50 \class NotesFavoriteView |
46 \brief The main view of the notes application. Responsible for displaying |
51 \brief The main view of the notes application. Responsible for displaying |
47 notes and todos. |
52 notes and todos. |
83 \param docLoader Pointer to NotesDocLoader object. |
92 \param docLoader Pointer to NotesDocLoader object. |
84 */ |
93 */ |
85 void NotesFavoriteView::setupView( |
94 void NotesFavoriteView::setupView( |
86 NotesAppControllerIf &controllerIf, NotesDocLoader *docLoader) |
95 NotesAppControllerIf &controllerIf, NotesDocLoader *docLoader) |
87 { |
96 { |
|
97 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_SETUPVIEW_ENTRY ); |
88 mDocLoader = docLoader; |
98 mDocLoader = docLoader; |
89 mAppControllerIf = &controllerIf; |
99 mAppControllerIf = &controllerIf; |
90 mNotesModel = mAppControllerIf->notesModel(); |
100 mNotesModel = mAppControllerIf->notesModel(); |
91 mAgendaUtil = mAppControllerIf->agendaUtil(); |
101 mAgendaUtil = mAppControllerIf->agendaUtil(); |
92 |
102 |
163 this, SLOT(updateView(ulong))); |
173 this, SLOT(updateView(ulong))); |
164 |
174 |
165 // Set the graphics size for the icons. |
175 // Set the graphics size for the icons. |
166 HbListViewItem *prototype = mListView->listItemPrototype(); |
176 HbListViewItem *prototype = mListView->listItemPrototype(); |
167 prototype->setGraphicsSize(HbListViewItem::SmallIcon); |
177 prototype->setGraphicsSize(HbListViewItem::SmallIcon); |
|
178 OstTraceFunctionExit0( NOTESFAVORITEVIEW_SETUPVIEW_EXIT ); |
168 } |
179 } |
169 |
180 |
170 /* |
181 /* |
171 Updates the favorite view either to show notes or emptyListLabel. |
182 Updates the favorite view either to show notes or emptyListLabel. |
172 */ |
183 */ |
173 void NotesFavoriteView::updateFavoriteView() |
184 void NotesFavoriteView::updateFavoriteView() |
174 { |
185 { |
|
186 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_UPDATEFAVORITEVIEW_ENTRY ); |
175 updateView(); |
187 updateView(); |
|
188 OstTraceFunctionExit0( NOTESFAVORITEVIEW_UPDATEFAVORITEVIEW_EXIT ); |
176 } |
189 } |
177 |
190 |
178 /*! |
191 /*! |
179 Slot which gets called when `+ New note' action is triggered from the view |
192 Slot which gets called when `+ New note' action is triggered from the view |
180 toolbar. This is responsible for launching the editor to create a new note. |
193 toolbar. This is responsible for launching the editor to create a new note. |
181 */ |
194 */ |
182 void NotesFavoriteView::createNewNote() |
195 void NotesFavoriteView::createNewNote() |
183 { |
196 { |
|
197 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_CREATENEWNOTE_ENTRY ); |
184 // Here we Display an editor to the use to enter text. |
198 // Here we Display an editor to the use to enter text. |
185 mNotesEditor = new NotesEditor(mAgendaUtil, this); |
199 mNotesEditor = new NotesEditor(mAgendaUtil, this); |
186 connect( |
200 connect( |
187 mNotesEditor, SIGNAL(editingCompleted(bool)), |
201 mNotesEditor, SIGNAL(editingCompleted(bool)), |
188 this, SLOT(handleEditingCompleted(bool))); |
202 this, SLOT(handleEditingCompleted(bool))); |
189 mNotesEditor->create(NotesEditor::CreateNote); |
203 mNotesEditor->create(NotesEditor::CreateNote); |
|
204 OstTraceFunctionExit0( NOTESFAVORITEVIEW_CREATENEWNOTE_EXIT ); |
190 } |
205 } |
191 |
206 |
192 /*! |
207 /*! |
193 Handles the pressing of a list item in the view. |
208 Handles the pressing of a list item in the view. |
194 |
209 |
197 \param index Reference to the QModelIndex representing the view item. |
212 \param index Reference to the QModelIndex representing the view item. |
198 \sa HbAbstractViewItem |
213 \sa HbAbstractViewItem |
199 */ |
214 */ |
200 void NotesFavoriteView::handleItemReleased(const QModelIndex &index) |
215 void NotesFavoriteView::handleItemReleased(const QModelIndex &index) |
201 { |
216 { |
|
217 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_HANDLEITEMRELEASED_ENTRY ); |
202 if (!mIsLongTop) { |
218 if (!mIsLongTop) { |
203 // Sanity check. |
219 // Sanity check. |
204 if (!index.isValid()) { |
220 if (!index.isValid()) { |
|
221 OstTraceFunctionExit0( NOTESFAVORITEVIEW_HANDLEITEMRELEASED_EXIT ); |
205 return; |
222 return; |
206 } |
223 } |
207 |
224 |
208 // First get the id of the note and get the corresponding information from |
225 // First get the id of the note and get the corresponding information from |
209 // agendautil. |
226 // agendautil. |
210 ulong noteId = index.data(NotesNamespace::IdRole).value<qulonglong>(); |
227 ulong noteId = index.data(NotesNamespace::IdRole).value<qulonglong>(); |
211 |
228 |
212 if (0 >= noteId) { |
229 if (0 >= noteId) { |
213 // Something wrong. |
230 // Something wrong. |
|
231 OstTraceFunctionExit0( DUP1_NOTESFAVORITEVIEW_HANDLEITEMRELEASED_EXIT ); |
214 return; |
232 return; |
215 } |
233 } |
216 |
234 |
217 // Get the entry details. |
235 // Get the entry details. |
218 AgendaEntry entry = mAgendaUtil->fetchById(noteId); |
236 AgendaEntry entry = mAgendaUtil->fetchById(noteId); |
219 |
237 |
220 if (entry.isNull()) { |
238 if (entry.isNull()) { |
221 |
239 |
222 // Entry invalid. |
240 // Entry invalid. |
|
241 OstTraceFunctionExit0( DUP2_NOTESFAVORITEVIEW_HANDLEITEMRELEASED_EXIT ); |
223 return; |
242 return; |
224 } |
243 } |
225 |
244 |
226 // Now launch the editor with the obtained info. |
245 // Now launch the editor with the obtained info. |
227 mNotesEditor = new NotesEditor(mAgendaUtil, this); |
246 mNotesEditor = new NotesEditor(mAgendaUtil, this); |
228 connect( |
247 connect( |
229 mNotesEditor, SIGNAL(editingCompleted(bool)), |
248 mNotesEditor, SIGNAL(editingCompleted(bool)), |
230 this, SLOT(handleEditingCompleted(bool))); |
249 this, SLOT(handleEditingCompleted(bool))); |
231 mNotesEditor->edit(entry); |
250 mNotesEditor->edit(entry); |
232 } |
251 } |
|
252 OstTraceFunctionExit0( DUP3_NOTESFAVORITEVIEW_HANDLEITEMRELEASED_EXIT ); |
233 } |
253 } |
234 |
254 |
235 /*! |
255 /*! |
236 Displays a list item specific context menu. |
256 Displays a list item specific context menu. |
237 |
257 |
241 \sa HbAbstractViewItem, HbListView, HbMenu. |
261 \sa HbAbstractViewItem, HbListView, HbMenu. |
242 */ |
262 */ |
243 void NotesFavoriteView::handleItemLongPressed( |
263 void NotesFavoriteView::handleItemLongPressed( |
244 HbAbstractViewItem *item, const QPointF &coords) |
264 HbAbstractViewItem *item, const QPointF &coords) |
245 { |
265 { |
|
266 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_HANDLEITEMLONGPRESSED_ENTRY ); |
246 mSelectedItem = item; |
267 mSelectedItem = item; |
247 mIsLongTop = true; |
268 mIsLongTop = true; |
248 |
269 |
249 // Get the entry of the selected item. |
270 // Get the entry of the selected item. |
250 ulong noteId = item->modelIndex().data( |
271 ulong noteId = item->modelIndex().data( |
273 hbTrId("txt_notes_menu_make_it_as_todo_note")); |
294 hbTrId("txt_notes_menu_make_it_as_todo_note")); |
274 |
295 |
275 // Show the menu. |
296 // Show the menu. |
276 contextMenu->open(this, SLOT(selectedMenuAction(HbAction*))); |
297 contextMenu->open(this, SLOT(selectedMenuAction(HbAction*))); |
277 contextMenu->setPreferredPos(coords); |
298 contextMenu->setPreferredPos(coords); |
|
299 OstTraceFunctionExit0( NOTESFAVORITEVIEW_HANDLEITEMLONGPRESSED_EXIT ); |
278 } |
300 } |
279 |
301 |
280 /*! |
302 /*! |
281 Deletes the note. |
303 Deletes the note. |
282 */ |
304 */ |
283 void NotesFavoriteView::deleteNote() |
305 void NotesFavoriteView::deleteNote() |
284 { |
306 { |
|
307 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_DELETENOTE_ENTRY ); |
285 Q_ASSERT(mSelectedItem); |
308 Q_ASSERT(mSelectedItem); |
286 |
309 |
287 QModelIndex index = mSelectedItem->modelIndex(); |
310 QModelIndex index = mSelectedItem->modelIndex(); |
288 if (!index.isValid()) { |
311 if (!index.isValid()) { |
|
312 OstTraceFunctionExit0( NOTESFAVORITEVIEW_DELETENOTE_EXIT ); |
289 return; |
313 return; |
290 } |
314 } |
291 ulong entryId = |
315 ulong entryId = |
292 index.data(NotesNamespace::IdRole).value<qulonglong>(); |
316 index.data(NotesNamespace::IdRole).value<qulonglong>(); |
293 if (!entryId) { |
317 if (!entryId) { |
|
318 OstTraceFunctionExit0( DUP1_NOTESFAVORITEVIEW_DELETENOTE_EXIT ); |
294 return; |
319 return; |
295 } |
320 } |
296 |
321 |
297 // Emit the signal.Deletion would happen in view manager. |
322 // Emit the signal.Deletion would happen in view manager. |
298 emit deleteEntry(entryId); |
323 emit deleteEntry(entryId); |
299 |
324 |
300 mSelectedItem = 0; |
325 mSelectedItem = 0; |
|
326 OstTraceFunctionExit0( DUP2_NOTESFAVORITEVIEW_DELETENOTE_EXIT ); |
301 } |
327 } |
302 |
328 |
303 /*! |
329 /*! |
304 Removes the note from favorites. |
330 Removes the note from favorites. |
305 */ |
331 */ |
306 void NotesFavoriteView::markNoteAsNotFavourite() |
332 void NotesFavoriteView::markNoteAsNotFavourite() |
307 { |
333 { |
|
334 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_MARKNOTEASNOTFAVOURITE_ENTRY ); |
308 ulong noteId = mSelectedItem->modelIndex().data( |
335 ulong noteId = mSelectedItem->modelIndex().data( |
309 NotesNamespace::IdRole).value<qulonglong>(); |
336 NotesNamespace::IdRole).value<qulonglong>(); |
310 AgendaEntry entry = mAgendaUtil->fetchById(noteId); |
337 AgendaEntry entry = mAgendaUtil->fetchById(noteId); |
311 |
338 |
312 if (entry.favourite()) { |
339 if (entry.favourite()) { |
313 entry.setFavourite(0); |
340 entry.setFavourite(0); |
314 } |
341 } |
315 mAgendaUtil->updateEntry(entry); |
342 mAgendaUtil->store(entry); |
|
343 OstTraceFunctionExit0( NOTESFAVORITEVIEW_MARKNOTEASNOTFAVOURITE_EXIT ); |
316 } |
344 } |
317 |
345 |
318 /*! |
346 /*! |
319 Slot to make a note as to-do. |
347 Slot to make a note as to-do. |
320 */ |
348 */ |
321 void NotesFavoriteView::markNoteAsTodo() |
349 void NotesFavoriteView::markNoteAsTodo() |
322 { |
350 { |
|
351 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_MARKNOTEASTODO_ENTRY ); |
323 Q_ASSERT(mSelectedItem); |
352 Q_ASSERT(mSelectedItem); |
324 |
353 |
325 QModelIndex index = mSelectedItem->modelIndex(); |
354 QModelIndex index = mSelectedItem->modelIndex(); |
326 if (!index.isValid()) { |
355 if (!index.isValid()) { |
327 |
356 |
|
357 OstTraceFunctionExit0( NOTESFAVORITEVIEW_MARKNOTEASTODO_EXIT ); |
328 return; |
358 return; |
329 } |
359 } |
330 ulong noteId = index.data(NotesNamespace::IdRole).value<qulonglong> (); |
360 ulong noteId = index.data(NotesNamespace::IdRole).value<qulonglong> (); |
331 if (!noteId) { |
361 if (!noteId) { |
|
362 OstTraceFunctionExit0( DUP1_NOTESFAVORITEVIEW_MARKNOTEASTODO_EXIT ); |
332 return; |
363 return; |
333 } |
364 } |
334 // Get the entry details. |
365 // Get the entry details. |
335 AgendaEntry entry = mAgendaUtil->fetchById(noteId); |
366 AgendaEntry entry = mAgendaUtil->fetchById(noteId); |
336 |
367 |
337 if (entry.isNull()) { |
368 if (entry.isNull()) { |
338 // Entry invalid. |
369 // Entry invalid. |
|
370 OstTraceFunctionExit0( DUP2_NOTESFAVORITEVIEW_MARKNOTEASTODO_EXIT ); |
339 return; |
371 return; |
340 } |
372 } |
341 |
373 |
342 // Here change the type of modified note and destroy the noteeditor and |
374 // Here change the type of modified note and destroy the noteeditor and |
343 // construct the to-do editor. |
375 // construct the to-do editor. |
386 |
419 |
387 \sa NotesEditor. |
420 \sa NotesEditor. |
388 */ |
421 */ |
389 void NotesFavoriteView::handleEditingCompleted(bool status) |
422 void NotesFavoriteView::handleEditingCompleted(bool status) |
390 { |
423 { |
|
424 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_HANDLEEDITINGCOMPLETED_ENTRY ); |
391 Q_UNUSED(status) |
425 Q_UNUSED(status) |
392 |
426 |
393 // Cleanup. |
427 // Cleanup. |
394 mNotesEditor->deleteLater(); |
428 mNotesEditor->deleteLater(); |
|
429 OstTraceFunctionExit0( NOTESFAVORITEVIEW_HANDLEEDITINGCOMPLETED_EXIT ); |
395 } |
430 } |
396 |
431 |
397 /*! |
432 /*! |
398 Directs the view manager to display the Collections view. |
433 Directs the view manager to display the Collections view. |
399 */ |
434 */ |
400 void NotesFavoriteView::displayCollectionView() |
435 void NotesFavoriteView::displayCollectionView() |
401 { |
436 { |
|
437 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_DISPLAYCOLLECTIONVIEW_ENTRY ); |
402 // Switch to collections view. |
438 // Switch to collections view. |
403 mAppControllerIf->switchToView(NotesNamespace::NotesCollectionViewId); |
439 mAppControllerIf->switchToView(NotesNamespace::NotesCollectionViewId); |
|
440 OstTraceFunctionExit0( NOTESFAVORITEVIEW_DISPLAYCOLLECTIONVIEW_EXIT ); |
404 } |
441 } |
405 |
442 |
406 /*! |
443 /*! |
407 Directs the view manager to display the All notes view. |
444 Directs the view manager to display the All notes view. |
408 */ |
445 */ |
409 void NotesFavoriteView::displayAllNotesView() |
446 void NotesFavoriteView::displayAllNotesView() |
410 { |
447 { |
|
448 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_DISPLAYALLNOTESVIEW_ENTRY ); |
411 // Switch to collections view. |
449 // Switch to collections view. |
412 mAppControllerIf->switchToView(NotesNamespace::NotesMainViewId); |
450 mAppControllerIf->switchToView(NotesNamespace::NotesMainViewId); |
|
451 OstTraceFunctionExit0( NOTESFAVORITEVIEW_DISPLAYALLNOTESVIEW_EXIT ); |
413 } |
452 } |
414 |
453 |
415 /*! |
454 /*! |
416 Slot to handle the case when the state of an action has changed. |
455 Slot to handle the case when the state of an action has changed. |
417 */ |
456 */ |
418 void NotesFavoriteView::handleActionStateChanged() |
457 void NotesFavoriteView::handleActionStateChanged() |
419 { |
458 { |
|
459 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_HANDLEACTIONSTATECHANGED_ENTRY ); |
420 mAllNotesAction->setChecked(true); |
460 mAllNotesAction->setChecked(true); |
|
461 OstTraceFunctionExit0( NOTESFAVORITEVIEW_HANDLEACTIONSTATECHANGED_EXIT ); |
421 } |
462 } |
422 |
463 |
423 /*! |
464 /*! |
424 Handles the orientation changes.Updates the list |
465 Handles the orientation changes.Updates the list |
425 item when orientation is changed |
466 item when orientation is changed |
426 |
467 |
427 \param orientation Value of the orientation |
468 \param orientation Value of the orientation |
428 */ |
469 */ |
429 void NotesFavoriteView::handleOrientationChanged(Qt::Orientation orientation) |
470 void NotesFavoriteView::handleOrientationChanged(Qt::Orientation orientation) |
430 { |
471 { |
|
472 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_HANDLEORIENTATIONCHANGED_ENTRY ); |
431 HbListViewItem *prototype = mListView->listItemPrototype(); |
473 HbListViewItem *prototype = mListView->listItemPrototype(); |
432 |
474 |
433 if (Qt::Horizontal == orientation) { |
475 if (Qt::Horizontal == orientation) { |
434 prototype->setStretchingStyle(HbListViewItem::StretchLandscape); |
476 prototype->setStretchingStyle(HbListViewItem::StretchLandscape); |
435 } else { |
477 } else { |
436 prototype->setStretchingStyle(HbListViewItem::NoStretching); |
478 prototype->setStretchingStyle(HbListViewItem::NoStretching); |
437 } |
479 } |
|
480 OstTraceFunctionExit0( NOTESFAVORITEVIEW_HANDLEORIENTATIONCHANGED_EXIT ); |
438 } |
481 } |
439 |
482 |
440 /* |
483 /* |
441 Opens the notes editor to edit the favorite note. |
484 Opens the notes editor to edit the favorite note. |
442 */ |
485 */ |
443 void NotesFavoriteView::openNote() |
486 void NotesFavoriteView::openNote() |
444 { |
487 { |
|
488 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_OPENNOTE_ENTRY ); |
445 ulong noteId = mSelectedItem->modelIndex().data( |
489 ulong noteId = mSelectedItem->modelIndex().data( |
446 NotesNamespace::IdRole).value<qulonglong>(); |
490 NotesNamespace::IdRole).value<qulonglong>(); |
447 AgendaEntry entry = mAgendaUtil->fetchById(noteId); |
491 AgendaEntry entry = mAgendaUtil->fetchById(noteId); |
448 |
492 |
449 // Construct notes editor. |
493 // Construct notes editor. |
452 mNotesEditor, SIGNAL(editingCompleted(bool)), |
496 mNotesEditor, SIGNAL(editingCompleted(bool)), |
453 this, SLOT(handleEditingCompleted(bool))); |
497 this, SLOT(handleEditingCompleted(bool))); |
454 |
498 |
455 // Launch the notes editor with the obtained info. |
499 // Launch the notes editor with the obtained info. |
456 mNotesEditor->edit(entry); |
500 mNotesEditor->edit(entry); |
|
501 OstTraceFunctionExit0( NOTESFAVORITEVIEW_OPENNOTE_EXIT ); |
457 } |
502 } |
458 |
503 |
459 /* |
504 /* |
460 Slot to handle the context menu actions. |
505 Slot to handle the context menu actions. |
461 */ |
506 */ |
462 void NotesFavoriteView::selectedMenuAction(HbAction *action) |
507 void NotesFavoriteView::selectedMenuAction(HbAction *action) |
463 { |
508 { |
|
509 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_SELECTEDMENUACTION_ENTRY ); |
464 if(action == mOpenAction) { |
510 if(action == mOpenAction) { |
465 openNote(); |
511 openNote(); |
466 } else if (action == mDeleteAction) { |
512 } else if (action == mDeleteAction) { |
467 deleteNote(); |
513 deleteNote(); |
468 } else if (action ==mRemoveFavoriteAction){ |
514 } else if (action ==mRemoveFavoriteAction){ |
469 markNoteAsNotFavourite(); |
515 markNoteAsNotFavourite(); |
470 } else if (action == mMarkTodoAction) { |
516 } else if (action == mMarkTodoAction) { |
471 markNoteAsTodo(); |
517 markNoteAsTodo(); |
472 } |
518 } |
|
519 OstTraceFunctionExit0( NOTESFAVORITEVIEW_SELECTEDMENUACTION_EXIT ); |
473 } |
520 } |
474 |
521 |
475 /*! |
522 /*! |
476 Slot to handle the context menu closed. |
523 Slot to handle the context menu closed. |
477 */ |
524 */ |
478 void NotesFavoriteView::handleMenuClosed() |
525 void NotesFavoriteView::handleMenuClosed() |
479 { |
526 { |
|
527 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_HANDLEMENUCLOSED_ENTRY ); |
480 mIsLongTop = false; |
528 mIsLongTop = false; |
|
529 OstTraceFunctionExit0( NOTESFAVORITEVIEW_HANDLEMENUCLOSED_EXIT ); |
481 } |
530 } |
482 |
531 |
483 /*! |
532 /*! |
484 Handles the visibility of empty list label. |
533 Handles the visibility of empty list label. |
485 */ |
534 */ |
486 void NotesFavoriteView::updateView(ulong id) |
535 void NotesFavoriteView::updateView(ulong id) |
487 { |
536 { |
|
537 OstTraceFunctionEntry0( NOTESFAVORITEVIEW_UPDATEVIEW_ENTRY ); |
488 Q_UNUSED(id) |
538 Q_UNUSED(id) |
489 |
539 |
490 // Get the numbers of favorite notes. |
540 // Get the numbers of favorite notes. |
491 if (0 >= mListView->model()->rowCount()) { |
541 if (0 >= mListView->model()->rowCount()) { |
492 mEmptyListLabel->show(); |
542 mEmptyListLabel->show(); |
493 mListView->hide(); |
543 mListView->hide(); |
494 } else { |
544 } else { |
495 mEmptyListLabel->hide(); |
545 mEmptyListLabel->hide(); |
496 mListView->show(); |
546 mListView->show(); |
497 } |
547 } |
|
548 OstTraceFunctionExit0( NOTESFAVORITEVIEW_UPDATEVIEW_EXIT ); |
498 } |
549 } |
499 |
550 |
500 // End of file --Don't remove this. |
551 // End of file --Don't remove this. |
501 |
|