59#include <OpenFlipper/common/RecentFiles.hh>
60#include <OpenFlipper/BasePlugin/PluginFunctionsCore.hh>
62#include <OpenFlipper/widgets/videoCaptureDialog/VideoCaptureDialog.hh>
65#include <ACG/GL/ShaderCache.hh>
70#include <QSurfaceFormat>
71#include <QOpenGLWidget>
73#define WIDGET_HEIGHT 800
74#define WIDGET_WIDTH 800
78PickMode::PickMode(
const std::string& _n,
const bool _t,
const bool _v, QCursor _c, QToolBar *_tb ) :
136 QList< SlotInfo >& _coreSlots ) :
138 coreSlots_(_coreSlots),
139 shiftPressed_(false),
140 viewModes_(_viewModes),
148 AC_ShowViewModeControls_(0),
149 pickToolBarExternal_(0),
151 sceneGraphDialog_(0),
152 viewModeChangePopupAction_(0),
168 perspectiveProjectionAction_(0),
170 availableGlobalDrawModes_(0),
172 contextSelectionMenu_(0),
175 viewerDrawMenuWidget_(0),
181 postProcessorDialog_(0),
183 rendererObjectWidget_(0),
184 stereoSettingsWidget_(0),
188 stereoActive_(false),
189 actionMode_(Viewer::PickingMode),
190 lastActionMode_(Viewer::ExamineMode),
220 OpenFlipper::Options::glStereo(
glWidget_->format().stereo(),
true);
223 glView_->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
225 glView_->setFrameStyle(QFrame::NoFrame);
250 logWidget_->setSizePolicy( QSizePolicy ( QSizePolicy::Preferred , QSizePolicy::Preferred ) );
262 if (OpenFlipper::Options::loggerState() == OpenFlipper::Options::InScene) {
268 }
else if (OpenFlipper::Options::loggerState() == OpenFlipper::Options::Hidden) {
283 unsigned int maxPases = 1;
287 if ( !
OpenFlipperSettings().value(
"Core/Gui/glViewer/useMultipleViewers",
true).toBool() ) {
306 for (
unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
315 this, SLOT(
getPickMode(std::string&) ),Qt::DirectConnection );
317 this, SLOT(
setPickMode(
const std::string) ),Qt::DirectConnection );
327 for (
unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
350 for ( uint i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
362 statusBar_, SLOT(showMessage(
const QString&,
int)));
390 moveButton_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+
"transform-move.png") );
394 moveButton_->setToolTip( tr(
"Switch to <b>move</b> mode.") );
396 "Switch to <b>move</b> mode.<br>"
397 "<ul><li><b>Rotate</b> using <b>left</b> mouse button.</li>"
398 "<li><b>Translate</b> using <b>middle</b> mouse button.</li>"
399 "<li><b>Zoom</b> using <b>left+middle</b> mouse buttons.</li></ul>" ));
411 pickButton_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+
"pick.png") );
415 pickButton_->setToolTip(tr(
"Switch to <b>picking</b> mode."));
417 "Switch to <b>picking</b> mode.<br>"
418 "Use picking functions like flipping edges.<br>"
419 "To change the mode use the right click<br>"
420 "context menu in the viewer."));
426 questionButton_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+
"help-about.png") );
430 questionButton_->setToolTip(tr(
"Switch to <b>identification</b> mode."));
432 "Switch to <b>identification</b> mode.<br>"
433 "Use identification mode to get information "
434 "about objects. Click on an object and see "
435 "the log output for information about the "
445 "Switch <b>viewer layout</b>.<br>"
446 "Select the desired viewer layout. "
447 "Possible layouts are: "
449 "<li>Single viewer</li>"
450 "<li>Double viewer</li>"
451 "<li>Multiple viewers (grid)</li>"
452 "<li>Multiple viewers (hsplit)</li>"
455 viewerLayoutBox_->addItem(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+
"singleviewmode.png"),
"");
456 viewerLayoutBox_->addItem(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+
"doubleviewmode.png"),
"");
457 viewerLayoutBox_->addItem(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+
"multiviewmode1.png"),
"");
458 viewerLayoutBox_->addItem(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+
"multiviewmode2.png"),
"");
468 if (OpenFlipper::Options::stereo())
471 stereoButton_->setIcon( QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+
"mono.png") );
479 "Toggle stereo mode<br><br>"
480 "Use this button to switch between stereo "
481 "and mono view. To use this feature you need "
482 "a stereo capable graphics card and a stereo "
483 "display/projection system."));
488 stereoAction->setText( tr(
"Stereo"));
498 if(wsizes.size() > 1) {
512 QHBoxLayout *hLayout =
new QHBoxLayout;
521 QLineEdit *searchBar =
new QLineEdit();
522 searchBar->setPlaceholderText(
"Search for Plugin");
523 searchBar->addAction(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+
"PropertyVisIcon.png"), QLineEdit::LeadingPosition);
524 searchBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
527 SIGNAL(textChanged(QString)),
539 viewModePopupBtn_->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+
"preferences.png"));
547 SIGNAL(changeView(QString, QStringList, QStringList, QStringList)),
549 SLOT(
slotChangeView(QString, QStringList, QStringList, QStringList)));
555 hLayout->setContentsMargins(0, 0, 0, 0);
557 hLayout->addWidget(searchBar);
575 QVBoxLayout *vLayout =
new QVBoxLayout;
578 vLayout->setContentsMargins(0, 0, 0, 0);
579 vLayout->setSpacing(0);
592 if (
OpenFlipperSettings().value(
"Core/Gui/ToolBoxes/ToolBoxOnTheRight",
true).toBool() ) {
614 for (
unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
615 connect(
examiner_widgets_[i] , SIGNAL(signalCustomContextMenuRequested(
const QPoint&) ) ,
624 statusBar_->showMessage(tr(
"Ready"), 5000);
630 setWindowIcon( OpenFlipper::Options::OpenFlipperIcon() );
680 return PluginStorage::plugins();
702 setWindowState( windowState() | Qt::WindowFullScreen);
704 if ( windowState() & Qt::WindowFullScreen )
705 setWindowState( windowState() ^ Qt::WindowFullScreen);
720 if ( OpenFlipper::Options::gui() && ( !_show !=
OpenFlipperSettings().value(
"Core/Gui/TaskSwitcher/Hide",
false).toBool() ) ) {
806 for (uint p=0; p <
plugins().size(); p++)
807 for ( uint j = 0 ; j <
plugins()[p].toolbars.size(); ++j ) {
808 if ( !
plugins()[p].toolbars[j].second->isFloating() )
809 plugins()[p].toolbars[j].second->hide();
815 setViewMode( OpenFlipper::Options::currentViewMode() );
844 if ( _toolBoxRight != currentstate ) {
862 QSettings windowStates(QDir::home().absolutePath() + OpenFlipper::Options::dirSeparator() +
".OpenFlipper" +
863 OpenFlipper::Options::dirSeparator() +
"WindowStates.dat", QSettings::IniFormat);
865 windowStates.value(
"Core/ToolSplitter");
881 if ( OpenFlipper::Options::sceneGraphUpdatesBlocked() )
return;
883 OpenFlipper::Options::addRecentFile(_filename, _type);
902 for (
int i = 0 ; i < recentFiles.size() ; ++i ) {
904 QFileInfo fi(recentFiles[i]);
906 QAction* newAction = 0;
908 if (fi.suffix() ==
"ini") {
909 newAction =
recentFilesMenu_->addAction(QIcon(OpenFlipper::Options::iconDirStr() + OpenFlipper::Options::dirSeparator()+
"Settings-Icon.png"), recentFiles[i]);
910 newAction->setData( QVariant( QString(
"Unknown") ) );
913 newAction->setData( QVariant( recentTypes[i]) );
931 if ( OpenFlipper::Options::nogui() )
938 connect(
optionsWidget_,SIGNAL(addKeyMapping(
int,Qt::KeyboardModifiers,QObject*,
int)),
941 optionsWidget_->setWindowIcon( OpenFlipper::Options::OpenFlipperIcon() );
946 center.setX( x() + width() / 2 );
947 center.setY( y() + height() / 2 );
961 case QtMultiViewLayout::SingleView:
968 case QtMultiViewLayout::DoubleView:
975 case QtMultiViewLayout::Grid:
982 case QtMultiViewLayout::HSplit:
1017 emit log(
LOGERR,tr(
"Requested illegal multiview mode!"));
1035 for (
unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
1062CoreWidget::startVideoCaptureDialog(){
1065 dialog->setModal(
false);
1067 connect(dialog, SIGNAL(startVideoCapture(QString,
int,
bool)),
this, SIGNAL(startVideoCapture(QString,
int,
bool)) );
1068 connect(dialog, SIGNAL(resizeViewers(
int,
int)),
this, SIGNAL(resizeViewers(
int,
int)) );
1069 connect(dialog, SIGNAL(resizeApplication(
int,
int)),
this, SIGNAL(resizeApplication(
int,
int)) );
1083 for ( uint i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
1088 if (postProcessorDialog_)
1089 postProcessorDialog_->
refresh();
1109 if( _event->type() == QEvent::WhatsThisClicked )
1111 QWhatsThisClickedEvent *wtcEvent =
static_cast<QWhatsThisClickedEvent*
>(_event);
1112 QWhatsThis::hideText();
1117 return QMainWindow::event(_event);
DLLEXPORT QIcon & typeIcon(DataType _id)
Get an QIcon associated with the given DataType.
DLLEXPORT DataType typeId(QString _name)
Given a dataType Identifier string this function will return the id of the datatype.
DLLEXPORT OpenFlipperQSettings & OpenFlipperSettings()
QSettings object containing all program settings of OpenFlipper.
ActionMode
Enum listing action modes of the viewers.
static ShaderCache * getInstance()
Return instance of the ShaderCache singleton.
void setTimeCheck(bool _on)
enable or disable checking of the time step of each file
void setDebugOutputDir(const char *_outputDir)
Enable debug output of generated shaders to specified directory.
void setEnabled(bool _enabled)
Enabled/Disables gl cursor painting.
void setForceNative(bool _enabled)
Enabled/Disables native cursors.
void registerViewer(glViewer *_viewer)
Add a glViewer that will use this CursorPainter.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant()) const
void setValue(const QString &key, const QVariant &value)
Wrapper function which makes it possible to enable Debugging output with -DOPENFLIPPER_SETTINGS_DEBUG...
QToolBar * toolbar() const
PickMode toolbar.
PickMode(const std::string &_n, const bool _t, const bool _v, QCursor _c, QToolBar *_tb=0)
Constructor.
std::string name() const
PickMode Name.
QCursor cursor() const
PickMode cursor.
bool tracking() const
PickMode mouse tracking.
bool visible() const
PickMode visible.
std::string name_
Name of the pickMode.
void refresh()
refreshes the content of the dialog with current examiner
void addItem(QGraphicsWidget *_item, unsigned int _pos)
Adds Widget to Layout.
MultiViewMode mode() const
Retruns current layout modes.
void setMode(MultiViewMode _mode)
Sets layout mode.
void setPrimary(unsigned int _i)
Sets primary element for SingleView and HSplit.
void updateGeometry()
recalculate geometry
void attachWidget(QWidget *_m)
attach a child widget
void sceneGraph(ACG::SceneGraph::BaseNode *_root, unsigned int _maxPasses, ACG::Vec3d _bbmin, ACG::Vec3d _bbmax, const bool _resetTrackBall=false)
void analyzeSceneGraph(ACG::SceneGraph::BaseNode *_root, unsigned int &_maxPasses, ACG::Vec3d &_bbmin, ACG::Vec3d &_bbmax)
Analyze the SceneGraph <ACG/Scenegraph/SceneGraphAnalysis.hh>
void shareGLWidget(OFGLWidget *_widget)
Sets the main QGLWidget for gl data sharing.
Viewer::ViewerProperties & viewerProperties(int _id)
Get the viewer properties Use this functions to get basic viewer properties such as backgroundcolor o...
void setActiveExaminer(const unsigned int _id)
Set the active id of the examiner which got the last mouse events.
unsigned int activeExaminer()
Get the id of the examiner which got the last mouse events.
ACG::SceneGraph::BaseNode * getSceneGraphRootNode()
get scenegraph root node
void setViewers(const std::vector< glViewer * > &_viewerWidgets)
Set the internal Viewer pointer ( DO NOT USE!! )