瀏覽代碼

ListView bugfixes.

Lasse Öörni 15 年之前
父節點
當前提交
e46c13a8a9
共有 1 個文件被更改,包括 12 次插入4 次删除
  1. 12 4
      Engine/UI/ListView.cpp

+ 12 - 4
Engine/UI/ListView.cpp

@@ -362,7 +362,8 @@ void ListView::setSelections(const std::set<unsigned>& indices)
         unsigned index = *i;
         if (index < numItems)
         {
-            if (mSelections.find(index) == mSelections.end())
+            // In singleselect mode, resend the event even for the same selection
+            if ((mSelections.find(index) == mSelections.end()) || (!mMultiselect))
             {
                 mSelections.insert(*i);
                 
@@ -616,6 +617,7 @@ void ListView::handleUIMouseClick(StringHash eventType, VariantMap& eventData)
     {
         if (element == getItem(i))
         {
+            // Check doubleclick
             bool isDoubleClick = false;
             if ((!mMultiselect) || (!qualifiers))
             {
@@ -632,6 +634,7 @@ void ListView::handleUIMouseClick(StringHash eventType, VariantMap& eventData)
                 setSelection(i);
             }
             
+            // Check multiselect with shift & ctrl
             if (mMultiselect)
             {
                 if (qualifiers & QUAL_SHIFT)
@@ -643,12 +646,17 @@ void ListView::handleUIMouseClick(StringHash eventType, VariantMap& eventData)
                         unsigned first = *mSelections.begin();
                         unsigned last = *mSelections.rbegin();
                         std::set<unsigned> newSelections = mSelections;
-                        if (i < first)
+                        if ((i == first) || (i == last))
+                        {
+                            for (unsigned j = first; j <= last; ++j)
+                                newSelections.insert(j);
+                        }
+                        else if (i < first)
                         {
                             for (unsigned j = i; j <= first; ++j)
                                 newSelections.insert(j);
                         }
-                        else if (i <= last)
+                        else if (i < last)
                         {
                             if ((abs((int)i - (int)first)) <= (abs((int)i - (int)last)))
                             {
@@ -661,7 +669,7 @@ void ListView::handleUIMouseClick(StringHash eventType, VariantMap& eventData)
                                     newSelections.insert(j);
                             }
                         }
-                        if (i > last)
+                        else if (i > last)
                         {
                             for (unsigned j = last; j <= i; ++j)
                                 newSelections.insert(j);