]> git.sesse.net Git - vlc/blobdiff - modules/gui/skins/controls/playlist.cpp
* src/input/control.c: added INPUT_ADD_INFO/INPUT_SET_NAME to input_Control().
[vlc] / modules / gui / skins / controls / playlist.cpp
index 08d31849c1e6af96e3326993f2ed94fc8a722a80..4a88543f86b595e036b218b2937be8aa74f093ca 100644 (file)
@@ -2,7 +2,7 @@
  * playlist.cpp: Playlist control
  *****************************************************************************
  * Copyright (C) 2003 VideoLAN
- * $Id: playlist.cpp,v 1.10 2003/04/28 12:25:34 asmax Exp $
+ * $Id$
  *
  * Authors: Olivier Teulière <ipkiss@via.ecp.fr>
  *          Emmanuel Puig    <karibu@via.ecp.fr>
@@ -79,10 +79,31 @@ ControlPlayList::ControlPlayList( string id, bool visible, int width,
 
     // Scroll
     StartIndex  = 0;
+
 }
 //---------------------------------------------------------------------------
 ControlPlayList::~ControlPlayList()
 {
+    if( CaseLeft )
+    {
+        delete[] CaseLeft;
+    }
+    if( CaseRight )
+    {
+        delete[] CaseRight;
+    }
+    if( CaseTextLeft )
+    {
+        delete[] CaseTextLeft;
+    }
+    if( Slider )
+    {
+        delete Slider;
+    }
+    if( TextClipRgn )
+    {
+        delete TextClipRgn;
+    }
     if( PlayList != NULL )
     {
         vlc_object_release( PlayList );
@@ -170,10 +191,10 @@ void ControlPlayList::Init()
     delete[] y;
 
     // Get size of control
-    Left   = Slider->Left;
-    Top    = Slider->Top;
-    Width  = Slider->Left + Slider->Width;
-    Height = Slider->Top  + Slider->Height;
+    Left   = Slider->GetLeft();
+    Top    = Slider->GetTop();
+    Width  = Slider->GetLeft() + Slider->GetWidth();
+    Height = Slider->GetTop()  + Slider->GetHeight();
     if( TextLeft < Left )
         Left = TextLeft;
     if( TextTop  < Top  )
@@ -215,13 +236,12 @@ bool ControlPlayList::ProcessEvent( Event *evt )
         case PLAYLIST_ID_DEL:
             if( (GenericControl *)evt->GetParam1() == this )
             {
-                vlc_mutex_lock( &PlayList->object_lock );
                 for( int i = PlayList->i_size - 1; i >= 0; i-- )
                 {
                     if( Select[i] && i != PlayList->i_index )
                         playlist_Delete( PlayList, i );
                 }
-                vlc_mutex_unlock( &PlayList->object_lock );
+                RefreshList();
                 RefreshAll();
             }
             break;
@@ -236,7 +256,7 @@ void ControlPlayList::RefreshList()
     if( NumOfItems != PlayList->i_size )
     {
         if( NumOfItems > 0 )
-            delete Select;
+            delete[] Select;
         NumOfItems = PlayList->i_size;
         if( PlayList->i_size > 0 )
         {
@@ -355,13 +375,13 @@ char * ControlPlayList::GetFileName( int i )
 {
     if( LongFileName )
     {
-        return PlayList->pp_items[i]->psz_name;
+        return PlayList->pp_items[i]->input.psz_name;
     }
     else
     {
-        string f = PlayList->pp_items[i]->psz_name;
+        string f = PlayList->pp_items[i]->input.psz_name;
         int pos  = f.rfind( DIRECTORY_SEPARATOR, f.size() );
-        return PlayList->pp_items[i]->psz_name + pos + 1;
+        return PlayList->pp_items[i]->input.psz_name + pos + 1;
     }
 }
 //---------------------------------------------------------------------------
@@ -414,8 +434,19 @@ bool ControlPlayList::MouseDown( int x, int y, int button )
         {
             for( j = 0; j < NumOfItems; j++ )
             {
-                if( j == i + StartIndex )
-                    Select[j] = !Select[j];
+                if( button & KEY_CTRL )
+                {
+                    // CTRL is pressed
+                    if( j == i + StartIndex )
+                    {
+                        Select[j] = !Select[j];
+                    }
+                }
+                else
+                { 
+                    // CTRL is not pressed
+                    Select[j] = ( j == i + StartIndex );
+                }
             }
             RefreshAll();
             return true;
@@ -523,12 +554,12 @@ bool ControlPlayList::ToolTipTest( int x, int y )
         if( x >= CaseLeft[i] && x <= CaseRight[i] && y >=
             TextTop + i * CaseHeight  && y < TextTop + (i + 1) * CaseHeight )
         {
-            TextFont->GetSize( PlayList->pp_items[i + StartIndex]->psz_name, w,
+            TextFont->GetSize( PlayList->pp_items[i + StartIndex]->input.psz_name, w,
                                h );
             if( w > FileWidth )
             {
                 ParentWindow->ChangeToolTipText(
-                    (string)PlayList->pp_items[i + StartIndex]->psz_name );
+                    (string)PlayList->pp_items[i + StartIndex]->input.psz_name );
                 return true;
             }
         }