[nautilus] Remove tree side bar



commit 253d4bf50b04a2ad3a063d467818b02ca2002584
Author: William Jon McCann <jmccann redhat com>
Date:   Thu May 31 10:03:42 2012 -0400

    Remove tree side bar
    
    It is inconsistent with the file chooser, doesn't work well with
    touch, is really hard to use, and isn't consistent with any other
    GNOME 3 apps.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=676897

 libnautilus-private/nautilus-global-preferences.h  |    6 +-
 libnautilus-private/nautilus.convert               |    4 -
 .../org.gnome.nautilus.gschema.xml.in              |   26 -
 src/Makefile.am                                    |    4 -
 src/nautilus-file-management-properties.c          |    4 -
 src/nautilus-file-management-properties.ui         |   65 -
 src/nautilus-shell-ui.xml                          |    9 +-
 src/nautilus-tree-sidebar-model.c                  | 1900 --------------------
 src/nautilus-tree-sidebar-model.h                  |  100 -
 src/nautilus-tree-sidebar.c                        | 1623 -----------------
 src/nautilus-tree-sidebar.h                        |   66 -
 src/nautilus-window-menus.c                        |  104 +-
 src/nautilus-window-private.h                      |    1 -
 src/nautilus-window.c                              |   62 +-
 14 files changed, 22 insertions(+), 3952 deletions(-)
---
diff --git a/libnautilus-private/nautilus-global-preferences.h b/libnautilus-private/nautilus-global-preferences.h
index 2dd27da..a334cca 100644
--- a/libnautilus-private/nautilus-global-preferences.h
+++ b/libnautilus-private/nautilus-global-preferences.h
@@ -58,9 +58,6 @@ typedef enum
 	NAUTILUS_NEW_TAB_POSITION_END,
 } NautilusNewTabPosition;
 
-/* Sidebar panels  */
-#define NAUTILUS_PREFERENCES_TREE_SHOW_ONLY_DIRECTORIES         "show-only-directories"
-
 /* Single/Double click preference  */
 #define NAUTILUS_PREFERENCES_CLICK_POLICY			"click-policy"
 
@@ -77,8 +74,7 @@ typedef enum
 #define NAUTILUS_PREFERENCES_ALWAYS_USE_LOCATION_ENTRY		"always-use-location-entry"
 
 /* Which views should be displayed for new windows */
-#define NAUTILUS_WINDOW_STATE_START_WITH_SIDEBAR		"start-with-sidebar"
-#define NAUTILUS_WINDOW_STATE_SIDE_PANE_VIEW                    "side-pane-view"
+#define NAUTILUS_WINDOW_STATE_START_WITH_SIDEBAR               "start-with-sidebar"
 #define NAUTILUS_WINDOW_STATE_GEOMETRY				"geometry"
 #define NAUTILUS_WINDOW_STATE_MAXIMIZED				"maximized"
 #define NAUTILUS_WINDOW_STATE_SIDEBAR_WIDTH			"sidebar-width"
diff --git a/libnautilus-private/nautilus.convert b/libnautilus-private/nautilus.convert
index d64d79c..bca7d37 100644
--- a/libnautilus-private/nautilus.convert
+++ b/libnautilus-private/nautilus.convert
@@ -34,9 +34,6 @@ default-zoom-level = /apps/nautilus/list_view/default_zoom_level
 default-visible-columns = /apps/nautilus/list_view/default_visible_columns
 default-column-order = /apps/nautilus/list_view/default_column_order
 
-[org.gnome.nautilus.sidebar-panels.tree]
-show-only-directories = /apps/nautilus/sidebar_panels/tree/show_only_directories
-
 [org.gnome.nautilus.desktop]
 font = /apps/nautilus/preferences/desktop_font
 home-icon-visible = /apps/nautilus/desktop/home_icon_visible
