projectexplorer: added functionality for opening a folder in another tab/window

This commit is contained in:
itsmattkc
2020-04-19 01:11:50 +10:00
parent 93e5e7c0c1
commit 55dcf0f5fd
11 changed files with 146 additions and 30 deletions
+39 -6
View File
@@ -85,7 +85,7 @@ ProjectExplorer::ProjectExplorer(QWidget *parent) :
connect(icon_view_, &ProjectExplorerIconView::customContextMenuRequested, this, &ProjectExplorer::ShowContextMenu);
}
const ProjectToolbar::ViewType &ProjectExplorer::view_type()
const ProjectToolbar::ViewType &ProjectExplorer::view_type() const
{
return view_type_;
}
@@ -148,7 +148,7 @@ void ProjectExplorer::BrowseToFolder(const QModelIndex &index)
nav_bar_->set_dir_up_enabled(index.isValid());
}
QAbstractItemView *ProjectExplorer::CurrentView()
QAbstractItemView *ProjectExplorer::CurrentView() const
{
return static_cast<QAbstractItemView*>(stacked_widget_->currentWidget());
}
@@ -251,7 +251,17 @@ void ProjectExplorer::ShowContextMenu()
} else {
context_menu_item_ = selected_items.first();
if (context_menu_item_->type() == Item::kFootage) {
if (context_menu_item_->type() == Item::kFolder) {
QAction* open_in_new_tab = menu.addAction(tr("Open in New Tab"));
connect(open_in_new_tab, &QAction::triggered, this, &ProjectExplorer::OpenContextMenuItemInNewTab);
QAction* open_in_new_window = menu.addAction(tr("Open in New Window"));
connect(open_in_new_window, &QAction::triggered, this, &ProjectExplorer::OpenContextMenuItemInNewWindow);
menu.addSeparator();
} else if (context_menu_item_->type() == Item::kFootage) {
QString reveal_text;
#if defined(Q_OS_WINDOWS)
@@ -319,7 +329,17 @@ void ProjectExplorer::RevealSelectedFootage()
#endif
}
Project *ProjectExplorer::project()
void ProjectExplorer::OpenContextMenuItemInNewTab()
{
Core::instance()->main_window()->FolderOpen(project(), context_menu_item_, false);
}
void ProjectExplorer::OpenContextMenuItemInNewWindow()
{
Core::instance()->main_window()->FolderOpen(project(), context_menu_item_, true);
}
Project *ProjectExplorer::project() const
{
return model_.project();
}
@@ -329,7 +349,20 @@ void ProjectExplorer::set_project(Project *p)
model_.set_project(p);
}
QList<Item *> ProjectExplorer::SelectedItems()
QModelIndex ProjectExplorer::root_index() const
{
return tree_view_->rootIndex();
}
void ProjectExplorer::set_root(Item *item)
{
QModelIndex index = model_.CreateIndexFromItem(item);
BrowseToFolder(index);
tree_view_->setRootIndex(index);
}
QList<Item *> ProjectExplorer::SelectedItems() const
{
// Determine which view is active and get its selected indexes
QModelIndexList index_list = CurrentView()->selectionModel()->selectedRows();
@@ -348,7 +381,7 @@ QList<Item *> ProjectExplorer::SelectedItems()
return selected_items;
}
Folder *ProjectExplorer::GetSelectedFolder()
Folder *ProjectExplorer::GetSelectedFolder() const
{
if (project() == nullptr) {
return nullptr;
+13 -5
View File
@@ -49,12 +49,16 @@ class ProjectExplorer : public QWidget
public:
ProjectExplorer(QWidget* parent);
const ProjectToolbar::ViewType& view_type();
const ProjectToolbar::ViewType& view_type() const;
Project* project();
Project* project() const;
void set_project(Project* p);
QList<Item*> SelectedItems();
QModelIndex root_index() const;
void set_root(Item* item);
QList<Item*> SelectedItems() const;
/**
* @brief Use a heuristic to determine which (if any) folder is selected
@@ -68,7 +72,7 @@ public:
* A folder that's heuristically been determined as "selected", or the root directory if none, or nullptr if no
* project is open.
*/
Folder* GetSelectedFolder();
Folder* GetSelectedFolder() const;
/**
* @brief Access the ViewModel model of the project
@@ -122,7 +126,7 @@ private:
/**
* @brief Get the currently active QAbstractItemView
*/
QAbstractItemView* CurrentView();
QAbstractItemView* CurrentView() const;
QStackedWidget* stacked_widget_;
@@ -163,6 +167,10 @@ private slots:
void RevealSelectedFootage();
void OpenContextMenuItemInNewTab();
void OpenContextMenuItemInNewWindow();
};
OLIVE_NAMESPACE_EXIT