| 1822 | } |
| 1823 | |
| 1824 | void ImageViewer::selectImage(const shared_ptr<Image>& image, bool stopPlayback) { |
| 1825 | // Once the selected image has been updated, reflect that in the image info window. |
| 1826 | const auto imageInfoGuard = ScopeGuard{[this]() { |
| 1827 | if (mImageInfoWindow) { |
| 1828 | updateImageInfoWindow(); |
| 1829 | } |
| 1830 | }}; |
| 1831 | |
| 1832 | if (stopPlayback) { |
| 1833 | mPlayButton->set_pushed(false); |
| 1834 | } |
| 1835 | |
| 1836 | for (auto button : mCurrentImageButtons) { |
| 1837 | button->set_enabled(image != nullptr); |
| 1838 | } |
| 1839 | |
| 1840 | if (!image) { |
| 1841 | auto& buttons = mImageButtonContainer->children(); |
| 1842 | for (size_t i = 0; i < buttons.size(); ++i) { |
| 1843 | dynamic_cast<ImageButton*>(buttons[i])->setIsSelected(false); |
| 1844 | } |
| 1845 | |
| 1846 | mCurrentImage = nullptr; |
| 1847 | mImageCanvas->setImage(nullptr); |
| 1848 | |
| 1849 | // Clear group buttons |
| 1850 | while (mGroupButtonContainer->child_count() > 0) { |
| 1851 | mGroupButtonContainer->remove_child_at(mGroupButtonContainer->child_count() - 1); |
| 1852 | } |
| 1853 | |
| 1854 | setImageWhiteLevel(DEFAULT_IMAGE_WHITE_LEVEL); |
| 1855 | |
| 1856 | requestLayoutUpdate(); |
| 1857 | return; |
| 1858 | } |
| 1859 | |
| 1860 | const auto id = imageId(image).value_or(0); |
| 1861 | |
| 1862 | // Don't do anything if the image that wants to be selected is not visible. |
| 1863 | if (!mImageButtonContainer->child_at((int)id)->visible()) { |
| 1864 | return; |
| 1865 | } |
| 1866 | |
| 1867 | auto& buttons = mImageButtonContainer->children(); |
| 1868 | for (size_t i = 0; i < buttons.size(); ++i) { |
| 1869 | dynamic_cast<ImageButton*>(buttons[i])->setIsSelected(i == id); |
| 1870 | } |
| 1871 | |
| 1872 | mCurrentImage = image; |
| 1873 | mImageCanvas->setImage(mCurrentImage); |
| 1874 | |
| 1875 | setImageWhiteLevel(mCurrentImage->whiteLevel()); |
| 1876 | |
| 1877 | // Clear group buttons |
| 1878 | while (mGroupButtonContainer->child_count() > 0) { |
| 1879 | mGroupButtonContainer->remove_child_at(mGroupButtonContainer->child_count() - 1); |
| 1880 | } |
| 1881 |
nothing calls this directly
no test coverage detected