virtual void OnCreateDragData( KeyValues *msg ) { Assert( m_pParent->IsDraggableTab() ); msg->SetPtr( "propertypage", m_pPage ); msg->SetPtr( "propertysheet", m_pParent ); char sz[ 256 ]; GetText( sz, sizeof( sz ) ); msg->SetString( "tabname", sz ); msg->SetString( "text", sz ); }
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(); } } } } } } }
PageTab(PropertySheet *parent, const char *panelName, const char *text, char const *imageName, int maxTabWidth, Panel *page, bool showContextButton ) : Button( (Panel *)parent, panelName, text), m_pParent( parent ), m_pPage( page ), m_pImage( 0 ), m_pszImageName( 0 ), m_bShowContextLabel( showContextButton ) { SetCommand(new KeyValues("TabPressed")); _active = false; m_bMaxTabWidth = maxTabWidth; SetDropEnabled( true ); SetDragEnabled( m_pParent->IsDraggableTab() ); if ( imageName ) { m_pImage = new ImagePanel( this, text ); int buflen = Q_strlen( imageName ) + 1; m_pszImageName = new char[ buflen ]; Q_strncpy( m_pszImageName, imageName, buflen ); } SetMouseClickEnabled( MOUSE_RIGHT, true ); m_pContextLabel = m_bShowContextLabel ? new ContextLabel( this, "Context", "9" ) : NULL; }