更新一下
This commit is contained in:
parent
c06bb2c6b1
commit
14b29b9ebc
|
@ -20,6 +20,8 @@ QMenu *BadPlugin::registerMenu() { return nullptr; }
|
|||
|
||||
QDockWidget *BadPlugin::registerDockWidget() { return nullptr; }
|
||||
|
||||
QToolButton *BadPlugin::registerToolButton() { return nullptr; }
|
||||
|
||||
QString BadPlugin::pluginName() { return "BadPlugin"; }
|
||||
|
||||
QString BadPlugin::pluginAuthor() { return "wingsummer"; }
|
||||
|
|
|
@ -20,6 +20,7 @@ public:
|
|||
~BadPlugin() override;
|
||||
void unload() override;
|
||||
QMenu *registerMenu() override;
|
||||
QToolButton *registerToolButton() override;
|
||||
QDockWidget *registerDockWidget() override;
|
||||
QString pluginName() override;
|
||||
QString pluginAuthor() override;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#include <QMessageBox>
|
||||
#include <QStringList>
|
||||
|
||||
TestPlugin::TestPlugin(QObject *parent){Q_UNUSED(parent)}
|
||||
TestPlugin::TestPlugin(QObject *parent) { Q_UNUSED(parent) }
|
||||
|
||||
TestPlugin::~TestPlugin() {}
|
||||
|
||||
|
@ -72,6 +72,8 @@ QMenu *TestPlugin::registerMenu() { return testmenu; }
|
|||
|
||||
QDockWidget *TestPlugin::registerDockWidget() { return dw; }
|
||||
|
||||
QToolButton *TestPlugin::registerToolButton() { return nullptr; }
|
||||
|
||||
Qt::DockWidgetArea TestPlugin::registerDockWidgetDockArea() {
|
||||
return Qt::DockWidgetArea::LeftDockWidgetArea;
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ public:
|
|||
~TestPlugin() override;
|
||||
void unload() override;
|
||||
QMenu *registerMenu() override;
|
||||
QToolButton *registerToolButton() override;
|
||||
QDockWidget *registerDockWidget() override;
|
||||
QString pluginName() override;
|
||||
QString pluginAuthor() override;
|
||||
|
|
|
@ -608,29 +608,27 @@ bool QHexDocument::saveTo(QIODevice *device, bool cleanUndo) {
|
|||
return true;
|
||||
}
|
||||
|
||||
qint64 QHexDocument::searchForward(const QByteArray &ba) {
|
||||
qint64 startPos = m_cursor->position().offset();
|
||||
qint64 findPos = m_buffer->indexOf(ba, startPos);
|
||||
if (findPos > -1) {
|
||||
m_cursor->clearSelection();
|
||||
m_cursor->moveTo(findPos);
|
||||
m_cursor->select(ba.length());
|
||||
qint64 QHexDocument::searchForward(qint64 begin, const QByteArray &ba) {
|
||||
qint64 startPos;
|
||||
if (begin < 0) {
|
||||
startPos = m_cursor->position().offset();
|
||||
} else {
|
||||
startPos = begin;
|
||||
}
|
||||
return findPos;
|
||||
return m_buffer->indexOf(ba, startPos);
|
||||
}
|
||||
|
||||
qint64 QHexDocument::searchBackward(const QByteArray &ba) {
|
||||
qint64 startPos = m_cursor->position().offset() - 1;
|
||||
if (m_cursor->hasSelection()) {
|
||||
startPos = m_cursor->selectionStart().offset() - 1;
|
||||
qint64 QHexDocument::searchBackward(qint64 begin, const QByteArray &ba) {
|
||||
qint64 startPos;
|
||||
if (begin < 0) {
|
||||
startPos = m_cursor->position().offset() - 1;
|
||||
if (m_cursor->hasSelection()) {
|
||||
startPos = m_cursor->selectionStart().offset() - 1;
|
||||
}
|
||||
} else {
|
||||
startPos = begin;
|
||||
}
|
||||
qint64 findPos = m_buffer->lastIndexOf(ba, startPos);
|
||||
if (findPos > -1) {
|
||||
m_cursor->clearSelection();
|
||||
m_cursor->moveTo(findPos);
|
||||
m_cursor->select(ba.length());
|
||||
}
|
||||
return findPos;
|
||||
return m_buffer->lastIndexOf(ba, startPos);
|
||||
}
|
||||
|
||||
QHexDocument *QHexDocument::fromLargeFile(QString filename, bool readonly,
|
||||
|
|
|
@ -123,12 +123,14 @@ public slots:
|
|||
QByteArray read(qint64 offset, int len) const;
|
||||
bool saveTo(QIODevice *device, bool cleanUndo);
|
||||
|
||||
qint64 searchForward(const QByteArray &ba);
|
||||
qint64 searchBackward(const QByteArray &ba);
|
||||
// qint64 searchForward(const QByteArray &ba);
|
||||
// qint64 searchBackward(const QByteArray &ba);
|
||||
|
||||
/*================================*/
|
||||
// added by wingsummer
|
||||
|
||||
qint64 searchForward(qint64 begin, const QByteArray &ba);
|
||||
qint64 searchBackward(qint64 begin, const QByteArray &ba);
|
||||
bool cut(bool hex = false);
|
||||
void paste(bool hex = false);
|
||||
bool insert(qint64 offset, uchar b);
|
||||
|
|
|
@ -170,6 +170,8 @@ void QHexView::establishSignal(QHexDocument *doc) {
|
|||
QHexView::metaCommentVisibleChanged(b);
|
||||
emit this->metaStatusChanged();
|
||||
});
|
||||
connect(doc, &QHexDocument::metaLineChanged, this,
|
||||
[=] { this->viewport()->update(); });
|
||||
}
|
||||
|
||||
/*======================*/
|
||||
|
|
|
@ -593,6 +593,7 @@ MainWindow::MainWindow(DMainWindow *parent) {
|
|||
toolbar->addSeparator();
|
||||
AddToolBarTool("general", MainWindow::on_setting_general, tr("General"));
|
||||
AddToolBarTool("soft", MainWindow::on_about, tr("About"));
|
||||
toolbar->addSeparator();
|
||||
this->addToolBar(toolbar);
|
||||
|
||||
status = new DStatusBar(this);
|
||||
|
@ -1027,6 +1028,8 @@ MainWindow::MainWindow(DMainWindow *parent) {
|
|||
&MainWindow::PluginMenuNeedAdd);
|
||||
connect(plgsys, &PluginSystem::PluginDockWidgetAdd, this,
|
||||
&MainWindow::PluginDockWidgetAdd);
|
||||
connect(plgsys, &PluginSystem::PluginToolButtonAdd, this,
|
||||
&MainWindow::PluginToolButtonAdd);
|
||||
plgsys->LoadPlugin();
|
||||
} else {
|
||||
plgmenu->setEnabled(false);
|
||||
|
@ -1077,6 +1080,11 @@ void MainWindow::PluginDockWidgetAdd(QDockWidget *dockw,
|
|||
}
|
||||
}
|
||||
|
||||
void MainWindow::PluginToolButtonAdd(QToolButton *btn) {
|
||||
if (btn)
|
||||
toolbar->addWidget(btn);
|
||||
}
|
||||
|
||||
void MainWindow::connectBase(IWingPlugin *plugin) {
|
||||
if (plugin == nullptr)
|
||||
return;
|
||||
|
@ -1113,7 +1121,13 @@ void MainWindow::connectBase(IWingPlugin *plugin) {
|
|||
} \
|
||||
return F;
|
||||
|
||||
ConnectBaseLamba2(WingPlugin::Reader::currentDoc, [=] { return _pcurfile; });
|
||||
ConnectBaseLamba2(WingPlugin::Reader::currentDoc,
|
||||
[=] { PCHECKRETURN(_pcurfile, _currentfile, -1) });
|
||||
ConnectBaseLamba2(WingPlugin::Reader::currentDocFilename, [=] {
|
||||
PCHECKRETURN(hexfiles[_pcurfile].filename, hexfiles[_currentfile].filename,
|
||||
QString());
|
||||
});
|
||||
|
||||
ConnectBaseLamba2(WingPlugin::Reader::isLocked, [=] {
|
||||
PCHECKRETURN(hexfiles[_pcurfile].doc->isLocked(),
|
||||
hexeditor->document()->isLocked(), true);
|
||||
|
@ -1277,16 +1291,20 @@ void MainWindow::connectBase(IWingPlugin *plugin) {
|
|||
hexeditor->document()->findAllBytes(
|
||||
begin, end, b, results, maxCount), );
|
||||
});
|
||||
ConnectBaseLamba2(
|
||||
WingPlugin::Reader::searchForward, [=](const QByteArray &ba) {
|
||||
PCHECKRETURN(hexfiles[_pcurfile].doc->searchForward(ba),
|
||||
hexeditor->document()->searchForward(ba), qint64(-1));
|
||||
});
|
||||
ConnectBaseLamba2(
|
||||
WingPlugin::Reader::searchBackward, [=](const QByteArray &ba) {
|
||||
PCHECKRETURN(hexfiles[_pcurfile].doc->searchBackward(ba),
|
||||
hexeditor->document()->searchBackward(ba), qint64(-1));
|
||||
});
|
||||
ConnectBaseLamba2(WingPlugin::Reader::searchForward,
|
||||
[=](qint64 begin, const QByteArray &ba) {
|
||||
PCHECKRETURN(
|
||||
hexfiles[_pcurfile].doc->searchForward(begin, ba),
|
||||
hexeditor->document()->searchForward(begin, ba),
|
||||
qint64(-1));
|
||||
});
|
||||
ConnectBaseLamba2(WingPlugin::Reader::searchBackward,
|
||||
[=](qint64 begin, const QByteArray &ba) {
|
||||
PCHECKRETURN(
|
||||
hexfiles[_pcurfile].doc->searchBackward(begin, ba),
|
||||
hexeditor->document()->searchBackward(begin, ba),
|
||||
qint64(-1));
|
||||
});
|
||||
ConnectBaseLamba2(WingPlugin::Reader::getMetaLine, [=](quint64 line) {
|
||||
auto ometas = hexfiles[_pcurfile].doc->metadata()->get(line);
|
||||
HexLineMetadata metas;
|
||||
|
@ -1949,11 +1967,18 @@ void MainWindow::connectControl(IWingPlugin *plugin) {
|
|||
plgsys->resetTimeout(qobject_cast<IWingPlugin *>(sender()));
|
||||
on_fillnop();
|
||||
});
|
||||
ConnectControlLamba2(
|
||||
WingPlugin::Controller::toast, [=](QIcon icon, QString message) {
|
||||
plgsys->resetTimeout(qobject_cast<IWingPlugin *>(sender()));
|
||||
DMessageManager::instance()->sendMessage(this, icon, message);
|
||||
});
|
||||
}
|
||||
|
||||
bool MainWindow::requestControl(int timeout) {
|
||||
auto s = qobject_cast<IWingPlugin *>(sender());
|
||||
return plgsys->requestControl(s, timeout);
|
||||
auto res = plgsys->requestControl(s, timeout);
|
||||
_pcurfile = _currentfile;
|
||||
return res;
|
||||
}
|
||||
|
||||
bool MainWindow::requestRelease() {
|
||||
|
|
|
@ -232,6 +232,7 @@ private:
|
|||
private:
|
||||
void PluginMenuNeedAdd(QMenu *menu);
|
||||
void PluginDockWidgetAdd(QDockWidget *dockw, Qt::DockWidgetArea align);
|
||||
void PluginToolButtonAdd(QToolButton *btn);
|
||||
void connectBase(IWingPlugin *plugin);
|
||||
void connectControl(IWingPlugin *plugin);
|
||||
// shadow
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#include <QList>
|
||||
#include <QMenu>
|
||||
#include <QObject>
|
||||
#include <QToolButton>
|
||||
#include <QWidget>
|
||||
#include <QtCore>
|
||||
|
||||
|
@ -145,6 +146,7 @@ class Reader : public QObject {
|
|||
Q_OBJECT
|
||||
signals:
|
||||
int currentDoc();
|
||||
QString currentDocFilename();
|
||||
|
||||
// document
|
||||
bool isReadOnly();
|
||||
|
@ -174,8 +176,8 @@ signals:
|
|||
|
||||
void copy(bool hex = false);
|
||||
QByteArray read(qint64 offset, int len);
|
||||
qint64 searchForward(const QByteArray &ba);
|
||||
qint64 searchBackward(const QByteArray &ba);
|
||||
qint64 searchForward(qint64 begin, const QByteArray &ba);
|
||||
qint64 searchBackward(qint64 begin, const QByteArray &ba);
|
||||
void findAllBytes(qlonglong begin, qlonglong end, QByteArray b,
|
||||
QList<quint64> &results, int maxCount = -1);
|
||||
|
||||
|
@ -291,6 +293,7 @@ signals:
|
|||
// workspace
|
||||
bool openWorkSpace(QString filename, bool readonly = false);
|
||||
bool setCurrentEncoding(QString encoding);
|
||||
void toast(QIcon icon, QString message);
|
||||
};
|
||||
} // namespace WingPlugin
|
||||
|
||||
|
@ -309,6 +312,7 @@ public:
|
|||
virtual ~IWingPlugin() {}
|
||||
virtual void unload() = 0;
|
||||
virtual QMenu *registerMenu() = 0;
|
||||
virtual QToolButton *registerToolButton() = 0;
|
||||
virtual QDockWidget *registerDockWidget() = 0;
|
||||
virtual Qt::DockWidgetArea registerDockWidgetDockArea() = 0;
|
||||
virtual QString pluginName() = 0;
|
||||
|
@ -335,13 +339,20 @@ public:
|
|||
};
|
||||
|
||||
#define WINGSUMMER "wingsummer"
|
||||
|
||||
#define PluginToolButtonInit(tbtn, menu, icon) \
|
||||
tbtn = new QToolButton; \
|
||||
tbtn->setMenu(menu); \
|
||||
tbtn->setIcon(icon); \
|
||||
tbtn->setPopupMode(QToolButton::ToolButtonPopupMode::InstantPopup);
|
||||
|
||||
#define PluginDockWidgetInit(dw, widget, title, objname) \
|
||||
dw = new QDockWidget; \
|
||||
dw->setWidget(widget); \
|
||||
dw->setWindowTitle(title); \
|
||||
dw->setObjectName(objname);
|
||||
|
||||
#define PluginWidgetFree(w) w->deleteLater();
|
||||
#define PluginWidgetFree(w) w->deleteLater()
|
||||
|
||||
#define PluginMenuInitBegin(menu, title) \
|
||||
menu = new QMenu; \
|
||||
|
@ -369,6 +380,20 @@ public:
|
|||
connect(a, &QAction::triggered, this, lamba); \
|
||||
menu->addAction(a);
|
||||
|
||||
#define PluginMenuAddItemCheckAction(menu, title, checked, slot) \
|
||||
a = new QAction(icon, title, this); \
|
||||
a->setCheckable(true); \
|
||||
a->setChecked(checked); \
|
||||
connect(a, &QAction::triggered, this, &slot); \
|
||||
menu->addAction(a);
|
||||
|
||||
#define PluginMenuAddItemCheckLamba(menu, title, checked, lamba) \
|
||||
a = new QAction(title, this); \
|
||||
a->setCheckable(true); \
|
||||
a->setChecked(checked); \
|
||||
connect(a, &QAction::triggered, this, lamba); \
|
||||
menu->addAction(a);
|
||||
|
||||
#define PluginMenuInitEnd() }
|
||||
|
||||
#define USINGCONTROL(Segment) \
|
||||
|
|
|
@ -97,6 +97,11 @@ void PluginSystem::loadPlugin(QFileInfo fileinfo) {
|
|||
emit this->PluginMenuNeedAdd(menu);
|
||||
}
|
||||
|
||||
auto tbtn = p->registerToolButton();
|
||||
if (tbtn) {
|
||||
emit this->PluginToolButtonAdd(tbtn);
|
||||
}
|
||||
|
||||
auto dockw = p->registerDockWidget();
|
||||
if (dockw) {
|
||||
emit this->PluginDockWidgetAdd(dockw, p->registerDockWidgetDockArea());
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include <QObject>
|
||||
#include <QTimer>
|
||||
#include <QTimerEvent>
|
||||
#include <QToolButton>
|
||||
#include <QVariant>
|
||||
|
||||
class PluginSystem : public QObject {
|
||||
|
@ -38,6 +39,7 @@ private:
|
|||
signals:
|
||||
void PluginMenuNeedAdd(QMenu *menu);
|
||||
void PluginDockWidgetAdd(QDockWidget *dockw, Qt::DockWidgetArea align);
|
||||
void PluginToolButtonAdd(QToolButton *btn);
|
||||
void ConnectBase(IWingPlugin *plugin);
|
||||
void ConnectControl(IWingPlugin *plugin);
|
||||
void DisconnectControl(IWingPlugin *plugin);
|
||||
|
|
Loading…
Reference in New Issue