Merge branch 'feature/JAL-3180colourAnnotationMenu' into merge/JAL-3180
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Thu, 7 Mar 2019 16:12:25 +0000 (16:12 +0000)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Thu, 7 Mar 2019 16:12:25 +0000 (16:12 +0000)
Conflicts:
resources/lang/Messages.properties
resources/lang/Messages_es.properties

1  2 
resources/lang/Messages.properties
resources/lang/Messages_es.properties
src/jalview/gui/AlignFrame.java
src/jalview/gui/PopupMenu.java
src/jalview/jbgui/GAlignFrame.java
src/jalview/schemes/AnnotationColourGradient.java

@@@ -30,7 -30,6 +30,7 @@@ action.minimize_associated_windows = Mi
  action.close_all = Close all
  action.load_project = Load Project
  action.save_project = Save Project
 +action.save_project_as = Save Project as...
  action.quit = Quit
  action.expand_views = Expand Views
  action.gather_views = Gather Views
@@@ -119,8 -118,10 +119,8 @@@ action.select = Selec
  action.new_view = New View
  action.close = Close
  action.add = Add
 -action.save_as_default = Save as default
  action.save_as = Save as...
  action.save = Save
 -action.cancel_fetch = Cancel Fetch
  action.change_font = Change Font
  action.change_font_tree_panel = Change Font (Tree Panel)
  action.colour = Colour
@@@ -139,6 -140,7 +139,6 @@@ action.fetch_db_references = Fetch DB R
  action.view_flanking_regions = Show flanking regions
  label.view_flanking_regions = Show sequence data either side of the subsequences involved in this alignment
  label.structures_manager = Structures Manager
 -label.nickname = Nickname:
  label.url = URL
  label.url\: = URL:
  label.input_file_url = Enter URL or Input File
@@@ -160,6 -162,7 +160,6 @@@ label.current_parameter_set_name = Curr
  label.service_action = Service Action:
  label.post_url = POST URL:
  label.url_suffix = URL Suffix
 -label.sequence_source = Sequence Source
  label.per_seq = per Sequence
  label.result_vertically_separable = Results are vertically separable
  label.amend = Amend
@@@ -169,9 -172,10 +169,9 @@@ label.principal_component_analysis = Pr
  label.average_distance_identity = Average Distance Using % Identity
  label.neighbour_joining_identity = Neighbour Joining Using % Identity
  label.choose_calculation = Choose Calculation
 -label.treecalc_title = {0} Using {1}
 +label.calc_title = {0} Using {1}
  label.tree_calc_av = Average Distance
  label.tree_calc_nj = Neighbour Joining
 -label.select_score_model = Select score model
  label.score_model_pid = % Identity
  label.score_model_blosum62 = BLOSUM62
  label.score_model_pam250 = PAM 250
@@@ -349,6 -353,7 +349,6 @@@ label.status = Statu
  label.channels = Channels
  label.channel_title_item_count = {0} ({1})
  label.blog_item_published_on_date = {0} {1} 
 -label.select_das_service_from_table = Select a DAS service from the table to read a full description here.</font></html>
  label.session_update = Session Update
  label.new_vamsas_session = New Vamsas Session
  action.load_vamsas_session = Load Vamsas Session...
@@@ -366,6 -371,7 +366,6 @@@ label.load_colours = Load Colour
  label.save_colours = Save Colours
  label.load_colours_tooltip = Load feature colours and filters from file
  label.save_colours_tooltip = Save feature colours and filters to file
 -label.fetch_das_features = Fetch DAS Features
  label.selected_database_to_fetch_from = Selected {0} database {1} to fetch from {2} 
  label.database_param = Database: {0}
  label.example = Example
@@@ -403,6 -409,9 +403,6 @@@ label.couldnt_find_pdb_id_in_file = Cou
  label.no_pdb_id_in_file = No PDB Id in File
  label.couldnt_read_pasted_text = Couldn't read the pasted text {0}
  label.error_parsing_text = Error parsing text
 -label.enter_local_das_source = Enter Nickname & URL of Local DAS Source
 -label.you_can_only_edit_or_remove_local_das_sources = You can only edit or remove local DAS Sources!
 -label.public_das_source = Public DAS source - not editable
  label.input_alignment_from_url = Input Alignment From URL
  label.input_alignment = Input Alignment
  label.couldnt_import_as_vamsas_session = Couldn't import {0} as a new vamsas session.
@@@ -419,6 -428,8 +419,6 @@@ label.invalid_url = Invalid URL 
  label.error_loading_file = Error loading file
  label.problems_opening_file = Encountered problems opening {0}!!
  label.file_open_error = File open error
 -label.no_das_sources_selected_warn = No das sources were selected.\nPlease select some sources and\ntry again.
 -label.no_das_sources_selected_title = No DAS Sources Selected
  label.colour_scheme_exists_overwrite = Colour scheme {0} exists.\nContinue saving colour scheme as {1}?"
  label.duplicate_scheme_name = Duplicate scheme name
  label.jalview_new_questionnaire = There is a new Questionnaire available. Would you like to complete it now ?\n
@@@ -491,10 -502,6 +491,10 @@@ label.edit_name_description = Edit Name
  label.create_sequence_feature = Create Sequence Feature...
  label.edit_sequence = Edit Sequence
  label.edit_sequences = Edit Sequences
 +label.insert_gap = Insert 1 gap
 +label.insert_gaps = Insert {0} gaps
 +label.delete_gap = Delete 1 gap
 +label.delete_gaps = Delete {0} gaps
  label.sequence_details = Sequence Details
  label.jmol_help = Jmol Help
  label.chimera_help = Chimera Help
@@@ -615,6 -622,7 +615,6 @@@ label.visual = Visua
  label.connections = Connections
  label.output = Output
  label.editing = Editing
 -label.das_settings = DAS Settings
  label.web_services = Web Services
  label.right_click_to_edit_currently_selected_parameter = Right click to edit currently selected parameter.
  label.let_jmol_manage_structure_colours = Let Jmol manage structure colours
@@@ -630,6 -638,10 +630,6 @@@ label.delete_service_url = Delete Servi
  label.details = Details
  label.options = Options
  label.parameters = Parameters
 -label.available_das_sources = Available DAS Sources
 -label.full_details = Full Details
 -label.authority = Authority
 -label.type = Type
  label.proxy_server = Proxy Server
  label.file_output = File Output
  label.select_input_type = Select input type
