void MainWindow::onTabsContainerDoubleClicked(Tabs* tabs) { WorkspacePanel* mainPanel = m_workspace->mainPanel(); WorkspaceView* oldActiveView = mainPanel->activeView(); app::Document* oldDoc = static_cast<app::Document*>(UIContext::instance()->activeDocument()); Command* command = Commands::instance()->byId(CommandId::NewFile()); UIContext::instance()->executeCommand(command); app::Document* newDoc = static_cast<app::Document*>(UIContext::instance()->activeDocument()); if (newDoc != oldDoc) { WorkspacePanel* doubleClickedPanel = static_cast<WorkspaceTabs*>(tabs)->panel(); // TODO move this code to workspace? // Put the new sprite in the double-clicked tabs control if (doubleClickedPanel != mainPanel) { WorkspaceView* newView = m_workspace->activeView(); m_workspace->removeView(newView); m_workspace->addViewToPanel(doubleClickedPanel, newView, false, -1); // Re-activate the old view in the main panel mainPanel->setActiveView(oldActiveView); doubleClickedPanel->setActiveView(newView); } } }
void Workspace::removeView(WorkspaceView* view) { base::remove_from_container(m_views, view); WorkspacePanel* panel = getViewPanel(view); ASSERT(panel); if (panel) panel->removeView(view); }
void Workspace::removeView(WorkspaceView* view) { ASSERT(view); base::remove_from_container(m_views, view); WorkspacePanel* panel = getViewPanel(view); ASSERT(panel); if (panel) panel->removeView(view); view->onAfterRemoveView(this); }
tlp::View *TulipViewsManager::addView(const std::string &viewName, tlp::Graph *graph, const DataSet &dataSet, bool show) { tlp::Workspace *workspace = tlpWorkspace(); tlp::View *view = NULL; if (workspace) { workspace->graphModel()->addGraph(graph); view = PluginLister::instance()->getPluginObject<View>(viewName,NULL); view->setupUi(); view->setGraph(graph); view->setState(dataSet); workspace->addPanel(view); } else { graph->addListener(this); model->addGraph(graph); view = PluginLister::instance()->getPluginObject<View>(viewName,NULL); view->setupUi(); view->setGraph(graph); view->setState(dataSet); WorkspacePanel *panel = new WorkspacePanel(view); panel->setGraphsModel(model); panel->viewGraphSet(graph); connect(view,SIGNAL(drawNeeded()),view,SLOT(draw())); openedViews.push_back(view); viewToPanel[view] = panel; setViewVisible(view, show); view->draw(); QApplication::processEvents(); } connect(view, SIGNAL(destroyed(QObject *)), this, SLOT(viewDestroyed(QObject*))); return view; }
bool Workspace::dropViewAt(const gfx::Point& pos, WorkspaceView* view) { WorkspaceTabs* tabs = getTabsAt(pos); WorkspacePanel* panel = getPanelAt(pos); if (panel) { // Create new panel return panel->dropViewAt(pos, getViewPanel(view), view); } else if (tabs && tabs != getViewPanel(view)->tabs()) { // Dock tab in other tabs WorkspacePanel* dropPanel = tabs->panel(); ASSERT(dropPanel); int pos = tabs->getDropTabIndex(); removeView(view); addViewToPanel(dropPanel, view, true, pos); return true; } else return false; }
DropViewAtResult Workspace::dropViewAt(const gfx::Point& pos, WorkspaceView* view, bool clone) { WorkspaceTabs* tabs = getTabsAt(pos); WorkspacePanel* panel = getPanelAt(pos); if (panel) { // Create new panel return panel->dropViewAt(pos, getViewPanel(view), view, clone); } else if (tabs && tabs != getViewPanel(view)->tabs()) { // Dock tab in other tabs WorkspacePanel* dropPanel = tabs->panel(); ASSERT(dropPanel); int pos = tabs->getDropTabIndex(); DropViewAtResult result; WorkspaceView* originalView = view; if (clone) { view = view->cloneWorkspaceView(); result = DropViewAtResult::CLONED_VIEW; } else { removeView(view); result = DropViewAtResult::MOVED_TO_OTHER_PANEL; } addViewToPanel(dropPanel, view, true, pos); if (result == DropViewAtResult::CLONED_VIEW) view->onClonedFrom(originalView); return result; } else return DropViewAtResult::NOTHING; }