00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include <QtGui/QVBoxLayout>
00034 #include <QtGui/QAction>
00035
00036 #include "qoccframe.h"
00037 #include "qocc3dwidget.h"
00038 #include "qoccmainwindow.h"
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 QoccFrame::QoccFrame( QoccController* aController,
00050 QWidget *parent,
00051 Qt::WindowFlags wflags ) :
00052 QFrame( parent, wflags )
00053 {
00054 myController = aController;
00055 myParent = static_cast<QoccMainWindow*> (parent);
00056 myLayout = new QVBoxLayout( this );
00057 myLayout->setObjectName(QString::fromUtf8("vboxLayout"));
00058 myLayout->setMargin(0);
00059 myLayout->setSpacing(0);
00060
00061 myToolBar = new QToolBar( this );
00062 myToolBar->setAutoFillBackground(true);
00063
00064 myWidget = new Qocc3dWidget( myController, parent, wflags );
00065
00066 createActions();
00067 setToolbarActions();
00068 connectActions();
00069 connectParent();
00070
00071 myLayout->addWidget( myToolBar );
00072 myLayout->addWidget( myWidget );
00073
00074 }
00075
00076
00077
00078 QoccFrame::~QoccFrame()
00079 {
00080 disconnectActions();
00081 disconnectParent();
00082
00083 delete actionFitExtents;
00084 delete actionFitArea;
00085 delete actionFitAll;
00086 delete actionZoomGroup;
00087
00088 delete myToolBar;
00089 delete myLayout;
00090 delete myWidget;
00091 }
00092
00093
00094
00095
00096
00097 void QoccFrame::createActions( void)
00098 {
00099 actionIdle = new QAction( tr("Idle"), this );
00100 actionIdle->setStatusTip(tr("Selection Mode"));
00101 actionIdle->setIcon(QIcon(QString::fromUtf8(":/icons/actions/22x22/arrow.png")));
00102
00103 createZoomGroup();
00104 createViewGroup();
00105 }
00106
00107 void QoccFrame::createZoomGroup( void )
00108 {
00109 actionZoomGroup = new QAction( this );
00110 {
00111 actionFitExtents = new QAction(tr("&Fit to Extents"), this);
00112 actionFitExtents->setStatusTip(tr("Show entire drawing"));
00113 actionFitExtents->setIcon(QIcon(QString::fromUtf8(":/icons/actions/22x22/viewmagall.png")));
00114
00115 actionFitArea = new QAction(tr("&Zoom Selected Area"), this);
00116 actionFitArea->setStatusTip(tr("Zoom to selected region"));
00117 actionFitArea->setIcon(QIcon(QString::fromUtf8(":/icons/actions/22x22/viewmagfit.png")));
00118
00119 actionFitAll = new QAction(tr("Zoom &All"), this);
00120 actionFitAll->setStatusTip(tr("Zoom entire object"));
00121 actionFitAll->setIcon(QIcon(QString::fromUtf8(":/icons/actions/22x22/viewmag.png")));
00122
00123 popupZoomGroup = new QMenu ( this );
00124 popupZoomGroup->addAction (actionFitExtents);
00125 popupZoomGroup->addAction (actionFitArea);
00126 popupZoomGroup->addAction (actionFitAll);
00127 }
00128 actionZoomGroup->setText(actionFitExtents->text());
00129 actionZoomGroup->setStatusTip(actionFitExtents->statusTip());
00130 actionZoomGroup->setIcon(actionFitExtents->icon());
00131 actionZoomGroup->setMenu(popupZoomGroup);
00132 }
00133
00134 void QoccFrame::createViewGroup( void )
00135 {
00136 actionViewGroup = new QAction ( this );
00137 {
00138 actionViewTop = new QAction(tr("View from &Top"), this);
00139 actionViewTop->setStatusTip(tr("Top View"));
00140 actionViewTop->setIcon(QIcon(QString::fromUtf8(":/icons/actions/22x22/planview.png")));
00141
00142 actionViewFront = new QAction(tr("View from &Front"), this);
00143 actionViewFront->setStatusTip(tr("Front View"));
00144 actionViewFront->setIcon(QIcon(QString::fromUtf8(":/icons/actions/22x22/frontview.png")));
00145
00146 actionViewLeft = new QAction(tr("View from &Left"), this);
00147 actionViewLeft->setStatusTip(tr("Left View"));
00148 actionViewLeft->setIcon(QIcon(QString::fromUtf8(":/icons/actions/22x22/leftview.png")));
00149
00150 actionViewTopFront = new QAction(tr("View from Top Front"), this);
00151 actionViewTopFront->setStatusTip(tr("Top Front View"));
00152 actionViewTopFront->setIcon(QIcon(QString::fromUtf8(":/icons/actions/22x22/topfrontview.png")));
00153
00154 actionViewAxo = new QAction(tr("&Axonometric View"), this);
00155 actionViewAxo->setStatusTip(tr("Axo View"));
00156 actionViewAxo->setIcon(QIcon(QString::fromUtf8(":/icons/actions/22x22/axoview.png")));
00157
00158 popupViewGroup = new QMenu ( this );
00159 popupViewGroup->addAction (actionViewTop);
00160 popupViewGroup->addAction (actionViewFront);
00161 popupViewGroup->addAction (actionViewLeft);
00162 popupViewGroup->addSeparator ();
00163 popupViewGroup->addAction (actionViewTopFront);
00164 popupViewGroup->addAction (actionViewAxo);
00165 }
00166 actionViewGroup->setText(actionViewAxo->text());
00167 actionViewGroup->setStatusTip(actionViewAxo->statusTip());
00168 actionViewGroup->setIcon(actionViewAxo->icon());
00169 actionViewGroup->setMenu(popupViewGroup);
00170 }
00171
00172 void QoccFrame::setToolbarActions()
00173 {
00174 myToolBar->addAction(actionIdle);
00175 myToolBar->addSeparator();
00176 myToolBar->addAction(actionZoomGroup);
00177 myToolBar->addSeparator();
00178 myToolBar->addAction(actionViewGroup);
00179 }
00180
00181 void QoccFrame::connectActions()
00182 {
00183 connect( actionIdle, SIGNAL(triggered()), myWidget, SLOT(idle()));
00184
00185 connect( actionZoomGroup, SIGNAL(triggered()), myWidget, SLOT(fitExtents()) );
00186 {
00187 connect( actionFitExtents, SIGNAL(triggered()), this, SLOT(fitExtents()) );
00188 connect( actionFitArea, SIGNAL(triggered()), this, SLOT(fitArea()) );
00189 connect( actionFitAll, SIGNAL(triggered()), this, SLOT(fitAll()) );
00190 }
00191 connect( actionViewGroup, SIGNAL(triggered()), myWidget, SLOT(viewAxo()) );
00192 {
00193 connect( actionViewTop, SIGNAL(triggered()), this, SLOT(viewTop()) );
00194 connect( actionViewLeft, SIGNAL(triggered()), this, SLOT(viewLeft()) );
00195 connect( actionViewFront, SIGNAL(triggered()), this, SLOT(viewFront()) );
00196 connect( actionViewTopFront, SIGNAL(triggered()), this, SLOT(viewTopFront()) );
00197 connect( actionViewAxo, SIGNAL(triggered()), this, SLOT(viewAxo()) );
00198 }
00199 }
00200
00201 void QoccFrame::disconnectActions()
00202 {
00203 actionIdle->disconnect();
00204
00205 actionZoomGroup->disconnect();
00206 actionFitExtents->disconnect();
00207 actionFitArea->disconnect();
00208 actionFitAll->disconnect();
00209 }
00210
00211 void QoccFrame::connectParent()
00212 {
00213
00214
00215 connect( myWidget, SIGNAL(sendStatus(const QString)),
00216 myParent, SLOT (statusMessage(const QString)) );
00217
00218
00219 connect( myParent, SIGNAL(fileOpening()),
00220 myWidget, SLOT (refresh()) );
00221 connect( myParent, SIGNAL(fileOpened()),
00222 myWidget, SLOT (newShape()) );
00223
00224
00225 connect( myWidget, SIGNAL(mouseMoved(Qocc3dWidget*, QMouseEvent*)),
00226 myController, SLOT (moveEvent(Qocc3dWidget*, QMouseEvent*)) );
00227
00228 connect( myWidget, SIGNAL(mouseClicked(Qocc3dWidget*, QMouseEvent*)),
00229 myController, SLOT (clickEvent(Qocc3dWidget*, QMouseEvent*)) );
00230
00231 }
00232
00233 void QoccFrame::disconnectParent()
00234 {
00235 myWidget->disconnect();
00236 }
00237
00238 void QoccFrame::invokeAction( QAction* group, QAction* action, const char* signal )
00239 {
00240 group->setText ( action->text() );
00241 group->setStatusTip( action->statusTip() );
00242 group->setIcon ( action->icon() );
00243 if ( myWidget )
00244 {
00245 group->disconnect( );
00246 connect ( group, SIGNAL(triggered()), myWidget, signal );
00247 group->trigger();
00248 }
00249 }
00250
00251 void QoccFrame::fitExtents( void )
00252 {
00253 invokeAction ( actionZoomGroup, actionFitExtents, SLOT(fitExtents()) );
00254 }
00255
00256 void QoccFrame::fitArea( void )
00257 {
00258 invokeAction ( actionZoomGroup, actionFitArea, SLOT( fitArea()) );
00259 }
00260
00261 void QoccFrame::fitAll( void )
00262 {
00263 invokeAction ( actionZoomGroup, actionFitAll, SLOT(fitAll()) );
00264 }
00265
00266 void QoccFrame::viewAxo( void )
00267 {
00268 invokeAction ( actionViewGroup, actionViewAxo, SLOT(viewAxo()) );
00269 }
00270
00271 void QoccFrame::viewTop( void )
00272 {
00273 invokeAction ( actionViewGroup, actionViewTop, SLOT(viewTop()) );
00274 }
00275
00276 void QoccFrame::viewFront( void )
00277 {
00278 invokeAction ( actionViewGroup, actionViewFront, SLOT(viewFront()) );
00279 }
00280
00281 void QoccFrame::viewTopFront( void )
00282 {
00283 invokeAction ( actionViewGroup, actionViewTopFront, SLOT(viewTopFront()) );
00284 }
00285
00286 void QoccFrame::viewLeft( void )
00287 {
00288 invokeAction ( actionViewGroup, actionViewLeft, SLOT(viewLeft()) );
00289 }
00290