Implement character context menu
This commit is contained in:
@@ -1060,6 +1060,41 @@ void X26DockWidget::customMenuRequested(QPoint pos)
|
|||||||
connect(static_cast<TripletModeQMenu *>(customMenu)->action(m), &QAction::triggered, [=]() { cookedModeMenuSelected(m); });
|
connect(static_cast<TripletModeQMenu *>(customMenu)->action(m), &QAction::triggered, [=]() { cookedModeMenuSelected(m); });
|
||||||
|
|
||||||
customMenu->addSeparator();
|
customMenu->addSeparator();
|
||||||
|
} else if (index.isValid() && index.column() == 3) {
|
||||||
|
const int modeExt = index.model()->data(index.model()->index(index.row(), 2), Qt::EditRole).toInt();
|
||||||
|
|
||||||
|
switch (modeExt) {
|
||||||
|
case 0x21: // G1 mosaic character
|
||||||
|
case 0x22: // G3 mosaic character at level 1.5
|
||||||
|
case 0x2b: // G3 mosaic character at level >=2.5
|
||||||
|
case 0x29: // G0 character
|
||||||
|
case 0x2f: // G2 character
|
||||||
|
case 0x30:
|
||||||
|
case 0x31:
|
||||||
|
case 0x32:
|
||||||
|
case 0x33:
|
||||||
|
case 0x34:
|
||||||
|
case 0x35:
|
||||||
|
case 0x36:
|
||||||
|
case 0x37:
|
||||||
|
case 0x38:
|
||||||
|
case 0x39:
|
||||||
|
case 0x3a:
|
||||||
|
case 0x3b:
|
||||||
|
case 0x3c:
|
||||||
|
case 0x3d:
|
||||||
|
case 0x3e:
|
||||||
|
case 0x3f: // G0 character with diacritical
|
||||||
|
customMenu = new TripletCharacterQMenu(m_x26Model->data(index.model()->index(index.row(), 2), Qt::UserRole+2).toInt(), this);
|
||||||
|
|
||||||
|
for (int m=0; m<96; m++)
|
||||||
|
connect(static_cast<TripletCharacterQMenu *>(customMenu)->action(m), &QAction::triggered, [=]() { updateModelFromCookedWidget(m+32, Qt::UserRole+1); updateAllCookedTripletWidgets(index); });
|
||||||
|
|
||||||
|
customMenu->addSeparator();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
customMenu = new QMenu(this);
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
customMenu = new QMenu(this);
|
customMenu = new QMenu(this);
|
||||||
|
|
||||||
|
|||||||
16
x26menus.cpp
16
x26menus.cpp
@@ -19,9 +19,12 @@
|
|||||||
|
|
||||||
#include "x26menus.h"
|
#include "x26menus.h"
|
||||||
|
|
||||||
|
#include <QIcon>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
|
#include "render.h"
|
||||||
|
|
||||||
TripletModeQMenu::TripletModeQMenu(QWidget *parent): QMenu(parent)
|
TripletModeQMenu::TripletModeQMenu(QWidget *parent): QMenu(parent)
|
||||||
{
|
{
|
||||||
addModeAction(this, 0x04);
|
addModeAction(this, 0x04);
|
||||||
@@ -96,3 +99,16 @@ void TripletModeQMenu::addModeAction(QMenu *menu, int mode)
|
|||||||
{
|
{
|
||||||
m_actions[mode] = menu->addAction(m_modeTripletNames.modeName(mode));
|
m_actions[mode] = menu->addAction(m_modeTripletNames.modeName(mode));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TripletCharacterQMenu::TripletCharacterQMenu(int charSet, QWidget *parent): QMenu(parent)
|
||||||
|
{
|
||||||
|
QMenu *charRange[6];
|
||||||
|
|
||||||
|
for (int r=0; r<6; r++) {
|
||||||
|
charRange[r] = this->addMenu(QString("0x%010-0x%01f").arg(r+2));
|
||||||
|
|
||||||
|
for (int c=0; c<16; c++)
|
||||||
|
m_actions[r*16+c] = charRange[r]->addAction(QIcon(m_fontBitmap.charBitmap(r*16+c+32, charSet)), QString("0x%1").arg(r*16+c+32, 2, 16, QChar('0')));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
15
x26menus.h
15
x26menus.h
@@ -23,6 +23,8 @@
|
|||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
|
#include "render.h"
|
||||||
|
|
||||||
class ModeTripletNames
|
class ModeTripletNames
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -126,4 +128,17 @@ private:
|
|||||||
ModeTripletNames m_modeTripletNames;
|
ModeTripletNames m_modeTripletNames;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class TripletCharacterQMenu : public QMenu
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
TripletCharacterQMenu(int charSet, QWidget *parent = nullptr);
|
||||||
|
QAction *action(int n) const { return m_actions[n]; };
|
||||||
|
|
||||||
|
private:
|
||||||
|
QAction *m_actions[96];
|
||||||
|
TeletextFontBitmap m_fontBitmap;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user