/* * Copyright (C) 2004-2005 Vadim Berezniker * http://www.kryptolus.com * * 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, 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 GNU Make; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * http://www.gnu.org/copyleft/gpl.html * */ #include "stdafx.h" #include "common.h" #include "sabbu.h" #include "gui_main_event.h" #include "gui_event_list.h" #include "gui_event_tree.h" extern struct sabbu app; /* * This is the main class responsible for managing all the GTK calls. * * (For now, not much code has been moved here.) */ kryUiGTK::kryUiGTK() : kryObject(kryUiGTK::SIGNAL_COUNT) { } /*void kryUiGTK::ScriptChangedBeforeCallback(kryObject *obj, kryScript *script) { if(!script) return; kry_waveform_group_region_fixed_list_set(app.ui.waveform_group, NULL); g_object_unref(app.ui.region_list); app.ui.region_list = NULL; }*/ void kryUiGTK::EventAddedCallback(kryObject *kryobj, kryEventDetailed *event) { gui_event_tree_add_event(event); } void kryUiGTK::EventAddedCallbackW(kryObject *kryobj, kryEventDetailed *event, kryUiGTK *obj) { obj->EventAddedCallback(kryobj, event); } void kryUiGTK::EventRemovedCallback(kryObject *kryobj, kryEventDetailed *event) { gui_event_tree_remove_event(event); } void kryUiGTK::EventRemovedCallbackW(kryObject *kryobj, kryEventDetailed *event, kryUiGTK *obj) { obj->EventRemovedCallback(kryobj, event); } /* * Callback called when the current script opened is changed. * (e.g. new script is created, a different script is opened, etc) */ void kryUiGTK::ScriptChangedAfterCallback(kryObject *obj, kryScript *script) { if(!script) return; kry_waveform_group_region_fixed_list_set(app.ui.waveform_group, NULL); g_object_unref(app.ui.region_list); app.ui.region_list = KRY_REGION_FIXED_LIST(kry_region_fixed_list_new()); kry_waveform_group_region_fixed_list_set(app.ui.waveform_group, app.ui.region_list); gui_event_tree_fill_from_script(); // We want to be notified of collisions so we can color the event list script->ConnectSignal(kryScript::SIGNAL_COLLISION, (krySignalFunc1) EventCollisionCallbackW, this); script->ConnectSignal(kryScript::SIGNAL_NAME_ADDED, (krySignalFunc1) EventNameAddedCallbackW, this); script->ConnectSignal(kryScript::SIGNAL_NAME_DELETED, (krySignalFunc1) EventNameDeletedCallbackW, this); script->ConnectSignal(kryScript::SIGNAL_MODIFIED, (krySignalFunc1) EventModifiedCallbackW, this); script->ConnectSignal(kryScript::SIGNAL_TYPE_CHANGED, (krySignalFunc1) EventTypeChangedCallbackW, this); script->ConnectSignal(kryScript::SIGNAL_ENCODING_CHANGED, (krySignalFunc1) EventTypeChangedCallbackW, this); script->ConnectSignal(kryScript::SIGNAL_EVENT_ADDED, (krySignalFunc1) EventAddedCallbackW, this); script->ConnectSignal(kryScript::SIGNAL_EVENT_REMOVED, (krySignalFunc1) EventRemovedCallbackW, this); if(app.opts.disable_collisions) script->DisableCollisions(); gui_event_name_list_clear(); kryListIterator iter; script->GetNameIterator(&iter); while(char *name = iter.GetNext()) this->EventNameAddedCallback(name); if(script->GetType() == KRY_FORMAT_SRT) { gui_main_set_ui_mode(UI_MODE_SRT); } else if(script->GetType() == KRY_FORMAT_ASS) { gui_main_set_ui_mode(UI_MODE_ASS); } else { gui_main_set_ui_mode(UI_MODE_SSA); } gboolean prev = app.ui.time_modified; kry_marker_value_changed(app.ui.marker_event_start, kry_marker_get_value(app.ui.marker_event_start)); kry_marker_value_changed(app.ui.marker_event_end, kry_marker_get_value(app.ui.marker_event_end)); app.ui.time_modified = prev; if(script->GetFilename()) gtk_widget_set_sensitive(GTK_WIDGET(app.ui.menu.script.close), TRUE); else gtk_widget_set_sensitive(GTK_WIDGET(app.ui.menu.script.close), FALSE); if(app.script->GetEncoding() == ENCODING_UTF16) gtk_widget_set_sensitive(GTK_WIDGET(app.ui.menu.script.save_as_utf16), FALSE); else gtk_widget_set_sensitive(GTK_WIDGET(app.ui.menu.script.save_as_utf16), TRUE); } /* * Static wrapper for the EventNameAdded method. */ void kryUiGTK::EventNameAddedCallbackW(kryObject *kryobj, char *name, kryUiGTK *obj) { //kryScript *script = (kryScript *) kryobj; obj->EventNameAddedCallback(name); } /* * Invoked when a new name appears in a script. */ void kryUiGTK::EventNameAddedCallback(char *name) { gui_event_name_list_add(name); } /* * Static wrapper for the EventNameDeleted method. */ void kryUiGTK::EventNameDeletedCallbackW(kryObject *kryobj, char *name, kryUiGTK *obj) { //kryScript *script = (kryScript *) kryobj; obj->EventNameDeletedCallback(name); } /* * Invoked when a name is deleted from a script. */ void kryUiGTK::EventNameDeletedCallback(char *name) { gui_event_name_list_remove(name); } /* * Static wrapper for the ScriptChangedCallback method. */ void kryUiGTK::ScriptChangedAfterCallbackW(kryObject *obj, kryScript *script, kryUiGTK *ui) { ui->ScriptChangedAfterCallback(obj, script); } /* * Static wrapper for the ScriptChangedCallback method. */ /*void kryUiGTK::ScriptChangedBeforeCallbackW(kryObject *obj, kryScript *script, kryUiGTK *ui) { ui->ScriptChangedBeforeCallback(obj, script); }*/ /* * Callback invoked when a collision is detected within the current script. * * Responds by coloring the event in the event list. */ void kryUiGTK::EventCollisionCallback(kryScript *script, int index) { gui_event_list_set_row_color(app.ui.event_list, index, LIST_COLOR_COLLISION); } /* * Static wrapper for the EventCollisionCallback method. */ void kryUiGTK::EventCollisionCallbackW(kryObject *kryobj, int index, kryUiGTK *obj) { kryScript *script = (kryScript *) kryobj; obj->EventCollisionCallback(script, index); } /* * Callback invoked when a script is marked as modified. */ void kryUiGTK::EventModifiedCallback(gboolean modified) { gui_main_script_modified(modified); } /* * Static wrapper for the EventModifiedCallback method. */ void kryUiGTK::EventModifiedCallbackW(kryObject *kryobj, gboolean modified, kryUiGTK *obj) { //kryScript *script = (kryScript *) kryobj; obj->EventModifiedCallback(modified); } void kryUiGTK::EventTypeChangedCallbackW(kryObject *kryobj, enum kryScriptType type, kryUiGTK *obj) { //kryScript *script = (kryScript *) kryobj; gui_main_title_update(); }