@@ -54,4 +51,3 @@ maximized = /apps/nautilus/preferences/navigation_window_saved_maximized
 sidebar-width = /apps/nautilus/preferences/sidebar_width
 start-with-location-bar = /apps/nautilus/preferences/start_with_location_bar
 start-with-sidebar = /apps/nautilus/preferences/start_with_sidebar
-side-pane-view = /apps/nautilus/preferences/side_pane_view
diff --git a/libnautilus-private/org.gnome.nautilus.gschema.xml.in b/libnautilus-private/org.gnome.nautilus.gschema.xml.in
index 778e226..1365207 100644
--- a/libnautilus-private/org.gnome.nautilus.gschema.xml.in
+++ b/libnautilus-private/org.gnome.nautilus.gschema.xml.in
@@ -56,7 +56,6 @@
     <child name="preferences" schema="org.gnome.nautilus.preferences"/>
     <child name="icon-view" schema="org.gnome.nautilus.icon-view"/>
     <child name="list-view" schema="org.gnome.nautilus.list-view"/>
-    <child name="sidebar-panels" schema="org.gnome.nautilus.sidebar-panels"/>
     <child name="desktop" schema="org.gnome.nautilus.desktop"/>
     <child name="window-state" schema="org.gnome.nautilus.window-state"/>
   </schema>
@@ -262,18 +261,6 @@
     </key>
   </schema>
 
-  <schema id="org.gnome.nautilus.sidebar-panels" path="/org/gnome/nautilus/sidebar-panels/" gettext-domain="nautilus">
-    <child name="tree" schema="org.gnome.nautilus.sidebar-panels.tree"/>
-  </schema>
-
-  <schema id="org.gnome.nautilus.sidebar-panels.tree" path="/org/gnome/nautilus/sidebar-panels/tree/" gettext-domain="nautilus">
-    <key name="show-only-directories" type="b">
-      <default>true</default>
-      <_summary>Only show folders in the tree side pane</_summary>
-      <_description>If set to true, Nautilus will only show folders in the tree side pane. Otherwise it will show both folders and files.</_description>
-    </key>
-  </schema>
-
   <schema id="org.gnome.nautilus.desktop" path="/org/gnome/nautilus/desktop/" gettext-domain="nautilus">
     <key name="font" type="s">
       <default l10n="messages" context="desktop-font">''</default>
@@ -353,18 +340,5 @@
       <_summary>Show side pane in new windows</_summary>
       <_description>If set to true, newly opened windows will have the side pane visible.</_description>
     </key>
-    <key name="side-pane-view" type="s">
-      <choices>
-	<choice value='places'/>
-	<choice value='tree'/>
-      </choices>
-      <aliases>
-	<alias value='NautilusPlacesSidebar' target='places'/>
-	<alias value='NautilusTreeSidebar' target='tree'/>
-      </aliases>
-      <default>'places'</default>
-      <_summary>Side pane view</_summary>
-      <_description>The side pane view to show in newly opened windows.</_description>
-    </key>
   </schema>
 </schemalist>
diff --git a/src/Makefile.am b/src/Makefile.am
index 92e8ab8..0f85ff2 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -149,10 +149,6 @@ nautilus_SOURCES = \
 	nautilus-self-check-functions.h 	\
 	nautilus-toolbar.c			\
 	nautilus-toolbar.h			\
-	nautilus-tree-sidebar.c			\
-	nautilus-tree-sidebar.h			\
-	nautilus-tree-sidebar-model.c		\
-	nautilus-tree-sidebar-model.h		\
 	nautilus-trash-bar.c			\
 	nautilus-trash-bar.h			\
 	nautilus-view.c				\
diff --git a/src/nautilus-file-management-properties.c b/src/nautilus-file-management-properties.c
index 8076c02..7f693f6 100644
--- a/src/nautilus-file-management-properties.c
+++ b/src/nautilus-file-management-properties.c
@@ -738,10 +738,6 @@ nautilus_file_management_properties_dialog_setup (GtkBuilder *builder, GtkWindow
 			   NAUTILUS_FILE_MANAGEMENT_PROPERTIES_SHOW_HIDDEN_WIDGET,
 			   NAUTILUS_PREFERENCES_SHOW_HIDDEN_FILES);
 
