MilkMainWindow::MilkMainWindow(QWidget *parent) : QMainWindow(parent) { setObjectName("MilkMainWindow"); setWindowTitle("Milk"); setWindowIcon(QIcon(":/ui/app.ico")); setDockOptions(QMainWindow::AllowNestedDocks|QMainWindow::AllowTabbedDocks); setMinimumSize(320, 240); createCentralView(); createAction(); createMenu(); createToolBar(); createStatusBar(); createDockPanel(); }
/****************************************************************************** * The constructor of the main window class. ******************************************************************************/ MainWindow::MainWindow() : _datasetContainer(this) { setWindowTitle(tr("Ovito (Open Visualization Tool)")); setAttribute(Qt::WA_DeleteOnClose); // Setup the layout of docking widgets. setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); // Disable context menus in toolbars. setContextMenuPolicy(Qt::NoContextMenu); // Create input manager. _viewportInputManager = new ViewportInputManager(this); // Create actions. _actionManager = new ActionManager(this); // Create the main menu createMainMenu(); // Create the main toolbar. createMainToolbar(); ViewportsPanel* viewportsPanel = new ViewportsPanel(this); setCentralWidget(viewportsPanel); // Create the animation panel below the viewports. QWidget* animationPanel = new QWidget(); QVBoxLayout* animationPanelLayout = new QVBoxLayout(); animationPanelLayout->setSpacing(0); animationPanelLayout->setContentsMargins(0, 1, 0, 0); animationPanel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); #if defined(Q_OS_LINUX) QHBoxLayout* animationPanelParentLayout = new QHBoxLayout(animationPanel); animationPanelParentLayout->setSpacing(0); animationPanelParentLayout->setContentsMargins(0, 0, 0, 0); animationPanelParentLayout->addLayout(animationPanelLayout, 1); QFrame* verticalRule = new QFrame(animationPanel); verticalRule->setContentsMargins(0,0,0,0); verticalRule->setFrameStyle(QFrame::VLine | QFrame::Sunken); verticalRule->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding); animationPanelParentLayout->addWidget(verticalRule); #else animationPanel->setLayout(animationPanelLayout); #endif // Create animation time slider AnimationTimeSlider* timeSlider = new AnimationTimeSlider(this); animationPanelLayout->addWidget(timeSlider); AnimationTrackBar* trackBar = new AnimationTrackBar(this, timeSlider); animationPanelLayout->addWidget(trackBar); // Create status bar. _statusBarLayout = new QHBoxLayout(); _statusBarLayout->setContentsMargins(0,0,0,0); _statusBarLayout->setSpacing(0); animationPanelLayout->addLayout(_statusBarLayout, 1); _statusBar = new QStatusBar(animationPanel); _statusBar->setSizeGripEnabled(false); _statusBar->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred); setStatusBar(_statusBar); _statusBarLayout->addWidget(_statusBar, 1); _coordinateDisplay = new CoordinateDisplayWidget(datasetContainer(), animationPanel); _statusBarLayout->addWidget(_coordinateDisplay); // Create the animation control toolbar. QToolBar* animationControlBar1 = new QToolBar(); animationControlBar1->addAction(actionManager()->getAction(ACTION_GOTO_START_OF_ANIMATION)); animationControlBar1->addSeparator(); animationControlBar1->addAction(actionManager()->getAction(ACTION_GOTO_PREVIOUS_FRAME)); animationControlBar1->addAction(actionManager()->getAction(ACTION_TOGGLE_ANIMATION_PLAYBACK)); animationControlBar1->addAction(actionManager()->getAction(ACTION_GOTO_NEXT_FRAME)); animationControlBar1->addSeparator(); animationControlBar1->addAction(actionManager()->getAction(ACTION_GOTO_END_OF_ANIMATION)); QToolBar* animationControlBar2 = new QToolBar(); #if 1 animationControlBar2->addAction(actionManager()->getAction(ACTION_AUTO_KEY_MODE_TOGGLE)); #else animationControlBar2->addWidget(new AnimationFramesToolButton(datasetContainer())); #endif QWidget* animationTimeSpinnerContainer = new QWidget(); QHBoxLayout* animationTimeSpinnerLayout = new QHBoxLayout(animationTimeSpinnerContainer); animationTimeSpinnerLayout->setContentsMargins(0,0,0,0); animationTimeSpinnerLayout->setSpacing(0); class TimeEditBox : public QLineEdit { public: virtual QSize sizeHint() const { return minimumSizeHint(); } }; QLineEdit* timeEditBox = new TimeEditBox(); timeEditBox->setToolTip(tr("Current Animation Time")); AnimationTimeSpinner* currentTimeSpinner = new AnimationTimeSpinner(this); currentTimeSpinner->setTextBox(timeEditBox); animationTimeSpinnerLayout->addWidget(timeEditBox, 1); animationTimeSpinnerLayout->addWidget(currentTimeSpinner); animationControlBar2->addWidget(animationTimeSpinnerContainer); animationControlBar2->addAction(actionManager()->getAction(ACTION_ANIMATION_SETTINGS)); animationControlBar2->addWidget(new QWidget()); QWidget* animationControlPanel = new QWidget(); QVBoxLayout* animationControlPanelLayout = new QVBoxLayout(animationControlPanel); animationControlPanelLayout->setSpacing(0); animationControlPanelLayout->setContentsMargins(0, 1, 0, 0); animationControlPanelLayout->addWidget(animationControlBar1); animationControlPanelLayout->addWidget(animationControlBar2); animationControlPanelLayout->addStretch(1); animationControlPanel->setStyleSheet("QToolBar { padding: 0px; margin: 0px; border: 0px none black; } QToolButton { padding: 0px; margin: 0px }"); animationControlPanel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); // Create the viewport control toolbar. QToolBar* viewportControlBar1 = new QToolBar(); viewportControlBar1->addAction(actionManager()->getAction(ACTION_VIEWPORT_ZOOM)); viewportControlBar1->addAction(actionManager()->getAction(ACTION_VIEWPORT_PAN)); viewportControlBar1->addAction(actionManager()->getAction(ACTION_VIEWPORT_ORBIT)); viewportControlBar1->addAction(actionManager()->getAction(ACTION_VIEWPORT_PICK_ORBIT_CENTER)); QToolBar* viewportControlBar2 = new QToolBar(); viewportControlBar2->addAction(actionManager()->getAction(ACTION_VIEWPORT_ZOOM_SCENE_EXTENTS)); viewportControlBar2->addAction(actionManager()->getAction(ACTION_VIEWPORT_ZOOM_SELECTION_EXTENTS)); viewportControlBar2->addAction(actionManager()->getAction(ACTION_VIEWPORT_FOV)); viewportControlBar2->addAction(actionManager()->getAction(ACTION_VIEWPORT_MAXIMIZE)); QWidget* viewportControlPanel = new QWidget(); QVBoxLayout* viewportControlPanelLayout = new QVBoxLayout(viewportControlPanel); viewportControlPanelLayout->setSpacing(0); viewportControlPanelLayout->setContentsMargins(0, 1, 0, 0); viewportControlPanelLayout->addWidget(viewportControlBar1); QHBoxLayout* sublayout = new QHBoxLayout(); sublayout->addStretch(1); sublayout->addWidget(viewportControlBar2); viewportControlPanelLayout->addLayout(sublayout); viewportControlPanelLayout->addStretch(1); viewportControlPanel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); viewportControlPanel->setStyleSheet("QToolBar { padding: 0px; margin: 0px; border: 0px none black; } QToolButton { padding: 0px; margin: 0px }"); // Create the command panel. _commandPanel = new CommandPanel(this, this); createDockPanel(tr("Animation Panel"), "AnimationPanel", Qt::BottomDockWidgetArea, Qt::BottomDockWidgetArea, animationPanel); createDockPanel(tr("Animation Control Panel"), "AnimationControlPanel", Qt::BottomDockWidgetArea, Qt::BottomDockWidgetArea, animationControlPanel); createDockPanel(tr("Viewport Control"), "ViewportControlPanel", Qt::BottomDockWidgetArea, Qt::BottomDockWidgetArea, viewportControlPanel); createDockPanel(tr("Command Panel"), "CommandPanel", Qt::RightDockWidgetArea, Qt::DockWidgetAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea), _commandPanel); // Create the frame buffer window. _frameBufferWindow = new FrameBufferWindow(this); }