13 bool SelectionRelay::sNavigationSkipsEnabled =
false;
16 mAction(nullptr), mDisableExecution(false),
25 mAction->mModules.
clear();
26 mAction->mGates.
clear();
27 mAction->mNets.
clear();
30 mAction->mSubfocusIndex = 0;
31 mModulesSuppressedByFilter.
clear();
32 mGatesSuppressedByFilter.
clear();
33 mNetsSuppressedByFilter.
clear();
36 void SelectionRelay::initializeAction()
41 mAction->mModules = mSelectedModules;
42 mAction->mGates = mSelectedGates;
43 mAction->mNets = mSelectedNets;
47 mAction->mSubfocus = mSubfocus;
48 mAction->mSubfocusIndex = mSubfocusIndex;
52 void SelectionRelay::executeAction()
54 if (!mAction || mDisableExecution)
return;
56 mDisableExecution =
true;
62 mDisableExecution =
false;
68 mAction->mGates.
insert(
id);
80 mAction->mModules.
insert(
id);
86 for (
u32 id : mSelectedModules)
88 for (
u32 id : mSelectedGates)
90 for (
u32 id : mSelectedNets)
98 mAction->mGates = ids;
104 mAction->mNets = ids;
110 mAction->mModules = ids;
115 mSelectedModules = mods;
116 mSelectedGates = gats;
117 mSelectedNets = nets;
124 mAction->mGates.
remove(
id);
130 mAction->mNets.
remove(
id);
136 mAction->mModules.
remove(
id);
143 mAction->mSubfocus = sfoc;
144 mAction->mSubfocusIndex = sfinx;
152 mSubfocusIndex = sfinx;
171 mSenderRegister.removeOne(pair);
178 evaluateSelectionChanged(
sender);
209 size =
g->get_type()->get_input_pins().size();
219 size =
g->get_type()->get_output_pins().size();
237 size =
n->get_destinations().size();
278 if (mSubfocusIndex == 0)
279 mAction->mSubfocusIndex = size - 1;
281 --mAction->mSubfocusIndex;
302 size =
g->get_type()->get_input_pins().size();
312 size =
g->get_type()->get_output_pins().size();
330 size =
n->get_destinations().size();
371 if (mSubfocusIndex == size - 1)
372 mAction->mSubfocusIndex = 0;
374 ++mAction->mSubfocusIndex;
389 return mSelectedModules.
contains(
id) && !mModulesSuppressedByFilter.
contains(
id);
394 return mSelectedGates.
contains(
id) && !mGatesSuppressedByFilter.
contains(
id);
404 auto it = mSelectedModules.
find(
id);
405 if (it != mSelectedModules.
end())
408 mAction->mModules.
remove(
id);
415 auto it = mSelectedGates.
find(
id);
416 if (it != mSelectedGates.
end())
419 mAction->mGates.
remove(
id);
426 auto it = mSelectedNets.
find(
id);
427 if (it != mSelectedNets.
end())
430 mAction->mGates.
remove(
id);
435 void SelectionRelay::followModuleInputPin(
Module* m,
u32 input_pin_index)
438 Q_UNUSED(input_pin_index)
442 void SelectionRelay::followModuleOutputPin(Module* m,
u32 output_pin_index)
445 Q_UNUSED(output_pin_index)
449 void SelectionRelay::subfocusNone()
453 mAction->mSubfocusIndex = 0;
457 void SelectionRelay::subfocusLeft()
461 mAction->mSubfocusIndex = 0;
465 void SelectionRelay::subfocusRight()
484 void SelectionRelay::evaluateSelectionChanged(
void *sender)
487 for(
const auto pair : mSenderRegister)
491 method = pair.second;
496 auto createSubstring = [](std::string first_part,
QSet<u32> ids){
498 std::string final_string = first_part;
499 for(
const auto &i : ids)
500 final_string += std::to_string(i) +
", ";
503 final_string.
resize(final_string.size()-2);
505 return final_string +
"}";
508 std::string gateIdsSubstring = createSubstring(
"Gate-Ids: {", mSelectedGates);
509 std::string netIdsSubstring = createSubstring(
"Net-Ids: {", mSelectedNets);
510 std::string moduleIdsSubstring = createSubstring(
"Module-Ids: {", mSelectedModules);
511 log_info(
"UserStudy",
"Selection changed, Method: {}, New Sel.: {}, {}, {}", method.
toStdString(), gateIdsSubstring, netIdsSubstring, moduleIdsSubstring);
Set the selection and focus.
bool hasModifications() const
void setObject(const UserActionObject &obj) override
const std::unordered_set< Net * > & get_input_nets() const
const std::unordered_set< Net * > & get_output_nets() const
Gate * get_gate_by_id(const u32 gate_id) const
Module * get_module_by_id(u32 module_id) const
Net * get_net_by_id(u32 net_id) const
The Node class object represents a module or a gate.
QList< UserActionObject > toUserActionObject() const
void setFocus(ItemType ftype, u32 fid, Subfocus sfoc=Subfocus::None, u32 sfinx=0)
void selectionChanged(void *sender)
bool isNetSelected(u32 id) const
void relaySelectionChanged(void *sender)
void removeSender(void *sender)
void relaySubfocusChanged(void *sender)
QList< Node > selectedNodesList() const
QList< u32 > selectedModulesList() const
void setFocusDirect(ItemType ftype, u32 fid, Subfocus sfoc=Subfocus::None, u32 sfinx=0)
void removeModule(u32 id)
void handleNetRemoved(const u32 id)
void actionSetSelected(const QSet< u32 > &mods, const QSet< u32 > &gats, const QSet< u32 > &nets)
QList< u32 > selectedGatesList() const
void handleGateRemoved(const u32 id)
void handleModuleRemoved(const u32 id)
void setSelectedGates(const QSet< u32 > &ids)
SelectionRelay(QObject *parent=nullptr)
bool isModuleSelected(u32 id) const
void setSelectedNets(const QSet< u32 > &ids)
void subfocusChanged(void *sender)
void registerSender(void *sender, QString name)
bool isGateSelected(u32 id) const
void setSelectedModules(const QSet< u32 > &ids)
The UserActionObject class represents a single object used in UserAction.
static ObjectType fromSelectionType(SelectionRelay::ItemType itp)
#define log_info(channel,...)
void append(const T &value)
QObject * sender() const const
bool contains(const T &value) const const
QSet::iterator find(const T &value)
QSet::iterator insert(const T &value)
bool remove(const T &value)
std::string toStdString() const const
void append(const T &value)