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);
278 if (mSubfocusIndex == 0)
279 mAction->mSubfocusIndex =
size - 1;
281 --mAction->mSubfocusIndex;
371 if (mSubfocusIndex ==
size - 1)
372 mAction->mSubfocusIndex = 0;
374 ++mAction->mSubfocusIndex;
380 return mSelectedModules.
contains(
id) && !mModulesSuppressedByFilter.
contains(
id);
385 return mSelectedGates.
contains(
id) && !mGatesSuppressedByFilter.
contains(
id);
395 auto it = mSelectedModules.
find(
id);
396 if (it != mSelectedModules.
end())
399 mAction->mModules.
remove(
id);
406 auto it = mSelectedGates.
find(
id);
407 if (it != mSelectedGates.
end())
410 mAction->mGates.
remove(
id);
417 auto it = mSelectedNets.
find(
id);
418 if (it != mSelectedNets.
end())
421 mAction->mNets.
remove(
id);
426 void SelectionRelay::followModuleInputPin(
Module* m,
u32 input_pin_index)
429 Q_UNUSED(input_pin_index)
433 void SelectionRelay::followModuleOutputPin(Module* m,
u32 output_pin_index)
436 Q_UNUSED(output_pin_index)
440 void SelectionRelay::subfocusNone()
444 mAction->mSubfocusIndex = 0;
448 void SelectionRelay::subfocusLeft()
452 mAction->mSubfocusIndex = 0;
456 void SelectionRelay::subfocusRight()
475 void SelectionRelay::evaluateSelectionChanged(
void *sender)
478 for(
const auto pair : mSenderRegister)
482 method = pair.second;
487 auto createSubstring = [](std::string first_part,
QSet<u32> ids){
489 std::string final_string = first_part;
490 for(
const auto &i : ids)
491 final_string += std::to_string(i) +
", ";
494 final_string.
resize(final_string.size()-2);
496 return final_string +
"}";
499 std::string gateIdsSubstring = createSubstring(
"Gate-Ids: {", mSelectedGates);
500 std::string netIdsSubstring = createSubstring(
"Net-Ids: {", mSelectedNets);
501 std::string moduleIdsSubstring = createSubstring(
"Module-Ids: {", mSelectedModules);
502 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
GateType * get_type() const
std::vector< GatePin * > get_output_pins() const
std::vector< GatePin * > get_input_pins() const
const std::unordered_set< Net * > & get_input_nets() const
const std::unordered_set< Net * > & get_output_nets() const
std::vector< Endpoint * > get_destinations(const std::function< bool(Endpoint *ep)> &filter=nullptr) 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)