Files
o3de/Code/Framework/AzToolsFramework/AzToolsFramework/PythonTerminal/ScriptHelpDialog.h
T
Guthrie Adams fe3b30e42c AtomTools: Fix python terminal help crash ATOM-16242
Checking EditorWindowRequests::GetAppMainWindow before searching for main window

Signed-off-by: Guthrie Adams <guthadam@amazon.com>
2021-08-14 14:07:36 -05:00

147 lines
3.9 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
// Description : For listing available script commands with their descriptions
#ifndef CRYINCLUDE_EDITOR_SCRIPTHELPDIALOG_H
#define CRYINCLUDE_EDITOR_SCRIPTHELPDIALOG_H
#pragma once
#include <AzCore/Debug/Trace.h>
#if !defined(Q_MOC_RUN)
#include <QApplication>
#include <QMainWindow>
#include <QDialog>
#include <QAbstractTableModel>
#include <QSortFilterProxyModel>
#include <QTableView>
#include <QVector>
#include <QMouseEvent>
#include <QHeaderView>
#include <QScopedPointer>
#endif
class QResizeEvent;
namespace Ui {
class ScriptDialog;
}
namespace AzToolsFramework
{
class HeaderView
: public QHeaderView
{
Q_OBJECT
public:
explicit HeaderView(QWidget* parent = nullptr);
QSize sizeHint() const override;
Q_SIGNALS:
void commandFilterChanged(const QString& text);
void moduleFilterChanged(const QString& text);
void descriptionFilterChanged(const QString& text);
void exampleFilterChanged(const QString& text);
private Q_SLOTS:
void repositionLineEdits();
protected:
void resizeEvent(QResizeEvent* ev) override;
private:
QLineEdit* const m_commandFilter;
QLineEdit* const m_moduleFilter;
QLineEdit* const m_descriptionFilter;
QLineEdit* const m_exampleFilter;
int m_lineEditHeightOffset;
};
class ScriptHelpProxyModel
: public QSortFilterProxyModel
{
Q_OBJECT
public:
explicit ScriptHelpProxyModel(QObject* parent = nullptr);
bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const;
void setCommandFilter(const QString&);
void setModuleFilter(const QString&);
void setDescriptionFilter(const QString& text);
void setExampleFilter(const QString& text);
private:
QString m_commandFilter;
QString m_moduleFilter;
QString m_descriptionFilter;
QString m_exampleFilter;
};
class ScriptHelpModel
: public QAbstractTableModel
{
Q_OBJECT
public:
enum Column
{
ColumnCommand,
ColumnModule,
ColumnDescription,
ColumnCount // keep at end, for iteration purposes
};
struct Item
{
QString command;
QString module;
QString description;
QString example;
};
typedef QVector<Item> Items;
explicit ScriptHelpModel(QObject* parent = nullptr);
QVariant data(const QModelIndex& index, int role) const override;
int rowCount(const QModelIndex & = {}) const override;
int columnCount(const QModelIndex & = {}) const override;
Qt::ItemFlags flags(const QModelIndex& index) const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
void Reload();
private:
Items m_items;
};
class ScriptTableView
: public QTableView
{
Q_OBJECT
public:
explicit ScriptTableView(QWidget* parent = nullptr);
private:
ScriptHelpModel* const m_model;
ScriptHelpProxyModel* const m_proxyModel;
};
class CScriptHelpDialog
: public QDialog
{
Q_OBJECT
public:
static CScriptHelpDialog* GetInstance();
private Q_SLOTS:
void OnDoubleClick(const QModelIndex&);
private:
explicit CScriptHelpDialog(QWidget* parent = nullptr);
static QMainWindow* GetMainWindowOfCurrentApplication();
QScopedPointer<Ui::ScriptDialog> ui;
};
} // namespace AzToolsFramework
#endif // CRYINCLUDE_EDITOR_SCRIPTHELPDIALOG_H