#include "kryObject.h" enum kryScriptType { KRY_FORMAT_SSA, KRY_FORMAT_ASS, KRY_FORMAT_SRT, KRY_FORMAT_TEXT, KRY_FORMAT_ENCORE }; struct event_node_data { GList *events; }; class kryScript : public kryObject { public: kryScript(); ~kryScript(); kryStyle *GetStyle(char *name); void GetStyleNameIterator(kryListIterator *iter); void AddStyle(kryStyle *style); void RemoveStyle(char *name); void AddDefaultStyle(); char *GetProperty(char *key); void SetProperty(char *key, char *value); void GetPropertyNameIterator(kryListIterator *iter); gboolean GetModifiedFlag(); void SetModifiedFlag(gboolean modified); enum kryScriptType GetType(); void SetType(enum kryScriptType); char *GetFilename(); void SetFilename(char *filename); char *GetSuggestedFilename(); void SetSuggestedFilename(char *); void AddEvent(kryEventDetailed *event); void InsertEvent(kryEventDetailed *event, int n); kryEventDetailed *GetEvent(int index); void RemoveEvent(kryEventDetailed *event); kryEventDetailed *GetNthEvent(int n); static void BeforeModifyEventW(kryObject *obj, void *data, kryScript *script); void BeforeModifyEvent(kryEventDetailed *line); static void AfterModifyEventW(kryObject *obj, void *data, kryScript *script); void AfterModifyEvent(kryEventDetailed *line); static void BeforeModifyNameW(kryObject *obj, void *data, kryScript *script); void BeforeModifyName(kryEventDetailed *line); static void AfterModifyNameW(kryObject *obj, void *data, kryScript *script); void AfterModifyName(kryEventDetailed *line); int GetBlankCount(); void SetBlankCount(int count); int GetEventCount(); kryList & GetEventList(); void GetEventIterator(kryListIterator *iter); int GetID(); void SetID(int id); void GetCollisionIterator(kryListIterator *iter); void PrintEvents(); void EventTreeRemoveEvent(kryEventDetailed *event); static void PavlDestroyFunc(struct event_node_data *data); void DisableCollisions(); void EnableCollisions(); void GetNameIterator(kryListIterator *iter); int GetNameCount(); char *GetNthName(int index); enum file_encoding GetEncoding(); void SetEncoding(enum file_encoding encoding); kryScript *Copy(); enum { SIGNAL_COLLISION, SIGNAL_NAME_ADDED, SIGNAL_NAME_DELETED, SIGNAL_MODIFIED, SIGNAL_TYPE_CHANGED, SIGNAL_ENCODING_CHANGED, SIGNAL_EVENT_ADDED, SIGNAL_EVENT_REMOVED, SIGNAL_COUNT }; //gboolean isUTF8; //gboolean isUTF16; private: void Init(); static int EventNodeCompare(const void *a, const void *b, void * param); static void EventNodeFree(void *a, void *param); void HookSignals(kryEventDetailed *event); void NameHashAdd(char *name); void NameHashRemove(char *name); struct pavl_table *m_tree_events; gboolean m_disable_collisions; enum file_encoding m_encoding; /* Whether or not this script has been modified since last save */ gboolean m_modifiedFlag; /* The file this script is associated with. */ char *m_filename; /* The file name to suggest if the file has not been saved yet */ char *m_filename_suggested; /* Arbitrary script properties */ kryHash *m_properties; /* Script styles */ kryHash *m_styles; /* Character names */ kryHash *m_names; /* Script events */ kryList m_events; /* Collisions: list of all events that overlap */ kryList m_collisions; /* The number of 'blank' events at the end of the events list */ int m_blank_count; /* Script ID. This is used for the AutoSave filename if the file has not been saved yet. */ int m_id; enum kryScriptType m_script_type; };