From 5ab7e04c2e3e9434cec949cd5ef6e3b5454ea5df Mon Sep 17 00:00:00 2001 From: jpcaram Date: Fri, 13 Feb 2015 15:04:57 -0500 Subject: [PATCH] Moved object name collision detection from new_object() to ObjectCollection.append(). Solves issue #107. --- FlatCAMApp.py | 27 +++++++++++++++------------ ObjectCollection.py | 19 +++++++++++++++++-- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 8710b7b6..ef24cfc2 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -737,17 +737,17 @@ class App(QtCore.QObject): t0 = time.time() # Debug ### Check for existing name - while name in self.collection.get_names(): - ## Create a new name - # Ends with number? - App.log.debug("new_object(): Object name (%s) exists, changing." % name) - match = re.search(r'(.*[^\d])?(\d+)$', name) - if match: # Yes: Increment the number! - base = match.group(1) or '' - num = int(match.group(2)) - name = base + str(num + 1) - else: # No: add a number! - name += "_1" + # while name in self.collection.get_names(): + # ## Create a new name + # # Ends with number? + # App.log.debug("new_object(): Object name (%s) exists, changing." % name) + # match = re.search(r'(.*[^\d])?(\d+)$', name) + # if match: # Yes: Increment the number! + # base = match.group(1) or '' + # num = int(match.group(2)) + # name = base + str(num + 1) + # else: # No: add a number! + # name += "_1" ## Create object classdict = { @@ -1237,8 +1237,11 @@ class App(QtCore.QObject): """ t0 = time.time() # DEBUG self.log.debug("on_object_created()") - self.inform.emit("Object (%s) created: %s" % (obj.kind, obj.options['name'])) + + # The Collection might change the name if there is a collision self.collection.append(obj) + + self.inform.emit("Object (%s) created: %s" % (obj.kind, obj.options['name'])) obj.plot() self.on_zoom_fit(None) t1 = time.time() # DEBUG diff --git a/ObjectCollection.py b/ObjectCollection.py index c353ff82..1a020a2f 100644 --- a/ObjectCollection.py +++ b/ObjectCollection.py @@ -95,15 +95,30 @@ class ObjectCollection(QtCore.QAbstractListModel): def append(self, obj, active=False): FlatCAMApp.App.log.debug(str(inspect.stack()[1][3]) + " --> OC.append()") + # Prevent same name + name = obj.options["name"] + while name in self.get_names(): + ## Create a new name + # Ends with number? + FlatCAMApp.App.log.debug("new_object(): Object name (%s) exists, changing." % name) + match = re.search(r'(.*[^\d])?(\d+)$', name) + if match: # Yes: Increment the number! + base = match.group(1) or '' + num = int(match.group(2)) + name = base + str(num + 1) + else: # No: add a number! + name += "_1" + obj.options["name"] = name + obj.set_ui(obj.ui_type()) - # Required before appending + # Required before appending (Qt MVC) self.beginInsertRows(QtCore.QModelIndex(), len(self.object_list), len(self.object_list)) # Simply append to the python list self.object_list.append(obj) - # Required after appending + # Required after appending (Qt MVC) self.endInsertRows() def get_names(self):