WIP: completer for cell name (for <10k cells) in instance editor options

This commit is contained in:
Matthias Koefferlein 2020-08-14 18:58:24 +02:00
parent 04f2d3a8c0
commit 9a2c091f65
2 changed files with 25 additions and 7 deletions

View File

@ -44,6 +44,7 @@
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QTabWidget> #include <QTabWidget>
#include <QToolButton> #include <QToolButton>
#include <QCompleter>
namespace edt namespace edt
{ {
@ -623,16 +624,16 @@ EditorOptionsInst::library_changed ()
edited (); edited ();
} }
void // Maximum number of cells for which to offer a cell name completer
EditorOptionsInst::cell_name_changed () const static size_t max_cells = 10000;
{
update_cell_edits ();
edited ();
}
void void
EditorOptionsInst::update_cell_edits () EditorOptionsInst::update_cell_edits ()
{ {
if (mp_ui->cell_le->completer ()) {
mp_ui->cell_le->completer ()->deleteLater ();
}
db::Layout *layout = 0; db::Layout *layout = 0;
lay::LayoutView *view = lay::LayoutView::current (); lay::LayoutView *view = lay::LayoutView::current ();
@ -648,6 +649,24 @@ EditorOptionsInst::update_cell_edits ()
return; return;
} }
QStringList cellnames;
if (layout->cells () < max_cells) {
for (db::Layout::iterator c = layout->begin (); c != layout->end (); ++c) {
cellnames.push_back (tl::to_qstring (layout->cell_name (c->cell_index ())));
}
for (db::Layout::pcell_iterator pc = layout->begin_pcells (); pc != layout->end_pcells () && size_t (cellnames.size ()) < max_cells; ++pc) {
cellnames.push_back (tl::to_qstring (pc->first));
}
}
if (size_t (cellnames.size ()) < max_cells) {
QCompleter *completer = new QCompleter (cellnames, this);
completer->setCaseSensitivity (Qt::CaseSensitive);
mp_ui->cell_le->setCompleter (completer);
} else {
mp_ui->cell_le->setCompleter (0);
}
std::pair<bool, db::pcell_id_type> pc = layout->pcell_by_name (tl::to_string (mp_ui->cell_le->text ()).c_str ()); std::pair<bool, db::pcell_id_type> pc = layout->pcell_by_name (tl::to_string (mp_ui->cell_le->text ()).c_str ());
std::pair<bool, db::cell_index_type> cc = layout->cell_by_name (tl::to_string (mp_ui->cell_le->text ()).c_str ()); std::pair<bool, db::cell_index_type> cc = layout->cell_by_name (tl::to_string (mp_ui->cell_le->text ()).c_str ());

View File

@ -235,7 +235,6 @@ private slots:
void browse_cell (); void browse_cell ();
void update_pcell_parameters (); void update_pcell_parameters ();
void library_changed (); void library_changed ();
void cell_name_changed ();
void update_cell_edits (); void update_cell_edits ();
private: private: