terminatorX - ChangeLog
-All changes were done by me (Alexander König) if not stated otherwise.
+All changes were done by me (Alexander K�nig) if not stated otherwise.
This is not a GNU-style ChangeLog but you sort of get the idea what was
changed.
[v3.80 - prerelease]
-
+- XML based set files can get rather huge when they contain a lot of sequencer
+ events - to solve this terminatorX now uses zlib to save compressed set
+ files if enabled in the preferences dialog.
- I hacked support for Steve Harris' cool liblrdf - if you've got that library
setup correctly and you use Steve's wonderful plugin collection with RDF
description you should get a nicely structured menu when clicking on the
- terminatorX now stores set files as XML documents, too - so terminatorX has
become terminatorXML finally. Note: for sets with a large number of events
recorded into the sequencer - the XML based set files can grow significally
- larger than the old ones.
+ larger than the old ones (see "compression" above)
- The old code to support the obsolete binary tX file formats has now been
scheduled for deletion. It's been moved into the tX_legacy* source files and
it will be built only when "--enable-legacy" was used on configuring
- some gui redesign. The volume scales are now located near their corresponding
"flash"-widget. This release fits into very small windows - so it should be
usable on smaller displays as well.
-- Adrian told me configure doesn´t have to check for glib after checking for
- gtk+ - I guess he´s right so the glib-test has gone.
+- Adrian told me configure doesn�t have to check for glib after checking for
+ gtk+ - I guess he�s right so the glib-test has gone.
- more minor fixes
[v3.55]
[v2.4] (unreleased)
- implemented a time counter
- licmak now finally is what it should be: a perl script (licmak.pl)
- it was contributed by: Adam Sjøgren <asjo@diku.dk>. Thanks!
+ it was contributed by: Adam Sj�gren <asjo@diku.dk>. Thanks!
[v2.3]
- X-Window background fixed
terminatorX INSTALL:
-Copyright (C) 1999, 2000, 2001 by Alexander König <alex@lisas.de>
+Copyright (C) 1999 - 2003 by Alexander König <alex@lisas.de>
http://terminatorX.cx
Note: As of Version 3.70 you need to have LADSPA installed to compile
- Support other languages.
---- Ok, the follownig points are already implemented:
+--- Ok, the following points are already implemented:
- Rewrite the audio device layer, so that terminatorX operates at a fix block
size - this will allow correct playback of sequencer events even if played
AC_MSG_ERROR([** couldn't find ladspa.h - Install the LADSPA SDK from http://www.ladspa.org first. **])
fi
+AC_CHECK_HEADERS(zlib.h,, AC_MSG_ERROR([** couldn't find zlib.h **]))
+AC_CHECK_LIB(z,gzprintf, LIBS="$LIBS -lz", AC_MSG_ERROR([** couldn't find libz library **]))
+
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_BIGENDIAN
AC_TYPE_SIZE_T
/* Misc */
strcpy(globals.file_editor, gtk_entry_get_text(GTK_ENTRY(lookup_widget(dialog, "soundfile_editor"))));
strcpy(globals.lrdf_path, gtk_entry_get_text(GTK_ENTRY(lookup_widget(dialog, "ladspa_rdf_path"))));
+ globals.compress_set_files=(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lookup_widget(dialog, "compress_set_files")))==TRUE);
globals.prelis=(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lookup_widget(dialog, "prelisten_enabled")))==TRUE);
}
/* Misc */
gtk_entry_set_text(GTK_ENTRY(lookup_widget(dialog, "soundfile_editor")), globals.file_editor);
gtk_entry_set_text(GTK_ENTRY(lookup_widget(dialog, "ladspa_rdf_path")), globals.lrdf_path);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lookup_widget(dialog, "compress_set_files")), globals.compress_set_files);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lookup_widget(dialog, "prelisten_enabled")), globals.prelis);
}
vtt_class::set_sample_rate(device->get_sample_rate());
if (recording_request) {
- if (tape->start_record(globals.record_filename, device->get_buffersize()*sizeof(int16_t), device->get_sample_rate())) {
+ if (tape->start_record(globals.record_filename, vtt_class::get_mix_buffer_size(), device->get_sample_rate())) {
device->close();
delete device;
device=NULL;
#include <tX_event.h>
#include <tX_global.h>
-void tX_event :: store (FILE *output, char *indent) {
- fprintf(output, "%s<event pid=\"%i\" value=\"%lf\" time=\"%i\"/>\n", indent, sp->get_persistence_id(), value, timestamp);
+void tX_event :: store (FILE *rc, gzFile rz, char *indent) {
+ tX_store("%s<event pid=\"%i\" value=\"%lf\" time=\"%i\"/>\n", indent, sp->get_persistence_id(), value, timestamp);
}
tX_event :: tX_event (xmlDocPtr doc, xmlNodePtr node) {
tX_event(FILE *input);
#endif
tX_event(xmlDocPtr, xmlNodePtr);
- void store(FILE *output, char *indent);
+ void store(FILE *rc, gzFile rz, char *indent);
tX_seqpar *get_sp() { return sp; }
guint32 get_timestamp() { return timestamp; }
GtkWidget *prelisten_enabled;
GtkWidget *label31;
GtkWidget *ladspa_rdf_path;
+ GtkWidget *label33;
+ GtkWidget *compress_set_files;
GtkWidget *label3;
GtkWidget *dialog_action_area1;
GtkWidget *pref_cancel;
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 4), label2);
gtk_label_set_justify (GTK_LABEL (label2), GTK_JUSTIFY_LEFT);
- table3 = gtk_table_new (3, 2, FALSE);
+ table3 = gtk_table_new (4, 2, FALSE);
gtk_widget_show (table3);
gtk_container_add (GTK_CONTAINER (notebook1), table3);
gtk_container_set_border_width (GTK_CONTAINER (table3), 4);
label26 = gtk_label_new ("\"Pre-Listen\" to soundfiles:");
gtk_widget_show (label26);
- gtk_table_attach (GTK_TABLE (table3), label26, 0, 1, 2, 3,
+ gtk_table_attach (GTK_TABLE (table3), label26, 0, 1, 3, 4,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_label_set_justify (GTK_LABEL (label26), GTK_JUSTIFY_LEFT);
prelisten_enabled = gtk_check_button_new_with_mnemonic ("Enabled");
gtk_widget_show (prelisten_enabled);
- gtk_table_attach (GTK_TABLE (table3), prelisten_enabled, 1, 2, 2, 3,
+ gtk_table_attach (GTK_TABLE (table3), prelisten_enabled, 1, 2, 3, 4,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_tooltips_set_tip (tooltips, prelisten_enabled, "When enabled soundfiles will be playedback when selected in a file dialog (before loading them).", NULL);
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
+ label33 = gtk_label_new ("Compress set files:");
+ gtk_widget_show (label33);
+ gtk_table_attach (GTK_TABLE (table3), label33, 0, 1, 2, 3,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_label_set_justify (GTK_LABEL (label33), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment (GTK_MISC (label33), 0, 0.5);
+
+ compress_set_files = gtk_check_button_new_with_mnemonic ("Enabled");
+ gtk_widget_show (compress_set_files);
+ gtk_table_attach (GTK_TABLE (table3), compress_set_files, 1, 2, 2, 3,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+
label3 = gtk_label_new ("Misc");
gtk_widget_show (label3);
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 5), label3);
GLADE_HOOKUP_OBJECT (tx_options, prelisten_enabled, "prelisten_enabled");
GLADE_HOOKUP_OBJECT (tx_options, label31, "label31");
GLADE_HOOKUP_OBJECT (tx_options, ladspa_rdf_path, "ladspa_rdf_path");
+ GLADE_HOOKUP_OBJECT (tx_options, label33, "label33");
+ GLADE_HOOKUP_OBJECT (tx_options, compress_set_files, "compress_set_files");
GLADE_HOOKUP_OBJECT (tx_options, label3, "label3");
GLADE_HOOKUP_OBJECT_NO_REF (tx_options, dialog_action_area1, "dialog_action_area1");
GLADE_HOOKUP_OBJECT (tx_options, pref_cancel, "pref_cancel");
#define TX_XML_RC_VERSION "1.0"
tx_global globals;
+int _store_compress_xml=0;
void get_rc_name(char *buffer)
{
strcpy(globals.lrdf_path, "/usr/share/ladspa/rdf:/usr/local/share/ladspa/rdf");
globals.fullscreen_enabled=1;
+ globals.compress_set_files=0;
}
int load_globals_xml() {
restore_string("file_editor", globals.file_editor);
restore_string("lrdf_path", globals.lrdf_path);
+ restore_int("compress_set_files", globals.compress_set_files);
restore_int("fullscreen_enabled", globals.fullscreen_enabled);
if (!elementFound) {
char device_type[16];
char indent[]="\t";
FILE *rc;
+ gzFile rz;
+ _store_compress_xml=0;
char tmp_xml_buffer[4096];
get_rc_name(rc_name);
store_string("record_filename", globals.record_filename);
store_string("file_editor", globals.file_editor);
store_string("lrdf_path", globals.lrdf_path);
+ store_int("compress_set_files", globals.compress_set_files);
store_int("fullscreen_enabled", globals.fullscreen_enabled);
fprintf(rc,"</terminatorXrc>\n");
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
+
+#include <zlib.h>
#ifdef ENABLE_DEBUG_OUTPUT
#define tX_debug(fmt, args...); { fprintf(stderr, "- tX_debug: "); fprintf(stderr, fmt , ## args); fprintf(stderr, "\n"); }
char lrdf_path[PATH_MAX];
+ int compress_set_files;
+
int fullscreen_enabled;
} tx_global;
//#define restore_float_id(s, i, sp, init); if ((!elementFound) && (!xmlStrcmp(cur->name, (const xmlChar *) s))) { elementFound=1; if (xmlNodeListGetString(doc, cur->xmlChildrenNode, 1)) {sscanf((char *) xmlNodeListGetString(doc, cur->xmlChildrenNode, 1), "%lf", &dvalue); i=dvalue; pid_attr=(char* ) xmlGetProp(cur, (xmlChar *) "id"); if (pid_attr) { sscanf(pid_attr, "%i", &pid); sp.set_persistence_id(pid); } init; }}
//#define restore_bool_id(s, i, sp, init); if ((!elementFound) && (!xmlStrcmp(cur->name, (const xmlChar *) s))) { elementFound=1; if (xmlNodeListGetString(doc, cur->xmlChildrenNode, 1)) {if (xmlStrcmp(xmlNodeListGetString(doc, cur->xmlChildrenNode, 1), (const xmlChar *) "true")==0) i=true; else i=false; pid_attr=(char* ) xmlGetProp(cur, (xmlChar *)"id"); if (pid_attr) { sscanf(pid_attr, "%i", &pid); sp.set_persistence_id(pid); } init; }}
-#define store_int(s, i); fprintf(rc, "%s<%s>%i</%s>\n", indent, s,(int) i, s);
-#define store_float(s, i); fprintf(rc, "%s<%s>%lf</%s>\n", indent, s,(double) i, s);
-#define store_string(s, i); fprintf(rc, "%s<%s>%s</%s>\n", indent, s, encode_xml(tmp_xml_buffer, i) , s);
-#define store_bool(s, i); fprintf(rc, "%s<%s>%s</%s>\n", indent, s, i ? "true" : "false", s);
+extern int _store_compress_xml;
+
+#define tX_store(fmt, args...); { _store_compress_xml ? gzprintf(rz, fmt , ## args) : fprintf(rc, fmt , ## args); }
+
+#define store_int(s, i); tX_store("%s<%s>%i</%s>\n", indent, s,(int) i, s);
+#define store_float(s, i); tX_store("%s<%s>%lf</%s>\n", indent, s,(double) i, s);
+#define store_string(s, i); tX_store("%s<%s>%s</%s>\n", indent, s, encode_xml(tmp_xml_buffer, i) , s);
+#define store_bool(s, i); tX_store("%s<%s>%s</%s>\n", indent, s, i ? "true" : "false", s);
-#define store_id(s, id); fprintf(rc, "%s<%s id=\"%i\"/>\n", indent, s, id);
-#define store_int_id(s, i, id); fprintf(rc, "%s<%s id=\"%i\">%i</%s>\n", indent, s, id, (int) i, s);
-#define store_float_id(s, i, id); fprintf(rc, "%s<%s id=\"%i\">%lf</%s>\n", indent, s, id, (double) i, s);
-#define store_bool_id(s, i, id); fprintf(rc, "%s<%s id=\"%i\">%s</%s>\n", indent, s, id, i ? "true" : "false", s);
+#define store_id(s, id); tX_store("%s<%s id=\"%i\"/>\n", indent, s, id);
+#define store_int_id(s, i, id); tX_store("%s<%s id=\"%i\">%i</%s>\n", indent, s, id, (int) i, s);
+#define store_float_id(s, i, id); tX_store("%s<%s id=\"%i\">%lf</%s>\n", indent, s, id, (double) i, s);
+#define store_bool_id(s, i, id); tX_store("%s<%s id=\"%i\">%s</%s>\n", indent, s, id, i ? "true" : "false", s);
-#define store_int_sp(name, i, sp); { fprintf(rc, "%s<%s ", indent, name); sp.store_meta(rc); fprintf(rc, ">%i</%s>\n", (int) i, name); }
-#define store_float_sp(name, i, sp); { fprintf(rc, "%s<%s ", indent, name); sp.store_meta(rc); fprintf(rc, ">%lf</%s>\n", (double) i, name); }
-#define store_bool_sp(name, i, sp); { fprintf(rc, "%s<%s ", indent, name); sp.store_meta(rc); fprintf(rc, ">%s</%s>\n", i ? "true" : "false", name); }
+#define store_int_sp(name, i, sp); { tX_store("%s<%s ", indent, name); sp.store_meta(rc, rz); tX_store(">%i</%s>\n", (int) i, name); }
+#define store_float_sp(name, i, sp); { tX_store("%s<%s ", indent, name); sp.store_meta(rc, rz); tX_store(">%lf</%s>\n", (double) i, name); }
+#define store_bool_sp(name, i, sp); { tX_store("%s<%s ", indent, name); sp.store_meta(rc, rz); tX_store(">%s</%s>\n", i ? "true" : "false", name); }
#define restore_int_id(s, i, sp, init); if ((!elementFound) && (!xmlStrcmp(cur->name, (const xmlChar *) s))) { elementFound=1; if (xmlNodeListGetString(doc, cur->xmlChildrenNode, 1)) { sscanf((char *) xmlNodeListGetString(doc, cur->xmlChildrenNode, 1), "%i", &i); init; } sp.restore_meta(cur); }
#define restore_float_id(s, i, sp, init); if ((!elementFound) && (!xmlStrcmp(cur->name, (const xmlChar *) s))) { elementFound=1; if (xmlNodeListGetString(doc, cur->xmlChildrenNode, 1)) {sscanf((char *) xmlNodeListGetString(doc, cur->xmlChildrenNode, 1), "%lf", &dvalue); i=dvalue; init; } sp.restore_meta(cur);}
return(0);
}
-void do_save_tables(GtkWidget *wid)
+gboolean do_save_tables(GtkWidget *wid)
{
FILE *out;
+ gzFile zout;
char buffer[PATH_MAX];
char wbuf[PATH_MAX];
char *ext;
int len=strlen(buffer);
if (!len || (buffer[len-1]=='/')) {
tx_note("Invalid filename for set file.", true);
- return;
+ return FALSE;
}
strcpy(globals.tables_filename, buffer);
gtk_widget_destroy(save_dialog);
tx_mg_have_setname=true;
strcpy(tx_mg_current_setname, buffer);
- out=fopen(buffer, "w");
+ if (globals.compress_set_files) {
+ _store_compress_xml=1;
+ out=NULL;
+ zout=gzopen(buffer, "w");
+ } else {
+ _store_compress_xml=0;
+ out=fopen(buffer, "w");
+ zout=NULL;
+ }
- if (out)
+ if (out || zout)
{
- if (vtt_class::save_all(out)) tx_note("Error while saving set.", true);
- fclose(out);
+ if (vtt_class::save_all(out, zout)) tx_note("Error while saving set.", true);
+ if (out) fclose(out);
+ else if (zout) gzclose(zout);
sprintf(wbuf,"terminatorX - %s", strip_path(buffer));
gtk_window_set_title(GTK_WINDOW(main_window), wbuf);
}
{
tx_note("Failed to open file for write access.", true);
}
+
+ return FALSE;
}
GtkSignalFunc save_tables_as()
grab_status=0;
}
-void quit()
+gboolean quit()
{
GtkWidget *dialog=gtk_message_dialog_new(GTK_WINDOW(main_window),
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO,
gtk_widget_destroy(dialog);
if (res!=GTK_RESPONSE_YES) {
- return;
+ return TRUE;
}
turn_audio_off();
/* else: no MIDI init.... */
}
-void tX_seqpar :: store_meta(FILE *output) {
+void tX_seqpar :: store_meta(FILE *rc, gzFile rz) {
char buffer[256];
if (bound_midi_event.type!=tX_midievent::NONE) {
} else {
sprintf(buffer, "id=\"%i\"", persistence_id);
}
- fprintf(output, buffer);
+ tX_store(buffer);
}
public:
int is_mappable;
void restore_meta(xmlNodePtr node);
- void store_meta(FILE *output);
+ void store_meta(FILE *rc, gzFile rz);
};
class tX_seqpar_update : public tX_seqpar
#endif
}
-void tX_sequencer :: save(FILE *rc, char *indent) {
+void tX_sequencer :: save(FILE *rc, gzFile rz, char *indent) {
guint32 event_count;
list <tX_event *> :: iterator song_event;
event_count=song_list.size();
- fprintf(rc, "%s<sequencer>\n", indent);
+ tX_store("%s<sequencer>\n", indent);
strcat(indent, "\t");
for (song_event=song_list.begin(); song_event!=song_list.end(); song_event++) {
- (*song_event)->store(rc, indent);
+ (*song_event)->store(rc, rz, indent);
}
indent[strlen(indent)-1]=0;
- fprintf(rc, "%s</sequencer>\n", indent);
+ tX_store("%s</sequencer>\n", indent);
}
void delete_all_events_for_sp(tX_seqpar *sp);
void delete_all_events();
- void save(FILE *, char *indent);
+ void save(FILE *, gzFile, char *indent);
#ifdef ENABLE_TX_LEGACY
void load(FILE *);
#endif
file.len=0;
file.sofar=0;
- blocksize=bs;
+ blocksize=bs * sizeof(int16_t) * 2;
written_bytes=0;
#define store(data); if (fwrite((void *) &data, sizeof(data), 1, output)!=1) res+=1;
-int vtt_class :: save(FILE *rc, char *indent) {
+int vtt_class :: save(FILE *rc, gzFile rz, char *indent) {
list <vtt_fx *> :: iterator effect;
char tmp_xml_buffer[4096];
int res=0;
- fprintf(rc, "%s<turntable>\n", indent);
+ tX_store("%s<turntable>\n", indent);
strcat(indent, "\t");
store_string("name", name);
store_float("audio_x_zoom", gui_get_audio_x_zoom(this));
- fprintf(rc, "%s<fx>\n", indent);
+ tX_store("%s<fx>\n", indent);
strcat(indent, "\t");
for (effect=fx_list.begin(); effect!=fx_list.end(); effect++) {
- (*effect)->save(rc, indent);
+ (*effect)->save(rc, rz, indent);
}
indent[strlen(indent)-1]=0;
- fprintf(rc, "%s</fx>\n", indent);
+ tX_store("%s</fx>\n", indent);
indent[strlen(indent)-1]=0;
- fprintf(rc, "%s</turntable>\n", indent);
+ tX_store("%s</turntable>\n", indent);
return(res);
}
#define TX_XML_SETFILE_VERSION "1.0"
-int vtt_class :: save_all(FILE* rc) {
+int vtt_class :: save_all(FILE* rc, gzFile rz) {
int res=0;
list <vtt_class *> :: iterator vtt;
char indent[256];
tX_seqpar :: create_persistence_ids();
- fprintf(rc, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n");
- fprintf(rc, "<terminatorXset version=\"%s\">\n", TX_XML_SETFILE_VERSION);
+ tX_store("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n");
+ tX_store("<terminatorXset version=\"%s\">\n", TX_XML_SETFILE_VERSION);
strcpy(indent, "\t");
store_float_sp("master_pitch", globals.pitch, sp_master_pitch);
for (vtt=main_list.begin(); vtt!=main_list.end(); vtt++) {
- res+=(*vtt)->save(rc, indent);
+ res+=(*vtt)->save(rc, rz, indent);
}
- sequencer.save(rc, indent);
+ sequencer.save(rc, rz, indent);
- fprintf(rc, "</terminatorXset>\n");
+ tX_store("</terminatorXset>\n");
return(res);
}
int stop();
int stop_nolock();
- int save(FILE *, char *indent);
- static int save_all(FILE *);
+ int save(FILE *, gzFile rz, char *indent);
+ static int save_all(FILE *, gzFile rz);
int load(xmlDocPtr, xmlNodePtr);
static int load_all(xmlDocPtr doc, char *fname);
static void delete_all();
fprintf(stderr, "tX: Oops: run() abstract vtt_fx?");
}
-void vtt_fx :: save (FILE *output, char *indent) {
+void vtt_fx :: save(FILE *rc, gzFile rz, char *indent) {
fprintf(stderr, "tX: Oops: run() abstract vtt_fx?");
}
void vtt_fx_lp :: run() { myvtt->render_lp(); }
int vtt_fx_lp :: isEnabled() { return myvtt->lp_enable; }
-void vtt_fx_lp :: save (FILE *output, char *indent) {
- fprintf(output, "%s<cutoff/>\n", indent);
+void vtt_fx_lp :: save (FILE *rc, gzFile rz, char *indent) {
+ tX_store("%s<cutoff/>\n", indent);
}
const char *vtt_fx_lp :: get_info_string()
void vtt_fx_ec :: run() { myvtt->render_ec(); }
int vtt_fx_ec :: isEnabled() { return myvtt->ec_enable; }
-void vtt_fx_ec :: save (FILE *output, char *indent) {
- fprintf(output, "%s<lowpass/>\n", indent);
+void vtt_fx_ec :: save (FILE *rc, gzFile rz, char *indent) {
+ tX_store("%s<lowpass/>\n", indent);
}
const char *vtt_fx_ec :: get_info_string()
}
-void vtt_fx_ladspa :: save (FILE *rc, char *indent) {
+void vtt_fx_ladspa :: save (FILE *rc, gzFile rz, char *indent) {
long ID=plugin->getUniqueID();
list <tX_seqpar_vttfx *> :: iterator sp;
- fprintf(rc, "%s<ladspa_plugin>\n", indent);
+ tX_store("%s<ladspa_plugin>\n", indent);
strcat (indent, "\t");
store_int("ladspa_id", ID);
store_bool("panel_hidden", panel->is_hidden());
indent[strlen(indent)-1]=0;
- fprintf(rc, "%s</ladspa_plugin>\n", indent);
+ tX_store("%s</ladspa_plugin>\n", indent);
}
void vtt_fx_ladspa :: load(xmlDocPtr doc, xmlNodePtr node) {
virtual const char *get_info_string();
- virtual void save(FILE *output, char *indent);
+ virtual void save(FILE *rc, gzFile rz, char *indent);
GtkWidget* get_panel_widget() { return panel_widget; }
void set_panel_widget(GtkWidget *widget) { panel_widget=widget; }
virtual void run();
virtual int isEnabled();
- virtual void save(FILE *output, char *indent);
+ virtual void save(FILE *rc, gzFile rz, char *indent);
virtual const char *get_info_string();
};
virtual void run();
virtual int isEnabled();
- virtual void save(FILE *output, char *indent);
+ virtual void save(FILE *rc, gzFile rz, char *indent);
virtual const char *get_info_string();
};
virtual int isEnabled();
virtual void reconnect_buffer();
virtual const char *get_info_string();
- virtual void save(FILE *output, char *indent);
+ virtual void save(FILE *rc, gzFile rz, char *indent);
#ifdef ENABLE_TX_LEGACY
virtual void load(FILE *);
#endif
<widget class="GtkTable" id="table3">
<property name="border_width">4</property>
<property name="visible">True</property>
- <property name="n_rows">3</property>
+ <property name="n_rows">4</property>
<property name="n_columns">2</property>
<property name="homogeneous">False</property>
<property name="row_spacing">2</property>
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
<property name="y_options"></property>
</packing>
</child>
+
+ <child>
+ <widget class="GtkLabel" id="label33">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Compress set files:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="compress_set_files">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Enabled</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
</widget>
<packing>
<property name="tab_expand">False</property>