add StateIcon

This commit is contained in:
2024-03-24 22:38:52 +03:00
parent 47420cf19a
commit 592c17e1c7
8 changed files with 598 additions and 1 deletions

View File

@@ -0,0 +1,177 @@
#include "stateiconplugin.h"
#include "ui_stateiconmenuextension.h"
#include <QAction>
#include <QDesignerFormEditorInterface>
#include <QDesignerFormWindowCursorInterface>
#include <QDesignerFormWindowInterface>
#include <QExtensionManager>
#include <QtCore/QtPlugin>
#include <private/qtresourceview_p.h>
enum Column {
cState,
cText,
cIcon
};
StateIconMenuExtension::StateIconMenuExtension(StateIcon * widget_, QObject *): QDialog(), ui(new Ui::StateIconMenuExtension) {
ui->setupUi(this);
widget = widget_;
icon_command = QIcon(":/icons/code-function.png");
action_default = new QAction("Edit states ...", this);
connect(action_default, SIGNAL(triggered(bool)), this, SLOT(action_default_triggered()));
}
StateIconMenuExtension::~StateIconMenuExtension() {
delete ui;
}
QAction * StateIconMenuExtension::preferredEditAction() const {
return action_default;
}
QList<QAction *> StateIconMenuExtension::taskActions() const {
return {action_default};
}
void StateIconMenuExtension::accept() {
widget->clearStates();
for (int i = 0; i < ui->tree->topLevelItemCount(); ++i) {
QTreeWidgetItem * ti = ui->tree->topLevelItem(i);
widget->addState(ti->text(cState).toInt(), ti->text(cText), ti->text(cIcon));
}
QDesignerFormWindowInterface * formWindow = QDesignerFormWindowInterface::findFormWindow(widget);
if (formWindow) {
formWindow->cursor()->setProperty("rawStates", widget->saveStates());
}
QDialog::accept();
}
void StateIconMenuExtension::on_buttonAdd_clicked() {
auto ti = new QTreeWidgetItem({"0"});
ti->setFlags(ti->flags() | Qt::ItemIsEditable);
ui->tree->addTopLevelItem(ti);
ui->tree->editItem(ti, cState);
}
void StateIconMenuExtension::on_buttonDel_clicked() {
qDeleteAll(ui->tree->selectedItems());
}
void StateIconMenuExtension::on_tree_itemClicked(QTreeWidgetItem * item, int column) {
if (!item) return;
Qt::ItemFlags f = item->flags();
f.setFlag(Qt::ItemIsEditable, column != cIcon);
item->setFlags(f);
}
void StateIconMenuExtension::on_tree_itemDoubleClicked(QTreeWidgetItem * item, int column) {
if (!item || column != cIcon) return;
QDesignerFormWindowInterface * formWindow = QDesignerFormWindowInterface::findFormWindow(widget);
if (formWindow) {
QtResourceViewDialog dlg(formWindow->core());
dlg.selectResource(item->text(cIcon));
if (dlg.exec() == QDialog::Accepted) {
QString ni = dlg.selectedResource();
item->setText(cIcon, ni);
item->setIcon(cIcon, QIcon(ni));
}
}
}
void StateIconMenuExtension::action_default_triggered() {
ui->tree->clear();
auto states = widget->allStates();
for (auto s: states) {
QTreeWidgetItem * ti = new QTreeWidgetItem();
ti->setText(cState, QString::number(s));
ti->setText(cText, widget->stateText(s));
ti->setText(cIcon, widget->stateIcon(s));
ti->setIcon(cIcon, QIcon(widget->stateIcon(s)));
ui->tree->addTopLevelItem(ti);
}
exec();
}
QObject * StateIconTaskMenuFactory::createExtension(QObject * object, const QString & iid, QObject * parent) const {
if (iid != Q_TYPEID(QDesignerTaskMenuExtension)) return 0;
if (StateIcon * w = qobject_cast<StateIcon *>(object)) return new StateIconMenuExtension(w, parent);
return nullptr;
}
StateIconPlugin::StateIconPlugin(QObject * parent): QObject(parent) {
m_initialized = false;
}
void StateIconPlugin::initialize(QDesignerFormEditorInterface * core) {
if (m_initialized) return;
QExtensionManager * manager = core->extensionManager();
Q_ASSERT(manager != 0);
manager->registerExtensions(new StateIconTaskMenuFactory(manager), Q_TYPEID(QDesignerTaskMenuExtension));
m_initialized = true;
}
bool StateIconPlugin::isInitialized() const {
return m_initialized;
}
QWidget * StateIconPlugin::createWidget(QWidget * parent) {
return new StateIcon(parent);
}
QString StateIconPlugin::name() const {
return QLatin1String("StateIcon");
}
QString StateIconPlugin::group() const {
return QLatin1String("Display Widgets");
}
QIcon StateIconPlugin::icon() const {
return QIcon(":/icons/led_on.png");
}
QString StateIconPlugin::toolTip() const {
return QLatin1String("StateIcon");
}
QString StateIconPlugin::whatsThis() const {
return QLatin1String("StateIcon");
}
bool StateIconPlugin::isContainer() const {
return false;
}
QString StateIconPlugin::domXml() const {
return QLatin1String("<widget class=\"StateIcon\" name=\"stateIcon\">\n</widget>\n");
}
QString StateIconPlugin::includeFile() const {
return QLatin1String("stateicon.h");
}