@@@ -698,6 -710,9 +698,6 @@@ label.sort_alignment_new_tree = Sort Al
  label.add_sequences = Add Sequences
  label.new_window = New Window
  label.split_window = Split Window
 -label.refresh_available_sources = Refresh Available Sources
 -label.use_registry = Use Registry
 -label.add_local_source = Add Local Source
  label.set_as_default = Set as Default
  label.show_labels = Show labels
  action.background_colour = Background Colour...
@@@ -756,7 -771,7 +756,7 @@@ label.run_with_preset_params = Run {0} 
  label.view_and_change_parameters_before_running_calculation = View and change parameters before running calculation
  label.view_documentation = View documentation
  label.select_return_type = Select return type
 -label.translation_of_params = Translation of {0}
 +label.translation_of_params = Translation of {0} (Table {1})
  label.features_for_params = Features for - {0}
  label.annotations_for_params = Annotations for - {0}
  label.generating_features_for_params = Generating features for - {0}
@@@ -838,6 -853,7 +838,6 @@@ label.multiharmony = Multi-Harmon
  label.unable_start_web_service_analysis = Unable to start web service analysis
  label.job_couldnt_be_started_check_input = The Job couldn't be started. Please check your input, and the Jalview console for any warning messages.
  label.prompt_each_time = Prompt each time
 -label.use_source = Use Source
  label.couldnt_save_project = Couldn't save project
  label.error_whilst_saving_current_state_to = Error whilst saving current state to {0}
  label.error_whilst_loading_project_from = Error whilst loading project from {0}
@@@ -863,6 -879,7 +863,6 @@@ label.error_unsupported_owwner_user_col
  label.save_alignment_to_file = Save Alignment to file
  label.save_features_to_file = Save Features to File
  label.save_annotation_to_file = Save Annotation to File
 -label.no_features_on_alignment = No features found on alignment
  label.save_pdb_file = Save PDB File
  label.save_text_to_file = Save Text to File
  label.save_state = Save State
@@@ -1062,6 -1079,8 +1062,6 @@@ exception.unable_to_create_internet_con
  exception.invocation_target_calling_url = InvocationTargetException while calling openURL: {0}
  exception.illegal_access_calling_url = IllegalAccessException while calling openURL: {0}
  exception.interrupted_launching_browser = InterruptedException while launching browser: {0}
 -exception.das_source_doesnt_support_sequence_command = Source {0} does not support the sequence command.
 -exception.invalid_das_source = Invalid das source: {0}
  exception.ebiembl_retrieval_failed_on = EBI EMBL XML retrieval failed on {0}:{1}
  exception.no_pdb_records_for_chain = No PDB Records for {0} chain {1}
  exception.unexpected_handling_rnaml_translation_for_pdb = Unexpected exception when handling RNAML translation of PDB data
@@@ -1116,6 -1135,10 +1116,6 @@@ status.parsing_results = Parsing result
  status.processing = Processing...
  status.refreshing_web_service_menus = Refreshing Web Service Menus
  status.collecting_job_results = Collecting job results.
 -status.fetching_das_sequence_features = Fetching DAS Sequence Features
 -status.no_das_sources_active = No DAS Sources Active
 -status.das_feature_fetching_cancelled = DAS Feature Fetching Cancelled
 -status.das_feature_fetching_complete = DAS Feature Fetching Complete
  status.fetching_db_refs = Fetching db refs
  status.loading_cached_pdb_entries = Loading Cached PDB Entries
  status.searching_for_pdb_structures = Searching for PDB Structures
@@@ -1138,6 -1161,8 +1138,6 @@@ warn.urls_not_contacted = URLs that cou
  warn.urls_no_jaba = URLs without any JABA Services
  info.validate_jabaws_server = Validate JabaWS Server ?\n(Look in console output for results)
  label.test_server = Test Server?
 -info.you_want_jalview_to_find_uniprot_accessions = Do you want Jalview to find\nUniprot Accession ids for given sequence names?
 -label.find_uniprot_accession_ids = Find Uniprot Accession Ids
  label.new_sequence_fetcher = New Sequence Fetcher
  label.additional_sequence_fetcher = Additional Sequence Fetcher
  label.select_database_retrieval_source = Select Database Retrieval Source
@@@ -1259,6 -1284,7 +1259,6 @@@ label.SEQUENCE_ID_for_DB_ACCESSION1 = P
  label.SEQUENCE_ID_for_DB_ACCESSION2 = URL links using '$SEQUENCE_ID$' for DB accessions now use '$DB_ACCESSION$'.
  label.do_not_display_again = Do not display this message again
  exception.url_cannot_have_duplicate_id = {0} cannot be used as a label for more than one line
 -label.filter = Filter text:
  action.customfilter = Custom only
  action.showall = Show All
  label.insert = Insert:
@@@ -1273,6 -1299,7 +1273,6 @@@ label.edit_sequence_url_link = Edit seq
  warn.name_cannot_be_duplicate = User-defined URL names must be unique and cannot be MIRIAM ids
  label.output_seq_details = Output Sequence Details to list all database references
  label.urllinks = Links
 -label.default_cache_size = Default Cache Size
  action.clear_cached_items = Clear Cached Items
  label.togglehidden = Show hidden regions
  label.quality_descr = Alignment Quality based on Blosum62 scores
@@@ -1325,6 -1352,7 +1325,6 @@@ label.colour_by_text = Colour by tex
  label.graduated_colour = Graduated Colour
  label.by_text_of = By text of
  label.by_range_of = By range of
 -label.filters_tooltip = Click to set or amend filters
  label.or = Or
  label.and = And
  label.sequence_feature_colours = Sequence Feature Colours
