Mercurial > hg > svgui
comparison view/Pane.cpp @ 136:a859b87162ca
* beginnings of drag up/down in layers as appropriate
author | Chris Cannam |
---|---|
date | Mon, 21 Aug 2006 16:26:35 +0000 |
parents | e98130764635 |
children | 10a82b2bbb8b |
comparison
equal
deleted
inserted
replaced
135:e98130764635 | 136:a859b87162ca |
---|---|
649 setCursor(Qt::PointingHandCursor); | 649 setCursor(Qt::PointingHandCursor); |
650 } | 650 } |
651 | 651 |
652 m_navigating = true; | 652 m_navigating = true; |
653 m_dragCentreFrame = m_centreFrame; | 653 m_dragCentreFrame = m_centreFrame; |
654 | |
655 //!!! pull out into function to go with mouse move code | |
656 | |
657 m_dragStartMinValue = 0; | |
658 | |
659 Layer *layer = 0; | |
660 if (getLayerCount() > 0) layer = getLayer(getLayerCount() - 1); | |
661 | |
662 if (layer) { | |
663 float min = 0.f, max = 0.f; | |
664 if (layer->getDisplayExtents(min, max)) { | |
665 m_dragStartMinValue = min; | |
666 } | |
667 } | |
654 | 668 |
655 } else if (mode == ViewManager::SelectMode) { | 669 } else if (mode == ViewManager::SelectMode) { |
656 | 670 |
657 bool closeToLeft = false, closeToRight = false; | 671 bool closeToLeft = false, closeToRight = false; |
658 Selection selection = getSelectionAt(e->x(), closeToLeft, closeToRight); | 672 Selection selection = getSelectionAt(e->x(), closeToLeft, closeToRight); |
924 } | 938 } |
925 | 939 |
926 if (getXForFrame(m_centreFrame) != getXForFrame(newCentreFrame)) { | 940 if (getXForFrame(m_centreFrame) != getXForFrame(newCentreFrame)) { |
927 setCentreFrame(newCentreFrame); | 941 setCentreFrame(newCentreFrame); |
928 } | 942 } |
943 | |
944 //!!! For drag up/down, we need to: call getValueExtents | |
945 //and getDisplayExtents and see whether both return true | |
946 //(we can only drag up/down if they do); and check whether | |
947 //the ranges returned differ (likewise). Then, we know | |
948 //the height of the layer, so... | |
949 | |
950 //!!! this should have its own function | |
951 | |
952 Layer *layer = 0; | |
953 if (getLayerCount() > 0) layer = getLayer(getLayerCount() - 1); | |
954 | |
955 if (layer) { | |
956 | |
957 float vmin = 0.f, vmax = 0.f; | |
958 bool vlog = false; | |
959 QString vunit; | |
960 | |
961 float dmin = 0.f, dmax = 0.f; | |
962 | |
963 if (layer->getValueExtents(vmin, vmax, vlog, vunit) && | |
964 layer->getDisplayExtents(dmin, dmax) && | |
965 (dmin > vmin || dmax < vmax)) { | |
966 | |
967 int ydiff = e->y() - m_clickPos.y(); | |
968 std::cerr << "ydiff = " << ydiff << std::endl; | |
969 | |
970 float perpix = (dmax - dmin) / height(); | |
971 float valdiff = ydiff * perpix; | |
972 std::cerr << "valdiff = " << valdiff << std::endl; | |
973 | |
974 float newmin = m_dragStartMinValue + valdiff; | |
975 float newmax = m_dragStartMinValue + (dmax - dmin) + valdiff; | |
976 if (newmin < vmin) { | |
977 newmax += vmin - newmin; | |
978 newmin += vmin - newmin; | |
979 } | |
980 if (newmax > vmax) { | |
981 newmin -= newmax - vmax; | |
982 newmax -= newmax - vmax; | |
983 } | |
984 std::cerr << "(" << dmin << ", " << dmax << ") -> (" | |
985 << newmin << ", " << newmax << ") (drag start " << m_dragStartMinValue << ")" << std::endl; | |
986 layer->setDisplayExtents(newmin, newmax); | |
987 } | |
988 } | |
929 } | 989 } |
930 | 990 |
931 } else if (mode == ViewManager::SelectMode) { | 991 } else if (mode == ViewManager::SelectMode) { |
932 | 992 |
933 int mouseFrame = getFrameForX(e->x()); | 993 int mouseFrame = getFrameForX(e->x()); |