LiVES 1.3.11-svn
|
00001 // rfx-builder.h 00002 // LiVES 00003 // (c) G. Finch 2004 - 2009 <salsaman@xs4all.nl> 00004 // released under the GNU GPL 3 or later 00005 // see file ../COPYING or www.gnu.org for licensing details 00006 00007 #define RFX_BUILDER "build-lives-rfx-plugin" 00008 00010 #define RFX_VERSION "1.7" 00011 00013 #define RFX_BUILDER_MULTI "build-lives-rfx-plugin-multi" 00014 00016 #define RFXBUILDER_SCRIPT_SUFFIX "script" 00017 00019 #define MAXFLOATLEN 11 00020 00022 #define MAXINTLEN strlen(g_strdup_printf("%d",G_MAXINT)) 00023 00024 // advanced menu entries 00025 void on_new_rfx_activate (GtkMenuItem *, gpointer status); 00026 void on_edit_rfx_activate (GtkMenuItem *, gpointer status); 00027 void on_copy_rfx_activate (GtkMenuItem *, gpointer); 00028 void on_rename_rfx_activate (GtkMenuItem *, gpointer); 00029 void on_delete_rfx_activate (GtkMenuItem *, gpointer status); 00030 void on_rebuild_rfx_activate (GtkMenuItem *, gpointer); 00031 void on_promote_rfx_activate (GtkMenuItem *, gpointer); 00032 void on_import_rfx_activate (GtkMenuItem *, gpointer status); 00033 void on_export_rfx_activate (GtkMenuItem *, gpointer status); 00034 00035 // the builder window 00036 00038 #define RFXBUILD_MAX_REQ 128 00039 00041 #define RFXBUILD_MAX_PARAMS 32 00042 00044 #define RFXBUILD_MAX_PARAMW_HINTS 512 00045 00048 #define RFXBUILD_MAX_TROWS 512 00049 00050 00052 #define RFXBUILD_MAX_DP 16 00053 typedef struct { 00054 gint when; 00055 gchar *code; 00056 } rfx_trigger_t; 00057 00058 00059 00060 typedef enum { 00061 RFX_BUILD_TYPE_EFFECT1, 00062 RFX_BUILD_TYPE_EFFECT2, 00063 RFX_BUILD_TYPE_EFFECT0, 00064 RFX_BUILD_TYPE_TOOL, 00065 RFX_BUILD_TYPE_UTILITY 00066 } lives_rfx_build_type_t; 00067 00068 00069 typedef enum { 00070 RFX_TABLE_TYPE_REQUIREMENTS, 00071 RFX_TABLE_TYPE_PARAMS, 00072 RFX_TABLE_TYPE_TRIGGERS, 00073 RFX_TABLE_TYPE_PARAM_WINDOW 00074 } lives_rfx_table_type_t; 00075 00076 00077 typedef enum { 00078 RFX_CODE_TYPE_PRE, 00079 RFX_CODE_TYPE_LOOP, 00080 RFX_CODE_TYPE_POST, 00081 RFX_CODE_TYPE_STRDEF, 00082 RFX_CODE_TYPE_STRING_LIST 00083 } lives_rfx_code_type_t; 00084 00085 00086 typedef enum { 00087 RFX_BUILDER_MODE_NEW=0, 00088 RFX_BUILDER_MODE_EDIT, 00089 RFX_BUILDER_MODE_COPY 00090 } lives_rfx_builder_mode_t; 00091 00092 00093 00094 typedef struct { 00095 lives_rfx_build_type_t type; 00096 00097 GtkWidget *dialog; 00098 GtkWidget *name_entry; 00099 GtkWidget *spinbutton_version; 00100 GtkWidget *author_entry; 00101 GtkWidget *url_entry; 00102 GtkWidget *menu_text_entry; 00103 GtkWidget *action_desc_label; 00104 GtkWidget *action_desc_entry; 00105 GtkWidget *action_desc_hsep; 00106 GtkWidget *spinbutton_min_frames; 00107 GtkWidget *type_effect1_radiobutton; 00108 GtkWidget *type_effect2_radiobutton; 00109 GtkWidget *type_effect0_radiobutton; 00110 GtkWidget *type_tool_radiobutton; 00111 GtkWidget *type_utility_radiobutton; 00112 GtkWidget *langc_entry; 00113 GtkWidget *table; 00114 GtkWidget *requirements_button; 00115 GtkWidget *properties_button; 00116 GtkWidget *params_button; 00117 GtkWidget *param_window_button; 00118 GtkWidget *pre_button; 00119 GtkWidget *loop_button; 00120 GtkWidget *post_button; 00121 GtkWidget *trigger_button; 00122 GtkWidget *prop_slow; 00123 GtkWidget *prop_batchg; 00124 GtkWidget *hbox_batchg; 00125 GtkWidget *min_frames_label; 00126 00127 lives_rfx_table_type_t table_type; 00128 00129 gint table_rows; 00130 gint ptable_rows; 00131 00132 lives_rfx_code_type_t codetype; 00133 00134 GtkWidget *entry[RFXBUILD_MAX_TROWS]; 00135 GtkWidget *entry2[RFXBUILD_MAX_TROWS]; 00136 GtkWidget *entry3[RFXBUILD_MAX_TROWS]; 00137 GtkWidget *param_dialog; 00138 GtkWidget *param_name_entry; 00139 GtkWidget *param_label_entry; 00140 GtkWidget *param_type_entry; 00141 GtkWidget *param_dp_label; 00142 GtkWidget *param_def_label; 00143 GtkWidget *param_min_label; 00144 GtkWidget *param_max_label; 00145 GtkWidget *param_step_label; 00146 GtkWidget *param_wrap_label; 00147 GtkWidget *param_wrap_eventbox; 00148 GtkWidget *param_wrap_checkbutton; 00149 GtkWidget *param_strlist_hbox; 00150 GtkWidget *param_def_combo; 00151 GtkWidget *paramw_kw_entry; 00152 GtkWidget *paramw_sp_entry; 00153 GtkWidget *paramw_spsub_entry; 00154 GtkWidget *paramw_rest_entry; 00155 GtkWidget *paramw_sp_label; 00156 GtkWidget *paramw_sp_combo; 00157 GtkWidget *paramw_spsub_label; 00158 GtkWidget *paramw_spsub_combo; 00159 GtkWidget *paramw_rest_label; 00160 GtkWidget *bg_label; 00161 GtkWidget *param_strdef_button; 00162 GtkWidget *trigger_when_entry; 00163 GtkWidget *spinbutton_param_dp; 00164 GtkWidget *spinbutton_param_group; 00165 GtkWidget *spinbutton_param_def; 00166 GtkWidget *spinbutton_param_min; 00167 GtkWidget *spinbutton_param_max; 00168 GtkWidget *spinbutton_param_step; 00169 GtkWidget *code_textview; 00170 GtkWidget *move_up_button; 00171 GtkWidget *move_down_button; 00172 00173 guint32 props; 00174 00175 gchar *pre_code; 00176 gchar *loop_code; 00177 gchar *post_code; 00178 00179 gint edit_param; 00180 00181 gchar *reqs[RFXBUILD_MAX_REQ]; 00182 gint num_reqs; 00183 gint onum_reqs; 00184 00185 lives_param_t *params; 00186 lives_param_t *copy_params; 00187 gint num_params; 00188 gint onum_params; 00189 00190 gchar *paramw_hints[RFXBUILD_MAX_PARAMS]; 00191 gint num_paramw_hints; 00192 gint onum_paramw_hints; 00193 00194 rfx_trigger_t *triggers; 00195 rfx_trigger_t *copy_triggers; 00196 gint num_triggers; 00197 gint onum_triggers; 00198 00199 gboolean has_init_trigger; 00200 00201 gchar *field_delim; 00202 00203 lives_rfx_builder_mode_t mode; 00204 00205 gint table_swap_row1; 00206 gint table_swap_row2; 00207 00208 gchar *script_name; 00209 gchar *oname; 00210 00211 gulong min_spin_f; 00212 gulong max_spin_f; 00213 gulong def_spin_f; 00214 gulong step_spin_f; 00215 00216 gchar *rfx_version; 00217 gint plugin_version; 00218 00219 } rfx_build_window_t; 00220 00221 // builder window widgets/callbacks 00222 rfx_build_window_t *make_rfx_build_window (const gchar *in_script_name, lives_rfx_status_t in_status); 00223 void on_rfxbuilder_ok (GtkButton *, gpointer); 00224 void on_rfxbuilder_cancel (GtkButton *, gpointer); 00225 void rfxbuilder_destroy (rfx_build_window_t *); 00226 void on_list_table_clicked (GtkButton *, gpointer rfxbuilder); 00227 void on_requirements_ok (GtkButton *, gpointer rfxbuilder); 00228 void on_requirements_cancel (GtkButton *, gpointer); 00229 void on_properties_clicked (GtkButton *, gpointer rfxbuilder); 00230 void on_properties_ok (GtkButton *, gpointer rfxbuilder); 00231 void on_properties_cancel (GtkButton *, gpointer); 00232 void on_params_ok (GtkButton *, gpointer rfxbuilder); 00233 void on_params_cancel (GtkButton *, gpointer); 00234 void on_param_window_ok (GtkButton *, gpointer rfxbuilder); 00235 void on_param_window_cancel (GtkButton *, gpointer); 00236 void on_code_clicked (GtkButton *, gpointer rfxbuilder); 00237 void on_code_ok (GtkButton *, gpointer rfxbuilder); 00238 void on_code_cancel (GtkButton *, gpointer); 00239 void on_triggers_ok (GtkButton *, gpointer rfxbuilder); 00240 void on_triggers_cancel (GtkButton *, gpointer); 00241 00242 00243 00244 00245 GtkWidget * make_param_dialog (gint pnum, rfx_build_window_t *rfxbuilder); 00246 GtkWidget * make_param_window_dialog (gint hnum, rfx_build_window_t *rfxbuilder); 00247 GtkWidget * make_trigger_dialog (gint tnum, rfx_build_window_t *rfxbuilder); 00248 00249 void on_table_add_row (GtkButton *, gpointer rfxbuilder); 00250 void on_table_edit_row (GtkButton *, gpointer rfxbuilder); 00251 void on_table_swap_row (GtkButton *, gpointer rfxbuilder); 00252 void on_table_delete_row (GtkButton *, gpointer rfxbuilder); 00253 00254 void param_set_from_dialog (lives_param_t *copy_param, rfx_build_window_t *rfxbuilder); 00255 00256 void after_param_dp_changed (GtkSpinButton *, gpointer rfxbuilder); 00257 void after_param_min_changed (GtkSpinButton *, gpointer rfxbuilder); 00258 void after_param_max_changed (GtkSpinButton *, gpointer rfxbuilder); 00259 void after_param_def_changed (GtkSpinButton *, gpointer rfxbuilder); 00260 void after_rfxbuilder_type_toggled (GtkToggleButton *, gpointer rfxbuilder); 00261 void on_param_type_changed (GtkEntry *, gpointer rfxbuilder); 00262 void on_paramw_kw_changed (GtkEntry *, gpointer rfxbuilder); 00263 void on_paramw_sp_changed (GtkEntry *, gpointer rfxbuilder); 00264 void on_paramw_spsub_changed (GtkEntry *, gpointer rfxbuilder); 00265 void on_script_status_changed (GtkEntry *, gpointer combo); 00266 00267 // fileselectors 00268 void on_export_rfx_ok (GtkButton *, gchar *script_name); 00269 void on_import_rfx_ok (GtkButton *, gpointer status); 00270 00272 void add_rfx_effects(void); 00273 00274 // utility functions 00275 gchar *prompt_for_script_name (const gchar *sname, gshort status); 00276 gboolean check_builder_programs (void); 00277 GList *get_script_list (gshort status); 00278 00279 gboolean perform_rfxbuilder_checks (rfx_build_window_t *); 00280 gboolean perform_param_checks (rfx_build_window_t *, gint index, gint rows); 00281 00282 00283 // read/write script files 00284 gboolean rfxbuilder_to_script (rfx_build_window_t *); 00285 gboolean script_to_rfxbuilder (rfx_build_window_t *, const gchar *script_file); 00286 00287 GList *get_script_section (const gchar *section, const gchar *script_file, gboolean strip); 00288