-	bind_builder_bool (builder, nautilus_tree_sidebar_preferences,
-			   NAUTILUS_FILE_MANAGEMENT_PROPERTIES_TREE_VIEW_FOLDERS_WIDGET,
-			   NAUTILUS_PREFERENCES_TREE_SHOW_ONLY_DIRECTORIES);
-
 	bind_builder_enum (builder, nautilus_preferences,
 			   NAUTILUS_FILE_MANAGEMENT_PROPERTIES_DEFAULT_VIEW_WIDGET,
 			   NAUTILUS_PREFERENCES_DEFAULT_FOLDER_VIEWER,
diff --git a/src/nautilus-file-management-properties.ui b/src/nautilus-file-management-properties.ui
index e1ea152..a59ca19 100644
--- a/src/nautilus-file-management-properties.ui
+++ b/src/nautilus-file-management-properties.ui
@@ -446,71 +446,6 @@
                     <property name="position">3</property>
                   </packing>
                 </child>
-                <child>
-                  <object class="GtkBox" id="vbox24">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="orientation">vertical</property>
-                    <property name="spacing">6</property>
-                    <child>
-                      <object class="GtkLabel" id="label25">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
-                        <property name="label" translatable="yes">Tree View Defaults</property>
-                        <attributes>
-                          <attribute name="weight" value="bold"/>
-                        </attributes>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkAlignment" id="alignment4">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="left_padding">12</property>
-                        <child>
-                          <object class="GtkBox" id="vbox25">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="orientation">vertical</property>
-                            <property name="spacing">6</property>
-                            <child>
-                              <object class="GtkCheckButton" id="treeview_folders_checkbutton">
-                                <property name="label" translatable="yes">Show _only folders</property>
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">False</property>
-                                <property name="use_action_appearance">False</property>
-                                <property name="use_underline">True</property>
-                                <property name="draw_indicator">True</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                          </object>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">4</property>
-                  </packing>
-                </child>
               </object>
             </child>
             <child type="tab">
diff --git a/src/nautilus-shell-ui.xml b/src/nautilus-shell-ui.xml
index 1473bc0..30ad88b 100644
--- a/src/nautilus-shell-ui.xml
+++ b/src/nautilus-shell-ui.xml
@@ -53,14 +53,7 @@
 		<menuitem name="Stop" action="Stop"/>
 		<menuitem name="Reload" action="Reload"/>
 		<separator/>
-		<placeholder name="Show Hide Placeholder">
-			<menu action="Sidebar List">
-				<menuitem name="Sidebar Places" action="Sidebar Places"/>
-				<menuitem name="Sidebar Tree" action="Sidebar Tree"/>
-				<separator/>
-				<menuitem name="Show Hide Sidebar" action="Show Hide Sidebar"/>
-			</menu>
-		</placeholder>
+		<menuitem name="Show Hide Sidebar" action="Show Hide Sidebar"/>
 		<separator/>
 		<placeholder name="View Preferences Placeholder"/>
 		<separator/>
diff --git a/src/nautilus-window-menus.c b/src/nautilus-window-menus.c
index 9adae36..4189823 100644
--- a/src/nautilus-window-menus.c
+++ b/src/nautilus-window-menus.c
@@ -365,11 +365,6 @@ nautilus_window_initialize_trash_icon_monitor (NautilusWindow *window)
 
 #define MENU_ITEM_MAX_WIDTH_CHARS 32
 
-enum {
-	SIDEBAR_PLACES,
-	SIDEBAR_TREE
-};
-
 static void
 action_close_all_windows_callback (GtkAction *action, 
 				   gpointer user_data)
@@ -396,44 +391,17 @@ action_forward_callback (GtkAction *action,
 
 static void
 action_show_hide_sidebar_callback (GtkAction *action, 
-				   gpointer user_data)
+                                  gpointer user_data)
 {
-	NautilusWindow *window;
+       NautilusWindow *window;
 
-	window = NAUTILUS_WINDOW (user_data);
+       window = NAUTILUS_WINDOW (user_data);
 
-	if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) {
-		nautilus_window_show_sidebar (window);
-	} else {
-		nautilus_window_hide_sidebar (window);
-	}
-}
-
-/* TODO: bind all of this with g_settings_bind and GBinding */
-static guint
-sidebar_id_to_value (const gchar *sidebar_id)
-{
-	guint retval = SIDEBAR_PLACES;
-
-	if (g_strcmp0 (sidebar_id, NAUTILUS_WINDOW_SIDEBAR_TREE) == 0)
-		retval = SIDEBAR_TREE;
-
-	return retval;
-}
-
-void
-nautilus_window_update_show_hide_menu_items (NautilusWindow *window) 
-{
-	GtkActionGroup *action_group;
-	GtkAction *action;
-	guint current_value;
-
-	action_group = nautilus_window_get_main_action_group (window);
-
-	action = gtk_action_group_get_action (action_group,
-					      "Sidebar Places");
-	current_value = sidebar_id_to_value (window->details->sidebar_id);
-	gtk_radio_action_set_current_value (GTK_RADIO_ACTION (action), current_value);
+       if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) {
+               nautilus_window_show_sidebar (window);
+       } else {
+               nautilus_window_hide_sidebar (window);
+       }
 }
 
 static void
