⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 graph是一款linux/unix下绘制数据曲线图形的程序
💻 CPP
字号:
/* * main.cpp - главный исходник, с которого собсна все и начинается.  * Copyright (C) 2007 lester *  * 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 *  */#include <glib.h>#include <gtk/gtk.h>#include <gdk/gdk.h>#include <gdk-pixbuf/gdk-pixbuf.h> #include <glade/glade.h>#include <gsf/gsf-utils.h>#include <mgl_c.h>#include <stdio.h>#include "globals.h"#include "mathdrawer.h"#include "tree_view.h"#include "add_function_dlg.h"#include "fsio.h"// TODO: перевести все на glib, чтоб он сам дергал юзерпасы//#define GLADE_FILE "bin/Debug/graph.glade"//#define GLADE_FILE "/usr/share/graph/graph.glade"#define GLADE_FILE "data/graph.glade"using namespace std;GladeXML *xml;GtkWidget *win;char *g_filename;bool modified = TRUE;bool new_sheet = TRUE;GtkWidget *splash;GdkPixbuf *image;gbooleansave ();voidupdate_window_title ();gintask_for_save ();voidopen ();gchar *display_open_dlg ();gchar *display_save_dlg ();voidset_new_sheet (const gboolean v){    new_sheet = v;    if (v)    {    g_filename = "Untitled.sheet";    }    update_window_title ();}voidset_modified (const bool v){    modified = v;    GtkWidget *widget;    // хммммм... может лучше хранить поинтеры а не дергать их каждый раз    widget = glade_xml_get_widget (xml, "tlb_save_button");    gtk_widget_set_sensitive (widget, v);    widget = glade_xml_get_widget (xml, "imagemenuitem3");    gtk_widget_set_sensitive (widget, v);}CDECL voidon_tlb_save_button_clicked (GtkWidget *widget, gpointer data){    save();}CDECL voidon_save_as_menuitem_activate (GtkMenuItem *menuitem, gpointer data){    new_sheet = TRUE;    new_sheet = !save();}voidcreate_new_sheet() // создать новый шит. бгггг {    gint result = GTK_RESPONSE_NO;    if (modified)    {        result = ask_for_save();    }    if (result == GTK_RESPONSE_YES)    {        save();        result = GTK_RESPONSE_NO; // да я индус. Джими-джими, ача-ача     }    if (result == GTK_RESPONSE_NO)    {        graph_new_sheet ();        set_new_sheet (TRUE);        set_modified (TRUE);        graph_render_to_pixbuf ();    }}gbooleansave (){    if (new_sheet)    {    char *filename = display_save_dlg ();    if (filename == NULL) return FALSE;    g_filename = g_strdup(filename);    g_free(filename);    update_window_title ();    set_new_sheet (FALSE);    }    fsio_write_functions (g_filename);    set_modified (FALSE);    return TRUE;}voidopen (){    gint result = GTK_RESPONSE_NO;    if (modified && !new_sheet)        result = ask_for_save ();    if (result == GTK_RESPONSE_YES)        save();    if (result == GTK_RESPONSE_NO)    {        char *filename = display_open_dlg ();        if (filename == NULL) return;        g_filename = g_strdup(filename);        g_free(filename);        // чистим все        graph_new_sheet ();        // создаем функции из файла        fsio_read_functions (g_filename);        tree_view_fill_items ();        graph_render_to_pixbuf ();        update_window_title ();        set_new_sheet (FALSE);        set_modified (FALSE);    }}gintask_for_save (){    gint result;    GtkWidget *dlg = gtk_message_dialog_new (NULL,                                GTK_DIALOG_MODAL,                                GTK_MESSAGE_QUESTION,                                GTK_BUTTONS_NONE,                                _("Вы хотите сохранить текущий лист?"));    gtk_dialog_add_button (GTK_DIALOG(dlg), GTK_STOCK_NO, GTK_RESPONSE_NO);    gtk_dialog_add_button (GTK_DIALOG(dlg), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);    gtk_dialog_add_button (GTK_DIALOG(dlg), GTK_STOCK_YES, GTK_RESPONSE_YES);    result = gtk_dialog_run (GTK_DIALOG(dlg));    gtk_widget_destroy (dlg);    return result;}CDECL voidon_tlb_new_button_clicked (GtkWidget *widget, gpointer data){    create_new_sheet ();}voidupdate_window_title (){    std::string str("Graph - ");    str += g_path_get_basename(g_filename);    gtk_window_set_title (GTK_WINDOW(win), str.c_str());}gchar *display_open_dlg (){    GtkWidget *dlg = gtk_file_chooser_dialog_new ("Открыть",                                    NULL,                                    GTK_FILE_CHOOSER_ACTION_OPEN,                                    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,                                    GTK_STOCK_OPEN, GTK_RESPONSE_OK,                                    NULL);    GtkFileFilter *filter = gtk_file_filter_new ();    gtk_file_filter_set_name (filter, "Лист graph (*.sheet)");    gtk_file_filter_add_pattern (filter, "*.sheet");    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dlg), filter);    filter = gtk_file_filter_new ();    gtk_file_filter_set_name (filter, _("Все файлы"));    gtk_file_filter_add_pattern (filter, "*.*");    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dlg), filter);    //gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER(dlg), TRUE);    gint resp = gtk_dialog_run (GTK_DIALOG(dlg));    gchar *filename = NULL;    if (resp == GTK_RESPONSE_OK)    {        filename = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER(dlg));    }        gtk_widget_destroy (dlg);    return filename;}gchar *display_save_dlg (){    GtkWidget *dlg = gtk_file_chooser_dialog_new ("Сохранить",                                    NULL,                                    GTK_FILE_CHOOSER_ACTION_SAVE,                                    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,                                    GTK_STOCK_SAVE, GTK_RESPONSE_OK,                                    NULL);    GtkFileFilter *filter = gtk_file_filter_new ();    gtk_file_filter_set_name (filter, "Лист graph (*.sheet)");    gtk_file_filter_add_pattern (filter, "*.sheet");    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dlg), filter);    filter = gtk_file_filter_new ();    gtk_file_filter_set_name (filter, "Все файлы");    gtk_file_filter_add_pattern (filter, "*.*");    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dlg), filter);    gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER(dlg), g_path_get_basename(g_filename));    gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER(dlg), TRUE);    gint resp = gtk_dialog_run (GTK_DIALOG(dlg));    gchar *filename = NULL;    if (resp == GTK_RESPONSE_OK)    {        filename = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER(dlg));    }        gtk_widget_destroy (dlg);        return filename;}CDECL voidon_tlb_open_button_clicked (GtkWidget *widget, gpointer data){    open();}voiddestroy (){    graph_delete_graph_drawer();    printf ("Graph::I'm completely destroying!");}voidshow_message (void *widget, const gchar *mesg){GtkWidget *msg = gtk_message_dialog_new(GTK_WINDOW(widget),                            GTK_DIALOG_DESTROY_WITH_PARENT,                                GTK_MESSAGE_ERROR,                                GTK_BUTTONS_CLOSE, mesg); gtk_dialog_run(GTK_DIALOG(msg)); gtk_widget_destroy(msg);}gbooleanon_splash_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer data){		GdkGC *gc = gdk_gc_new (splash->window);		GdkPixbuf *image = (GdkPixbuf*)data;	gdk_pixbuf_render_to_drawable (image, widget->window,  	                               gc, 	                               0, 	                               0, 	                               -1, 	                               -1, 	                               355, 	                               302, 	                               GDK_RGB_DITHER_NONE, 0, 0);		gdk_gc_destroy (gc);	return TRUE;	}voidshow_splash (){	splash = gtk_window_new (GTK_WINDOW_POPUP);		gtk_widget_set_size_request (splash, 313, 260);		gtk_window_set_position( GTK_WINDOW(splash), GTK_WIN_POS_CENTER);		gtk_widget_show_all (splash);	gtk_window_set_resizable (GTK_WINDOW(splash), FALSE );	image = gdk_pixbuf_new_from_file ("data/splash.png", NULL);	g_signal_connect (G_OBJECT(splash), "expose-event", G_CALLBACK(on_splash_expose_event), (gpointer)image);	}gbooleanclose_splash (gpointer){	gtk_widget_destroy (splash);	gdk_pixbuf_unref (image);		return FALSE;}intmain (int argc, char *argv[] ) {        gtk_init (&argc, &argv);        gsf_init ();                xml = glade_xml_new ( GLADE_FILE, NULL, NULL);        win = glade_xml_get_widget (xml, "main_window");        glade_xml_signal_autoconnect (xml);        set_new_sheet (TRUE);        gtk_widget_show_all (win);        show_splash ();                g_timeout_add_seconds (1, close_splash, NULL);                               prepare_mathdraw (xml);        prepare_tree_view (xml);        prepare_function_dlg (xml);        gtk_main ();        destroy ();        return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -