/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ****************************************************************************/ #pragma once #include "debugger_global.h" #include #include #include #include #include #include namespace Core { class Context; class Id; } // Core namespace Utils { // To be used for actions that need hideable toolbuttons. class DEBUGGER_EXPORT OptionalAction : public QAction { Q_OBJECT public: OptionalAction(const QString &text = QString()); ~OptionalAction() override; void setVisible(bool on); void setToolButtonStyle(Qt::ToolButtonStyle style); public: QPointer m_toolButton; Qt::ToolButtonStyle m_toolButtonStyle = Qt::ToolButtonIconOnly; }; class DEBUGGER_EXPORT Perspective { public: Perspective(const QString &id, const QString &name, const QString &parentPerspectiveId = QString()); ~Perspective(); enum OperationType { SplitVertical, SplitHorizontal, AddToTab, Raise }; void setCentralWidget(QWidget *centralWidget); void addWindow(QWidget *widget, OperationType op, QWidget *anchorWidget, bool visibleByDefault = true, Qt::DockWidgetArea area = Qt::BottomDockWidgetArea); void addToolBarAction(QAction *action); void addToolBarAction(OptionalAction *action); void addToolBarWidget(QWidget *widget); void addToolbarSeparator(); QWidget *centralWidget() const; QString name() const; QString id() const; using Callback = std::function; void setAboutToActivateCallback(const Callback &cb); void aboutToActivate() const; void setEnabled(bool enabled); void select(); static Perspective *currentPerspective(); static Perspective *findPerspective(const QString &perspectiveId); Core::Context context() const; void showToolBar(); void hideToolBar(); private: Perspective(const Perspective &) = delete; void operator=(const Perspective &) = delete; friend class DebuggerMainWindow; friend class DebuggerMainWindowPrivate; class PerspectivePrivate *d = nullptr; }; class DEBUGGER_EXPORT DebuggerMainWindow : public FancyMainWindow { Q_OBJECT public: static DebuggerMainWindow *instance(); static void ensureMainWindowExists(); static void doShutdown(); static void showStatusMessage(const QString &message, int timeoutMS); static void onModeChanged(Core::Id mode); static QWidget *centralWidgetStack(); private: DebuggerMainWindow(); ~DebuggerMainWindow() override; friend class Perspective; friend class PerspectivePrivate; class DebuggerMainWindowPrivate *d = nullptr; }; DEBUGGER_EXPORT QWidget *createModeWindow(const Core::Id &mode); } // Utils