@@@ -1335,59 -1363,4 +1335,60 @@@ label.most_bound_molecules = Most Boun
  label.most_polymer_residues = Most Polymer Residues
  label.cached_structures = Cached Structures
  label.free_text_search = Free Text Search
 +label.backupfiles_confirm_delete = Confirm delete
 +label.backupfiles_confirm_delete_old_files = Delete the following older backup files? (see the Backups tab in Preferences for more options)
 +label.backupfiles_confirm_save_file = Confirm save file
 +label.backupfiles_confirm_save_file_backupfiles_roll_wrong = Something possibly went wrong with the backups of this file.
 +label.backupfiles_confirm_save_new_saved_file_ok = The new saved file seems okay.
 +label.backupfiles_confirm_save_new_saved_file_not_ok = The new saved file might not be okay.
 +label.backups = Backups
 +label.backup = Backup
 +label.backup_files = Backup Files
 +label.enable_backupfiles = Enable backup files
 +label.backup_filename_strategy = Backup filename strategy
 +label.append_to_filename = Append to filename (%n is replaced by the backup number)
 +label.append_to_filename_tooltip = %n in the text will be replaced by the backup number. The text will appear after the filename. See the summary box above.
 +label.index_digits = Number of digits to use for the backup number (%n)
 +label.summary_of_backups_scheme = Summary of backup scheme
 +label.increment_index = Increase appended text numbers - newest file has largest number.
 +label.reverse_roll = "Roll" appended text numbers - newest backup file is always number 1.
 +label.keep_files = Deleting old backup files
 +label.keep_all_backup_files = Do not delete old backup files
 +label.keep_only_this_number_of_backup_files = Keep only this number of most recent backup files
 +label.autodelete_old_backup_files = Autodelete old backup files:
 +label.always_ask = Always ask
 +label.auto_delete = Automatically delete
 +label.filename = filename
 +label.braced_oldest = (oldest)
 +label.braced_newest = (most recent)
 +label.configuration = Configuration
 +label.configure_feature_tooltip = Click to configure variable colour or filters
 +label.schemes = Schemes
 +label.customise = Customise
 +label.default = Default
 +label.single_file = Single backup
 +label.keep_all_versions = Keep all versions
 +label.rolled_backups = Rolled backup files
 +label.previously_saved_scheme = Previously saved scheme
 +label.no_backup_files = NO BACKUP FILES
 +label.include_backup_files = Include backup files
 +label.cancel_changes = Cancel changes
 +label.warning_confirm_change_reverse = Warning!\nIf you change the increment/decrement of the backup filename number, without changing the suffix or number of digits,\nthis may cause loss of backup files created with the previous backup filename scheme.\nAre you sure you wish to do this?
 +label.change_increment_decrement = Change increment/decrement?
 +label.was_previous = was {0}
 +label.newerdelete_replacement_line = Backup file\n''{0}''\t(modified {2}, size {4})\nis to be deleted and replaced by apparently older file\n''{1}''\t(modified {3}, size {5}).
 +label.confirm_deletion_or_rename = Confirm deletion of ''{0}'' or rename to ''{1}''?
 +label.newerdelete_line = Backup file\n''{0}''\t(modified {2}, size {4})\nis to be deleted but is newer than the oldest remaining backup file\n''{1}''\t(modified {3}, size {5}).
 +label.confirm_deletion = Confirm deletion of ''{0}''?
 +label.delete = Delete
 +label.rename = Rename
 +label.keep = Keep
 +label.file_info = (modified {0}, size {1})
 +label.annotation_name = Annotation Name
 +label.annotation_description = Annotation Description 
 +label.edit_annotation_name_description = Edit Annotation Name/Description
 +label.alignment = alignment
 +label.pca = PCA
 +label.create_image_of = Create {0} image of {1}
 +label.click_to_edit = Click to edit, right-click for menu
+ label.by_annotation_tooltip = Annotation Colour is configured from the main Colour menu
@@@ -30,7 -30,6 +30,7 @@@ action.minimize_associated_windows = Mi
  action.close_all = Cerrar todo
  action.load_project = Cargar proyecto
  action.save_project = Guardar proyecto
 +action.save_project_as = Guardar proyecto como...
  action.quit = Salir
  action.expand_views = Expandir vistas
  action.gather_views = Capturar vistas
@@@ -116,8 -115,10 +116,8 @@@ action.select = Selecciona
  action.new_view = Nueva vista
  action.close = Cerrar
  action.add = AƱadir
 -action.save_as_default = Guardar como por defecto
  action.save_as = Guardar como
  action.save = Guardar
 -action.cancel_fetch = Cancelar bĆŗsqueda
  action.change_font = Cambiar Fuente
  action.change_font_tree_panel = Cambiar fuente (panel del Ć”rbol)
  action.colour = Color
@@@ -136,6 -137,7 +136,6 @@@ action.fetch_db_references = Recuperar 
  action.view_flanking_regions = Mostrar flancos
  label.view_flanking_regions = Mostrar los datos de la secuencia a ambos lados de las subsecuencias implicadas en este alineamiento
  label.structures_manager = Administrar estructuras
 -label.nickname = Sobrenombre:
  label.url\: = URL:
  label.url = URL 
  label.input_file_url = Introducir URL en el fichero de entrada
@@@ -157,6 -159,7 +157,6 @@@ label.current_parameter_set_name = Nomb
  label.service_action = AcciĆ³n de servicio:
  label.post_url = POST URL: 
  label.url_suffix = URL Sufijo
 -label.sequence_source = Fuente de la secuencia
  label.per_seq = por secuencia
  label.result_vertically_separable = Los resultados son separables verticalmente
  label.amend = Modificar
@@@ -166,9 -169,10 +166,9 @@@ label.principal_component_analysis = An
  label.average_distance_identity = Distancia Media Usando % de Identidad
  label.neighbour_joining_identity = Unir vecinos utilizando % de Identidad
  label.choose_calculation = Elegir el cĆ”lculo
 -label.treecalc_title = {0} utilizando {1}
 +label.calc_title = {0} utilizando {1}
  label.tree_calc_av = Distancia media
  label.tree_calc_nj = Unir vecinos
 -label.select_score_model = Selecciones modelo de puntuaciĆ³n
  label.score_model_pid = % Identidad
  label.score_model_blosum62 = BLOSUM62
  label.score_model_pam250 = PAM 250
