| 841 | } |
| 842 | |
| 843 | void DeviceView::updateSelection() |
| 844 | { |
| 845 | selectedLeds.clear(); |
| 846 | selectionFlags.clear(); |
| 847 | selectionFlags.resize(controller->leds.size()); |
| 848 | |
| 849 | QRect sel = selectionRect.normalized(); |
| 850 | std::vector<led>& leds = controller->leds; |
| 851 | |
| 852 | for(std::size_t led_idx = 0; led_idx < leds.size(); ++led_idx) |
| 853 | { |
| 854 | /*-----------------------------------------------------*\ |
| 855 | | Check intersection | |
| 856 | \*-----------------------------------------------------*/ |
| 857 | int posx = led_pos[led_idx].matrix_x * size + offset_x; |
| 858 | int posy = led_pos[led_idx].matrix_y * size; |
| 859 | int posw = led_pos[led_idx].matrix_w * size; |
| 860 | int posh = led_pos[led_idx].matrix_h * size; |
| 861 | |
| 862 | QRect rect = {posx, posy, posw, posh}; |
| 863 | |
| 864 | selectionFlags[led_idx] = 0; |
| 865 | |
| 866 | if(sel.intersects(rect)) |
| 867 | { |
| 868 | selectionFlags[led_idx] = 1; |
| 869 | } |
| 870 | if(ctrlDown) |
| 871 | { |
| 872 | selectionFlags[led_idx] ^= previousFlags[led_idx]; |
| 873 | } |
| 874 | |
| 875 | if(selectionFlags[led_idx]) |
| 876 | { |
| 877 | selectedLeds.push_back(led_idx); |
| 878 | } |
| 879 | } |
| 880 | |
| 881 | update(); |
| 882 | |
| 883 | /*-----------------------------------------------------*\ |
| 884 | | Send selection changed signal | |
| 885 | \*-----------------------------------------------------*/ |
| 886 | emit selectionChanged(selectedLeds); |
| 887 | } |
| 888 | |
| 889 | bool DeviceView::selectLed(int target) |
| 890 | { |