/*
* Copyright (c) by Allin Cottrell
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
/* toolbar.c: the gretl toolbar */
#include "gretl.h"
#include "console.h"
#include "session.h"
#include "datafiles.h"
#ifdef G_OS_WIN32
# include "gretlwin32.h"
#endif
/* pixmaps for gretl toolbar */
#include "../pixmaps/mini.calc.xpm"
#include "../pixmaps/mini.edit.xpm"
#include "../pixmaps/mini.sh.xpm"
#include "../pixmaps/mini.session.xpm"
#include "../pixmaps/mini.manual.xpm"
#include "../pixmaps/mini.pdf.xpm"
#include "../pixmaps/mini.plot.xpm"
#include "../pixmaps/mini.model.xpm"
#include "../pixmaps/mini.ofolder.xpm"
#include "../pixmaps/mini.browser.xpm"
static GtkWidget *toolbar_box;
/* callbacks for gretl toolbar icons */
static void show_calc (void)
{
#ifdef G_OS_WIN32
create_child_process(calculator);
#else
gretl_fork(calculator, NULL);
#endif
}
static void open_textbook_data (void)
{
display_files(NULL, TEXTBOOK_DATA, NULL);
}
static void gretl_website (void)
{
if (browser_open("http://gretl.sourceforge.net/")) {
errbox("Failed to open URL");
}
}
void toolbar_users_guide (void)
{
display_pdf_help(NULL, 1, NULL);
}
void toolbar_command_reference (void)
{
plain_text_cmdref(NULL, 0, NULL);
}
static void xy_graph (void)
{
if (data_status) {
if (datainfo->v == 2) {
do_graph_var(mdata->active_var);
} else if (mdata_selection_count() == 2) {
plot_from_selection(NULL, GR_XY, NULL);
} else {
selector_callback(NULL, GR_XY, NULL);
}
} else {
errbox(_("Please open a data file first"));
}
}
static void ols_model (void)
{
if (data_status) {
model_callback(NULL, OLS, NULL);
} else {
errbox(_("Please open a data file first"));
}
}
static void go_session (void)
{
if (data_status) {
view_session();
} else {
errbox(_("Please open a data file first"));
}
}
static void new_script_callback (void)
{
do_new_script(NULL, 0, NULL);
}
/* end toolbar icon callbacks */
static GtkWidget *image_button_new (GdkPixbuf *pix, void (*toolfunc)())
{
GtkWidget *image = gtk_image_new_from_pixbuf(pix);
GtkWidget *button = gtk_button_new();
gtk_widget_set_size_request(button, 26, 24); /* 26, 24 */
gtk_container_add (GTK_CONTAINER(button), image);
g_signal_connect (G_OBJECT(button), "clicked",
G_CALLBACK(toolfunc), NULL);
return button;
}
static void gretl_toolbar_append_tool (GtkWidget *tbar,
GtkWidget *w,
const char *toolstr)
{
gtk_box_pack_start(GTK_BOX(tbar), w, FALSE, FALSE, 0);
gretl_tooltips_add(w, toolstr);
}
static void make_toolbar (GtkWidget *w, GtkWidget *box)
{
GtkWidget *button;
GtkWidget *toolbar;
GtkWidget *hbox;
GdkPixbuf *icon;
int i;
const char *toolstrings[] = {
N_("launch calculator"),
N_("new script"),
N_("open gretl console"),
N_("session icon view"),
N_("gretl website"),
N_("user's guide"),
N_("command reference"),
N_("X-Y graph"),
N_("OLS model"),
N_("open dataset"),
NULL
};
gchar **toolxpm = NULL;
void (*toolfunc)() = NULL;
const char *toolstr;
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0);
toolbar_box = gtk_handle_box_new();
gtk_box_pack_start(GTK_BOX(hbox), toolbar_box, FALSE, FALSE, 0);
toolbar = gtk_hbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(toolbar_box), toolbar);
for (i=0; toolstrings[i] != NULL; i++) {
switch (i) {
case 0:
toolxpm = mini_calc_xpm;
toolfunc = show_calc;
break;
case 1:
toolxpm = mini_edit_xpm;
toolfunc = new_script_callback;
break;
case 2:
toolxpm = mini_sh_xpm;
toolfunc = show_gretl_console;
break;
case 3:
toolxpm = mini_session_xpm;
toolfunc = go_session;
break;
case 4:
toolxpm = mini_browser_xpm;
toolfunc = gretl_website;
break;
case 5:
toolxpm = mini_pdf_xpm;
toolfunc = toolbar_users_guide;
break;
case 6:
toolxpm = mini_manual_xpm;
toolfunc = toolbar_command_reference;
break;
case 7:
toolxpm = mini_plot_xpm;
toolfunc = xy_graph;
break;
case 8:
toolxpm = mini_model_xpm;
toolfunc = ols_model;
break;
case 9:
toolxpm = mini_ofolder_xpm;
toolfunc = open_textbook_data;
break;
default:
break;
}
toolstr = _(toolstrings[i]);
icon = gdk_pixbuf_new_from_xpm_data((const char **) toolxpm);
button = image_button_new(icon, toolfunc);
gretl_toolbar_append_tool(toolbar, button, toolstr);
gdk_pixbuf_unref(icon);
}
gtk_widget_show_all(hbox);
}
/* public interface */
void show_or_hide_toolbar (int want_toolbar)
{
if (want_toolbar && toolbar_box == NULL) {
GtkWidget *vbox = g_object_get_data(G_OBJECT(mdata->w), "vbox");
make_toolbar(mdata->w, vbox);
} else if (!want_toolbar && toolbar_box != NULL) {
gtk_widget_destroy(toolbar_box);
toolbar_box = NULL;
}
}
syntax highlighted by Code2HTML, v. 0.9.1