From 7c9c2c5abb1620849e878590afdf6c4c4b9da605 Mon Sep 17 00:00:00 2001 From: rds <rds> Date: Fri, 13 Feb 2009 10:39:21 +0000 Subject: [PATCH] implementing feature in RT ticket #95467 --- src/zmapWindow/zmapWindow.c | 51 +++++++++++++++++++++++- src/zmapWindow/zmapWindowFeature.c | 14 +++++-- src/zmapWindow/zmapWindowMenus.c | 62 ++++++++++++++++++++++++------ 3 files changed, 110 insertions(+), 17 deletions(-) diff --git a/src/zmapWindow/zmapWindow.c b/src/zmapWindow/zmapWindow.c index d227ad235..308b0f120 100755 --- a/src/zmapWindow/zmapWindow.c +++ b/src/zmapWindow/zmapWindow.c @@ -26,9 +26,9 @@ * * Exported functions: See ZMap/zmapWindow.h * HISTORY: - * Last edited: Feb 12 16:13 2009 (edgrif) + * Last edited: Feb 13 10:19 2009 (rds) * Created: Thu Jul 24 14:36:27 2003 (edgrif) - * CVS info: $Id: zmapWindow.c,v 1.270 2009-02-12 16:14:01 edgrif Exp $ + * CVS info: $Id: zmapWindow.c,v 1.271 2009-02-13 10:39:21 rds Exp $ *------------------------------------------------------------------- */ @@ -3692,7 +3692,54 @@ static gboolean keyboardEvent(ZMapWindow window, GdkEventKey *key_event) break ; } + case GDK_a: + case GDK_A: + { + ZMapWindowCallbackCommandAlignStruct align; + ZMapWindowCallbacks window_callbacks_G = zmapWindowGetCBs(); + ZMapFeature feature; + gboolean column = FALSE; + FooCanvasItem *focus_item ; + + if ((focus_item = zmapWindowFocusGetHotItem(window->focus))) + focus_item = zmapWindowItemGetTrueItem(focus_item) ; + else + focus_item = FOO_CANVAS_ITEM(zmapWindowFocusGetHotColumn(window->focus)) ; + + feature = g_object_get_data(G_OBJECT(focus_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); + column = TRUE; + } + + if(feature->type == ZMAPSTYLE_MODE_ALIGNMENT) + { + align.cmd = ZMAPWINDOW_CMD_SHOWALIGN ; + align.feature = feature ; + align.obey_protein_featuresets = FALSE; + align.obey_dna_featuresets = FALSE; + align.single_feature = FALSE; + + if(key_event->keyval == GDK_A) + { + if(feature->feature.homol.type == ZMAPHOMOL_X_HOMOL || + feature->feature.homol.type == ZMAPHOMOL_TX_HOMOL) + align.obey_protein_featuresets = TRUE; + else if(feature->feature.homol.type == ZMAPHOMOL_N_HOMOL) + align.obey_dna_featuresets = TRUE; + } + if((!column) && (key_event->state & GDK_CONTROL_MASK)) + align.single_feature = TRUE; + + (*(window_callbacks_G->command))(window, window->app_data, &align) ; + } + } + break; case GDK_b: case GDK_B: { diff --git a/src/zmapWindow/zmapWindowFeature.c b/src/zmapWindow/zmapWindowFeature.c index 1eff4f462..e632e0726 100755 --- a/src/zmapWindow/zmapWindowFeature.c +++ b/src/zmapWindow/zmapWindowFeature.c @@ -28,9 +28,9 @@ * * Exported functions: See zmapWindow_P.h * HISTORY: - * Last edited: Feb 11 11:41 2009 (rds) + * Last edited: Feb 13 09:23 2009 (rds) * Created: Mon Jan 9 10:25:40 2006 (edgrif) - * CVS info: $Id: zmapWindowFeature.c,v 1.154 2009-02-11 15:14:38 rds Exp $ + * CVS info: $Id: zmapWindowFeature.c,v 1.155 2009-02-13 10:39:21 rds Exp $ *------------------------------------------------------------------- */ @@ -1690,9 +1690,15 @@ void zmapMakeItemMenu(GdkEventButton *button_event, ZMapWindow window, FooCanvas menu_sets = g_list_append(menu_sets, makeMenuPfetchOps(NULL, NULL, menu_data)) ; if (feature->feature.homol.type == ZMAPHOMOL_X_HOMOL) - menu_sets = g_list_append(menu_sets, zmapWindowMakeMenuProteinHomol(NULL, NULL, menu_data)) ; + { + menu_sets = g_list_append(menu_sets, zmapWindowMakeMenuProteinHomolFeature(NULL, NULL, menu_data)) ; + menu_sets = g_list_append(menu_sets, zmapWindowMakeMenuProteinHomol(NULL, NULL, menu_data)) ; + } else - menu_sets = g_list_append(menu_sets, zmapWindowMakeMenuDNAHomol(NULL, NULL, menu_data)) ; + { + menu_sets = g_list_append(menu_sets, zmapWindowMakeMenuDNAHomolFeature(NULL, NULL, menu_data)) ; + menu_sets = g_list_append(menu_sets, zmapWindowMakeMenuDNAHomol(NULL, NULL, menu_data)) ; + } } /* DNA/Peptide ops. */ diff --git a/src/zmapWindow/zmapWindowMenus.c b/src/zmapWindow/zmapWindowMenus.c index 1ba73a2e5..ec5a58852 100755 --- a/src/zmapWindow/zmapWindowMenus.c +++ b/src/zmapWindow/zmapWindowMenus.c @@ -27,9 +27,9 @@ * Exported functions: ZMap/zmapWindows.h * * HISTORY: - * Last edited: Feb 9 12:27 2009 (rds) + * Last edited: Feb 13 10:35 2009 (rds) * Created: Thu Mar 10 07:56:27 2005 (edgrif) - * CVS info: $Id: zmapWindowMenus.c,v 1.55 2009-02-09 14:55:08 rds Exp $ + * CVS info: $Id: zmapWindowMenus.c,v 1.56 2009-02-13 10:39:21 rds Exp $ *------------------------------------------------------------------- */ @@ -64,6 +64,12 @@ #define DEVELOPER_STR "Developer" +#define BLIXEM_MENU_STR "Blixem " +#define BLIXEM_DNA_STR "DNA Alignment" +#define BLIXEM_DNAS_STR BLIXEM_DNA_STR "s" +#define BLIXEM_AA_STR "Protein Alignment" +#define BLIXEM_AAS_STR BLIXEM_AA_STR "s" + /* Choose which way a transcripts dna is dumped... */ enum @@ -986,7 +992,6 @@ static void developerMenuCB(int menu_item_id, gpointer callback_data) } - /* JAMES HAS MADE THE POINT THAT ANNOTATORS ONLY EVER USE THE "JUST THIS TYPE" OPTION, SO * I'VE COMMENTED OUT THE TWO MENU OPTIONS AND REPLACED THEM WITH ONE.... */ ZMapGUIMenuItem zmapWindowMakeMenuDNAHomol(int *start_index_inout, @@ -995,9 +1000,9 @@ ZMapGUIMenuItem zmapWindowMakeMenuDNAHomol(int *start_index_inout, { static ZMapGUIMenuItemStruct menu[] = { - {ZMAPGUI_MENU_NORMAL, "Blixem (DNA alignments) [this column]", 2, blixemMenuCB, NULL}, - {ZMAPGUI_MENU_NORMAL, "Blixem (DNA alignments) [all columns]", 1, blixemMenuCB, NULL}, - {ZMAPGUI_MENU_NONE, NULL, 0, NULL, NULL} + {ZMAPGUI_MENU_NORMAL, BLIXEM_MENU_STR BLIXEM_DNAS_STR, 1, blixemMenuCB, NULL, "a"}, + {ZMAPGUI_MENU_NORMAL, BLIXEM_MENU_STR BLIXEM_DNAS_STR " - All Columns", 2, blixemMenuCB, NULL, "<shift>A"}, + {ZMAPGUI_MENU_NONE, NULL, 0, NULL, NULL} } ; @@ -1006,15 +1011,46 @@ ZMapGUIMenuItem zmapWindowMakeMenuDNAHomol(int *start_index_inout, return menu ; } +ZMapGUIMenuItem zmapWindowMakeMenuDNAHomolFeature(int *start_index_inout, + ZMapGUIMenuItemCallbackFunc callback_func, + gpointer callback_data) +{ + static ZMapGUIMenuItemStruct menu[] = + { + {ZMAPGUI_MENU_NORMAL, BLIXEM_MENU_STR BLIXEM_DNA_STR " - Feature", 3, blixemMenuCB, NULL, "<Ctrl>A"}, + {ZMAPGUI_MENU_NONE, NULL, 0, NULL, NULL} + } ; + + + zMapGUIPopulateMenu(menu, start_index_inout, callback_func, callback_data) ; + + return menu ; +} + +ZMapGUIMenuItem zmapWindowMakeMenuProteinHomolFeature(int *start_index_inout, + ZMapGUIMenuItemCallbackFunc callback_func, + gpointer callback_data) +{ + static ZMapGUIMenuItemStruct menu[] = + { + {ZMAPGUI_MENU_NORMAL, BLIXEM_MENU_STR BLIXEM_AA_STR "", 3, blixemMenuCB, NULL, "<Ctrl>A"}, + {ZMAPGUI_MENU_NONE, NULL, 0, NULL, NULL} + } ; + + zMapGUIPopulateMenu(menu, start_index_inout, callback_func, callback_data) ; + + return menu ; +} + ZMapGUIMenuItem zmapWindowMakeMenuProteinHomol(int *start_index_inout, ZMapGUIMenuItemCallbackFunc callback_func, gpointer callback_data) { static ZMapGUIMenuItemStruct menu[] = { - {ZMAPGUI_MENU_NORMAL, "Blixem (Protein alignments) [this column]", 4, blixemMenuCB, NULL}, - {ZMAPGUI_MENU_NORMAL, "Blixem (Protein alignments) [all columns]", 3, blixemMenuCB, NULL}, - {ZMAPGUI_MENU_NONE, NULL, 0, NULL, NULL} + {ZMAPGUI_MENU_NORMAL, BLIXEM_MENU_STR BLIXEM_AAS_STR, 4, blixemMenuCB, NULL, "a"}, + {ZMAPGUI_MENU_NORMAL, BLIXEM_MENU_STR BLIXEM_AAS_STR " - All Columns", 5, blixemMenuCB, NULL, "<shift>A"}, + {ZMAPGUI_MENU_NONE, NULL, 0, NULL, NULL} } ; zMapGUIPopulateMenu(menu, start_index_inout, callback_func, callback_data) ; @@ -1044,15 +1080,19 @@ static void blixemMenuCB(int menu_item_id, gpointer callback_data) align.feature = feature ; align.obey_protein_featuresets = FALSE; align.obey_dna_featuresets = FALSE; + align.single_feature = FALSE; switch(menu_item_id) { - case 1: + case 2: align.obey_dna_featuresets = TRUE; break; - case 3: + case 5: align.obey_protein_featuresets = TRUE; break; + case 3: + align.single_feature = TRUE; + break; default: break; } -- GitLab