mirror of
https://github.com/game-stop/veejay.git
synced 2026-01-05 22:45:30 +01:00
add support for new page 'event record/playback'
This commit is contained in:
@@ -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 )
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user