Now when a column is added to a view, if there is a line selection, all
columns in the view are cloned first
This commit is contained in:
@ -471,7 +471,6 @@ Obiview_p obi_new_view(OBIDMS_p dms, const char* view_name, Obiview_p view_to_cl
|
|||||||
}
|
}
|
||||||
|
|
||||||
view->dms = dms;
|
view->dms = dms;
|
||||||
view->column_count = view_to_clone->column_count;
|
|
||||||
|
|
||||||
// If the view to clone has an associated line selection and there is no new line selection, open the associated line selection
|
// If the view to clone has an associated line selection and there is no new line selection, open the associated line selection
|
||||||
if ((view_to_clone->line_selection != NULL) && (line_selection == NULL))
|
if ((view_to_clone->line_selection != NULL) && (line_selection == NULL))
|
||||||
@ -530,12 +529,14 @@ Obiview_p obi_new_view(OBIDMS_p dms, const char* view_name, Obiview_p view_to_cl
|
|||||||
(view->columns)[i] = obi_open_column(dms, (((view_to_clone->columns)[i])->header)->name, (((view_to_clone->columns)[i])->header)->version);
|
(view->columns)[i] = obi_open_column(dms, (((view_to_clone->columns)[i])->header)->name, (((view_to_clone->columns)[i])->header)->version);
|
||||||
if ((view->columns)[i] == NULL)
|
if ((view->columns)[i] == NULL)
|
||||||
{
|
{
|
||||||
obi_close_column(view->line_selection);
|
if (view->line_selection != NULL)
|
||||||
|
obi_close_column(view->line_selection);
|
||||||
free(view);
|
free(view);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
view->column_count = view_to_clone->column_count;
|
||||||
strcpy(view->view_type, view_to_clone->view_type);
|
strcpy(view->view_type, view_to_clone->view_type);
|
||||||
strcpy(view->created_from, view_to_clone->name);
|
strcpy(view->created_from, view_to_clone->name);
|
||||||
view->new_line_selection = NULL;
|
view->new_line_selection = NULL;
|
||||||
@ -599,6 +600,8 @@ Obiview_p obi_new_view_nuc_seqs(OBIDMS_p dms, const char* view_name, Obiview_p v
|
|||||||
|
|
||||||
if (view_to_clone == NULL)
|
if (view_to_clone == NULL)
|
||||||
{
|
{
|
||||||
|
// TODO Add quality column?
|
||||||
|
|
||||||
// Adding sequence column
|
// Adding sequence column
|
||||||
if (obi_view_add_column(view, NUC_SEQUENCE_COLUMN, -1, OBI_SEQ, 0, 1, NUC_SEQUENCE_COLUMN, NUC_SEQUENCE_INDEXER, "Nucleotide sequences", true) < 0)
|
if (obi_view_add_column(view, NUC_SEQUENCE_COLUMN, -1, OBI_SEQ, 0, 1, NUC_SEQUENCE_COLUMN, NUC_SEQUENCE_INDEXER, "Nucleotide sequences", true) < 0)
|
||||||
{
|
{
|
||||||
@ -809,7 +812,10 @@ int obi_view_add_column(Obiview_p view,
|
|||||||
const char* comments,
|
const char* comments,
|
||||||
bool create) // all infos for creation or open
|
bool create) // all infos for creation or open
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
OBIDMS_column_p column;
|
OBIDMS_column_p column;
|
||||||
|
OBIDMS_column_p column_buffer;
|
||||||
|
OBIDMS_column_p current_line_selection;
|
||||||
|
|
||||||
// Check that the view is not read-only
|
// Check that the view is not read-only
|
||||||
if (view->read_only)
|
if (view->read_only)
|
||||||
@ -819,6 +825,48 @@ int obi_view_add_column(Obiview_p view,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If there is a line selection, clone the columns to delete it
|
||||||
|
if (view->new_line_selection != NULL) // TODO Probably shouldn't happen, trigger error?
|
||||||
|
current_line_selection = view->new_line_selection;
|
||||||
|
else
|
||||||
|
current_line_selection = view->line_selection;
|
||||||
|
|
||||||
|
if (current_line_selection != NULL)
|
||||||
|
{
|
||||||
|
for (i=0; i<(view->column_count); i++)
|
||||||
|
{
|
||||||
|
{ // Clone with the right line selection and replace for all columns
|
||||||
|
// Save pointer to close column after cloning
|
||||||
|
column_buffer = (view->columns)[i];
|
||||||
|
|
||||||
|
// Clone and replace the column in the view
|
||||||
|
(view->columns)[i] = obi_clone_column(view->dms, current_line_selection, (((view->columns)[i])->header)->name, (((view->columns)[i])->header)->version, 1);
|
||||||
|
if ((view->columns)[i] == NULL)
|
||||||
|
{
|
||||||
|
obi_set_errno(OBIVIEW_ERROR);
|
||||||
|
obidebug(1, "\nError cloning a column to replace in a view");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close old cloned column
|
||||||
|
obi_close_column(column_buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close old line selections
|
||||||
|
if (view->line_selection != NULL)
|
||||||
|
{
|
||||||
|
obi_close_column(view->line_selection);
|
||||||
|
view->line_selection = NULL;
|
||||||
|
}
|
||||||
|
if (view->new_line_selection != NULL)
|
||||||
|
{
|
||||||
|
obi_close_column(view->new_line_selection);
|
||||||
|
view->new_line_selection = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the line count
|
||||||
if (view->line_count > nb_lines)
|
if (view->line_count > nb_lines)
|
||||||
nb_lines = view->line_count;
|
nb_lines = view->line_count;
|
||||||
else if (nb_lines > view->line_count)
|
else if (nb_lines > view->line_count)
|
||||||
@ -905,7 +953,7 @@ OBIDMS_column_p obi_view_get_column(Obiview_p view, const char* column_name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
OBIDMS_column_p* obi_view_get_pointer_on_column_in_view(Obiview_p view, const char* column_name)
|
OBIDMS_column_p* obi_view_get_pointer_on_column_in_view(Obiview_p view, const char* column_name) // TODO delete?
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user