LiVES 1.3.11-svn
src/rfx-builder.h
Go to the documentation of this file.
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 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines