[haiku-commits] haiku: hrev46593 - src/kits/interface

  • From: jscipione@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 23 Dec 2013 11:04:25 +0100 (CET)

hrev46593 adds 4 changesets to branch 'master'
old head: 5fd5e562aa8b8ae91cc4d3609d7bbea5a4d9ff4f
new head: 63632ee1a2eba022507cbf3c3a1df10d7300a354
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=63632ee+%5E5fd5e56

----------------------------------------------------------------------------

d093101: BListView: style fixes

b38f03f: BListView: small optimization.
  
  We already got item at index, don’t get it again

c6c5cd9: BListView: Only select enabled items
  
  when selecting multiple items in a multi-select list view.

63632ee: BListView: Skip disabled items via keys
  
  Update B_UP_ARROW, B_DOWN_ARROW, B_HOME, and B_END
  in KeyDown() to skip over disabled items.

                                     [ John Scipione <jscipione@xxxxxxxxx> ]

----------------------------------------------------------------------------

1 file changed, 86 insertions(+), 36 deletions(-)
src/kits/interface/ListView.cpp | 122 +++++++++++++++++++++++++-----------

############################################################################

Commit:      d09310121521f334cb1a874707a94ee19972d95d
URL:         http://cgit.haiku-os.org/haiku/commit/?id=d093101
Author:      John Scipione <jscipione@xxxxxxxxx>
Date:        Mon Dec 23 09:35:46 2013 UTC

BListView: style fixes

----------------------------------------------------------------------------

diff --git a/src/kits/interface/ListView.cpp b/src/kits/interface/ListView.cpp
index d19cd75..91e9395 100644
--- a/src/kits/interface/ListView.cpp
+++ b/src/kits/interface/ListView.cpp
@@ -411,6 +411,7 @@ BListView::KeyDown(const char* bytes, int32 numBytes)
                        ScrollToSelection();
                        break;
                }
+
                case B_DOWN_ARROW:
                {
                        if (fFirstSelected == -1) {
@@ -438,6 +439,7 @@ BListView::KeyDown(const char* bytes, int32 numBytes)
 
                        ScrollToSelection();
                        break;
+
                case B_END:
                        if (extend) {
                                Select(fAnchorIndex, CountItems() - 1, true);
@@ -455,6 +457,7 @@ BListView::KeyDown(const char* bytes, int32 numBytes)
                        ScrollTo(scrollOffset);
                        break;
                }
+
                case B_PAGE_DOWN:
                {
                        BPoint scrollOffset(LeftTop());
@@ -1510,7 +1513,7 @@ BListView::_Select(int32 index, bool extend)
        }
 
        ItemAt(index)->Select();
-       if (Window())
+       if (Window() != NULL)
                InvalidateItem(index);
 
        return true;
@@ -1548,10 +1551,10 @@ BListView::_Select(int32 from, int32 to, bool extend)
        }
 
        for (int32 i = from; i <= to; ++i) {
-               BListItem *item = ItemAt(i);
                if (item && !item->IsSelected()) {
+               BListItem* item = ItemAt(i);
                        item->Select();
-                       if (Window())
+                       if (Window() != NULL)
                                InvalidateItem(i);
                        changed = true;
                }
@@ -1567,14 +1570,14 @@ BListView::_Deselect(int32 index)
        if (index < 0 || index >= CountItems())
                return false;
 
-       BWindow *window = Window();
+       BWindow* window = Window();
        BAutolock locker(window);
-       if (window && !locker.IsLocked())
+       if (window != NULL && !locker.IsLocked())
                return false;
 
-       BListItem *item = ItemAt(index);
+       BListItem* item = ItemAt(index);
 
-       if (item && item->IsSelected()) {
+       if (item != NULL && item->IsSelected()) {
                BRect frame(ItemFrame(index));
                BRect bounds(Bounds());
 
@@ -1616,8 +1619,8 @@ BListView::_DeselectAll(int32 exceptFrom, int32 exceptTo)
                if (exceptFrom != -1 && exceptFrom <= index && exceptTo >= 
index)
                        continue;
 
-               BListItem *item = ItemAt(index);
-               if (item && item->IsSelected()) {
+               BListItem* item = ItemAt(index);
+               if (item != NULL && item->IsSelected()) {
                        item->Deselect();
                        InvalidateItem(index);
                        changed = true;
@@ -1680,7 +1683,7 @@ BListView::DrawItem(BListItem* item, BRect itemRect, bool 
complete)
 bool
 BListView::_SwapItems(int32 a, int32 b)
 {
-       // remember frames of items before anyhing happens,
+       // remember frames of items before anything happens,
        // the tricky situation is when the two items have
        // a different height
        BRect aFrame = ItemFrame(a);

############################################################################

Commit:      b38f03f5616565030499a74f5a96834790b7f1b4
URL:         http://cgit.haiku-os.org/haiku/commit/?id=b38f03f
Author:      John Scipione <jscipione@xxxxxxxxx>
Date:        Mon Dec 23 09:38:27 2013 UTC

BListView: small optimization.

We already got item at index, don’t get it again

----------------------------------------------------------------------------

diff --git a/src/kits/interface/ListView.cpp b/src/kits/interface/ListView.cpp
index 91e9395..421e768 100644
--- a/src/kits/interface/ListView.cpp
+++ b/src/kits/interface/ListView.cpp
@@ -1512,7 +1512,7 @@ BListView::_Select(int32 index, bool extend)
                fLastSelected = index;
        }
 
-       ItemAt(index)->Select();
+       item->Select();
        if (Window() != NULL)
                InvalidateItem(index);
 

############################################################################

Commit:      c6c5cd994038eb544c98f0e95de8b1da37b27276
URL:         http://cgit.haiku-os.org/haiku/commit/?id=c6c5cd9
Author:      John Scipione <jscipione@xxxxxxxxx>
Date:        Mon Dec 23 09:40:10 2013 UTC

BListView: Only select enabled items

when selecting multiple items in a multi-select list view.

----------------------------------------------------------------------------

diff --git a/src/kits/interface/ListView.cpp b/src/kits/interface/ListView.cpp
index 421e768..01d3ce0 100644
--- a/src/kits/interface/ListView.cpp
+++ b/src/kits/interface/ListView.cpp
@@ -1551,8 +1551,8 @@ BListView::_Select(int32 from, int32 to, bool extend)
        }
 
        for (int32 i = from; i <= to; ++i) {
-               if (item && !item->IsSelected()) {
                BListItem* item = ItemAt(i);
+               if (item != NULL && !item->IsSelected() && item->IsEnabled()) {
                        item->Select();
                        if (Window() != NULL)
                                InvalidateItem(i);

############################################################################

Revision:    hrev46593
Commit:      63632ee1a2eba022507cbf3c3a1df10d7300a354
URL:         http://cgit.haiku-os.org/haiku/commit/?id=63632ee
Author:      John Scipione <jscipione@xxxxxxxxx>
Date:        Mon Dec 23 10:03:00 2013 UTC

BListView: Skip disabled items via keys

Update B_UP_ARROW, B_DOWN_ARROW, B_HOME, and B_END
in KeyDown() to skip over disabled items.

----------------------------------------------------------------------------

diff --git a/src/kits/interface/ListView.cpp b/src/kits/interface/ListView.cpp
index 01d3ce0..a13e5fe 100644
--- a/src/kits/interface/ListView.cpp
+++ b/src/kits/interface/ListView.cpp
@@ -393,18 +393,37 @@ BListView::KeyDown(const char* bytes, int32 numBytes)
        bool extend = fListType == B_MULTIPLE_SELECTION_LIST
                && (modifiers() & B_SHIFT_KEY) != 0;
 
+       if (fFirstSelected == -1
+               && (bytes[0] == B_UP_ARROW || bytes[0] == B_DOWN_ARROW)) {
+               // nothing is selected yet, select the first enabled item
+               int32 lastItem = CountItems() - 1;
+               for (int32 i = 0; i <= lastItem; i++) {
+                       if (ItemAt(i)->IsEnabled()) {
+                               Select(i);
+                               break;
+                       }
+               }
+               return;
+       }
+
        switch (bytes[0]) {
                case B_UP_ARROW:
                {
-                       if (fFirstSelected == -1) {
-                               // if nothing is selected yet, always select 
the first item
-                               Select(0);
-                       } else {
-                               if (fAnchorIndex > 0) {
-                                       if (!extend || fAnchorIndex <= 
fFirstSelected)
-                                               Select(fAnchorIndex - 1, 
extend);
-                                       else
-                                               Deselect(fAnchorIndex--);
+                       if (fAnchorIndex > 0) {
+                               if (!extend || fAnchorIndex <= fFirstSelected) {
+                                       for (int32 i = 1; fAnchorIndex - i >= 
0; i++) {
+                                               if (ItemAt(fAnchorIndex - 
i)->IsEnabled()) {
+                                                       // Select the previous 
enabled item
+                                                       Select(fAnchorIndex - 
i, extend);
+                                                       break;
+                                               }
+                                       }
+                               } else {
+                                       Deselect(fAnchorIndex);
+                                       do
+                                               fAnchorIndex--;
+                                       while (fAnchorIndex > 0
+                                               && 
!ItemAt(fAnchorIndex)->IsEnabled());
                                }
                        }
 
@@ -414,15 +433,22 @@ BListView::KeyDown(const char* bytes, int32 numBytes)
 
                case B_DOWN_ARROW:
                {
-                       if (fFirstSelected == -1) {
-                               // if nothing is selected yet, always select 
the first item
-                               Select(0);
-                       } else {
-                               if (fAnchorIndex < CountItems() - 1) {
-                                       if (!extend || fAnchorIndex >= 
fLastSelected)
-                                               Select(fAnchorIndex + 1, 
extend);
-                                       else
-                                               Deselect(fAnchorIndex++);
+                       int32 lastItem = CountItems() - 1;
+                       if (fAnchorIndex < lastItem) {
+                               if (!extend || fAnchorIndex >= fLastSelected) {
+                                       for (int32 i = 1; fAnchorIndex + i <= 
lastItem; i++) {
+                                               if (ItemAt(fAnchorIndex + 
i)->IsEnabled()) {
+                                                       // Select the next 
enabled item
+                                                       Select(fAnchorIndex + 
i, extend);
+                                                       break;
+                                               }
+                                       }
+                               } else {
+                                       Deselect(fAnchorIndex);
+                                       do
+                                               fAnchorIndex++;
+                                       while (fAnchorIndex < lastItem
+                                               && 
!ItemAt(fAnchorIndex)->IsEnabled());
                                }
                        }
 
@@ -434,8 +460,16 @@ BListView::KeyDown(const char* bytes, int32 numBytes)
                        if (extend) {
                                Select(0, fAnchorIndex, true);
                                fAnchorIndex = 0;
-                       } else
-                               Select(0, false);
+                       } else {
+                               // select the first enabled item
+                               int32 lastItem = CountItems() - 1;
+                               for (int32 i = 0; i <= lastItem; i++) {
+                                       if (ItemAt(i)->IsEnabled()) {
+                                               Select(i, false);
+                                               break;
+                                       }
+                               }
+                       }
 
                        ScrollToSelection();
                        break;
@@ -444,8 +478,15 @@ BListView::KeyDown(const char* bytes, int32 numBytes)
                        if (extend) {
                                Select(fAnchorIndex, CountItems() - 1, true);
                                fAnchorIndex = CountItems() - 1;
-                       } else
-                               Select(CountItems() - 1, false);
+                       } else {
+                               // select the last enabled item
+                               for (int32 i = CountItems() - 1; i >= 0; i--) {
+                                       if (ItemAt(i)->IsEnabled()) {
+                                               Select(i, false);
+                                               break;
+                                       }
+                               }
+                       }
 
                        ScrollToSelection();
                        break;
@@ -536,8 +577,14 @@ BListView::MouseDown(BPoint point)
                                // select entire block
                                // TODO: maybe review if we want it like in 
Tracker
                                // (anchor item)
-                               Select(min_c(index, fFirstSelected), 
max_c(index,
-                                       fLastSelected));
+                               if (index >= fFirstSelected && index < 
fLastSelected) {
+                                       // clicked inside of selected items 
block, deselect all
+                                       // but from the first selected item to 
the clicked item
+                                       DeselectExcept(fFirstSelected, index);
+                               } else {
+                                       Select(min_c(index, fFirstSelected), 
max_c(index,
+                                               fLastSelected));
+                               }
                        } else {
                                if (modifiers & B_COMMAND_KEY) {
                                        // toggle selection state of clicked 
item (like in Tracker)


Other related posts:

  • » [haiku-commits] haiku: hrev46593 - src/kits/interface - jscipione