@@@ -318,6 -322,7 +318,6 @@@ label.status =  [Estado
  label.channels = Canales
  label.channel_title_item_count = {0} ({1})
  label.blog_item_published_on_date = {0} {1} 
 -label.select_das_service_from_table = Seleccionar servicio DAS de la tabla para leer una descripciĆ³n completa aquĆ­.
  label.session_update = Actualizar sesiĆ³n
  label.new_vamsas_session = Nueva sesiĆ³n Vamsas
  action.save_vamsas_session = Guardar SesiĆ³n Vamsas
@@@ -334,6 -339,7 +334,6 @@@ label.load_colours = Cargar colore
  label.save_colours = Guardar colores
  label.load_colours_tooltip = Cargar colores y filtros desde fichero
  label.save_colours_tooltip = Guardar colores y filtros en fichero
 -label.fetch_das_features = Recuperar funciones DAS
  label.selected_database_to_fetch_from = Seleccionada {0} Base de datos {1} para buscar de {2} 
  label.database_param = Base de datos: {0}
  label.example = Ejemplo
@@@ -370,6 -376,9 +370,6 @@@ label.couldnt_find_pdb_id_in_file = No 
  label.no_pdb_id_in_file = No hay un Id PDB en el fichero
  label.couldnt_read_pasted_text = No se pudo leer el texto pegado {0}
  label.error_parsing_text = Error analizando el texto
 -label.enter_local_das_source = Intruduzca el Nickname & URL de la fuente DAS local
 -label.you_can_only_edit_or_remove_local_das_sources = SĆ³lo puedes editar o eliminar fuentes DAS locales!
 -label.public_das_source = Fuente pĆŗblica DAS - no editable
  label.input_alignment_from_url = Alineamiento de entrada desde URL
  label.input_alignment = Alineamiento de entrada
  label.couldnt_import_as_vamsas_session = No se pudo importar {0} como una nueva sesiĆ³n Vamsas.
@@@ -386,6 -395,8 +386,6 @@@ label.invalid_url = URL Invalido
  label.error_loading_file = Error al cargar el fichero
  label.problems_opening_file = Encontrados problemas al abrir el fichero {0}!!
  label.file_open_error = Error al abrir el fichero
 -label.no_das_sources_selected_warn = No han sido seleccionadas fuentes DAS.\nPor favor, seleccione algunas fuentes y\npruebe de nuevo.
 -label.no_das_sources_selected_title = No han sido seleccionadas fuentes DAS
  label.colour_scheme_exists_overwrite = El esquema de colores {0} ya existe.\nContinuar guardando el esquema de colores como {1}?
  label.duplicate_scheme_name = Duplicar nombre de esquema
  label.jalview_new_questionnaire = Hay un nuevo cuestionario disponible. Querr\u00EDa completarlo ahora ?\n
@@@ -457,10 -468,6 +457,10 @@@ label.edit_name_description = Editar no
  label.create_sequence_feature = Crear funciĆ³n de secuencia
  label.edit_sequence = Editar secuencia
  label.edit_sequences = Editar secuencias
 +label.insert_gap = Insertar 1 hueco
 +label.insert_gaps = Insertar {0} huecos
 +label.delete_gap = Borrar 1 hueco
 +label.delete_gaps = Borrar {0} huecos
  label.sequence_details = Detalles de la secuencia
  label.jmol_help = Ayuda de Jmol
  # Todos/Todas is gender-sensitive, but currently only used for feminine (cadena / anotaciĆ³n)! 
@@@ -570,6 -577,7 +570,6 @@@ label.visual = Visua
  label.connections = Conexiones
  label.output = Salida
  label.editing = EdiciĆ³n
 -label.das_settings = ConfiguraciĆ³n DAS
  label.web_services = Servicios web
  label.right_click_to_edit_currently_selected_parameter = Haga clic en el botĆ³n derecho para editar el parĆ”metro seleccionado actualmente.
  label.let_jmol_manage_structure_colours = Permitir que Jmol gestione la estructuras cromĆ”ticas
@@@ -582,6 -590,10 +582,6 @@@ label.delete_service_url = Borrar la UR
  label.details = Detalles
  label.options = Opciones
  label.parameters = ParamĆ©tros
 -label.available_das_sources = Fuentes DAS disponibles
 -label.full_details = Detalles completos
 -label.authority = Autoridad
 -label.type = Tipo
  label.proxy_server = Servidor proxy
  label.file_output = Fichero de salida
  label.select_input_type = Seleccionar el tipo de entrada
@@@ -644,6 -656,9 +644,6 @@@ label.get_cross_refs = Obtener referenc
  label.sort_alignment_new_tree = Alinear el alineamiento con el nuevo Ć”rbol
  label.add_sequences = AƱadir secuencias
  label.new_window = Nueva ventana
 -label.refresh_available_sources = Refrescar las fuentes disponibles
 -label.use_registry = Utilizar el registro
 -label.add_local_source = AƱadir fuente local
  label.set_as_default = Establecer por defecto
  label.show_labels = Mostrar etiquetas
  label.associate_nodes_with = Asociar nodos con
@@@ -685,7 -700,7 +685,7 @@@ label.run_with_preset_params = Ejecuta
  label.view_and_change_parameters_before_running_calculation = Ver y cambiar los parĆ”metros antes de lanzar el cĆ”lculo
  label.view_documentation = Ver documentaciĆ³n
  label.select_return_type = Seleccionar el tipo de retorno
 -label.translation_of_params = TraducciĆ³n de {0}
 +label.translation_of_params = TraducciĆ³n de {0} (Tabla {1})
  label.features_for_params = CaracterĆ­sticas de - {0}
  label.annotations_for_params = Anotaciones de - {0}
  label.generating_features_for_params = Generando caracterĆ­sticas de - {0}
@@@ -763,6 -778,7 +763,6 @@@ label.multiharmony = Multi-Harmon
  label.unable_start_web_service_analysis = No es posible iniciar el servicio web de anĆ”lisis
  label.job_couldnt_be_started_check_input = El trabajo no puede arrancarse. Por favor, compruebe los parĆ”metros de entrada y los mensajes de advertencia de la consola de Jalview.
  label.prompt_each_time = Preguntar siempre
 -label.use_source = Fuente
  label.couldnt_save_project = No es posible guardar el proyecto
  label.error_whilst_saving_current_state_to = Error mientras se guardaba el estado a {0}
  label.error_whilst_loading_project_from = Error cargando el proyecto desde  {0}
@@@ -788,6 -804,7 +788,6 @@@ label.error_unsupported_owwner_user_col
  label.save_alignment_to_file = Guardar Alineamiento en fichero
  label.save_features_to_file = Guardar CaracterĆ­sticas en un fichero
  label.save_annotation_to_file = Guardar AnotaciĆ³n en un fichero
 -label.no_features_on_alignment = No se han encontrado caracterĆ­sticas en el alineamiento
  label.save_pdb_file = Guardar fichero PDB 
  label.save_text_to_file = Guardar Texto en un fichero
  label.save_state = Guardar estado
@@@ -987,6 -1004,8 +987,6 @@@ exception.unable_to_create_internet_con
  exception.invocation_target_calling_url = InvocationTargetException mientras se invocaba openURL: {0}
  exception.illegal_access_calling_url = IllegalAccessException mientras se invocaba openURL: {0}
  exception.interrupted_launching_browser = InterruptedException mientras se lanzaba el navegador: {0}
 -exception.das_source_doesnt_support_sequence_command = La fuente {0} no soporta el comando sequence.
 -exception.invalid_das_source = Fuente DAS no vĆ”lida: {0}
  exception.ebiembl_retrieval_failed_on = La recuperaciĆ³n de datos EBI EMBL XML ha fallado en {0}:{1}
  exception.no_pdb_records_for_chain = No se han encontrado registros {0} para la cadena {1}
  exception.unexpected_handling_rnaml_translation_for_pdb = Excepcion inesperada cuando se traducĆ­an a RNAML los datos PDB
@@@ -1038,6 -1057,10 +1038,6 @@@ status.parsing_results = Parseando resu
  status.processing = Procesando...
  status.refreshing_web_service_menus = Refrescando los menĆŗs de servicios web
  status.collecting_job_results = Recolectando los resultados de los trabajos.
 -status.fetching_das_sequence_features = Recuperando las caracterĆ­sticas DAS de las secuencias
 -status.no_das_sources_active = No existe ninguna fuente DAS activa
 -status.das_feature_fetching_cancelled = RecuperaciĆ³n de caracterĆ­sticas DAS cancelada
 -status.das_feature_fetching_complete = RecuperaciĆ³n de caracterĆ­sticas DAS completada
  status.fetching_db_refs = Recuperando db refs
  label.font_doesnt_have_letters_defined = La fuente no tiene letras definidas\npor lo que no puede emplease\ncon datos de alineamientos
  label.font_too_small = TamaƱo de la letra es demasiado pequeƱa
@@@ -1054,6 -1077,8 +1054,6 @@@ warn.server_didnt_pass_validation = El 
  warn.url_must_contain = La URL de la secuencia debe contener $SEQUENCE_ID$, $DB_ACCESSION$ o un regex
  info.validate_jabaws_server = \u00BFValidar el servidor JabaWS?\n(Consulte la consola de salida para obtener los resultados)
  label.test_server = ĀæProbar servidor?
 -info.you_want_jalview_to_find_uniprot_accessions = \u00BFDesea que Jalview encuentre\nUniprot Accession ids para los nombres de secuencias dados?
 -label.find_uniprot_accession_ids = Buscar Uniprot Accession Ids
  label.new_sequence_fetcher = AƱadir recuperador de secuencias
  label.additional_sequence_fetcher = Recuperador de secuencia adicional
  label.select_database_retrieval_source = Seleccionar fuente de recuperaciĆ³n de bases de datos
@@@ -1260,6 -1285,7 +1260,6 @@@ label.SEQUENCE_ID_for_DB_ACCESSION1 = P
  label.SEQUENCE_ID_for_DB_ACCESSION2 = URL enlaza usando '$SEQUENCE_ID$' para accesiones DB ahora usar '$DB_ACCESSION$'.
  label.do_not_display_again = No mostrar este mensaje de nuevo
  exception.url_cannot_have_duplicate_id = {0} no puede ser usada como etiqueta en mĆ”s de un enlace
 -label.filter = Filtrar texto:
  action.customfilter = SĆ³lo personalizado
  action.showall = Mostrar todo
  label.insert = Insertar:
@@@ -1274,6 -1300,7 +1274,6 @@@ label.edit_sequence_url_link = Editar l
  warn.name_cannot_be_duplicate = Los nombres URL definidos por el usuario deben ser Ćŗnicos y no pueden ser ids de MIRIAM
  label.output_seq_details = Seleccionar Detalles de la secuencia para ver todas
  label.urllinks = Enlaces
 -label.default_cache_size = TamaƱo del cachĆ© por defecto
  action.clear_cached_items = Borrar elementos en cachĆ©
  label.quality_descr = Calidad de alineamiento basĆ”ndose en puntuaciĆ³n Blosum62
  label.conservation_descr = ConservaciĆ³n del alineamiento total menos de {0}% huecos
@@@ -1326,6 -1353,7 +1326,6 @@@ label.colour_by_text = Colorear por tex
  label.graduated_colour = Color graduado
  label.by_text_of = Por texto de
  label.by_range_of = Por rango de
 -label.filters_tooltip = Haga clic para configurar o modificar los filtros
  label.or = O
  label.and = Y
  label.sequence_feature_colours = Colores de caracterĆ­sticas de las secuencias
@@@ -1336,59 -1364,4 +1336,60 @@@ label.most_bound_molecules = MĆ”s MolĆ©cu
  label.most_polymer_residues = MĆ”s Residuos de PolĆ­meros
  label.cached_structures = Estructuras en CachĆ©
  label.free_text_search = BĆŗsqueda de texto libre
 +label.backupfiles_confirm_delete = Confirmar borrar
 +label.backupfiles_confirm_delete_old_files = ĀæBorrar los siguientes archivos? (ver la pestaƱa 'Copias' de la ventana de Preferencias para mĆ”s opciones)
 +label.backupfiles_confirm_save_file = Confirmar guardar archivo
 +label.backupfiles_confirm_save_file_backupfiles_roll_wrong = Posiblemente algo estĆ” mal con los archivos de respaldos.
 +label.backupfiles_confirm_save_new_saved_file_ok = El nuevo archivo guardado parece estar bien.
 +label.backupfiles_confirm_save_new_saved_file_not_ok = El nuevo archivo guardado podrĆ­a no estar bien.
 +label.backups = Respaldos
 +label.backup = Respaldo
 +label.backup_files = Archivos de respaldos
 +label.enable_backupfiles = Habilitar archivos de respaldos
 +label.backup_filename_strategy = Estrategia de nombres de archivo de respaldos
 +label.append_to_filename = Adjuntar texto (%n es reemplazado por el nĆŗmero de respaldo)
 +label.append_to_filename_tooltip = %n en el texto serĆ” reemplazado por el nĆŗmero de respaldo. El texto serĆ” despuĆ©s del nombre del archivo. Vea el cuadro de resumen arriba.
 +label.index_digits = NĆŗmero de dĆ­gitos a utilizar para el nĆŗmero de respaldo.
 +label.summary_of_backups_scheme = Resumen del esquema de copias de seguridad
 +label.increment_index = Aumente los nĆŗmeros de texto adjuntos: el archivo mĆ”s nuevo tiene el nĆŗmero mĆ”s grande
 +label.reverse_roll = Ciclos de texto adjuntos: el respaldo mĆ”s reciente es siempre el nĆŗmero 1
 +label.keep_files = Borrando los respaldos antiguos
 +label.keep_all_backup_files = No borrar respaldos antiguas
 +label.keep_only_this_number_of_backup_files = Mantenga solo este nĆŗmero de respaldos mĆ”s recientes
 +label.autodelete_old_backup_files = Borrer automĆ”ticamente respaldos antiguos:
 +label.always_ask = Pregunta siempre
 +label.auto_delete = Borrer automĆ”ticamente
 +label.filename = nombre_de_archivo
 +label.braced_oldest = (mas antiguo)
 +label.braced_newest = (mas nuevo)
 +label.configuration = ConfiguraciĆ³n
 +label.configure_feature_tooltip = Haga clic para configurar el color o los filtros
 +label.schemes = Esquemas
 +label.customise = Personalizado
 +label.default = Defecto
 +label.single_file = Solo uno respaldo
 +label.keep_all_versions = Mantener todas las versiones
 +label.rolled_backups = Ciclos respaldos
 +label.previously_saved_scheme = Esquema previamente guardado
 +label.no_backup_files = NO ARCHIVOS DE RESPALDOS
 +label.include_backup_files = Incluir archivos de respaldos
 +label.cancel_changes = Cancelar cambios
 +label.warning_confirm_change_reverse = Ā”Advertencia!\nSi cambia el incremento/decremento del nĆŗmero de archivos de respaldos, sin cambiar el sufijo o nĆŗmero de dĆ­gitos,\nesto puede causar la pĆ©rdida de los archivos de respaldos creados con el esquema anterior de nombre de archivo de respaldos.\nĀæEstĆ” seguro de que desea hacer esto?
 +label.change_increment_decrement = ĀæCambiar de incremento/decremento?
 +label.was_previous = era {0}
 +label.newerdelete_replacement_line = El archivo de respaldo\n''{0}''\t(modificado {2}, tamaƱo {4})\nserĆ” borrado y reemplazarse por un archivo aparentemente mĆ”s antiguo\n''{1}''\t(modificado {3}, tamaƱo {5}).
 +label.confirm_deletion_or_rename = Confirmar borrar ''{0}'', o cambiar el nombre a ''{1}''?
 +label.newerdelete_line = El archivo de respaldo\n''{0}''\t(modificado {2}, tamaƱo {4})\nserĆ” borrado pero es mas nuevo que el archivo de respaldo restante mĆ”s antiguo\n''{1}''\t(modified {3}, size {5}).
 +label.confirm_deletion = Confirmar eliminar ''{0}''?
 +label.delete = Borrar
 +label.rename = Cambiar
 +label.keep = Mantener
 +label.file_info = (modificado {0}, tamaƱo {1})
 +label.annotation_name = Nombre de la anotaciĆ³n
 +label.annotation_description = DescripciĆ³n de la anotaciĆ³n 
 +label.edit_annotation_name_description = Editar el nombre/descripciĆ³n de la anotaciĆ³n
 +label.alignment = alineamiento
 +label.pca = ACP
 +label.create_image_of = Crear imagen {0} de {1}
 +label.click_to_edit = Haga clic para editar, clic en el botĆ³n derecho para ver el menĆŗ  
+ label.by_annotation_tooltip = El color de anotaciĆ³n se configura desde el menĆŗ principal de colores
@@@ -24,7 -24,6 +24,7 @@@ import jalview.analysis.AlignmentSorter
  import jalview.analysis.AlignmentUtils;
  import jalview.analysis.CrossRef;
  import jalview.analysis.Dna;
 +import jalview.analysis.GeneticCodeI;
  import jalview.analysis.ParseProperties;
  import jalview.analysis.SequenceIdMatcher;
  import jalview.api.AlignExportSettingI;
@@@ -65,7 -64,6 +65,7 @@@ import jalview.gui.ColourMenuHelper.Col
  import jalview.gui.ViewSelectionMenu.ViewSetProvider;
  import jalview.io.AlignmentProperties;
  import jalview.io.AnnotationFile;
 +import jalview.io.BackupFiles;
  import jalview.io.BioJsHTMLOutput;
  import jalview.io.DataSourceType;
  import jalview.io.FileFormat;
@@@ -136,6 -134,7 +136,7 @@@ import java.util.Hashtable
  import java.util.List;
  import java.util.Vector;
  
+ import javax.swing.ButtonGroup;
  import javax.swing.JCheckBoxMenuItem;
  import javax.swing.JEditorPane;
  import javax.swing.JInternalFrame;
@@@ -735,9 -734,9 +736,9 @@@ public class AlignFrame extends GAlignF
  
      int aSize = alignPanels.size();
  
 -    tabbedPane.setVisible(aSize > 1 || ap.av.viewName != null);
 +    tabbedPane.setVisible(aSize > 1 || ap.av.getViewName() != null);
  
 -    if (aSize == 1 && ap.av.viewName == null)
 +    if (aSize == 1 && ap.av.getViewName() == null)
      {
        this.getContentPane().add(ap, BorderLayout.CENTER);
      }
  
        expandViews.setEnabled(true);
        gatherViews.setEnabled(true);
 -      tabbedPane.addTab(ap.av.viewName, ap);
 +      tabbedPane.addTab(ap.av.getViewName(), ap);
  
        ap.setVisible(false);
      }
      gatherViews.setEnabled(true);
      tabbedPane.setVisible(true);
      AlignmentPanel first = alignPanels.get(0);
 -    tabbedPane.addTab(first.av.viewName, first);
 +    tabbedPane.addTab(first.av.getViewName(), first);
      this.getContentPane().add(tabbedPane, BorderLayout.CENTER);
    }
  
     * @param av
     *          AlignViewport
     */
 -  void setMenusFromViewport(AlignViewport av)
 +  public void setMenusFromViewport(AlignViewport av)
    {
      padGapsMenuitem.setSelected(av.isPadGaps());
      colourTextMenuItem.setSelected(av.isShowColourText());
      return progressBar.operationInProgress();
    }
  
 +  /**
 +   * Sets the text of the status bar. Note that setting a null or empty value
 +   * will cause the status bar to be hidden, with possibly undesirable flicker
 +   * of the screen layout.
 +   */
    @Override
    public void setStatus(String text)
    {
                  shortName.lastIndexOf(java.io.File.separatorChar) + 1);
        }
  
 -      success = new Jalview2XML().saveAlignment(this, file, shortName);
 +      success = new jalview.project.Jalview2XML().saveAlignment(this, file,
 +              shortName);
  
        statusBar.setText(MessageManager.formatMessage(
                "label.successfully_saved_to_file_in_format", new Object[]
        }
        else
        {
 +        // create backupfiles object and get new temp filename destination
 +        BackupFiles backupfiles = new BackupFiles(file);
 +
          try
          {
 -          PrintWriter out = new PrintWriter(new FileWriter(file));
 +          PrintWriter out = new PrintWriter(
 +                  new FileWriter(backupfiles.getTempFilePath()));
  
            out.print(output);
            out.close();
            success = false;
            ex.printStackTrace();
          }
 +
 +        backupfiles.setWriteSuccess(success);
 +        // do the backup file roll and rename the temp file to actual file
 +        success = backupfiles.rollBackupsAndRenameTempFile();
 +
        }
      }
  
    @Override
    public void selectAllSequenceMenuItem_actionPerformed(ActionEvent e)
    {
 -    SequenceGroup sg = new SequenceGroup();
 -
 -    for (int i = 0; i < viewport.getAlignment().getSequences().size(); i++)
 -    {
 -      sg.addSequence(viewport.getAlignment().getSequenceAt(i), false);
 -    }
 +    SequenceGroup sg = new SequenceGroup(
 +            viewport.getAlignment().getSequences());
  
      sg.setEndRes(viewport.getAlignment().getWidth() - 1);
      viewport.setSelectionGroup(sg);
 +    viewport.isSelectionGroupChanged(true);
      viewport.sendSelection();
      // JAL-2034 - should delegate to
      // alignPanel to decide if overview needs
      /*
       * Create a new AlignmentPanel (with its own, new Viewport)
       */
 -    AlignmentPanel newap = new Jalview2XML().copyAlignPanel(alignPanel);
 +    AlignmentPanel newap = new jalview.project.Jalview2XML()
 +            .copyAlignPanel(alignPanel);
      if (!copyAnnotation)
      {
        /*
  
      newap.av.setGatherViewsHere(false);
  
 -    if (viewport.viewName == null)
 +    if (viewport.getViewName() == null)
      {
 -      viewport.viewName = MessageManager
 -              .getString("label.view_name_original");
 +      viewport.setViewName(MessageManager
 +              .getString("label.view_name_original"));
      }
  
      /*
      newap.av.setRedoList(viewport.getRedoList());
  
      /*
 +     * copy any visualisation settings that are not saved in the project
 +     */
 +    newap.av.setColourAppliesToAllGroups(
 +            viewport.getColourAppliesToAllGroups());
 +
 +    /*
       * Views share the same mappings; need to deregister any new mappings
       * created by copyAlignPanel, and register the new reference to the shared
       * mappings
        newap.refresh(true); // adjust layout of annotations
      }
  
 -    newap.av.viewName = getNewViewName(viewTitle);
 +    newap.av.setViewName(getNewViewName(viewTitle));
  
      addAlignmentPanel(newap, true);
      newap.alignmentChanged();
        if (comp instanceof AlignmentPanel)
        {
          AlignmentPanel ap = (AlignmentPanel) comp;
 -        if (!existingNames.contains(ap.av.viewName))
 +        if (!existingNames.contains(ap.av.getViewName()))
          {
 -          existingNames.add(ap.av.viewName);
 +          existingNames.add(ap.av.getViewName());
          }
        }
      }
      viewport.setFollowHighlight(state);
      if (state)
      {
 -      alignPanel.scrollToPosition(viewport.getSearchResults(), false);
 +      alignPanel.scrollToPosition(viewport.getSearchResults());
      }
    }
  
      viewport.expandColSelection(sg, false);
      viewport.hideAllSelectedSeqs();
      viewport.hideSelectedColumns();
 +    alignPanel.updateLayout();
      alignPanel.paintAlignment(true, true);
      viewport.sendSelection();
    }
    public void hideSelColumns_actionPerformed(ActionEvent e)
    {
      viewport.hideSelectedColumns();
 +    alignPanel.updateLayout();
      alignPanel.paintAlignment(true, true);
      viewport.sendSelection();
    }
  
      frameTitle += " from ";
  
 -    if (viewport.viewName != null)
 +    if (viewport.getViewName() != null)
      {
 -      frameTitle += viewport.viewName + " of ";
 +      frameTitle += viewport.getViewName() + " of ";
      }
  
      frameTitle += this.title;
     * frame's DNA sequences to their aligned protein (amino acid) equivalents.
     */
    @Override
 -  public void showTranslation_actionPerformed(ActionEvent e)
 +  public void showTranslation_actionPerformed(GeneticCodeI codeTable)
    {
      AlignmentI al = null;
      try
      {
        Dna dna = new Dna(viewport, viewport.getViewAsVisibleContigs(true));
  
 -      al = dna.translateCdna();
 +      al = dna.translateCdna(codeTable);
      } catch (Exception ex)
      {
        jalview.bin.Cache.log.error(
        af.setFileFormat(this.currentFileFormat);
        final String newTitle = MessageManager
                .formatMessage("label.translation_of_params", new Object[]
 -              { this.getTitle() });
 +              { this.getTitle(), codeTable.getId() });
        af.setTitle(newTitle);
        if (Cache.getDefault(Preferences.ENABLE_SPLIT_FRAME, true))
        {
  
        if (reply != null)
        {
 -        viewport.viewName = reply;
 +        viewport.setViewName(reply);
          // TODO warn if reply is in getExistingViewNames()?
          tabbedPane.setTitleAt(tabbedPane.getSelectedIndex(), reply);
        }
     */
    public List<? extends AlignmentViewPanel> getAlignPanels()
    {
 -    return alignPanels == null ? Arrays.asList(alignPanel) : alignPanels;
 +    // alignPanels is never null
 +    // return alignPanels == null ? Arrays.asList(alignPanel) : alignPanels;
 +    return alignPanels;
    }
  
    /**
      colourMenu.add(textColour);
      colourMenu.addSeparator();
  
-     ColourMenuHelper.addMenuItems(colourMenu, this, viewport.getAlignment(),
-             false);
+     ButtonGroup bg = ColourMenuHelper.addMenuItems(colourMenu, this,
+             viewport.getAlignment(), false);
  
+     colourMenu.add(annotationColour);
+     bg.add(annotationColour);
      colourMenu.addSeparator();
      colourMenu.add(conservationMenuItem);
      colourMenu.add(modifyConservation);
      colourMenu.add(abovePIDThreshold);
      colourMenu.add(modifyPID);
-     colourMenu.add(annotationColour);
  
      ColourSchemeI colourScheme = viewport.getGlobalColourScheme();
      ColourMenuHelper.setColourSelected(colourMenu, colourScheme);
@@@ -46,6 -46,7 +46,7 @@@ import jalview.schemes.Blosum62ColourSc
  import jalview.schemes.ColourSchemeI;
  import jalview.schemes.ColourSchemes;
  import jalview.schemes.PIDColourScheme;
+ import jalview.schemes.ResidueColourScheme;
  import jalview.util.GroupUrlLink;
  import jalview.util.GroupUrlLink.UrlStringTooLongException;
  import jalview.util.MessageManager;
@@@ -68,11 -69,13 +69,13 @@@ import java.util.SortedMap
  import java.util.TreeMap;
  import java.util.Vector;
  
+ import javax.swing.ButtonGroup;
  import javax.swing.JCheckBoxMenuItem;
  import javax.swing.JColorChooser;
  import javax.swing.JMenu;
  import javax.swing.JMenuItem;
  import javax.swing.JPopupMenu;
+ import javax.swing.JRadioButtonMenuItem;
  
  /**
   * DOCUMENT ME!
@@@ -92,6 -95,8 +95,8 @@@ public class PopupMenu extends JPopupMe
  
    protected JCheckBoxMenuItem conservationMenuItem = new JCheckBoxMenuItem();
  
+   protected JRadioButtonMenuItem annotationColour;
    protected JMenuItem modifyConservation = new JMenuItem();
  
    AlignmentPanel ap;
          }
        }
      }
 -    // for the case when no sequences are even visible
 +
 +    /*
 +     * offer 'Reveal All'
 +     * - in the IdPanel (seq not null) if any sequence is hidden
 +     * - in the IdPanel or SeqPanel if all sequences are hidden (seq is null)
 +     */
      if (alignPanel.av.hasHiddenRows())
      {
 +      boolean addOption = seq != null;
 +      if (!addOption && alignPanel.av.getAlignment().getHeight() == 0)
 +      {
 +        addOption = true;
 +      }
 +      if (addOption)
        {
          menuItem = new JMenuItem(
                  MessageManager.getString("action.reveal_all"));
              }
            }
          });
 -
          add(menuItem);
        }
      }
        }
      });
  
