// Copyright (C) 2020 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #pragma once #include "builderutils.h" #include #include #include #include #include #if defined(UTILS_LIBRARY) # define QTCREATOR_UTILS_EXPORT Q_DECL_EXPORT #elif defined(UTILS_STATIC_LIBRARY) # define QTCREATOR_UTILS_EXPORT #else # define QTCREATOR_UTILS_EXPORT Q_DECL_IMPORT #endif QT_BEGIN_NAMESPACE class QBoxLayout; class QCompleter; class QFormLayout; class QGridLayout; class QGroupBox; class QHBoxLayout; class QLabel; class QLayout; class QObject; class QPushButton; class QScrollArea; class QSize; class QSizePolicy; class QSpinBox; class QSplitter; class QStackedWidget; class QTabWidget; class QTextEdit; class QToolBar; class QToolButton; class QVBoxLayout; class QWidget; QT_END_NAMESPACE namespace SpinnerSolution { class SpinnerWidget; enum class SpinnerState; } // namespace SpinnerSolution namespace Utils { class FancyLineEdit; class FilePath; class MarkdownBrowser; class Icon; class IconDisplay; } // namespace Utils namespace Layouting { ////////////////////////////////////////////// // // Basic // class QTCREATOR_UTILS_EXPORT Thing { public: void *ptr; // The product. }; class QTCREATOR_UTILS_EXPORT Object : public Thing { public: using Implementation = QObject; using I = Building::BuilderItem; Object() = default; Object(std::initializer_list ps); }; // // Layouts // class FlowLayout; class Layout; using LayoutModifier = std::function; class QTCREATOR_UTILS_EXPORT LayoutItem { public: ~LayoutItem(); LayoutItem(); LayoutItem(QLayout *l); LayoutItem(QWidget *w); LayoutItem(const QString &t); QString text; QLayout *layout = nullptr; QWidget *widget = nullptr; int stretch = -1; int spanCols = 1; int spanRows = 1; Qt::Alignment alignment = {}; bool empty = false; bool advancesCell = true; }; class QTCREATOR_UTILS_EXPORT Layout : public Object { public: using Implementation = QLayout; using I = Building::BuilderItem; Layout() = default; Layout(Implementation *w) { ptr = w; } void span(int cols, int rows); void align(Qt::Alignment alignment); void setAlignment(Qt::Alignment alignment); void setNoMargins(); void setNormalMargins(); void setContentsMargins(int left, int top, int right, int bottom); void setColumnStretch(int column, int stretch); void setRowStretch(int row, int stretch); void setSpacing(int space); void setFieldGrowthPolicy(int policy); void setStretch(int index, int stretch); void attachTo(QWidget *); void addItem(I item); void addItems(std::initializer_list items); void addRow(std::initializer_list items); void addLayoutItem(const LayoutItem &item); void flush(); void flush_() const; QWidget *emerge() const; void show() const; QFormLayout *asForm(); QGridLayout *asGrid(); QBoxLayout *asBox(); FlowLayout *asFlow(); // Grid-only int currentGridColumn = 0; int currentGridRow = 0; //Qt::Alignment align = {}; bool useFormAlignment = false; std::vector pendingItems; }; class QTCREATOR_UTILS_EXPORT Column : public Layout { public: using Implementation = QVBoxLayout; using I = Building::BuilderItem; Column(); Column(std::initializer_list ps); }; class QTCREATOR_UTILS_EXPORT Row : public Layout { public: using Implementation = QHBoxLayout; using I = Building::BuilderItem; Row(); Row(std::initializer_list ps); }; class QTCREATOR_UTILS_EXPORT Form : public Layout { public: using Implementation = QFormLayout; using I = Building::BuilderItem
; Form(); Form(std::initializer_list ps); }; class QTCREATOR_UTILS_EXPORT Grid : public Layout { public: using Implementation = QGridLayout; using I = Building::BuilderItem; Grid(); Grid(std::initializer_list ps); }; class QTCREATOR_UTILS_EXPORT Flow : public Layout { public: Flow(); Flow(std::initializer_list ps); }; class QTCREATOR_UTILS_EXPORT Stretch { public: explicit Stretch(int stretch) : stretch(stretch) {} int stretch; }; class QTCREATOR_UTILS_EXPORT Space { public: explicit Space(int space) : space(space) {} int space; }; class QTCREATOR_UTILS_EXPORT Span { public: Span(int cols, const Layout::I &item); Span(int cols, int rows, const Layout::I &item); Layout::I item; int spanCols = 1; int spanRows = 1; }; class QTCREATOR_UTILS_EXPORT Align { public: Align(Qt::Alignment alignment, const Layout::I &item); Layout::I item; Qt::Alignment alignment = {}; }; class QTCREATOR_UTILS_EXPORT GridCell { public: GridCell(const std::initializer_list &items) : items(items) {} std::initializer_list items; }; // // Widgets // class QTCREATOR_UTILS_EXPORT Widget : public Object { public: using Implementation = QWidget; using I = Building::BuilderItem; Widget() = default; Widget(std::initializer_list ps); Widget(Implementation *w) { ptr = w; } QWidget *emerge() const; void show(); bool isVisible() const; bool isEnabled() const; void setVisible(bool); void setEnabled(bool); void setAutoFillBackground(bool); void setLayout(const Layout &layout); void setSize(int, int); void setSizePolicy(const QSizePolicy &policy); void setFixedSize(const QSize &); void setWindowTitle(const QString &); void setWindowFlags(Qt::WindowFlags); void setWidgetAttribute(Qt::WidgetAttribute, bool on); void setToolTip(const QString &); void setNoMargins(int = 0); void setNormalMargins(int = 0); void setContentsMargins(int left, int top, int right, int bottom); void setCursor(Qt::CursorShape shape); void setMinimumWidth(int); void setMinimumHeight(int height); void setMaximumWidth(int maxWidth); void setMaximumHeight(int maxHeight); void activateWindow(); void close(); }; class QTCREATOR_UTILS_EXPORT Label : public Widget { public: using Implementation = QLabel; using I = Building::BuilderItem