Game information dialog is now Qt's richtext example

This commit is contained in:
2024-01-15 22:30:12 +01:00
parent 97a9da4030
commit 678ca77bbf
6 changed files with 1129 additions and 28 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +1,125 @@
#pragma once
#include <QDialog>
#include <QMainWindow>
#include <QMap>
#include <QPointer>
#include <QEventLoop>
#include <memory>
QT_BEGIN_NAMESPACE
class QAction;
class QComboBox;
class QFontComboBox;
class QTextEdit;
class QTextCharFormat;
class QMenu;
class QPrinter;
QT_END_NAMESPACE
namespace Ui { class GameInformationDialog; }
class GameInformationDialog : public QDialog
class GameInformationDialog : public QMainWindow
{
Q_OBJECT
public:
explicit GameInformationDialog(QWidget *parent = nullptr);
~GameInformationDialog();
GameInformationDialog(QWidget *parent = nullptr);
bool load(const QString &f);
bool result() const;
void setResult(bool result);
signals:
void finished(int result);
void accepted();
void rejected();
public slots:
virtual void open();
virtual bool exec();
virtual void done(bool result);
virtual void accept();
virtual void reject();
void fileNew();
protected:
void closeEvent(QCloseEvent *e) override;
private slots:
void fileOpen();
bool fileSave();
bool fileSaveAs();
void filePrint();
void filePrintPreview();
void filePrintPdf();
void textBold();
void textUnderline();
void textItalic();
void textFamily(const QString &f);
void textSize(const QString &p);
void textStyle(int styleIndex);
void textColor();
void textAlign(QAction *a);
void setChecked(bool checked);
void indent();
void unindent();
void currentCharFormatChanged(const QTextCharFormat &format);
void cursorPositionChanged();
void clipboardDataChanged();
void about();
void printPreview(QPrinter *);
private:
const std::unique_ptr<Ui::GameInformationDialog> m_ui;
void setupFileActions();
void setupEditActions();
void setupTextActions();
bool maybeSave();
void setCurrentFileName(const QString &fileName);
void modifyIndentation(int amount);
void mergeFormatOnWordOrSelection(const QTextCharFormat &format);
void fontChanged(const QFont &f);
void colorChanged(const QColor &c);
void alignmentChanged(Qt::Alignment a);
void resetModalitySetByOpen();
void finalize(bool resultCode, bool dialogCode);
void hide(bool result);
QAction *actionSave;
QAction *actionTextBold;
QAction *actionTextUnderline;
QAction *actionTextItalic;
QAction *actionTextColor;
QAction *actionAlignLeft;
QAction *actionAlignCenter;
QAction *actionAlignRight;
QAction *actionAlignJustify;
QAction *actionIndentLess;
QAction *actionIndentMore;
QAction *actionToggleCheckState;
QAction *actionUndo;
QAction *actionRedo;
#ifndef QT_NO_CLIPBOARD
QAction *actionCut;
QAction *actionCopy;
QAction *actionPaste;
#endif
QComboBox *comboStyle;
QFontComboBox *comboFont;
QComboBox *comboSize;
QToolBar *tb;
QString fileName;
QTextEdit *textEdit;
QEventLoop eventLoop;
bool m_result{};
int m_resetModalityTo;
bool m_wasModalitySet;
};

View File

@ -13,7 +13,19 @@
<property name="windowTitle">
<string>Game Information</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,1">
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,0,1">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QMenuBar" name="menuBar">
<widget class="QMenu" name="menuFile">
@ -66,13 +78,16 @@
</item>
<item>
<widget class="QToolBar" name="toolBar">
<addaction name="actionNew"/>
<addaction name="actionOpen"/>
<addaction name="actionSave"/>
<addaction name="actionPrint"/>
<addaction name="actionExportPDF"/>
<addaction name="actionNew"/>
<addaction name="actionOpen"/>
<addaction name="actionSave"/>
<addaction name="actionPrint"/>
<addaction name="actionExportPDF"/>
</widget>
</item>
<item>
<widget class="QToolBar" name="toolBar2"/>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">

View File

@ -742,7 +742,7 @@ template void MainWindow::createFor<Room>();
void MainWindow::showGameInformation()
{
GameInformationDialog dialog{this};
if (dialog.exec() == QDialog::Accepted)
if (dialog.exec() /*== QDialog::Accepted*/)
changed();
}

View File

@ -144,6 +144,7 @@ QMimeData *ActionsContainerModel::mimeData(const QModelIndexList &indexes) const
bool ActionsContainerModel::canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const
{
qDebug() << data->formats();
// if the drop is on an item, reject drop
if (parent.isValid() && row == -1 && column == -1)
{
@ -156,6 +157,7 @@ bool ActionsContainerModel::canDropMimeData(const QMimeData *data, Qt::DropActio
bool ActionsContainerModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
{
qDebug() << data->formats();
// check if the action is supported
if (!data || !(action == Qt::CopyAction || action == Qt::MoveAction))
{

View File

@ -33,7 +33,11 @@
<number>0</number>
</property>
<item>
<widget class="QLineEditWithMenu" name="lineEdit"/>
<widget class="QLineEditWithMenu" name="lineEdit">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="toolButton">