当前位置: 首页 > news >正文

kicad源代码研究:symbol properties窗口中为SCH_SYMBOL添加或删除一个sch_field

向grid中添加一个sch_field

FIELDS_GRID_TABLE<SCH_FIELD>* m_fields;
WX_GRID* m_fieldsGrid;
simEnableFieldRow = (int) m_fields->size();
m_fields->emplace_back( VECTOR2I( 0, 0 ), simEnableFieldRow, m_symbol, SIM_ENABLE_FIELD );
// notify the grid
wxGridTableMessage msg( m_fields, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, 1 );
m_fieldsGrid->ProcessTableMessage( msg );

这段代码定义了两个指针变量 m_fields 和 m_fieldsGrid,分别指向 FIELDS_GRID_TABLE<SCH_FIELD> 类型和 WX_GRID 类型的对象。然后,它创建一个新的 VECTOR2I 对象和其他参数,并将其添加到 m_fields 向量的末尾。接下来,它向 m_fieldsGrid 发送一条消息,告诉它已经添加了一行。

ProcessTableMessage函数主要作用是什么?

ProcessTableMessage 函数是 wxGrid 类的一个成员函数,用于处理 wxGridTableMessage 类型的消息。它的主要作用是在网格表格中执行与消息相关的操作,例如添加、删除或更新行和列。在上述代码中,ProcessTableMessage 函数用于通知网格表格添加了一行。

FIELDS_GRID_TABLE<SCH_FIELD>* m_fields;
WX_GRID* m_fieldsGrid;SCHEMATIC_SETTINGS& settings = m_symbol->Schematic()->Settings();int                 fieldID = (int) m_fields->size();SCH_FIELD           newField( VECTOR2I( 0, 0 ), fieldID, m_symbol,TEMPLATE_FIELDNAME::GetDefaultFieldName( fieldID, DO_TRANSLATE ) );newField.SetTextAngle( m_fields->at( REFERENCE_FIELD ).GetTextAngle() );newField.SetTextSize( VECTOR2I( settings.m_DefaultTextSize, settings.m_DefaultTextSize ) );m_fields->push_back( newField );// notify the gridwxGridTableMessage msg( m_fields, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, 1 );m_fieldsGrid->ProcessTableMessage( msg );

wxGridTableMessage msg( m_fields, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, m_fields->size() );这句代码什么意思

这句代码创建了一个 wxGridTableMessage 对象 msg,用于通知网格表格添加行。它包含以下参数:

  • m_fields:指向数据模型的指针,表示要添加行的数据源。
  • wxGRIDTABLE_NOTIFY_ROWS_APPENDED:通知类型,表示要执行的操作是添加行。
  • m_fields->size():新添加行的索引,即当前数据源中的行数。

通过创建并发送这个消息,可以告知网格表格添加一行新数据。

删除一个sch_field

FIELDS_GRID_TABLE<SCH_FIELD>* m_fields;
WX_GRID* m_fieldsGrid;for( int ii = (int) m_fields->size() - 1; ii >= 0; --ii ){SCH_FIELD& existingField = m_fields->at( ii );bool       found = false;if( editedField.GetName() == existingField.GetName() ){found = true;break;}if( !found ){m_fields->erase( m_fields->begin() + ii );wxGridTableMessage msg( m_fields, wxGRIDTABLE_NOTIFY_ROWS_DELETED, ii, 1 );m_fieldsGrid->ClearSelection();m_fieldsGrid->ProcessTableMessage( msg );}}

其中:

wxGridTableMessage msg( m_fields, wxGRIDTABLE_NOTIFY_ROWS_DELETED, ii, 1 );

这句代码创建了一个 wxGridTableMessage 对象 msg,用于通知网格表格删除行。它包含以下参数:

  • m_fields:指向数据模型的指针,表示要删除行的数据源。
  • wxGRIDTABLE_NOTIFY_ROWS_DELETED:通知类型,表示要执行的操作是删除行。
  • ii:要删除的起始行的索引。
  • 1:要删除的行数。

通过创建并发送这个消息,可以告知网格表格删除指定范围内的行。

判断是否包含某一个sch_field

 for( SCH_FIELD& existingField : *m_fields ){if( existingField.GetName() == editedField.GetName() ){found = true;existingField.SetText( editedField.GetText() );break;}}
http://www.lryc.cn/news/230909.html

相关文章:

  • httpClient超时时间详解与测试案例
  • 后端接口性能优化分析-数据库优化
  • 都很忙,哪里寻找时间?
  • 【经验记录】Ubuntu系统安装xxxxx.tar.gz报错ImportError: No module named setuptools
  • SDL2 消息循环和事件响应
  • 技巧篇:Mac 环境PyCharm 配置 python Anaconda
  • matplotlib绘图
  • QT使用Socket与安卓Socket互发消息
  • Redis05-集群方案
  • 故障演练的关键要素及重要性
  • 11月15日,每日信息差
  • java-关于alibaba的JSON.parseArray注意事项
  • 软文推广中媒体矩阵的优势在哪儿
  • xss总结
  • 【MySQL学习】常见命令
  • 汽车ECU的虚拟化技术初探(二)
  • vue3 el-menu初始化时选中没有高亮的问题(default-active和index的问题)
  • Vue的class、style绑定
  • day22_mysql
  • 【VBA】基于EXCEL生成Insert语句工具
  • 算法与数据结构--前缀和
  • 高频CSS面试题
  • electron 内部api capturePage实现webview截图
  • sql9(Leetcode197上升的温度)
  • 物联网AI MicroPython学习之语法 umqtt客户端
  • SQLite3 数据库学习(二):SQLite 中的 SQL 语句详解
  • 基础课4——客服中心管理者面临的挑战
  • RFID技术在危险废物管理中的应用解决方案
  • 二百零三、Flume——Flume实时采集数据频率为1s的高频率Kafka数据直接写入ODS层表的HDFS文件路径下
  • Word或者WPS批量调整文中图片大小的快捷方法