@@ -578,26 +546,6 @@ action_tab_change_action_activate_callback (GtkAction *action,
 	}
 }
 
-static void
-sidebar_radio_entry_changed_cb (GtkAction *action,
-				GtkRadioAction *current,
-				gpointer user_data)
-{
-	gint current_value;
-
-	current_value = gtk_radio_action_get_current_value (current);
-
-	if (current_value == SIDEBAR_PLACES) {
-		g_settings_set_string (nautilus_window_state,
-				       NAUTILUS_WINDOW_STATE_SIDE_PANE_VIEW,
-				       NAUTILUS_WINDOW_SIDEBAR_PLACES);
-	} else if (current_value == SIDEBAR_TREE) {
-		g_settings_set_string (nautilus_window_state,
-				       NAUTILUS_WINDOW_STATE_SIDE_PANE_VIEW,
-				       NAUTILUS_WINDOW_SIDEBAR_TREE);
-	}
-}
-
 static const GtkActionEntry main_entries[] = {
   /* name, stock id, label */  { "File", NULL, N_("_File") },
   /* name, stock id, label */  { "Edit", NULL, N_("_Edit") },
@@ -745,7 +693,7 @@ static const GtkToggleActionEntry main_toggle_entries[] = {
   /* label, accelerator */   N_("_Show Sidebar"), "F9",
   /* tooltip */              N_("Change the visibility of this window's side pane"),
                              G_CALLBACK (action_show_hide_sidebar_callback),
-  /* is_active */            TRUE }, 
+  /* is_active */            TRUE },
   /* name, stock id */     { "Search", "edit-find-symbolic",
   /* label, accelerator */   N_("_Search for Files..."), "<control>f",
   /* tooltip */              N_("Search documents and folders by name"),
@@ -753,15 +701,6 @@ static const GtkToggleActionEntry main_toggle_entries[] = {
   /* is_active */            FALSE },
 };
 
