Skip to content
Snippets Groups Projects
Commit 064bee03 authored by edgrif's avatar edgrif
Browse files

add code to allow controlling of button state. Remove some inappropriate buttons.

parent db8a1c81
No related branches found
No related tags found
No related merge requests found
......@@ -19,32 +19,26 @@
*-------------------------------------------------------------------
* This file is part of the ZMap genome database package
* and was written by
* Rob Clack (Sanger Institute, UK) rnc@sanger.ac.uk,
* Ed Griffiths (Sanger Institute, UK) edgrif@sanger.ac.uk and
* Simon Kelley (Sanger Institute, UK) srk@sanger.ac.uk
* Ed Griffiths (Sanger Institute, UK) edgrif@sanger.ac.uk
*
* Description: Implement the buttons on the zmap.
*
* Exported functions: See zmapControl_P.h
* HISTORY:
* Last edited: Jan 23 13:34 2006 (edgrif)
* Last edited: Feb 13 11:25 2006 (edgrif)
* Created: Thu Jul 24 14:36:27 2003 (edgrif)
* CVS info: $Id: zmapControlWindowButtons.c,v 1.31 2006-01-23 14:14:37 edgrif Exp $
* CVS info: $Id: zmapControlWindowButtons.c,v 1.32 2006-02-17 14:12:03 edgrif Exp $
*-------------------------------------------------------------------
*/
#include <string.h>
#include <ZMap/zmapUtils.h>
#include <ZMap/zmapWindow.h>
#include <zmapControl_P.h>
static void newCB(GtkWidget *widget, gpointer cb_data) ;
#ifdef ED_G_NEVER_INCLUDE_THIS_CODE
static void loadCB(GtkWidget *widget, gpointer cb_data) ;
#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
static void reloadCB(GtkWidget *widget, gpointer cb_data) ;
static void stopCB(GtkWidget *widget, gpointer cb_data) ;
static void zoomInCB(GtkWindow *widget, gpointer cb_data) ;
static void zoomOutCB(GtkWindow *widget, gpointer cb_data) ;
......@@ -53,18 +47,8 @@ static void horizSplitPaneCB(GtkWidget *widget, gpointer data) ;
static void unlockCB(GtkWidget *widget, gpointer data) ;
static void revcompCB(GtkWidget *widget, gpointer data) ;
static void closeWindowCB(GtkWidget *widget, gpointer data) ;
static void quitCB(GtkWidget *widget, gpointer cb_data) ;
/* This lot may need to go into a separate file sometime to give more general purpose dialog code. */
static char *getSequenceName(void) ;
static void okCB(GtkWidget *widget, gpointer cb_data) ;
static void cancelCB(GtkWidget *widget, gpointer cb_data) ;
typedef struct
{
GtkWidget *dialog ;
GtkWidget *entry ;
char *new_sequence ;
} ZmapSequenceCallbackStruct, *ZmapSequenceCallback ;
......@@ -72,11 +56,9 @@ typedef struct
GtkWidget *zmapControlWindowMakeButtons(ZMap zmap)
{
GtkWidget *hbox, *new_button,
#ifdef ED_G_NEVER_INCLUDE_THIS_CODE
*load_button,
#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
*stop_button, *quit_button,
GtkWidget *hbox,
*reload_button,
*stop_button,
*hsplit_button, *vsplit_button, *zoomin_button, *zoomout_button,
*unlock_button, *revcomp_button,
*close_button ;
......@@ -84,31 +66,22 @@ GtkWidget *zmapControlWindowMakeButtons(ZMap zmap)
hbox = gtk_hbox_new(FALSE, 0) ;
gtk_container_border_width(GTK_CONTAINER(hbox), 5);
#ifdef ED_G_NEVER_INCLUDE_THIS_CODE
/* Disabled for now, need to do work on view... */
load_button = gtk_button_new_with_label("Load") ;
gtk_signal_connect(GTK_OBJECT(load_button), "clicked",
GTK_SIGNAL_FUNC(loadCB), (gpointer)zmap) ;
gtk_box_pack_start(GTK_BOX(hbox), load_button, FALSE, FALSE, 0) ;
#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
stop_button = gtk_button_new_with_label("Stop") ;
zmap->stop_button = stop_button = gtk_button_new_with_label("Stop") ;
gtk_signal_connect(GTK_OBJECT(stop_button), "clicked",
GTK_SIGNAL_FUNC(stopCB), (gpointer)zmap) ;
gtk_box_pack_start(GTK_BOX(hbox), stop_button, FALSE, FALSE, 0) ;
new_button = gtk_button_new_with_label("New") ;
gtk_signal_connect(GTK_OBJECT(new_button), "clicked",
GTK_SIGNAL_FUNC(newCB), (gpointer)zmap) ;
gtk_box_pack_start(GTK_BOX(hbox), new_button, FALSE, FALSE, 0) ;
zmap->load_button = reload_button = gtk_button_new_with_label("Reload") ;
gtk_signal_connect(GTK_OBJECT(reload_button), "clicked",
GTK_SIGNAL_FUNC(reloadCB), (gpointer)zmap) ;
gtk_box_pack_start(GTK_BOX(hbox), reload_button, FALSE, FALSE, 0) ;
hsplit_button = gtk_button_new_with_label("H-Split");
zmap->hsplit_button = hsplit_button = gtk_button_new_with_label("H-Split");
gtk_signal_connect(GTK_OBJECT(hsplit_button), "clicked",
GTK_SIGNAL_FUNC(horizSplitPaneCB), (gpointer)zmap) ;
gtk_box_pack_start(GTK_BOX(hbox), hsplit_button, FALSE, FALSE, 0) ;
vsplit_button = gtk_button_new_with_label("V-Split");
zmap->vsplit_button = vsplit_button = gtk_button_new_with_label("V-Split");
gtk_signal_connect(GTK_OBJECT(vsplit_button), "clicked",
GTK_SIGNAL_FUNC(vertSplitPaneCB), (gpointer)zmap) ;
gtk_box_pack_start(GTK_BOX(hbox), vsplit_button, FALSE, FALSE, 0) ;
......@@ -138,27 +111,75 @@ GtkWidget *zmapControlWindowMakeButtons(ZMap zmap)
GTK_SIGNAL_FUNC(closeWindowCB), (gpointer)zmap) ;
gtk_box_pack_start(GTK_BOX(hbox), close_button, FALSE, FALSE, 0) ;
#ifdef ED_G_NEVER_INCLUDE_THIS_CODE
/* We shouldn't do things like this, we should have a "state setter" function that does
* all the setting necessary.... */
/* Make Close button the default, its probably what user wants to do mostly. */
GTK_WIDGET_SET_FLAGS(close_button, GTK_CAN_DEFAULT) ;
gtk_window_set_default(GTK_WINDOW(zmap->toplevel), close_button) ;
return hbox ;
}
gtk_widget_set_sensitive(close_button, FALSE);
#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
/* THE STATE OF SOME BUTTONS REQUIRES THE VIEW STATE TO BE SORTED OUT COMPLETELY.... */
void zmapControlWindowSetButtonState(ZMap zmap)
{
ZMapWindowZoomStatus zoom_status = ZMAP_ZOOM_INIT ;
gboolean locked = FALSE ;
gboolean stop = FALSE, load = FALSE ;
gboolean general = FALSE ;
switch(zmap->state)
{
case ZMAP_DYING:
/* Nothing to do currently... */
break ;
case ZMAP_VIEWS:
{
ZMapView view ;
ZMapWindow window ;
ZMapViewState view_state ;
zMapAssert(zmap->focus_viewwindow) ;
view = zMapViewGetView(zmap->focus_viewwindow) ;
view_state = zMapViewGetStatus(view) ;
if (view_state == ZMAPVIEW_CONNECTED)
{
stop = TRUE ;
general = FALSE ;
}
else
general = TRUE ;
window = zMapViewGetWindow(zmap->focus_viewwindow) ;
zoom_status = zMapWindowGetZoomStatus(window) ;
locked = zMapWindowIsLocked(window) ;
}
default:
{
/* Nothing to do.... */
}
}
quit_button = gtk_button_new_with_label("Quit") ;
gtk_signal_connect(GTK_OBJECT(quit_button), "clicked",
GTK_SIGNAL_FUNC(quitCB), (gpointer)zmap) ;
gtk_box_pack_start(GTK_BOX(hbox), quit_button, FALSE, FALSE, 0) ;
load = !stop ;
/* Make Quit button the default, its probably what user wants to do mostly. */
GTK_WIDGET_SET_FLAGS(quit_button, GTK_CAN_DEFAULT) ;
gtk_window_set_default(GTK_WINDOW(zmap->toplevel), quit_button) ;
gtk_widget_set_sensitive(zmap->stop_button, stop) ;
gtk_widget_set_sensitive(zmap->load_button, load) ;
gtk_widget_set_sensitive(zmap->hsplit_button, general) ;
gtk_widget_set_sensitive(zmap->vsplit_button, general) ;
zmapControlWindowSetZoomButtons(zmap, zoom_status) ;
gtk_widget_set_sensitive(zmap->unlock_but, locked) ;
gtk_widget_set_sensitive(zmap->revcomp_but, general) ;
gtk_widget_set_sensitive(zmap->close_but, general) ;
return hbox ;
return ;
}
/* We make an assumption in this routine that zoom will only be one of fixed, min, mid or max and
* that zoom can only go from min to max _via_ the mid state. */
gboolean zmapControlWindowDoTheZoom(ZMap zmap, double zoom)
......@@ -209,7 +230,8 @@ void zmapControlWindowSetZoomButtons(ZMap zmap, ZMapWindowZoomStatus zoom_status
gtk_widget_set_sensitive(zmap->zoomout_but, TRUE) ;
}
else if (zoom_status == ZMAP_ZOOM_INIT)
{ /* IN & OUT should be False until we know which Zoom we are. */
{
/* IN & OUT should be False until we know which Zoom we are. */
gtk_widget_set_sensitive(zmap->zoomin_but, FALSE) ;
gtk_widget_set_sensitive(zmap->zoomout_but, FALSE) ;
}
......@@ -222,11 +244,10 @@ void zmapControlWindowSetZoomButtons(ZMap zmap, ZMapWindowZoomStatus zoom_status
*/
#ifdef ED_G_NEVER_INCLUDE_THIS_CODE
/* These callbacks simply make calls to routines in zmapControl.c, this is because I want all
* the state handling etc. to be in one file so that its easier to work on. */
static void loadCB(GtkWidget *widget, gpointer cb_data)
static void reloadCB(GtkWidget *widget, gpointer cb_data)
{
ZMap zmap = (ZMap)cb_data ;
......@@ -234,7 +255,6 @@ static void loadCB(GtkWidget *widget, gpointer cb_data)
return ;
}
#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
static void stopCB(GtkWidget *widget, gpointer cb_data)
......@@ -243,29 +263,7 @@ static void stopCB(GtkWidget *widget, gpointer cb_data)
zmapControlResetCB(zmap) ;
return ;
}
/* Load a new sequence into a zmap. */
static void newCB(GtkWidget *widget, gpointer cb_data)
{
ZMap zmap = (ZMap)cb_data ;
char *new_sequence ;
/* Get a new sequence to show.... */
if ((new_sequence = getSequenceName()))
zmapControlNewViewCB(zmap, new_sequence) ;
return ;
}
static void quitCB(GtkWidget *widget, gpointer cb_data)
{
ZMap zmap = (ZMap)cb_data ;
zmapControlTopLevelKillCB(zmap) ;
zmapControlWindowSetGUIState(zmap) ;
return ;
}
......@@ -318,6 +316,8 @@ static void unlockCB(GtkWidget *widget, gpointer data)
zMapWindowUnlock(zMapViewGetWindow(zmap->focus_viewwindow)) ;
zmapControlWindowSetGUIState(zmap) ;
return ;
}
......@@ -336,72 +336,14 @@ static void closeWindowCB(GtkWidget *widget, gpointer data)
{
ZMap zmap = (ZMap)data ;
zmapControlRemoveWindow(zmap) ;
return ;
}
static char *getSequenceName(void)
{
char *sequence_name = NULL ;
GtkWidget *dialog, *label, *text, *ok_button, *cancel_button ;
ZmapSequenceCallbackStruct cb_data = {NULL, NULL} ;
cb_data.dialog = dialog = gtk_dialog_new() ;
gtk_window_set_title(GTK_WINDOW(dialog), "ZMap - Enter New Sequence") ;
label = gtk_label_new("Sequence Name:") ;
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, TRUE, TRUE, 0) ;
cb_data.entry = text = gtk_entry_new() ;
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), text, TRUE, TRUE, 0) ;
ok_button = gtk_button_new_with_label("OK") ;
GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT) ;
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), ok_button, FALSE, FALSE, 0) ;
gtk_widget_grab_default(ok_button) ;
gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", GTK_SIGNAL_FUNC(okCB), &cb_data) ;
cancel_button = gtk_button_new_with_label("Cancel") ;
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), cancel_button, FALSE, FALSE, 0) ;
gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", GTK_SIGNAL_FUNC(cancelCB), &cb_data) ;
gtk_widget_show_all(dialog) ;
gtk_main() ;
sequence_name = cb_data.new_sequence ;
return sequence_name ;
}
static void okCB(GtkWidget *widget, gpointer cb_data)
{
ZmapSequenceCallback mydata = (ZmapSequenceCallback)cb_data ;
char *text ;
if ((text = (char *)gtk_entry_get_text(GTK_ENTRY(mydata->entry)))
&& *text) /* entry returns "" for no string. */
mydata->new_sequence = g_strdup(text) ;
gtk_widget_destroy(mydata->dialog) ;
/* Should warn if this is last window for a view.... */
zmapControlRemoveWindow(zmap) ;
gtk_main_quit() ;
return ;
}
static void cancelCB(GtkWidget *widget, gpointer cb_data)
{
ZmapSequenceCallback mydata = (ZmapSequenceCallback)cb_data ;
gtk_widget_destroy(mydata->dialog) ;
gtk_main_quit() ;
return ;
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment