add support for new page 'event record/playback'

This commit is contained in:
c0ntrol
2019-01-14 23:07:05 +01:00
parent 60bcddaf84
commit 021e98395d
2 changed files with 214 additions and 6 deletions

View File

@@ -4678,6 +4678,7 @@ void on_macroplay_toggled( GtkWidget *w, gpointer data )
{
multi_vims( VIMS_MACRO, "%d", 2 );
vj_midi_learning_vims_msg( info->midi,NULL,VIMS_MACRO,2 );
info->uc.reload_hint[HINT_MACRO] = 1;
}
}
@@ -4689,6 +4690,7 @@ void on_macrorecord_toggled( GtkWidget *w, gpointer data )
{
multi_vims( VIMS_MACRO, "%d", 1 );
vj_midi_learning_vims_msg( info->midi,NULL,VIMS_MACRO,1 );
info->uc.reload_hint[HINT_MACRO] = 1;
}
}
@@ -4700,6 +4702,7 @@ void on_macrostop_toggled( GtkWidget *w, gpointer data )
{
multi_vims( VIMS_MACRO, "%d", 0 );
vj_midi_learning_vims_msg( info->midi,NULL,VIMS_MACRO,0 );
info->uc.reload_hint[HINT_MACRO] = 1;
}
}
@@ -4710,6 +4713,73 @@ void on_macroclear_clicked( GtkWidget *w, gpointer data )
multi_vims( VIMS_MACRO, "%d", 3 );
vj_midi_learning_vims_msg( info->midi,NULL, VIMS_MACRO, 3);
info->uc.reload_hint[HINT_MACRO] = 1;
}
void on_macro_loop_position_value_changed( GtkWidget *w, gpointer data)
{
if(!info->status_lock)
macro_line[2] = (int) gtk_spin_button_get_value( GTK_SPIN_BUTTON(w) );
}
void on_macro_dup_position_value_changed( GtkWidget *w, gpointer data )
{
if(!info->status_lock)
macro_line[1] = (int) gtk_spin_button_get_value( GTK_SPIN_BUTTON(w) );
}
void on_macro_frame_position_value_changed( GtkWidget *w, gpointer data)
{
if(!info->status_lock)
macro_line[0] = (int) gtk_spin_button_get_value( GTK_SPIN_BUTTON(w) );
}
void on_macro_button_clear_bank_clicked( GtkWidget *w, gpointer data)
{
int num = get_nums("macro_bank_select");
multi_vims(VIMS_CLEAR_MACRO_BANK, "%d", num);
info->uc.reload_hint[HINT_MACRO] = 1;
vj_msg(VEEJAY_MSG_INFO, "Macro bank %d cleared", num);
}
void on_macro_save_button_clicked( GtkWidget *w, gpointer data)
{
macro_line[0] = get_nums("macro_frame_position");
macro_line[1] = get_nums("macro_dup_position");
macro_line[2] = get_nums("macro_loop_position");
char *message = get_text("macro_vims_message");
multi_vims( VIMS_PUT_MACRO, "%d %d %d %s", macro_line[0],macro_line[1],macro_line[2], message );
info->uc.reload_hint[HINT_MACRO] = 1;
vj_msg(VEEJAY_MSG_INFO, "Saved new event at frame %ld.%d, loop %d", macro_line[0],macro_line[1],macro_line[2]);
}
void on_macro_delete_button_clicked( GtkWidget *w, gpointer data)
{
multi_vims( VIMS_DEL_MACRO,"%d %d %d %d", macro_line[0], macro_line[1], macro_line[2], macro_line[3] );
info->uc.reload_hint[HINT_MACRO] = 1;
vj_msg(VEEJAY_MSG_INFO, "Removed event at frame %ld.%d, loop %d #%d", macro_line[0],macro_line[1],macro_line[2],macro_line[3]);
}
void on_macro_refresh_button_clicked( GtkWidget *w, gpointer data)
{
info->uc.reload_hint[HINT_MACRO] = 1;
}
void on_macro_delete_all_button_clicked( GtkWidget *w, gpointer data)
{
multi_vims( VIMS_MACRO, "%d", 3 );
info->uc.reload_hint[HINT_MACRO] = 1;
vj_msg(VEEJAY_MSG_INFO, "Removed all events from all banks");
}
void on_macro_bank_select_value_changed( GtkWidget *w, gpointer data)
{
int bank = gtk_spin_button_get_value(GTK_SPIN_BUTTON(w));
multi_vims( VIMS_MACRO_SELECT, "%d",bank);
info->uc.reload_hint[HINT_MACRO] = 1;
vj_msg(VEEJAY_MSG_INFO, "Selected macro bank %d",bank);
}
void on_midilearn_toggled( GtkWidget *w, gpointer data )