+     annotationColour = new JRadioButtonMenuItem(
+             MessageManager.getString("action.by_annotation"));
+     annotationColour.setName(ResidueColourScheme.ANNOTATION_COLOUR);
+     annotationColour.setEnabled(false);
+     annotationColour.setToolTipText(
+             MessageManager.getString("label.by_annotation_tooltip"));
      modifyConservation.setText(MessageManager
              .getString("label.modify_conservation_threshold"));
      modifyConservation.addActionListener(new ActionListener()
      colourMenu.add(textColour);
      colourMenu.addSeparator();
  
-     ColourMenuHelper.addMenuItems(colourMenu, this, sg, false);
+     ButtonGroup bg = ColourMenuHelper.addMenuItems(colourMenu, this, sg,
+             false);
+     bg.add(annotationColour);
+     colourMenu.add(annotationColour);
  
      colourMenu.addSeparator();
      colourMenu.add(conservationMenuItem);
  package jalview.jbgui;
  
  import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
 +import jalview.analysis.GeneticCodeI;
 +import jalview.analysis.GeneticCodes;
  import jalview.api.SplitContainerI;
  import jalview.bin.Cache;
  import jalview.gui.JvSwingUtils;
  import jalview.gui.Preferences;
  import jalview.io.FileFormats;
+ import jalview.schemes.ResidueColourScheme;
  import jalview.util.MessageManager;
  import jalview.util.Platform;
  
@@@ -77,7 -76,7 +78,7 @@@ public class GAlignFrame extends JInter
  
    protected JMenu sortByAnnotScore = new JMenu();
  
 -  public JLabel statusBar = new JLabel();
 +  protected JLabel statusBar = new JLabel();
  
    protected JMenu outputTextboxMenu = new JMenu();
  
  
    protected JMenuItem modifyPID;
  
-   protected JMenuItem annotationColour;
+   protected JRadioButtonMenuItem annotationColour;
  
    protected JMenu sortByTreeMenu = new JMenu();
  
  
    protected JCheckBoxMenuItem showDbRefsMenuitem = new JCheckBoxMenuItem();
  
 -  protected JMenuItem showTranslation = new JMenuItem();
 +  protected JMenu showTranslation = new JMenu();
  
    protected JMenuItem showReverse = new JMenuItem();
  
          vamsasStore_actionPerformed(e);
        }
      });
 -    showTranslation
 -            .setText(MessageManager.getString("label.translate_cDNA"));
 -    showTranslation.addActionListener(new ActionListener()
 -    {
 -      @Override
 -      public void actionPerformed(ActionEvent e)
 +
 +    /*
 +     * Translate as cDNA with sub-menu of translation tables
 +     */
 +    showTranslation.setText(MessageManager
 +            .getString("label.translate_cDNA"));
 +    boolean first = true;
 +    for (final GeneticCodeI table : GeneticCodes.getInstance()
 +            .getCodeTables())
 +    {
 +      JMenuItem item = new JMenuItem(table.getId() + " " + table.getName());
 +      showTranslation.add(item);
 +      item.addActionListener(new ActionListener()
 +      {
 +        @Override
 +        public void actionPerformed(ActionEvent e)
 +        {
 +          showTranslation_actionPerformed(table);
 +        }
 +      });
 +      if (first)
        {
 -        showTranslation_actionPerformed(e);
 +        showTranslation.addSeparator();
        }
 -    });
 +      first = false;
 +    }
 +
      showReverse.setText(MessageManager.getString("label.reverse"));
      showReverse.addActionListener(new ActionListener()
      {
        }
      });
  
