aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2013-07-19 16:13:29 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2013-07-19 16:13:29 +0200
commit52a0430d6331d6e0ed4737832b402cd07f7010e4 (patch)
tree39bff5baca42332d24feee2d4e4e0fab26ae4d99
parente03654f84c29ea7909bbd9559e19ea6b4e5b4731 (diff)
downloadgtk-vlc-player-52a0430d6331d6e0ed4737832b402cd07f7010e4.tar.gz
removed old src directory
-rw-r--r--src/Makefile.am39
-rw-r--r--src/config.c319
-rw-r--r--src/default.ui605
-rw-r--r--src/experiment-player.h260
-rw-r--r--src/experiment-player.icobin161862 -> 0 bytes
-rw-r--r--src/format-selection.c271
-rw-r--r--src/icon.rc1
-rw-r--r--src/main.c685
-rw-r--r--src/quick-open.c264
9 files changed, 0 insertions, 2444 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
deleted file mode 100644
index 6f8fef5..0000000
--- a/src/Makefile.am
+++ /dev/null
@@ -1,39 +0,0 @@
-AM_CFLAGS = -Wall
-
-bin_PROGRAMS = experiment-player
-experiment_player_SOURCES = main.c config.c \
- quick-open.c format-selection.c \
- experiment-player.h
-
-experiment_player_CFLAGS = $(AM_CFLAGS)
-experiment_player_CPPFLAGS = -DDEFAULT_UI='"@DEFAULT_UI@"' \
- -DHELP_URI='"@HELP_URI@"'
-experiment_player_LDFLAGS = -export-dynamic
-experiment_player_LDADD =
-
-if USE_W32_RES
-experiment_player_LDADD += icon.$(OBJEXT)
-endif
-
-experiment_player_CFLAGS += @LIBGLIB_CFLAGS@ @LIBGTK_CFLAGS@
-experiment_player_LDADD += @LIBGLIB_LIBS@ @LIBGTK_LIBS@
-
-experiment_player_CPPFLAGS += -I@top_srcdir@/lib/gtk-vlc-player
-experiment_player_LDADD += @top_srcdir@/lib/gtk-vlc-player/libgtk-vlc-player.la
-
-experiment_player_CPPFLAGS += -I@top_srcdir@/lib/gtk-experiment-widgets
-experiment_player_LDADD += @top_srcdir@/lib/gtk-experiment-widgets/libgtk-experiment-widgets.la
-
-experiment_player_CPPFLAGS += -I@top_srcdir@/lib/experiment-reader
-experiment_player_LDADD += @top_srcdir@/lib/experiment-reader/libexperiment-reader.la
-
-experiment_player_CFLAGS += @GTKAPP_CFLAGS@
-experiment_player_LDFLAGS += @GTKAPP_LDFLAGS@
-
-dist_player_data_DATA = default.ui \
- experiment-player.ico
-
-EXTRA_DIST = icon.rc
-
-icon.$(OBJEXT) : icon.rc experiment-player.ico
- @RC@ $< $@
diff --git a/src/config.c b/src/config.c
deleted file mode 100644
index 680cbdf..0000000
--- a/src/config.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/**
- * @file
- * Configuration file handling functions
- */
-
-/*
- * Copyright (C) 2012-2013 Otto-von-Guericke-Universität Magdeburg
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-
-#include <glib.h>
-#include <glib/gprintf.h>
-#include <glib/gstdio.h>
-
-#include <gdk/gdk.h>
-
-#include "experiment-player.h"
-
-static inline void set_default_string(const gchar *group_name, const gchar *key,
- const gchar *string);
-static inline void set_default_boolean(const gchar *group_name, const gchar *key,
- gboolean boolean);
-
-static const gchar *get_group_by_actor(const gchar *actor);
-static const gchar *get_group_by_window(const gchar *window);
-
-static GKeyFile *keyfile;
-static gchar *filename = NULL;
-
-void
-config_init_key_file(void)
-{
- keyfile = g_key_file_new();
-
- /* may fail if no serialized configuration exists */
- g_key_file_load_from_data_dirs(keyfile, CONFIG_KEY_FILE, &filename,
- G_KEY_FILE_KEEP_COMMENTS, NULL);
-
- if (filename == NULL)
- filename = g_build_filename(g_get_user_data_dir(),
- CONFIG_KEY_FILE, NULL);
-
- /* initialize defaults */
- set_default_boolean("Global", "Save-Window-Properties", TRUE);
-
- set_default_string("Directories", "Quick-Open", DEFAULT_QUICKOPEN_DIR);
- set_default_string("Directories", "Formats", DEFAULT_FORMATS_DIR);
-
-#ifdef DEFAULT_INTERACTIVE_FORMAT_FONT
- set_default_string("Wizard Transcript", "Default-Format-Font",
- DEFAULT_INTERACTIVE_FORMAT_FONT);
- set_default_string("Proband Transcript", "Default-Format-Font",
- DEFAULT_INTERACTIVE_FORMAT_FONT);
-#endif
-#ifdef DEFAULT_INTERACTIVE_FORMAT_FGCOLOR
- set_default_string("Wizard Transcript", "Default-Format-Text-Color",
- DEFAULT_INTERACTIVE_FORMAT_FGCOLOR);
- set_default_string("Proband Transcript", "Default-Format-Text-Color",
- DEFAULT_INTERACTIVE_FORMAT_FGCOLOR);
-#endif
-#ifdef DEFAULT_INTERACTIVE_FORMAT_BGCOLOR
- set_default_string("Wizard Transcript", "Default-Format-BG-Color",
- DEFAULT_INTERACTIVE_FORMAT_BGCOLOR);
- set_default_string("Proband Transcript", "Default-Format-BG-Color",
- DEFAULT_INTERACTIVE_FORMAT_BGCOLOR);
-#endif
-}
-
-static inline void
-set_default_string(const gchar *group_name, const gchar *key,
- const gchar *string)
-{
- if (!g_key_file_has_key(keyfile, group_name, key, NULL))
- g_key_file_set_string(keyfile, group_name, key, string);
-}
-
-static inline void
-set_default_boolean(const gchar *group_name, const gchar *key,
- gboolean boolean)
-{
- if (!g_key_file_has_key(keyfile, group_name, key, NULL))
- g_key_file_set_boolean(keyfile, group_name, key, boolean);
-}
-
-void
-config_set_save_window_properties(gboolean enabled)
-{
- g_key_file_set_boolean(keyfile, "Global",
- "Save-Window-Properties", enabled);
-}
-
-gboolean
-config_get_save_window_properties(void)
-{
- return g_key_file_get_boolean(keyfile, "Global",
- "Save-Window-Properties", NULL);
-}
-
-static const gchar *
-get_group_by_window(const gchar *window)
-{
- static gchar group[255];
-
- g_snprintf(group, sizeof(group), "%s Window", window);
- return group;
-}
-
-void
-config_set_window_geometry(const gchar *window, const gchar *geometry)
-{
- g_key_file_set_string(keyfile, get_group_by_window(window),
- "Geometry", geometry);
-}
-
-gchar *
-config_get_window_geometry(const gchar *window)
-{
- return g_key_file_get_string(keyfile, get_group_by_window(window),
- "Geometry", NULL);
-}
-
-void
-config_set_window_state(const gchar *window, GdkWindowState state)
-{
- g_key_file_set_integer(keyfile, get_group_by_window(window),
- "State", state);
-}
-
-GdkWindowState
-config_get_window_state(const gchar *window)
-{
- return g_key_file_get_integer(keyfile, get_group_by_window(window),
- "State", NULL);
-}
-
-void
-config_set_quickopen_directory(const gchar *dir)
-{
- g_key_file_set_string(keyfile, "Directories", "Quick-Open", dir);
-}
-
-gchar *
-config_get_quickopen_directory(void)
-{
- return g_key_file_get_string(keyfile, "Directories", "Quick-Open", NULL);
-}
-
-void
-config_set_formats_directory(const gchar *dir)
-{
- g_key_file_set_string(keyfile, "Directories", "Formats", dir);
-}
-
-gchar *
-config_get_formats_directory(void)
-{
- return g_key_file_get_string(keyfile, "Directories", "Formats", NULL);
-}
-
-static const gchar *
-get_group_by_actor(const gchar *actor)
-{
- static gchar group[255];
-
- g_snprintf(group, sizeof(group), "%s Transcript", actor);
- return group;
-}
-
-/** @private */
-void
-config_generic_set_transcript_font(const gchar *actor, const gchar *key,
- const PangoFontDescription *font)
-{
- const gchar *group = get_group_by_actor(actor);
-
- if (font == NULL) {
- g_key_file_remove_key(keyfile, group, key, NULL);
- } else {
- gchar *font_name = pango_font_description_to_string(font);
- g_key_file_set_string(keyfile, group, key, font_name);
- g_free(font_name);
- }
-}
-
-/** @private */
-PangoFontDescription *
-config_generic_get_transcript_font(const gchar *actor, const gchar *key)
-{
- gchar *font_name;
- PangoFontDescription *font_desc = NULL;
-
- font_name = g_key_file_get_string(keyfile, get_group_by_actor(actor),
- key, NULL);
- if (font_name != NULL) {
- font_desc = pango_font_description_from_string(font_name);
- g_free(font_name);
- }
-
- return font_desc;
-}
-
-/** @private */
-void
-config_generic_set_transcript_color(const gchar *actor, const gchar *key,
- const GdkColor *color)
-{
- const gchar *group = get_group_by_actor(actor);
-
- if (color == NULL) {
- g_key_file_remove_key(keyfile, group, key, NULL);
- } else {
- gchar *color_name = gdk_color_to_string(color);
- g_key_file_set_string(keyfile, group, key, color_name);
- g_free(color_name);
- }
-}
-
-/** @private */
-gboolean
-config_generic_get_transcript_color(const gchar *actor, const gchar *key,
- GdkColor *color)
-{
- gchar *color_name;
-
- color_name = g_key_file_get_string(keyfile, get_group_by_actor(actor),
- key, NULL);
- if (color_name == NULL)
- return FALSE;
-
- gdk_color_parse(color_name, color);
- g_free(color_name);
-
- return TRUE;
-}
-
-void
-config_set_transcript_reverse_mode(const gchar *actor, gboolean reverse)
-{
- g_key_file_set_boolean(keyfile, get_group_by_actor(actor),
- "Widget-Reverse-Mode", reverse);
-}
-
-gboolean
-config_get_transcript_reverse_mode(const gchar *actor)
-{
- return g_key_file_get_boolean(keyfile, get_group_by_actor(actor),
- "Widget-Reverse-Mode", NULL);
-}
-
-void
-config_set_transcript_alignment(const gchar *actor, PangoAlignment alignment)
-{
- static gchar **values = NULL;
-
- if (values == NULL) {
- gchar *possible_values;
-
- pango_parse_enum(PANGO_TYPE_ALIGNMENT, "", NULL,
- FALSE, &possible_values);
- values = g_strsplit(possible_values, "/", 0);
- g_free(possible_values);
- }
-
- g_key_file_set_string(keyfile, get_group_by_actor(actor),
- "Widget-Alignment", values[alignment]);
-}
-
-PangoAlignment
-config_get_transcript_alignment(const gchar *actor)
-{
- gchar *value;
- gint alignment = (gint)PANGO_ALIGN_LEFT;
-
- value = g_key_file_get_string(keyfile, get_group_by_actor(actor),
- "Widget-Alignment", NULL);
- if (value == NULL)
- return PANGO_ALIGN_LEFT;
-
- pango_parse_enum(PANGO_TYPE_ALIGNMENT, value, &alignment, FALSE, NULL);
- g_free(value);
-
- return (PangoAlignment)alignment;
-}
-
-void
-config_save_key_file(void)
-{
- gchar *data;
- gsize length;
- FILE *file;
-
- data = g_key_file_to_data(keyfile, &length, NULL);
-
- file = g_fopen(filename, "w");
- if (file != NULL) {
- fwrite(data, (size_t)length, 1, file);
- fclose(file);
- }
-
- g_free(data);
-}
diff --git a/src/default.ui b/src/default.ui
deleted file mode 100644
index acb3b4b..0000000
--- a/src/default.ui
+++ /dev/null
@@ -1,605 +0,0 @@
-<?xml version="1.0"?>
-<interface>
- <requires lib="gtk+" version="2.16"/>
- <!-- interface-requires gtk-vlc-player 0.0 -->
- <!-- interface-requires gtk-experiment-widgets 0.0 -->
- <!-- interface-naming-policy project-wide -->
- <object class="GtkWindow" id="player_window">
- <property name="title" translatable="yes">Experiment Player</property>
- <property name="default_width">400</property>
- <property name="default_height">300</property>
- <signal name="delete_event" handler="player_window_delete_event_cb"/>
- <child>
- <object class="GtkVBox" id="player_window_vbox">
- <property name="visible">True</property>
- <child>
- <object class="GtkMenuBar" id="player_window_menubar">
- <property name="visible">True</property>
- <child>
- <object class="GtkMenuItem" id="file_item">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_File</property>
- <property name="use_underline">True</property>
- <child type="submenu">
- <object class="GtkMenu" id="file_menu">
- <property name="visible">True</property>
- <child>
- <object class="GtkImageMenuItem" id="file_menu_openmovie_item">
- <property name="label" translatable="yes">Open _Video...</property>
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="image">image1</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="file_menu_openmovie_item_activate_cb" object="player_window"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="file_menu_opentranscript_item">
- <property name="label" translatable="yes">Open _Transcript...</property>
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="image">image2</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="file_menu_opentranscript_item_activate_cb" object="player_window"/>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorMenuItem" id="file_menu_separator_item">
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="file_menu_quit_item">
- <property name="label">gtk-quit</property>
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <accelerator key="q" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- <signal name="activate" handler="generic_quit_cb"/>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="quickopen_item">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Quick Open</property>
- <property name="use_underline">True</property>
- <child type="submenu">
- <object class="GtkMenu" id="quickopen_menu">
- <property name="visible">True</property>
- <child>
- <object class="GtkMenuItem" id="quickopen_menu_empty_item">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="label" translatable="yes">No experiments found</property>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorMenuItem" id="quickopen_menu_separator_item">
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="quickopen_menu_choosedir_item">
- <property name="label" translatable="yes">Choose _Directory...</property>
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="image">image3</property>
- <property name="use_stock">False</property>
- <accelerator key="d" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- <signal name="activate" handler="quickopen_menu_choosedir_item_activate_cb" object="player_window"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="quickopen_menu_refresh_item">
- <property name="label">gtk-refresh</property>
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <accelerator key="r" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- <signal name="activate" handler="quickopen_menu_refresh_item_activate_cb" object="quickopen_menu"/>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="help_item">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Help</property>
- <property name="use_underline">True</property>
- <child type="submenu">
- <object class="GtkMenu" id="help_menu">
- <property name="visible">True</property>
- <child>
- <object class="GtkImageMenuItem" id="help_menu_manual_item">
- <property name="label" translatable="yes">_Help</property>
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="image">image4</property>
- <property name="use_stock">False</property>
- <accelerator key="F1" signal="activate"/>
- <signal name="activate" handler="help_menu_manual_item_activate_cb"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="help_menu_about_item">
- <property name="label">gtk-about</property>
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <signal name="activate" handler="help_menu_about_item_activate_cb" object="about_dialog"/>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVlcPlayer" id="player_widget">
- <property name="visible">True</property>
- <signal name="time_changed" handler="player_widget_time_changed_cb" object="player_window_statusbar_time"/>
- <signal name="length_changed" handler="player_widget_length_changed_cb" object="player_window_statusbar_length"/>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="controls_hbox">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <child>
- <object class="GtkButton" id="playpause_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="tooltip_text" translatable="yes">Start video playback</property>
- <property name="relief">none</property>
- <property name="focus_on_click">False</property>
- <signal name="clicked" handler="playpause_button_clicked_cb" object="player_widget"/>
- <child>
- <object class="GtkImage" id="playpause_image">
- <property name="visible">True</property>
- <property name="stock">gtk-media-play</property>
- <property name="icon-size">2</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="stop_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="tooltip_text" translatable="yes">Stop video playback</property>
- <property name="relief">none</property>
- <property name="focus_on_click">False</property>
- <signal name="clicked" handler="stop_button_clicked_cb" object="player_widget"/>
- <child>
- <object class="GtkImage" id="stop_image">
- <property name="visible">True</property>
- <property name="stock">gtk-media-stop</property>
- <property name="icon-size">2</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkHScale" id="scale_widget">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Current playback position</property>
- <property name="restrict_to_fill_level">False</property>
- <property name="draw_value">False</property>
- </object>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkVolumeButton" id="volume_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="has_tooltip">True</property>
- <property name="relief">none</property>
- <property name="focus_on_click">False</property>
- <property name="orientation">vertical</property>
- <property name="value">1</property>
- <property name="icons">audio-volume-muted
-audio-volume-high
-audio-volume-low
-audio-volume-medium</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkStatusbar" id="player_window_statusbar">
- <property name="visible">True</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkLabel" id="player_window_statusbar_time">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Time: 0:00</property>
- <property name="width_chars">15</property>
- <property name="single_line_mode">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="player_window_statusbar_length">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Length: 0:00</property>
- <property name="width_chars">15</property>
- <property name="single_line_mode">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <object class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="stock">gtk-open</property>
- </object>
- <object class="GtkImage" id="image2">
- <property name="visible">True</property>
- <property name="stock">gtk-open</property>
- </object>
- <object class="GtkImage" id="image3">
- <property name="visible">True</property>
- <property name="stock">gtk-directory</property>
- </object>
- <object class="GtkImage" id="image4">
- <property name="visible">True</property>
- <property name="stock">gtk-help</property>
- </object>
- <object class="GtkWindow" id="info_window">
- <property name="title" translatable="yes">Experiment Data</property>
- <property name="default_width">680</property>
- <property name="default_height">700</property>
- <property name="deletable">False</property>
- <child>
- <object class="GtkVBox" id="info_window_vbox">
- <property name="visible">True</property>
- <child>
- <object class="GtkMenuBar" id="info_window_menubar">
- <property name="visible">True</property>
- <child>
- <object class="GtkMenuItem" id="formats_item">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Formats</property>
- <property name="use_underline">True</property>
- <child type="submenu">
- <object class="GtkMenu" id="formats_menu">
- <property name="visible">True</property>
- <child>
- <object class="GtkImageMenuItem" id="formats_menu_choosedir_item">
- <property name="label" translatable="yes">Choose _Directory...</property>
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="image">image5</property>
- <property name="use_stock">False</property>
- <accelerator key="d" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- <signal name="activate" handler="formats_menu_choosedir_item_activate_cb" object="info_window"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="formats_menu_refresh_item">
- <property name="label">gtk-refresh</property>
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <accelerator key="r" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- <signal name="activate" handler="formats_menu_refresh_item_activate_cb" object="transcript_wizard_combo"/>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHPaned" id="info_window_hpane">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="position">339</property>
- <child>
- <object class="GtkTable" id="transcript_table">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="n_rows">3</property>
- <property name="n_columns">3</property>
- <child>
- <object class="GtkExperimentTranscript" id="transcript_wizard_widget">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </object>
- </child>
- <child>
- <object class="GtkExperimentTranscript" id="transcript_proband_widget">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkVScrollbar" id="transcript_scroll_widget">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="transcript_proband_combo">
- <property name="visible">True</property>
- <property name="tooltip_text" translatable="yes">Currently applied format file</property>
- <signal name="changed" handler="generic_transcript_combo_changed_cb" object="transcript_proband_widget"/>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="transcript_wizard_combo">
- <property name="visible">True</property>
- <property name="tooltip_text" translatable="yes">Currently applied format file</property>
- <signal name="changed" handler="generic_transcript_combo_changed_cb" object="transcript_wizard_widget"/>
- </object>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="transcript_wizard_entry_hbox">
- <property name="visible">True</property>
- <child>
- <object class="GtkEntry" id="transcript_wizard_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Format expression</property>
- <property name="invisible_char">&#x25CF;</property>
- <property name="primary_icon_stock">gtk-apply</property>
- <signal name="changed" handler="generic_transcript_entry_changed_cb" object="transcript_wizard_widget"/>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVSeparator" id="transcript_wizard_entry_separator">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="padding">5</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="transcript_wizard_entry_check">
- <property name="label" translatable="yes">Markup</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="tooltip_text" translatable="yes">Allow Pango markup in format expression</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="generic_transcript_entry_check_toggled_cb" object="transcript_wizard_entry"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="transcript_proband_entry_hbox">
- <property name="visible">True</property>
- <child>
- <object class="GtkEntry" id="transcript_proband_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Format expression</property>
- <property name="invisible_char">&#x25CF;</property>
- <property name="primary_icon_stock">gtk-apply</property>
- <signal name="changed" handler="generic_transcript_entry_changed_cb" object="transcript_proband_widget"/>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVSeparator" id="transcript_proband_entry_separator">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="padding">5</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="transcript_proband_entry_check">
- <property name="label" translatable="yes">Markup</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="tooltip_text" translatable="yes">Allow Pango markup in format expression</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="generic_transcript_entry_check_toggled_cb" object="transcript_proband_entry"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="resize">False</property>
- <property name="shrink">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow" id="navigator_scrolledwindow">
- <property name="width_request">300</property>
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">automatic</property>
- <property name="vscrollbar_policy">automatic</property>
- <child>
- <object class="GtkExperimentNavigator" id="navigator_widget">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_clickable">False</property>
- <property name="search_column">0</property>
- <signal name="time_selected" handler="navigator_widget_time_selected_cb" object="player_widget"/>
- <signal name="section_activated" handler="navigator_widget_section_activated_cb"/>
- <signal name="focus_in_event" handler="navigator_widget_generic_focus_event_cb"/>
- <signal name="focus_out_event" handler="navigator_widget_generic_focus_event_cb"/>
- </object>
- </child>
- </object>
- <packing>
- <property name="resize">True</property>
- <property name="shrink">True</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <object class="GtkImage" id="image5">
- <property name="visible">True</property>
- <property name="stock">gtk-directory</property>
- </object>
- <object class="GtkAboutDialog" id="about_dialog">
- <property name="border_width">5</property>
- <property name="resizable">False</property>
- <property name="window_position">center-on-parent</property>
- <property name="destroy_with_parent">True</property>
- <property name="type_hint">dialog</property>
- <property name="skip_taskbar_hint">True</property>
- <property name="skip_pager_hint">True</property>
- <property name="transient_for">player_window</property>
- <property name="copyright">Copyright (C) 2012-2013 Otto-von-Guericke-Universit&#xE4;t Magdeburg</property>
- <property name="license">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 3 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, see &lt;http://www.gnu.org/licenses/&gt;.</property>
- <property name="authors">Jens Lammert &lt;jens.lammert@st.ovgu.de&gt;
-Robin Haberkorn &lt;robin.haberkorn@st.ovgu.de&gt;</property>
- <property name="documenters">Jens Lammert &lt;jens.lammert@st.ovgu.de&gt;
-Robin Haberkorn &lt;robin.haberkorn@st.ovgu.de&gt;</property>
- <property name="wrap_license">True</property>
- <child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="spacing">2</property>
- <child>
- <placeholder/>
- </child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
-</interface>
diff --git a/src/experiment-player.h b/src/experiment-player.h
deleted file mode 100644
index 35e6251..0000000
--- a/src/experiment-player.h
+++ /dev/null
@@ -1,260 +0,0 @@
-/**
- * @file
- * Main program header
- */
-
-/*
- * Copyright (C) 2012-2013 Otto-von-Guericke-Universität Magdeburg
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __EXPERIMENT_PLAYER_H
-#define __EXPERIMENT_PLAYER_H
-
-#include <glib.h>
-#include <glib/gprintf.h>
-
-#include <gdk/gdk.h>
-
-#include <gtk/gtk.h>
-
-/** Main program error domain */
-#define EXPERIMENT_PLAYER_ERROR \
- (experiment_player_error_quark())
-
-/** Main program error codes */
-typedef enum {
- EXPERIMENT_PLAYER_ERROR_OPEN /**< Error opening file/URI */
-} ExperimentPlayerError;
-
-/*
- * main.c
- */
-/** @private */
-GQuark experiment_player_error_quark(void);
-
-gboolean load_media_file(const gchar *file);
-gboolean load_transcript_file(const gchar *file);
-
-void show_message_dialog_gerror(GError *err);
-
-const gchar *window_get_geometry(GtkWindow *window);
-void window_set_state(GtkWindow *window, GdkWindowState state);
-
-extern GtkWidget *player_window,
- *info_window,
- *about_dialog;
-
-extern GtkWidget *player_widget,
- *controls_hbox,
- *scale_widget,
- *playpause_button,
- *volume_button;
-
-extern GtkWidget *player_window_statusbar;
-
-extern GtkWidget *transcript_table,
- *transcript_wizard_widget,
- *transcript_proband_widget,
- *transcript_scroll_widget;
-
-extern GtkWidget *navigator_scrolledwindow,
- *navigator_widget;
-
-extern gchar *current_filename;
-
-/*
- * config.c
- */
-void config_init_key_file(void);
-
-void config_set_save_window_properties(gboolean enabled);
-gboolean config_get_save_window_properties(void);
-void config_set_window_geometry(const gchar *window, const gchar *geometry);
-gchar *config_get_window_geometry(const gchar *window);
-void config_set_window_state(const gchar *window, GdkWindowState state);
-GdkWindowState config_get_window_state(const gchar *window);
-
-void config_set_quickopen_directory(const gchar *dir);
-gchar *config_get_quickopen_directory(void);
-void config_set_formats_directory(const gchar *dir);
-gchar *config_get_formats_directory(void);
-
-/** @private */
-void config_generic_set_transcript_font(const gchar *actor, const gchar *key,
- const PangoFontDescription *font);
-/** @private */
-PangoFontDescription *config_generic_get_transcript_font(const gchar *actor,
- const gchar *key);
-
-/** @private */
-void config_generic_set_transcript_color(const gchar *actor, const gchar *key,
- const GdkColor *color);
-/** @private */
-gboolean config_generic_get_transcript_color(const gchar *actor, const gchar *key,
- GdkColor *color);
-
-/** @public */
-static inline void
-config_set_transcript_font(const gchar *actor, const PangoFontDescription *font)
-{
- config_generic_set_transcript_font(actor, "Widget-Font", font);
-}
-/** @public */
-static inline PangoFontDescription *
-config_get_transcript_font(const gchar *actor)
-{
- return config_generic_get_transcript_font(actor, "Widget-Font");
-}
-
-/** @public */
-static inline void
-config_set_transcript_text_color(const gchar *actor, const GdkColor *color)
-{
- config_generic_set_transcript_color(actor, "Widget-Text-Color", color);
-}
-/** @public */
-static inline gboolean
-config_get_transcript_text_color(const gchar *actor, GdkColor *color)
-{
- return config_generic_get_transcript_color(actor, "Widget-Text-Color",
- color);
-}
-
-/** @public */
-static inline void
-config_set_transcript_bg_color(const gchar *actor, const GdkColor *color)
-{
- config_generic_set_transcript_color(actor, "Widget-BG-Color", color);
-}
-/** @public */
-static inline gboolean
-config_get_transcript_bg_color(const gchar *actor, GdkColor *color)
-{
- return config_generic_get_transcript_color(actor, "Widget-BG-Color",
- color);
-}
-
-/** @public */
-static inline void
-config_set_transcript_default_format_font(const gchar *actor,
- const PangoFontDescription *font)
-{
- config_generic_set_transcript_font(actor, "Default-Format-Font", font);
-}
-/** @public */
-static inline PangoFontDescription *
-config_get_transcript_default_format_font(const gchar *actor)
-{
- return config_generic_get_transcript_font(actor, "Default-Format-Font");
-}
-
-/** @public */
-static inline void
-config_set_transcript_default_format_text_color(const gchar *actor,
- const GdkColor *color)
-{
- config_generic_set_transcript_color(actor, "Default-Format-Text-Color",
- color);
-}
-/** @public */
-static inline gboolean
-config_get_transcript_default_format_text_color(const gchar *actor,
- GdkColor *color)
-{
- return config_generic_get_transcript_color(actor, "Default-Format-Text-Color",
- color);
-}
-
-/** @public */
-static inline void
-config_set_transcript_default_format_bg_color(const gchar *actor,
- const GdkColor *color)
-{
- config_generic_set_transcript_color(actor, "Default-Format-BG-Color",
- color);
-}
-/** @public */
-static inline gboolean
-config_get_transcript_default_format_bg_color(const gchar *actor,
- GdkColor *color)
-{
- return config_generic_get_transcript_color(actor, "Default-Format-BG-Color",
- color);
-}
-
-void config_set_transcript_reverse_mode(const gchar *actor, gboolean reverse);
-gboolean config_get_transcript_reverse_mode(const gchar *actor);
-
-void config_set_transcript_alignment(const gchar *actor,
- PangoAlignment alignment);
-PangoAlignment config_get_transcript_alignment(const gchar *actor);
-
-void config_save_key_file(void);
-
-/*
- * quick-open.c
- */
-void refresh_quickopen_menu(GtkMenu *menu);
-
-extern GtkWidget *quickopen_menu,
- *quickopen_menu_empty_item;
-
-/*
- * format-selection.c
- */
-void format_selection_init(void);
-
-extern GtkWidget *transcript_wizard_combo,
- *transcript_proband_combo,
- *transcript_wizard_entry_check,
- *transcript_proband_entry_check;
-
-/*
- * macros and inline functions
- */
-/** @private */
-#define BUILDER_INIT(BUILDER, VAR) G_STMT_START { \
- VAR = GTK_WIDGET(gtk_builder_get_object(BUILDER, #VAR)); \
-} G_STMT_END
-
-/** @public */
-static inline gchar *
-path_strip_extension(const gchar *filename)
-{
- gchar *ret = g_strdup(filename);
- gchar *p;
-
- if ((p = g_strrstr(ret, ".")) != NULL)
- *p = '\0';
-
- return ret;
-}
-
-/** @public */
-static inline const gchar *
-format_timepoint(const gchar *prefix, gint64 timept)
-{
- static gchar buf[255];
-
- g_snprintf(buf, sizeof(buf),
- "%s%" G_GINT64_FORMAT ":%02" G_GINT64_FORMAT,
- prefix != NULL ? prefix : "",
- timept / (1000*60), (timept/1000) % 60);
-
- return buf;
-}
-
-#endif \ No newline at end of file
diff --git a/src/experiment-player.ico b/src/experiment-player.ico
deleted file mode 100644
index 9b71b6e..0000000
--- a/src/experiment-player.ico
+++ /dev/null
Binary files differ
diff --git a/src/format-selection.c b/src/format-selection.c
deleted file mode 100644
index c53ad0b..0000000
--- a/src/format-selection.c
+++ /dev/null
@@ -1,271 +0,0 @@
-/**
- * @file
- * Functions for handling the transcripts' format file selection and
- * interactive format entry.
- */
-
-/*
- * Copyright (C) 2012-2013 Otto-von-Guericke-Universität Magdeburg
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <assert.h>
-
-#include <glib.h>
-#include <glib/gprintf.h>
-#include <glib/gstdio.h>
-
-#include <gtk/gtk.h>
-
-#include <gtk-experiment-transcript.h>
-
-#include "experiment-player.h"
-
-static void refresh_formats_store(GtkListStore *store);
-
-GtkWidget *transcript_wizard_combo,
- *transcript_proband_combo,
- *transcript_wizard_entry_check,
- *transcript_proband_entry_check;
-
-enum {
- COL_NAME,
- COL_FILENAME,
- NUM_COLS
-};
-
-/*
- * GtkBuilder signal callbacks
- * NOTE: for some strange reason the parameters are switched
- */
-
-/** @private */
-void
-formats_menu_choosedir_item_activate_cb(GtkWidget *widget,
- gpointer data __attribute__((unused)))
-{
- GtkTreeModel *model =
- gtk_combo_box_get_model(GTK_COMBO_BOX(transcript_wizard_combo));
-
- GtkWidget *dialog;
- gchar *formats_directory;
-
- dialog = gtk_file_chooser_dialog_new("Choose Directory...", GTK_WINDOW(widget),
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
- NULL);
-
- formats_directory = config_get_formats_directory();
- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
- formats_directory);
- g_free(formats_directory);
-
- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
- formats_directory =
- gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
- config_set_formats_directory(formats_directory);
- g_free(formats_directory);
-
- refresh_formats_store(GTK_LIST_STORE(model));
- }
-
- gtk_widget_destroy(dialog);
-}
-
-/** @private */
-void
-formats_menu_refresh_item_activate_cb(GtkWidget *widget,
- gpointer data __attribute__((unused)))
-{
- GtkTreeModel *model = gtk_combo_box_get_model(GTK_COMBO_BOX(widget));
-
- refresh_formats_store(GTK_LIST_STORE(model));
-}
-
-/** @private */
-void
-generic_transcript_combo_changed_cb(gpointer user_data, GtkComboBox *combo)
-{
- GtkExperimentTranscript *trans = GTK_EXPERIMENT_TRANSCRIPT(user_data);
-
- GtkTreeModel *model = gtk_combo_box_get_model(combo);
- GtkTreeIter iter;
- gchar *filename = NULL;
-
- GError *error = NULL;
-
- if (gtk_combo_box_get_active_iter(combo, &iter))
- gtk_tree_model_get(model, &iter, COL_FILENAME, &filename, -1);
-
- /*
- * filename may be empty (null-entry) in which case any active format
- * will be reset
- */
- if (!gtk_experiment_transcript_load_formats(trans, filename, &error)) {
- show_message_dialog_gerror(error);
- g_error_free(error);
-
- gtk_combo_box_set_active_iter(combo, NULL);
- }
- g_free(filename);
-
-#if 0
- refresh_formats_store(GTK_LIST_STORE(model));
-#endif
-}
-
-/** @private */
-void
-generic_transcript_entry_changed_cb(gpointer user_data, GtkEditable *editable)
-{
- GtkExperimentTranscript *trans = GTK_EXPERIMENT_TRANSCRIPT(user_data);
- const gchar *text = gtk_entry_get_text(GTK_ENTRY(editable));
-
- GtkToggleButton *toggle;
- gboolean isMarkup;
-
- gboolean res;
-
- toggle = trans == GTK_EXPERIMENT_TRANSCRIPT(transcript_wizard_widget)
- ? GTK_TOGGLE_BUTTON(transcript_wizard_entry_check)
- : GTK_TOGGLE_BUTTON(transcript_proband_entry_check);
- isMarkup = gtk_toggle_button_get_active(toggle);
-
- res = gtk_experiment_transcript_set_interactive_format(trans, text,
- isMarkup, NULL);
-
- gtk_entry_set_icon_from_stock(GTK_ENTRY(editable),
- GTK_ENTRY_ICON_PRIMARY,
- res ? GTK_STOCK_APPLY
- : GTK_STOCK_DIALOG_ERROR);
- gtk_entry_set_icon_sensitive(GTK_ENTRY(editable),
- GTK_ENTRY_ICON_PRIMARY,
- text != NULL && *text);
-}
-
-/** @private */
-void
-generic_transcript_entry_check_toggled_cb(gpointer user_data,
- GtkToggleButton *widget __attribute__((unused)))
-{
- gint position = 0;
-
- /*
- * Hack to update the transcript's interactive format
- */
- gtk_editable_insert_text(GTK_EDITABLE(user_data), "", 0, &position);
-}
-
-static void
-refresh_formats_store(GtkListStore *store)
-{
- static GPatternSpec *pattern = NULL;
-
- GtkTreeModel *model = GTK_TREE_MODEL(store);
- gchar *wizard_filename = NULL;
- gchar *proband_filename = NULL;
-
- gchar *formats_directory;
- GDir *dir;
- const gchar *name;
- GtkTreeIter iter;
-
- if (pattern == NULL)
- pattern = g_pattern_spec_new(EXPERIMENT_FORMATS_FILTER);
-
- if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(transcript_wizard_combo),
- &iter))
- gtk_tree_model_get(model, &iter,
- COL_FILENAME, &wizard_filename, -1);
- if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(transcript_proband_combo),
- &iter))
- gtk_tree_model_get(model, &iter,
- COL_FILENAME, &proband_filename, -1);
-
- gtk_list_store_clear(store);
- /* add null-entry */
- gtk_list_store_append(store, &iter);
-
- formats_directory = config_get_formats_directory();
- dir = g_dir_open(formats_directory, 0, NULL);
-
- while ((name = g_dir_read_name(dir)) != NULL) {
- gchar *itemname, *fullname;
-
- if (!g_pattern_match_string(pattern, name))
- continue;
-
- itemname = path_strip_extension(name);
- fullname = g_build_filename(formats_directory, name, NULL);
-
- gtk_list_store_append(store, &iter);
- gtk_list_store_set(store, &iter,
- COL_NAME, itemname,
- COL_FILENAME, fullname,
- -1);
-
- if (!g_strcmp0(fullname, wizard_filename))
- gtk_combo_box_set_active_iter(GTK_COMBO_BOX(transcript_wizard_combo),
- &iter);
- if (!g_strcmp0(fullname, proband_filename))
- gtk_combo_box_set_active_iter(GTK_COMBO_BOX(transcript_proband_combo),
- &iter);
-
- g_free(fullname);
- g_free(itemname);
- }
-
- g_dir_close(dir);
- g_free(formats_directory);
-
- g_free(proband_filename);
- g_free(wizard_filename);
-}
-
-void
-format_selection_init(void)
-{
- GtkListStore *formats_store;
- GtkCellRenderer *renderer;
-
- formats_store = gtk_list_store_new(NUM_COLS,
- G_TYPE_STRING, G_TYPE_STRING);
- gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(formats_store),
- COL_NAME, GTK_SORT_ASCENDING);
-
- gtk_combo_box_set_model(GTK_COMBO_BOX(transcript_wizard_combo),
- GTK_TREE_MODEL(formats_store));
- gtk_combo_box_set_model(GTK_COMBO_BOX(transcript_proband_combo),
- GTK_TREE_MODEL(formats_store));
-
- renderer = gtk_cell_renderer_text_new();
- gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(transcript_wizard_combo),
- renderer, TRUE);
- gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(transcript_wizard_combo),
- renderer, "text", COL_NAME);
- gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(transcript_proband_combo),
- renderer, TRUE);
- gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(transcript_proband_combo),
- renderer, "text", COL_NAME);
-
- refresh_formats_store(formats_store);
-
- g_object_unref(formats_store);
-}
diff --git a/src/icon.rc b/src/icon.rc
deleted file mode 100644
index b473860..0000000
--- a/src/icon.rc
+++ /dev/null
@@ -1 +0,0 @@
-DEFAULT ICON "experiment-player.ico"
diff --git a/src/main.c b/src/main.c
deleted file mode 100644
index 6bfe1c2..0000000
--- a/src/main.c
+++ /dev/null
@@ -1,685 +0,0 @@
-/**
- * @file
- * Program entry point, UI initialization, widget connections and GTK event
- * loop.
- */
-
-/*
- * Copyright (C) 2012-2013 Otto-von-Guericke-Universität Magdeburg
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <locale.h>
-
-#ifdef HAVE_WINDOWS_H
-#include <windows.h>
-#include <shellapi.h>
-#endif
-
-#include <glib.h>
-#include <glib/gprintf.h>
-
-#include <gdk/gdk.h>
-
-#include <gtk/gtk.h>
-
-#include <gtk-vlc-player.h>
-#include <gtk-experiment-navigator.h>
-#include <gtk-experiment-transcript.h>
-#include <experiment-reader.h>
-
-#include "experiment-player.h"
-
-static inline void button_image_set_from_stock(GtkButton *widget,
- const gchar *name);
-
-GtkWidget *player_window,
- *info_window,
- *about_dialog;
-
-GtkWidget *player_widget,
- *controls_hbox,
- *scale_widget,
- *playpause_button,
- *volume_button;
-
-GtkWidget *player_window_statusbar;
-
-GtkWidget *transcript_table,
- *transcript_wizard_widget,
- *transcript_proband_widget,
- *transcript_scroll_widget;
-
-GtkWidget *navigator_scrolledwindow,
- *navigator_widget;
-
-gchar *current_filename = NULL;
-
-#define TOOLTIP_PLAY "Start video playback"
-#define TOOLTIP_PAUSE "Pause video playback"
-
-#define SPEAKER_WIZARD "Wizard"
-#define SPEAKER_PROBAND "Proband"
-
-/** @private */
-GQuark
-experiment_player_error_quark(void)
-{
- return g_quark_from_static_string("experiment-player-error-quark");
-}
-
-/*
- * GtkBuilder signal callbacks
- * NOTE: for some strange reason the parameters are switched
- */
-
-/** @private */
-void
-help_menu_about_item_activate_cb(GtkWidget *widget,
- gpointer data __attribute__((unused)))
-{
- gtk_dialog_run(GTK_DIALOG(widget));
- gtk_widget_hide(widget);
-}
-
-/** @private */
-void
-player_widget_length_changed_cb(GtkWidget *widget, gint64 new_length,
- gpointer data __attribute__((unused)))
-{
- gtk_label_set_text(GTK_LABEL(widget),
- format_timepoint("Length: ", new_length));
-}
-
-/** @private */
-void
-player_widget_time_changed_cb(GtkWidget *widget, gint64 new_time,
- gpointer data __attribute__((unused)))
-{
- gtk_label_set_text(GTK_LABEL(widget),
- format_timepoint("Time: ", new_time));
-}
-
-/** @private */
-void
-playpause_button_clicked_cb(GtkWidget *widget, gpointer data)
-{
- gboolean is_playing = gtk_vlc_player_toggle(GTK_VLC_PLAYER(widget));
-
- button_image_set_from_stock(GTK_BUTTON(data),
- is_playing ? GTK_STOCK_MEDIA_PLAY
- : GTK_STOCK_MEDIA_PAUSE);
- gtk_widget_set_tooltip_text(GTK_WIDGET(data),
- is_playing ? TOOLTIP_PLAY
- : TOOLTIP_PAUSE);
-}
-
-/** @private */
-void
-stop_button_clicked_cb(GtkWidget *widget,
- gpointer data __attribute__((unused)))
-{
- gtk_vlc_player_stop(GTK_VLC_PLAYER(widget));
- button_image_set_from_stock(GTK_BUTTON(playpause_button),
- GTK_STOCK_MEDIA_PLAY);
- gtk_widget_set_tooltip_text(playpause_button, TOOLTIP_PLAY);
-}
-
-/** @private */
-void
-file_menu_openmovie_item_activate_cb(GtkWidget *widget,
- gpointer data __attribute__((unused)))
-{
- GtkWidget *dialog;
-
- dialog = gtk_file_chooser_dialog_new("Open Video...", GTK_WINDOW(widget),
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
- NULL);
-
- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
- gchar *file;
-
- file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
-
- if (!load_media_file(file)) {
- /* TODO */
- }
- refresh_quickopen_menu(GTK_MENU(quickopen_menu));
-
- g_free(file);
- }
-
- gtk_widget_destroy(dialog);
-}
-
-/** @private */
-void
-file_menu_opentranscript_item_activate_cb(GtkWidget *widget,
- gpointer data __attribute__((unused)))
-{
- GtkWidget *dialog;
-
- dialog = gtk_file_chooser_dialog_new("Open Transcript...", GTK_WINDOW(widget),
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
- NULL);
-
- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
- gchar *file;
-
- file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
-
- if (!load_transcript_file(file)) {
- /* TODO */
- }
- refresh_quickopen_menu(GTK_MENU(quickopen_menu));
-
- g_free(file);
- }
-
- gtk_widget_destroy(dialog);
-}
-
-/** @private */
-void
-help_menu_manual_item_activate_cb(GtkWidget *widget __attribute__((unused)),
- gpointer data __attribute__((unused)))
-{
- GError *error = NULL;
- gboolean res;
-
-#ifdef HAVE_WINDOWS_H
- res = (int)ShellExecute(NULL, "open", HELP_URI,
- NULL, NULL, SW_SHOWNORMAL) > 32;
- if (!res)
- error = g_error_new(EXPERIMENT_PLAYER_ERROR,
- EXPERIMENT_PLAYER_ERROR_OPEN,
- "Cannot open \"%s\"!", HELP_URI);
-#else
- res = gtk_show_uri(NULL, HELP_URI, GDK_CURRENT_TIME, &error);
-#endif
-
- if (!res) {
- show_message_dialog_gerror(error);
- g_error_free(error);
- }
-}
-
-/** @private */
-gboolean
-player_window_delete_event_cb(GtkWidget *widget __attribute__((unused)),
- GdkEvent *event __attribute__((unused)),
- gpointer user_data __attribute__((unused)))
-{
- gtk_main_quit();
-
- /* do not destroy window (yet) */
- return TRUE;
-}
-
-/** @private */
-void
-navigator_widget_time_selected_cb(GtkWidget *widget, gint64 selected_time,
- gpointer user_data __attribute__((unused)))
-{
- gtk_vlc_player_seek(GTK_VLC_PLAYER(widget), selected_time);
-}
-
-/** @private */
-void
-navigator_widget_section_activated_cb(GtkWidget *widget __attribute__((unused)),
- gint64 start, gint64 end,
- gpointer user_data __attribute__((unused)))
-{
- GtkExperimentTranscript *transcript_wizard =
- GTK_EXPERIMENT_TRANSCRIPT(transcript_wizard_widget);
- GtkExperimentTranscript *transcript_proband =
- GTK_EXPERIMENT_TRANSCRIPT(transcript_proband_widget);
-
- gtk_experiment_transcript_set_backdrop_area(transcript_wizard,
- start, end);
- gtk_experiment_transcript_set_backdrop_area(transcript_proband,
- start, end);
-}
-
-/** @private */
-gboolean
-navigator_widget_generic_focus_event_cb(GtkWidget *widget __attribute__((unused)),
- GdkEventFocus *event,
- gpointer user_data __attribute__((unused)))
-{
- GtkExperimentTranscript *transcript_wizard =
- GTK_EXPERIMENT_TRANSCRIPT(transcript_wizard_widget);
- GtkExperimentTranscript *transcript_proband =
- GTK_EXPERIMENT_TRANSCRIPT(transcript_proband_widget);
-
- gtk_experiment_transcript_set_use_backdrop_area(transcript_wizard,
- event->in == TRUE);
- gtk_experiment_transcript_set_use_backdrop_area(transcript_proband,
- event->in == TRUE);
-
- return TRUE;
-}
-
-/** @private */
-void
-generic_quit_cb(GtkWidget *widget __attribute__((unused)),
- gpointer data __attribute__((unused)))
-{
- gtk_main_quit();
-}
-
-static inline void
-button_image_set_from_stock(GtkButton *widget, const gchar *name)
-{
- GtkWidget *image = gtk_bin_get_child(GTK_BIN(widget));
-
- gtk_image_set_from_stock(GTK_IMAGE(image), name,
- GTK_ICON_SIZE_SMALL_TOOLBAR);
-}
-
-gboolean
-load_media_file(const gchar *file)
-{
- if (!gtk_vlc_player_load_filename(GTK_VLC_PLAYER(player_widget), file))
- return FALSE;
-
- g_free(current_filename);
- current_filename = g_strdup(file);
-
- gtk_widget_set_sensitive(controls_hbox, TRUE);
-
- button_image_set_from_stock(GTK_BUTTON(playpause_button),
- GTK_STOCK_MEDIA_PLAY);
- gtk_widget_set_tooltip_text(playpause_button, TOOLTIP_PLAY);
-
- return TRUE;
-}
-
-gboolean
-load_transcript_file(const gchar *file)
-{
- ExperimentReader *reader;
- gboolean res;
-
- reader = experiment_reader_new(file);
- if (reader == NULL)
- return FALSE;
-
- res = gtk_experiment_transcript_load(GTK_EXPERIMENT_TRANSCRIPT(transcript_wizard_widget),
- reader);
- if (!res) {
- g_object_unref(G_OBJECT(reader));
- return FALSE;
- }
-
- res = gtk_experiment_transcript_load(GTK_EXPERIMENT_TRANSCRIPT(transcript_proband_widget),
- reader);
- if (!res) {
- g_object_unref(G_OBJECT(reader));
- return FALSE;
- }
-
- res = gtk_experiment_navigator_load(GTK_EXPERIMENT_NAVIGATOR(navigator_widget),
- reader);
- if (!res) {
- g_object_unref(G_OBJECT(reader));
- return FALSE;
- }
-
- g_object_unref(reader);
-
- gtk_widget_set_sensitive(transcript_table, TRUE);
- gtk_widget_set_sensitive(navigator_scrolledwindow, TRUE);
-
- return TRUE;
-}
-
-void
-show_message_dialog_gerror(GError *err)
-{
- GtkWidget *dialog;
-
- if (err == NULL)
- return;
-
- dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL,
- GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
- "%s", err->message);
- gtk_window_set_title(GTK_WINDOW(dialog), "Error");
-
- gtk_dialog_run(GTK_DIALOG(dialog));
-
- gtk_widget_destroy(dialog);
-}
-
-const gchar *
-window_get_geometry(GtkWindow *window)
-{
- static gchar geometry[255];
- gint width, height, x, y;
-
- gtk_window_get_size(window, &width, &height);
- gtk_window_get_position(window, &x, &y);
- g_snprintf(geometry, sizeof(geometry), "%dx%d+%d+%d",
- width, height, x, y);
-
- return geometry;
-}
-
-void
-window_set_state(GtkWindow *window, GdkWindowState state)
-{
- /* the GDK_WINDOW_STATE_WITHDRAWN flag is ignored */
-
- if (state & GDK_WINDOW_STATE_ICONIFIED)
- gtk_window_iconify(window);
- else
- gtk_window_deiconify(window);
-
- if (state & GDK_WINDOW_STATE_MAXIMIZED)
- gtk_window_maximize(window);
- else
- gtk_window_unmaximize(window);
-
- if (state & GDK_WINDOW_STATE_STICKY)
- gtk_window_stick(window);
- else
- gtk_window_unstick(window);
-
- if (state & GDK_WINDOW_STATE_FULLSCREEN)
- gtk_window_fullscreen(window);
- else
- gtk_window_unfullscreen(window);
-
- if (state & GDK_WINDOW_STATE_ICONIFIED)
- gtk_window_iconify(window);
- else
- gtk_window_deiconify(window);
-
- gtk_window_set_keep_above(window, state & GDK_WINDOW_STATE_ABOVE);
- gtk_window_set_keep_below(window, state & GDK_WINDOW_STATE_BELOW);
-}
-
-/** @private */
-int
-main(int argc, char *argv[])
-{
- GtkBuilder *builder;
- GtkExperimentTranscript *transcript_wizard, *transcript_proband;
-
- GtkAdjustment *adj;
- PangoFontDescription *font_desc;
- gboolean reverse;
- PangoAlignment alignment;
- GdkColor color;
- GtkRcStyle *modified_style;
-
- /* FIXME: support internationalization instead of enforcing English */
-#ifdef G_OS_WIN32
- g_setenv("LC_ALL", "English", TRUE);
-#else
- g_setenv("LC_ALL", "en", TRUE);
-#endif
- setlocale(LC_ALL, "");
-
- /* init threads */
- g_thread_init(NULL);
- gdk_threads_init();
-
- gtk_init(&argc, &argv);
- g_set_prgname(PACKAGE_NAME);
-
- config_init_key_file();
-
- builder = gtk_builder_new();
-
- gtk_builder_add_from_file(builder, DEFAULT_UI, NULL);
- gtk_builder_connect_signals(builder, NULL);
-
- BUILDER_INIT(builder, player_window);
- BUILDER_INIT(builder, info_window);
- BUILDER_INIT(builder, about_dialog);
-
- BUILDER_INIT(builder, player_widget);
- BUILDER_INIT(builder, controls_hbox);
- BUILDER_INIT(builder, scale_widget);
- BUILDER_INIT(builder, playpause_button);
- BUILDER_INIT(builder, volume_button);
-
- BUILDER_INIT(builder, player_window_statusbar);
-
- BUILDER_INIT(builder, quickopen_menu);
- BUILDER_INIT(builder, quickopen_menu_empty_item);
-
- BUILDER_INIT(builder, transcript_table);
- BUILDER_INIT(builder, transcript_wizard_widget);
- transcript_wizard = GTK_EXPERIMENT_TRANSCRIPT(transcript_wizard_widget);
- BUILDER_INIT(builder, transcript_proband_widget);
- transcript_proband = GTK_EXPERIMENT_TRANSCRIPT(transcript_proband_widget);
- BUILDER_INIT(builder, transcript_scroll_widget);
-
- BUILDER_INIT(builder, transcript_wizard_combo);
- BUILDER_INIT(builder, transcript_proband_combo);
- BUILDER_INIT(builder, transcript_wizard_entry_check);
- BUILDER_INIT(builder, transcript_proband_entry_check);
-
- BUILDER_INIT(builder, navigator_scrolledwindow);
- BUILDER_INIT(builder, navigator_widget);
-
- g_object_unref(G_OBJECT(builder));
-
- /* configure about dialog */
- gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(about_dialog),
- PACKAGE_NAME);
- gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about_dialog),
- PACKAGE_VERSION);
- gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(about_dialog),
- PACKAGE_URL);
-
- /** @todo most of this could be done in Glade with proper catalog files */
- /* connect timeline, volume button and other widgets with player widget */
- adj = gtk_vlc_player_get_time_adjustment(GTK_VLC_PLAYER(player_widget));
- gtk_range_set_adjustment(GTK_RANGE(scale_widget), adj);
- gtk_experiment_transcript_set_time_adjustment(GTK_EXPERIMENT_TRANSCRIPT(transcript_wizard_widget),
- adj);
- gtk_experiment_transcript_set_time_adjustment(GTK_EXPERIMENT_TRANSCRIPT(transcript_proband_widget),
- adj);
- gtk_range_set_adjustment(GTK_RANGE(transcript_scroll_widget), adj);
-
- adj = gtk_vlc_player_get_volume_adjustment(GTK_VLC_PLAYER(player_widget));
- gtk_scale_button_set_adjustment(GTK_SCALE_BUTTON(volume_button), adj);
-
- /*
- * configure transcript widgets
- */
- transcript_wizard->speaker = g_strdup(SPEAKER_WIZARD);
- font_desc = config_get_transcript_font(SPEAKER_WIZARD);
- if (font_desc != NULL) {
- gtk_widget_modify_font(transcript_wizard_widget, font_desc);
- pango_font_description_free(font_desc);
- }
- if (config_get_transcript_text_color(SPEAKER_WIZARD, &color))
- gtk_widget_modify_text(transcript_wizard_widget,
- GTK_STATE_NORMAL, &color);
- if (config_get_transcript_bg_color(SPEAKER_WIZARD, &color))
- gtk_widget_modify_bg(transcript_wizard_widget,
- GTK_STATE_NORMAL, &color);
-
- reverse = config_get_transcript_reverse_mode(SPEAKER_WIZARD);
- gtk_experiment_transcript_set_reverse_mode(transcript_wizard, reverse);
-
- alignment = config_get_transcript_alignment(SPEAKER_WIZARD);
- gtk_experiment_transcript_set_alignment(transcript_wizard, alignment);
-
- transcript_wizard->interactive_format.default_font =
- config_get_transcript_default_format_font(SPEAKER_WIZARD);
- if (config_get_transcript_default_format_text_color(SPEAKER_WIZARD, &color))
- transcript_wizard->interactive_format.default_text_color = gdk_color_copy(&color);
- if (config_get_transcript_default_format_bg_color(SPEAKER_WIZARD, &color))
- transcript_wizard->interactive_format.default_bg_color = gdk_color_copy(&color);
-
- transcript_proband->speaker = g_strdup(SPEAKER_PROBAND);
- font_desc = config_get_transcript_font(SPEAKER_PROBAND);
- if (font_desc != NULL) {
- gtk_widget_modify_font(transcript_proband_widget, font_desc);
- pango_font_description_free(font_desc);
- }
- if (config_get_transcript_text_color(SPEAKER_PROBAND, &color))
- gtk_widget_modify_text(transcript_proband_widget,
- GTK_STATE_NORMAL, &color);
- if (config_get_transcript_bg_color(SPEAKER_PROBAND, &color))
- gtk_widget_modify_bg(transcript_proband_widget,
- GTK_STATE_NORMAL, &color);
-
- reverse = config_get_transcript_reverse_mode(SPEAKER_PROBAND);
- gtk_experiment_transcript_set_reverse_mode(transcript_proband, reverse);
-
- alignment = config_get_transcript_alignment(SPEAKER_PROBAND);
- gtk_experiment_transcript_set_alignment(transcript_proband, alignment);
-
- transcript_proband->interactive_format.default_font =
- config_get_transcript_default_format_font(SPEAKER_PROBAND);
- if (config_get_transcript_default_format_text_color(SPEAKER_PROBAND, &color))
- transcript_proband->interactive_format.default_text_color = gdk_color_copy(&color);
- if (config_get_transcript_default_format_bg_color(SPEAKER_PROBAND, &color))
- transcript_proband->interactive_format.default_bg_color = gdk_color_copy(&color);
-
- format_selection_init();
-
- refresh_quickopen_menu(GTK_MENU(quickopen_menu));
-
- /* configure windows */
- gtk_window_set_gravity(GTK_WINDOW(player_window), GDK_GRAVITY_STATIC);
- gtk_window_set_gravity(GTK_WINDOW(info_window), GDK_GRAVITY_STATIC);
-
- if (config_get_save_window_properties()) {
- gchar *geometry;
-
- geometry = config_get_window_geometry("Player");
- if (geometry != NULL)
- gtk_window_parse_geometry(GTK_WINDOW(player_window),
- geometry);
- g_free(geometry);
-
- window_set_state(GTK_WINDOW(player_window),
- config_get_window_state("Player"));
-
- geometry = config_get_window_geometry("Info");
- if (geometry != NULL)
- gtk_window_parse_geometry(GTK_WINDOW(info_window),
- geometry);
- g_free(geometry);
-
- window_set_state(GTK_WINDOW(info_window),
- config_get_window_state("Info"));
- }
-
- gtk_widget_show(player_window);
- gtk_widget_show(info_window);
-
- gdk_threads_enter();
- gtk_main();
- gdk_threads_leave();
-
- /*
- * update config file
- */
- if (config_get_save_window_properties()) {
- const gchar *geometry;
- GdkWindowState state;
-
- geometry = window_get_geometry(GTK_WINDOW(player_window));
- config_set_window_geometry("Player", geometry);
-
- state = gdk_window_get_state(gtk_widget_get_window(player_window));
- config_set_window_state("Player", state);
-
- geometry = window_get_geometry(GTK_WINDOW(info_window));
- config_set_window_geometry("Info", geometry);
-
- state = gdk_window_get_state(gtk_widget_get_window(info_window));
- config_set_window_state("Info", state);
- }
-
- modified_style = gtk_widget_get_modifier_style(transcript_wizard_widget);
- config_set_transcript_font(SPEAKER_WIZARD, modified_style->font_desc);
- config_set_transcript_text_color(SPEAKER_WIZARD,
- modified_style->color_flags[GTK_STATE_NORMAL] & GTK_RC_TEXT
- ? &modified_style->text[GTK_STATE_NORMAL]
- : NULL);
- config_set_transcript_bg_color(SPEAKER_WIZARD,
- modified_style->color_flags[GTK_STATE_NORMAL] & GTK_RC_BG
- ? &modified_style->bg[GTK_STATE_NORMAL]
- : NULL);
- g_object_unref(modified_style);
-
- reverse = gtk_experiment_transcript_get_reverse_mode(transcript_wizard);
- config_set_transcript_reverse_mode(SPEAKER_WIZARD, reverse);
-
- alignment = gtk_experiment_transcript_get_alignment(transcript_wizard);
- config_set_transcript_alignment(SPEAKER_WIZARD, alignment);
-
- config_set_transcript_default_format_font(SPEAKER_WIZARD,
- transcript_wizard->interactive_format.default_font);
- config_set_transcript_default_format_text_color(SPEAKER_WIZARD,
- transcript_wizard->interactive_format.default_text_color);
- config_set_transcript_default_format_bg_color(SPEAKER_WIZARD,
- transcript_wizard->interactive_format.default_bg_color);
-
- modified_style = gtk_widget_get_modifier_style(transcript_proband_widget);
- config_set_transcript_font(SPEAKER_PROBAND, modified_style->font_desc);
- config_set_transcript_text_color(SPEAKER_PROBAND,
- modified_style->color_flags[GTK_STATE_NORMAL] & GTK_RC_TEXT
- ? &modified_style->text[GTK_STATE_NORMAL]
- : NULL);
- config_set_transcript_bg_color(SPEAKER_PROBAND,
- modified_style->color_flags[GTK_STATE_NORMAL] & GTK_RC_BG
- ? &modified_style->bg[GTK_STATE_NORMAL]
- : NULL);
- g_object_unref(modified_style);
-
- reverse = gtk_experiment_transcript_get_reverse_mode(transcript_proband);
- config_set_transcript_reverse_mode(SPEAKER_PROBAND, reverse);
-
- alignment = gtk_experiment_transcript_get_alignment(transcript_proband);
- config_set_transcript_alignment(SPEAKER_PROBAND, alignment);
-
- config_set_transcript_default_format_font(SPEAKER_PROBAND,
- transcript_proband->interactive_format.default_font);
- config_set_transcript_default_format_text_color(SPEAKER_PROBAND,
- transcript_proband->interactive_format.default_text_color);
- config_set_transcript_default_format_bg_color(SPEAKER_PROBAND,
- transcript_proband->interactive_format.default_bg_color);
-
- config_save_key_file();
-
- /* destroy all widgets (clean up) */
- gtk_widget_destroy(player_window);
- /**
- * @bug some g_object_unref during transcript widget destruction
- * results in assertions
- */
- gtk_widget_destroy(info_window);
-
- return 0;
-} \ No newline at end of file
diff --git a/src/quick-open.c b/src/quick-open.c
deleted file mode 100644
index b978dac..0000000
--- a/src/quick-open.c
+++ /dev/null
@@ -1,264 +0,0 @@
-/**
- * @file
- * Functions for handling the "Quick Open" menu
- */
-
-/*
- * Copyright (C) 2012-2013 Otto-von-Guericke-Universität Magdeburg
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <assert.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gprintf.h>
-#include <glib/gstdio.h>
-
-#include <gtk/gtk.h>
-
-#include "experiment-player.h"
-
-static inline gboolean quickopen_filter(const gchar *name);
-static gint quickopen_item_cmp(gconstpointer a, gconstpointer b);
-
-static void reconfigure_all_check_menu_items_cb(GtkWidget *widget, gpointer user_data);
-static void quickopen_item_on_activate(GtkWidget *widget, gpointer user_data);
-
-GtkWidget *quickopen_menu,
- *quickopen_menu_empty_item;
-
-/*
- * GtkBuilder signal callbacks
- * NOTE: for some strange reason the parameters are switched
- */
-
-/** @private */
-void
-quickopen_menu_choosedir_item_activate_cb(GtkWidget *widget,
- gpointer data __attribute__((unused)))
-{
- GtkWidget *dialog;
- gchar *quickopen_directory;
-
- dialog = gtk_file_chooser_dialog_new("Choose Directory...", GTK_WINDOW(widget),
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
- NULL);
-
- quickopen_directory = config_get_quickopen_directory();
- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
- quickopen_directory);
- g_free(quickopen_directory);
-
- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
- quickopen_directory =
- gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
- config_set_quickopen_directory(quickopen_directory);
- g_free(quickopen_directory);
-
- refresh_quickopen_menu(GTK_MENU(quickopen_menu));
- }
-
- gtk_widget_destroy(dialog);
-}
-
-/** @todo refresh item unnecessary, rebuild menu when it is opened */
-/** @private */
-void
-quickopen_menu_refresh_item_activate_cb(GtkWidget *widget,
- gpointer data __attribute__((unused)))
-{
- refresh_quickopen_menu(GTK_MENU(widget));
-}
-
-static inline gboolean
-quickopen_filter(const gchar *name)
-{
- static GPatternSpec **patterns = NULL;
-
- guint name_length = strlen(name);
- gchar *name_reversed = g_strreverse(g_strdup(name));
-
- gchar *quickopen_directory;
- gchar *trans_name, *p;
- gboolean res = FALSE;
-
- if (patterns == NULL) {
- patterns = (GPatternSpec **)
- g_strsplit(EXPERIMENT_MOVIE_FILTER, ";", 0);
-
- for (GPatternSpec **filter = patterns; *filter != NULL; filter++) {
- GPatternSpec *pattern;
-
- pattern = g_pattern_spec_new((gchar *)*filter);
- g_free(*filter);
- *filter = pattern;
- }
- }
-
- for (GPatternSpec **pattern = patterns; *pattern != NULL; pattern++) {
- res = g_pattern_match(*pattern, name_length,
- name, name_reversed);
- if (res)
- break;
- }
- g_free(name_reversed);
- if (!res)
- return FALSE;
-
- quickopen_directory = config_get_quickopen_directory();
- trans_name = g_build_filename(quickopen_directory, name, NULL);
- g_free(quickopen_directory);
- trans_name = g_realloc(trans_name, strlen(trans_name) +
- sizeof(EXPERIMENT_TRANSCRIPT_EXT));
- if ((p = g_strrstr(trans_name, ".")) == NULL) {
- g_free(trans_name);
- return FALSE;
- }
- g_stpcpy(++p, EXPERIMENT_TRANSCRIPT_EXT);
-
- res = !g_access(trans_name, F_OK | R_OK);
- g_free(trans_name);
-
- return res;
-}
-
-static gint
-quickopen_item_cmp(gconstpointer a, gconstpointer b)
-{
- return -g_strcmp0(gtk_menu_item_get_label(*(GtkMenuItem **)a),
- gtk_menu_item_get_label(*(GtkMenuItem **)b));
-}
-
-void
-refresh_quickopen_menu(GtkMenu *menu)
-{
- static gchar **fullnames = NULL;
- static GPtrArray *items = NULL;
-
- int fullnames_n;
-
- gchar *quickopen_directory;
- GDir *dir;
- const gchar *name;
-
- if (items != NULL)
- g_ptr_array_free(items, TRUE);
- items = g_ptr_array_new_with_free_func((GDestroyNotify)gtk_widget_destroy);
-
- g_strfreev(fullnames);
- fullnames = NULL;
- fullnames_n = 0;
-
- quickopen_directory = config_get_quickopen_directory();
- dir = g_dir_open(quickopen_directory, 0, NULL);
-
- while ((name = g_dir_read_name(dir)) != NULL) {
- if (!quickopen_filter(name))
- continue;
-
- gchar *itemname;
- GtkWidget *item;
-
- fullnames = g_realloc(fullnames, (fullnames_n+2) * sizeof(gchar *));
- fullnames[fullnames_n] = g_build_filename(quickopen_directory,
- name, NULL);
-
- itemname = path_strip_extension(name);
- item = gtk_check_menu_item_new_with_label(itemname);
- g_ptr_array_add(items, item);
- g_free(itemname);
-
- gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(item),
- TRUE);
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item),
- !g_strcmp0(current_filename,
- fullnames[fullnames_n]));
-
- g_signal_connect(G_OBJECT(item), "activate",
- G_CALLBACK(quickopen_item_on_activate),
- fullnames[fullnames_n]);
-
- fullnames_n++;
- }
- if (fullnames != NULL)
- fullnames[fullnames_n] = NULL;
- g_ptr_array_sort(items, quickopen_item_cmp);
-
- g_dir_close(dir);
- g_free(quickopen_directory);
-
- for (int i = 0; i < items->len; i++) {
- GtkWidget *item = GTK_WIDGET(g_ptr_array_index(items, i));
-
- gtk_menu_shell_prepend(GTK_MENU_SHELL(menu), item);
- gtk_widget_show(item);
- }
-
- gtk_widget_set_visible(quickopen_menu_empty_item, !fullnames_n);
-}
-
-static void
-reconfigure_all_check_menu_items_cb(GtkWidget *widget, gpointer user_data)
-{
- if (!GTK_IS_CHECK_MENU_ITEM(widget))
- return;
-
- g_signal_handlers_block_matched(widget, G_SIGNAL_MATCH_FUNC,
- 0, 0, NULL,
- quickopen_item_on_activate, NULL);
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget),
- widget == GTK_WIDGET(user_data));
- g_signal_handlers_unblock_matched(widget, G_SIGNAL_MATCH_FUNC,
- 0, 0, NULL,
- quickopen_item_on_activate, NULL);
-}
-
-static void
-quickopen_item_on_activate(GtkWidget *widget, gpointer user_data)
-{
- const gchar *filename = (const gchar *)user_data;
- gchar *trans_name, *p;
-
- gtk_container_foreach(GTK_CONTAINER(quickopen_menu),
- reconfigure_all_check_menu_items_cb, widget);
-
- if (!load_media_file(filename)) {
- /* FIXME */
- }
-
- trans_name = g_strdup(filename);
- trans_name = g_realloc(trans_name, strlen(trans_name) +
- sizeof(EXPERIMENT_TRANSCRIPT_EXT));
- if ((p = g_strrstr(trans_name, ".")) == NULL) {
- g_free(trans_name);
- /* FIXME */
- return;
- }
- g_stpcpy(++p, EXPERIMENT_TRANSCRIPT_EXT);
-
- if (!load_transcript_file(trans_name)) {
- /* FIXME */
- }
-
- g_free(trans_name);
-}