diff --git a/src/buddies/src/bd/bdReaderOptions.cc b/src/buddies/src/bd/bdReaderOptions.cc
index 8a331dda6..dec684c29 100644
--- a/src/buddies/src/bd/bdReaderOptions.cc
+++ b/src/buddies/src/bd/bdReaderOptions.cc
@@ -604,7 +604,7 @@ void GenericReaderOptions::set_layer_map (const std::string &lm)
int l = 0;
while (! ex.at_end ()) {
- m_layer_map.map_expr (ex, l);
+ m_layer_map.add_expr (ex, l);
ex.test ("//");
++l;
}
diff --git a/src/db/db/dbStreamLayers.cc b/src/db/db/dbStreamLayers.cc
index f86db8273..eb1260601 100644
--- a/src/db/db/dbStreamLayers.cc
+++ b/src/db/db/dbStreamLayers.cc
@@ -738,6 +738,7 @@ LayerMap::unmap (const LDPair &p1, const LDPair &p2)
}
}
+
void
LayerMap::unmap_expr (const std::string &expr)
{
@@ -838,6 +839,26 @@ LayerMap::to_string_file_format () const
return os.str ();
}
+void
+LayerMap::add_expr (const std::string &expr, unsigned int l)
+{
+ tl::Extractor ex (expr.c_str ());
+ add_expr (ex, l);
+ ex.expect_end ();
+}
+
+void
+LayerMap::add_expr (tl::Extractor &ex, unsigned int l)
+{
+ if (ex.test ("+")) {
+ mmap_expr (ex, l);
+ } else if (ex.test ("-")) {
+ unmap_expr (ex);
+ } else {
+ map_expr (ex, l);
+ }
+}
+
db::LayerMap
LayerMap::from_string_file_format (const std::string &s)
{
@@ -860,13 +881,7 @@ LayerMap::from_string_file_format (const std::string &s)
} else {
if (! ex.at_end ()) {
- if (ex.test ("+")) {
- lm.mmap_expr (ex, l);
- } else if (ex.test ("-")) {
- lm.unmap_expr (ex);
- } else {
- lm.map_expr (ex, l);
- }
+ lm.add_expr (ex, l);
if (ex.test ("#") || ex.test ("//")) {
// ignore comments
} else {
@@ -901,7 +916,7 @@ namespace tl
while (! ex.test (")") && ! ex.at_end ()) {
std::string m;
ex.read_word_or_quoted (m);
- t.map_expr (m, l);
+ t.add_expr (m, l);
++l;
ex.test (";");
}
@@ -921,7 +936,7 @@ namespace tl
while (! ex.test (")") && ! ex.at_end ()) {
std::string m;
ex.read_word_or_quoted (m);
- t.map_expr (m, l);
+ t.add_expr (m, l);
++l;
ex.test (";");
}
diff --git a/src/db/db/dbStreamLayers.h b/src/db/db/dbStreamLayers.h
index 26c15804a..61eaad77a 100644
--- a/src/db/db/dbStreamLayers.h
+++ b/src/db/db/dbStreamLayers.h
@@ -521,6 +521,22 @@ public:
*/
void unmap_expr (tl::Extractor &ex);
+ /**
+ * @brief Generic expression mapping
+ *
+ * This generic mapping function takes a mapping expression. If it starts with "+",
+ * "mmap" is used, if it starts with "-", "unmap" is used. Otherwise, "map" is used.
+ */
+ void add_expr (const std::string &expr, unsigned int l);
+
+ /**
+ * @brief Generic expression mapping
+ *
+ * This generic mapping function takes a mapping expression. If it starts with "+",
+ * "mmap" is used, if it starts with "-", "unmap" is used. Otherwise, "map" is used.
+ */
+ void add_expr (tl::Extractor &ex, unsigned int l);
+
/**
* @brief Prepares a layer mapping object for reading
*
diff --git a/src/laybasic/laybasic/LayerMappingWidget.ui b/src/laybasic/laybasic/LayerMappingWidget.ui
index a343b33ce..5fd4d65d7 100644
--- a/src/laybasic/laybasic/LayerMappingWidget.ui
+++ b/src/laybasic/laybasic/LayerMappingWidget.ui
@@ -6,8 +6,8 @@
0
0
- 446
- 205
+ 536
+ 290
@@ -29,6 +29,19 @@
6
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Load File
+
+
+
-
@@ -45,103 +58,114 @@
- -
-
-
-
- 0
- 0
-
-
-
- Load File
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- true
-
-
- QAbstractItemView::InternalMove
-
-
- QAbstractItemView::ExtendedSelection
-
-
- true
-
-
- false
-
-
-
- -
-
-
- Add a new layer to the list
-
-
- Add
-
-
-
- :/add.png:/add.png
-
-
-
- -
-
-
- Delete the selected layers from the list
-
-
- Delete
-
-
-
- :/clear.png:/clear.png
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 5
-
-
-
-
- -
-
-
- Edit the current layer
-
-
- Edit
-
-
-
- :/edit.png:/edit.png
+
-
+
+
+ 1
+
+
+ List
+
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ true
+
+
+ QAbstractItemView::InternalMove
+
+
+ QAbstractItemView::ExtendedSelection
+
+
+ true
+
+
+ false
+
+
+
+ -
+
+
+ Add a new layer to the list
+
+
+ Add
+
+
+
+ :/add.png:/add.png
+
+
+
+ -
+
+
+ Delete the selected layers from the list
+
+
+ Delete
+
+
+
+ :/clear.png:/clear.png
+
+
+
+ -
+
+
+ Edit the current layer
+
+
+ Edit
+
+
+
+ :/edit.png:/edit.png
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 5
+
+
+
+
+
+
+
+
+ Text
+
+
+ -
+
+
+
+
-
+
diff --git a/src/laybasic/laybasic/layLayerMappingWidget.cc b/src/laybasic/laybasic/layLayerMappingWidget.cc
index c5c243e77..e14dadcc7 100644
--- a/src/laybasic/laybasic/layLayerMappingWidget.cc
+++ b/src/laybasic/laybasic/layLayerMappingWidget.cc
@@ -53,6 +53,8 @@ LayerMappingWidget::LayerMappingWidget (QWidget *parent)
mp_ui->layer_lv->viewport ()->acceptDrops ();
+ connect (mp_ui->tabs, SIGNAL (currentChanged (int)), this, SLOT (current_tab_changed (int)));
+
mp_layer_table_file_dialog = new lay::FileDialog (this,
tl::to_string (QObject::tr ("Load Layer Table")),
tl::to_string (QObject::tr ("Layer properties and text files (*.lyp *.txt);;Layer properties files (*.lyp);;Text files (*.txt);;All files (*)")));
@@ -72,6 +74,8 @@ LayerMappingWidget::set_layer_map (const db::LayerMap &lm)
{
std::vector layer_ids = lm.get_layers ();
+ mp_ui->text_edit->setPlainText (tl::to_qstring (lm.to_string_file_format ()));
+
mp_ui->layer_lv->reset ();
mp_ui->layer_lv->clear ();
@@ -88,16 +92,31 @@ LayerMappingWidget::set_layer_map (const db::LayerMap &lm)
db::LayerMap
LayerMappingWidget::get_layer_map () const
+{
+ return get_layer_map_from_tab (mp_ui->tabs->currentIndex ());
+}
+
+db::LayerMap
+LayerMappingWidget::get_layer_map_from_tab (int tab) const
{
db::LayerMap lm;
- for (int i = 0; i < mp_ui->layer_lv->count (); ++i) {
- std::string t = tl::to_string (mp_ui->layer_lv->item (i)->data (Qt::DisplayRole).toString ());
- try {
- lm.map_expr (t, (unsigned int) i);
- } catch (...) {
- mp_ui->layer_lv->setCurrentItem (mp_ui->layer_lv->item (i));
- throw;
+
+ if (tab == 0) {
+
+ for (int i = 0; i < mp_ui->layer_lv->count (); ++i) {
+ std::string t = tl::to_string (mp_ui->layer_lv->item (i)->data (Qt::DisplayRole).toString ());
+ try {
+ lm.add_expr (t, (unsigned int) i);
+ } catch (...) {
+ mp_ui->layer_lv->setCurrentItem (mp_ui->layer_lv->item (i));
+ throw;
+ }
}
+
+ } else {
+
+ lm = db::LayerMap::from_string_file_format (tl::to_string (mp_ui->text_edit->toPlainText ()));
+
}
return lm;
@@ -128,17 +147,19 @@ LayerMappingWidget::load_button_pressed ()
mp_ui->layer_lv->reset ();
mp_ui->layer_lv->clear ();
+ db::LayerMap lm;
+
// use those layers which have cellview index 0
+ unsigned int n = 0;
for (LayerPropertiesConstIterator lay_iter = props.begin_const_recursive (); ! lay_iter.at_end (); ++lay_iter) {
if (! lay_iter->has_children () && lay_iter->source (true /*=real*/).cv_index () == 0) {
db::LayerProperties db_lp = lay_iter->source (true /*=real*/).layer_props ();
- QListWidgetItem *item = new QListWidgetItem (mp_ui->layer_lv);
- item->setData (Qt::DisplayRole, tl::to_qstring (db_lp.to_string ()));
- item->setFlags (item->flags () | Qt::ItemIsEditable);
- mp_ui->layer_lv->addItem (item);
+ lm.map (db_lp, (unsigned int) n++);
}
}
+ set_layer_map (lm);
+
// if successful, stop now.
success = true;
@@ -230,5 +251,11 @@ LayerMappingWidget::edit_button_pressed ()
END_PROTECTED
}
+void
+LayerMappingWidget::current_tab_changed (int index)
+{
+ set_layer_map (get_layer_map_from_tab (1 - index));
+}
+
}
diff --git a/src/laybasic/laybasic/layLayerMappingWidget.h b/src/laybasic/laybasic/layLayerMappingWidget.h
index 9252e8bb7..4c0bac3a4 100644
--- a/src/laybasic/laybasic/layLayerMappingWidget.h
+++ b/src/laybasic/laybasic/layLayerMappingWidget.h
@@ -84,11 +84,14 @@ private slots:
void add_button_pressed ();
void delete_button_pressed ();
void edit_button_pressed ();
+ void current_tab_changed (int tab);
private:
lay::FileDialog *mp_layer_table_file_dialog;
std::string m_layer_table_file;
Ui::LayerMappingWidget *mp_ui;
+
+ db::LayerMap get_layer_map_from_tab (int tab) const;
};
} // namespace lay