Author: abock
Date: Sat Feb  9 05:39:12 2008
New Revision: 3179
URL: http://svn.gnome.org/viewvc/banshee?rev=3179&view=rev

Log:
2008-02-09  Aaron Bockover  <[EMAIL PROTECTED]>

    * src/Core/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs:
    * src/Core/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs:
    Finished actual column reordering



Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/src/Core/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs
   
trunk/banshee/src/Core/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs

Modified: 
trunk/banshee/src/Core/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs
==============================================================================
--- trunk/banshee/src/Core/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs 
(original)
+++ trunk/banshee/src/Core/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs 
Sat Feb  9 05:39:12 2008
@@ -55,6 +55,7 @@
         private int resizing_column_index = -1;
         private int pressed_column_index = -1;
         private int pressed_column_x_start = -1;
+        private int pressed_column_x_offset = -1;
         private int pressed_column_x_drag = -1;
         private bool pressed_column_is_dragging = false;
         

Modified: 
trunk/banshee/src/Core/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs
==============================================================================
--- 
trunk/banshee/src/Core/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs
    (original)
+++ 
trunk/banshee/src/Core/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs
    Sat Feb  9 05:39:12 2008
@@ -206,8 +206,10 @@
                 } else {
                     column = GetColumnAt ((int)press.X);
                     if (column != null) {
-                        pressed_column_index = GetCachedColumnForColumn 
(column).Index;
+                        CachedColumn column_c = GetCachedColumnForColumn 
(column);
+                        pressed_column_index = column_c.Index;
                         pressed_column_x_start = (int)press.X;
+                        pressed_column_x_offset = pressed_column_x_start - 
column_c.X1;
                     }
                 }
                 
@@ -220,7 +222,7 @@
             
             GrabFocus ();
             
-            int row_index = GetRowAtY ((int) press.Y);
+            int row_index = GetRowAtY ((int)press.Y);
             
             if (press.Button == 1 && press.Type != 
Gdk.EventType.TwoButtonPress && 
                 (press.State & Gdk.ModifierType.ControlMask) == 0 && 
Selection.Contains (row_index)) {
@@ -243,7 +245,7 @@
                             Selection.Select (row_index);
                         }
                     } else {
-                        Selection.ToggleSelect(row_index);
+                        Selection.ToggleSelect (row_index);
                     }
                 } else if ((press.State & Gdk.ModifierType.ShiftMask) != 0) {
                     Selection.SelectFromFirst (row_index, true);
@@ -337,16 +339,30 @@
                 if (pressed_column_is_dragging) {
                     header_window.Cursor = drag_cursor;
                     
-                    /*Column swap_column = GetColumnAt ((int)evnt.X);
+                    Column swap_column = GetColumnAt ((int)evnt.X);
+                    bool x_drag_updated = false;
+                    
                     if (swap_column != null) {
-                        int index = GetCachedColumnForColumn 
(swap_column).Index;
-                        ColumnController.Reorder (pressed_column_index, index);
-                        pressed_column_index = index;
-                        RegenerateColumnCache ();
-                    }*/
+                        CachedColumn swap_column_c = GetCachedColumnForColumn 
(swap_column);
+                        bool reorder = false;
+                        
+                        if (swap_column_c.Index < pressed_column_index) {
+                            // Moving from right to left
+                            reorder = pressed_column_x_drag <= 
swap_column_c.X1 + swap_column_c.Width / 2;
+                        } else if (swap_column_c.Index > pressed_column_index) 
{
+                            // Moving from left to right
+                            reorder = pressed_column_x_drag + 
column_cache[pressed_column_index].Width >= 
+                                swap_column_c.X1 + swap_column_c.Width / 2;
+                        }
+                        
+                        if (reorder) {
+                            ColumnController.Reorder (pressed_column_index, 
swap_column_c.Index);
+                            pressed_column_index = swap_column_c.Index;
+                            RegenerateColumnCache ();
+                        }
+                    }
                     
-                    pressed_column_x_drag = (int)evnt.X - 
pressed_column_x_start + 
-                        column_cache[pressed_column_index].X1;
+                    pressed_column_x_drag = (int)evnt.X - 
pressed_column_x_offset;
                     
                     InvalidateHeaderWindow ();
                     InvalidateListWindow ();
_______________________________________________
SVN-commits-list mailing list (read only)
http://mail.gnome.org/mailman/listinfo/svn-commits-list

Want to limit the commits to a few modules? Go to above URL, log in to edit 
your options and select the modules ('topics') you want.
Module maintainer? It is possible to set the reply-to to your development 
mailing list. Email [EMAIL PROTECTED] if interested.

Reply via email to