-     annotationColour = new JMenuItem(
+     annotationColour = new JRadioButtonMenuItem(
              MessageManager.getString("action.by_annotation"));
+     annotationColour.setName(ResidueColourScheme.ANNOTATION_COLOUR);
      annotationColour.addActionListener(new ActionListener()
      {
        @Override
  
    }
  
 -  public void showTranslation_actionPerformed(ActionEvent e)
 +  public void showTranslation_actionPerformed(GeneticCodeI codeTable)
    {
  
    }
@@@ -414,17 -414,14 +414,17 @@@ public class AnnotationColourGradient e
              && aboveAnnotationThreshold == ABOVE_THRESHOLD
              && value >= ann.threshold.value)
      {
 -      range = (value - ann.threshold.value)
 +      range = ann.graphMax == ann.threshold.value ? 1f
 +              : (value - ann.threshold.value)
                / (ann.graphMax - ann.threshold.value);
      }
      else if (thresholdIsMinMax && ann.threshold != null
              && aboveAnnotationThreshold == BELOW_THRESHOLD
              && value <= ann.threshold.value)
      {
 -      range = (value - ann.graphMin) / (ann.threshold.value - ann.graphMin);
 +      range = ann.graphMin == ann.threshold.value ? 0f
 +              : (value - ann.graphMin)
 +                      / (ann.threshold.value - ann.graphMin);
      }
      else
      {
    @Override
    public String getSchemeName()
    {
-     return "Annotation";
+     return ANNOTATION_COLOUR;
    }
  
    @Override