-static const GtkRadioActionEntry main_radio_entries[] = {
-	{ "Sidebar Places", NULL,
-	  N_("Places"), NULL, N_("Select Places as the default sidebar"),
-	  SIDEBAR_PLACES },
-	{ "Sidebar Tree", NULL,
-	  N_("Tree"), NULL, N_("Select Tree as the default sidebar"),
-	  SIDEBAR_TREE }
-};
-
 static const gchar* app_actions[] = {
 	NAUTILUS_ACTION_NEW_WINDOW,
 	NAUTILUS_ACTION_CONNECT_TO_SERVER,
@@ -836,19 +775,19 @@ nautilus_window_create_toolbar_action_group (NautilusWindow *window)
 static void
 window_menus_set_bindings (NautilusWindow *window)
 {
-	GtkActionGroup *action_group;
-	GtkAction *action;
+       GtkActionGroup *action_group;
+       GtkAction *action;
 
-	action_group = nautilus_window_get_main_action_group (window);
+       action_group = nautilus_window_get_main_action_group (window);
 
-	action = gtk_action_group_get_action (action_group,
-					      NAUTILUS_ACTION_SHOW_HIDE_SIDEBAR);	
+       action = gtk_action_group_get_action (action_group,
+                                             NAUTILUS_ACTION_SHOW_HIDE_SIDEBAR);
 
-	g_settings_bind (nautilus_window_state,
-			 NAUTILUS_WINDOW_STATE_START_WITH_SIDEBAR,
-			 action,
-			 "active",
-			 G_SETTINGS_BIND_DEFAULT);
+       g_settings_bind (nautilus_window_state,
+                        NAUTILUS_WINDOW_STATE_START_WITH_SIDEBAR,
+                        action,
+                        "active",
+                        G_SETTINGS_BIND_DEFAULT);
 }
 
 void 
@@ -865,7 +804,6 @@ nautilus_window_initialize_actions (NautilusWindow *window)
 								    nav_state_actions);
 
 	window_menus_set_bindings (window);
-	nautilus_window_update_show_hide_menu_items (window);
 }
 
 static void
@@ -917,10 +855,6 @@ nautilus_window_initialize_menus (NautilusWindow *window)
 	gtk_action_group_add_toggle_actions (action_group, 
 					     main_toggle_entries, G_N_ELEMENTS (main_toggle_entries),
 					     window);
-	gtk_action_group_add_radio_actions (action_group,
-					    main_radio_entries, G_N_ELEMENTS (main_radio_entries),
-					    0, G_CALLBACK (sidebar_radio_entry_changed_cb),
-					    window);
 
 	nautilus_window_menus_set_visibility_for_app_menu (window);
 	g_signal_connect_swapped (gtk_settings_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (window))),
diff --git a/src/nautilus-window-private.h b/src/nautilus-window-private.h
index f3b3866..0d7a4b3 100644
--- a/src/nautilus-window-private.h
+++ b/src/nautilus-window-private.h
@@ -81,7 +81,6 @@ struct NautilusWindowDetails
         /* Side Pane */
         int side_pane_width;
         GtkWidget *sidebar;
-        gchar *sidebar_id;
 
         /* Main view */
         GtkWidget *main_view;
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index c038daf..bd5ba5d 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -40,7 +40,6 @@
 #include "nautilus-pathbar.h"
 #include "nautilus-search-bar.h"
 #include "nautilus-toolbar.h"
-#include "nautilus-tree-sidebar.h"
 #include "nautilus-view-factory.h"
 #include "nautilus-window-manage-views.h"
 #include "nautilus-window-bookmarks.h"
@@ -700,20 +699,11 @@ setup_side_pane_width (NautilusWindow *window)
 				window->details->side_pane_width);
 }
 
-static gboolean
-sidebar_id_is_valid (const gchar *sidebar_id)
-{
-	return (g_strcmp0 (sidebar_id, NAUTILUS_WINDOW_SIDEBAR_PLACES) == 0 ||
-		g_strcmp0 (sidebar_id, NAUTILUS_WINDOW_SIDEBAR_TREE) == 0);
-}
-
 static void
 nautilus_window_set_up_sidebar (NautilusWindow *window)
 {
 	GtkWidget *sidebar;
 
-	DEBUG ("Setting up sidebar id %s", window->details->sidebar_id);
-
 	window->details->sidebar = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
 	gtk_style_context_add_class (gtk_widget_get_style_context (window->details->sidebar),
 				     GTK_STYLE_CLASS_SIDEBAR);
@@ -728,14 +718,7 @@ nautilus_window_set_up_sidebar (NautilusWindow *window)
 			  G_CALLBACK (side_pane_size_allocate_callback),
 			  window);
 
