# HG changeset patch # User Dan Smith dsmith@danplanet.com # Date 1328671740 28800 # Node ID fa6b1f430f74f991f945a62dfb59e56d3ac6e4e7 # Parent 3db9dc931cbc2d39111c4173c4d51eeac3a362bc Bank Rebase: basic support
This change introduces a BankModel object, as well as refined Bank and NamedBank objects. A radio driver should implement BankModel and return it from Radio.get_banks(). This encapsulates all bank-related transactions. Radios with user-nameable banks should also implement NamedBank and plumb name changes accordingly.
diff -r 3db9dc931cbc -r fa6b1f430f74 chirp/chirp_common.py --- a/chirp/chirp_common.py Tue Feb 07 15:26:23 2012 -0800 +++ b/chirp/chirp_common.py Tue Feb 07 19:29:00 2012 -0800 @@ -527,18 +527,83 @@ self.dv_code = 0
class Bank: - def __init__(self, name): - self.__dict__["name"] = name + def __init__(self, model, index, name): + self._model = model + self._index = index + self._name = name
def __str__(self): - return self.name + return self._name
-class ImmutableBank(Bank): - def __setattr__(self, name, val): - if not hasattr(self, name): - raise ValueError("No such attribute `%s'" % name) - else: - raise ValueError("Property is immutable") + def get_name(self): + """Returns the static or user-adjustable bank name""" + return self._name + + def get_index(self): + """Returns the immutable bank index (string or int)""" + return self._index + + def __eq__(self, other): + return self.get_index() == other.get_index() + +class NamedBank(Bank): + def set_name(self, name): + """Changes the user-adjustable bank name""" + self._name = name + +class BankModel: + """A bank model where one memory is in zero or one banks at any point""" + def __init__(self, radio): + self._radio = radio + + def get_num_banks(self): + """Returns the number of banks (should be callable without + consulting the radio""" + raise Exception("Not implemented") + + def get_banks(self): + """Return a list of banks""" + raise Exception("Not implemented") + + def add_memory_to_bank(self, memory, bank): + """Add @memory to @bank.""" + raise Exception("Not implemented") + + def remove_memory_from_bank(self, memory, bank): + """Remove @memory from @bank. + Shall raise exception if @memory is not in @bank.""" + raise Exception("Not implemented") + + def get_bank_memories(self, bank): + """Return a list of memories in @bank""" + raise Exception("Not implemented") + + def get_memory_banks(self, memory): + """Returns a list of the banks that @memory is in""" + raise Exception("Not implemented") + +class BankIndexInterface: + def get_index_bounds(self): + """Returns a tuple (lo,hi) of the minimum and maximum bank indices""" + raise Exception("Not implemented") + + def get_memory_index(self, memory, bank): + """Returns the index of @memory in @bank""" + raise Exception("Not implemented") + + def set_memory_index(self, memory, bank, index): + """Sets the index of @memory in @bank to @index""" + raise Exception("Not implemented") + + def get_next_bank_index(self, bank): + """Returns the next available bank index in @bank, or raises + Exception if full""" + raise Exception("Not implemented") + + +class MTOBankModel(BankModel): + """A bank model where one memory can be in multiple banks at once """ + pass
def console_status(status): import sys @@ -562,6 +627,7 @@ "has_offset" : BOOLEAN, "has_name" : BOOLEAN, "has_bank" : BOOLEAN, + "has_bank_names" : BOOLEAN, "has_tuning_step" : BOOLEAN, "has_name" : BOOLEAN, "has_ctone" : BOOLEAN, @@ -645,6 +711,8 @@ "Indicates that an alphanumeric memory name is supported") self.init("has_bank", True, "Indicates that memories may be placed into banks") + self.init("has_bank_names", False, + "Indicates that banks may be named") self.init("has_tuning_step", True, "Indicates that memories store their tuning step") self.init("has_ctone", True, @@ -758,11 +826,9 @@ def set_memories(self, memories): pass
- def get_banks(self): - return [] - - def set_banks(self, banks): - raise errors.InvalidDataError("This model does not support bank naming") + def get_bank_model(self): + """Returns either a BankModel or None if not supported""" + return None
def get_raw_memory(self, number): pass