/* You have to start somewhere */ int main( int argc, char *argv[] ) { GtkWidget *window; GtkWidget *main_vbox; GtkWidget *menubar, *option_menu, *popup_button; /* Initialize GTK */ gtk_init (&argc, &argv); /* Make a window */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_window_set_title (GTK_WINDOW(window), "Item Factory"); gtk_widget_set_size_request (GTK_WIDGET(window), 300, 200); /* Make a vbox to put the three menus in */ main_vbox = gtk_vbox_new (FALSE, 1); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 1); gtk_container_add (GTK_CONTAINER (window), main_vbox); /* Get the three types of menu */ /* Note: all three menus are separately created, so they are not the same menu */ menubar = get_menubar_menu (window); popup_button = get_popup_menu (); option_menu = get_option_menu (); /* Pack it all together */ gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, TRUE, 0); gtk_box_pack_end (GTK_BOX (main_vbox), popup_button, FALSE, TRUE, 0); gtk_box_pack_end (GTK_BOX (main_vbox), option_menu, FALSE, TRUE, 0); /* Show the widgets */ gtk_widget_show_all (window); /* Finished! */ gtk_main (); return 0; }
int main(int argc, char **argv) { int i; GtkWidget *win; GtkWidget *divelist; GtkWidget *table; GtkWidget *notebook; GtkWidget *frame; GtkWidget *menubar; GtkWidget *vbox; parse_xml_init(); gtk_init(&argc, &argv); for (i = 1; i < argc; i++) { const char *a = argv[i]; if (a[0] == '-') { parse_argument(a); continue; } parse_xml_file(a); } report_dives(); win = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(on_destroy), NULL); main_window = win; vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(win), vbox); menubar = get_menubar_menu(win); gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0); /* Table for the list of dives, cairo window, and dive info */ table = gtk_table_new(2, 2, FALSE); gtk_container_set_border_width(GTK_CONTAINER(table), 5); gtk_box_pack_end(GTK_BOX(vbox), table, TRUE, TRUE, 0); gtk_widget_show(table); /* Create the atual divelist */ divelist = create_dive_list(); gtk_table_attach(GTK_TABLE(table), divelist, 0, 1, 0, 2, 0, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0); /* Frame for minimal dive info */ frame = dive_info_frame(); gtk_table_attach(GTK_TABLE(table), frame, 1, 2, 0, 1, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0, 0); /* Notebook for dive info vs profile vs .. */ notebook = gtk_notebook_new(); gtk_table_attach_defaults(GTK_TABLE(table), notebook, 1, 2, 1, 2); /* Frame for dive profile */ frame = dive_profile_frame(); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), frame, gtk_label_new("Dive Profile")); dive_profile = frame; /* Frame for extended dive info */ frame = extended_dive_info_frame(); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), frame, gtk_label_new("Extended dive Info")); gtk_widget_set_app_paintable(win, TRUE); gtk_widget_show_all(win); gtk_main(); return 0; }
bool loop(int argc, char** argv) { char home[256]; //NEED TO MAKE THIS DYNAMIC strcpy(home, getenv("HOME")); //parse the config file settings.parse_config(strcat(home, config_file)); //load the controls into list ElementList list(settings.card); list_ptr = &list; //reorder the controls to the order specified in the config file settings.reorder_list(&list); //set the scale list.set_scale((Element::scale_t)settings.scaling); //set the auto_mute list.set_auto_mute(settings.auto_mute); //initialize gtk gtk_init(&argc, &argv); //set up the tray_slider that goes in the tray if (settings.enable_tray_icon){ GtkWidget *tray_frame; tray_frame = gtk_alignment_new(0.5,0.0,0,0); settings.tray_slider = new retro_slider; settings.set_tray_slider(&list); settings.apply_to_tray_slider(settings.tray_slider); if (list.num_elems > 0){ settings.tray_slider->init(tray_frame, (void*)settings.tray_control, &Element::get_callback, &Element::set_callback, (settings.tray_control->values > 1)); } else { settings.tray_control = NULL; } //set up the small window that holds the tray_slider settings.slider_window = gtk_window_new (GTK_WINDOW_POPUP); gtk_window_set_resizable(GTK_WINDOW(settings.slider_window), false); gtk_window_set_decorated(GTK_WINDOW(settings.slider_window), false); gtk_window_set_skip_taskbar_hint(GTK_WINDOW(settings.slider_window), true); gtk_window_set_skip_pager_hint(GTK_WINDOW(settings.slider_window), true); gtk_widget_set_usize(settings.slider_window, settings.tray_slider->width, settings.tray_slider->height); //don't want accidental closure of the slider window to destroy the window g_signal_connect(settings.slider_window, "delete-event", G_CALLBACK (gtk_widget_hide_on_delete), NULL); //want the widow to go away when it loses focus g_signal_connect(settings.slider_window, "focus-out-event", G_CALLBACK (gtk_widget_hide), NULL); gtk_container_add( GTK_CONTAINER(settings.slider_window), tray_frame ); //we want it hidden by default, but it must be shown at least once or else scrolling over the icon will cause a hang gtk_widget_show_all(settings.slider_window); gtk_widget_hide_all(settings.slider_window); //set up tray icon #if GTK_CHECK_VERSION(2,16,0) settings.tray_icon = gtk_status_icon_new(); gtk_status_icon_set_from_file(settings.tray_icon, VOL_MUTED_IMAGE); #else settings.tray_icon = GTK_WIDGET(egg_tray_icon_new("Retrovol Tray Icon")); //set the background color bool enable_tray_icon_background_color = settings.enable_tray_icon_background_color; GdkColor bg_color; char bg_color_str[8]; if (cmdline_enable_bg_color){ enable_tray_icon_background_color = true; strcpy(bg_color_str, cmdline_bg_color); } else if (settings.enable_tray_icon_background_color){ settings.nftoh(settings.tray_icon_background_color, bg_color_str); } if (enable_tray_icon_background_color){ if (gdk_color_parse(bg_color_str, &bg_color)){ GtkStyle *style = gtk_style_copy(gtk_widget_get_style(settings.tray_icon)); style->bg[GTK_STATE_NORMAL] = bg_color; gtk_widget_set_style(settings.tray_icon, style); } else { fprintf(stderr, _("Error: Failed to set background color to %s\n"), bg_color_str); } } //set up the images settings.tray_icon_image = gtk_image_new(); gtk_container_add( GTK_CONTAINER(settings.tray_icon), settings.tray_icon_image ); gtk_image_set_from_file(GTK_IMAGE(settings.tray_icon_image), VOL_MEDIUM_IMAGE); //set the event mask gtk_widget_set_events (settings.tray_icon, GDK_BUTTON_PRESS_MASK | GDK_SCROLL_MASK); #endif //signals g_signal_connect(G_OBJECT(settings.tray_icon), "button_press_event", G_CALLBACK (&tray_button_press_event_callback), settings.slider_window); if (settings.tray_control){ g_signal_connect(G_OBJECT(settings.tray_icon), "scroll_event", G_CALLBACK (&retro_slider::scroll_event_callback), settings.tray_slider); } #if GTK_CHECK_VERSION(2,16,0) //make icon visible gtk_status_icon_set_visible(settings.tray_icon, true); #else //handle situations where the icon's window dies, such as due to the tray itself exiting g_signal_connect(G_OBJECT(settings.tray_icon), "delete-event", G_CALLBACK (gtk_widget_hide_on_delete), NULL); //make icon visible gtk_widget_show_all(settings.tray_icon); #endif //set up the popup menu (the function checks if it should actually do anything) set_menu(); } //set up the window settings.main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); //gtk_window_set_position(GTK_WINDOW(settings.main_window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(settings.main_window), settings.window_width, settings.window_height); gtk_window_set_title(GTK_WINDOW(settings.main_window), "Retrovol"); restore_posdim(); g_signal_connect(settings.main_window, "configure-event", G_CALLBACK (save_posdim), NULL); //if the tray icon is enabled, we want the window to hide rather than closing if (settings.enable_tray_icon){ g_signal_connect(settings.main_window, "delete-event", G_CALLBACK (gtk_widget_hide_on_delete), NULL); } //make the over_box, which will hold stuff like the menu, status bar, and the actual content in the middle GtkWidget *over_box; over_box = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(settings.main_window), over_box); //define the menu GtkItemFactoryEntry menu_items_1[] = { { (gchar*)_("/_File"), NULL, NULL, 0, (gchar*)"<Branch>" }, { (gchar*)_("/File/_Configure"), (gchar*)"<CTRL>C", G_CALLBACK(configure), 0, (gchar*)"<StockItem>", GTK_STOCK_EXECUTE }, { (gchar*)_("/File/_Quit"), (gchar*)"<CTRL>Q", G_CALLBACK(close_window), 0, (gchar*)"<StockItem>", GTK_STOCK_QUIT }, }; gint nmenu_items_1 = sizeof (menu_items_1) / sizeof (menu_items_1[0]); GtkItemFactoryEntry menu_items_2[] = { { (gchar*)_("/_File"), NULL, NULL, 0, (gchar*)"<Branch>" }, { (gchar*)_("/File/_Configure"), (gchar*)"<CTRL>C", G_CALLBACK(configure), 0, (gchar*)"<StockItem>", GTK_STOCK_EXECUTE }, { (gchar*)_("/File/_Exit completely"), (gchar*)"<CTRL>E", G_CALLBACK(gtk_main_quit), 0, (gchar*)"<StockItem>", GTK_STOCK_QUIT }, { (gchar*)_("/File/_Quit"), (gchar*)"<CTRL>Q", G_CALLBACK(close_window), 0, (gchar*)"<StockItem>", GTK_STOCK_QUIT }, }; gint nmenu_items_2 = sizeof (menu_items_2) / sizeof (menu_items_2[0]); GtkItemFactoryEntry *menu_items; gint nmenu_items; //if the tray menu is enabled, don't have the "Exit" entry in the main menu if (settings.enable_tray_menu){ menu_items = menu_items_1; nmenu_items = nmenu_items_1; } else { menu_items = menu_items_2; nmenu_items = nmenu_items_2; } //build the menu GtkWidget *menubar; menubar = get_menubar_menu(settings.main_window, menu_items, nmenu_items, "<RetrovolMain>"); gtk_box_pack_start(GTK_BOX(over_box), menubar, FALSE, TRUE, 0); //use a scrolled window GtkWidget *scrolled_window; scrolled_window = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy((GtkScrolledWindow*)scrolled_window, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(over_box), scrolled_window); //put the stuff into a viewport manually, so we can specify that it should have no shadow GtkWidget *viewport; viewport = gtk_viewport_new(NULL, NULL); gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport), GTK_SHADOW_NONE); gtk_container_add(GTK_CONTAINER(scrolled_window), viewport); //and create an Hbox to hold all the stuff GtkWidget *hbox; if (settings.vertical){ hbox = gtk_hbox_new(TRUE, 2); gtk_container_add(GTK_CONTAINER(viewport), hbox); } else { hbox = gtk_vbox_new(TRUE, 2); gtk_container_add(GTK_CONTAINER(viewport), hbox); } //add the sliders retro_slider *sliders = new retro_slider[list.num_items]; for(int i=0; i<list.num_items; i++){ //use a vbox w/ slider on top and label on bottom GtkWidget *vbox; if (settings.vertical){ vbox = gtk_vbox_new(FALSE, 2); } else { vbox = gtk_hbox_new(FALSE, 2); } gtk_box_pack_start(GTK_BOX(hbox), vbox, false, false, 0); if (strcmp(list.items[i]->type, "INTEGER") == 0){ //integers need sliders //the rslider pseudo-widget likes to be inside a container, lets use a GtkAlignment GtkWidget *frame; if (settings.vertical){ frame = gtk_alignment_new(0.5,0.0,0,0); gtk_box_pack_start(GTK_BOX(vbox), frame, false, false, 0); } else { frame = gtk_alignment_new(0.0,0.5,0,0); gtk_box_pack_end(GTK_BOX(vbox), frame, false, false, 0); } //make the slider and associate with a control settings.apply_to_slider(&sliders[i]); sliders[i].init(frame, (void*)list.items[i], &Element::get_callback, &Element::set_callback, (list.items[i]->values > 1)); } else if (strcmp(list.items[i]->type, "BOOLEAN") == 0){ //booleans need checkboxes GtkWidget *alignment; if (settings.vertical){ alignment = gtk_alignment_new(0.5,1.0,0,0); gtk_box_pack_start(GTK_BOX(vbox), alignment, true, true, 0); } else { alignment = gtk_alignment_new(1.0,0.5,0,0); gtk_box_pack_end(GTK_BOX(vbox), alignment, true, true, 0); } GtkWidget *chkbx; chkbx = gtk_check_button_new(); //set it to the current state gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chkbx), (bool)list.items[i]->get()); //bind to the toggle_checkbox function Element* ptr = list.items[i]; g_signal_connect(GTK_TOGGLE_BUTTON(chkbx), "toggled", G_CALLBACK (toggle_checkbox), ptr); g_signal_connect_after(GTK_TOGGLE_BUTTON(chkbx), "expose-event", G_CALLBACK (refresh_checkbox), ptr); gtk_container_add(GTK_CONTAINER(alignment), chkbx); } else if (strcmp(list.items[i]->type, "ENUMERATED") == 0){ GtkWidget *alignment; if (settings.vertical){ alignment = gtk_alignment_new(0.5,0.5,0,0); gtk_box_pack_start(GTK_BOX(vbox), alignment, true, true, 0); } else { alignment = gtk_alignment_new(1.0,0.5,0,0); gtk_box_pack_end(GTK_BOX(vbox), alignment, true, true, 0); } //insert a combobox with the different options GtkWidget *combo_box; combo_box=gtk_combo_box_new_text(); for(unsigned int n=0; n<list.items[i]->number_of_enums; n++){ gtk_combo_box_append_text(GTK_COMBO_BOX(combo_box), list.items[i]->enums[n]); } gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box), list.items[i]->get()); //bind to the change_combo_box function g_signal_connect(GTK_COMBO_BOX(combo_box), "changed", G_CALLBACK (change_combo_box), list.items[i]); gtk_container_add(GTK_CONTAINER(alignment), combo_box); } //add a checkbox for sliders that are muteable if (list.items[i]->switch_id >= 0){ GtkWidget *alignment; if (settings.vertical){ alignment = gtk_alignment_new(0.5,1.0,0,0); gtk_box_pack_start(GTK_BOX(vbox), alignment, true, true, 0); } else { alignment = gtk_alignment_new(1.0,0.5,0,0); gtk_box_pack_end(GTK_BOX(vbox), alignment, true, true, 0); } GtkWidget *chkbx; chkbx = gtk_check_button_new(); //set it to the current state gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chkbx), (bool)list.elems[list.items[i]->switch_id].get()); //bind to the toggle_checkbox function g_signal_connect(GTK_TOGGLE_BUTTON(chkbx), "toggled", G_CALLBACK (toggle_checkbox), &(list.elems[list.items[i]->switch_id])); g_signal_connect_after(GTK_TOGGLE_BUTTON(chkbx), "expose-event", G_CALLBACK (refresh_checkbox), &(list.elems[list.items[i]->switch_id])); gtk_container_add(GTK_CONTAINER(alignment), chkbx); } //display the name of the control GtkWidget *alignment; char wrapped[256]; if (settings.vertical){ alignment = gtk_alignment_new(0.5,1.0,0,0); gtk_box_pack_end(GTK_BOX(vbox), alignment, false, false, 0); word_wrap(wrapped, list.items[i]->short_name); } else { alignment = gtk_alignment_new(1.0,0.5,0,0); gtk_box_pack_start(GTK_BOX(vbox), alignment, false, false, 0); strcpy(wrapped, list.items[i]->short_name); } GtkWidget *label; label = gtk_label_new(wrapped); gtk_container_add(GTK_CONTAINER(alignment), label); } //finish the window stuff if (!start_hidden){ gtk_widget_show_all(settings.main_window); } g_signal_connect(settings.main_window, "destroy", G_CALLBACK (gtk_main_quit), NULL); //add some periodic refreshment to keep the icon and window up-to-date #if GTK_CHECK_VERSION(2,14,0) int timeout = g_timeout_add_seconds(1, update, NULL); #else //this is less efficient than g_timeout_add_seconds() int timeout = g_timeout_add(1000, update, NULL); #endif //finished with gtk setup gtk_main(); //stop the timeout g_source_remove(timeout); //have the window shown again if it was open before we restarted if (settings.resume_main){ settings.resume_main = false; start_hidden = false; } else { start_hidden = true; } return(settings.restart); }
void init_ui(int *argcp, char ***argvp) { GtkWidget *win; GtkWidget *notebook; GtkWidget *dive_info; GtkWidget *dive_list; GtkWidget *equipment; GtkWidget *stats; GtkWidget *menubar; GtkWidget *vbox; GdkScreen *screen; GtkIconTheme *icon_theme=NULL; GtkSettings *settings; gtk_init(argcp, argvp); settings = gtk_settings_get_default(); gtk_settings_set_long_property(settings, "gtk_tooltip_timeout", 10, "subsurface setting"); g_type_init(); subsurface_open_conf(); if (subsurface_get_conf("feet", PREF_BOOL)) output_units.length = FEET; if (subsurface_get_conf("psi", PREF_BOOL)) output_units.pressure = PSI; if (subsurface_get_conf("cuft", PREF_BOOL)) output_units.volume = CUFT; if (subsurface_get_conf("fahrenheit", PREF_BOOL)) output_units.temperature = FAHRENHEIT; /* an unset key is FALSE - all these are hidden by default */ visible_cols.cylinder = PTR_TO_BOOL(subsurface_get_conf("CYLINDER", PREF_BOOL)); visible_cols.temperature = PTR_TO_BOOL(subsurface_get_conf("TEMPERATURE", PREF_BOOL)); visible_cols.nitrox = PTR_TO_BOOL(subsurface_get_conf("NITROX", PREF_BOOL)); visible_cols.otu = PTR_TO_BOOL(subsurface_get_conf("OTU", PREF_BOOL)); visible_cols.sac = PTR_TO_BOOL(subsurface_get_conf("SAC", PREF_BOOL)); divelist_font = subsurface_get_conf("divelist_font", PREF_STRING); if (!divelist_font) divelist_font = DIVELIST_DEFAULT_FONT; error_info_bar = NULL; win = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_set_application_name ("subsurface"); /* Let's check if the subsurface icon has been installed or if * we need to try to load it from the current directory */ screen = gdk_screen_get_default(); if (screen) icon_theme = gtk_icon_theme_get_for_screen(screen); if (icon_theme) { if (gtk_icon_theme_has_icon(icon_theme, "subsurface")) { need_icon = FALSE; gtk_window_set_default_icon_name ("subsurface"); } } if (need_icon) #if defined __linux__ || defined __APPLE__ gtk_window_set_icon_from_file(GTK_WINDOW(win), "subsurface.svg", NULL); #elif defined WIN32 gtk_window_set_icon_from_file(GTK_WINDOW(win), "subsurface.ico", NULL); #endif g_signal_connect(G_OBJECT(win), "delete-event", G_CALLBACK(on_delete), NULL); g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(on_destroy), NULL); main_window = win; vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(win), vbox); main_vbox = vbox; menubar = get_menubar_menu(win); gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0); vpane = gtk_vpaned_new(); gtk_box_pack_start(GTK_BOX(vbox), vpane, TRUE, TRUE, 3); hpane = gtk_hpaned_new(); gtk_paned_add1(GTK_PANED(vpane), hpane); /* Notebook for dive info vs profile vs .. */ notebook = gtk_notebook_new(); gtk_paned_add1(GTK_PANED(hpane), notebook); g_signal_connect(notebook, "switch-page", G_CALLBACK(switch_page), NULL); /* Create the actual divelist */ dive_list = dive_list_create(); gtk_widget_set_name(dive_list, "Dive List"); gtk_paned_add2(GTK_PANED(vpane), dive_list); /* Frame for dive profile */ dive_profile = dive_profile_widget(); gtk_widget_set_name(dive_profile, "Dive Profile"); gtk_paned_add2(GTK_PANED(hpane), dive_profile); /* Frame for extended dive info */ dive_info = extended_dive_info_widget(); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), dive_info, gtk_label_new("Dive Notes")); /* Frame for dive equipment */ equipment = equipment_widget(); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), equipment, gtk_label_new("Equipment")); /* Frame for dive statistics */ stats = stats_widget(); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), stats, gtk_label_new("Info & Stats")); gtk_widget_set_app_paintable(win, TRUE); gtk_widget_show_all(win); return; }
int main( int argc,char *argv[] ) { GtkWidget *vbox; GtkWidget *hbox; GtkWidget* menubar; GtkWidget* main_toolbar; GtkWidget* tools_toolbar; GtkWidget* colortable; GtkWidget* frame; gtk_init (&argc, &argv); modified=0; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW(window), "Illuminati"); g_signal_connect (G_OBJECT (window), "delete-event", G_CALLBACK (delete_event), NULL); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (delete_event), NULL); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox); /*To create the menu bar*/ menubar = get_menubar_menu (window); gtk_box_pack_start (GTK_BOX(vbox),menubar, FALSE, FALSE, 0); gtk_widget_show (menubar); main_toolbar=get_main_toolbar(); /* to make it nice we'll put the toolbar into the handle box, * so that it can be detached from the main window */ mainhandlebox = gtk_handle_box_new (); gtk_box_pack_start (GTK_BOX (vbox),mainhandlebox, FALSE, FALSE, 5); gtk_container_add (GTK_CONTAINER (mainhandlebox), main_toolbar); gtk_widget_show (main_toolbar); gtk_widget_show (mainhandlebox); /*hbox for tools_toolbar and drawing area*/ hbox = gtk_hbox_new (FALSE, 2); gtk_box_pack_start (GTK_BOX (vbox),hbox, FALSE, FALSE, 0); tools_toolbar=get_tools_toolbar(); toolhandlebox = gtk_handle_box_new (); gtk_box_pack_start (GTK_BOX(hbox),toolhandlebox, FALSE, FALSE, 5); gtk_container_add (GTK_CONTAINER (toolhandlebox), tools_toolbar); gtk_widget_show (tools_toolbar); gtk_widget_show (toolhandlebox); scrolled_win = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_size_request (GTK_WIDGET (scrolled_win),400,400); gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 1); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start (GTK_BOX (hbox), scrolled_win, TRUE, TRUE, 0); drawing_area = gtk_drawing_area_new (); gtk_widget_set_size_request (GTK_WIDGET (drawing_area),800,600); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win),drawing_area); gtk_widget_show (drawing_area); gtk_widget_show (scrolled_win); gtk_widget_show (hbox); /* Signals used to handle backing pixmap */ g_signal_connect (G_OBJECT (drawing_area), "expose_event", G_CALLBACK (expose_event), NULL); g_signal_connect (G_OBJECT (drawing_area),"configure_event", G_CALLBACK (configure_event), NULL); /* Event signals */ g_signal_connect (G_OBJECT (drawing_area), "motion_notify_event", G_CALLBACK (motion_notify_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "button_press_event", G_CALLBACK (button_press_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "button_release_event", G_CALLBACK(button_release_event),NULL); gtk_widget_set_events (drawing_area,GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_RELEASE_MASK); hbox = gtk_hbox_new (FALSE,0); gtk_box_pack_start(GTK_BOX (vbox),hbox, FALSE, FALSE, 2); frame=get_fgbgframe(); gtk_box_pack_start(GTK_BOX (hbox),frame, FALSE, FALSE, 2); gtk_widget_show(frame); colortable=get_system_color_table(); frame=gtk_frame_new("select color"); gtk_widget_set_size_request (GTK_WIDGET (frame),400,75); gtk_box_pack_start(GTK_BOX (hbox),frame, TRUE, TRUE, 2); gtk_container_add(GTK_CONTAINER(frame),colortable); gtk_widget_show (colortable); gtk_widget_show(frame); gtk_widget_show (hbox); gtk_widget_show(vbox); gtk_widget_show(window); /*Initial tool set to PENCIL */ display=gdk_display_get_default(); cursor=gdk_cursor_new(GDK_PENCIL); gdk_window_set_cursor(drawing_area->window,cursor); tool=PENCIL; gtk_button_set_relief(GTK_BUTTON(pencil_button),GTK_RELIEF_NORMAL); filename=g_strdup("Untitled.jpeg"); pixmap = gdk_pixmap_new (drawing_area->window, drawing_area->allocation.width, drawing_area->allocation.height, -1); gdk_draw_rectangle (pixmap, drawing_area->style->white_gc, TRUE, 0, 0, drawing_area->allocation.width, drawing_area->allocation.height); gtk_main (); return 0; }
MainWindow::MainWindow() { window = gtk_window_new(GTK_WINDOW_TOPLEVEL); //SpamTeacher -- рабочее название gtk_window_set_title(GTK_WINDOW(window), "SpamTeacher"); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(closeApp), NULL); ///////////////////////////////////// //установка текста в поля ввода из data std::string text; text = data->get_message_about_sender(); senderEdit = new_edit(text.c_str(),NULL); text = data->get_message_about_receiver(); receiverEdit = new_edit(text.c_str(),NULL); text = data->get_message_about_atachment(); atachEdit = new_edit(text.c_str(),NULL); ///////////////////////////////////// gtk_editable_set_editable(GTK_EDITABLE(senderEdit),0); gtk_editable_set_editable(GTK_EDITABLE(receiverEdit),0); gtk_editable_set_editable(GTK_EDITABLE(atachEdit),0); ///////////////////////////////////// //установка текста в поле для ввода сообщения GtkWidget *view; GtkTextBuffer *buffer; view = gtk_text_view_new (); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); text = data->message; gtk_text_buffer_set_text (buffer, text.c_str(), -1); GtkWidget* frame = view; frame = gtk_frame_new (NULL); gtk_frame_set_label (GTK_FRAME (frame), "Сообщение"); ///////////////////////////////////////// GtkWidget* sw = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER(sw), view); gtk_container_add(GTK_CONTAINER(frame), sw); //////////////////////////////////////// messageEdit = frame; //////////////////////////////////////// //создание кнопок и подцепление к ним сигналов senderButton = new_button("Опции отправителя",sender_signal); receiverButton = new_button("Опции получателей",receiver_signal); atachButton = new_button("Опции вложений(файлов)",atach_signal); messageButton = new_button("Отправить сообщение",message_signal); //////////////////////////////////////// //создание кнопок для настроек GtkWidget* settingsButton[setNum]; settingsButton[0] = new_button("Имя",settings_signal[0]); settingsButton[1] = new_button("Пол",settings_signal[1]); GtkWidget* messageSettings = gtk_hbox_new(0,1); for (int i=0; i<setNum; i++) { gtk_box_pack_start(GTK_BOX(messageSettings),settingsButton[i],0,0,5); } GtkWidget* label; label = new_label("Тема сообщения:",NULL); themeEdit = new_edit(data->theme.c_str(),NULL); gtk_box_pack_end(GTK_BOX(messageSettings),themeEdit,0,0,5); gtk_box_pack_end(GTK_BOX(messageSettings),label,0,0,5); ///////////////////////////////////// //упаковка всего box[0] = gtk_hbox_new(1,5); box[1] = gtk_hbox_new(1,5); box[2] = gtk_hbox_new(1,5); box[3] = gtk_vbox_new(0,3); ///////////////////////////////////// gtk_box_pack_start(GTK_BOX(box[0]),senderEdit,1,0,5); gtk_box_pack_start(GTK_BOX(box[0]),senderButton,1,0,5); gtk_box_pack_start(GTK_BOX(box[1]),receiverEdit,1,0,5); gtk_box_pack_start(GTK_BOX(box[1]),receiverButton,1,0,5); gtk_box_pack_start(GTK_BOX(box[2]),atachEdit,1,0,5); gtk_box_pack_start(GTK_BOX(box[2]),atachButton,1,0,5); gtk_box_pack_start(GTK_BOX(box[3]),messageSettings,0,0,1); gtk_box_pack_start(GTK_BOX(box[3]),messageEdit,1,1,1); gtk_box_pack_start(GTK_BOX(box[3]),messageButton,0,0,1); //для удобства обращения к виджету messageEdit = view; ///////////////////////////////////// vbox = gtk_vbox_new(0,5); ///////////////////////////////////// GtkWidget* menubar; menubar = get_menubar_menu(window); gtk_box_pack_start(GTK_BOX(vbox), menubar, 0, 1, 0); for (int i=0; i<3; i++) { gtk_box_pack_start(GTK_BOX(vbox),box[i],0,0,5); } gtk_box_pack_start(GTK_BOX(vbox),box[3],1,1,5); gtk_container_add(GTK_CONTAINER(window), vbox); gtk_widget_show_all(window); }
int main( int argc, char *argv[] ) { /* GtkWidget is the storage type for widgets */ GtkWidget *window; GtkWidget *menubar; time_t now; struct tm *tm; GThread *gth = NULL; /* thread id */ gboolean run_flag = TRUE; /* used as exit flag for threads */ int i; putenv("UBUNTU_MENUPROXY="); //init_trees(); gdk_color_parse("#FFFF00", &color_yellow); gdk_color_parse("#FFFFFF", &color_white); gdk_color_parse("#404040", &color_grey); gdk_color_parse("#00FF00", &color_green); gdk_color_parse("#007700", &color_darkgreen); gdk_color_parse("#0000FF", &color_blue); gdk_color_parse("#FF0000", &color_red); gdk_color_parse("#770000", &color_darkred); gdk_color_parse("#000000", &color_black); font = pango_font_description_from_string("Sans bold 12"); #ifdef WIN32 installation_dir = g_win32_get_package_installation_directory_of_module(NULL); #else gbr_init(NULL); installation_dir = gbr_find_prefix(NULL); #endif program_path = argv[0]; current_directory[0] = 0; if (current_directory[0] == 0) strcpy(current_directory, "."); conffile = g_build_filename(g_get_user_data_dir(), "judoproxy.ini", NULL); /* create video download dir */ video_dir = g_build_filename(g_get_home_dir(), "rpivideos", NULL); g_print("Video dir = %s\n", video_dir); g_mkdir_with_parents(video_dir, 0755); keyfile = g_key_file_new(); g_key_file_load_from_file(keyfile, conffile, 0, NULL); now = time(NULL); tm = localtime(&now); current_year = tm->tm_year+1900; srand(now); //srandom(now); my_address = now + getpid()*10000; gtk_init (&argc, &argv); main_window = window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(main_window), "JudoProxy"); gtk_widget_set_size_request(window, FRAME_WIDTH, FRAME_HEIGHT); gchar *iconfile = g_build_filename(installation_dir, "etc", "judoproxy.png", NULL); gtk_window_set_default_icon_from_file(iconfile, NULL); g_free(iconfile); g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (delete_event), NULL); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy), NULL); gtk_container_set_border_width (GTK_CONTAINER (window), 10); main_vbox = gtk_grid_new(); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 1); gtk_container_add (GTK_CONTAINER (window), main_vbox); gtk_widget_show(main_vbox); /* menubar */ menubar = get_menubar_menu(window); gtk_widget_show(menubar); gtk_grid_attach(GTK_GRID(main_vbox), menubar, 0, 0, 1, 1); gtk_widget_set_hexpand(menubar, TRUE); /* judoka info */ //name_box = gtk_label_new("?"); //gtk_box_pack_start(GTK_BOX(main_vbox), name_box, FALSE, TRUE, 0); //GtkWidget *hbox = gtk_hbox_new(FALSE, 0); //gtk_box_pack_start(GTK_BOX(main_vbox), hbox, FALSE, TRUE, 0); notebook = gtk_notebook_new(); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE); gtk_widget_set_hexpand(notebook, TRUE); //gtk_widget_set_vexpand(notebook, TRUE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP); /* GtkWidget *camera_table = gtk_grid_new(); gtk_grid_set_column_spacing(GTK_GRID(camera_table), 10); gtk_grid_set_row_spacing(GTK_GRID(camera_table), 10); */ for (i = 0; i < NUM_TATAMIS; i++) { gchar buf[32]; GtkWidget *data_table = gtk_grid_new(); connections[i].scrolled_window = data_table; //connections[i].scrolled_window = gtk_scrolled_window_new(NULL, NULL); gtk_container_set_border_width(GTK_CONTAINER(connections[i].scrolled_window), 10); snprintf(buf, sizeof(buf), "T%d [--]", i+1); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), connections[i].scrolled_window, gtk_label_new(buf)); gtk_grid_attach(GTK_GRID(data_table), gtk_label_new(_("Camera")), 0, 0, 2, 1); gtk_grid_attach(GTK_GRID(data_table), gtk_label_new(_("JudoTimer")), 4, 0, 2, 1); GtkWidget *reload = gtk_button_new_with_label(_("Reload")); gtk_grid_attach(GTK_GRID(data_table), reload, 0, 1, 1, 1); connections[i].in_addr = gtk_entry_new(); connections[i].out_addr = gtk_entry_new(); gtk_entry_set_width_chars(GTK_ENTRY(connections[i].in_addr), 15); gtk_entry_set_width_chars(GTK_ENTRY(connections[i].out_addr), 15); gtk_grid_attach(GTK_GRID(data_table), connections[i].in_addr, 2, 0, 2, 1); gtk_grid_attach(GTK_GRID(data_table), connections[i].out_addr, 6, 0, 2, 1); gtk_grid_attach(GTK_GRID(data_table), gtk_label_new(" "), 0, 1, 1, 1); //gtk_container_add(GTK_CONTAINER(connections[i].scrolled_window), data_table); g_signal_connect (connections[i].out_addr, "activate", G_CALLBACK(enter_callback), gint_to_ptr(i)); g_signal_connect (connections[i].in_addr, "activate", G_CALLBACK(camera_ip_enter_callback), gint_to_ptr(i)); #ifdef WEBKIT g_signal_connect (reload, "clicked", G_CALLBACK(reload_web), gint_to_ptr(i)); #else g_signal_connect (reload, "clicked", G_CALLBACK(select_camera_video), gint_to_ptr(i)); #endif } gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0); gtk_grid_attach_next_to(GTK_GRID(main_vbox), notebook, NULL, GTK_POS_BOTTOM, 1, 1); progress_bar = gtk_progress_bar_new(); gtk_grid_attach_next_to(GTK_GRID(main_vbox), progress_bar, NULL, GTK_POS_BOTTOM, 1, 1); GtkWidget *w = GTK_WIDGET(gtk_scrolled_window_new(NULL, NULL)); #ifdef WEBKIT web_view = WEBKIT_WEB_VIEW(webkit_web_view_new()); webkit_web_view_set_transparent(web_view, TRUE); gtk_container_add(GTK_CONTAINER(w), GTK_WIDGET(web_view)); gtk_widget_set_vexpand(GTK_WIDGET(web_view), TRUE); WebKitWebSettings *web_settings = webkit_web_settings_new(); //g_object_set(G_OBJECT(web_settings), "enable-java-applet", FALSE, NULL); //g_object_set(G_OBJECT(web_settings), "enable-plugins", FALSE, NULL); webkit_web_view_set_settings(web_view, web_settings); gtk_grid_attach_next_to(GTK_GRID(main_vbox), GTK_WIDGET(w), NULL, GTK_POS_BOTTOM, 1, 1); gtk_widget_grab_focus(GTK_WIDGET(web_view)); //webkit_web_view_load_uri(web_view, "http://www.hs.fi"); webkit_web_view_load_uri(web_view, "http://www.quirksmode.org/html5/tests/video.html"); g_signal_connect(web_view, "download-requested", G_CALLBACK(download_req), NULL); //g_signal_connect(web_view, "load-changed", G_CALLBACK(load_changed), NULL); #else /* HTML page */ html_page = create_html_page(); gtk_grid_attach_next_to(GTK_GRID(main_vbox), GTK_WIDGET(html_page), NULL, GTK_POS_BOTTOM, 1, 1); /* Video display */ camera_image = gtk_image_new(); gtk_widget_set_size_request(GTK_WIDGET(camera_image), 640, 360); GtkWidget *event_box = gtk_event_box_new(); gtk_container_add(GTK_CONTAINER(event_box), camera_image); gtk_widget_set_events(event_box, gtk_widget_get_events(event_box) | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | /*GDK_POINTER_MOTION_MASK |*/ GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK); g_signal_connect(G_OBJECT(event_box), "button_press_event", G_CALLBACK(button_press_callback), camera_image); g_signal_connect(G_OBJECT(event_box), "button_release_event", G_CALLBACK(button_release_callback), camera_image); g_signal_connect(G_OBJECT(event_box), "motion-notify-event", G_CALLBACK(button_notify_callback), camera_image); gtk_widget_show(camera_image); gtk_container_add(GTK_CONTAINER(w), GTK_WIDGET(event_box)); gtk_widget_set_vexpand(GTK_WIDGET(event_box), TRUE); gtk_widget_set_hexpand(GTK_WIDGET(event_box), TRUE); gtk_widget_set_vexpand(GTK_WIDGET(camera_image), TRUE); gtk_widget_set_hexpand(GTK_WIDGET(camera_image), TRUE); gtk_grid_attach_next_to(GTK_GRID(main_vbox), GTK_WIDGET(w), NULL, GTK_POS_BOTTOM, 1, 1); #endif /* timers */ timer = g_timer_new(); gtk_widget_show_all(window); set_preferences(); change_language(NULL, NULL, gint_to_ptr(language)); open_comm_socket(); scan_interfaces(); /* Create a bg thread using glib */ gpointer proxy_ssdp_thread(gpointer args); g_snprintf(ssdp_id, sizeof(ssdp_id), "JudoProxy"); static gint run[NUM_CONNECTIONS]; for (i = 0; i < NUM_CONNECTIONS; i++) { char tname[16]; run[i] = i; sprintf(tname, "Connection%d", i); gth = g_thread_new(tname, (GThreadFunc)connection_thread, &run[i]); } gth = g_thread_new("SSDP", (GThreadFunc)proxy_ssdp_thread, (gpointer)&run_flag); gth = g_thread_new("CameraVideo", camera_video, (gpointer)&run_flag); gth = gth; // make compiler happy gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER_ALWAYS); cursor = gdk_cursor_new(GDK_HAND2); //gdk_window_set_cursor(GTK_WIDGET(main_window)->window, cursor); //g_timeout_add(100, timeout_ask_for_data, NULL); g_timeout_add(1000, check_table, NULL); g_timeout_add(100, show_camera_video, NULL); //g_idle_add(show_camera_video, NULL); /* All GTK applications must have a gtk_main(). Control ends here * and waits for an event to occur (like a key press or * mouse event). */ gtk_main(); for (i = 0; i < NUM_CONNECTIONS; i++) run[i] = -1; run_flag = FALSE; /* flag threads to stop and exit */ //g_thread_join(gth); /* wait for thread to exit */ return 0; }
int main (int argc, char **argv) { GtkWidget *window, *embed, *vbox, *menubar, *vpaned, *textpanel; ClutterActor *stage, *grid_view; setlocale (LC_ALL, ""); bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); g_thread_init (NULL); profile_timer = g_timer_new (); clutter_init (&argc, &argv); gtk_init(&argc, &argv); g_set_application_name("GNOME Social Zone"); mx_style_load_from_file (mx_style_get_default (), THEMEDIR "/panel.css", NULL); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), _("GNOME Social Zone")); gtk_window_set_icon_name (GTK_WINDOW (window), "gnome-social-zone"); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox); menubar = get_menubar_menu (GTK_WIDGET(window)); vpaned = gtk_vpaned_new (); gtk_box_pack_start(GTK_BOX (vbox), menubar, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX (vbox), vpaned, TRUE, TRUE, 0); embed = gtk_clutter_embed_new (); gtk_paned_pack1 (GTK_PANED (vpaned), GTK_WIDGET(embed), FALSE, FALSE); textpanel = get_text_panel(); gtk_paned_pack2 (GTK_PANED (vpaned), textpanel, TRUE, TRUE); stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED (embed)); clutter_actor_realize (stage); grid_view = g_object_new (PENGE_TYPE_GRID_VIEW, NULL); clutter_container_add_actor (CLUTTER_CONTAINER (stage), (ClutterActor *)grid_view); clutter_actor_set_size ((ClutterActor *)grid_view, 1016, 536); gtk_widget_set_size_request (embed, 1016, 536); clutter_actor_show_all (stage); gtk_widget_show_all (GTK_WIDGET(window)); g_signal_connect_after (stage, "paint", (GCallback)_stage_paint_cb, NULL); g_message (G_STRLOC ": PROFILE: Main loop started: %f", g_timer_elapsed (profile_timer, NULL)); gtk_main(); return 0; }