-	if (g_strcmp0 (window->details->sidebar_id, NAUTILUS_WINDOW_SIDEBAR_PLACES) == 0) {
-		sidebar = nautilus_places_sidebar_new (window);
-	} else if (g_strcmp0 (window->details->sidebar_id, NAUTILUS_WINDOW_SIDEBAR_TREE) == 0) {
-		sidebar = nautilus_tree_sidebar_new (window);
-	} else {
-		g_assert_not_reached ();
-	}
-
+	sidebar = nautilus_places_sidebar_new (window);
 	gtk_box_pack_start (GTK_BOX (window->details->sidebar), sidebar, TRUE, TRUE, 0);
 	gtk_widget_show (sidebar);
 	gtk_widget_show (GTK_WIDGET (window->details->sidebar));
@@ -762,8 +745,6 @@ nautilus_window_hide_sidebar (NautilusWindow *window)
 	}
 
 	nautilus_window_tear_down_sidebar (window);
-	nautilus_window_update_show_hide_menu_items (window);
-
 	g_settings_set_boolean (nautilus_window_state, NAUTILUS_WINDOW_STATE_START_WITH_SIDEBAR, FALSE);
 }
 
@@ -781,40 +762,9 @@ nautilus_window_show_sidebar (NautilusWindow *window)
 	}
 
 	nautilus_window_set_up_sidebar (window);
-	nautilus_window_update_show_hide_menu_items (window);
 	g_settings_set_boolean (nautilus_window_state, NAUTILUS_WINDOW_STATE_START_WITH_SIDEBAR, TRUE);
 }
 
-static void
-side_pane_id_changed (NautilusWindow *window)
-{
-	gchar *sidebar_id;
-
-	sidebar_id = g_settings_get_string (nautilus_window_state,
-					    NAUTILUS_WINDOW_STATE_SIDE_PANE_VIEW);
-
-	DEBUG ("Sidebar id changed to %s", sidebar_id);
-
-	if (g_strcmp0 (sidebar_id, window->details->sidebar_id) == 0) {
-		g_free (sidebar_id);
-		return;
-	}
-
-	if (!sidebar_id_is_valid (sidebar_id)) {
-		g_free (sidebar_id);
-		return;
-	}
-
-	g_free (window->details->sidebar_id);
-	window->details->sidebar_id = sidebar_id;
-
-	if (window->details->sidebar != NULL) {
-		/* refresh the sidebar setting */
-		nautilus_window_tear_down_sidebar (window);
-		nautilus_window_set_up_sidebar (window);
-	}
-}
-
 gboolean
 nautilus_window_disable_chrome_mapping (GValue *value,
 					GVariant *variant,
@@ -1315,13 +1265,6 @@ nautilus_window_constructed (GObject *self)
 	window->details->toolbar = create_toolbar (window);
 	window->details->notebook = create_notebook (window);
 
-	g_signal_connect_swapped (nautilus_window_state,
-				  "changed::" NAUTILUS_WINDOW_STATE_SIDE_PANE_VIEW,
-				  G_CALLBACK (side_pane_id_changed),
-				  window);
-
-	side_pane_id_changed (window);
-
 	nautilus_window_initialize_bookmarks_menu (window);
 	nautilus_window_set_initial_window_geometry (window);
 
@@ -1422,14 +1365,11 @@ nautilus_window_finalize (GObject *object)
 	}
 
 	nautilus_window_finalize_menus (window);
-	g_signal_handlers_disconnect_by_func (nautilus_window_state,
-					      side_pane_id_changed, window);
 
 	g_clear_object (&window->details->nav_state);
 	g_clear_object (&window->details->bookmark_list);
 	g_clear_object (&window->details->ui_manager);
 
-	g_free (window->details->sidebar_id);
 	free_stored_viewers (window);
 
 	/* nautilus_window_close() should have run */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]