NCL Composer  0.1.5
 All Classes Functions Variables Pages
ProjectTreeView.cpp
1 /* Copyright (c) 2011 Telemidia/PUC-Rio.
2  * All rights reserved. This program and the accompanying materials
3  * are made available under the terms of the Eclipse Public License v1.0
4  * which accompanies this distribution, and is available at
5  * http://www.eclipse.org/legal/epl-v10.html
6  *
7  * Contributors:
8  * Telemidia/PUC-Rio - initial API and implementation
9  */
10 #include "../include/ProjectTreeView.h"
11 
12 namespace composer {
13  namespace gui {
14 
15 ProjectTreeView::ProjectTreeView(QWidget *parent) : QTreeView(parent)
16 {
17 
18 }
19 
20 void ProjectTreeView::mouseDoubleClickEvent(QMouseEvent *event)
21 {
22  QTreeView::mouseDoubleClickEvent(event);
23  launchSelectedDocument();
24 }
25 
26 void ProjectTreeView::launchSelectedDocument()
27 {
28  QModelIndex current = currentIndex();
29  if (current.isValid())
30  {
31  WorkspaceModel *wsModel = (WorkspaceModel*) model();
32  QFileSystemModel *fsModel = (QFileSystemModel*)
33  wsModel->sourceModel();
34  if (! (fsModel->isDir(wsModel->mapToSource(current))) )
35  {
36  QString documentPath = fsModel->filePath
37  (wsModel->mapToSource(current));
38  QModelIndex cParent = current.parent();
39  while (cParent.isValid() && cParent != rootIndex())
40  {
41  current = cParent;
42  cParent = current.parent();
43  }
44  emit launchDocument(documentPath);
45  }
46  }
47 }
48 
49 void ProjectTreeView::mouseReleaseEvent(QMouseEvent *event)
50 {
51  QTreeView::mouseReleaseEvent(event);
52 
53  if (event->button() == Qt::RightButton)
54  {
55  QMenu *contextMenu = new QMenu(this);
56  QModelIndex current = indexAt(event->pos());
57  if (current.isValid())
58  {
59  WorkspaceModel *wsModel = (WorkspaceModel*)model();
60  QFileSystemModel *fsModel = (QFileSystemModel*)
61  wsModel->sourceModel();
62  if (fsModel->isDir(wsModel->mapToSource(current)))
63  {
64  QAction *newDocumentAct = new QAction(
65  QIcon(":/mainwindow/newDocument"),
66  tr("New document"), contextMenu);
67  QAction *newFolderAct = new QAction(
68  QIcon(":/mainwindow/newFolder"),
69  tr("New folder"), contextMenu);
70  contextMenu->addAction(newDocumentAct);
71  contextMenu->addAction(newFolderAct);
72  } else {
73  QAction *deleteDocument = new QAction(
74  QIcon(":/mainwindow/deleteDoc"),
75  tr("Delete Document"), contextMenu);
76  QAction *launchSelectedDocument = new QAction(
77  tr("Launch Document"), contextMenu);
78  connect(launchSelectedDocument,SIGNAL(triggered()),
79  SLOT(launchSelectedDocument()));
80 
81  contextMenu->addAction(launchSelectedDocument);
82  contextMenu->addAction(deleteDocument);
83  }
84  } else {
85  QAction *newProject = new QAction(
86  QIcon(":/mainwindow/openProject"),
87  tr("New Project"), contextMenu);
88  contextMenu->addAction(newProject);
89  }
90  contextMenu->exec(event->globalPos());
91  }
92 }
93 
94 void ProjectTreeView::keyReleaseEvent(QKeyEvent *event)
95 {
96  QTreeView::keyReleaseEvent(event);
97 
98  if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)
99  launchSelectedDocument();
100 }
101 
102 }} //end namespace