instance_connect( this, server, port );
}
gtk_widget_destroy( this->connect );
+ this->guard = 1;
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( lookup_widget( this->window, "button_connect" ) ), TRUE );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( lookup_widget( this->window, "button_disconnect" ) ), FALSE );
+ this->guard = 0;
return FALSE;
}
static gboolean on_cancel_pressed( GtkWidget *button, gpointer user_data )
{
dv1394app this = user_data;
+ if ( this->guard ) return FALSE;
gtk_widget_destroy( this->connect );
return FALSE;
}
dv1394app this = user_data;
GtkWidget *widget;
+ if ( this->guard ) return;
this->connect = create_window_connection( );
/* Connection set up handling */
void on_item_disconnect_activate( GtkMenuItem *menuitem, gpointer user_data )
{
dv1394app this = user_data;
+
+ if ( this->guard ) return;
dv1394app_disconnect( this );
+
+ this->guard = 1;
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( lookup_widget( this->window, "button_connect" ) ), FALSE );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( lookup_widget( this->window, "button_disconnect" ) ), TRUE );
+ this->guard = 0;
}
/** Main window - quit menu item selected.
gtk_main_quit( );
}
+static void playlist_open(dv1394app this, char* filename)
+{
+ FILE* f;
+
+ if( this->selected_unit >= 0 && this->command)
+ {
+ f = fopen(filename, "rt");
+ if (f)
+ {
+ while( !feof(f) )
+ {
+ char* s;
+ char l[PATH_MAX];
+
+ /* reset line */
+ l[0] = 0;
+
+ /* load string */
+ fgets(l, sizeof(l), f);
+
+ /* remove newlines */
+ if( (s = strchr(l, '\n')) ) *s = 0;
+ if( (s = strchr(l, '\r')) ) *s = 0;
+ if( (s = strchr(l, '\t')) ) *s = 0;
+
+ /* check for empty line */
+ if(l[0])
+ mvcp_unit_append( this->command, this->selected_unit, l, -1, -1 );
+ }
+
+ fclose(f);
+ }
+ }
+
+}
+
+static void playlist_save(dv1394app this, char* filename)
+{
+ int index;
+ mvcp_list_entry_t entry;
+ mvcp_list list;
+ FILE* f;
+
+ if( this->selected_unit >= 0 && this->command)
+ {
+ f = fopen(filename, "wt");
+ if (f)
+ {
+ list = mvcp_list_init( this->command, this->selected_unit);
+
+ if ( list )
+ {
+ for ( index = 0; list && index < mvcp_list_count( list ); index ++ )
+ {
+ mvcp_list_get( list, index, &entry );
+ fprintf(f, "%s\n", entry.full);
+ }
+ mvcp_list_close( list );
+ }
+
+ fclose(f);
+ }
+ }
+}
+
+/** Main window - playlist open menu item selected.
+*/
+
+static void on_item_open_playlist_activate( GtkMenuItem *menuitem, gpointer user_data )
+{
+ dv1394app this = user_data;
+ GtkWidget *dialog;
+
+ dialog = gtk_file_chooser_dialog_new ("Open File",
+ GTK_WINDOW (this->window),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog),
+ (this->playlist_folder)?this->playlist_folder:getenv("HOME"));
+
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
+ {
+ char *filename;
+
+ filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
+ playlist_open(this, filename);
+
+ if ( this->playlist_folder )
+ g_free (this->playlist_folder);
+ this->playlist_folder = filename;
+ if ( this->playlist_folder )
+ {
+ char* e = strrchr(this->playlist_folder, '/');
+ if(e) *e = 0;
+ }
+ }
+
+ gtk_widget_destroy (dialog);
+}
+
+/** Main window - playlist save menu item selected.
+*/
+
+static void on_item_save_playlist_activate( GtkMenuItem *menuitem, gpointer user_data )
+{
+ dv1394app this = user_data;
+ GtkWidget *dialog;
+
+ dialog = gtk_file_chooser_dialog_new ("Save File",
+ GTK_WINDOW (this->window),
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
+
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog),
+ (this->playlist_folder)?this->playlist_folder:getenv("HOME"));
+ gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), "Untitled document");
+
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
+ {
+ char *filename;
+
+ filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
+ playlist_save(this, filename);
+
+ if ( this->playlist_folder )
+ g_free (this->playlist_folder);
+ this->playlist_folder = filename;
+ if ( this->playlist_folder )
+ {
+ char* e = strrchr(this->playlist_folder, '/');
+ if(e) *e = 0;
+ }
+ }
+
+ gtk_widget_destroy (dialog);
+}
+
static gboolean on_page_switch_pressed( GtkWidget *button, gpointer user_data )
{
dv1394app this = user_data;
int index = 0;
GtkWidget *notebook = lookup_widget( button, "notebook1" );
-
+
+ if ( this->guard ) return TRUE;
+ this->guard = 1;
+ for ( index = 0; index < this->page_count; index ++ )
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( this->page_buttons[ index ] ), FALSE );
for ( index = 0; index < this->page_count; index ++ )
{
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( this->page_buttons[ index ] ), FALSE );
if ( this->page_buttons[ index ] == button )
break;
}
-
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( this->page_buttons[ index ] ), TRUE );
gtk_notebook_set_current_page( GTK_NOTEBOOK( notebook ), index );
+ this->guard = 0;
return TRUE;
}
mvcp dv = dv1394app_get_command( this );
int unit = dv1394app_get_selected_unit( this );
- for ( index = 0; index < 11; index ++ )
+ for ( index = 0; index < TRANSPORT_BUTTONS_COUNT; index ++ )
if ( this->buttons[ index ] == button )
break;
mvcp_unit_clip_goto( dv, unit, mvcp_absolute, 9999, -1 );
break;
+ case 11:
+ mvcp_unit_set( dv, unit, "eof", "loop");
+ this->eof[this->selected_unit] = 0;
+ break;
+
+ case 12:
+ mvcp_unit_set( dv, unit, "eof", "pause");
+ this->eof[this->selected_unit] = 0;
+ break;
+
default:
break;
}
static void dv1394app_register_page( dv1394app this, page item )
{
- GtkWidget *toolbar = lookup_widget( this->window, "toolbar2" );
+ GtkWidget *toolbar = lookup_widget( this->window, "toolbar1" );
GtkIconSize size = gtk_toolbar_get_icon_size( GTK_TOOLBAR( toolbar ) );
GtkWidget *widget = lookup_widget( this->window, "notebook1" );
GtkWidget *bin = gtk_frame_new( NULL );
gtk_widget_show( bin );
page_get_toolbar_info( item, size, &widget, &label );
- this->page_buttons[ this->page_count ] = gtk_toolbar_append_element( GTK_TOOLBAR ( toolbar ), GTK_TOOLBAR_CHILD_BUTTON, NULL, label, NULL, NULL, widget, NULL, NULL);
+ this->page_buttons[ this->page_count ] = gtk_toolbar_append_element( GTK_TOOLBAR ( toolbar ), GTK_TOOLBAR_CHILD_TOGGLEBUTTON, NULL, label, NULL, NULL, widget, NULL, NULL);
gtk_label_set_use_underline( GTK_LABEL(((GtkToolbarChild*)(g_list_last( GTK_TOOLBAR( toolbar )->children)->data))->label), TRUE);
gtk_widget_show( widget );
gtk_signal_connect( GTK_OBJECT( this->page_buttons[ this->page_count ] ), "clicked", GTK_SIGNAL_FUNC( on_page_switch_pressed ), this );
trim_adj[TRIM_ADJ_POS]->value = status->position;
gtk_signal_emit_by_name( GTK_OBJECT(trim_adj[TRIM_ADJ_POS]), "value_changed" );
}
+
+ gtk_widget_set_sensitive( lookup_widget( dv1394app_get_widget( this ), "transport_11" ),
+ this->eof[this->selected_unit] == 'p' );
+ gtk_widget_set_sensitive( lookup_widget( dv1394app_get_widget( this ), "transport_12" ),
+ this->eof[this->selected_unit] == 'l' );
}
static gboolean trim_pressed( GtkWidget *button, GdkEventButton *event, gpointer user_data )
gtk_signal_connect( GTK_OBJECT( this->window ), "destroy", GTK_SIGNAL_FUNC( on_main_window_delete_event ), this );
/* Menu item signal handling */
- widget = lookup_widget( this->window, "item_connect" );
- gtk_signal_connect( GTK_OBJECT( widget ), "activate", GTK_SIGNAL_FUNC( on_item_connect_activate ), this );
+// widget = lookup_widget( this->window, "item_connect" );
+// gtk_signal_connect( GTK_OBJECT( widget ), "activate", GTK_SIGNAL_FUNC( on_item_connect_activate ), this );
widget = lookup_widget( this->window, "button_connect" );
gtk_signal_connect( GTK_OBJECT( widget ), "clicked", GTK_SIGNAL_FUNC( on_item_connect_activate ), this );
- widget = lookup_widget( this->window, "item_disconnect" );
- gtk_signal_connect( GTK_OBJECT( widget ), "activate", GTK_SIGNAL_FUNC( on_item_disconnect_activate ), this );
+// widget = lookup_widget( this->window, "item_disconnect" );
+// gtk_signal_connect( GTK_OBJECT( widget ), "activate", GTK_SIGNAL_FUNC( on_item_disconnect_activate ), this );
widget = lookup_widget( this->window, "button_disconnect" );
gtk_signal_connect( GTK_OBJECT( widget ), "clicked", GTK_SIGNAL_FUNC( on_item_disconnect_activate ), this );
- widget = lookup_widget( this->window, "item_quit" );
- gtk_signal_connect( GTK_OBJECT( widget ), "activate", GTK_SIGNAL_FUNC( on_item_quit_activate ), this );
- widget = lookup_widget( this->window, "button_quit" );
- gtk_signal_connect( GTK_OBJECT( widget ), "clicked", GTK_SIGNAL_FUNC( on_item_quit_activate ), this );
+// widget = lookup_widget( this->window, "item_quit" );
+// gtk_signal_connect( GTK_OBJECT( widget ), "activate", GTK_SIGNAL_FUNC( on_item_quit_activate ), this );
+// widget = lookup_widget( this->window, "button_quit" );
+// gtk_signal_connect( GTK_OBJECT( widget ), "clicked", GTK_SIGNAL_FUNC( on_item_quit_activate ), this );
+ widget = lookup_widget( this->window, "button_open_playlist" );
+ gtk_signal_connect( GTK_OBJECT( widget ), "clicked", GTK_SIGNAL_FUNC( on_item_open_playlist_activate ), this );
+ widget = lookup_widget( this->window, "button_save_playlist" );
+ gtk_signal_connect( GTK_OBJECT( widget ), "clicked", GTK_SIGNAL_FUNC( on_item_save_playlist_activate ), this );
+
/* Initialise the pages. */
- dv1394app_register_page( this, page_status_init( this ) );
- dv1394app_register_page( this, page_clips_init( this ) );
+ dv1394app_register_page( this, page_operate_init( this ) );
dv1394app_register_page( this, page_command_init( this ) );
+ this->guard = 1;
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( this->page_buttons[ 0 ] ), TRUE );
+ this->guard = 0;
/* Remove the empty page */
widget = lookup_widget( this->window, "notebook1" );
int index;
GtkAccelGroup *accel_group = gtk_accel_group_new( );
- for ( index = 0; index < 11; index ++ )
+ for ( index = 0; index < TRANSPORT_BUTTONS_COUNT; index ++ )
{
char name[ 256 ];
sprintf( name, "transport_%d", index );
gtk_signal_connect( GTK_OBJECT( trim ), "button_release_event", GTK_SIGNAL_FUNC (trim_released), this );
}
this->seek_flag = 1;
+
+ this->playing[0] = create_pixbuf("empty_16x16.png");
+ this->playing[1] = create_pixbuf("item_playing_16x16_(Axialis_Team).png");
}
if ( instance != NULL )
*port ++ = '\0';
else
port = "5250";
- instance_connect( this, server, port );
+ this->guard = 1;
+ if ( instance_connect( this, server, port ) )
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( lookup_widget( this->window, "button_connect" ) ), TRUE );
+ else
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( lookup_widget( this->window, "button_disconnect" ) ), TRUE );
+ this->guard = 0;
free( server );
}
page_close( this->pages[ -- this->page_count ] );
free( this );
}
+
+char* frames2tc( int f, float fps, char* buf )
+{
+ int tc[4] = { 0, 0, 0, 0 };
+ float d;
+ int t;
+
+ if ( fps && f >= 0)
+ {
+ d = f / fps;
+ t = d;
+
+ tc[0] = (d - t) * fps;
+ tc[1] = t % 60; t /= 60;
+ tc[2] = t % 60; t /= 60;
+ tc[3] = t % 24;
+ }
+
+ sprintf(buf, "%.2d:%.2d:%.2d:%.2d", tc[3], tc[2], tc[1], tc[0]);
+
+ return buf;
+}