Пример #1
0
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;
}
Пример #2
0
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;
}