refactoring qad widgets part 1
c++ cast, nullptr, forward declaration, agregate ui, connect to member functions, order and clear includes
This commit is contained in:
@@ -3,7 +3,7 @@ cmake_policy(SET CMP0017 NEW) # need include() with .cmake
|
||||
cmake_policy(SET CMP0072 NEW) # FindOpenGL prefers GLVND by default
|
||||
project(QAD)
|
||||
set(QAD_MAJOR 2)
|
||||
set(QAD_MINOR 10)
|
||||
set(QAD_MINOR 11)
|
||||
set(QAD_REVISION 0)
|
||||
set(QAD_SUFFIX )
|
||||
set(QAD_COMPANY SHS)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include <QFileDialog>
|
||||
#include <QImageReader>
|
||||
#include <QDialogButtonBox>
|
||||
#include <QDebug>
|
||||
#include <QClipboard>
|
||||
|
||||
|
||||
_DTSizeItem::_DTSizeItem(): QGraphicsObject() {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "propertyeditor.h"
|
||||
#include <QPainter>
|
||||
|
||||
|
||||
QWidget * Delegate::widgetForProperty(QWidget * parent, const QModelIndex & index) const {
|
||||
|
||||
@@ -85,7 +85,7 @@ void CharDialog::resizeEvent(QResizeEvent * ) {
|
||||
ui->tableChars->setColumnCount(c);
|
||||
for (int i = 0; i < r; ++i) {
|
||||
for (int j = 0; j < c; ++j) {
|
||||
if (ui->tableChars->item(i, j) == 0) {
|
||||
if (ui->tableChars->item(i, j) == nullptr) {
|
||||
ui->tableChars->setItem(i, j, new QTableWidgetItem());
|
||||
ui->tableChars->item(i, j)->setTextAlignment(Qt::AlignCenter);
|
||||
}
|
||||
@@ -136,7 +136,7 @@ void CharDialog::on_spinSize_valueChanged(int index) {
|
||||
QFont font = ui->tableChars->font();
|
||||
font.setPointSize(size);
|
||||
ui->tableChars->setFont(font);
|
||||
resizeEvent(0);
|
||||
resizeEvent(nullptr);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -20,10 +20,8 @@
|
||||
#ifndef CHARDIALOG_H
|
||||
#define CHARDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
#include <QMetaEnum>
|
||||
#include <QDebug>
|
||||
#include "qad_widgets_export.h"
|
||||
#include <QDialog>
|
||||
|
||||
|
||||
namespace Ui {
|
||||
@@ -35,26 +33,12 @@ class QAD_WIDGETS_EXPORT CharDialog: public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit CharDialog(QWidget * parent = 0);
|
||||
~CharDialog();
|
||||
explicit CharDialog(QWidget * parent = nullptr);
|
||||
~CharDialog() override;
|
||||
|
||||
QChar selectedChar() {return sel_char;}
|
||||
void setCharFont(const QFont & f);
|
||||
|
||||
public slots:
|
||||
|
||||
private:
|
||||
void changeEvent(QEvent * e);
|
||||
virtual bool eventFilter(QObject * o, QEvent * e);
|
||||
virtual void resizeEvent(QResizeEvent * );
|
||||
void clear();
|
||||
|
||||
Ui::CharDialog * ui;
|
||||
QVector<QVector<QChar> > chars;
|
||||
QVector<QChar> * cur;
|
||||
QChar sel_char;
|
||||
int size, csize;
|
||||
|
||||
private slots:
|
||||
void on_comboCategory_currentIndexChanged(int index);
|
||||
void on_verticalScroll_valueChanged(int index);
|
||||
@@ -67,6 +51,17 @@ private slots:
|
||||
signals:
|
||||
void charSelected(QChar ch);
|
||||
|
||||
private:
|
||||
void changeEvent(QEvent * e) override;
|
||||
bool eventFilter(QObject * o, QEvent * e) override;
|
||||
void resizeEvent(QResizeEvent *) override;
|
||||
void clear();
|
||||
|
||||
Ui::CharDialog * ui;
|
||||
QVector<QVector<QChar> > chars;
|
||||
QVector<QChar> * cur;
|
||||
QChar sel_char;
|
||||
int size, csize;
|
||||
};
|
||||
|
||||
#endif // CHARDIALOG_H
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#include "clineedit.h"
|
||||
#include "qad_types.h"
|
||||
#include <QMouseEvent>
|
||||
#include <QPainter>
|
||||
|
||||
|
||||
CLineEdit::CLineEdit(QWidget * parent): QLineEdit(parent) {
|
||||
@@ -9,7 +11,7 @@ CLineEdit::CLineEdit(QWidget * parent): QLineEdit(parent) {
|
||||
cw->setToolTip(tr("Clear"));
|
||||
cw->hide();
|
||||
cw->installEventFilter(this);
|
||||
connect(this, SIGNAL(textChanged(QString)), this, SLOT(textChanged_(QString)));
|
||||
connect(this, &QLineEdit::textChanged, this, &CLineEdit::textChangedSlot);
|
||||
int is = fontHeight(this);
|
||||
QMargins m = textMargins();
|
||||
m.setRight(m.right() + (is * 1.2));
|
||||
@@ -17,10 +19,15 @@ CLineEdit::CLineEdit(QWidget * parent): QLineEdit(parent) {
|
||||
}
|
||||
|
||||
|
||||
CLineEdit::~CLineEdit() {
|
||||
delete cw;
|
||||
}
|
||||
|
||||
|
||||
bool CLineEdit::eventFilter(QObject * o, QEvent * e) {
|
||||
switch (e->type()) {
|
||||
case QEvent::MouseButtonRelease:
|
||||
clearMouseRelease((QMouseEvent * )e);
|
||||
clearMouseRelease(static_cast<QMouseEvent *>(e));
|
||||
break;
|
||||
case QEvent::Paint:
|
||||
cwPaintEvent();
|
||||
@@ -62,5 +69,17 @@ void CLineEdit::setDefaultText(const QString & t, bool set_text) {
|
||||
cw->hide();
|
||||
return;
|
||||
}
|
||||
textChanged_(text());
|
||||
textChangedSlot(text());
|
||||
}
|
||||
|
||||
|
||||
void CLineEdit::clearMouseRelease(QMouseEvent *e) {
|
||||
if (cw->rect().contains(e->pos())) {
|
||||
clearClick();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CLineEdit::textChangedSlot(QString text) {
|
||||
cw->setVisible(text != dt);
|
||||
}
|
||||
|
||||
@@ -20,39 +20,20 @@
|
||||
#ifndef CLINEEDIT_H
|
||||
#define CLINEEDIT_H
|
||||
|
||||
#include <QDebug>
|
||||
#include <QLineEdit>
|
||||
#include <QMouseEvent>
|
||||
#include <QPainter>
|
||||
#include "qad_widgets_export.h"
|
||||
#include <QLineEdit>
|
||||
|
||||
|
||||
class QAD_WIDGETS_EXPORT CLineEdit: public QLineEdit
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QString defaultText READ defaultText WRITE setDefaultText)
|
||||
|
||||
public:
|
||||
explicit CLineEdit(QWidget * parent = 0);
|
||||
~CLineEdit() {delete cw;}
|
||||
explicit CLineEdit(QWidget * parent = nullptr);
|
||||
~CLineEdit() override;
|
||||
|
||||
const QString & defaultText() const {return dt;}
|
||||
|
||||
protected:
|
||||
QWidget * cw;
|
||||
QString dt;
|
||||
QImage clear_im;
|
||||
|
||||
private:
|
||||
bool eventFilter(QObject * o, QEvent * e);
|
||||
void resizeEvent(QResizeEvent * );
|
||||
void changeEvent(QEvent * e);
|
||||
void cwPaintEvent();
|
||||
|
||||
private slots:
|
||||
void clearMouseRelease(QMouseEvent * e) {if (cw->rect().contains(e->pos())) clearClick();}
|
||||
void textChanged_(QString text) {cw->setVisible(text != dt);}
|
||||
|
||||
public slots:
|
||||
void clearClick() {if (!isEnabled()) return; setText(dt); emit cleared(); emit textEdited(dt);}
|
||||
void setDefaultText(const QString & t, bool set_text = false);
|
||||
@@ -60,6 +41,19 @@ public slots:
|
||||
signals:
|
||||
void cleared();
|
||||
|
||||
private slots:
|
||||
void clearMouseRelease(QMouseEvent *e);
|
||||
void textChangedSlot(QString text);
|
||||
|
||||
private:
|
||||
bool eventFilter(QObject * o, QEvent * e) override;
|
||||
void resizeEvent(QResizeEvent *) override;
|
||||
void changeEvent(QEvent * e) override;
|
||||
void cwPaintEvent();
|
||||
|
||||
QWidget * cw;
|
||||
QString dt;
|
||||
QImage clear_im;
|
||||
};
|
||||
|
||||
#endif // CLINEEDIT_H
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
#include "colorbutton.h"
|
||||
#include <QDebug>
|
||||
#include "qclipboard.h"
|
||||
#include "qcolor.h"
|
||||
#include "qmenu.h"
|
||||
#include <QColorDialog>
|
||||
#include <QMouseEvent>
|
||||
#include <QDrag>
|
||||
#include <QMimeData>
|
||||
#include <QFrame>
|
||||
#include <QApplication>
|
||||
|
||||
ColorButton::ColorButton(QWidget * parent): QPushButton(parent) {
|
||||
|
||||
ColorButton::ColorButton(QWidget * parent): QPushButton(parent), menu(new QMenu(this)) {
|
||||
frame = false;
|
||||
options = QColorDialog::ShowAlphaChannel;
|
||||
back = new QWidget(this);
|
||||
@@ -17,10 +24,10 @@ ColorButton::ColorButton(QWidget * parent): QPushButton(parent) {
|
||||
label->setFrameStyle(QFrame::Panel | QFrame::Sunken);
|
||||
label->show();
|
||||
pal = label->palette();
|
||||
a_copy = menu.addAction(QIcon(":/icons/edit-copy.png"), tr("Copy"), this, SLOT(copy()));
|
||||
a_paste = menu.addAction(QIcon(":/icons/edit-paste.png"), tr("Paste"), this, SLOT(paste()));
|
||||
menu.addSeparator();
|
||||
a_mix = menu.addAction(tr("Mix with clipboard"), this, SLOT(mix()));
|
||||
a_copy = menu->addAction(QIcon(":/icons/edit-copy.png"), tr("Copy"), this, SLOT(copy()));
|
||||
a_paste = menu->addAction(QIcon(":/icons/edit-paste.png"), tr("Paste"), this, SLOT(paste()));
|
||||
menu->addSeparator();
|
||||
a_mix = menu->addAction(tr("Mix with clipboard"), this, SLOT(mix()));
|
||||
setAcceptDrops(true);
|
||||
connect(this, SIGNAL(clicked(bool)), this, SLOT(clicked()));
|
||||
}
|
||||
@@ -32,8 +39,11 @@ ColorButton::~ColorButton() {
|
||||
|
||||
|
||||
void ColorButton::resizeEvent(QResizeEvent * ) {
|
||||
if (frame) back->setGeometry(rect());
|
||||
else back->setGeometry(8, 5, width() - 16, height() - 12);
|
||||
if (frame) {
|
||||
back->setGeometry(rect());
|
||||
} else {
|
||||
back->setGeometry(8, 5, width() - 16, height() - 12);
|
||||
}
|
||||
label->setGeometry(back->geometry());
|
||||
}
|
||||
|
||||
@@ -41,11 +51,11 @@ void ColorButton::resizeEvent(QResizeEvent * ) {
|
||||
void ColorButton::mousePressEvent(QMouseEvent * e) {
|
||||
pp = e->pos();
|
||||
if (e->buttons().testFlag(Qt::RightButton)) {
|
||||
menu.popup(
|
||||
menu->popup(
|
||||
#if QT_VERSION_MAJOR <= 5
|
||||
((QMouseEvent*)e)->globalPos()
|
||||
static_cast<QMouseEvent*>(e)->globalPos()
|
||||
#else
|
||||
((QMouseEvent*)e)->globalPosition().toPoint()
|
||||
static_cast<QMouseEvent*>(e)->globalPosition().toPoint()
|
||||
#endif
|
||||
);
|
||||
return;
|
||||
@@ -107,15 +117,19 @@ void ColorButton::changeEvent(QEvent * e) {
|
||||
|
||||
|
||||
void ColorButton::clicked() {
|
||||
QColor ret = QColorDialog::getColor(color(), nullptr, tr("Choose color"), options);
|
||||
if (!ret.isValid()) return;
|
||||
QColor ret = QColorDialog::getColor(color(), nullptr, tr("Choose color"), static_cast<QColorDialog::ColorDialogOptions>(options));
|
||||
if (!ret.isValid()) {
|
||||
return;
|
||||
}
|
||||
setColor(ret);
|
||||
}
|
||||
|
||||
|
||||
void ColorButton::mix() {
|
||||
QColor c(QApplication::clipboard()->text());
|
||||
if (!c.isValid()) return;
|
||||
if (!c.isValid()) {
|
||||
return;
|
||||
}
|
||||
QColor sc = color();
|
||||
setColor(QColor((c.red() + sc.red()) / 2, (c.green() + sc.green()) / 2, (c.blue() + sc.blue()) / 2, (c.alpha() + sc.alpha()) / 2));
|
||||
}
|
||||
@@ -123,10 +137,65 @@ void ColorButton::mix() {
|
||||
|
||||
void ColorButton::setColor(const QColor & col) {
|
||||
if (pal.color(label->backgroundRole()) == col) return;
|
||||
if (options.testFlag(QColorDialog::ShowAlphaChannel))
|
||||
if (options & QColorDialog::ShowAlphaChannel) {
|
||||
pal.setColor(label->backgroundRole(), col);
|
||||
else
|
||||
} else {
|
||||
pal.setColor(label->backgroundRole(), QColor(col.red(), col.green(), col.blue()));
|
||||
}
|
||||
label->setPalette(pal);
|
||||
emit colorChanged(color());
|
||||
}
|
||||
|
||||
|
||||
void ColorButton::setFrameOnly(bool yes) {
|
||||
frame = yes;
|
||||
setFlat(frame);
|
||||
resizeEvent(nullptr);
|
||||
}
|
||||
|
||||
|
||||
QColor ColorButton::color() const {
|
||||
return pal.color(label->backgroundRole());
|
||||
}
|
||||
|
||||
|
||||
bool ColorButton::useNativeDialog() const {
|
||||
return !(options & QColorDialog::DontUseNativeDialog);
|
||||
}
|
||||
|
||||
|
||||
bool ColorButton::useAlphaChannel() const {
|
||||
return (options & QColorDialog::ShowAlphaChannel);
|
||||
}
|
||||
|
||||
|
||||
void ColorButton::setUseNativeDialog(bool yes) {
|
||||
if (yes) {
|
||||
options &= ~QColorDialog::DontUseNativeDialog;
|
||||
} else {
|
||||
options |= QColorDialog::DontUseNativeDialog;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ColorButton::setUseAlphaChannel(bool yes) {
|
||||
if (yes) {
|
||||
options |= QColorDialog::ShowAlphaChannel;
|
||||
} else {
|
||||
options &= ~QColorDialog::ShowAlphaChannel;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ColorButton::paste() {
|
||||
QColor c(QApplication::clipboard()->text());
|
||||
if (c.isValid()) {
|
||||
setColor(c);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ColorButton::copy() {
|
||||
QApplication::clipboard()->setText(color().name());
|
||||
}
|
||||
|
||||
|
||||
@@ -20,15 +20,11 @@
|
||||
#ifndef COLORBUTTON_H
|
||||
#define COLORBUTTON_H
|
||||
|
||||
#include <QPushButton>
|
||||
#include <QFrame>
|
||||
#include <QColorDialog>
|
||||
#include <QMouseEvent>
|
||||
#include <QAction>
|
||||
#include <QMenu>
|
||||
#include <QClipboard>
|
||||
#include <QApplication>
|
||||
#include "qad_widgets_export.h"
|
||||
#include <QPushButton>
|
||||
|
||||
|
||||
class QFrame;
|
||||
|
||||
|
||||
class QAD_WIDGETS_EXPORT ColorButton: public QPushButton
|
||||
@@ -38,48 +34,46 @@ class QAD_WIDGETS_EXPORT ColorButton: public QPushButton
|
||||
Q_PROPERTY(bool useNativeDialog READ useNativeDialog WRITE setUseNativeDialog)
|
||||
Q_PROPERTY(bool useAlphaChannel READ useAlphaChannel WRITE setUseAlphaChannel)
|
||||
Q_PROPERTY(bool frameOnly READ frameOnly WRITE setFrameOnly)
|
||||
|
||||
public:
|
||||
explicit ColorButton(QWidget * parent = 0);
|
||||
~ColorButton();
|
||||
explicit ColorButton(QWidget * parent = nullptr);
|
||||
~ColorButton() override;
|
||||
|
||||
QColor color() const {return pal.color(label->backgroundRole());}
|
||||
bool useNativeDialog() const {return !options.testFlag(QColorDialog::DontUseNativeDialog);}
|
||||
bool useAlphaChannel() const {return options.testFlag(QColorDialog::ShowAlphaChannel);}
|
||||
QColor color() const;
|
||||
bool useNativeDialog() const;
|
||||
bool useAlphaChannel() const;
|
||||
bool frameOnly() const {return frame;}
|
||||
|
||||
public slots:
|
||||
void setColor(const QColor & col);
|
||||
void setUseNativeDialog(bool yes) {if (yes) options &= ~QColorDialog::DontUseNativeDialog; else options |= QColorDialog::DontUseNativeDialog;}
|
||||
void setUseAlphaChannel(bool yes) {if (yes) options |= QColorDialog::ShowAlphaChannel; else options &= ~QColorDialog::ShowAlphaChannel;}
|
||||
void setFrameOnly(bool yes) {frame = yes; setFlat(frame); resizeEvent(0);}
|
||||
void setUseNativeDialog(bool yes);
|
||||
void setUseAlphaChannel(bool yes);
|
||||
void setFrameOnly(bool yes);
|
||||
|
||||
private slots:
|
||||
void clicked();
|
||||
void copy();
|
||||
void paste();
|
||||
void mix();
|
||||
|
||||
signals:
|
||||
void colorChanged(QColor);
|
||||
|
||||
private:
|
||||
void mousePressEvent(QMouseEvent * e);
|
||||
void mouseMoveEvent(QMouseEvent * e);
|
||||
void resizeEvent(QResizeEvent * );
|
||||
void dragEnterEvent(QDragEnterEvent * e);
|
||||
void dropEvent(QDropEvent * e);
|
||||
void changeEvent(QEvent *e);
|
||||
void mousePressEvent(QMouseEvent * e) override;
|
||||
void mouseMoveEvent(QMouseEvent * e) override;
|
||||
void resizeEvent(QResizeEvent *) override;
|
||||
void dragEnterEvent(QDragEnterEvent * e) override;
|
||||
void dropEvent(QDropEvent * e) override;
|
||||
void changeEvent(QEvent *e) override;
|
||||
|
||||
QFrame * label;
|
||||
QWidget * back;
|
||||
QAction * a_copy, * a_paste, * a_mix;
|
||||
QPalette pal;
|
||||
QPoint pp;
|
||||
QMenu menu;
|
||||
QColorDialog::ColorDialogOptions options;
|
||||
QMenu * menu;
|
||||
int options;
|
||||
bool frame;
|
||||
|
||||
private slots:
|
||||
void clicked();
|
||||
void copy() {QApplication::clipboard()->setText(color().name());}
|
||||
void paste() {QColor c(QApplication::clipboard()->text()); if (c.isValid()) setColor(c);}
|
||||
void mix();
|
||||
|
||||
signals:
|
||||
void colorChanged(QColor);
|
||||
|
||||
};
|
||||
|
||||
#endif // COLORBUTTON_H
|
||||
|
||||
@@ -1,58 +1,72 @@
|
||||
#include "ecombobox.h"
|
||||
#include "clineedit.h"
|
||||
#include "qabstractitemview.h"
|
||||
#include "qad_types.h"
|
||||
#include "qwidget.h"
|
||||
#include <QApplication>
|
||||
#include <QHeaderView>
|
||||
#include <QStandardItemModel>
|
||||
#include "ecombobox.h"
|
||||
#include "qad_types.h"
|
||||
#include <QTreeView>
|
||||
#include <QLabel>
|
||||
#include <QLayout>
|
||||
|
||||
|
||||
class QAD_WIDGETS_EXPORT EModel: public QStandardItemModel {
|
||||
class EModel: public QStandardItemModel {
|
||||
public:
|
||||
EModel(QObject * parent = 0): QStandardItemModel(parent) {
|
||||
EModel(QObject * parent = nullptr): QStandardItemModel(parent) {
|
||||
#if QT_VERSION < 0x050000
|
||||
setSupportedDragActions(Qt::MoveAction);
|
||||
#endif
|
||||
}
|
||||
protected:
|
||||
virtual Qt::ItemFlags flags(const QModelIndex & index) const {
|
||||
virtual Qt::ItemFlags flags(const QModelIndex & index) const override {
|
||||
Qt::ItemFlags f = Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled;
|
||||
if (!index.isValid()) f |= Qt::ItemIsDropEnabled;
|
||||
return f;
|
||||
}
|
||||
#if QT_VERSION >= 0x050000
|
||||
Qt::DropActions supportedDragActions() const {return Qt::MoveAction;}
|
||||
Qt::DropActions supportedDropActions() const {return Qt::MoveAction;}
|
||||
Qt::DropActions supportedDragActions() const override {return Qt::MoveAction;}
|
||||
Qt::DropActions supportedDropActions() const override {return Qt::MoveAction;}
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
||||
EComboBox::EComboBox(QWidget * parent): QComboBox(parent) {
|
||||
setView(&iv);
|
||||
EComboBox::EComboBox(QWidget * parent)
|
||||
: QComboBox(parent)
|
||||
, iv(new QTreeView(this))
|
||||
, header(new QWidget(this))
|
||||
, icon(new QLabel(this))
|
||||
, filter(new CLineEdit(this))
|
||||
{
|
||||
setView(iv);
|
||||
setModel(new EModel());
|
||||
iv.setTextElideMode(Qt::ElideMiddle);
|
||||
iv.setRootIsDecorated(false);
|
||||
iv.setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
||||
iv.setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
||||
iv.setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
|
||||
iv.setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
|
||||
iv.setMinimumHeight(100);
|
||||
icon.setPixmap(QPixmap(":/icons/edit-find.png"));
|
||||
icon.setScaledContents(true);
|
||||
icon.setFixedSize(preferredIconSize(1.2, this));
|
||||
iv->setTextElideMode(Qt::ElideMiddle);
|
||||
iv->setRootIsDecorated(false);
|
||||
iv->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
||||
iv->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
||||
iv->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
|
||||
iv->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
|
||||
iv->setMinimumHeight(100);
|
||||
icon->setPixmap(QPixmap(":/icons/edit-find.png"));
|
||||
icon->setScaledContents(true);
|
||||
icon->setFixedSize(preferredIconSize(1.2, this));
|
||||
ifont = nfont = font();
|
||||
ifont.setItalic(true);
|
||||
#if QT_VERSION >= 0x040700
|
||||
filter.setPlaceholderText(tr("Filter"));
|
||||
filter.setFont(ifont);
|
||||
filter->setPlaceholderText(tr("Filter"));
|
||||
filter->setFont(ifont);
|
||||
#endif
|
||||
header.setAutoFillBackground(true);
|
||||
header.setLayout(new QBoxLayout(QBoxLayout::LeftToRight));
|
||||
header.layout()->setSpacing(2);
|
||||
header.layout()->setContentsMargins(2, 0, 0, 0);
|
||||
header.layout()->addWidget(&icon);
|
||||
header.layout()->addWidget(&filter);
|
||||
header.setParent(iv.header());
|
||||
connect(&filter, SIGNAL(textChanged(QString)), this, SLOT(filterChanged(QString)));
|
||||
header->setAutoFillBackground(true);
|
||||
header->setLayout(new QBoxLayout(QBoxLayout::LeftToRight));
|
||||
header->layout()->setSpacing(2);
|
||||
header->layout()->setContentsMargins(2, 0, 0, 0);
|
||||
header->layout()->addWidget(icon);
|
||||
header->layout()->addWidget(filter);
|
||||
header->setParent(iv->header());
|
||||
connect(filter, &CLineEdit::textChanged, this, [this](const QString & text){
|
||||
EComboBox::filterChanged(text, false);
|
||||
});
|
||||
connect(model(), &EModel::layoutChanged, this, &EComboBox::rowsChanged);
|
||||
}
|
||||
|
||||
@@ -65,12 +79,12 @@ QSize EComboBox::sizeHint() const {
|
||||
|
||||
|
||||
void EComboBox::showPopup() {
|
||||
iv.setDragDropMode(isEditable() ? QAbstractItemView::InternalMove : QAbstractItemView::NoDragDrop);
|
||||
filterChanged(filter.text(), true);
|
||||
iv->setDragDropMode(isEditable() ? QAbstractItemView::InternalMove : QAbstractItemView::NoDragDrop);
|
||||
filterChanged(filter->text(), true);
|
||||
QComboBox::showPopup();
|
||||
QRect r = iv.header()->rect();
|
||||
header.setGeometry(r.x(), r.y(), r.width(), r.height() - 1);
|
||||
filter.setFocus();
|
||||
QRect r = iv->header()->rect();
|
||||
header->setGeometry(r.x(), r.y(), r.width(), r.height() - 1);
|
||||
filter->setFocus();
|
||||
}
|
||||
|
||||
|
||||
@@ -79,7 +93,7 @@ void EComboBox::changeEvent(QEvent * e) {
|
||||
switch (e->type()) {
|
||||
case QEvent::LanguageChange:
|
||||
#if QT_VERSION >= 0x040700
|
||||
filter.setPlaceholderText(tr("Filter"));
|
||||
filter->setPlaceholderText(tr("Filter"));
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
@@ -89,36 +103,40 @@ void EComboBox::changeEvent(QEvent * e) {
|
||||
|
||||
|
||||
void EComboBox::filterChanged(const QString & text, bool first) {
|
||||
if (filter.text().isEmpty()) filter.setFont(ifont);
|
||||
else filter.setFont(nfont);
|
||||
iv.hide();
|
||||
QModelIndex pi = iv.rootIndex();
|
||||
if (text.isEmpty()) {
|
||||
for (int i = 0; i < iv.model()->rowCount(); ++i) {
|
||||
iv.setRowHidden(i, pi, false);
|
||||
iv.model()->setData(iv.model()->index(i, 0), iv.model()->index(i, 0, pi).data().toString(), Qt::ToolTipRole);
|
||||
if (filter->text().isEmpty()) {
|
||||
filter->setFont(ifont);
|
||||
} else {
|
||||
filter->setFont(nfont);
|
||||
}
|
||||
iv.show();
|
||||
iv->hide();
|
||||
QModelIndex pi = iv->rootIndex();
|
||||
int row_count = iv->model()->rowCount();
|
||||
if (text.isEmpty()) {
|
||||
for (int i = 0; i < row_count; ++i) {
|
||||
iv->setRowHidden(i, pi, false);
|
||||
iv->model()->setData(iv->model()->index(i, 0), iv->model()->index(i, 0, pi).data().toString(), Qt::ToolTipRole);
|
||||
}
|
||||
iv->show();
|
||||
if (first) return;
|
||||
hidePopup();
|
||||
showPopup();
|
||||
qApp->processEvents();
|
||||
QRect r = iv.header()->rect();
|
||||
header.setGeometry(r.x(), r.y(), r.width(), r.height() - 1);
|
||||
QRect r = iv->header()->rect();
|
||||
header->setGeometry(r.x(), r.y(), r.width(), r.height() - 1);
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < iv.model()->rowCount(); ++i) {
|
||||
iv.setRowHidden(i, pi, !iv.model()->index(i, 0, pi).data().toString().contains(
|
||||
for (int i = 0; i < row_count; ++i) {
|
||||
iv->setRowHidden(i, pi, !iv->model()->index(i, 0, pi).data().toString().contains(
|
||||
#if QT_VERSION_MAJOR <= 5
|
||||
QRegExp(text, Qt::CaseInsensitive)
|
||||
#else
|
||||
QRegularExpression(text, QRegularExpression::CaseInsensitiveOption)
|
||||
#endif
|
||||
));
|
||||
iv.model()->setData(iv.model()->index(i, 0), iv.model()->index(i, 0, pi).data().toString(), Qt::ToolTipRole);
|
||||
iv->model()->setData(iv->model()->index(i, 0), iv->model()->index(i, 0, pi).data().toString(), Qt::ToolTipRole);
|
||||
}
|
||||
iv.show();
|
||||
iv->show();
|
||||
qApp->processEvents();
|
||||
QRect r = iv.header()->rect();
|
||||
header.setGeometry(r.x(), r.y(), r.width(), r.height() - 1);
|
||||
QRect r = iv->header()->rect();
|
||||
header->setGeometry(r.x(), r.y(), r.width(), r.height() - 1);
|
||||
}
|
||||
|
||||
@@ -20,39 +20,40 @@
|
||||
#ifndef ECOMBOBOX_H
|
||||
#define ECOMBOBOX_H
|
||||
|
||||
#include <QComboBox>
|
||||
#include <QBoxLayout>
|
||||
#include <QTreeView>
|
||||
#include <QLabel>
|
||||
#include "clineedit.h"
|
||||
#include "qad_widgets_export.h"
|
||||
#include <QComboBox>
|
||||
|
||||
|
||||
class CLineEdit;
|
||||
class QLabel;
|
||||
class QTreeView;
|
||||
|
||||
|
||||
class QAD_WIDGETS_EXPORT EComboBox: public QComboBox
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit EComboBox(QWidget * parent = 0);
|
||||
explicit EComboBox(QWidget * parent = nullptr);
|
||||
|
||||
QSize sizeHint() const;
|
||||
QSize sizeHint() const override;
|
||||
|
||||
public slots:
|
||||
virtual void showPopup();
|
||||
|
||||
private:
|
||||
void changeEvent(QEvent *e);
|
||||
|
||||
QTreeView iv;
|
||||
QWidget header;
|
||||
QLabel icon;
|
||||
CLineEdit filter;
|
||||
QFont nfont, ifont;
|
||||
void showPopup() override;
|
||||
|
||||
private slots:
|
||||
void filterChanged(const QString & text, bool first = false);
|
||||
void filterChanged(const QString & text, bool first);
|
||||
|
||||
signals:
|
||||
void rowsChanged();
|
||||
|
||||
private:
|
||||
void changeEvent(QEvent *e) override;
|
||||
|
||||
QTreeView * iv;
|
||||
QWidget * header;
|
||||
QLabel * icon;
|
||||
CLineEdit * filter;
|
||||
QFont nfont, ifont;
|
||||
};
|
||||
|
||||
#endif // ECOMBOBOX_H
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
#include "evalspinbox.h"
|
||||
#include "qad_types.h"
|
||||
#include "qpievaluator_p.h"
|
||||
#include <QLineEdit>
|
||||
#include <QLabel>
|
||||
#include <QDebug>
|
||||
#include <QPainter>
|
||||
#include <QTimer>
|
||||
#include <QStyle>
|
||||
#include <QStyleOptionSpinBox>
|
||||
#include <QMouseEvent>
|
||||
#if QT_VERSION_MAJOR <= 5
|
||||
# include <QRegExp>
|
||||
#else
|
||||
# include <QRegularExpression>
|
||||
#endif
|
||||
#include <QPainter>
|
||||
#include <QTimer>
|
||||
#include <QStyle>
|
||||
#include <QStyleOptionSpinBox>
|
||||
#include "qad_types.h"
|
||||
#include "qpievaluator_p.h"
|
||||
|
||||
|
||||
EvalSpinBox::EvalSpinBox(QWidget * parent): QAbstractSpinBox(parent) {
|
||||
@@ -21,7 +22,6 @@ EvalSpinBox::EvalSpinBox(QWidget * parent): QAbstractSpinBox(parent) {
|
||||
label = new QLabel(lineEdit());
|
||||
eval = new QPIEvaluator();
|
||||
precision_ = -1;
|
||||
// label->hide();
|
||||
clear_im.load(":/icons/edit-clear-locationbar-rtl.png");
|
||||
icon_ok.load(":/icons/dialog-ok-apply.png");
|
||||
icon_fail.load(":/icons/dialog-warning.png");
|
||||
@@ -35,14 +35,11 @@ EvalSpinBox::EvalSpinBox(QWidget * parent): QAbstractSpinBox(parent) {
|
||||
cw->hide();
|
||||
cw_visible = false;
|
||||
calc_visible = true;
|
||||
//lineEdit()->setStyleSheet("color: darkgreen;");
|
||||
//lineEdit()->setText(eval.expression() + " -> " + QString::number(value(), 'G', 10));
|
||||
cw->installEventFilter(this);
|
||||
status->installEventFilter(this);
|
||||
connect(lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(textChanged_(QString)));
|
||||
connect(this, SIGNAL(editingFinished()), this, SLOT(setExpression_()));
|
||||
connect(this, SIGNAL(editingFinished()), this, SLOT(setExpressionSlot()));
|
||||
label->setText("0");
|
||||
//connect(cw, SIGNAL(mouseReleaseEvent(QMouseEvent * )), this, SLOT(clearMouseRelease(QMouseEvent * )));
|
||||
}
|
||||
|
||||
|
||||
@@ -57,11 +54,17 @@ EvalSpinBox::~EvalSpinBox() {
|
||||
bool EvalSpinBox::eventFilter(QObject * o, QEvent * e) {
|
||||
switch (e->type()) {
|
||||
case QEvent::MouseButtonRelease:
|
||||
if (o == cw) clearMouseRelease((QMouseEvent * )e);
|
||||
if (o == cw) {
|
||||
clearMouseRelease(static_cast<QMouseEvent *>(e));
|
||||
}
|
||||
break;
|
||||
case QEvent::Paint:
|
||||
if (o == status) statusPaintEvent();
|
||||
if (o == cw) cwPaintEvent();
|
||||
if (o == status) {
|
||||
statusPaintEvent();
|
||||
}
|
||||
if (o == cw) {
|
||||
cwPaintEvent();
|
||||
}
|
||||
break;
|
||||
default : break;
|
||||
}
|
||||
@@ -141,8 +144,9 @@ void EvalSpinBox::textChanged_(const QString & text) {
|
||||
icon = icon_ok;
|
||||
status->setToolTip("OK -> "+QString::number(value(), 'G', 10));
|
||||
}
|
||||
// qDebug() << "value =" << value();
|
||||
if (pv != value()) emit valueChanged(value());
|
||||
if (pv != value()) {
|
||||
emit valueChanged(value());
|
||||
}
|
||||
} else {
|
||||
icon = icon_fail;
|
||||
status->setToolTip(eval->error());
|
||||
@@ -151,7 +155,7 @@ void EvalSpinBox::textChanged_(const QString & text) {
|
||||
}
|
||||
|
||||
|
||||
void EvalSpinBox::setExpression_() {
|
||||
void EvalSpinBox::setExpressionSlot() {
|
||||
bool td = false;
|
||||
double pv = value();
|
||||
QString t = text();
|
||||
@@ -160,8 +164,7 @@ void EvalSpinBox::setExpression_() {
|
||||
t.chop(1);
|
||||
}
|
||||
if (eval->check(t)) {
|
||||
/*if (eval.expression() == "0") lineEdit()->clear();
|
||||
else*/ lineEdit()->setText(eval->expression());
|
||||
lineEdit()->setText(eval->expression());
|
||||
eval->evaluate();
|
||||
if (td) lineEdit()->setText(QString::number(value(), 'G', precision_ > 0 ? precision_ : 16));
|
||||
status->setToolTip("OK -> " + QString::number(value(), 'G', 10));
|
||||
@@ -169,13 +172,8 @@ void EvalSpinBox::setExpression_() {
|
||||
} else {
|
||||
icon = icon_fail;
|
||||
status->setToolTip(eval->error());
|
||||
// qDebug() << eval.expression();
|
||||
}
|
||||
if (!label->isHidden()) {
|
||||
// if (eval.expression() != QString::number(value(), 'G', 10) && eval.expression() != QString::number(value(), 'G', 11) && eval.isCorrect())
|
||||
// label->setText("<html><head/><body><p>" + eval.expression() + " <span style=\"color:#005500;\">-> " + QString::number(value(), 'G', 10) + "</span></p></body></html>");
|
||||
// else
|
||||
// label->setText(eval.expression());
|
||||
if (eval->expression() != QString::number(value(), 'G', 10) && eval->expression() != QString::number(value(), 'G', 11) && eval->isCorrect())
|
||||
label->setText("<html><head/><body><p><span style=\"color:#005500;\">-> " + QString::number(value(), 'G', 10) + "</span></p></body></html>");
|
||||
else
|
||||
@@ -188,29 +186,24 @@ void EvalSpinBox::setExpression_() {
|
||||
lineEdit()->setStyleSheet("");
|
||||
status->hide();
|
||||
}
|
||||
// lineEdit()->setText(eval.expression() + " -> " + QString::number(value(), 'G', 10));
|
||||
//lineEdit()->setText("");
|
||||
lineEdit()->blockSignals(false);
|
||||
}
|
||||
|
||||
// qDebug() << "value =" << value();
|
||||
if (pv != value()) emit valueChanged(value());
|
||||
}
|
||||
|
||||
|
||||
void EvalSpinBox::setExpression(const QString & expr) {
|
||||
lineEdit()->setText(expr);
|
||||
//if (eval.expression() == "0") lineEdit()->clear();
|
||||
cw->setVisible(text() != dt && cw_visible);
|
||||
setExpression_();
|
||||
setExpressionSlot();
|
||||
}
|
||||
|
||||
|
||||
void EvalSpinBox::setValue(double val) {
|
||||
lineEdit()->setText(QString::number(val, 'G', precision_ > 0 ? precision_ : 16));
|
||||
//if (val == 0) lineEdit()->clear();
|
||||
cw->setVisible(text() != dt && cw_visible);
|
||||
setExpression_();
|
||||
setExpressionSlot();
|
||||
}
|
||||
|
||||
|
||||
@@ -221,7 +214,7 @@ void EvalSpinBox::stepBy(int steps) {
|
||||
|
||||
void EvalSpinBox::clear() {
|
||||
lineEdit()->setText(dt);
|
||||
setExpression_();
|
||||
setExpressionSlot();
|
||||
cw->hide();
|
||||
resizeIcons();
|
||||
emit cleared();
|
||||
@@ -259,7 +252,6 @@ QAbstractSpinBox::StepEnabled EvalSpinBox::stepEnabled() const {
|
||||
|
||||
|
||||
void EvalSpinBox::focusInEvent(QFocusEvent * event) {
|
||||
// qDebug() << "focus_in";
|
||||
label->hide();
|
||||
status->show();
|
||||
lineEdit()->blockSignals(true);
|
||||
@@ -273,29 +265,24 @@ void EvalSpinBox::focusInEvent(QFocusEvent * event) {
|
||||
|
||||
void EvalSpinBox::focusOutEvent(QFocusEvent * event) {
|
||||
QAbstractSpinBox::focusOutEvent(event);
|
||||
// qDebug() << eval.expression() << QString::number(value(), 'G', 10);
|
||||
// if (eval.expression() != QString::number(value(), 'G', 10) && eval.expression() != QString::number(value(), 'G', 11) && eval.isCorrect())
|
||||
// label->setText("<html><head/><body><p>" + eval.expression() + " <span style=\"color:#005500;\">-> " + QString::number(value(), 'G', 10) + "</span></p></body></html>");
|
||||
// else
|
||||
// label->setText(eval.expression());
|
||||
if (eval->expression() != QString::number(value(), 'G', 10) && eval->expression() != QString::number(value(), 'G', 11) && eval->isCorrect())
|
||||
if (eval->expression() != QString::number(value(), 'G', 10) && eval->expression() != QString::number(value(), 'G', 11) && eval->isCorrect()) {
|
||||
label->setText("<html><head/><body><p><span style=\"color:#005500;\">-> " + QString::number(value(), 'G', 10) + "</span></p></body></html>");
|
||||
else
|
||||
} else {
|
||||
label->setText("");
|
||||
if (calc_visible)
|
||||
}
|
||||
if (calc_visible) {
|
||||
label->show();
|
||||
}
|
||||
lineEdit()->blockSignals(true);
|
||||
if (!eval->isCorrect()) lineEdit()->setStyleSheet("color: darkred;");
|
||||
else status->hide();
|
||||
// lineEdit()->setText(eval.expression() + " -> " + QString::number(value(), 'G', 10));
|
||||
//lineEdit()->clear();
|
||||
lineEdit()->blockSignals(false);
|
||||
resizeIcons();
|
||||
}
|
||||
|
||||
|
||||
void EvalSpinBox::wheelEvent(QWheelEvent * event) {
|
||||
if (event->modifiers().testFlag(Qt::ShiftModifier))
|
||||
if (event->modifiers().testFlag(Qt::ShiftModifier)) {
|
||||
stepByDouble(
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
|
||||
event->delta()
|
||||
@@ -303,13 +290,13 @@ void EvalSpinBox::wheelEvent(QWheelEvent * event) {
|
||||
event->angleDelta().y()
|
||||
#endif
|
||||
> 0 ? 0.1 : -0.1);
|
||||
else
|
||||
} else {
|
||||
QAbstractSpinBox::wheelEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void EvalSpinBox::stepByDouble(double steps) {
|
||||
//qDebug() << "step" << steps;
|
||||
if (isReadOnly()) return;
|
||||
QString t = text();
|
||||
if (eval->check(t)) {
|
||||
@@ -347,13 +334,7 @@ void EvalSpinBox::stepByDouble(double steps) {
|
||||
|
||||
|
||||
void EvalSpinBox::setDefaultText(const QString & t) {
|
||||
// bool def = (!cw->isHidden());
|
||||
dt = t;
|
||||
// if (def) {
|
||||
// lineEdit()->setText(dt);
|
||||
// setExpression_();
|
||||
// }
|
||||
//if (t == eval.expression() || (value() == 0 && t.isEmpty())) clear();
|
||||
cw->setVisible((eval->expression() != dt || (dt.isEmpty() && eval->expression() == "0")) && cw_visible);
|
||||
resizeIcons();
|
||||
}
|
||||
@@ -368,7 +349,8 @@ void EvalSpinBox::setClearButtonVisible(bool visible) {
|
||||
|
||||
void EvalSpinBox::setCalculationVisible(bool visible) {
|
||||
calc_visible = visible;
|
||||
setExpression_();
|
||||
if (!calc_visible)
|
||||
setExpressionSlot();
|
||||
if (!calc_visible) {
|
||||
label->hide();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,15 +20,14 @@
|
||||
#ifndef EVALSPINBOX_H
|
||||
#define EVALSPINBOX_H
|
||||
|
||||
#include <QAbstractSpinBox>
|
||||
#include <QMouseEvent>
|
||||
#include "qad_widgets_export.h"
|
||||
#include <QAbstractSpinBox>
|
||||
|
||||
|
||||
class QPIEvaluator;
|
||||
|
||||
|
||||
class QLabel;
|
||||
|
||||
|
||||
class QAD_WIDGETS_EXPORT EvalSpinBox: public QAbstractSpinBox
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -40,8 +39,8 @@ class QAD_WIDGETS_EXPORT EvalSpinBox: public QAbstractSpinBox
|
||||
Q_PROPERTY(int precision READ precision WRITE setPrecision)
|
||||
|
||||
public:
|
||||
explicit EvalSpinBox(QWidget * parent = 0);
|
||||
~EvalSpinBox();
|
||||
explicit EvalSpinBox(QWidget * parent = nullptr);
|
||||
~EvalSpinBox() override;
|
||||
|
||||
double value() const;
|
||||
const QString & expression() const;
|
||||
@@ -51,20 +50,45 @@ public:
|
||||
bool isCleared() const;
|
||||
int precision() const {return precision_;}
|
||||
|
||||
virtual void stepBy(int steps);
|
||||
virtual void clear();
|
||||
virtual QSize sizeHint() const;
|
||||
void stepBy(int steps) override;
|
||||
void clear() override;
|
||||
QSize sizeHint() const override;
|
||||
|
||||
public slots:
|
||||
void setExpression(const QString & expr);
|
||||
void setValue(double val);
|
||||
void setDefaultText(const QString & t);
|
||||
void setClearButtonVisible(bool visible);
|
||||
void setCalculationVisible(bool visible);
|
||||
void setPrecision(int precision) {precision_ = precision;}
|
||||
|
||||
protected:
|
||||
QString text() const {return QAbstractSpinBox::text();}
|
||||
|
||||
virtual StepEnabled stepEnabled() const;
|
||||
virtual void focusInEvent(QFocusEvent *event);
|
||||
virtual void focusOutEvent(QFocusEvent *event);
|
||||
virtual void wheelEvent(QWheelEvent *event);
|
||||
StepEnabled stepEnabled() const override;
|
||||
void focusInEvent(QFocusEvent *event) override;
|
||||
void focusOutEvent(QFocusEvent *event) override;
|
||||
void wheelEvent(QWheelEvent *event) override;
|
||||
|
||||
void stepByDouble(double steps);
|
||||
|
||||
private slots:
|
||||
void clearMouseRelease(QMouseEvent * e);
|
||||
void textChanged_(const QString & text);
|
||||
void setExpressionSlot();
|
||||
void resizeIcons();
|
||||
|
||||
signals:
|
||||
void valueChanged(double val);
|
||||
void cleared();
|
||||
|
||||
private:
|
||||
bool eventFilter(QObject * o, QEvent * e) override;
|
||||
void resizeEvent(QResizeEvent * ) override;
|
||||
void changeEvent(QEvent * e) override;
|
||||
void statusPaintEvent();
|
||||
void cwPaintEvent();
|
||||
|
||||
QWidget * status;
|
||||
QWidget * cw;
|
||||
QPIEvaluator * eval;
|
||||
@@ -77,32 +101,6 @@ protected:
|
||||
QString dt;
|
||||
bool cw_visible, calc_visible;
|
||||
int precision_;
|
||||
|
||||
private:
|
||||
bool eventFilter(QObject * o, QEvent * e);
|
||||
void resizeEvent(QResizeEvent * );
|
||||
void changeEvent(QEvent * e);
|
||||
void statusPaintEvent();
|
||||
void cwPaintEvent();
|
||||
|
||||
private slots:
|
||||
void clearMouseRelease(QMouseEvent * e);
|
||||
void textChanged_(const QString & text);
|
||||
void setExpression_();
|
||||
void resizeIcons();
|
||||
|
||||
public slots:
|
||||
void setExpression(const QString & expr);
|
||||
void setValue(double val);
|
||||
void setDefaultText(const QString & t);
|
||||
void setClearButtonVisible(bool visible);
|
||||
void setCalculationVisible(bool visible);
|
||||
void setPrecision(int precision) {precision_ = precision;}
|
||||
|
||||
signals:
|
||||
void valueChanged(double val);
|
||||
void cleared();
|
||||
|
||||
};
|
||||
|
||||
#endif // EVALSPINBOX_H
|
||||
|
||||
@@ -30,8 +30,9 @@ QIcon IconedLabel::icon() const {
|
||||
|
||||
|
||||
bool IconedLabel::event(QEvent * e) {
|
||||
if (e->type() == QEvent::FontChange || e->type() == QEvent::Polish)
|
||||
if (e->type() == QEvent::FontChange || e->type() == QEvent::Polish) {
|
||||
setIconSize(iconSize());
|
||||
}
|
||||
return QFrame::event(e);
|
||||
}
|
||||
|
||||
@@ -43,10 +44,11 @@ void IconedLabel::checkSpacing() {
|
||||
layout()->setSpacing(0);
|
||||
} else {
|
||||
QStyle * s = style();
|
||||
if (s)
|
||||
if (s) {
|
||||
layout()->setSpacing(s->layoutSpacing(QSizePolicy::Label, QSizePolicy::Label,
|
||||
dir_ <= Direction::RightToLeft ? Qt::Horizontal : Qt::Vertical));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -79,9 +81,10 @@ void IconedLabel::setIconSize(const QSize & s) {
|
||||
|
||||
void IconedLabel::setDirection(IconedLabel::Direction d) {
|
||||
dir_ = d;
|
||||
if (layout() != 0)
|
||||
if (layout()) {
|
||||
delete layout();
|
||||
QLayout * lay = new QBoxLayout((QBoxLayout::Direction)dir_);
|
||||
}
|
||||
QLayout * lay = new QBoxLayout(static_cast<QBoxLayout::Direction>(dir_));
|
||||
lay->addItem(new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Expanding));
|
||||
lay->addWidget(&label_);
|
||||
lay->addWidget(&icon_);
|
||||
|
||||
@@ -20,10 +20,9 @@
|
||||
#ifndef ICONEDLABEL_H
|
||||
#define ICONEDLABEL_H
|
||||
|
||||
#include "qad_widgets_export.h"
|
||||
#include <QLabel>
|
||||
#include <QIcon>
|
||||
#include "qad_types.h"
|
||||
#include "qad_widgets_export.h"
|
||||
|
||||
|
||||
class QAD_WIDGETS_EXPORT IconedLabel: public QFrame
|
||||
@@ -37,7 +36,7 @@ class QAD_WIDGETS_EXPORT IconedLabel: public QFrame
|
||||
public:
|
||||
enum Direction {LeftToRight = 0, RightToLeft = 1, TopToBottom = 2, BottomToTop = 3};
|
||||
|
||||
explicit IconedLabel(QWidget * parent = 0);
|
||||
explicit IconedLabel(QWidget * parent = nullptr);
|
||||
|
||||
QString text() const;
|
||||
QIcon icon() const;
|
||||
@@ -46,8 +45,14 @@ public:
|
||||
|
||||
QLabel * textLabel() {return &label_;}
|
||||
|
||||
public slots:
|
||||
void setText(const QString & t);
|
||||
void setIcon(const QIcon & i);
|
||||
void setIconSize(const QSize & s);
|
||||
void setDirection(Direction d);
|
||||
|
||||
protected:
|
||||
virtual bool event(QEvent * e);
|
||||
bool event(QEvent * e) override;
|
||||
void checkSpacing();
|
||||
QSize realIconSize() const;
|
||||
|
||||
@@ -55,15 +60,6 @@ protected:
|
||||
QIcon sicon_;
|
||||
QSize size_;
|
||||
Direction dir_;
|
||||
|
||||
public slots:
|
||||
void setText(const QString & t);
|
||||
void setIcon(const QIcon & i);
|
||||
void setIconSize(const QSize & s);
|
||||
void setDirection(Direction d);
|
||||
|
||||
signals:
|
||||
|
||||
};
|
||||
|
||||
#endif // ICONEDLABEL_H
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "image_view.h"
|
||||
#include <QGraphicsPixmapItem>
|
||||
#include <QGraphicsScene>
|
||||
#include <QBuffer>
|
||||
#include <QEvent>
|
||||
@@ -9,7 +10,7 @@
|
||||
#include <qmath.h>
|
||||
|
||||
|
||||
ImageView::ImageView(QWidget * parent): QGraphicsView(parent) {
|
||||
ImageView::ImageView(QWidget * parent): QGraphicsView(parent), item(new QGraphicsPixmapItem) {
|
||||
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setDragMode(QGraphicsView::NoDrag);
|
||||
@@ -17,9 +18,9 @@ ImageView::ImageView(QWidget * parent): QGraphicsView(parent) {
|
||||
setScene(new QGraphicsScene());
|
||||
setRenderHint(QPainter::Antialiasing, true);
|
||||
setRenderHint(QPainter::SmoothPixmapTransform, true);
|
||||
item.setTransformationMode(Qt::SmoothTransformation);
|
||||
item.setFlags(QGraphicsItem::GraphicsItemFlags());
|
||||
scene()->addItem(&item);
|
||||
item->setTransformationMode(Qt::SmoothTransformation);
|
||||
item->setFlags(QGraphicsItem::GraphicsItemFlags());
|
||||
scene()->addItem(item);
|
||||
viewport()->setAutoFillBackground(false);
|
||||
viewport()->installEventFilter(this);
|
||||
autofit_ = true;
|
||||
@@ -28,6 +29,7 @@ ImageView::ImageView(QWidget * parent): QGraphicsView(parent) {
|
||||
|
||||
|
||||
ImageView::~ImageView() {
|
||||
delete item;
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +52,7 @@ void ImageView::setViewInteractive(bool yes) {
|
||||
void ImageView::setImage(const QImage & i, bool save) {
|
||||
im_data.clear();
|
||||
if (i.isNull()) {
|
||||
item.setPixmap(QPixmap());
|
||||
item->setPixmap(QPixmap());
|
||||
map = QPixmap();
|
||||
return;
|
||||
}
|
||||
@@ -67,7 +69,7 @@ void ImageView::setImage(const QImage & i, bool save) {
|
||||
void ImageView::setImage(const QByteArray & i) {
|
||||
im_data = i;
|
||||
if (i.isEmpty()) {
|
||||
item.setPixmap(QPixmap());
|
||||
item->setPixmap(QPixmap());
|
||||
map = QPixmap();
|
||||
return;
|
||||
}
|
||||
@@ -78,7 +80,7 @@ void ImageView::setImage(const QByteArray & i) {
|
||||
|
||||
void ImageView::clear() {
|
||||
im_data.clear();
|
||||
item.setPixmap(QPixmap());
|
||||
item->setPixmap(QPixmap());
|
||||
map = QPixmap();
|
||||
}
|
||||
|
||||
@@ -103,7 +105,7 @@ void ImageView::wheelEvent(QWheelEvent * e) {
|
||||
|
||||
|
||||
bool ImageView::eventFilter(QObject * o, QEvent * e) {
|
||||
QMouseEvent * me = (QMouseEvent *)e;
|
||||
QMouseEvent * me = reinterpret_cast<QMouseEvent *>(e);
|
||||
switch (e->type()) {
|
||||
case QEvent::Resize:
|
||||
adjustView();
|
||||
@@ -137,23 +139,22 @@ void ImageView::adjustView() {
|
||||
ws *= devicePixelRatio();
|
||||
#endif
|
||||
int nw = map.size().boundedTo(ws).width();
|
||||
item.setScale(1.);
|
||||
item->setScale(1.);
|
||||
if (nw > 0) {
|
||||
qreal mp = map.width() / nw;
|
||||
if (mp > 1.) {
|
||||
QSize ss = map.size();
|
||||
item.setPixmap(map.scaled(map.size() / mp, Qt::KeepAspectRatio, Qt::SmoothTransformation));
|
||||
item.setScale(double(ss.width()) / item.pixmap().width());
|
||||
item->setPixmap(map.scaled(map.size() / mp, Qt::KeepAspectRatio, Qt::SmoothTransformation));
|
||||
item->setScale(double(ss.width()) / item->pixmap().width());
|
||||
} else
|
||||
item.setPixmap(map);
|
||||
item->setPixmap(map);
|
||||
} else
|
||||
item.setPixmap(map);
|
||||
item->setPixmap(map);
|
||||
if (!autofit_) return;
|
||||
QRectF r = item.mapRectToScene(item.boundingRect());
|
||||
QRectF r = item->mapRectToScene(item->boundingRect());
|
||||
setSceneRect(r);
|
||||
fitInView(r, Qt::KeepAspectRatio);
|
||||
centerOn(r.center());
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -20,9 +20,11 @@
|
||||
#ifndef IMAGE_VIEW_H
|
||||
#define IMAGE_VIEW_H
|
||||
|
||||
#include <QGraphicsView>
|
||||
#include <QGraphicsPixmapItem>
|
||||
#include "qad_widgets_export.h"
|
||||
#include <QGraphicsView>
|
||||
|
||||
|
||||
class QGraphicsPixmapItem;
|
||||
|
||||
|
||||
class QAD_WIDGETS_EXPORT ImageView: public QGraphicsView
|
||||
@@ -31,31 +33,16 @@ class QAD_WIDGETS_EXPORT ImageView: public QGraphicsView
|
||||
Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)
|
||||
Q_PROPERTY(bool viewInteractive READ viewInteractive WRITE setViewInteractive)
|
||||
public:
|
||||
ImageView(QWidget * parent = 0);
|
||||
~ImageView();
|
||||
ImageView(QWidget * parent = nullptr);
|
||||
~ImageView() override;
|
||||
|
||||
void setImage(const QImage & i, bool save = true);
|
||||
void setImage(const QByteArray & i);
|
||||
QByteArray image() const {return im_data;}
|
||||
QPixmap pixmap() const;
|
||||
bool viewInteractive() const {return interactive_;}
|
||||
|
||||
void clear();
|
||||
|
||||
private:
|
||||
void mouseDoubleClickEvent(QMouseEvent * e);
|
||||
void mousePressEvent(QMouseEvent * e);
|
||||
void wheelEvent(QWheelEvent * e);
|
||||
bool eventFilter(QObject * o, QEvent * e);
|
||||
void adjustView();
|
||||
|
||||
QGraphicsPixmapItem item;
|
||||
QByteArray im_data;
|
||||
QPoint prev_pos;
|
||||
bool autofit_, interactive_;
|
||||
QPixmap map;
|
||||
|
||||
|
||||
public slots:
|
||||
void autofit();
|
||||
void setPixmap(QPixmap pixmap);
|
||||
@@ -64,6 +51,18 @@ public slots:
|
||||
signals:
|
||||
void clicked(QPointF, Qt::MouseButtons);
|
||||
|
||||
private:
|
||||
void mouseDoubleClickEvent(QMouseEvent * e) override;
|
||||
void mousePressEvent(QMouseEvent * e) override;
|
||||
void wheelEvent(QWheelEvent * e) override;
|
||||
bool eventFilter(QObject * o, QEvent * e) override;
|
||||
void adjustView();
|
||||
|
||||
QGraphicsPixmapItem * item;
|
||||
QByteArray im_data;
|
||||
QPoint prev_pos;
|
||||
bool autofit_, interactive_;
|
||||
QPixmap map;
|
||||
};
|
||||
|
||||
#endif // IMAGE_VIEW_H
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include <QLayout>
|
||||
#include <QBoxLayout>
|
||||
#include <QScrollBar>
|
||||
#include <QLineEdit>
|
||||
#include <QTextDocument>
|
||||
#include <QTextDocumentFragment>
|
||||
#include <QTextOption>
|
||||
@@ -11,6 +12,7 @@
|
||||
#include <QAction>
|
||||
#include <QApplication>
|
||||
#include <QDesktopServices>
|
||||
#include <QPainter>
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
|
||||
# include <QWindow>
|
||||
#endif
|
||||
@@ -24,7 +26,7 @@ Q_DECLARE_METATYPE(QCodeEdit::ACEntry)
|
||||
|
||||
class _QCE_Viewport: public QWidget {
|
||||
public:
|
||||
_QCE_Viewport(QWidget * p = 0): QWidget(p) {
|
||||
_QCE_Viewport(QWidget * p = nullptr): QWidget(p) {
|
||||
setObjectName("__qcodeedit_viewport__");
|
||||
setMouseTracking(true);
|
||||
//setCursor(Qt::IBeamCursor);
|
||||
|
||||
@@ -49,7 +49,7 @@ class QAD_WIDGETS_EXPORT QCodeEdit: public QWidget
|
||||
friend class _QCE_Viewport;
|
||||
|
||||
public:
|
||||
QCodeEdit(QWidget * parent = 0);
|
||||
QCodeEdit(QWidget * parent = nullptr);
|
||||
~QCodeEdit();
|
||||
|
||||
enum ACClassType {
|
||||
@@ -177,7 +177,7 @@ private:
|
||||
bool hasBlockSelection() const;
|
||||
void startBlockSelection();
|
||||
void cancelBlockSelection();
|
||||
void switchBlockSelection(QKeyEvent * ke = 0);
|
||||
void switchBlockSelection(QKeyEvent * ke = nullptr);
|
||||
bool removeBlockSelection(bool is_del);
|
||||
void insertBlockSelection(QString text);
|
||||
void createBlockSelection();
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "qcodeedit_completer_p.h"
|
||||
#include "qad_types.h"
|
||||
#include <QHeaderView>
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,23 @@
|
||||
#include "shortcuts.h"
|
||||
#include <QPainter>
|
||||
#include <QAction>
|
||||
#include <QKeyEvent>
|
||||
#include <QHeaderView>
|
||||
#include <QMenu>
|
||||
#include <QScrollBar>
|
||||
#include <QShortcut>
|
||||
#include <QWidgetAction>
|
||||
#include <QMainWindow>
|
||||
#include <QToolBar>
|
||||
|
||||
|
||||
/// ShortcutEdit
|
||||
|
||||
ShortcutEdit::ShortcutEdit(QWidget *parent) : CLineEdit(parent) {
|
||||
ti = nullptr;
|
||||
ca = nullptr;
|
||||
connect(this, &CLineEdit::textChanged, this, &ShortcutEdit::textChangedSlot);
|
||||
}
|
||||
|
||||
|
||||
void ShortcutEdit::keyPressEvent(QKeyEvent * e) {
|
||||
@@ -6,14 +25,56 @@ void ShortcutEdit::keyPressEvent(QKeyEvent * e) {
|
||||
km &= ~Qt::KeypadModifier;
|
||||
km &= ~Qt::GroupSwitchModifier;
|
||||
if (e->key() != Qt::Key_Control && e->key() != Qt::Key_Shift &&
|
||||
e->key() != Qt::Key_Alt && e->key() != Qt::Key_Meta)
|
||||
e->key() != Qt::Key_Alt && e->key() != Qt::Key_Meta) {
|
||||
setText(QKeySequence(km | e->key()).toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ShortcutEdit::assignAction(QAction *a) {
|
||||
clear();
|
||||
ca = a;
|
||||
reset();
|
||||
}
|
||||
|
||||
|
||||
QAction *ShortcutEdit::action() const {
|
||||
return ca;
|
||||
}
|
||||
|
||||
|
||||
bool ShortcutEdit::isEmpty() const {
|
||||
return text().isEmpty();
|
||||
}
|
||||
|
||||
|
||||
void ShortcutEdit::commit() {
|
||||
if (!ca) {
|
||||
return;
|
||||
}
|
||||
ca->setShortcut(QKeySequence(text()));
|
||||
}
|
||||
|
||||
|
||||
void ShortcutEdit::reset() {
|
||||
if (!ca) {
|
||||
return;
|
||||
}
|
||||
setText(ca->shortcut().toString());
|
||||
}
|
||||
|
||||
|
||||
void ShortcutEdit::textChangedSlot(QString t) {
|
||||
if (ti) {
|
||||
ti->setText(1, t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Shortcuts
|
||||
|
||||
Shortcuts::Shortcuts(QWidget * parent, bool on): QTreeWidget(parent) {
|
||||
aw = 0;
|
||||
aw = nullptr;
|
||||
QImage ti(QSize(16, 16), QImage::Format_ARGB32_Premultiplied);
|
||||
QPainter p(&ti);
|
||||
p.setCompositionMode(QPainter::CompositionMode_Clear);
|
||||
@@ -42,8 +103,9 @@ Shortcuts::Shortcuts(QWidget * parent, bool on): QTreeWidget(parent) {
|
||||
|
||||
|
||||
Shortcuts::~Shortcuts() {
|
||||
foreach (ShortcutEdit * i, edits)
|
||||
for (ShortcutEdit * i : edits) {
|
||||
delete i;
|
||||
}
|
||||
edits.clear();
|
||||
}
|
||||
|
||||
@@ -60,9 +122,12 @@ void Shortcuts::changeEvent(QEvent * e) {
|
||||
|
||||
|
||||
void Shortcuts::assignWindow(QWidget * w) {
|
||||
if (w == 0) return;
|
||||
while ((qobject_cast<QMainWindow * >(w) == 0) && (w->parentWidget() != 0))
|
||||
if (!w) {
|
||||
return;
|
||||
}
|
||||
while (!(qobject_cast<QMainWindow * >(w)) && (w->parentWidget())) {
|
||||
w = w->parentWidget();
|
||||
}
|
||||
aw = qobject_cast<QMainWindow * >(w);
|
||||
updateShortcuts();
|
||||
}
|
||||
@@ -71,30 +136,38 @@ void Shortcuts::assignWindow(QWidget * w) {
|
||||
QStringList Shortcuts::actionTree(QAction * a) {
|
||||
QStringList tree;
|
||||
QList<QWidget * > aw = a->associatedWidgets();
|
||||
if (aw.size() == 0) return tree;
|
||||
QWidget * cw = 0;
|
||||
QMenu * tm;
|
||||
QToolBar * tt;
|
||||
foreach (QWidget * i, aw) {
|
||||
tm = qobject_cast<QMenu * >(i);
|
||||
if (tm == 0) continue;
|
||||
cw = i;
|
||||
while (cw != 0) {
|
||||
if (aw.size() == 0) {
|
||||
return tree;
|
||||
}
|
||||
for (QWidget * i : aw) {
|
||||
auto tm = qobject_cast<QMenu * >(i);
|
||||
if (!tm) {
|
||||
continue;
|
||||
}
|
||||
auto cw = i;
|
||||
while (cw) {
|
||||
tm = qobject_cast<QMenu * >(cw);
|
||||
if (tm != 0) {
|
||||
if (!tm->title().isEmpty())
|
||||
if (tm) {
|
||||
if (!tm->title().isEmpty()) {
|
||||
tree.push_front(tm->title());
|
||||
}
|
||||
cw = cw->parentWidget();
|
||||
} else break;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
if (!tree.isEmpty()) return tree;
|
||||
}
|
||||
foreach (QWidget * i, aw) {
|
||||
tt = qobject_cast<QToolBar * >(i);
|
||||
if (tt == 0) continue;
|
||||
cw = i;
|
||||
if (!tt->windowTitle().isEmpty())
|
||||
if (!tree.isEmpty()) {
|
||||
return tree;
|
||||
}
|
||||
}
|
||||
for (QWidget * i : aw) {
|
||||
auto tt = qobject_cast<QToolBar * >(i);
|
||||
if (!tt) {
|
||||
continue;
|
||||
}
|
||||
if (!tt->windowTitle().isEmpty()) {
|
||||
tree.push_front(tt->windowTitle());
|
||||
}
|
||||
break;
|
||||
}
|
||||
return tree;
|
||||
@@ -103,8 +176,10 @@ QStringList Shortcuts::actionTree(QAction * a) {
|
||||
|
||||
QList<QPair<QString, QKeySequence> > Shortcuts::shortcuts() {
|
||||
QList<QPair<QString, QKeySequence> > l;
|
||||
foreach (ShortcutEdit * i, edits) {
|
||||
if (i->action()->objectName().isEmpty()) continue;
|
||||
for (const ShortcutEdit * i : edits) {
|
||||
if (i->action()->objectName().isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
l << QPair<QString, QKeySequence>(i->action()->objectName(), i->text());
|
||||
}
|
||||
return l;
|
||||
@@ -124,19 +199,26 @@ void Shortcuts::clear() {
|
||||
|
||||
|
||||
bool Shortcuts::checkAction(QAction * a) {
|
||||
if (a->menu() != 0) return false;
|
||||
if (a->isSeparator()) return false;
|
||||
if (a->text().isEmpty()) return false;
|
||||
if (a->associatedWidgets().isEmpty()) return false;
|
||||
if (QString(a->metaObject()->className()) != "QAction") return false;
|
||||
if (qobject_cast<QWidgetAction * >(a) != 0) return false;
|
||||
if (a->menu() || a->isSeparator() || a->text().isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
if (a->associatedWidgets().isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
if (QString(a->metaObject()->className()) != "QAction") {
|
||||
return false;
|
||||
}
|
||||
if (qobject_cast<QWidgetAction * >(a)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void Shortcuts::updateShortcuts() {
|
||||
//return;
|
||||
if (aw == 0 || !active) return;
|
||||
if (!aw || !active) {
|
||||
return;
|
||||
}
|
||||
hide();
|
||||
int cpos = verticalScrollBar()->value();
|
||||
clear();
|
||||
@@ -150,12 +232,12 @@ void Shortcuts::updateShortcuts() {
|
||||
QStringList tree;
|
||||
bool s = isSortingEnabled(), isFound;
|
||||
setSortingEnabled(false);
|
||||
foreach (QAction * i, al) {
|
||||
for (QAction * i : al) {
|
||||
if (!checkAction(i)) continue;
|
||||
edits.push_back(new ShortcutEdit());
|
||||
tree = actionTree(i);
|
||||
pi = invisibleRootItem();
|
||||
foreach (QString t, tree) {
|
||||
for (const QString & t : tree) {
|
||||
isFound = false;
|
||||
for (int j = 0; j < pi->childCount(); ++j) {
|
||||
if (pi->child(j)->text(0) == t) {
|
||||
@@ -198,38 +280,55 @@ void Shortcuts::updateShortcuts() {
|
||||
|
||||
|
||||
void Shortcuts::commit() {
|
||||
foreach (ShortcutEdit * i, edits)
|
||||
for (ShortcutEdit * i : edits) {
|
||||
i->commit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Shortcuts::reset() {
|
||||
foreach (ShortcutEdit * i, edits)
|
||||
void Shortcuts::resetShortcuts() {
|
||||
for (ShortcutEdit * i : edits) {
|
||||
i->reset();
|
||||
}
|
||||
updateShortcuts();
|
||||
}
|
||||
|
||||
|
||||
void Shortcuts::filter(const QString & what) {
|
||||
hide();
|
||||
for (int i = 0; i < topLevelItemCount(); ++i)
|
||||
for (int i = 0; i < topLevelItemCount(); ++i) {
|
||||
filterTree(topLevelItem(i), what);
|
||||
}
|
||||
show();
|
||||
}
|
||||
|
||||
|
||||
bool Shortcuts::filterTree(QTreeWidgetItem * ti, QString f) {
|
||||
if (f.isEmpty()) {
|
||||
for (int i = 0; i < ti->childCount(); ++i)
|
||||
for (int i = 0; i < ti->childCount(); ++i) {
|
||||
filterTree(ti->child(i), f);
|
||||
}
|
||||
ti->setHidden(false);
|
||||
return true;
|
||||
}
|
||||
bool isFound = false;
|
||||
for (int i = 0; i < ti->childCount(); ++i)
|
||||
if (filterTree(ti->child(i), f)) isFound = true;
|
||||
for (int i = 0; i < ti->childCount(); ++i) {
|
||||
if (filterTree(ti->child(i), f)) {
|
||||
isFound = true;
|
||||
}
|
||||
}
|
||||
if (ti->text(0).indexOf(f, 0, Qt::CaseInsensitive) >= 0 ||
|
||||
ti->text(1).indexOf(f, 0, Qt::CaseInsensitive) >= 0) isFound = true;
|
||||
ti->text(1).indexOf(f, 0, Qt::CaseInsensitive) >= 0) {
|
||||
isFound = true;
|
||||
}
|
||||
ti->setHidden(!isFound);
|
||||
return isFound;
|
||||
}
|
||||
|
||||
|
||||
void Shortcuts::updateEditorGeometries() {
|
||||
for (ShortcutEdit * i : edits) {
|
||||
i->setGeometry(visualRect(indexFromItem(i->ti, 1)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,20 +20,13 @@
|
||||
#ifndef SHORTCUTS_H
|
||||
#define SHORTCUTS_H
|
||||
|
||||
#include <QTreeWidget>
|
||||
#include <QMainWindow>
|
||||
#include <QShortcut>
|
||||
#include <QHeaderView>
|
||||
#include <QAction>
|
||||
#include <QLineEdit>
|
||||
#include <QDebug>
|
||||
#include <QKeyEvent>
|
||||
#include <QMenu>
|
||||
#include <QToolBar>
|
||||
#include <QScrollBar>
|
||||
#include <QWidgetAction>
|
||||
#include "clineedit.h"
|
||||
#include "qad_widgets_export.h"
|
||||
#include "clineedit.h"
|
||||
#include <QTreeWidget>
|
||||
|
||||
|
||||
class QMainWindow;
|
||||
class ShortcutEdit;
|
||||
|
||||
|
||||
class QAD_WIDGETS_EXPORT ShortcutEdit: public CLineEdit
|
||||
@@ -41,63 +34,55 @@ class QAD_WIDGETS_EXPORT ShortcutEdit: public CLineEdit
|
||||
Q_OBJECT
|
||||
friend class Shortcuts;
|
||||
public:
|
||||
explicit ShortcutEdit(QWidget * parent = 0): CLineEdit(parent) {ti = 0; ca = 0; connect(this, SIGNAL(textChanged(QString)), this, SLOT(textChanged_(QString)));}
|
||||
explicit ShortcutEdit(QWidget *parent = nullptr);
|
||||
|
||||
void assignAction(QAction * a) {clear(); ca = a; reset();}
|
||||
QAction * action() const {return ca;}
|
||||
bool isEmpty() const {return text().isEmpty();}
|
||||
void commit() {if (ca == 0) return; ca->setShortcut(QKeySequence(text()));}
|
||||
void reset() {if (ca == 0) return; setText(ca->shortcut().toString());}
|
||||
void assignAction(QAction *a);
|
||||
QAction *action() const;
|
||||
bool isEmpty() const;
|
||||
void commit();
|
||||
void reset();
|
||||
|
||||
private slots:
|
||||
void textChanged_(QString t) {if (ti != 0) ti->setText(1, t);}
|
||||
void textChangedSlot(QString t);
|
||||
|
||||
private:
|
||||
void keyPressEvent(QKeyEvent * e);
|
||||
void keyPressEvent(QKeyEvent * e) override;
|
||||
|
||||
QAction * ca;
|
||||
QTreeWidgetItem * ti;
|
||||
|
||||
};
|
||||
|
||||
|
||||
class QAD_WIDGETS_EXPORT Shortcuts: public QTreeWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit Shortcuts(QWidget * parent = 0, bool on = true);
|
||||
~Shortcuts();
|
||||
explicit Shortcuts(QWidget * parent = nullptr, bool on = true);
|
||||
~Shortcuts() override;
|
||||
|
||||
void assignWindow(QWidget * w);
|
||||
void setActive(bool on) {active = on;}
|
||||
QList<QPair<QString, QKeySequence> > shortcuts();
|
||||
QStringList actionTree(QAction * a);
|
||||
static bool checkAction(QAction * a);
|
||||
QList<QPair<QString, QKeySequence> > shortcuts();
|
||||
|
||||
public slots:
|
||||
void clear();
|
||||
void updateShortcuts();
|
||||
void commit();
|
||||
void reset();
|
||||
void resetShortcuts();
|
||||
void filter(const QString & what);
|
||||
|
||||
private:
|
||||
virtual void updateEditorGeometries() {foreach (ShortcutEdit * i, edits) i->setGeometry(visualRect(indexFromItem(i->ti, 1)));}
|
||||
virtual void changeEvent(QEvent * );
|
||||
bool filterTree(QTreeWidgetItem * ti, QString f);
|
||||
virtual void updateEditorGeometries() override;
|
||||
virtual void changeEvent(QEvent *) override;
|
||||
bool filterTree(QTreeWidgetItem *ti, QString f);
|
||||
|
||||
QMainWindow * aw;
|
||||
QVector<ShortcutEdit * > edits;
|
||||
QVector<ShortcutEdit *> edits;
|
||||
QIcon empty_icon;
|
||||
QFont bfont;
|
||||
bool active;
|
||||
|
||||
private slots:
|
||||
|
||||
signals:
|
||||
void shortcutChanged(QAction * , QShortcut & );
|
||||
|
||||
};
|
||||
|
||||
#endif // SPINSLIDER_H
|
||||
|
||||
Reference in New Issue
Block a user