LiVES  3.2.0
rfx-builder.h
Go to the documentation of this file.
1 // rfx-builder.h
2 // LiVES
3 // (c) G. Finch 2004 - 2020 <salsaman+lives@gmail.com>
4 // released under the GNU GPL 3 or later
5 // see file ../COPYING or www.gnu.org for licensing details
6 
7 #ifndef HAS_LIVES_RFX_BUILDER_H
8 #define HAS_LIVES_RFX_BUILDER_H
9 
10 #define EXEC_RFX_BUILDER "build-lives-rfx-plugin"
11 
13 #define RFX_VERSION "1.8.3"
14 
16 #define EXEC_RFX_BUILDER_MULTI "build-lives-rfx-plugin-multi"
17 
19 #define RFXBUILDER_SCRIPT_SUFFIX "script"
20 
22 #define MAXFLOATLEN 11
23 
25 #define MAXINTLEN strlen(lives_strdup_printf("%d", LIVES_MAXINT))
26 
27 // advanced menu entries
28 void on_new_rfx_activate(LiVESMenuItem *, livespointer status);
29 void on_edit_rfx_activate(LiVESMenuItem *, livespointer status);
30 void on_copy_rfx_activate(LiVESMenuItem *, livespointer);
31 void on_rename_rfx_activate(LiVESMenuItem *, livespointer);
32 void on_delete_rfx_activate(LiVESMenuItem *, livespointer status);
33 void on_rebuild_rfx_activate(LiVESMenuItem *, livespointer);
34 void on_promote_rfx_activate(LiVESMenuItem *, livespointer);
35 void on_import_rfx_activate(LiVESMenuItem *, livespointer status);
36 void on_export_rfx_activate(LiVESMenuItem *, livespointer status);
37 
38 // the builder window
39 
41 #define RFXBUILD_MAX_REQ 128
42 
44 #define RFXBUILD_MAX_PARAMS 32
45 
47 #define RFXBUILD_MAX_PARAMW_HINTS 512
48 
51 #define RFXBUILD_MAX_TROWS 512
52 
53 #define PREF_RFXDIALOG_W ((int)(720.*widget_opts.scale))
54 #define PREF_RFXDIALOG_H ((int)(650.*widget_opts.scale))
55 
56 #define RFX_LOADED (mainw->helper_procthreads[PT_LAZY_RFX] ? \
57  lives_proc_thread_check(mainw->helper_procthreads[PT_LAZY_RFX]) : FALSE)
58 
60 #define RFXBUILD_MAX_DP 16
61 typedef struct {
62  int when;
63  char *code;
65 
66 typedef enum {
73 
74 typedef enum {
80 
81 typedef enum {
88 
89 typedef enum {
94 
95 typedef struct {
97 
98  LiVESWidget *dialog;
99  LiVESWidget *name_entry;
100  LiVESWidget *spinbutton_version;
101  LiVESWidget *author_entry;
102  LiVESWidget *url_entry;
103  LiVESWidget *menu_text_entry;
104  LiVESWidget *action_desc_hbox;
105  LiVESWidget *action_desc_entry;
106  LiVESWidget *action_desc_hsep;
107  LiVESWidget *spinbutton_min_frames;
111  LiVESWidget *type_tool_radiobutton;
113  LiVESWidget *langc_combo;
114  LiVESWidget *table;
115  LiVESWidget *requirements_button;
116  LiVESWidget *properties_button;
117  LiVESWidget *params_button;
118  LiVESWidget *param_window_button;
119  LiVESWidget *pre_button;
120  LiVESWidget *loop_button;
121  LiVESWidget *post_button;
122  LiVESWidget *trigger_button;
123  LiVESWidget *prop_slow;
124  LiVESWidget *prop_batchg;
125  LiVESWidget *hbox_batchg;
126  LiVESWidget *min_frames_label;
127 
129 
131 
133 
134  LiVESWidget *entry[RFXBUILD_MAX_TROWS];
135  LiVESWidget *entry2[RFXBUILD_MAX_TROWS];
136  LiVESWidget *entry3[RFXBUILD_MAX_TROWS];
137  LiVESWidget *param_dialog;
138  LiVESWidget *param_name_entry;
139  LiVESWidget *param_label_entry;
140  LiVESWidget *param_type_combo;
141  LiVESWidget *param_dp_label;
142  LiVESWidget *param_def_label;
143  LiVESWidget *param_min_label;
144  LiVESWidget *param_max_label;
145  LiVESWidget *param_step_label;
146  LiVESWidget *param_wrap_hbox;
148  LiVESWidget *param_strlist_hbox;
149  LiVESWidget *param_def_combo;
150  LiVESWidget *paramw_rest_entry;
151  LiVESWidget *paramw_kw_combo;
152  LiVESWidget *paramw_sp_combo;
153  LiVESWidget *paramw_spsub_combo;
154  LiVESWidget *paramw_rest_label;
155  LiVESWidget *hbox_bg;
156  LiVESWidget *param_strdef_button;
157  LiVESWidget *param_strdef_hbox;
158  LiVESWidget *trigger_when_entry;
159  LiVESWidget *spinbutton_param_dp;
161  LiVESWidget *spinbutton_param_def;
162  LiVESWidget *spinbutton_param_min;
163  LiVESWidget *spinbutton_param_max;
164  LiVESWidget *spinbutton_param_step;
165  LiVESWidget *code_textview;
166  LiVESWidget *new_entry_button;
167  LiVESWidget *edit_entry_button;
168  LiVESWidget *remove_entry_button;
169  LiVESWidget *move_up_button;
170  LiVESWidget *move_down_button;
171 
172  uint32_t props;
173 
174  char *pre_code;
175  char *loop_code;
176  char *post_code;
177 
179 
180  char *reqs[RFXBUILD_MAX_REQ];
181  int num_reqs;
183 
188 
189  char *paramw_hints[RFXBUILD_MAX_PARAMS];
192 
197 
199 
200  char *field_delim;
201 
203 
206 
207  char *script_name;
208  char *oname;
209 
214 
215  char *rfx_version;
218 
219 // fileselectors
220 void on_export_rfx_ok(LiVESButton *, char *script_name);
221 void on_import_rfx_ok(LiVESButton *, livespointer status);
222 
226 void update_rfx_menus(void);
227 
228 // utility functions
229 char *prompt_for_script_name(const char *sname, lives_rfx_status_t status);
230 boolean check_builder_programs(void);
231 LiVESList *get_script_list(lives_rfx_status_t status);
232 
234 boolean perform_param_checks(rfx_build_window_t *, int index, int rows);
235 
236 // read/write script files
238 boolean script_to_rfxbuilder(rfx_build_window_t *, const char *script_file);
239 
240 LiVESList *get_script_section(const char *section, const char *script_file, boolean strip);
241 
242 #endif // HAS_LIVES_RFX_BUILDER_H
on_import_rfx_ok
void on_import_rfx_ok(LiVESButton *, livespointer status)
rfx_build_window_t::spinbutton_param_max
LiVESWidget * spinbutton_param_max
Definition: rfx-builder.h:163
rfx_build_window_t::param_window_button
LiVESWidget * param_window_button
Definition: rfx-builder.h:118
get_script_section
LiVESList * get_script_section(const char *section, const char *script_file, boolean strip)
Definition: rfx-builder.c:3611
RFX_CODE_TYPE_LOOP
@ RFX_CODE_TYPE_LOOP
Definition: rfx-builder.h:83
lives_rfx_build_type_t
lives_rfx_build_type_t
Definition: rfx-builder.h:66
RFX_BUILD_TYPE_EFFECT0
@ RFX_BUILD_TYPE_EFFECT0
Definition: rfx-builder.h:69
rfx_build_window_t::max_spin_f
ulong max_spin_f
Definition: rfx-builder.h:211
rfx_build_window_t::copy_params
lives_param_t * copy_params
store our parameters while editing
Definition: rfx-builder.h:185
rfx_build_window_t::trigger_button
LiVESWidget * trigger_button
Definition: rfx-builder.h:122
rfx_build_window_t::spinbutton_param_min
LiVESWidget * spinbutton_param_min
Definition: rfx-builder.h:162
rfx_trigger_t::code
char * code
Definition: rfx-builder.h:63
rfx_build_window_t::paramw_kw_combo
LiVESWidget * paramw_kw_combo
Definition: rfx-builder.h:151
rfx_build_window_t::loop_code
char * loop_code
Definition: rfx-builder.h:175
rfx_build_window_t::copy_triggers
rfx_trigger_t * copy_triggers
store triggers while editing
Definition: rfx-builder.h:194
RFX_CODE_TYPE_STRDEF
@ RFX_CODE_TYPE_STRDEF
Definition: rfx-builder.h:85
rfx_build_window_t::hbox_batchg
LiVESWidget * hbox_batchg
Definition: rfx-builder.h:125
perform_rfxbuilder_checks
boolean perform_rfxbuilder_checks(rfx_build_window_t *)
Definition: rfx-builder.c:2872
rfx_build_window_t::type_utility_radiobutton
LiVESWidget * type_utility_radiobutton
Definition: rfx-builder.h:112
lives_rfx_table_type_t
lives_rfx_table_type_t
Definition: rfx-builder.h:74
rfx_build_window_t::remove_entry_button
LiVESWidget * remove_entry_button
Definition: rfx-builder.h:168
on_import_rfx_activate
void on_import_rfx_activate(LiVESMenuItem *, livespointer status)
Definition: rfx-builder.c:3849
rfx_build_window_t::type_effect0_radiobutton
LiVESWidget * type_effect0_radiobutton
Definition: rfx-builder.h:110
rfx_build_window_t::param_name_entry
LiVESWidget * param_name_entry
Definition: rfx-builder.h:138
RFX_BUILDER_MODE_EDIT
@ RFX_BUILDER_MODE_EDIT
Definition: rfx-builder.h:91
rfx_build_window_t::param_strdef_button
LiVESWidget * param_strdef_button
Definition: rfx-builder.h:156
RFX_BUILD_TYPE_UTILITY
@ RFX_BUILD_TYPE_UTILITY
Definition: rfx-builder.h:71
rfx_build_window_t::table_rows
int table_rows
Definition: rfx-builder.h:130
rfx_build_window_t::param_label_entry
LiVESWidget * param_label_entry
Definition: rfx-builder.h:139
rfx_build_window_t::spinbutton_param_dp
LiVESWidget * spinbutton_param_dp
Definition: rfx-builder.h:159
on_promote_rfx_activate
void on_promote_rfx_activate(LiVESMenuItem *, livespointer)
Definition: rfx-builder.c:3759
rfx_build_window_t::properties_button
LiVESWidget * properties_button
Definition: rfx-builder.h:116
rfx_build_window_t::spinbutton_param_group
LiVESWidget * spinbutton_param_group
Definition: rfx-builder.h:160
RFX_BUILDER_MODE_COPY
@ RFX_BUILDER_MODE_COPY
Definition: rfx-builder.h:92
rfx_build_window_t
Definition: rfx-builder.h:95
rfx_build_window_t::script_name
char * script_name
Definition: rfx-builder.h:207
rfx_build_window_t::post_button
LiVESWidget * post_button
Definition: rfx-builder.h:121
rfx_build_window_t::oname
char * oname
Definition: rfx-builder.h:208
rfx_build_window_t::paramw_rest_entry
LiVESWidget * paramw_rest_entry
Definition: rfx-builder.h:150
rfx_build_window_t::param_step_label
LiVESWidget * param_step_label
Definition: rfx-builder.h:145
rfx_build_window_t::paramw_rest_label
LiVESWidget * paramw_rest_label
Definition: rfx-builder.h:154
rfx_build_window_t::num_reqs
int num_reqs
Definition: rfx-builder.h:181
rfx_build_window_t::param_type_combo
LiVESWidget * param_type_combo
Definition: rfx-builder.h:140
rfx_build_window_t::mode
lives_rfx_builder_mode_t mode
Definition: rfx-builder.h:202
rfx_build_window_t::spinbutton_param_def
LiVESWidget * spinbutton_param_def
Definition: rfx-builder.h:161
rfx_build_window_t::spinbutton_param_step
LiVESWidget * spinbutton_param_step
Definition: rfx-builder.h:164
rfx_build_window_t::param_def_combo
LiVESWidget * param_def_combo
Definition: rfx-builder.h:149
rfx_build_window_t::step_spin_f
ulong step_spin_f
Definition: rfx-builder.h:213
RFXBUILD_MAX_TROWS
#define RFXBUILD_MAX_TROWS
max table rows : this should be set to the largest of the previous maxima
Definition: rfx-builder.h:51
rfx_build_window_t::spinbutton_min_frames
LiVESWidget * spinbutton_min_frames
Definition: rfx-builder.h:107
rfx_build_window_t::post_code
char * post_code
Definition: rfx-builder.h:176
rfx_build_window_t::onum_triggers
int onum_triggers
Definition: rfx-builder.h:196
rfx_build_window_t::min_frames_label
LiVESWidget * min_frames_label
Definition: rfx-builder.h:126
rfx_build_window_t::edit_entry_button
LiVESWidget * edit_entry_button
Definition: rfx-builder.h:167
rfx_build_window_t::action_desc_entry
LiVESWidget * action_desc_entry
Definition: rfx-builder.h:105
on_copy_rfx_activate
void on_copy_rfx_activate(LiVESMenuItem *, livespointer)
Definition: rfx-builder.c:95
rfx_build_window_t::trigger_when_entry
LiVESWidget * trigger_when_entry
Definition: rfx-builder.h:158
RFX_CODE_TYPE_STRING_LIST
@ RFX_CODE_TYPE_STRING_LIST
Definition: rfx-builder.h:86
script_to_rfxbuilder
boolean script_to_rfxbuilder(rfx_build_window_t *, const char *script_file)
Definition: rfx-builder.c:3279
rfx_build_window_t::params_button
LiVESWidget * params_button
Definition: rfx-builder.h:117
RFXBUILD_MAX_PARAMS
#define RFXBUILD_MAX_PARAMS
maximum parameters
Definition: rfx-builder.h:44
RFX_BUILD_TYPE_EFFECT1
@ RFX_BUILD_TYPE_EFFECT1
Definition: rfx-builder.h:67
rfx_build_window_t::langc_combo
LiVESWidget * langc_combo
Definition: rfx-builder.h:113
rfx_build_window_t::codetype
lives_rfx_code_type_t codetype
Definition: rfx-builder.h:132
RFXBUILD_MAX_REQ
#define RFXBUILD_MAX_REQ
maximum requirements
Definition: rfx-builder.h:41
rfx_build_window_t::prop_batchg
LiVESWidget * prop_batchg
Definition: rfx-builder.h:124
rfx_trigger_t::when
int when
Definition: rfx-builder.h:62
lives_param_t
Definition: plugins.h:538
rfx_build_window_t::param_dialog
LiVESWidget * param_dialog
Definition: rfx-builder.h:137
rfx_build_window_t::plugin_version
int plugin_version
Definition: rfx-builder.h:216
RFX_CODE_TYPE_PRE
@ RFX_CODE_TYPE_PRE
Definition: rfx-builder.h:82
rfx_build_window_t::paramw_spsub_combo
LiVESWidget * paramw_spsub_combo
Definition: rfx-builder.h:153
on_export_rfx_activate
void on_export_rfx_activate(LiVESMenuItem *, livespointer status)
Definition: rfx-builder.c:3821
on_delete_rfx_activate
void on_delete_rfx_activate(LiVESMenuItem *, livespointer status)
Definition: rfx-builder.c:3699
rfx_build_window_t::pre_button
LiVESWidget * pre_button
Definition: rfx-builder.h:119
lives_rfx_code_type_t
lives_rfx_code_type_t
Definition: rfx-builder.h:81
rfx_build_window_t::triggers
rfx_trigger_t * triggers
Definition: rfx-builder.h:193
rfx_build_window_t::move_up_button
LiVESWidget * move_up_button
Definition: rfx-builder.h:169
rfx_build_window_t::type
lives_rfx_build_type_t type
Definition: rfx-builder.h:96
rfx_build_window_t::spinbutton_version
LiVESWidget * spinbutton_version
Definition: rfx-builder.h:100
rfx_trigger_t
Definition: rfx-builder.h:61
rfx_build_window_t::prop_slow
LiVESWidget * prop_slow
Definition: rfx-builder.h:123
rfx_build_window_t::table_swap_row1
int table_swap_row1
Definition: rfx-builder.h:204
prompt_for_script_name
char * prompt_for_script_name(const char *sname, lives_rfx_status_t status)
Definition: rfx-builder.c:3920
on_edit_rfx_activate
void on_edit_rfx_activate(LiVESMenuItem *, livespointer status)
Definition: rfx-builder.c:71
rfx_build_window_t::param_strlist_hbox
LiVESWidget * param_strlist_hbox
Definition: rfx-builder.h:148
lives_rfx_status_t
lives_rfx_status_t
Definition: plugins.h:611
rfxbuilder_to_script
boolean rfxbuilder_to_script(rfx_build_window_t *)
Definition: rfx-builder.c:2952
rfx_build_window_t::num_triggers
int num_triggers
upper limit is RFXBUILD_MAX_PARAMS, 0 == init
Definition: rfx-builder.h:195
add_rfx_effects2
void add_rfx_effects2(lives_rfx_status_t status)
Definition: rfx-builder.c:4481
rfx_build_window_t::paramw_sp_combo
LiVESWidget * paramw_sp_combo
Definition: rfx-builder.h:152
RFX_BUILD_TYPE_TOOL
@ RFX_BUILD_TYPE_TOOL
Definition: rfx-builder.h:70
RFX_TABLE_TYPE_PARAMS
@ RFX_TABLE_TYPE_PARAMS
Definition: rfx-builder.h:76
rfx_build_window_t::param_wrap_checkbutton
LiVESWidget * param_wrap_checkbutton
Definition: rfx-builder.h:147
rfx_build_window_t::field_delim
char * field_delim
Definition: rfx-builder.h:200
rfx_build_window_t::hbox_bg
LiVESWidget * hbox_bg
Definition: rfx-builder.h:155
rfx_build_window_t::param_strdef_hbox
LiVESWidget * param_strdef_hbox
Definition: rfx-builder.h:157
rfx_build_window_t::table
LiVESWidget * table
Definition: rfx-builder.h:114
rfx_build_window_t::action_desc_hsep
LiVESWidget * action_desc_hsep
Definition: rfx-builder.h:106
rfx_build_window_t::action_desc_hbox
LiVESWidget * action_desc_hbox
Definition: rfx-builder.h:104
lives_rfx_builder_mode_t
lives_rfx_builder_mode_t
Definition: rfx-builder.h:89
rfx_build_window_t::onum_params
int onum_params
Definition: rfx-builder.h:187
rfx_build_window_t::move_down_button
LiVESWidget * move_down_button
Definition: rfx-builder.h:170
rfx_build_window_t::param_def_label
LiVESWidget * param_def_label
Definition: rfx-builder.h:142
rfx_build_window_t::props
uint32_t props
Definition: rfx-builder.h:172
rfx_build_window_t::onum_reqs
int onum_reqs
Definition: rfx-builder.h:182
rfx_build_window_t::has_init_trigger
boolean has_init_trigger
Definition: rfx-builder.h:198
rfx_build_window_t::params
lives_param_t * params
store our parameters
Definition: rfx-builder.h:184
rfx_build_window_t::name_entry
LiVESWidget * name_entry
Definition: rfx-builder.h:99
rfx_build_window_t::pre_code
char * pre_code
Definition: rfx-builder.h:174
rfx_build_window_t::new_entry_button
LiVESWidget * new_entry_button
Definition: rfx-builder.h:166
on_rebuild_rfx_activate
void on_rebuild_rfx_activate(LiVESMenuItem *, livespointer)
parse text and return non empty lines between <section> and </section>
Definition: rfx-builder.c:3631
rfx_build_window_t::table_type
lives_rfx_table_type_t table_type
Definition: rfx-builder.h:128
rfx_build_window_t::num_paramw_hints
int num_paramw_hints
upper limit is RFXBUILD_MAX_PARAMW_HINTS-1
Definition: rfx-builder.h:190
add_rfx_effects
void add_rfx_effects(lives_rfx_status_t status)
add dynamic menu entries
Definition: rfx-builder.c:4172
on_rename_rfx_activate
void on_rename_rfx_activate(LiVESMenuItem *, livespointer)
Definition: rfx-builder.c:109
rfx_build_window_t::type_effect2_radiobutton
LiVESWidget * type_effect2_radiobutton
Definition: rfx-builder.h:109
rfx_build_window_t::loop_button
LiVESWidget * loop_button
Definition: rfx-builder.h:120
rfx_build_window_t::dialog
LiVESWidget * dialog
Definition: rfx-builder.h:98
RFX_TABLE_TYPE_REQUIREMENTS
@ RFX_TABLE_TYPE_REQUIREMENTS
Definition: rfx-builder.h:75
RFX_CODE_TYPE_POST
@ RFX_CODE_TYPE_POST
Definition: rfx-builder.h:84
update_rfx_menus
void update_rfx_menus(void)
Definition: rfx-builder.c:4684
rfx_build_window_t::url_entry
LiVESWidget * url_entry
Definition: rfx-builder.h:102
rfx_build_window_t::onum_paramw_hints
int onum_paramw_hints
Definition: rfx-builder.h:191
RFX_TABLE_TYPE_TRIGGERS
@ RFX_TABLE_TYPE_TRIGGERS
Definition: rfx-builder.h:77
rfx_build_window_t::param_min_label
LiVESWidget * param_min_label
Definition: rfx-builder.h:143
on_new_rfx_activate
void on_new_rfx_activate(LiVESMenuItem *, livespointer status)
Definition: rfx-builder.c:62
on_export_rfx_ok
void on_export_rfx_ok(LiVESButton *, char *script_name)
RFX_BUILD_TYPE_EFFECT2
@ RFX_BUILD_TYPE_EFFECT2
Definition: rfx-builder.h:68
rfx_build_window_t::author_entry
LiVESWidget * author_entry
Definition: rfx-builder.h:101
rfx_build_window_t::type_tool_radiobutton
LiVESWidget * type_tool_radiobutton
Definition: rfx-builder.h:111
rfx_build_window_t::code_textview
LiVESWidget * code_textview
Definition: rfx-builder.h:165
RFX_BUILDER_MODE_NEW
@ RFX_BUILDER_MODE_NEW
Definition: rfx-builder.h:90
rfx_build_window_t::param_wrap_hbox
LiVESWidget * param_wrap_hbox
Definition: rfx-builder.h:146
rfx_build_window_t::rfx_version
char * rfx_version
Definition: rfx-builder.h:215
rfx_build_window_t::param_dp_label
LiVESWidget * param_dp_label
Definition: rfx-builder.h:141
ulong
#define ulong
Definition: main.h:178
rfx_build_window_t::table_swap_row2
int table_swap_row2
Definition: rfx-builder.h:205
get_script_list
LiVESList * get_script_list(lives_rfx_status_t status)
Definition: rfx-builder.c:4150
rfx_build_window_t::def_spin_f
ulong def_spin_f
Definition: rfx-builder.h:212
rfx_build_window_t::min_spin_f
ulong min_spin_f
Definition: rfx-builder.h:210
perform_param_checks
boolean perform_param_checks(rfx_build_window_t *, int index, int rows)
Definition: rfx-builder.c:2933
rfx_build_window_t::num_params
int num_params
upper limit is RFXBUILD_MAX_PARAMS-1
Definition: rfx-builder.h:186
RFX_TABLE_TYPE_PARAM_WINDOW
@ RFX_TABLE_TYPE_PARAM_WINDOW
Definition: rfx-builder.h:78
rfx_build_window_t::menu_text_entry
LiVESWidget * menu_text_entry
Definition: rfx-builder.h:103
rfx_build_window_t::requirements_button
LiVESWidget * requirements_button
Definition: rfx-builder.h:115
rfx_build_window_t::edit_param
int edit_param
Definition: rfx-builder.h:178
rfx_build_window_t::param_max_label
LiVESWidget * param_max_label
Definition: rfx-builder.h:144
rfx_build_window_t::type_effect1_radiobutton
LiVESWidget * type_effect1_radiobutton
Definition: rfx-builder.h:108
check_builder_programs
boolean check_builder_programs(void)
Definition: rfx-builder.c:3668