13 #include <QApplication>
15 #include <QHeaderView>
18 #include <QMessageBox>
53 mExpandedGroupIds.
clear();
54 mSelectedGroupIds.
clear();
55 mSelectedPinIds.
clear();
57 for (
int irow = 0; irow < mPortModel->
rowCount(); irow++)
63 mExpandedGroupIds.
insert(grp->id());
72 mSelectedGroupIds.
insert(item->
id());
85 for (
int irow = 0; irow < mPortModel->
rowCount(); irow++)
96 restored.
select(groupInx, groupInx);
101 for (
int prow = 0; prow < mPortModel->
rowCount(groupInx); prow++)
105 if (pin && mSelectedPinIds.
contains(pin->
id()))
106 restored.
select(pinInx, pinInx);
113 mExpandedGroupIds.
clear();
114 mSelectedGroupIds.
clear();
115 mSelectedPinIds.
clear();
126 mModuleID = moduleID;
161 std::pair<bool, int> sameGroup;
163 std::tie(selectedPins, sameGroup, onlyPins) = getSelectedPins();
164 int itemId = clickedItem->
id();
175 bool addToExistingActionPossible =
true;
184 if (addToExistingActionPossible)
186 menu.
addAction(
"Add selection to existing pin group", [selectedPins, mod]() {
192 if (pinGroup ==
nullptr)
194 for (
auto item : selectedPins)
199 pins.append(pin->get_id());
202 if (act) act->
exec();
211 if (pg ==
nullptr)
return;
227 if (pg ==
nullptr)
return;
239 if (act) act->
exec();
242 menu.
addAction(
"Toggle ascending/descending", [itemId, mod](){
244 if (act) act->
exec();
246 menu.
addAction(
"Autmatically rename pins", [itemId, mod](){
248 if (act) act->
exec();
250 menu.
addAction(
"Delete pin group", [itemId, mod]() {
251 auto* pinGroup = mod->get_pin_group_by_id(itemId);
252 if (pinGroup !=
nullptr)
255 if (act) act->
exec();
260 appendMultiSelectionEntries(menu, modId);
278 auto* pin = mod->get_pin_by_id(itemId);
289 auto* pin = mod->get_pin_by_id(itemId);
308 menu.
addAction(
"Set focus to pin", [
this, mod, itemId]() {
309 auto* pin = mod->get_pin_by_id(itemId);
314 for (
auto* testPin :
pins)
328 menu.
addAction(
"Add net to current selection", [
this, n]() {
332 menu.
addAction(
"Set net as current selection", [
this, n]() {
339 if (sameGroup.first && mod->get_pin_group_by_id(sameGroup.second)->size() > 1)
341 menu.
addAction(
"Remove selection from group", [selectedPins, mod ]() {
343 for (
auto item : selectedPins)
347 if (act) act->
exec();
353 appendMultiSelectionEntries(menu, modId);
365 void ModulePinsTree::handleNumberOfPortsChanged(
int newNumberPorts)
370 void ModulePinsTree::appendMultiSelectionEntries(
QMenu& menu,
int modId)
373 std::pair<bool, int> sameGroup;
375 std::tie(selectedPins, sameGroup, onlyPins) = getSelectedPins();
376 if (selectedPins.
size() > 1)
378 menu.
addAction(
"Add objects to new pin group", [selectedPins, modId]() {
379 InputDialog ipd(
"Pingroup name",
"New pingroup name",
"ExampleName");
384 for (
auto item : selectedPins)
386 auto* pin = mod->
get_pin_by_id(
static_cast<ModulePinsTreeItem*
>(item)->
id());
389 pins.append(pin->get_id());
393 if (act) act->exec();
399 std::tuple<QList<BaseTreeItem*>, std::pair<bool, int>,
bool> ModulePinsTree::getSelectedPins()
403 bool sameGroup =
true;
404 bool onlyPins =
true;
411 if (!alreadyProcessedPins.
contains(item))
413 selectedPins.
append(item);
414 alreadyProcessedPins.
insert(item);
420 for (
auto pinItem : item->getChildren())
422 if (!alreadyProcessedPins.
contains(pinItem))
424 selectedPins.
append(pinItem);
425 alreadyProcessedPins.
insert(pinItem);
434 auto* firstPin = mod->
get_pin_by_id(
static_cast<ModulePinsTreeItem*
>(selectedPins.
front())->id());
435 groupId = firstPin->
get_group().first->get_id();
436 for (
auto pinTreeItem : selectedPins)
438 auto pin = mod->get_pin_by_id(
static_cast<ModulePinsTreeItem*
>(pinTreeItem)->id());
439 if (groupId != (
int)pin->get_group().first->get_id())
445 groupId = sameGroup ? groupId : -1;
447 return std::make_tuple(selectedPins, std::make_pair(sameGroup, groupId), onlyPins);
static ActionPingroup * deletePinGroup(const Module *m, u32 grpId)
static ActionPingroup * addPinsToExistingGroup(const Module *m, u32 grpId, QList< u32 > pinIds, int pinRow=-1)
static ActionPingroup * automaticallyRenamePins(const Module *m, u32 grpId)
static ActionPingroup * toggleAscendingGroup(const Module *m, u32 grpId)
static ActionPingroup * addPinsToNewGroup(const Module *m, const QString &name, QList< u32 > pinIds, int grpRow=-1)
static ActionPingroup * removePinsFromGroup(const Module *m, QList< u32 > pinIds)
static ActionPingroup * changePinGroupType(const Module *m, u32 grpId, int ptype)
const std::pair< PinGroup< T > *, i32 > & get_group() const
virtual QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
BaseTreeItem * getItemFromIndex(QModelIndex index) const
virtual int rowCount(const QModelIndex &parent=QModelIndex()) const override
QString textValue() const
ModulePin * get_pin_by_id(const u32 id) const
void updateText(const QString &newHeadline)
void setModule(u32 moduleID)
void handlePinsAboutToReload()
void handlePinsReloaded()
void handleContextMenuRequested(const QPoint &pos)
int getRepresentedModuleId()
ModulePinsTree(QWidget *parent=nullptr)
QVariant getData(int column) const override
A model to represent the ports of a module.
static const int sDirectionColumn
static const int sNameColumn
static const int sTypeColumn
Net * getNetFromItem(ModulePinsTreeItem *item)
int getRepresentedModuleId()
void setModule(Module *m)
void numberOfPortsChanged(const int newNumber)
Module * get_module_by_id(u32 module_id) const
int getSelectedGroupId() const
static QString pyCodeModulePinGroup(u32 moduleId, u32 groupId)
static QString pyCodeModulePinById(u32 moduleId, u32 pinId)
void setFocus(ItemType ftype, u32 fid, Subfocus sfoc=Subfocus::None, u32 sfinx=0)
void relaySelectionChanged(void *sender)
virtual void setObject(const UserActionObject &obj)
The UserActionObject class represents a single object used in UserAction.
SelectionRelay * gSelectionRelay
std::vector< PinInformation > pins
void setDragDropMode(QAbstractItemView::DragDropMode behavior)
void setDragEnabled(bool enable)
void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior)
void setSelectionMode(QAbstractItemView::SelectionMode mode)
QItemSelectionModel * selectionModel() const const
void setDropIndicatorShown(bool enable)
void setText(const QString &text, QClipboard::Mode mode)
void select(const QModelIndex &topLeft, const QModelIndex &bottomRight)
virtual void select(const QModelIndex &index, QItemSelectionModel::SelectionFlags command)
QModelIndexList selectedRows(int column) const const
void append(const T &value)
bool isEmpty() const const
bool isValid() const const
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
bool contains(const T &value) const const
QSet::iterator insert(const T &value)
bool isEmpty() const const
QString fromStdString(const std::string &str)
bool isEmpty() const const
std::string toStdString() const const
virtual QModelIndex indexAt(const QPoint &point) const const override
bool isExpanded(const QModelIndex &index) const const
void setExpanded(const QModelIndex &index, bool expanded)
virtual void setModel(QAbstractItemModel *model) override
QString toString() const const