21 #include <QApplication>
23 #include <QHeaderView>
26 #include <QMessageBox>
97 std::pair<bool, int> sameGroup;
99 std::tie(selectedPins, sameGroup, onlyPins) = getSelectedPins();
100 int itemId = clickedItem->
id();
111 bool addToExistingActionPossible =
true;
120 if (addToExistingActionPossible)
122 menu.
addAction(
"Add selection to existing pin group", [selectedPins, mod]() {
128 if (pinGroup ==
nullptr)
130 for (
auto item : selectedPins)
132 auto* pin = mod->get_pin_by_id(
static_cast<PortTreeItem*
>(item)->
id());
135 pins.append(pin->get_id());
138 if (act) act->
exec();
152 if (group !=
nullptr)
160 menu.
addAction(
"Delete pin group", [itemId, mod]() {
161 auto* pinGroup = mod->get_pin_group_by_id(itemId);
162 if (pinGroup !=
nullptr)
165 if (act) act->
exec();
170 appendMultiSelectionEntries(menu, modId);
188 auto* pin = mod->get_pin_by_id(itemId);
199 auto* pin = mod->get_pin_by_id(itemId);
218 menu.
addAction(
"Add net to current selection", [
this,
n]() {
222 menu.
addAction(
"Set net as current selection", [
this,
n]() {
229 if (sameGroup.first && mod->get_pin_group_by_id(sameGroup.second)->size() > 1)
231 menu.
addAction(
"Remove selection from group", [selectedPins, mod ]() {
233 for (
auto item : selectedPins)
237 if (act) act->
exec();
243 appendMultiSelectionEntries(menu, modId);
255 void ModulePinsTree::handleNumberOfPortsChanged(
int newNumberPorts)
260 void ModulePinsTree::appendMultiSelectionEntries(
QMenu& menu,
int modId)
263 std::pair<bool, int> sameGroup;
265 std::tie(selectedPins, sameGroup, onlyPins) = getSelectedPins();
266 if (selectedPins.
size() > 1)
268 menu.
addAction(
"Add objects to new pin group", [selectedPins, modId]() {
269 InputDialog ipd(
"Pingroup name",
"New pingroup name",
"ExampleName");
274 for (
auto item : selectedPins)
276 auto* pin = mod->
get_pin_by_id(
static_cast<PortTreeItem*
>(item)->
id());
279 pins.append(pin->get_id());
283 if (act) act->exec();
289 std::tuple<QList<BaseTreeItem*>, std::pair<bool, int>,
bool> ModulePinsTree::getSelectedPins()
293 bool sameGroup =
true;
294 bool onlyPins =
true;
298 PortTreeItem* item =
static_cast<PortTreeItem*
>(mPortModel->
getItemFromIndex(index));
301 if (!alreadyProcessedPins.
contains(item))
303 selectedPins.
append(item);
304 alreadyProcessedPins.
insert(item);
310 for (
auto pinItem : item->getChildren())
312 if (!alreadyProcessedPins.
contains(pinItem))
314 selectedPins.
append(pinItem);
315 alreadyProcessedPins.
insert(pinItem);
324 auto* firstPin = mod->
get_pin_by_id(
static_cast<PortTreeItem*
>(selectedPins.
front())->id());
325 groupId = firstPin->
get_group().first->get_id();
326 for (
auto pinTreeItem : selectedPins)
328 auto pin = mod->get_pin_by_id(
static_cast<PortTreeItem*
>(pinTreeItem)->id());
329 if (groupId != (
int)pin->get_group().first->get_id())
335 groupId = sameGroup ? groupId : -1;
337 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 * addPinsToNewGroup(const Module *m, const QString &name, QList< u32 > pinIds, int grpRow=-1)
static ActionPingroup * removePinsFromGroup(const Module *m, QList< u32 > pinIds)
const std::pair< PinGroup< T > *, i32 > & get_group() const
BaseTreeItem * getItemFromIndex(QModelIndex index) const
QString textValue() const
ModulePin * get_pin_by_id(const u32 id) const
PinGroup< ModulePin > * get_pin_group_by_id(const u32 id) const
void updateText(const QString &newHeadline)
void setModule(u32 moduleID)
void handleContextMenuRequested(const QPoint &pos)
int getRepresentedModuleId()
ModulePinsTree(QWidget *parent=nullptr)
A model to represent the ports of a module.
Net * getNetFromItem(PortTreeItem *item)
static const int sDirectionColumn
static const int sNameColumn
static const int sTypeColumn
int getRepresentedModuleId()
void setModule(Module *m)
void numberOfPortsChanged(const int newNumber)
Module * get_module_by_id(u32 module_id) const
int getSelectedGroupId() const
QVariant getData(int column) const override
static QString pyCodeModulePinGroup(u32 moduleId, u32 groupId)
static QString pyCodeModulePinById(u32 moduleId, u32 pinId)
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)
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)
QString fromStdString(const std::string &str)
bool isEmpty() const const
std::string toStdString() const const
virtual QModelIndex indexAt(const QPoint &point) const const override
virtual void setModel(QAbstractItemModel *model) override
QString toString() const const