19 #if QT_VERSION < 0x040000
22 #include <QMouseEvent>
26 #include "msdevstudio/MSconfig.h"
64 #undef PACKAGE_BUGREPORT
67 #undef PACKAGE_TARNAME
68 #undef PACKAGE_VERSION
70 #include "wcslib/C/config.h"
72 #include "wcslib/config.h"
76 #include <qapplication.h>
79 #if QT_VERSION < 0x040000
80 #include <qfiledialog.h>
84 #include <q3filedialog.h>
85 #include <QtGui/QImageWriter>
90 #include <qmessagebox.h>
92 #include <qsettings.h>
93 #include <qstatusbar.h>
94 #include <qwaitcondition.h>
118 using namespace hippodraw;
126 #if QT_VERSION < 0x040000
128 const char * name, Qt::WFlags f )
131 const char * name, Qt::WFlags f )
135 m_image_dialog ( 0 ),
169 #if QT_VERSION < 0x040000
172 initDockWindows ( Q3MainWindow * mw )
178 QString dockSetting = settings.
readEntry ( s_app_key +
"DockWindow/Position",
179 QString::null, &ok );
181 if ( ok ==
false )
return;
190 #if QT_VERSION < 0x040000
192 QObject * parent = ag -> parent ();
199 for (
unsigned int i = 0; i<5; i++){
202 QString::null, &ok );
205 if ((ok==
false) || ( entry ==
"" ))
return;
208 #if QT_VERSION < 0x040000
216 ag -> addAction ( action );
219 action -> setToggleAction (
true );
232 QString::null, &ok );
234 const string name ( entry.
latin1() );
255 const string fitter ( name.
latin1() );
263 controller -> setDefaultFitter ( name );
279 const vector < string > & fitters = controller -> getFitterNames ();
280 const string & def_fitter = controller -> getDefaultFitter ();
281 #if QT_VERSION < 0x040000
283 QObject * parent = ag -> parent ();
285 for (
unsigned int i = 0; i < fitters.size(); i++ ) {
286 #if QT_VERSION < 0x040000
287 const QString name ( fitters[i].c_str() );
294 const QString name ( fitters[i].c_str() );
296 ag -> addAction ( action );
298 action -> setToggleAction (
true );
299 if ( def_fitter == fitters[i] ) {
300 action -> setOn (
true );
314 if(
s_printer -> orientation() == QPrinter::Portrait )
340 std::list < ViewBase * > ::const_iterator first = views.begin();
341 for ( ; first != views.end(); ++first ) {
343 if ( view -> height () < 0 ||
344 view -> width () < 0 ) {
350 #if QT_VERSION < 0x040000
366 std::list < std::string > & missing_tuples =
368 std::list< std::string>::iterator it;
370 for ( it=missing_tuples.begin(); it!=missing_tuples.end(); ++it )
372 string shortFileName;
373 string::size_type pos1 = (*it).find_last_of (
"/");
374 string::size_type pos2 = (*it).find_last_of (
":");
375 shortFileName = (*it).substr(pos1+1);
377 QString cap (
"Select the DataSource: " );
378 cap += shortFileName.c_str();
379 QString filter (
"All files(*.*);;Text NTuple(*.tnt);;FITS file(*.fits);;Compressed FITS file(*.fits.gz);;ROOT file(*.root)");
382 #if QT_VERSION < 0x040000
389 Q3FileDialog::getOpenFileName ( QString::null,
396 string newFileName = filename.
latin1();
399 if ( ( pos2!= string::npos) && (pos2 != 1) ) {
400 ( *it ).replace (0, pos2, newFileName);
418 QString fn = filename.c_str ();
420 message =
QString(
"Unable to open document file:\n%1\n").
arg ( fn );
422 message +=
"\nFile could not be read\n";
425 message +=
"\nThere was a XML parsing error\n";
427 message +=
"\nThere were one or more referenced\n";
428 message +=
"NTuple files that could not be found.";
441 const list < ViewBase * > & view_list
457 for ( string::size_type i = 0; i <
size; i++ ) {
461 c !=
';' ) types += c;
464 string message (
"Attempt to save image to file:\n" );
466 message +=
"\nwhose suffix indicates unsupported image format.\n\n";
467 message +=
"Supported image formats are:\n";
471 "Image format error",
480 string message (
"The file:\n" );
482 message +=
"\nalready exists.\n\n";
483 message +=
"Over-write existing file?";
486 "Existing file warning",
492 return yes == QMessageBox::Yes;
502 const vector < const ViewBase * > & selViews =
selectedViews();
503 if ( selViews.empty () )
return;
505 vector < const ViewBase * > view_list;
516 const vector < const ViewBase * > & targets =
views ();
519 const list < ViewBase * > & pb_views
528 const vector < const ViewBase * > & targets =
views ();
531 const list < ViewBase * > & pb_views
533 list < ViewBase * >::const_iterator first = pb_views.begin ();
534 while ( first != pb_views.end () ) {
546 const vector < const ViewBase * > & selViews =
selectedViews();
547 if ( selViews.empty () )
return;
549 vector < const ViewBase * > view_list;
560 #ifdef ITERATOR_MEMBER_DEFECT
563 vector < const ViewBase * > ::const_iterator iter = view_list.begin();
566 while ( iter != view_list.end() ) {
567 const ViewBase * curview = ( * iter++ );
568 const QtView * view = dynamic_cast <
const QtView * > ( curview );
570 if (view) v = const_cast <
QtView * > ( view );
574 if (groupview) gv = const_cast <
QtGroupView * > (groupview);
598 #ifdef ITERATOR_MEMBER_DEFECT
601 vector < const ViewBase * > ::const_iterator first = views.begin();
602 while ( first != views.end() ) {
603 const QtView * view = dynamic_cast <
const QtView * > ( *first++ );
615 std::list < ViewBase * > ::const_iterator first = views.begin();
616 for ( ; first != views.end(); ++first ) {
638 QWidget * parent = parentWidget ();
656 controller -> updateActions ();
659 vector < PlotterBase * >
663 vector < PlotterBase * > plotters;
665 const vector < const ViewBase * > & viewList =
selectedViews ();
666 unsigned int size = viewList.size ();
667 for (
unsigned int i = 0; i <
size; i++ ) {
668 const ViewBase * view = viewList [ i ];
673 const vector <PlotterBase *> groupPlotters = groupView -> getPlotters ();
674 plotters.insert ( plotters.end(),
675 groupPlotters.begin(), groupPlotters.end() );
681 if ( plotter != 0 ) {
682 plotters.push_back ( plotter );
691 const vector < const ViewBase * > & viewList =
selectedViews ();
693 if ( viewList.size() != 1 )
698 PlotterBase * plotter = viewList[0]->getPlotter ();
712 vector < const ViewBase * > view_list;
731 #if QT_VERSION < 0x040000
734 Q3Canvas * can =
canvas();
736 int numpages =
static_cast<int> ( can -> height()
741 can -> resize ( static_cast<int> ( 1.2 *
m_upage_w ),
753 cs -> setOrientation (
s_printer -> orientation() );
760 int retval = cs -> exec ();
768 if ( cs -> orientation() !=
s_printer -> orientation() ) {
769 s_printer -> setOrientation( cs -> orientation() );
773 if( cs -> printerBounds() ==
false )
786 unsigned int columns = cs -> getWidthNumber ();
787 unsigned int rows = cs -> getHeightNumber ();
804 const vector < const ViewBase * > & allviews =
views();
806 for(
unsigned int i = 0; i < allviews.size(); i++ )
808 const ViewBase * curview = allviews[ i ];
809 const QtView * view = dynamic_cast <
const QtView * > ( curview );
811 v -> setDefaultFont( font );
812 v -> getPlotter() -> update();
823 if ( transform_aspect_ratio > 0.0 )
825 width = height * transform_aspect_ratio;
828 view -> setDrawRect ( 0.0, 0.0, width, height );
844 ViewBase * view = factory -> createView ( plotter );
846 qtview -> setSize ( -1, -1 );
866 double transform_aspect_ratio = plotter -> getAspectRatio();
872 #if QT_VERSION < 0x040000
875 sortViews ( Q3CanvasItem * first, Q3CanvasItem * second )
880 QRect frect = first -> boundingRect ();
881 QRect srect = second -> boundingRect ();
883 if ( frect.
left () < srect.
left () ) {
894 yes = frect.
top () < srect.
top ();
904 #if QT_VERSION < 0x040000
907 Q3Canvas temp_canvas;
909 #ifdef MEMFUN1_DEFECT
911 #if QT_VERSION < 0x040000
914 bind2nd ( mem_fun1 ( & Q3CanvasItem::setCanvas ),
919 #if QT_VERSION < 0x040000
922 bind2nd ( mem_fun ( & Q3CanvasItem::setCanvas ), &temp_canvas ) );
926 #if QT_VERSION < 0x040000
927 vector < QCanvasItem * > items (
m_items );
929 vector < Q3CanvasItem * > items (
m_items );
933 sort ( items.begin(), items.end(),
sortViews );
940 #if QT_VERSION < 0x040000
941 placeItems (
const std::vector < QCanvasItem * > & items )
943 vector < QCanvasItem * >:: const_iterator first = items.begin();
945 placeItems (
const std::vector < Q3CanvasItem * > & items )
947 vector < Q3CanvasItem * >:: const_iterator first = items.begin();
951 vector <QtView *> textViews;
953 while ( first != items.end() )
958 if (plotter->isTextPlotter()) {
960 double x = view -> x ();
961 double y = view -> y ();
962 view->moveBy(-x, -y);
963 textViews.push_back(view);
966 calcDefaultSize ( view, view -> getAspectRatio() );
972 vector <QtView *>::const_iterator it = textViews.begin();
973 while ( it != textViews.end() )
985 int y = contentsY ();
988 #if QT_VERSION < 0x040000
992 vector < QCanvasItem * > v_items;
993 QCanvasItemList:: const_iterator first = c_items.begin();
994 while ( first != c_items.end() ) {
997 Q3CanvasItemList c_items =
m_canvas -> collisions ( rect );
1000 vector < Q3CanvasItem * > v_items;
1001 Q3CanvasItemList:: const_iterator first = c_items.begin();
1002 while ( first != c_items.end() ) {
1003 Q3CanvasItem * item = *first++;
1008 v_items.push_back ( item );
1019 QRect rect = target -> boundingRect ();
1020 double x = target -> x ();
1021 double y = target -> y ();
1022 x += 0.25 * rect.
width();
1023 y += 0.25 * rect.
height();
1025 view->moveBy ( x, y );
1028 std::pair<double, double>
1032 double xrel,
double yrel )
1035 QRect rect = sel_item->boundingRect ();
1036 double x = sel_item->x();
1037 double y = sel_item->y();
1038 x += xrel * rect.
width();
1039 y += yrel * rect.
height();
1041 view->moveBy ( x, y );
1044 QRect viewRect = view->boundingRect();
1045 double xLowerLeft = view->x();
1046 double yLowerLeft = view->y() + viewRect.
height();
1049 xLowerLeft = ( xLowerLeft - sel_item->x() ) / rect.
width();
1050 yLowerLeft = ( yLowerLeft - sel_item->y() ) / rect.
height();
1052 return std::make_pair<double, double>(xLowerLeft, yLowerLeft);
1058 const std::string & s,
1059 const std::string & text )
1065 = display_controller->
createTextView ( factory, plotter, s, text );
1066 assert ( view != 0 );
1069 assert ( qtview != 0 );
1079 qtview->setZ(z+101.0);
1082 std::pair<double, double>
1085 const std::string &
type,
1086 const std::string & text,
1087 double x,
double y )
1093 = display_controller->
createTextView ( factory, plotter, type, text );
1097 std::pair<double, double> lowerLeftCorner
1102 return lowerLeftCorner;
1129 if ( view != 0 )
remove ( view );
1136 #if QT_VERSION < 0x040000
1138 QCanvasItemList::Iterator first = items.begin();
1139 while ( first != items.end() ) {
1143 Q3CanvasItemList::Iterator first = items.begin();
1144 while ( first != items.end() ) {
1145 Q3CanvasItem * item = *first++;
1149 item -> setVisible ( yes );
1173 const vector < const ViewBase * > &
1179 #if QT_VERSION < 0x040000
1180 vector < QCanvasItem * > :: const_iterator first =
m_selected_list.begin();
1184 vector < Q3CanvasItem * > :: const_iterator first =
m_selected_list.begin();
1186 Q3CanvasItem * item = *first++;
1193 if ( groupview != 0 ){
1205 #if QT_VERSION < 0x040000
1207 QCanvasItemList::Iterator it = item_list.begin();
1210 Q3CanvasItemList::Iterator it = item_list.begin();
1212 for ( ; it != item_list.end(); ++ it ) {
1213 const QtView * view = dynamic_cast <
const QtView * > ( *it );
1226 plotterlist.clear();
1228 const vector < const ViewBase * > & view_list =
views ();
1229 #ifdef ITERATOR_MEMBER_DEFECT
1232 vector < const ViewBase * >::const_iterator first = view_list.begin ();
1233 for ( ; first != view_list.end(); ++first ) {
1234 const QtView * qtview = dynamic_cast <
const QtView * > ( *first );
1235 plotterlist.push_back ( qtview->
getPlotter () );
1245 const vector < const ViewBase * > & all_views =
views ();
1246 vector < const ViewBase * > :: const_iterator first = all_views.begin();
1248 while ( first != all_views.end() ) {
1251 if ( plotter == target ) {
1252 const QtView * v = dynamic_cast <
const QtView * > ( vb );
1253 view = const_cast <
QtView * > ( v );
1265 #ifdef STRING_CLEAR_DEFECT
1271 const string eps (
"eps" );
1272 bool eps_inserted =
false;
1274 #if QT_VERSION < 0x040000
1276 QStringList::Iterator it = slist.begin();
1282 while ( it != slist.end() ) {
1285 #if QT_VERSION < 0x030100
1286 string low ( lower );
1288 string low = lower.
latin1();
1291 #else // not mac os x
1292 if ( low ==
"jpeg" ) low =
"jpg";
1296 #if QT_VERSION < 0x040000
1303 if ( eps_inserted ==
false ) {
1304 #if QT_VERSION < 0x040000
1309 eps_inserted =
true;
1311 #if QT_VERSION < 0x040000
1319 #if QT_VERSION < 0x040000
1325 #if QT_VERSION < 0x040000
1332 #if QT_VERSION < 0x040000
1344 #if QT_VERSION < 0x040000
1347 dialog->
setMode ( QFileDialog::AnyFile );
1349 Q3FileDialog * dialog =
new Q3FileDialog (
this );
1350 dialog->setFilters ( filters );
1351 dialog->setMode ( Q3FileDialog::AnyFile );
1367 #if QT_VERSION < 0x040000
1372 assert ( views.empty () == false );
1374 for (
unsigned int i = 0; i < views.size (); i++ ) {
1380 #if QT_VERSION < 0x040000
1390 = Q3FileDialog::getSaveFileName ( QString::null,
1398 if ( filename.isEmpty () )
return;
1402 #if QT_VERSION < 0x030100
1403 string fn ( filename );
1405 string fn = filename.latin1();
1408 int pos = filename.findRev (
'.' );
1410 string sf = sel_filt.
latin1();
1411 string::size_type pos1 = sf.find (
'(' );
1412 string::size_type pos2 = sf.find_last_of (
')' );
1413 string::size_type len = ( pos2 ) - ( pos1 + 2 );
1414 string suffix = sf.substr ( pos1 + 2, len );
1422 for (
unsigned int i = 0; i < views.size(); i++ ) {
1435 #if QT_VERSION < 0x040000
1440 if (views.empty()) {
1444 for (
unsigned int i = 0; i < views.size (); i++ ) {
1452 for (
unsigned int i = 0; i < views.size(); i++ ) {
1465 const vector < const ViewBase * > & view_list =
views ();
1466 vector < const ViewBase * > ::const_iterator first = view_list.begin ();
1468 while ( first != view_list.end() ) {
1471 controller -> setAllIntervalEnabled ( plotter, yes );
1481 const vector < const ViewBase * > & targets =
views ();
1483 const list < ViewBase * > &
views
1486 if ( views.empty() == false ) {
1496 #if QT_VERSION < 0x040000
1501 QtView * qtview = dynamic_cast <
QtView * > ( selItem );
1507 plotter -> toggleActivePlot ();
1514 const vector < const ViewBase * > & sel_views =
selectedViews ();
1516 view_list.resize ( sel_views.size() );
1517 copy ( sel_views.begin(), sel_views.end(), view_list.begin() );
1520 const vector < const ViewBase * > & all_views =
views ();
1522 controller->addTextViewToList ( view_list, all_views );
1528 if ( (e->
button() == Qt::RightButton) ||( e->
state() == Qt::RightButton)) {
1532 const vector < const ViewBase * > & sel_views =
selectedViews ();
1534 if ( ! sel_views.empty () ) {
1535 vector < const ViewBase * > view_list;
1550 if ( (e->
button() == Qt::RightButton) ||( e->
state() & Qt::RightButton)) {
1551 #if QT_VERSION < 0x040000
1556 if ( right_item == 0 )
return;
1558 #if QT_VERSION < 0x040000
1562 Q3CanvasRectangle * rect
1563 = dynamic_cast <Q3CanvasRectangle *> ( right_item );
1569 if ( ( p.x() >= rect->x() ) &&
1570 ( p.x() <= rect->x() + rect->width() ) &&
1571 ( p.y() >= rect->y() ) &&
1572 ( p.y() <= rect->y() + rect->height() ) ) {
1574 QtView * qtview = dynamic_cast <
QtView * > ( right_item );
1579 vector < ViewBase * >::const_iterator first = views.begin();
1580 for ( ; first != views.end(); ++first ) {
1582 if ( ( p.x() >= v->x() ) &&
1583 ( p.x() <= v->x() + v->
width() ) &&
1584 ( p.y() >= v->y() ) &&
1585 ( p.y() <= v->y() + v->
height() ) ) {
1590 if ( qtview == 0 )
return;
1594 vector < double > picked;
1596 if ( picked.empty () )
return;
1598 unsigned int size = picked.size();
1599 double datax = picked[1];
1600 double datay = picked[2];
1606 double unscaledDataX = picked[1];
1607 double unscaledDataY = picked[2];
1608 if ( std::abs ( picked[0] - 1.0 ) < 0.5 ) unscaledDataY = picked[3];
1617 tf_fits -> transform ( unscaledDataX, unscaledDataY );
1623 const QCursor cursor ( Qt::CrossCursor );
1628 (
"Coordinates are : ( %1, %2, %3 )" )
1635 sb->message ( qstr );
1642 map < const QtView*, PickTable * > ::iterator first
1658 if ( plotter == 0 )
return;
1673 if ( cut_low < plotter_low )
1676 cut1d -> setCutRangeAt ( currentRange , 0 );
1678 if ( cut_high > plotter_high )
1681 cut1d -> setCutRangeAt ( currentRange , 0 );
1689 double cut_low_x = cut2d->getCutRange().low();
1690 double cut_high_x = cut2d->getCutRange().high();
1691 double plotter_low_x = cut2d->getRange(
Axes::X,
true ).low();
1692 double plotter_high_x = cut2d->getRange(
Axes::X,
true ).high();
1693 double cut_low_y = cut2d->getCutRangeY().low();
1694 double cut_high_y = cut2d->getCutRangeY().high();
1695 double plotter_low_y = cut2d->getRange(
Axes::Y,
true ).low();
1696 double plotter_high_y = cut2d->getRange(
Axes::Y,
true ).high();
1700 if ( cut_low_x < plotter_low_x )
1703 cut2d -> setCutRangeAt ( currentRange , 0 );
1705 if ( cut_high_x > plotter_high_x )
1708 cut2d -> setCutRangeAt ( currentRange , 0 );
1711 if ( cut_low_y < plotter_low_y )
1714 cut2d -> setCutRangeAt ( currentRange , 1 );
1716 if ( cut_high_y > plotter_high_y )
1719 cut2d -> setCutRangeAt ( currentRange , 1 );
1730 Range oldRange = cut1d -> getCutRange ();
1731 double old_low = oldRange.
low();
1732 double old_high = oldRange.
high();
1734 if ( datax < ( old_low + old_high ) / 2 ) {
1736 cut1d -> setCutRangeAt ( currentRange , 0 );
1742 cut1d -> setCutRangeAt ( currentRange , 0 );
1749 Range oldRangeX = cut2d -> getCutRange ();
1750 Range oldRangeY = cut2d -> getCutRangeY ();
1751 double old_low_x = oldRangeX.
low();
1752 double old_high_x = oldRangeX.
high();
1753 double old_low_y = oldRangeY.
low();
1754 double old_high_y = oldRangeY.
high();
1757 double dis_low_x = std::abs ( datax - old_low_x );
1758 double dis_high_x = std::abs ( datax - old_high_x );
1759 double dis_low_y = std::abs ( datay - old_low_y );
1760 double dis_high_y = std::abs ( datay - old_high_y );
1763 if ( ( dis_low_x <= 0.1 * (old_high_x - old_low_x)) &&
1764 ( dis_low_y <= 0.1 * (old_high_y - old_low_y)) &&
1767 cut2d -> setCutRangeAt ( currentRange, 0 );
1770 if ( e->
state() & Qt::ShiftButton) {
1771 int view_top = qtview->
toViewY(old_high_y);
1772 int view_left = qtview->
toViewX(datax);
1773 int view_right = qtview->
toViewX(old_high_x);
1774 int view_bottom = view_top + view_right - view_left;
1778 vector <double> adjusted;
1780 currentRange =
typename Range::Range ( adjusted[2], old_high_y );
1783 currentRange =
typename Range::Range ( datay, old_high_y );
1784 cut2d -> setCutRangeAt ( currentRange, 1 );
1789 else if ( ( dis_low_x <= 0.1 * (old_high_x - old_low_x)) &&
1790 ( dis_high_y <= 0.1 * (old_high_y - old_low_y)) &&
1793 cut2d -> setCutRangeAt ( currentRange, 0 );
1796 if ( e->
state() & Qt::ShiftButton) {
1797 int view_bottom = qtview->
toViewY(old_low_y);
1798 int view_left = qtview->
toViewX(datax);
1799 int view_right = qtview->
toViewX(old_high_x);
1800 int view_top = view_bottom - view_right + view_left;
1804 vector <double> adjusted;
1806 currentRange =
typename Range::Range ( old_low_y, adjusted[2]);
1809 currentRange =
typename Range::Range ( old_low_y, datay );
1810 cut2d -> setCutRangeAt ( currentRange, 1 );
1815 else if ( ( dis_high_x <= 0.1 * (old_high_x - old_low_x)) &&
1816 ( dis_low_y <= 0.1 * (old_high_y - old_low_y)) &&
1819 cut2d -> setCutRangeAt ( currentRange, 0 );
1822 if ( e->
state() & Qt::ShiftButton) {
1823 int view_top = qtview->
toViewY(old_high_y);
1824 int view_left = qtview->
toViewX(old_low_x);
1825 int view_right = qtview->
toViewX(datax);
1826 int view_bottom = view_top + view_right - view_left;
1830 vector <double> adjusted;
1832 currentRange =
typename Range::Range ( adjusted[2], old_high_y );
1835 currentRange =
typename Range::Range ( datay, old_high_y );
1836 cut2d -> setCutRangeAt ( currentRange, 1 );
1841 else if ( ( dis_high_x <= 0.1 * (old_high_x - old_low_x)) &&
1842 ( dis_high_y <= 0.1 * (old_high_y - old_low_y)) &&
1845 cut2d -> setCutRangeAt ( currentRange, 0 );
1848 if ( e->
state() & Qt::ShiftButton) {
1849 int view_bottom = qtview->
toViewY(old_low_y);
1850 int view_left = qtview->
toViewX(old_low_x);
1851 int view_right = qtview->
toViewX(datax);
1852 int view_top = view_bottom - view_right + view_left;
1856 vector <double> adjusted;
1858 currentRange =
typename Range::Range ( old_low_y, adjusted[2] );
1861 currentRange =
typename Range::Range ( old_low_y, datay );
1862 cut2d -> setCutRangeAt ( currentRange, 1 );
1867 else if ( ( dis_low_x <= dis_high_x ) &&
1868 ( dis_low_x <= dis_low_y ) &&
1869 ( dis_low_x <= dis_high_y ) &&
1872 cut2d -> setCutRangeAt ( currentRange, 0 );
1877 else if ( ( dis_high_x <= dis_low_x ) &&
1878 ( dis_high_x <= dis_low_y ) &&
1879 ( dis_high_x <= dis_high_y ) &&
1882 cut2d -> setCutRangeAt ( currentRange, 0 );
1887 else if ( ( dis_low_y <= dis_high_x ) &&
1888 ( dis_low_y <= dis_low_x ) &&
1889 ( dis_low_y <= dis_high_y ) &&
1892 cut2d -> setCutRangeAt ( currentRange, 1 );
1900 cut2d -> setCutRangeAt ( currentRange, 1 );
1930 cut1d -> setCutRangeAt ( currentRange , 0 );
1953 cut2d -> setCutRangeAt ( currentRange, 0 );
1964 cut2d -> setCutRangeAt ( currentRange, 1 );
1976 Range oldRange = cut1d -> getCutRange ();
1977 double width, low, high;
1980 if ( (controller -> getLog ( plotter,
Axes::X )) ==
true )
1982 width = log10(oldRange.
high())-log10(oldRange.
low());
1983 low = pow ( 10., log10(datax) - ( width/2 ) );
1984 high = pow ( 10., log10(datax) + ( width/2 ) );
1990 width = oldRange.
high() - oldRange.
low();
1991 low = datax - width/2;
1992 high = datax + width/2;
1995 cut1d -> setCutRangeAt (currentRange, 0 );
2002 Range oldRangeX = cut2d -> getCutRange ();
2003 Range oldRangeY = cut2d -> getCutRangeY ();
2004 double width_x, width_y, low_x, high_x, low_y, high_y;
2007 if ( (controller -> getLog ( plotter,
Axes::X )) ==
true )
2009 width_x = log10(oldRangeX.
high())-log10(oldRangeX.
low());
2010 low_x = pow ( 10., log10(datax) - ( width_x/2 ) );
2011 high_x = pow ( 10., log10(datax) + ( width_x/2 ) );
2017 width_x = oldRangeX.
high() - oldRangeX.
low();
2018 low_x = datax - width_x/2;
2019 high_x = datax + width_x/2;
2023 if ( (controller -> getLog ( plotter,
Axes::Y )) ==
true )
2025 width_y = log10(oldRangeY.
high())-log10(oldRangeY.
low());
2026 low_y = pow ( 10., log10(datay) - ( width_y/2 ) );
2027 high_y = pow ( 10., log10(datay) + ( width_y/2 ) );
2033 width_y = oldRangeY.
high() - oldRangeY.
low();
2034 low_y = datay - width_y/2;
2035 high_y = datay + width_y/2;
2039 cut2d -> setCutRangeAt (currentRange, 0 );
2040 currentRange =
typename Range::Range ( low_y, high_y );
2041 cut2d -> setCutRangeAt (currentRange, 1 );
2067 #if QT_VERSION < 0x040000
2073 if ( item->isActive () )
return;
2089 #if QT_VERSION < 0x040000
2093 Q3CanvasRectangle * rect
2094 = dynamic_cast <Q3CanvasRectangle *> ( item );
2098 if ( (e->
button() == Qt::LeftButton) ||
2099 ( e->
state() & Qt::LeftButton) ) {
2102 if ( ( p.
x() >= rect->x() ) &&
2103 ( p.
x() <= rect->x() + rect->width() ) &&
2104 ( p.
y() >= rect->y() ) &&
2105 ( p.
y() <= rect->y() + rect->height() ) ) {
2118 if (e->
state() & Qt::ShiftButton) {
2120 bo_right.
setY( top_left.
y() - bo_right.
x() + top_left.
x() );
2124 top_left.
setY( bo_right.
y() + bo_right.
x() - top_left.
x() );
2128 #if QT_VERSION < 0x040000
2135 QColor color (
"black" );
2136 QPen pen ( color, 1, Qt::DotLine );
2140 QString message (
"Can not do range zoom in a group view.\n" );
2141 message +=
"Please select a single plotter view.";
2164 const std::string & filename )
2166 if ( plotter == 0 )
return;
2168 string::size_type i = filename.find_last_of (
'.');
2169 if ( i != string::npos ) {
2170 string suffix ( filename.substr ( i + 1 ) );
2171 if ( suffix ==
"eps" ||
2177 assert ( view != 0 );
2179 QRect rect = view -> rect ();
2189 string::size_type
size = upper.size();
2190 for ( string::size_type i = 0; i <
size; i++ ) {
2191 upper[i] = std::tolower ( upper[i] );
2200 if (suffix==
"gz" || suffix==
"GZ")
return true;
2204 string star (
"*." + suffix );
2210 return i != string::npos;
2217 QString message (
"Sorry, this installation of " );
2219 message +=
" was not\n"
2220 "built with the optional FITS support.";
2230 string filename = fn;
2231 string::size_type i = filename.find_last_of (
'.' );
2233 if ( i == string::npos ) {
2236 string filt = s.
latin1();
2237 string::size_type ipos = filt.find (
"*." ) + 1;
2238 string::size_type epos = filt.find (
")" );
2239 string suffix ( filt.substr ( ipos, epos - ipos ) );
2245 i = filename.find_last_of (
'.' );
2248 string suffix ( filename.substr ( i + 1 ) );
2250 string base ( filename.substr ( 0, i - 1 ) );
2251 if ( base.empty () ) filename =
"image." + suffix;
2253 if ( check_existing ) {
2254 QString fn ( filename.c_str() );
2259 if ( yes ==
false )
return;
2264 if ( suffix ==
"eps" ||
2269 else if (suffix ==
"fits" ||
2296 const std::string & filename )
const
2299 if ( plotter -> isImageConvertable () ==
false ) {
2300 QString message (
"The contents of this plotter is not\n"
2301 "onvertable to a FITS image." );
2310 const std::vector <unsigned int> & fitsshape = p->
getShape();
2311 const std::vector <double> & fitsdata = p->
getZValues();
2329 QString message (
"No plot or more than one plot selected." );
2346 const std::string & filename )
const
2348 if ( plotter != 0 ) {
2350 assert ( view != 0 );
2352 QRect rect = view -> rect ();
2354 rect.
x(), rect.
y (),
2356 const Rect & marg_rect = view -> getMarginRect ();
2357 eps -> setMarginRect ( marg_rect );
2360 eps -> setPlotter ( p );
2361 eps -> setDrawRect ( rect.
x(), rect.
y(),
2364 eps -> closeFile ();
2379 const vector < const ViewBase * > & viewList =
selectedViews ();
2380 #ifdef ITERATOR_MEMBER_DEFECT
2383 vector < const ViewBase * > :: const_iterator first = viewList.begin();
2384 while ( first != viewList.end() ) {
2386 const QtView * view = dynamic_cast <
const QtView * > ( vb );
2390 eps_view -> setPlotter ( plotter );
2391 eps_view -> setDrawRect ( rect.
x(), rect.
y(),
2393 const Rect & marg_rect = view -> getMarginRect ();
2394 eps_view -> setMarginRect ( marg_rect );
2396 eps_view -> drawSelf ();
2399 eps_view -> closeFile ();
2408 saveAs (
const std::string & filename )
const
2410 const vector < const ViewBase * > & view_list =
views ();
2411 saveAs ( view_list, filename );
2416 saveAs (
const std::vector < PlotterBase * > & plotters,
2417 const std::string & filename )
2419 vector < const ViewBase * >
views;
2421 unsigned int size = plotters.size ();
2422 for (
unsigned int i = 0; i <
size; i++ ) {
2425 views.push_back ( view );
2427 saveAs ( views, filename );
2433 const std::string & filename )
2457 if ( tuples.empty () ) {
2458 QString message (
"There are no NTuples to be exported" );
2466 #if QT_VERSION < 0x040000
2471 "Save data source as ..." );
2473 Q3FileDialog::getSaveFileName ( QString::null,
2477 "Save data source as ..." );
2480 if ( filename == QString::null )
return;
2482 QString suffix ( data_suffix.c_str() );
2483 #if QT_VERSION < 0x030300
2486 if ( filename.
endsWith ( suffix ) ==
false &&
2487 filename.
endsWith ( suffix2 ) == false ) {
2488 filename += data_suffix;
2491 if ( filename.
endsWith ( suffix,
false ) == false ) {
2492 filename += data_suffix.c_str();
2496 const string tuple_name =
m_inspector -> getSelectedDataSourceName ();
2498 #if defined(QT_NO_STL) || QT_VERSION < 0x030100
2499 string tuple_file( filename );
2501 string tuple_file ( filename.
latin1() );
2507 controller -> changeName ( tuple_name, tuple_file );
2509 catch (
const std::exception & e ) {
2510 QString message (
"An error occurred in writing file.\n\n" );
2511 message += e.what();
2516 QMessageBox::NoButton,
2517 QMessageBox::NoButton );
2529 std::vector<double> picked;
2538 if (e->
button() == Qt::RightButton || e->
state() == Qt::RightButton) {
2540 #if QT_VERSION < 0x040000
2546 if ( right_item == 0 ) {
2550 qtview = dynamic_cast <
QtView * > ( right_item );
2557 vector < ViewBase * >::const_iterator first = views.begin();
2558 for ( ; first != views.end(); ++first ) {
2560 if ( ( p.
x() >= v->x() ) &&
2561 ( p.
x() <= v->x() + v->
width() ) &&
2562 ( p.
y() >= v->y() ) &&
2563 ( p.
y() <= v->y() + v->
height() ) ) {
2568 if ( qtview == 0 )
return;
2578 #if QT_VERSION < 0x040000
2582 Q3CanvasRectangle * rect
2583 = dynamic_cast <Q3CanvasRectangle *> ( qtview );
2587 if ( ( p.
x() >= rect->x() ) &&
2588 ( p.
x() <= rect->x() + rect->width() ) &&
2589 ( p.
y() >= rect->y() ) &&
2590 ( p.
y() <= rect->y() + rect->height() ) ) {
2592 vector < double > picked2;
2609 std::vector <double> zoom_top_left;
2610 std::vector <double> zoom_bo_right;
2649 #if QT_VERSION < 0x040000
2654 Q3CanvasRectangle * rect =
dynamic_cast<Q3CanvasRectangle *
>(selItem);
2658 if (!qtview)
return false;
2660 if ( ( p.
x() >= rect->x() ) &&
2661 ( p.
x() <= rect->x() + rect->width() ) &&
2662 ( p.
y() >= rect->y() ) &&
2663 ( p.
y() <= rect->y() + rect->height() ) ) {
2665 if (!picked.empty()) {
2676 if (!picked.empty()) {
2681 if (picked.size() == 4) {
2692 if (!picked.empty()){
2694 map < const QtView *, PickTable * > ::iterator first
2700 table -> addItem ( picked );
2711 const std::vector<double> & picked) {
2718 std::min(picked[1], start_picked[1]),
2719 std::max(picked[1], start_picked[1]) );
2722 std::min(picked[2], start_picked[2]),
2723 std::max(picked[2], start_picked[2]) );
2725 plotter -> setCurrentRangeSaved (
false );
2743 int i = plotter -> currentView();
2745 plotter -> setCurrentRangeSaved(
true );
2748 std::vector<double>&
2768 QString message (
"One must select a single plot before showing\n"
2769 "the pick table." );
2776 #if QT_VERSION < 0x040000
2781 QtView * qtview = dynamic_cast <
QtView * > ( selItem );
2782 if ( qtview == 0 ) {
2783 QString message (
"Can not show pick table of a group view.\n" );
2784 message +=
"Please select a single plotter view.";
2790 map < const QtView *, PickTable * > ::iterator first
2808 const std::vector<double> &
2812 #if QT_VERSION < 0x040000
2825 std::string about =
"<h2>HippoDraw version: ";
2827 about +=
"<h3> Built on ";
2829 about +=
"<li> Qt ";
2830 about += QT_VERSION_STR;
2832 about +=
"<li> CFITSIO ";
2834 about += fits_version.c_str();
2838 about +=
"<li> C++ Minuit";
2842 about +=
"<li> Minuit2";
2846 about +=
"<li> ROOT ";
2848 about += root_version.c_str();
2852 about +=
"<li> WCSlib ";
2857 about +=
"<h3>Contributors...";
2859 about +=
"<li> Stephane Bonneaud";
2860 about +=
"<li> James Chiang";
2861 about +=
"<li> Johann Cohen-Tanugi";
2862 about +=
"<li> Xie Fang";
2863 about +=
"<li> Kaustuv";
2864 about +=
"<li> Paul F. Kunz";
2865 about +=
"<li> Sanket B. Malde";
2866 about +=
"<li> Matthew D. Langston";
2867 about +=
"<li> Joy Rajiv";
2868 about +=
"<li> Matan Shacham";
2869 about +=
"<li> Oded Wurman";
2875 QMessageBox::Information, 1, 0, 0,
this, 0, false );
2894 #if QT_VERSION < 0x040000
2902 if ( view == 0 )
return 0;
2922 if ( tuples.empty () ) {
2923 QString message (
"There are no NTuples to be used as source" );
2943 const QtView * view = dynamic_cast <
const QtView * > ( selview );
2946 map < const QtView *, PickTable * > ::iterator first
2952 return table->getPickTable();
2967 map < const QtView *, PickTable * > :: iterator first
2983 const vector < const ViewBase * > & selViews =
selectedViews();
2984 if ( selViews.empty () )
return;
2990 vector < const ViewBase * >::const_iterator it = selViews.begin();
2991 for ( ; it != selViews.end(); ++it ) {
2995 if (!qtview)
continue;
2999 QRect temp = qtview->boundingRect();
3014 const vector < const ViewBase * > & selViews =
selectedViews();
3015 if ( selViews.size() != 1 )
return;
3018 dynamic_cast <
const QtGroupView * > ( selViews[0] );
3019 if (!groupView)
return;
3025 vector < ViewBase * >::const_iterator first = views.begin();
3026 for ( ; first != views.end(); ++first ) {
3027 QtView * qtview = dynamic_cast <
QtView * > ( *first );
3039 #ifdef ITERATOR_MEMBER_DEFECT
3042 vector < const ViewBase * > ::const_iterator first = views.begin();
3043 while ( first != views.end() ) {
3044 const QtView * view = dynamic_cast <
const QtView * > ( *first++ );
3054 #if QT_VERSION < 0x040000
3056 QObject * parent = ag -> parent ();
3064 if (((*it)->menuText())==filename){
3072 #if QT_VERSION < 0x040000
3080 ag -> addAction ( action );
3082 action -> setToggleAction (
true );
3095 #if QT_VERSION < 0x040000
3104 list<QAction *>::iterator it;
3112 fn = (*it)->menuText();
3128 moveDockWindow(toolBar);
3129 moveDockWindow(Toolbar_2);
3130 moveDockWindow(Toolbar);
3131 moveDockWindow(Toolbar_4);
3133 lineUpDockWindows();