/*! \param pMainWindow - pointer to MainWindow */ StackFramesWidget::StackFramesWidget(MainWindow *pMainWindow) : QWidget(pMainWindow) { mpMainWindow = pMainWindow; /* continue tool button */ mpResumeToolButton = new QToolButton; mpResumeToolButton->setEnabled(false); mpResumeToolButton->setText(Helper::resume); mpResumeToolButton->setIcon(QIcon(":/Resources/icons/resume.svg")); mpResumeToolButton->setIconSize(Helper::buttonIconSize); mpResumeToolButton->setToolTip(Helper::resume); mpResumeToolButton->setAutoRaise(true); connect(mpResumeToolButton, SIGNAL(clicked()), SLOT(resumeButtonClicked())); /* continue tool button */ mpInterruptToolButton = new QToolButton; mpInterruptToolButton->setEnabled(false); mpInterruptToolButton->setText(Helper::interrupt); mpInterruptToolButton->setIcon(QIcon(":/Resources/icons/interrupt.svg")); mpInterruptToolButton->setIconSize(Helper::buttonIconSize); mpInterruptToolButton->setToolTip(Helper::interrupt); mpInterruptToolButton->setAutoRaise(true); connect(mpInterruptToolButton, SIGNAL(clicked()), SLOT(interruptButtonClicked())); /* continue tool button */ mpExitToolButton = new QToolButton; mpExitToolButton->setEnabled(false); mpExitToolButton->setText(Helper::exit); mpExitToolButton->setIcon(QIcon(":/Resources/icons/exit.svg")); mpExitToolButton->setIconSize(Helper::buttonIconSize); mpExitToolButton->setToolTip(Helper::exit); mpExitToolButton->setAutoRaise(true); connect(mpExitToolButton, SIGNAL(clicked()), SLOT(exitButtonClicked())); /* Control buttons frame */ QFrame *pControlButtonsFrame = new QFrame; QHBoxLayout *pControlButtonsHorizontalLayout = new QHBoxLayout; pControlButtonsHorizontalLayout->setContentsMargins(0, 0, 0, 0); pControlButtonsHorizontalLayout->setSpacing(0); pControlButtonsHorizontalLayout->addWidget(mpResumeToolButton); pControlButtonsHorizontalLayout->addWidget(mpInterruptToolButton); pControlButtonsHorizontalLayout->addWidget(mpExitToolButton); pControlButtonsFrame->setLayout(pControlButtonsHorizontalLayout); /* step-into tool button */ mpStepIntoToolButton = new QToolButton; mpStepIntoToolButton->setEnabled(false); mpStepIntoToolButton->setText(Helper::stepInto); mpStepIntoToolButton->setIcon(QIcon(":/Resources/icons/step-into.svg")); mpStepIntoToolButton->setIconSize(Helper::buttonIconSize); mpStepIntoToolButton->setToolTip(Helper::stepInto); mpStepIntoToolButton->setAutoRaise(true); connect(mpStepIntoToolButton, SIGNAL(clicked()), SLOT(stepIntoButtonClicked())); /* step-over tool button */ mpStepOverToolButton = new QToolButton; mpStepOverToolButton->setEnabled(false); mpStepOverToolButton->setText(Helper::stepOver); mpStepOverToolButton->setIcon(QIcon(":/Resources/icons/step-over.svg")); mpStepOverToolButton->setIconSize(Helper::buttonIconSize); mpStepOverToolButton->setToolTip(Helper::stepOver); mpStepOverToolButton->setAutoRaise(true); connect(mpStepOverToolButton, SIGNAL(clicked()), SLOT(stepOverButtonClicked())); /* step-return tool button */ mpStepReturnToolButton = new QToolButton; mpStepReturnToolButton->setEnabled(false); mpStepReturnToolButton->setText(Helper::stepReturn); mpStepReturnToolButton->setIcon(QIcon(":/Resources/icons/step-return.svg")); mpStepReturnToolButton->setIconSize(Helper::buttonIconSize); mpStepReturnToolButton->setToolTip(Helper::stepReturn); mpStepReturnToolButton->setAutoRaise(true); connect(mpStepReturnToolButton, SIGNAL(clicked()), SLOT(stepReturnButtonClicked())); /* Flow buttons frame */ QFrame *pFlowButtonsFrame = new QFrame; QHBoxLayout *pFlowButtonsHorizontalLayout = new QHBoxLayout; pFlowButtonsHorizontalLayout->setContentsMargins(0, 0, 0, 0); pFlowButtonsHorizontalLayout->setSpacing(0); pFlowButtonsHorizontalLayout->addWidget(mpStepIntoToolButton); pFlowButtonsHorizontalLayout->addWidget(mpStepOverToolButton); pFlowButtonsHorizontalLayout->addWidget(mpStepReturnToolButton); pFlowButtonsFrame->setLayout(pFlowButtonsHorizontalLayout); /* Threads Label */ mpThreadsLabel = new Label(tr("Threads:")); /* Threads combo box */ mpThreadsComboBox = new QComboBox; mpThreadsComboBox->setEnabled(false); connect(mpThreadsComboBox, SIGNAL(currentIndexChanged(int)), SLOT(threadChanged(int))); connect(mpMainWindow->getGDBAdapter(), SIGNAL(threadInfo(GDBMIValue*,QString)), SLOT(fillThreadComboBox(GDBMIValue*,QString))); /* Thread frame */ QFrame *pThreadFrame = new QFrame; QHBoxLayout *pThreadHorizontalLayout = new QHBoxLayout; pThreadHorizontalLayout->setContentsMargins(0, 0, 0, 0); pThreadHorizontalLayout->setSpacing(0); pThreadHorizontalLayout->addWidget(mpThreadsLabel); pThreadHorizontalLayout->addWidget(mpThreadsComboBox); pThreadFrame->setLayout(pThreadHorizontalLayout); // create project status bar mpStatusBar = new QStatusBar; mpStatusBar->setObjectName("ModelStatusBar"); mpStatusBar->setStyleSheet("QStatusBar{border-bottom: none;} QStatusBar::item{margin-bottom: -1px;}"); mpStatusBar->setSizeGripEnabled(false); mpStatusBar->addPermanentWidget(pControlButtonsFrame, 0); mpStatusBar->addPermanentWidget(pFlowButtonsFrame, 0); mpStatusBar->addPermanentWidget(pThreadFrame, 0); /* Message Label */ mpStatusLabel = new Label; mpStatusLabel->setElideMode(Qt::ElideMiddle); mpStatusBar->addPermanentWidget(mpStatusLabel, 1); /* Stack Frames Tree Widget */ mpStackFramesTreeWidget = new StackFramesTreeWidget(this); setSelectedThread(1); setSelectedFrame(0); /* set layout */ QGridLayout *pMainLayout = new QGridLayout; pMainLayout->setAlignment(Qt::AlignLeft | Qt::AlignTop); pMainLayout->setContentsMargins(0, 0, 0, 0); pMainLayout->setSpacing(0); pMainLayout->addWidget(mpStatusBar, 0, 0); pMainLayout->addWidget(mpStackFramesTreeWidget, 1, 0); setLayout(pMainLayout); /* Make connections to control the enable/disable of tool buttons */ connect(mpMainWindow->getGDBAdapter(), SIGNAL(GDBProcessStarted()), SLOT(handleGDBProcessStarted())); connect(mpMainWindow->getGDBAdapter(), SIGNAL(GDBProcessFinished()), SLOT(handleGDBProcessFinished())); connect(mpMainWindow->getGDBAdapter(), SIGNAL(inferiorSuspended()), SLOT(handleInferiorSuspended())); connect(mpMainWindow->getGDBAdapter(), SIGNAL(inferiorResumed()), SLOT(handleInferiorResumed())); }
DebuggerMainWindow::DebuggerMainWindow(MainWindow *pMainWindow) { setWindowIcon(QIcon(":/Resources/icons/debugger.svg")); setWindowTitle(QString(Helper::applicationName).append(" - ").append(Helper::algorithmicDebugger)); mpMainWindow = pMainWindow; // create the GDB adapter instance mpGDBAdapter = new GDBAdapter(this); // create stack frames widget mpStackFramesWidget = new StackFramesWidget(this); // Create stack frames dock widget mpStackFramesDockWidget = new QDockWidget(tr("Stack Frames Browser"), this); mpStackFramesDockWidget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); mpStackFramesDockWidget->setObjectName("StackFrames"); mpStackFramesDockWidget->setWidget(mpStackFramesWidget); addDockWidget(Qt::TopDockWidgetArea, mpStackFramesDockWidget); // create breakpoints widget mpBreakpointsWidget = new BreakpointsWidget(this); // Create breakpoints dock widget mpBreakpointsDockWidget = new QDockWidget(tr("BreakPoints Browser"), this); mpBreakpointsDockWidget->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); mpBreakpointsDockWidget->setObjectName("BreakPoints"); mpBreakpointsDockWidget->setWidget(mpBreakpointsWidget); addDockWidget(Qt::TopDockWidgetArea, mpBreakpointsDockWidget); // create locals widget mpLocalsWidget = new LocalsWidget(this); // Create locals dock widget mpLocalsDockWidget = new QDockWidget(tr("Locals Browser"), this); mpLocalsDockWidget->setObjectName("Locals"); mpLocalsDockWidget->setWidget(mpLocalsWidget); addDockWidget(Qt::RightDockWidgetArea, mpLocalsDockWidget); setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea); setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); // Create GDB console widget mpGDBLoggerWidget = new GDBLoggerWidget(this); // Create GDB console dock widget mpGDBLoggerDockWidget = new QDockWidget(tr("Debugger CLI"), this); mpGDBLoggerDockWidget->setObjectName("DebuggerLog"); mpGDBLoggerDockWidget->setWidget(mpGDBLoggerWidget); addDockWidget(Qt::BottomDockWidgetArea, mpGDBLoggerDockWidget); mpGDBLoggerDockWidget->hide(); // Create target output widget mpTargetOutputWidget = new TargetOutputWidget(this); // Create GDB console dock widget mpTargetOutputDockWidget = new QDockWidget(tr("Output Browser"), this); mpTargetOutputDockWidget->setObjectName("OutputBrowser"); mpTargetOutputDockWidget->setWidget(mpTargetOutputWidget); addDockWidget(Qt::BottomDockWidgetArea, mpTargetOutputDockWidget); /* Debugger source code widget */ mpDebuggerSourceEditorFileLabel = new Label; mpDebuggerSourceEditorFileLabel->setObjectName("LabelWithBorder"); mpDebuggerSourceEditorFileLabel->setElideMode(Qt::ElideMiddle); mpDebuggerSourceEditorInfoBar = new InfoBar(this); mpDebuggerSourceEditorInfoBar->hide(); mpDebuggerSourceEditor = new DebuggerSourceEditor(this); ModelicaTextHighlighter *pModelicaTextHighlighter; pModelicaTextHighlighter = new ModelicaTextHighlighter(mpMainWindow->getOptionsDialog()->getModelicaTextEditorPage(), mpDebuggerSourceEditor->getPlainTextEdit()); connect(mpMainWindow->getOptionsDialog(), SIGNAL(modelicaTextSettingsChanged()), pModelicaTextHighlighter, SLOT(settingsChanged())); connect(mpGDBAdapter, SIGNAL(GDBProcessFinished()), SLOT(handleGDBProcessFinished())); QWidget *pCentralWidget = new QWidget; QVBoxLayout *pCentralWidgetVerticalLayout = new QVBoxLayout; pCentralWidgetVerticalLayout->setContentsMargins(0, 0, 0, 0); pCentralWidgetVerticalLayout->setSpacing(0); pCentralWidgetVerticalLayout->addWidget(mpDebuggerSourceEditorFileLabel); pCentralWidgetVerticalLayout->addWidget(mpDebuggerSourceEditorInfoBar); pCentralWidgetVerticalLayout->addWidget(mpDebuggerSourceEditor); pCentralWidget->setLayout(pCentralWidgetVerticalLayout); setCentralWidget(pCentralWidget); /* Create Actions and Menus */ createActions(); createMenus(); /* restore geometry and state. */ restoreWindows(); }