static gboolean key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data) { struct coord pos = canvas_to_coord(curr_pos.x, curr_pos.y); DPRINTF("--- key press ---"); switch (event->keyval) { case ' ': user_origin = pos; update_pos(pos); break; case '+': case '=': zoom_in(pos); break; case '-': zoom_out(pos); break; case '*': zoom_to_extents(); break; case '#': zoom_to_frame(); break; case '.': tool_dehover(); draw_ctx.center = pos; redraw(); tool_hover(canvas_to_coord(curr_pos.x, curr_pos.y)); break; case GDK_BackSpace: case GDK_Delete: #if 0 case GDK_KP_Delete: if (selected_inst) { inst_delete(selected_inst); change_world(); } break; #endif case 'u': if (undelete()) change_world(); break; case '/': { /* @@@ find a better place for this */ extern int show_vars; show_vars = !show_vars; change_world(); } } return TRUE; }
static gboolean button_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data) { struct coord pos = canvas_to_coord(event->x, event->y); DPRINTF("--- button release ---"); switch (event->button) { case 1: if (is_dragging_anything()) return FALSE; if (!dragging) break; drag_left(pos); dragging = 0; if (!drag_escaped) { tool_cancel_drag(); selected_inst = selected_before_drag; click_to_select(pos); break; } if (tool_end_drag(pos)) change_world(); break; } return TRUE; }
int canvas_frame_drop(struct frame *frame, int x, int y) { struct coord pos = canvas_to_coord(x, y); if (!tool_place_frame(frame, pos)) return FALSE; change_world(); return TRUE; }
static gboolean button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data) { struct coord pos = canvas_to_coord(event->x, event->y); int res; DPRINTF("--- button press ---"); gtk_widget_grab_focus(widget); switch (event->button) { case 1: if (dragging) { fprintf(stderr, "HUH ?!?\n"); tool_cancel_drag(); dragging = 0; } res = tool_consider_drag(pos); /* tool doesn't do drag */ if (res < 0) { change_world(); inst_deselect(); break; } if (res) { selected_before_drag = selected_inst; inst_deselect(); redraw(); dragging = 1; drag_escaped = 0; drag_start = pos; break; } click_to_select(pos); break; case 2: tool_dehover(); draw_ctx.center = pos; redraw(); tool_hover(canvas_to_coord(event->x, event->y)); break; } return TRUE; }
MainWindow::MainWindow(QWidget *parent, Qt::WFlags flags): QMainWindow(parent, flags), petri_dish(), histogramDialog(0), changed(true), auto_save(false), update_thread(this, this) { setupUi(this); connect(&timer, SIGNAL(timeout()), &petri_dish, SLOT(step())); connect(&petri_dish, SIGNAL(changed()), worldView, SLOT(queueUpdate())); //connect(&petri_dish, SIGNAL(changed()), worldView, SLOT(repaint())); connect(&petri_dish, SIGNAL(changed()), this, SLOT(set_stats())); connect(runButton, SIGNAL(clicked()), this, SLOT(start_stop())); //connect(checkIntegrity, SIGNAL(clicked()), this, SLOT(check_integrity())); connect(stepBtn, SIGNAL(clicked()), this, SLOT(step())); connect(radViewDefault, SIGNAL(clicked()), &petri_dish, SLOT(set_default_view_mode())); connect(radViewBugs, SIGNAL(clicked()), &petri_dish, SLOT(set_bugs_view_mode())); connect(radViewEnergy, SIGNAL(clicked()), &petri_dish, SLOT(set_energy_view_mode())); connect(radViewAge, SIGNAL(clicked()), &petri_dish, SLOT(set_age_view_mode())); connect(radViewSize, SIGNAL(clicked()), &petri_dish, SLOT(set_dna_size_view_mode())); connect(radViewDNA, SIGNAL(clicked()), &petri_dish, SLOT(set_dna_view_mode())); connect(radViewTerrain, SIGNAL(clicked()), &petri_dish, SLOT(set_terrain_view_mode())); connect(actionNew, SIGNAL(triggered()), this, SLOT(new_world())); connect(actionSave, SIGNAL(triggered()), this, SLOT(save_world())); connect(actionOpen, SIGNAL(triggered()), this, SLOT(load_world())); connect(actionSave_As, SIGNAL(triggered()), this, SLOT(save_as_world())); connect(settings, SIGNAL(settingsChanged()), this, SLOT(change_world())); connect(actionAutoSave, SIGNAL(triggered()), this, SLOT(autosave_world())); connect(actionCheck_Integrity, SIGNAL(triggered()), this, SLOT(check_integrity())); connect(worldView, SIGNAL(clicked(int, int)), this, SLOT(edit_bug(int, int))); connect(idleChk, SIGNAL(clicked(bool)), this, SLOT(enableIdleDetect(bool))); connect(&idleTimer, SIGNAL(timeout()), this, SLOT(checkIdle())); autosave_timer.setInterval(1000 * 60 * 2); // every two mins connect(&autosave_timer, SIGNAL(timeout()), this, SLOT(save_world())); petri_dish.set_widget(worldView); petri_dish.init(settings->getParams()); totalEnergy->setText(QString().setNum(petri_dish.get_total_energy())); spinDNAVal->setMaximum(settings->getParams().max_data); set_stats(); last_time = 0; update_time.start(); updates_per_sec = 0; //update_thread.start(); horizontalSlider->setValue(1000); timer.start(0); setAttribute(Qt::WA_QuitOnClose, true); repaint(); if(!qApp->arguments().size() > 1) { bool running; load_from_file(qApp->arguments().at(1), running); if(running) start(); } }