diff --git a/src/zmapWindow/zmapWindowMenus.c b/src/zmapWindow/zmapWindowMenus.c index 09ea447a4a88f6046d6456702e933395c08e39d6..4888d47af933ff27d141a635f8ed159c630dedf7 100755 --- a/src/zmapWindow/zmapWindowMenus.c +++ b/src/zmapWindow/zmapWindowMenus.c @@ -27,14 +27,15 @@ * Exported functions: ZMap/zmapWindows.h * * HISTORY: - * Last edited: Sep 24 10:18 2008 (edgrif) + * Last edited: Nov 3 14:00 2008 (rds) * Created: Thu Mar 10 07:56:27 2005 (edgrif) - * CVS info: $Id: zmapWindowMenus.c,v 1.46 2008-09-24 15:21:01 edgrif Exp $ + * CVS info: $Id: zmapWindowMenus.c,v 1.47 2008-11-03 14:19:25 rds Exp $ *------------------------------------------------------------------- */ #include <string.h> #include <ZMap/zmapUtils.h> +#include <ZMap/zmapGLibUtils.h> /* zMap_g_hash_table_nth */ #include <ZMap/zmapFASTA.h> #include <ZMap/zmapGFF.h> #include <ZMap/zmapPeptide.h> @@ -92,7 +93,7 @@ typedef struct GArray **array; }AlignBlockMenuStruct, *AlignBlockMenu; - +static void compressMenuCB(int menu_item_id, gpointer callback_data); static void configureMenuCB(int menu_item_id, gpointer callback_data) ; static void bumpToInitialCB(int menu_item_id, gpointer callback_data); static void bumpMenuCB(int menu_item_id, gpointer callback_data) ; @@ -151,24 +152,26 @@ ZMapGUIMenuItem zmapWindowMakeMenuBump(int *start_index_inout, { static ZMapGUIMenuItemStruct menu[] = { - {ZMAPGUI_MENU_TOGGLE, "Column Bump", ZMAPOVERLAP_COMPLETE, bumpToggleMenuCB, NULL}, - {ZMAPGUI_MENU_NORMAL, "Column Hide", ZMAPWINDOWCOLUMN_HIDE, configureMenuCB, NULL}, - {ZMAPGUI_MENU_BRANCH, "Column Configure", 0, NULL, NULL}, - {ZMAPGUI_MENU_NORMAL, "Column Configure/Configure This Column", ZMAPWINDOWCOLUMN_CONFIGURE, configureMenuCB, NULL}, - {ZMAPGUI_MENU_NORMAL, "Column Configure/Configure All Columns", ZMAPWINDOWCOLUMN_CONFIGURE_ALL, configureMenuCB, NULL}, - {ZMAPGUI_MENU_BRANCH, "Column Bump More Opts", 0, NULL, NULL}, - {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/Compact Interleave", ZMAPOVERLAP_COMPLEX_INTERLEAVE, bumpMenuCB, NULL}, - {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/Compact No Interleave", ZMAPOVERLAP_COMPLEX_NO_INTERLEAVE, bumpMenuCB, NULL}, - {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/Compact In Mark Region", ZMAPOVERLAP_COMPLEX_RANGE, bumpMenuCB, NULL}, - {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/Compact In Mark Region & Colinear", ZMAPOVERLAP_COMPLEX_LIMIT, bumpMenuCB, NULL}, - {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/Best 5'& 3' Matches", ZMAPOVERLAP_ENDS_RANGE, bumpMenuCB, NULL}, - {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/By Match", ZMAPOVERLAP_NAME, bumpMenuCB, NULL}, - {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/By Overlap", ZMAPOVERLAP_OVERLAP, bumpMenuCB, NULL}, - {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/By Start Position", ZMAPOVERLAP_POSITION, bumpMenuCB, NULL}, - {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/Two Columns", ZMAPOVERLAP_OSCILLATE, bumpMenuCB, NULL}, - {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/Bump All", ZMAPOVERLAP_SIMPLE, bumpMenuCB, NULL}, - {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/Unbump", ZMAPOVERLAP_COMPLETE, bumpMenuCB, NULL}, - {ZMAPGUI_MENU_NORMAL, "Unbump All Columns", 0, bumpToInitialCB, NULL}, + {ZMAPGUI_MENU_TOGGLE, "Column Bump", ZMAPOVERLAP_COMPLETE, bumpToggleMenuCB, NULL, "B"}, + {ZMAPGUI_MENU_NORMAL, "Column Hide", ZMAPWINDOWCOLUMN_HIDE, configureMenuCB, NULL}, + {ZMAPGUI_MENU_BRANCH, "Column Configure", 0, NULL, NULL}, + {ZMAPGUI_MENU_NORMAL, "Column Configure/Configure This Column", ZMAPWINDOWCOLUMN_CONFIGURE, configureMenuCB, NULL}, + {ZMAPGUI_MENU_NORMAL, "Column Configure/Configure All Columns", ZMAPWINDOWCOLUMN_CONFIGURE_ALL, configureMenuCB, NULL}, + {ZMAPGUI_MENU_BRANCH, "Column Bump More Opts", 0, NULL, NULL}, + {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/Compact Interleave", ZMAPOVERLAP_COMPLEX_INTERLEAVE, bumpMenuCB, NULL}, + {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/Compact No Interleave", ZMAPOVERLAP_COMPLEX_NO_INTERLEAVE, bumpMenuCB, NULL}, + {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/Compact In Mark Region", ZMAPOVERLAP_COMPLEX_RANGE, bumpMenuCB, NULL}, + {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/Compact In Mark Region & Colinear", ZMAPOVERLAP_COMPLEX_LIMIT, bumpMenuCB, NULL}, + {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/Best 5'& 3' Matches", ZMAPOVERLAP_ENDS_RANGE, bumpMenuCB, NULL}, + {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/By Match", ZMAPOVERLAP_NAME, bumpMenuCB, NULL}, + {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/By Overlap", ZMAPOVERLAP_OVERLAP, bumpMenuCB, NULL}, + {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/By Start Position", ZMAPOVERLAP_POSITION, bumpMenuCB, NULL}, + {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/Two Columns", ZMAPOVERLAP_OSCILLATE, bumpMenuCB, NULL}, + {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/Bump All", ZMAPOVERLAP_SIMPLE, bumpMenuCB, NULL}, + {ZMAPGUI_MENU_RADIO, "Column Bump More Opts/Unbump", ZMAPOVERLAP_COMPLETE, bumpMenuCB, NULL}, + {ZMAPGUI_MENU_NORMAL, "Unbump All Columns", 0, bumpToInitialCB, NULL}, + {ZMAPGUI_MENU_NORMAL, "Compress Columns", ZMAPWINDOW_COMPRESS_MARK, compressMenuCB, NULL, "c"}, + {ZMAPGUI_MENU_NORMAL, "UnCompress Columns", ZMAPWINDOW_COMPRESS_VISIBLE, compressMenuCB, NULL, "<shift>C"}, {ZMAPGUI_MENU_NONE, NULL, 0, NULL, NULL} } ; ZMapGUIMenuItem item ; @@ -658,6 +661,30 @@ static void peptideMenuCB(int menu_item_id, gpointer callback_data) } +static void compressMenuCB(int menu_item_id, gpointer callback_data) +{ + ItemMenuCBData menu_data = (ItemMenuCBData)callback_data ; + ZMapWindowCompressMode compress_mode = (ZMapWindowCompressMode)menu_item_id ; + FooCanvasGroup *column_group ; + + if (menu_data->item) + column_group = FOO_CANVAS_GROUP(menu_data->item) ; + + if(compress_mode != ZMAPWINDOW_COMPRESS_VISIBLE) + { + if (zmapWindowMarkIsSet(menu_data->window->mark)) + compress_mode = ZMAPWINDOW_COMPRESS_MARK ; + else + compress_mode = ZMAPWINDOW_COMPRESS_ALL ; + } + + zmapWindowColumnsCompress(FOO_CANVAS_ITEM(column_group), menu_data->window, compress_mode) ; + + g_free(menu_data) ; + + return ; + +} /* Configure a column, may mean repositioning the other columns. */ @@ -906,6 +933,12 @@ static void blixemMenuCB(int menu_item_id, gpointer callback_data) feature = g_object_get_data(G_OBJECT(menu_data->item), ITEM_FEATURE_DATA) ; zMapAssert(feature) ; /* something badly wrong if no feature. */ + if(feature->struct_type == ZMAPFEATURE_STRUCT_FEATURESET) + { + /* need to fix implicit dec here! */ + feature = zMap_g_hash_table_nth(((ZMapFeatureSet)feature)->features, 0); + } + align.cmd = ZMAPWINDOW_CMD_SHOWALIGN ; align.feature = feature ; align.obey_protein_featuresets = FALSE;