virtual void OnDragFailed( CUtlVector< KeyValues * >& msglist ) { PropertySheet *sheet = IsDroppingSheet( msglist ); if ( !sheet ) return; // Create a new property sheet if ( m_pParent->IsDraggableTab() ) { if ( msglist.Count() == 1 ) { KeyValues *data = msglist[ 0 ]; int screenx = data->GetInt( "screenx" ); int screeny = data->GetInt( "screeny" ); // m_pParent->ScreenToLocal( screenx, screeny ); if ( !m_pParent->IsWithin( screenx, screeny ) ) { Panel *page = reinterpret_cast< Panel * >( data->GetPtr( "propertypage" ) ); PropertySheet *sheet = reinterpret_cast< PropertySheet * >( data->GetPtr( "propertysheet" ) ); char const *title = data->GetString( "tabname", "" ); if ( !page || !sheet ) return; // Can only create if sheet was part of a ToolWindow derived object ToolWindow *tw = dynamic_cast< ToolWindow * >( sheet->GetParent() ); if ( tw ) { IToolWindowFactory *factory = tw->GetToolWindowFactory(); if ( factory ) { bool hasContextMenu = sheet->PageHasContextMenu( page ); sheet->RemovePage( page ); factory->InstanceToolWindow( tw->GetParent(), sheet->ShouldShowContextButtons(), page, title, hasContextMenu ); if ( sheet->GetNumPages() == 0 ) { tw->MarkForDeletion(); } } } } } } }
void PropertySheet::OnPanelDropped( CUtlVector< KeyValues * >& msglist ) { if ( msglist.Count() != 1 ) { return; } PropertySheet *sheet = IsDroppingSheet( msglist ); if ( !sheet ) { // Defer to active page if ( _activePage && _activePage->IsDropEnabled() ) { return _activePage->OnPanelDropped( msglist ); } return; } KeyValues *data = msglist[ 0 ]; Panel *page = reinterpret_cast< Panel * >( data->GetPtr( "propertypage" ) ); char const *title = data->GetString( "tabname", "" ); if ( !page || !sheet ) return; // Can only create if sheet was part of a ToolWindow derived object ToolWindow *tw = dynamic_cast< ToolWindow * >( sheet->GetParent() ); if ( tw ) { IToolWindowFactory *factory = tw->GetToolWindowFactory(); if ( factory ) { bool showContext = sheet->PageHasContextMenu( page ); sheet->RemovePage( page ); if ( sheet->GetNumPages() == 0 ) { tw->MarkForDeletion(); } AddPage( page, title, NULL, showContext ); } } }