- merged selection optimization from experimental into default

Tue, 09 Sep 2014 02:42:21 +0300

author
Teemu Piippo <crimsondusk64@gmail.com>
date
Tue, 09 Sep 2014 02:42:21 +0300
changeset 894
120cf01d8831
parent 888
7ad8fb667084 (current diff)
parent 893
ee0631d7f5d4 (diff)
child 895
f0d14f16ae87
child 896
4988666b5e3c
child 903
58fd8d17a40e

- merged selection optimization from experimental into default

--- a/src/actions.cc	Sun Sep 07 22:55:44 2014 +0300
+++ b/src/actions.cc	Tue Sep 09 02:42:21 2014 +0300
@@ -268,9 +268,6 @@
 {
 	for (LDObjectPtr obj : CurrentDocument()->objects())
 		obj->select();
-
-	ui->objectList->selectAll();
-	refresh();
 }
 
 // =============================================================================
@@ -296,9 +293,6 @@
 		if (colors.contains (obj->color()))
 			obj->select();
 	}
-
-	updateSelection();
-	refresh();
 }
 
 // =============================================================================
@@ -336,9 +330,6 @@
 
 		obj->select();
 	}
-
-	updateSelection();
-	refresh();
 }
 
 // =============================================================================
--- a/src/ldObject.cc	Sun Sep 07 22:55:44 2014 +0300
+++ b/src/ldObject.cc	Tue Sep 09 02:42:21 2014 +0300
@@ -880,10 +880,12 @@
 	document().toStrongRef()->addToSelection (self());
 
 	// If this object is inverted with INVERTNEXT, pick the INVERTNEXT as well.
+	/*
 	LDBFCPtr invertnext;
 
 	if (previousIsInvertnext (invertnext))
 		invertnext->select();
+	*/
 }
 
 // =============================================================================
--- a/src/mainWindow.cc	Sun Sep 07 22:55:44 2014 +0300
+++ b/src/mainWindow.cc	Tue Sep 09 02:42:21 2014 +0300
@@ -562,17 +562,41 @@
 void MainWindow::updateSelection()
 {
 	g_isSelectionLocked = true;
-
-	ui->objectList->clearSelection();
+	QItemSelection itemselect;
+	int top = -1;
+	int bottom = -1;
 
 	for (LDObjectPtr obj : Selection())
 	{
 		if (obj->qObjListEntry == null)
 			continue;
 
-		obj->qObjListEntry->setSelected (true);
+		int row = ui->objectList->row (obj->qObjListEntry);
+
+		if (top == -1)
+		{
+			top = bottom = row;
+		}
+		else
+		{
+			if (row != bottom + 1)
+			{
+				itemselect.select (ui->objectList->model()->index (top, 0),
+					ui->objectList->model()->index (bottom, 0));
+				top = -1;
+			}
+
+			bottom = row;
+		}
 	}
 
+	if (top != -1)
+	{
+		itemselect.select (ui->objectList->model()->index (top, 0),
+			ui->objectList->model()->index (bottom, 0));
+	}
+
+	ui->objectList->selectionModel()->select (itemselect, QItemSelectionModel::ClearAndSelect);
 	g_isSelectionLocked = false;
 }
 

mercurial