Add insert options to context menu
This commit is contained in:
@@ -978,12 +978,21 @@ void X26DockWidget::updateModelFromCookedWidget(const int value, const int role)
|
|||||||
void X26DockWidget::insertTriplet(int modeExt, bool after)
|
void X26DockWidget::insertTriplet(int modeExt, bool after)
|
||||||
{
|
{
|
||||||
QModelIndex index = m_x26View->currentIndex();
|
QModelIndex index = m_x26View->currentIndex();
|
||||||
|
|
||||||
|
if (index.isValid())
|
||||||
|
insertTriplet(modeExt, index.row()+after);
|
||||||
|
else
|
||||||
|
insertTriplet(modeExt);
|
||||||
|
}
|
||||||
|
|
||||||
|
void X26DockWidget::insertTriplet(int modeExt, int row)
|
||||||
|
{
|
||||||
X26Triplet newTriplet(modeExt < 0x20 ? 41 : 0, modeExt & 0x1f, 0);
|
X26Triplet newTriplet(modeExt < 0x20 ? 41 : 0, modeExt & 0x1f, 0);
|
||||||
int newListRow;
|
|
||||||
|
if (row != -1) {
|
||||||
|
QModelIndex index = m_x26View->currentIndex();
|
||||||
|
|
||||||
if (index.isValid()) {
|
if (index.isValid()) {
|
||||||
newListRow = index.row()+after;
|
|
||||||
|
|
||||||
// If we're inserting a column triplet next to another column triplet,
|
// If we're inserting a column triplet next to another column triplet,
|
||||||
// duplicate the column number
|
// duplicate the column number
|
||||||
// Avoid the PDC and reserved mode triplets
|
// Avoid the PDC and reserved mode triplets
|
||||||
@@ -996,7 +1005,7 @@ void X26DockWidget::insertTriplet(int modeExt, bool after)
|
|||||||
// If we're inserting a Set Active Position or Full Row Colour triplet,
|
// If we're inserting a Set Active Position or Full Row Colour triplet,
|
||||||
// look for a previous row setting triplet and set this one to the row after
|
// look for a previous row setting triplet and set this one to the row after
|
||||||
if (modeExt == 0x04 || modeExt == 0x01) {
|
if (modeExt == 0x04 || modeExt == 0x01) {
|
||||||
for (int i=newListRow-1; i>=0; i--) {
|
for (int i=row-1; i>=0; i--) {
|
||||||
const int scanTripletModeExt = index.model()->data(index.model()->index(i, 2), Qt::EditRole).toInt();
|
const int scanTripletModeExt = index.model()->data(index.model()->index(i, 2), Qt::EditRole).toInt();
|
||||||
|
|
||||||
if (scanTripletModeExt == 0x04 || scanTripletModeExt == 0x01) {
|
if (scanTripletModeExt == 0x04 || scanTripletModeExt == 0x01) {
|
||||||
@@ -1011,8 +1020,9 @@ void X26DockWidget::insertTriplet(int modeExt, bool after)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
newListRow = 0;
|
row = 0;
|
||||||
|
|
||||||
// For character triplets, ensure Data is not reserved
|
// For character triplets, ensure Data is not reserved
|
||||||
if (modeExt == 0x21 || modeExt == 0x22 || modeExt == 0x29 || modeExt == 0x2b || modeExt >= 0x2f)
|
if (modeExt == 0x21 || modeExt == 0x22 || modeExt == 0x29 || modeExt == 0x2b || modeExt >= 0x2f)
|
||||||
@@ -1026,7 +1036,7 @@ void X26DockWidget::insertTriplet(int modeExt, bool after)
|
|||||||
newTriplet.setData(7);
|
newTriplet.setData(7);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_x26Model->insertRows(newListRow, 1, QModelIndex(), newTriplet);
|
m_x26Model->insertRows(row, 1, QModelIndex(), newTriplet);
|
||||||
}
|
}
|
||||||
|
|
||||||
void X26DockWidget::insertTripletCopy()
|
void X26DockWidget::insertTripletCopy()
|
||||||
@@ -1110,23 +1120,41 @@ void X26DockWidget::customMenuRequested(QPoint pos)
|
|||||||
|
|
||||||
TripletModeQMenu *modeChangeMenu = new TripletModeQMenu(this);
|
TripletModeQMenu *modeChangeMenu = new TripletModeQMenu(this);
|
||||||
modeChangeMenu->setTitle(tr("Change mode"));
|
modeChangeMenu->setTitle(tr("Change mode"));
|
||||||
|
|
||||||
customMenu->addMenu(modeChangeMenu);
|
customMenu->addMenu(modeChangeMenu);
|
||||||
|
|
||||||
for (int m=0; m<64; m++)
|
|
||||||
connect(static_cast<TripletModeQMenu *>(modeChangeMenu)->action(m), &QAction::triggered, [=]() { cookedModeMenuSelected(m); });
|
|
||||||
|
|
||||||
customMenu->addSeparator();
|
customMenu->addSeparator();
|
||||||
} else
|
|
||||||
customMenu = new QMenu(this);
|
|
||||||
|
|
||||||
QAction *insertAct = new QAction("Insert triplet copy", this);
|
TripletModeQMenu *insertBeforeQMenu = new TripletModeQMenu(this);
|
||||||
customMenu->addAction(insertAct);
|
insertBeforeQMenu->setTitle(tr("Insert before"));
|
||||||
connect(insertAct, &QAction::triggered, this, &X26DockWidget::insertTripletCopy);
|
customMenu->addMenu(insertBeforeQMenu);
|
||||||
if (index.isValid()) {
|
|
||||||
|
TripletModeQMenu *insertAfterQMenu = new TripletModeQMenu(this);
|
||||||
|
insertAfterQMenu->setTitle(tr("Insert after"));
|
||||||
|
customMenu->addMenu(insertAfterQMenu);
|
||||||
|
|
||||||
|
for (int m=0; m<64; m++) {
|
||||||
|
connect(static_cast<TripletModeQMenu *>(modeChangeMenu)->action(m), &QAction::triggered, [=]() { cookedModeMenuSelected(m); });
|
||||||
|
connect(static_cast<TripletModeQMenu *>(insertBeforeQMenu)->action(m), &QAction::triggered, [=]() { insertTriplet(m, false); });
|
||||||
|
connect(static_cast<TripletModeQMenu *>(insertAfterQMenu)->action(m), &QAction::triggered, [=]() { insertTriplet(m, true); });
|
||||||
|
}
|
||||||
|
|
||||||
|
QAction *insertCopyAct = new QAction(tr("Insert copy"), this);
|
||||||
|
customMenu->addAction(insertCopyAct);
|
||||||
|
connect(insertCopyAct, &QAction::triggered, this, &X26DockWidget::insertTripletCopy);
|
||||||
|
|
||||||
QAction *deleteAct = new QAction("Delete triplet", this);
|
QAction *deleteAct = new QAction("Delete triplet", this);
|
||||||
customMenu->addAction(deleteAct);
|
customMenu->addAction(deleteAct);
|
||||||
connect(deleteAct, &QAction::triggered, this, &X26DockWidget::deleteTriplet);
|
connect(deleteAct, &QAction::triggered, this, &X26DockWidget::deleteTriplet);
|
||||||
|
} else {
|
||||||
|
customMenu = new QMenu(this);
|
||||||
|
|
||||||
|
TripletModeQMenu *appendModeMenu = new TripletModeQMenu(this);
|
||||||
|
appendModeMenu->setTitle(tr("Append"));
|
||||||
|
customMenu->addMenu(appendModeMenu);
|
||||||
|
|
||||||
|
for (int m=0; m<64; m++)
|
||||||
|
connect(static_cast<TripletModeQMenu *>(appendModeMenu)->action(m), &QAction::triggered, [=]() { insertTriplet(m, m_x26Model->rowCount()); });
|
||||||
}
|
}
|
||||||
|
|
||||||
customMenu->popup(m_x26View->viewport()->mapToGlobal(pos));
|
customMenu->popup(m_x26View->viewport()->mapToGlobal(pos));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ public:
|
|||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void insertTriplet(int modeExt, bool after);
|
void insertTriplet(int modeExt, bool after);
|
||||||
|
void insertTriplet(int modeExt, int row = -1);
|
||||||
void insertTripletCopy();
|
void insertTripletCopy();
|
||||||
void deleteTriplet();
|
void deleteTriplet();
|
||||||
void customMenuRequested(QPoint pos);
|
void customMenuRequested(QPoint pos);
|
||||||
|
|||||||
Reference in New Issue
Block a user