View File

@@ -234,7 +234,8 @@ enum
HINT_SEQ_ACT = 14,
HINT_SEQ_CUR = 15,
HINT_GENERATOR =16,
NUM_HINTS = 17
HINT_MACRO=17,
NUM_HINTS = 18,
};
enum
@@ -533,6 +534,14 @@ enum
FXC_N_COLS,
};
enum {
MACRO_FRAME = 0,
MACRO_DUP = 1,
MACRO_LOOP = 2,
MACRO_MSG_SEQ = 3,
MACRO_VIMS = 4,
};
enum
{
V4L_NUM=0,
@@ -592,6 +601,7 @@ static effectlist_data fxlist_data;
#define SEQUENCER_COL 10
#define SEQUENCER_ROW 10
static guint macro_line[4] = { 0,0,0,0 };
static vj_gui_t *info = NULL;
void *get_ui_info() { return (void*) info; }
@@ -711,6 +721,7 @@ int get_and_draw_frame(int type, char *wid_name);
GdkPixbuf *vj_gdk_pixbuf_scale_simple( GdkPixbuf *src, int dw, int dh, GdkInterpType inter_type );
static void vj_kf_refresh();
static void vj_kf_reset();
void reload_macros();
/* not used */ /* static int vj_kf_is_displayed(); */
void reset_cali_images( int type, char *wid_name );
@@ -1213,6 +1224,54 @@ static void setup_v4l_devices()
//scan_devices( "tree_v4ldevices" );
}
gboolean vims_macro_selection_func( GtkTreeSelection *sel, GtkTreeModel *model, GtkTreePath *path, gboolean path_currently_selected, gpointer data)
{
GtkTreeIter iter;
if( gtk_tree_model_get_iter( model, &iter, path) ) {
guint frame_num = 0, dup_num = 0, loop_num = 0, seq_no = 0;
gchar *message = NULL;
gtk_tree_model_get( model, &iter, MACRO_FRAME, &frame_num, -1);
gtk_tree_model_get( model, &iter, MACRO_DUP, &dup_num, -1);
gtk_tree_model_get( model, &iter, MACRO_MSG_SEQ, &seq_no, -1);
gtk_tree_model_get( model, &iter, MACRO_LOOP, &loop_num, -1);
gtk_tree_model_get( model, &iter, MACRO_VIMS, &message, -1 );
macro_line[0] = frame_num;
macro_line[1] = dup_num;
macro_line[2] = loop_num;
macro_line[3] = seq_no;
update_spin_value( "macro_frame_position", frame_num );
update_spin_value( "macro_dup_position", dup_num );
update_spin_value( "macro_loop_position", loop_num );
put_text( "macro_vims_message", message );
g_free(message);
}
return TRUE;
}
static void setup_macros()
{
GtkWidget *tree = glade_xml_get_widget_( info->main_window, "macro_macros" );
GtkListStore *store = gtk_list_store_new( 5, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING );
gtk_tree_view_set_model( GTK_TREE_VIEW(tree), GTK_TREE_MODEL(store) );
GtkTreeSelection *sel = gtk_tree_view_get_selection( GTK_TREE_VIEW(tree) );
gtk_tree_selection_set_mode( sel, GTK_SELECTION_SINGLE );
gtk_tree_selection_set_select_function( sel, vims_macro_selection_func, NULL,NULL );
g_object_unref( G_OBJECT(store) );
setup_tree_text_column( "macro_macros", MACRO_FRAME, "Frame",0 );
setup_tree_text_column( "macro_macros", MACRO_DUP, "Dup",0);
setup_tree_text_column( "macro_macros", MACRO_LOOP, "Loop",0);
setup_tree_text_column( "macro_macros", MACRO_MSG_SEQ, "#",0);
setup_tree_text_column( "macro_macros", MACRO_VIMS, "VIMS Message",0);
}
#define SAMPLE_MAX_PARAMETERS 32
static gchar* format_selection_time(int start, int end);
@@ -4551,7 +4610,9 @@ void set_feedback_status()
int len = 0;
single_vims(VIMS_GET_FEEDBACK);
gchar *answer = recv_vims(3,&len);
if(answer == NULL)
return;
int status = atoi(answer);
set_toggle_button("feedbackbutton", status);
@@ -5830,6 +5891,75 @@ void _edl_reset(void)
}
}
void reload_macros()
{
GtkWidget *tree = glade_xml_get_widget_( info->main_window, "macro_macros" );
GtkListStore *store;
GtkTreeIter iter;
gint consumed = 0;
gint len = 0;
single_vims( VIMS_GET_ALL_MACRO );
gchar *answer = recv_vims(8, &len);
reset_tree("macro_macros");
if( answer == NULL || len < 0 )
return;
GtkTreeModel *model = gtk_tree_view_get_model( GTK_TREE_VIEW(tree ));
store = GTK_LIST_STORE(model);
gchar *ptr = answer;
int error = 0;
while(consumed < len) {
long frame_num = 0;
int at_dup = 0;
int at_loop = 0;
int at_seq = 0;
int msg_len = 0;
int n = sscanf( ptr, "%08ld%02d%08d%02d%03d", &frame_num, &at_dup, &at_loop, &at_seq, &msg_len );
if( n != 5) {
error = 1;
break;
}
ptr += (8 + 2 + 8 + 2 + 3);
char *msg = strndup( ptr, msg_len );
gtk_list_store_append( store, &iter );
gtk_list_store_set(store, &iter,
MACRO_FRAME, (guint) frame_num,
MACRO_DUP, (guint) at_dup,
MACRO_LOOP, (guint) at_loop,
MACRO_MSG_SEQ, (guint) at_seq,
MACRO_VIMS, msg,
-1 );
ptr += msg_len;
free(msg);
consumed += (8 + 2 + 8 + 2 + 3);
consumed += msg_len;
}
if(error){
veejay_msg(0,"Unable to read all VIMS macros");
}
gtk_tree_view_set_model( GTK_TREE_VIEW(tree), GTK_TREE_MODEL(store));
free(answer);
info->uc.reload_hint[HINT_MACRO] = 0;
}
static void reload_editlist_contents()
{
GtkWidget *tree = glade_xml_get_widget_( info->main_window, "editlisttree");
@@ -7124,13 +7254,19 @@ static void process_reload_hints(int *history, int pm)
}
/* Curve needs update (start/end changed, effect id changed */
if ( info->uc.reload_hint[HINT_KF] )
if ( info->uc.reload_hint[HINT_KF] ) {
vj_kf_refresh();
}
if( beta__ && info->uc.reload_hint[HINT_HISTORY] )
if( beta__ && info->uc.reload_hint[HINT_HISTORY] ) {
reload_srt();
}
veejay_memset( info->uc.reload_hint, 0, sizeof(info->uc.reload_hint ));
if( info->uc.reload_hint[HINT_MACRO] ) {
reload_macros();
}
veejay_memset( info->uc.reload_hint, 0, sizeof(info->uc.reload_hint ));
}
void update_gui()
@@ -7830,7 +7966,8 @@ void vj_gui_init(char *glade_file,
setup_editlist_info();
setup_samplelist_info();
setup_v4l_devices();
setup_colorselection();
setup_macros();
setup_colorselection();
setup_rgbkey();
setup_bundles();
setup_server_files();
@@ -8090,6 +8227,7 @@ int vj_gui_reconnect(char *hostname,char *group_name, int port_num)
reload_vimslist();
reload_editlist_contents();
reload_bundles();
reload_macros();
set_feedback_status();