/* WebDownloader for X-Window
* Copyright (C) 1999-2002 Koshelev Maxim
* This Program is free but not GPL!!! You can't modify it
* without agreement with author. You can't distribute modified
* program but you can distribute unmodified program.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include "edit.h"
#include "list.h"
#include "misc.h"
#include "mywidget.h"
#include "addd.h"
#include "passface.h"
#include "../history.h"
#include "../var.h"
#include "../locstr.h"
#include "../main.h"
#include "../ntlocale.h"
#include "../filter.h"
#include "../recode.h"
#include <gdk/gdkkeysyms.h>
enum EDIT_OPTIONS_ENUM{
EDIT_OPT_USERPASS=0,
EDIT_OPT_SAVEPATH,
EDIT_OPT_FROMBEGIN,
EDIT_OPT_TIMEOUT,
EDIT_OPT_SPEED,
EDIT_OPT_ATTEMPTS,
EDIT_OPT_SLEEPTIME,
EDIT_OPT_ROLLBACK,
EDIT_OPT_DATE,
EDIT_OPT_IFNOREGET,
EDIT_OPT_SPLIT,
EDIT_OPT_PASSIVEFTP,
EDIT_OPT_PERMISSIONS,
EDIT_OPT_DONT_SEND_QUIT,
EDIT_OPT_DIRONTOP,
EDIT_OPT_CHECK_TIME,
EDIT_OPT_SLEEP_BEFORE_COMPLETE,
EDIT_OPT_FOLLOWLINK,
EDIT_OPT_RECURSEDEPTHFTP,
EDIT_OPT_RECURSEDEPTHHTTP,
EDIT_OPT_LEAVEDIR,
EDIT_OPT_LEAVESERVER,
EDIT_OPT_CHANGE_LINKS,
EDIT_OPT_IHATEETAG,
EDIT_OPT_QUEST_SIGN,
EDIT_OPT_USERAGENT,
EDIT_OPT_REFERER,
EDIT_OPT_COOKIE,
EDIT_OPT_PROXY,
EDIT_OPT_TIME,
EDIT_OPT_LASTOPTION
};
char *edit_fields_labels[]={
N_("Use password for this site"),
N_("Save download to folder"),
N_("Restart this download from begining"),
N_("Timeout for reading from socket"),
N_("Speed limitation"),
N_("Maximum attempts"),
N_("Timeout before reconnection"),
N_("Rollback after reconnecting"),
N_("Get date from the server"),
N_("Retry if resuming is not supported"),
N_("Number of parts for spliting this download"),
N_("Use passive mode for FTP"),
N_("Get permissions of the file from server (FTP only)"),
N_("Don't send QUIT command (FTP)"),
N_("Put directories on the top of queue during recursion"),
N_("Compare date/time of remote file with local one"),
N_("Sleep before completing"),
N_("Follow symbolic links"),
N_("Depth of recursing for FTP"),
N_("Depth of recursing for HTTP"),
N_("Only subdirs"),
N_("Allow leave this server while recursing via HTTP"),
N_("Change links in HTML file to local"),
N_("Ignore ETag field in reply"),
N_("Use '_' instead of '?' in stored filenames"),
N_("User-Agent"),
N_("Referer"),
N_("Cookie"),
N_("Proxy"),
N_("Time")
};
void edit_window_cancel(GtkWidget *parent,tDEdit *where);
gint edit_window_delete(GtkObject *parent);
void edit_window_ok(GtkWidget *which,tDEdit *where);
void history_to_combo_box_entry(tHistory *history,GtkWidget *combo){
tString *tmp=history->last();
while (tmp) {
gtk_combo_box_append_text (GTK_COMBO_BOX (combo), tmp->body);
tmp=history->next();
};
};
GList *make_glist_from_mylist(tHistory *parent) {
GList *rvalue=NULL;
tString *tmp=parent->last();
while (tmp) {
rvalue = g_list_append (rvalue, tmp->body);
tmp=parent->next();
};
return rvalue;
};
GtkWidget *my_gtk_combo_new(tHistory *history) {
GtkWidget *combo=gtk_combo_box_entry_new_text();
history_to_combo_box_entry(history,combo);
return(combo);
/*
GtkWidget *combo=gtk_combo_new();
GList *list=make_glist_from_mylist(history);
if (list){
gtk_combo_set_popdown_strings (GTK_COMBO (combo), list);
g_list_free(list);
};
gtk_combo_set_case_sensitive(GTK_COMBO(combo),TRUE);
return combo;
*/
};
GtkWidget *my_gtk_combo_new(int from,int to) {
GtkWidget *combo=gtk_combo_box_entry_new_text();
char data[MAX_LEN];
for (int i=from;i<=to;i++){
sprintf(data,"%i",i);
gtk_combo_box_append_text (GTK_COMBO_BOX (combo), data);
};
gtk_editable_set_editable(GTK_EDITABLE(GTK_BIN (combo)->child),FALSE);
return combo;
};
GtkWidget *my_gtk_combo_new_month() {
GtkWidget *combo=gtk_combo_box_entry_new_text();
gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Jan");
gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Feb");
gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Mar");
gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Apr");
gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "May");
gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Jun");
gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Jul");
gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Aug");
gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Sep");
gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Oct");
gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Nov");
gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Dec");
gtk_editable_set_editable(GTK_EDITABLE(GTK_BIN (combo)->child),FALSE);
return combo;
};
/******************************************************/
void init_edit_window(tDownload *what) {
if (!what) return;
if (what->editor) {
what->editor->popup();
return;
};
if (what->config==NULL){
what->config=new tCfg;
what->set_default_cfg();
};
what->editor=new tDEdit;
what->editor->init(what);
what->editor->parent_in_db=1;
int owner=what->owner();
if (owner==DL_RUN || owner==DL_STOPWAIT ||
what->myowner->PAPA->is_first(DL_SIZEQUERY,what))
what->editor->disable_ok_button();
gtk_window_set_title(GTK_WINDOW(what->editor->window),_("Edit download"));
g_signal_connect(G_OBJECT(what->editor->cancel_button),"clicked",G_CALLBACK(edit_window_cancel),what->editor);
g_signal_connect(G_OBJECT(what->editor->ok_button),"clicked",G_CALLBACK(edit_window_ok),what->editor);
g_signal_connect(G_OBJECT(what->editor->window),"delete_event",G_CALLBACK(edit_window_delete), what->editor);
d4x_eschandler_init(what->editor->window,what->editor);
};
void init_edit_window_without_ok(tDownload *what,int flag) {
if (!what) return;
if (what->editor) {
what->editor->popup();
return;
};
what->editor=new tDEdit;
if (flag) what->editor->add_or_edit=flag;
what->editor->init(what);
if (what->owner()==DL_RUN ||
what->owner()==DL_STOPWAIT)
what->editor->disable_ok_button();
gtk_window_set_title(GTK_WINDOW(what->editor->window),_("Edit download"));
g_signal_connect(G_OBJECT(what->editor->cancel_button),"clicked",G_CALLBACK(edit_window_cancel),what->editor);
g_signal_connect(G_OBJECT(what->editor->window),"delete_event",G_CALLBACK(edit_window_delete), what->editor);
d4x_eschandler_init(what->editor->window,what->editor);
};
void edit_window_cancel(GtkWidget *parent,tDEdit *where) {
delete where;
};
gint edit_window_delete(GtkObject *parent) {
tDEdit *tmp=(tDEdit *)g_object_get_data(G_OBJECT(parent),"d4x_user_data");
delete tmp;
return TRUE;
};
void edit_window_url_activate(GtkWidget *which,tDEdit *where){
if (GTK_WIDGET_SENSITIVE(where->ok_button))
g_signal_emit_by_name(G_OBJECT(where->ok_button),
"clicked",where);
};
void edit_window_ok(GtkWidget *which,tDEdit *where) {
if (where->apply_changes())
return;
tDownload *dwn=where->get_parent();
if (dwn->config->isdefault){
delete(dwn->config);
dwn->config=NULL;
};
if (where->parent_in_db){
DQV(dwn).update(dwn);
if (!where->get_pause_check())
_aa_.continue_download(dwn);
d4x_main_buttons_of_log_update(dwn);
};
delete where;
};
static void edit_browser_path_set_as_default(GtkWidget *parent,tDEdit *where){
where->set_path_as_default();
};
static void edit_window_password(GtkWidget *parent,tDEdit *where) {
where->setup_entries();
};
static void edit_isdefault_check_clicked(GtkWidget *parent,tDEdit *where) {
where->toggle_isdefault();
};
static void edit_time_check_clicked(GtkWidget *parent,tDEdit *where) {
where->toggle_time();
};
static void edit_auto_log_clicked(GtkWidget *parent,tDEdit *where){
where->auto_fill_log();
};
static void edit_filter_sel_clicked(GtkWidget *parent,tDEdit *where){
where->init_filter_sel();
};
static void edit_filter_sel_ok(GtkWidget *parent,tDEdit *where){
where->filter_ok();
};
static gboolean edit_filter_sel_select(GtkTreeView *view,GdkEventButton *event,
tDEdit *where) {
if (event && event->type==GDK_2BUTTON_PRESS && event->button==1){
where->filter_ok();
return TRUE;
};
return FALSE;
};
static void edit_filter_sel_cancel(GtkWidget *parent,tDEdit *where){
where->filter_cancel();
};
static void edit_filter_sel_delete(GtkWidget *parent,
GdkEvent *event,
tDEdit *where){
where->filter_cancel();
};
/******************************************************/
tDEdit::tDEdit() {
parent=NULL;
window=NULL;
proxy=NULL;
filter_sel=NULL;
parent_in_db=0;
add_or_edit=dnd=limit=not_url_history=0;
};
void tDEdit::popup() {
if (window)
gdk_window_show(window->window);
};
tDownload *tDEdit::get_parent(){
return parent;
};
void tDEdit::set_parent(tDownload *what){
if (parent)
parent->editor=NULL;
if (what)
what->editor=this;
parent=what;
};
void tDEdit::set_path_as_default(){
if (CFG.GLOBAL_SAVE_PATH)
delete[] CFG.GLOBAL_SAVE_PATH;
CFG.GLOBAL_SAVE_PATH=normalize_path_full(text_from_combo(MY_GTK_FILESEL(path_entry)->combo));
};
void tDEdit::file_from_url(){
char *a=text_from_combo(url_entry);
char *b=text_from_combo(MY_GTK_FILESEL(file_entry)->combo);
if (a && *a && (b==NULL || *b==0)){
d4x::URL adr(a);
text_to_combo(MY_GTK_FILESEL(file_entry)->combo,adr.file.c_str());
};
};
void tDEdit::file_check(){
char *a=text_from_combo(MY_GTK_FILESEL(file_entry)->combo);
char *b;
if (a){
b=rindex(a,'/');
if (b){
a=copy_string(b+1);
text_to_combo(MY_GTK_FILESEL(file_entry)->combo,a);
delete[] a;
};
};
b=text_from_combo(url_entry);
a=text_from_combo(MY_GTK_FILESEL(file_entry)->combo);
if (b && *b && a){
d4x::URL adr(b);
if (adr.file==a)
text_to_combo(MY_GTK_FILESEL(file_entry)->combo,"");
};
};
void tDEdit::file_recode_from_url(){
char *a=text_from_combo(url_entry);
if (a && *a){
d4x::URL adr(a);
// char *tmp=recode_from_cp1251((unsigned char*)(adr->file.get()));
char *tmp=g_convert(adr.file.c_str(),-1,"UTF-8","CP1251",NULL,NULL,NULL);
if (tmp){
text_to_combo(MY_GTK_FILESEL(file_entry)->combo,tmp);
g_free(tmp);
};
};
};
static gint edit_browser_file_focus(GtkWidget *widget,
GdkEvent *event,
tDEdit *edit){
edit->file_from_url();
return(FALSE);
};
static gint edit_browser_file_un_focus(GtkWidget *widget,
GdkEvent *event,
tDEdit *edit){
edit->file_check();
return(FALSE);
};
static void edit_browser_file_recode(GtkWidget *widget,tDEdit *edit){
edit->file_recode_from_url();
};
void tDEdit::init_main(tDownload *who) {
/* initing entries
*/
user_entry=my_gtk_combo_new(ALL_HISTORIES[USER_HISTORY]);
if (CFG.REMEMBER_PASS)
pass_entry=my_gtk_combo_new(ALL_HISTORIES[PASS_HISTORY]);
else{
pass_entry=gtk_entry_new();
gtk_entry_set_max_length(GTK_ENTRY(pass_entry),MAX_LEN);
gtk_entry_set_visibility(GTK_ENTRY(pass_entry),FALSE);
};
path_entry=my_gtk_filesel_new(ALL_HISTORIES[PATH_HISTORY]);//my_gtk_combo_new(ALL_HISTORIES[PATH_HISTORY]);
file_entry=my_gtk_filesel_new(ALL_HISTORIES[FILE_HISTORY]);//my_gtk_combo_new(ALL_HISTORIES[FILE_HISTORY]);
GtkWidget *tmp_object=GTK_BIN (MY_GTK_FILESEL(file_entry)->combo)->child;
g_signal_connect(G_OBJECT(tmp_object),"focus_out_event",
G_CALLBACK(edit_browser_file_un_focus),this);
g_signal_connect(G_OBJECT(tmp_object),"focus_in_event",
G_CALLBACK(edit_browser_file_focus),this);
MY_GTK_FILESEL(path_entry)->modal=GTK_WINDOW(window);
MY_GTK_FILESEL(file_entry)->modal=GTK_WINDOW(window);
url_entry=my_gtk_combo_new(ALL_HISTORIES[URL_HISTORY]);
g_signal_connect(G_OBJECT(GTK_BIN(url_entry)->child), "activate",
G_CALLBACK(edit_window_url_activate), this);
MY_GTK_FILESEL(path_entry)->only_dirs=TRUE;
desc_entry=my_gtk_combo_new(ALL_HISTORIES[DESC_HISTORY]);
if (who->Description.get())
set_description(who->Description.get());
else
set_description("");
// char temp[MAX_LEN];
// make_url_from_download(who,temp);
// text_to_combo(url_entry,temp);
text_to_combo(url_entry,std::string(d4x::ShortURL(who->info)).c_str());
text_to_combo(MY_GTK_FILESEL(path_entry)->combo,who->config->save_path.get());
text_to_combo(MY_GTK_FILESEL(file_entry)->combo,who->Name2Save.c_str());
text_to_combo(pass_entry,who->info.pass.c_str());
text_to_combo(user_entry,who->info.user.c_str());
/* initing labels
*/
GtkWidget *url_label=gtk_label_new("URL:");
GtkWidget *desc_label=gtk_label_new(_("Description"));
GtkWidget *path_label=gtk_label_new(_("Save download to folder"));
GtkWidget *file_label=gtk_label_new(_("Save download to file"));
GtkWidget *pass_label=gtk_label_new(_("password"));
GtkWidget *user_label=gtk_label_new(_("user name"));
/* set as default button
*/
GtkWidget *path_set_as_default=gtk_button_new_with_label(_("Default"));
g_signal_connect(G_OBJECT(path_set_as_default),"clicked",G_CALLBACK(edit_browser_path_set_as_default),this);
/* initing boxes
*/
GtkWidget *url_box=gtk_hbox_new(FALSE,5);
GtkWidget *path_vbox=gtk_vbox_new(FALSE,2);
GtkWidget *file_vbox=gtk_vbox_new(FALSE,2);
GtkWidget *desc_vbox=gtk_vbox_new(FALSE,2);
GtkWidget *pass_box=gtk_hbox_new(FALSE,5);
GtkWidget *user_box=gtk_hbox_new(FALSE,5);
GtkWidget *file_recode=gtk_button_new_with_label(_("CP1251->UTF8"));
g_signal_connect(G_OBJECT(file_recode),"clicked",G_CALLBACK(edit_browser_file_recode),this);
gtk_box_pack_start(GTK_BOX(url_box),url_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(url_box),url_entry,TRUE,TRUE,0);
gtk_box_pack_start(GTK_BOX(desc_vbox),desc_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(desc_vbox),desc_entry,TRUE,TRUE,0);
gtk_box_pack_start(GTK_BOX(path_entry),path_set_as_default,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(file_entry),file_recode,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(path_vbox),path_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(path_vbox),path_entry,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(file_vbox),file_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(file_vbox),file_entry,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(pass_box),pass_entry,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(pass_box),pass_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(user_box),user_entry,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(user_box),user_label,FALSE,FALSE,0);
use_pass_check=gtk_check_button_new_with_label(_("Use password for this site"));
g_signal_connect(G_OBJECT(use_pass_check),"clicked",G_CALLBACK(edit_window_password),this);
if (who->info.user.empty())
GTK_TOGGLE_BUTTON(use_pass_check)->active=FALSE;
else
GTK_TOGGLE_BUTTON(use_pass_check)->active=TRUE;
GtkWidget *vbox=gtk_vbox_new(FALSE,5);
gtk_container_set_border_width(GTK_CONTAINER(vbox),5);
gtk_box_pack_start(GTK_BOX(vbox),url_box,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),path_vbox,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),file_vbox,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),desc_vbox,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),use_pass_check,FALSE,FALSE,0);
if (limit){
con_limit_entry=my_gtk_entry_new_with_max_length(5,who->config->con_limit);
GtkWidget *limit_box=gtk_hbox_new(FALSE,5);
gtk_box_pack_start(GTK_BOX(limit_box),user_box,FALSE,FALSE,0);
gtk_box_pack_end(GTK_BOX(limit_box),con_limit_entry,FALSE,FALSE,0);
gtk_box_pack_end(GTK_BOX(limit_box),gtk_label_new(_("Connections limit:")),FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),limit_box,FALSE,FALSE,0);
}else{
con_limit_entry=NULL;
gtk_box_pack_start(GTK_BOX(vbox),user_box,FALSE,FALSE,0);
};
gtk_box_pack_start(GTK_BOX(vbox),pass_box,FALSE,FALSE,0);
pause_check=gtk_check_button_new_with_label(_("Pause this just after adding"));
restart_from_begin_check=gtk_check_button_new_with_label(_("Restart this download from begining"));
GtkWidget *tmp_hbox=gtk_hbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(tmp_hbox),restart_from_begin_check,
FALSE,FALSE,0);
if (add_or_edit){
to_top_check=gtk_check_button_new_with_label(_("Add to top of queue"));
gtk_box_pack_end(GTK_BOX(tmp_hbox),to_top_check,
FALSE,FALSE,0);
}else
to_top_check=NULL;
if (who->owner()==DL_PAUSE)
GTK_TOGGLE_BUTTON(pause_check)->active=1;
else
GTK_TOGGLE_BUTTON(pause_check)->active=CFG.PAUSE_AFTER_ADDING;
GTK_TOGGLE_BUTTON(restart_from_begin_check)->active=who->restart_from_begin;
gtk_box_pack_start(GTK_BOX(vbox),pause_check,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),tmp_hbox,FALSE,FALSE,0);
GtkWidget *frame=gtk_frame_new(_("Download"));
gtk_container_set_border_width(GTK_CONTAINER(frame),5);
gtk_container_add(GTK_CONTAINER(frame),vbox);
gtk_notebook_append_page(GTK_NOTEBOOK(notebook),frame,gtk_label_new(_("Main")));
};
void tDEdit::init_other(tDownload *who) {
/* initing other
*/
GtkWidget *other_vbox=gtk_vbox_new(FALSE,5);
gtk_container_set_border_width(GTK_CONTAINER(other_vbox),5);
timeout_entry=my_gtk_entry_new_with_max_length(3,who->config->timeout);
sleep_entry=my_gtk_entry_new_with_max_length(3,who->config->time_for_sleep);
attempts_entry=my_gtk_entry_new_with_max_length(3,who->config->number_of_attempts);
rollback_entry=my_gtk_entry_new_with_max_length(5,who->config->rollback);
speed_entry=my_gtk_entry_new_with_max_length(5,who->config->speed);
split_entry=my_gtk_entry_new_with_max_length(2,who->split==NULL?0:who->split->NumOfParts);
GtkWidget *other_hbox=gtk_hbox_new(FALSE,5);
GtkWidget *other_label=gtk_label_new(_("Timeout for reading from socket (in seconds)"));
gtk_box_pack_start(GTK_BOX(other_hbox),timeout_entry,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(other_hbox),other_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(other_vbox),other_hbox,FALSE,FALSE,0);
other_hbox=gtk_hbox_new(FALSE,5);
other_label=gtk_label_new(_("Timeout before reconnection (in seconds)"));
gtk_box_pack_start(GTK_BOX(other_hbox),sleep_entry,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(other_hbox),other_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(other_vbox),other_hbox,FALSE,FALSE,0);
other_hbox=gtk_hbox_new(FALSE,5);
other_label=gtk_label_new(_("Maximum attempts (0 for unlimited)"));
gtk_box_pack_start(GTK_BOX(other_hbox),attempts_entry,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(other_hbox),other_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(other_vbox),other_hbox,FALSE,FALSE,0);
other_hbox=gtk_hbox_new(FALSE,5);
other_label=gtk_label_new(_("Rollback after reconnecting (in bytes)"));
gtk_box_pack_start(GTK_BOX(other_hbox),rollback_entry,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(other_hbox),other_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(other_vbox),other_hbox,FALSE,FALSE,0);
other_hbox=gtk_hbox_new(FALSE,5);
other_label=gtk_label_new(_("Speed limitation in Bytes/sec (0 for unlimited)"));
gtk_box_pack_start(GTK_BOX(other_hbox),speed_entry,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(other_hbox),other_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(other_vbox),other_hbox,FALSE,FALSE,0);
other_hbox=gtk_hbox_new(FALSE,5);
other_label=gtk_label_new(_("Number of parts for spliting this download"));
gtk_box_pack_start(GTK_BOX(other_hbox),split_entry,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(other_hbox),other_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(other_vbox),other_hbox,FALSE,FALSE,0);
get_date_check=gtk_check_button_new_with_label(_("Get date from the server"));
GTK_TOGGLE_BUTTON(get_date_check)->active=who->config->get_date;
gtk_box_pack_start(GTK_BOX(other_vbox),get_date_check,FALSE,FALSE,0);
retry_check=gtk_check_button_new_with_label(_("Retry if resuming is not supported"));
GTK_TOGGLE_BUTTON(retry_check)->active=who->config->retry;
gtk_box_pack_start(GTK_BOX(other_vbox),retry_check,FALSE,FALSE,0);
sleep_check=gtk_check_button_new_with_label(_("Sleep before completing"));
GTK_TOGGLE_BUTTON(sleep_check)->active=who->config->sleep_before_complete;
gtk_box_pack_start(GTK_BOX(other_vbox),sleep_check,FALSE,FALSE,0);
check_time_check=gtk_check_button_new_with_label(_("Compare date/time of remote file with local one"));
GTK_TOGGLE_BUTTON(check_time_check)->active=who->config->check_time;
gtk_box_pack_start(GTK_BOX(other_vbox),check_time_check,FALSE,FALSE,0);
other_label=gtk_label_new(_("Save log to file"));
GtkWidget *other_box=gtk_vbox_new(FALSE,5);
log_save_entry=my_gtk_filesel_new(ALL_HISTORIES[LOG_SAVE_HISTORY]);
MY_GTK_FILESEL(log_save_entry)->modal=GTK_WINDOW(window);
if (who->config->log_save_path.get())
text_to_combo(MY_GTK_FILESEL(log_save_entry)->combo,
who->config->log_save_path.get());
else
text_to_combo(MY_GTK_FILESEL(log_save_entry)->combo,"");
GtkWidget *auto_button=gtk_button_new_with_label(_("Auto"));
g_signal_connect(G_OBJECT(auto_button),"clicked",G_CALLBACK(edit_auto_log_clicked),this);
gtk_box_pack_start(GTK_BOX(log_save_entry),auto_button,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(other_box),other_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(other_box),log_save_entry,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(other_vbox),other_box,FALSE,FALSE,0);
GtkWidget *other_frame=common_frame=gtk_frame_new(_("Common"));
gtk_container_set_border_width(GTK_CONTAINER(other_frame),5);
gtk_container_add(GTK_CONTAINER(other_frame),other_vbox);
gtk_notebook_append_page(GTK_NOTEBOOK(notebook),other_frame,gtk_label_new(_("Common")));
};
void tDEdit::init_ftp(tDownload *who){
GtkWidget *ftp_vbox=gtk_vbox_new(FALSE,5);
gtk_container_set_border_width(GTK_CONTAINER(ftp_vbox),5);
ftp_passive_check=gtk_check_button_new_with_label(_("Use passive mode for FTP"));
GTK_TOGGLE_BUTTON(ftp_passive_check)->active=who->config->passive;
gtk_box_pack_start(GTK_BOX(ftp_vbox),ftp_passive_check,FALSE,FALSE,0);
dont_send_quit_check=gtk_check_button_new_with_label(_("Don't send QUIT command (FTP)"));
GTK_TOGGLE_BUTTON(dont_send_quit_check)->active=who->config->dont_send_quit;
gtk_box_pack_start(GTK_BOX(ftp_vbox),dont_send_quit_check,FALSE,FALSE,0);
permisions_check=gtk_check_button_new_with_label(_("Get permissions of the file from server (FTP only)"));
GTK_TOGGLE_BUTTON(permisions_check)->active=who->config->permisions;
gtk_box_pack_start(GTK_BOX(ftp_vbox),permisions_check,FALSE,FALSE,0);
follow_link_check=gtk_radio_button_new_with_label(NULL,_("Follow symbolic links"));
GTK_TOGGLE_BUTTON(follow_link_check)->active=who->config->follow_link==1?1:0;
gtk_box_pack_start(GTK_BOX(ftp_vbox),follow_link_check,FALSE,FALSE,0);
GSList *proxy_group1=gtk_radio_button_get_group(GTK_RADIO_BUTTON(follow_link_check));
load_link_check=gtk_radio_button_new_with_label(proxy_group1,_("Load links as links"));
GTK_TOGGLE_BUTTON(load_link_check)->active=who->config->follow_link==0?1:0;
gtk_box_pack_start(GTK_BOX(ftp_vbox),load_link_check,FALSE,FALSE,0);
proxy_group1=gtk_radio_button_get_group(GTK_RADIO_BUTTON(load_link_check));
link_as_file_check=gtk_radio_button_new_with_label(proxy_group1,_("Load links as file"));
GTK_TOGGLE_BUTTON(link_as_file_check)->active=who->config->follow_link==2?1:0;
gtk_box_pack_start(GTK_BOX(ftp_vbox),link_as_file_check,FALSE,FALSE,0);
ftp_dirontop_check=gtk_check_button_new_with_label(_("Put directories on the top of queue during recursion"));
GTK_TOGGLE_BUTTON(ftp_dirontop_check)->active=who->config->ftp_dirontop;
gtk_box_pack_start(GTK_BOX(ftp_vbox),ftp_dirontop_check,FALSE,FALSE,0);
ftp_recurse_depth_entry=my_gtk_entry_new_with_max_length(3,who->config->ftp_recurse_depth);
GtkWidget *ftp_hbox=gtk_hbox_new(FALSE,2);
GtkWidget *other_label=gtk_label_new(_("Depth of recursing (0 unlimited,1 no recurse)"));
gtk_box_pack_start(GTK_BOX(ftp_hbox),ftp_recurse_depth_entry,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(ftp_hbox),other_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(ftp_vbox),ftp_hbox,FALSE,FALSE,0);
ftp_frame=gtk_frame_new("FTP");
gtk_container_set_border_width(GTK_CONTAINER(ftp_frame),5);
gtk_container_add(GTK_CONTAINER(ftp_frame),ftp_vbox);
gtk_notebook_append_page(GTK_NOTEBOOK(notebook),ftp_frame,gtk_label_new("FTP"));
};
void tDEdit::init_http(tDownload *who){
GtkWidget *http_vbox=gtk_vbox_new(FALSE,5);
gtk_container_set_border_width(GTK_CONTAINER(http_vbox),5);
http_recurse_depth_entry=my_gtk_entry_new_with_max_length(3,who->config->http_recurse_depth);
GtkWidget *http_hbox=gtk_hbox_new(FALSE,5);
GtkWidget *other_label=gtk_label_new(_("Depth of recursing (0 unlimited,1 no recurse)"));
gtk_box_pack_start(GTK_BOX(http_hbox),http_recurse_depth_entry,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(http_hbox),other_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(http_vbox),http_hbox,FALSE,FALSE,0);
leave_dir_check=gtk_check_button_new_with_label(_("Only subdirs"));
leave_server_check=gtk_check_button_new_with_label(_("Allow leave this server while recursing via HTTP"));
change_links_check=gtk_check_button_new_with_label(_("Change links in HTML file to local"));
ihate_etag_check=gtk_check_button_new_with_label(_("Ignore ETag field in reply"));
quest_sign_check=gtk_check_button_new_with_label(_("Use '_' instead of '?' in stored filenames"));;
GTK_TOGGLE_BUTTON(leave_server_check)->active=who->config->leave_server;
GTK_TOGGLE_BUTTON(leave_dir_check)->active=who->config->dont_leave_dir;
GTK_TOGGLE_BUTTON(change_links_check)->active=who->config->change_links;
GTK_TOGGLE_BUTTON(ihate_etag_check)->active=who->config->ihate_etag;
GTK_TOGGLE_BUTTON(quest_sign_check)->active=who->config->quest_sign_replace;
gtk_box_pack_start(GTK_BOX(http_vbox),leave_server_check,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(http_vbox),leave_dir_check,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(http_vbox),change_links_check,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(http_vbox),ihate_etag_check,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(http_vbox),quest_sign_check,FALSE,FALSE,0);
filter=gtk_entry_new();
gtk_editable_set_editable(GTK_EDITABLE(filter),FALSE);
if (who->config->Filter.get())
text_to_combo(filter,who->config->Filter.get());
http_hbox=gtk_hbox_new(FALSE,5);
other_label=gtk_label_new(_("Filter"));
GtkWidget *button=gtk_button_new_with_label(_("Select"));
g_signal_connect(G_OBJECT(button),"clicked",
G_CALLBACK(edit_filter_sel_clicked),this);
gtk_box_pack_start(GTK_BOX(http_hbox),other_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(http_hbox),filter,TRUE,TRUE,0);
gtk_box_pack_start(GTK_BOX(http_hbox),button,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(http_vbox),http_hbox,FALSE,FALSE,0);
GtkWidget *user_agent_label=gtk_label_new(_("User-Agent"));
GtkWidget *user_agent_box=gtk_vbox_new(FALSE,5);
user_agent_entry=my_gtk_combo_new(ALL_HISTORIES[USER_AGENT_HISTORY]);
if (who->config->user_agent.get())
text_to_combo(user_agent_entry,who->config->user_agent.get());
gtk_box_pack_start(GTK_BOX(user_agent_box),user_agent_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(user_agent_box),user_agent_entry,TRUE,TRUE,0);
gtk_box_pack_start(GTK_BOX(http_vbox),user_agent_box,FALSE,FALSE,0);
GtkWidget *label=gtk_label_new(_("Referer"));
GtkWidget *vbox=gtk_vbox_new(FALSE,0);
referer_entry=my_gtk_combo_new(ALL_HISTORIES[REFERER_HISTORY]);
if (who->config->referer.get())
text_to_combo(referer_entry,who->config->referer.get());
else
text_to_combo(referer_entry,"");
gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),referer_entry,TRUE,TRUE,0);
gtk_box_pack_start(GTK_BOX(http_vbox),vbox,FALSE,FALSE,0);
label=gtk_label_new(_("Cookie"));
vbox=gtk_vbox_new(FALSE,0);
cookie_entry=my_gtk_combo_new(ALL_HISTORIES[COOKIE_HISTORY]);
if (who->config->cookie.get())
text_to_combo(cookie_entry,who->config->cookie.get());
else
text_to_combo(cookie_entry,"");
gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),cookie_entry,TRUE,TRUE,0);
gtk_box_pack_start(GTK_BOX(http_vbox),vbox,FALSE,FALSE,0);
http_frame=gtk_frame_new("HTTP");
gtk_container_set_border_width(GTK_CONTAINER(http_frame),5);
gtk_container_add(GTK_CONTAINER(http_frame),http_vbox);
gtk_notebook_append_page(GTK_NOTEBOOK(notebook),http_frame,gtk_label_new("HTTP"));
};
void tDEdit::init_time(tDownload *who){
/* Init time
*/
GtkWidget *time_frame=gtk_frame_new(_("Time"));
GtkWidget *time_hbox=gtk_hbox_new(FALSE,5);
GtkWidget *time_label,*time_vbox;
gtk_container_set_border_width(GTK_CONTAINER(time_frame),5);
calendar=gtk_calendar_new();
gtk_calendar_set_display_options(GTK_CALENDAR(calendar),
GtkCalendarDisplayOptions(
GTK_CALENDAR_WEEK_START_MONDAY |
GTK_CALENDAR_SHOW_DAY_NAMES|
GTK_CALENDAR_SHOW_HEADING));
gtk_box_pack_start(GTK_BOX(time_hbox),calendar,FALSE,FALSE,0);
hour_entry=my_gtk_combo_new(0,23);
time_label=gtk_label_new(_("Hours"));
time_vbox=gtk_vbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(time_vbox),time_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(time_vbox),hour_entry,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(time_vbox),gtk_vbox_new(FALSE,0),TRUE,TRUE,0);
gtk_box_pack_start(GTK_BOX(time_hbox),time_vbox,FALSE,FALSE,0);
minute_entry=my_gtk_combo_new(0,59);
time_label=gtk_label_new(_("Minutes"));
time_vbox=gtk_vbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(time_vbox),time_label,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(time_vbox),minute_entry,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(time_vbox),gtk_vbox_new(FALSE,0),TRUE,TRUE,0);
gtk_box_pack_start(GTK_BOX(time_hbox),time_vbox,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(time_hbox),gtk_hbox_new(FALSE,0),TRUE,TRUE,0);
gtk_widget_set_size_request(hour_entry,60,-1);
gtk_widget_set_size_request(minute_entry,60,-1);
time_vbox=gtk_vbox_new(FALSE,5);
gtk_container_set_border_width(GTK_CONTAINER(time_vbox),5);
time_check=gtk_check_button_new_with_label(_("Start this downloading at:"));
g_signal_connect(G_OBJECT(time_check),"clicked",G_CALLBACK(edit_time_check_clicked),this);
gtk_box_pack_start(GTK_BOX(time_vbox),time_check,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(time_vbox),time_hbox,FALSE,FALSE,0);
time_hbox=gtk_hbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(time_vbox),time_hbox,TRUE,TRUE,0);
gtk_container_add(GTK_CONTAINER(time_frame),time_vbox);
setup_time(who->ScheduleTime);
gtk_notebook_append_page(GTK_NOTEBOOK(notebook),time_frame,gtk_label_new(_("Time")));
};
void tDEdit::init(tDownload *who) {
if (!who) return;
parent=who;
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_wmclass(GTK_WINDOW(window),
"D4X_Download","D4X");
gtk_container_set_border_width(GTK_CONTAINER(window),5);
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
// gtk_widget_set_size_request(window,470,255);
g_object_set_data(G_OBJECT(window),"d4x_user_data",this);
notebook=gtk_notebook_new();
init_main(who);
init_other(who);
init_ftp(who);
init_http(who);
/* init proxies
*/
proxy=new tProxyWidget;
proxy->init();
proxy->init_state();
switch(who->info.proto){
case D_PROTO_FTP:{
proxy->init_state(who->config,1);
break;
};
case D_PROTO_HTTP:{
proxy->init_state(who->config,0);
break;
};
};
/* initing window
*/
GtkWidget *vbox2=gtk_vbox_new(FALSE,5);
GtkWidget *proxy_frame=gtk_frame_new(_("Proxy"));
gtk_container_set_border_width(GTK_CONTAINER(proxy_frame),5);
gtk_container_add(GTK_CONTAINER(proxy_frame),proxy->frame);
gtk_notebook_append_page(GTK_NOTEBOOK(notebook),proxy_frame,gtk_label_new(_("Proxy")));
init_time(who);
gtk_box_pack_start(GTK_BOX(vbox2),notebook,FALSE,FALSE,0);
/* initing buttons
*/
GtkWidget *buttons_hbox=gtk_hbutton_box_new();
gtk_button_box_set_layout(GTK_BUTTON_BOX(buttons_hbox),GTK_BUTTONBOX_END);
gtk_box_set_spacing(GTK_BOX(buttons_hbox),5);
isdefault_check=gtk_check_button_new_with_label(_("Use default settings"));
g_signal_connect(G_OBJECT(isdefault_check),"clicked",
G_CALLBACK(edit_isdefault_check_clicked),this);
GTK_TOGGLE_BUTTON(isdefault_check)->active=who->config->isdefault;
toggle_isdefault();
ok_button=gtk_button_new_from_stock(GTK_STOCK_OK);
cancel_button=gtk_button_new_from_stock(GTK_STOCK_CANCEL);
GTK_WIDGET_SET_FLAGS(ok_button,GTK_CAN_DEFAULT);
GTK_WIDGET_SET_FLAGS(cancel_button,GTK_CAN_DEFAULT);
GtkWidget *hbox_temp=gtk_hbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox_temp),isdefault_check,TRUE,TRUE,0);
gtk_box_pack_start(GTK_BOX(buttons_hbox),ok_button,TRUE,TRUE,0);
gtk_box_pack_start(GTK_BOX(buttons_hbox),cancel_button,TRUE,TRUE,0);
gtk_box_pack_start(GTK_BOX(hbox_temp),buttons_hbox,FALSE,FALSE,0);
gtk_box_pack_end(GTK_BOX(vbox2),hbox_temp,FALSE,FALSE,0);
gtk_container_add(GTK_CONTAINER(window),vbox2);
gtk_window_set_default(GTK_WINDOW(window),ok_button);
gtk_widget_show_all(window);
gtk_widget_grab_focus(GTK_BIN(url_entry)->child);
setup_entries();
};
void tDEdit::init_filter_sel(){
if (filter_sel){
gdk_window_show(GTK_WIDGET(filter_sel)->window);
return;
};
filter_sel=(d4xFilterSel*)d4x_filter_sel_new();
g_signal_connect(G_OBJECT(filter_sel->view),
"event",
G_CALLBACK(edit_filter_sel_select),
this);
g_signal_connect(G_OBJECT(filter_sel->ok),
"clicked",
G_CALLBACK(edit_filter_sel_ok),
this);
g_signal_connect(G_OBJECT(filter_sel->cancel),
"clicked",
G_CALLBACK(edit_filter_sel_cancel),
this);
g_signal_connect(G_OBJECT(filter_sel),
"delete_event",
G_CALLBACK(edit_filter_sel_delete),
this);
d4x_eschandler_init(GTK_WIDGET(filter_sel),this);
};
void tDEdit::filter_ok(){
d4x_filter_sel_to_combo(filter_sel,filter);
filter_cancel();
};
void tDEdit::filter_cancel(){
gtk_widget_destroy(GTK_WIDGET(filter_sel));
filter_sel=NULL;
};
void tDEdit::auto_fill_log(){
d4x::URL tmp(text_from_combo(url_entry));
char *savepath=text_from_combo(MY_GTK_FILESEL(path_entry)->combo);
if (!tmp.file.empty() && savepath && *savepath){
d4x::Path filename(savepath);
filename/=tmp.file+"_log";
text_to_combo(MY_GTK_FILESEL(log_save_entry)->combo,filename.c_str());
};
};
int tDEdit::get_pause_check(){
return(GTK_TOGGLE_BUTTON(pause_check)->active);
};
int tDEdit::get_to_top_check(){
if (to_top_check)
return(GTK_TOGGLE_BUTTON(to_top_check)->active);
return(0);
};
void tDEdit::disable_ok_button() {
if (window) gtk_widget_set_sensitive(ok_button,FALSE);
};
void tDEdit::enable_ok_button() {
if (window) gtk_widget_set_sensitive(ok_button,TRUE);
};
int tDEdit::apply_changes() {
CFG.USE_DEFAULT_CFG=parent->config->isdefault=GTK_TOGGLE_BUTTON(isdefault_check)->active;
char *temp=copy_string(text_from_combo(url_entry));
del_crlf(temp);
d4x::URL addr(temp);
delete[] temp;
if (parent_in_db)
ALL_DOWNLOADS->del(parent);
parent->info=addr;
if (parent_in_db)
ALL_DOWNLOADS->insert(parent);
if (parent->ALTS)
parent->ALTS->check(addr.file);
FaceForPasswords->stop_matched(parent);
switch(parent->info.proto){
case D_PROTO_FTP:{
proxy->apply_changes(parent->config,1);
break;
};
case D_PROTO_HTTP:{
proxy->apply_changes(parent->config,0);
break;
};
};
char *pass_string=text_from_combo(pass_entry);
if (GTK_TOGGLE_BUTTON(use_pass_check)->active) {
if (strlen(text_from_combo(user_entry))) {
parent->info.user=text_from_combo(user_entry);
ALL_HISTORIES[USER_HISTORY]->add(text_from_combo(user_entry));
parent->info.pass=pass_string;
if (CFG.REMEMBER_PASS)
ALL_HISTORIES[PASS_HISTORY]->add(pass_string);
};
};
char *sp=normalize_path_full(text_from_combo(MY_GTK_FILESEL(path_entry)->combo));
parent->config->save_path.set(sp);
parent->Name2Save=text_from_combo(MY_GTK_FILESEL(file_entry)->combo);
if (!parent->Name2Save.empty())
ALL_HISTORIES[FILE_HISTORY]->add(parent->Name2Save.c_str());
normalize_path(parent->config->save_path.get());
ALL_HISTORIES[PATH_HISTORY]->add(sp);
delete[] sp;
parent->status=0;
if (parent->info.file.empty()) {
parent->finfo.type=T_DIR;
parent->finfo.size=0;
} else {
parent->finfo.type=0;
parent->finfo.size=-1;
};
/* change histories
*/
parent->config->user_agent.set(text_from_combo(user_agent_entry));
std::string URL=d4x::ShortURL(parent->info);
if (!not_url_history)
ALL_HISTORIES[URL_HISTORY]->add(URL.c_str());
ALL_HISTORIES[USER_AGENT_HISTORY]->add(parent->config->user_agent.get());
char *referer=text_from_combo(referer_entry);
if (referer && *referer){
parent->config->referer.set(referer);
ALL_HISTORIES[REFERER_HISTORY]->add(referer);
}else
parent->config->referer.set(NULL);
referer=text_from_combo(cookie_entry);
if (referer && *referer){
parent->config->cookie.set(referer);
ALL_HISTORIES[COOKIE_HISTORY]->add(referer);
}else
parent->config->cookie.set(NULL);
char *save_log=text_from_combo(MY_GTK_FILESEL(log_save_entry)->combo);
if (save_log && *save_log){
char *t=normalize_path_full(save_log);
ALL_HISTORIES[LOG_SAVE_HISTORY]->add(t);
parent->config->log_save_path.set(t);
delete[] t;
}else
parent->config->log_save_path.set(NULL);
char *desc=text_from_combo(desc_entry);
if (desc && *desc){
ALL_HISTORIES[DESC_HISTORY]->add(desc);
parent->Description.set(desc);
}else
parent->Description.set(NULL);
desc=text_from_combo(filter);
if (desc && *desc){
parent->config->Filter.set(desc);
}else
parent->config->Filter.set(NULL);
/*change data in list if available
*/
if (parent_in_db){
D4X_QUEUE->qv.change_data(parent->list_iter,URL_COL,URL);
D4X_QUEUE->qv.set_filename(parent);
for (int i=FILE_TYPE_COL;i<URL_COL;i++)
if (i!=PERCENT_COL)
D4X_QUEUE->qv.change_data(parent->list_iter,i);
};
int temp1=0;
sscanf(gtk_entry_get_text(GTK_ENTRY(timeout_entry)),"%u",&temp1);
if (temp1>0 && temp1<1000) parent->config->timeout=temp1;
sscanf(gtk_entry_get_text(GTK_ENTRY(sleep_entry)),"%u",&temp1);
if (temp1>=0 && temp1<1000) parent->config->time_for_sleep=temp1;
sscanf(gtk_entry_get_text(GTK_ENTRY(attempts_entry)),"%u",&temp1);
if (temp1>=0) parent->config->number_of_attempts=temp1;
temp1=1;
sscanf(gtk_entry_get_text(GTK_ENTRY(ftp_recurse_depth_entry)),"%u",&temp1);
if (temp1>=0) parent->config->ftp_recurse_depth=temp1;
temp1=1;
sscanf(gtk_entry_get_text(GTK_ENTRY(http_recurse_depth_entry)),"%u",&temp1);
if (temp1>=0) parent->config->http_recurse_depth=temp1;
sscanf(gtk_entry_get_text(GTK_ENTRY(rollback_entry)),"%u",&temp1);
if (temp1>=0) parent->config->rollback=temp1;
sscanf(gtk_entry_get_text(GTK_ENTRY(speed_entry)),"%u",&temp1);
if (temp1>=0) parent->config->speed=temp1;
parent->config->passive=GTK_TOGGLE_BUTTON(ftp_passive_check)->active;
parent->config->dont_send_quit=GTK_TOGGLE_BUTTON(dont_send_quit_check)->active;
parent->config->permisions=GTK_TOGGLE_BUTTON(permisions_check)->active;
parent->config->get_date=GTK_TOGGLE_BUTTON(get_date_check)->active;
parent->config->retry=GTK_TOGGLE_BUTTON(retry_check)->active;
parent->config->follow_link=0;
if (GTK_TOGGLE_BUTTON(follow_link_check)->active) parent->config->follow_link=1;
if (GTK_TOGGLE_BUTTON(link_as_file_check)->active) parent->config->follow_link=2;
parent->config->leave_server=GTK_TOGGLE_BUTTON(leave_server_check)->active;
parent->config->ihate_etag=GTK_TOGGLE_BUTTON(ihate_etag_check)->active;
parent->config->dont_leave_dir=GTK_TOGGLE_BUTTON(leave_dir_check)->active;
parent->restart_from_begin=GTK_TOGGLE_BUTTON(restart_from_begin_check)->active;
parent->config->sleep_before_complete=GTK_TOGGLE_BUTTON(sleep_check)->active;
parent->config->change_links=GTK_TOGGLE_BUTTON(change_links_check)->active;
parent->config->http_recursing=parent->config->http_recurse_depth==1?0:1;
parent->config->quest_sign_replace=GTK_TOGGLE_BUTTON(quest_sign_check)->active;
parent->config->ftp_dirontop=GTK_TOGGLE_BUTTON(ftp_dirontop_check)->active;
parent->config->check_time=GTK_TOGGLE_BUTTON(check_time_check)->active;
temp1=0;
sscanf(gtk_entry_get_text(GTK_ENTRY(split_entry)),"%u",&temp1);
if (parent->config->isdefault) temp1=CFG.NUMBER_OF_PARTS;
parent->set_split_count(temp1);
if (limit && con_limit_entry){
sscanf(gtk_entry_get_text(GTK_ENTRY(con_limit_entry)),"%u",&temp1);
if (temp1>=0)
parent->config->con_limit=temp1;
else
parent->config->con_limit=0;
};
if (GTK_TOGGLE_BUTTON(time_check)->active) {
time_t NOW=time(NULL);
struct tm date;
date.tm_isdst=-1;
localtime_r(&NOW,&date);
sscanf(text_from_combo(hour_entry),"%i",&date.tm_hour);
sscanf(text_from_combo(minute_entry),"%i",&date.tm_min);
gtk_calendar_get_date(GTK_CALENDAR(calendar),
(guint *)&date.tm_year,
(guint *)&date.tm_mon,
(guint *)&date.tm_mday);
date.tm_year-=1900;
date.tm_sec=0;
parent->ScheduleTime=mktime(&date);
if (parent_in_db && time(NULL)<parent->ScheduleTime){
_aa_.schedule_download(parent);
parent_in_db=0;
};
} else {
parent->ScheduleTime=0;
};
return 0;
};
void tDEdit::toggle_isdefault() {
int a=!GTK_TOGGLE_BUTTON(isdefault_check)->active;
// gtk_widget_set_sensitive(restart_from_begin_check,a);
gtk_widget_set_sensitive(proxy->frame,a);
// gtk_widget_set_sensitive(split_entry,a);
gtk_widget_set_sensitive(path_entry,a);
gtk_widget_set_sensitive(timeout_entry,a);
gtk_widget_set_sensitive(sleep_entry,a);
gtk_widget_set_sensitive(attempts_entry,a);
gtk_widget_set_sensitive(rollback_entry,a);
gtk_widget_set_sensitive(speed_entry,a);
gtk_widget_set_sensitive(get_date_check,a);
gtk_widget_set_sensitive(retry_check,a);
gtk_widget_set_sensitive(sleep_check,a);
gtk_widget_set_sensitive(check_time_check,a);
gtk_widget_set_sensitive(log_save_entry,a);
gtk_widget_set_sensitive(ftp_frame,a);
gtk_widget_set_sensitive(http_frame,a);
};
void tDEdit::toggle_time() {
gtk_widget_set_sensitive(calendar,GTK_TOGGLE_BUTTON(time_check)->active);
gtk_widget_set_sensitive(hour_entry,GTK_TOGGLE_BUTTON(time_check)->active);
gtk_widget_set_sensitive(minute_entry,GTK_TOGGLE_BUTTON(time_check)->active);
};
void tDEdit::set_description(const char *desc){
if (desc)
text_to_combo(desc_entry,desc);
else
text_to_combo(desc_entry,"");
};
void tDEdit::set_referer(const char *ref){
if (ref)
text_to_combo(referer_entry,ref);
else
text_to_combo(referer_entry,"");
};
void tDEdit::setup_entries() {
set_editable_for_combo(pass_entry,GTK_TOGGLE_BUTTON(use_pass_check)->active);
gtk_editable_set_editable(GTK_EDITABLE(GTK_BIN(user_entry)->child),GTK_TOGGLE_BUTTON(use_pass_check)->active);
gtk_widget_set_sensitive(user_entry,GTK_TOGGLE_BUTTON(use_pass_check)->active);
gtk_widget_set_sensitive(pass_entry,GTK_TOGGLE_BUTTON(use_pass_check)->active);
};
void tDEdit::setup_time(time_t when) {
char data[MAX_LEN];
struct tm date;
if (when){
localtime_r(&when,&date);
}else{
time_t NOW=time(NULL);
localtime_r(&NOW,&date);
date.tm_hour=1;
date.tm_min=0;
time_t tonight=mktime(&date);
if (tonight<NOW)
tonight+=24*60*60;
localtime_r(&tonight,&date);
};
sprintf(data,"%i",date.tm_hour);
text_to_combo(hour_entry,data);
sprintf(data,"%i",date.tm_min);
text_to_combo(minute_entry,data);
gtk_calendar_select_month(GTK_CALENDAR(calendar),date.tm_mon,date.tm_year+1900);
gtk_calendar_select_day(GTK_CALENDAR(calendar),date.tm_mday);
GTK_TOGGLE_BUTTON(time_check)->active=when?TRUE:FALSE;
toggle_time();
};
void tDEdit::paste_url() {
char *a=d4x_mw_clipboard_get();
if (a && global_url(a)){
set_url(a);
return;
};
if (old_clipboard_content()!=NULL && global_url(old_clipboard_content())){
set_url(old_clipboard_content());
return;
};
gtk_editable_paste_clipboard(GTK_EDITABLE(GTK_BIN(url_entry)->child));
// printf("%s\n",text_from_combo(url_entry));
};
void tDEdit::select_url() {
gtk_editable_select_region(GTK_EDITABLE(GTK_BIN(url_entry)->child),0,strlen(text_from_combo(url_entry)));
};
void tDEdit::clear_url() {
text_to_combo(url_entry,"");
};
void tDEdit::clear_save_name() {
text_to_combo(MY_GTK_FILESEL(file_entry)->combo,"");
};
char *tDEdit::get_url(){
return(text_from_combo(url_entry));
};
void tDEdit::set_url(const char *a) {
text_to_combo(url_entry,a);
};
void tDEdit::disable_time(){
gtk_widget_set_sensitive(time_check,FALSE);
};
void tDEdit::disable_save_name(){
gtk_widget_set_sensitive(file_entry,FALSE);
};
void tDEdit::disable_items(int *array){
gtk_widget_set_sensitive(url_entry,FALSE);
gtk_widget_set_sensitive(file_entry,FALSE);
gtk_widget_set_sensitive(pause_check,FALSE);
gtk_widget_set_sensitive(log_save_entry,FALSE);
if (array[EDIT_OPT_USERPASS]==0){
gtk_widget_set_sensitive(pass_entry,FALSE);
gtk_widget_set_sensitive(user_entry,FALSE);
gtk_widget_set_sensitive(use_pass_check,FALSE);
};
if (array[EDIT_OPT_SAVEPATH]==0)
gtk_widget_set_sensitive(path_entry,FALSE);
if (array[EDIT_OPT_USERAGENT]==0)
gtk_widget_set_sensitive(user_agent_entry,FALSE);
if (array[EDIT_OPT_REFERER]==0)
gtk_widget_set_sensitive(referer_entry,FALSE);
if (array[EDIT_OPT_COOKIE]==0)
gtk_widget_set_sensitive(cookie_entry,FALSE);
if (array[EDIT_OPT_TIMEOUT]==0)
gtk_widget_set_sensitive(timeout_entry,FALSE);
if (array[EDIT_OPT_ATTEMPTS]==0)
gtk_widget_set_sensitive(attempts_entry,FALSE);
if (array[EDIT_OPT_SLEEPTIME]==0)
gtk_widget_set_sensitive(sleep_entry,FALSE);
if (array[EDIT_OPT_ROLLBACK]==0)
gtk_widget_set_sensitive(rollback_entry,FALSE);
if (array[EDIT_OPT_PASSIVEFTP]==0)
gtk_widget_set_sensitive(ftp_passive_check,FALSE);
if (array[EDIT_OPT_DIRONTOP]==0)
gtk_widget_set_sensitive(ftp_dirontop_check,FALSE);
if (array[EDIT_OPT_PERMISSIONS]==0)
gtk_widget_set_sensitive(permisions_check,FALSE);
if (array[EDIT_OPT_DATE]==0)
gtk_widget_set_sensitive(get_date_check,FALSE);
if (array[EDIT_OPT_IFNOREGET]==0)
gtk_widget_set_sensitive(retry_check,FALSE);
if (array[EDIT_OPT_FOLLOWLINK]==0){
gtk_widget_set_sensitive(follow_link_check,FALSE);
gtk_widget_set_sensitive(link_as_file_check,FALSE);
gtk_widget_set_sensitive(load_link_check,FALSE);
};
if (array[EDIT_OPT_LEAVESERVER]==0)
gtk_widget_set_sensitive(leave_server_check,FALSE);
if (array[EDIT_OPT_LEAVEDIR]==0)
gtk_widget_set_sensitive(leave_dir_check,FALSE);
if (array[EDIT_OPT_CHANGE_LINKS]==0)
gtk_widget_set_sensitive(change_links_check,FALSE);
if (array[EDIT_OPT_IHATEETAG]==0)
gtk_widget_set_sensitive(ihate_etag_check,FALSE);
if (array[EDIT_OPT_QUEST_SIGN]==0)
gtk_widget_set_sensitive(quest_sign_check,FALSE);
if (array[EDIT_OPT_RECURSEDEPTHFTP]==0)
gtk_widget_set_sensitive(ftp_recurse_depth_entry,FALSE);
if (array[EDIT_OPT_RECURSEDEPTHHTTP]==0)
gtk_widget_set_sensitive(http_recurse_depth_entry,FALSE);
if (array[EDIT_OPT_FROMBEGIN]==0)
gtk_widget_set_sensitive(restart_from_begin_check,FALSE);
if (array[EDIT_OPT_SPEED]==0)
gtk_widget_set_sensitive(speed_entry,FALSE);
if (array[EDIT_OPT_CHECK_TIME]==0)
gtk_widget_set_sensitive(check_time_check,FALSE);
if (array[EDIT_OPT_SLEEP_BEFORE_COMPLETE]==0)
gtk_widget_set_sensitive(sleep_check,FALSE);
if (array[EDIT_OPT_TIME]==0){
gtk_widget_set_sensitive(time_check,FALSE);
gtk_widget_set_sensitive(calendar,FALSE);
gtk_widget_set_sensitive(hour_entry,FALSE);
gtk_widget_set_sensitive(minute_entry,FALSE);
};
if (array[EDIT_OPT_SPLIT]==0)
gtk_widget_set_sensitive(split_entry,FALSE);
if (array[EDIT_OPT_PROXY]==0)
gtk_widget_set_sensitive(proxy->frame,FALSE);
if (array[EDIT_OPT_DONT_SEND_QUIT]==0)
gtk_widget_set_sensitive(dont_send_quit_check,FALSE);
};
void tDEdit::apply_enabled_changes(){
if (GTK_WIDGET_SENSITIVE(proxy->frame)){
switch(parent->info.proto){
case D_PROTO_FTP:{
proxy->apply_changes(parent->config,1);
break;
};
case D_PROTO_HTTP:{
proxy->apply_changes(parent->config,0);
break;
};
};
};
if (GTK_WIDGET_SENSITIVE(use_pass_check)){
char *pass_string=text_from_combo(pass_entry);
if (GTK_TOGGLE_BUTTON(use_pass_check)->active) {
if (strlen(text_from_combo(user_entry)) && strlen(pass_string)) {
parent->info.user=text_from_combo(user_entry);
ALL_HISTORIES[USER_HISTORY]->add(text_from_combo(user_entry));
parent->info.pass=pass_string;
if (CFG.REMEMBER_PASS)
ALL_HISTORIES[PASS_HISTORY]->add(pass_string);
};
};
};
if (GTK_WIDGET_SENSITIVE(path_entry)){
parent->config->save_path.set(text_from_combo(MY_GTK_FILESEL(path_entry)->combo));
normalize_path(parent->config->save_path.get());
ALL_HISTORIES[PATH_HISTORY]->add(text_from_combo(MY_GTK_FILESEL(path_entry)->combo));
};
if (GTK_WIDGET_SENSITIVE(user_agent_entry)){
parent->config->user_agent.set(text_from_combo(user_agent_entry));
ALL_HISTORIES[USER_AGENT_HISTORY]->add(text_from_combo(user_agent_entry));
};
if (GTK_WIDGET_SENSITIVE(referer_entry)){
char *referer=text_from_combo(referer_entry);
if (referer && *referer){
parent->config->referer.set(referer);
ALL_HISTORIES[REFERER_HISTORY]->add(referer);
}else
parent->config->referer.set(NULL);
};
if (GTK_WIDGET_SENSITIVE(cookie_entry)){
char *referer=text_from_combo(cookie_entry);
if (referer && *referer){
parent->config->cookie.set(referer);
ALL_HISTORIES[COOKIE_HISTORY]->add(referer);
}else
parent->config->cookie.set(NULL);
};
/*change data in list if available
*/
int temp1=0;
if (GTK_WIDGET_SENSITIVE(timeout_entry)){
sscanf(gtk_entry_get_text(GTK_ENTRY(timeout_entry)),"%u",&temp1);
if (temp1>0 && temp1<1000) parent->config->timeout=temp1;
};
if (GTK_WIDGET_SENSITIVE(sleep_entry)){
sscanf(gtk_entry_get_text(GTK_ENTRY(sleep_entry)),"%u",&temp1);
if (temp1>=0 && temp1<1000) parent->config->time_for_sleep=temp1;
};
if (GTK_WIDGET_SENSITIVE(attempts_entry)){
sscanf(gtk_entry_get_text(GTK_ENTRY(attempts_entry)),"%u",&temp1);
if (temp1>=0) parent->config->number_of_attempts=temp1;
};
if (GTK_WIDGET_SENSITIVE(ftp_recurse_depth_entry)){
temp1=1;
sscanf(gtk_entry_get_text(GTK_ENTRY(ftp_recurse_depth_entry)),"%u",&temp1);
if (temp1>=0) parent->config->ftp_recurse_depth=temp1;
};
if (GTK_WIDGET_SENSITIVE(http_recurse_depth_entry)){
temp1=1;
sscanf(gtk_entry_get_text(GTK_ENTRY(http_recurse_depth_entry)),"%u",&temp1);
if (temp1>=0) parent->config->http_recurse_depth=temp1;
};
if (GTK_WIDGET_SENSITIVE(rollback_entry)){
sscanf(gtk_entry_get_text(GTK_ENTRY(rollback_entry)),"%u",&temp1);
if (temp1>=0) parent->config->rollback=temp1;
};
if (GTK_WIDGET_SENSITIVE(speed_entry)){
sscanf(gtk_entry_get_text(GTK_ENTRY(speed_entry)),"%u",&temp1);
if (temp1>=0) parent->config->speed=temp1;
};
if (GTK_WIDGET_SENSITIVE(ftp_passive_check))
parent->config->passive=GTK_TOGGLE_BUTTON(ftp_passive_check)->active;
if (GTK_WIDGET_SENSITIVE(dont_send_quit_check))
parent->config->dont_send_quit=GTK_TOGGLE_BUTTON(dont_send_quit_check)->active;
if (GTK_WIDGET_SENSITIVE(permisions_check))
parent->config->permisions=GTK_TOGGLE_BUTTON(permisions_check)->active;
if (GTK_WIDGET_SENSITIVE(get_date_check))
parent->config->get_date=GTK_TOGGLE_BUTTON(get_date_check)->active;
if (GTK_WIDGET_SENSITIVE(retry_check))
parent->config->retry=GTK_TOGGLE_BUTTON(retry_check)->active;
if (GTK_WIDGET_SENSITIVE(follow_link_check)){
parent->config->follow_link=0;
if (GTK_TOGGLE_BUTTON(follow_link_check)->active)
parent->config->follow_link=1;
if (GTK_TOGGLE_BUTTON(link_as_file_check)->active)
parent->config->follow_link=2;
};
if (GTK_WIDGET_SENSITIVE(leave_server_check))
parent->config->leave_server=GTK_TOGGLE_BUTTON(leave_server_check)->active;
if (GTK_WIDGET_SENSITIVE(leave_dir_check))
parent->config->dont_leave_dir=GTK_TOGGLE_BUTTON(leave_dir_check)->active;
if (GTK_WIDGET_SENSITIVE(restart_from_begin_check))
parent->restart_from_begin=GTK_TOGGLE_BUTTON(restart_from_begin_check)->active;
if (GTK_WIDGET_SENSITIVE(sleep_check))
parent->config->sleep_before_complete=GTK_TOGGLE_BUTTON(sleep_check)->active;
if (GTK_WIDGET_SENSITIVE(check_time_check))
parent->config->check_time=GTK_TOGGLE_BUTTON(check_time_check)->active;
if (GTK_WIDGET_SENSITIVE(change_links_check))
parent->config->change_links=GTK_TOGGLE_BUTTON(change_links_check)->active;
if (GTK_WIDGET_SENSITIVE(ihate_etag_check))
parent->config->ihate_etag=GTK_TOGGLE_BUTTON(ihate_etag_check)->active;
if (GTK_WIDGET_SENSITIVE(quest_sign_check))
parent->config->quest_sign_replace=GTK_TOGGLE_BUTTON(quest_sign_check)->active;
if (GTK_WIDGET_SENSITIVE(ftp_dirontop_check))
parent->config->ftp_dirontop=GTK_TOGGLE_BUTTON(ftp_dirontop_check)->active;
parent->config->http_recursing=parent->config->http_recurse_depth==1?0:1;
if (GTK_WIDGET_SENSITIVE(split_entry)){
temp1=0;
sscanf(gtk_entry_get_text(GTK_ENTRY(split_entry)),"%u",&temp1);
parent->set_split_count(temp1);
};
if (GTK_WIDGET_SENSITIVE(time_check)){
if (GTK_TOGGLE_BUTTON(time_check)->active) {
time_t NOW=time(NULL);
struct tm date;
date.tm_isdst=-1;
localtime_r(&NOW,&date);
sscanf(text_from_combo(hour_entry),"%i",&date.tm_hour);
sscanf(text_from_combo(minute_entry),"%i",&date.tm_min);
gtk_calendar_get_date(GTK_CALENDAR(calendar),
(guint *)&date.tm_year,
(guint *)&date.tm_mon,
(guint *)&date.tm_mday);
date.tm_year-=1900;
date.tm_sec=0;
parent->ScheduleTime=mktime(&date);
if (time(NULL)<parent->ScheduleTime){
_aa_.schedule_download(parent);
parent_in_db=0;
};
} else {
parent->ScheduleTime=0;
};
};
};
void tDEdit::done() {
if (parent) parent->editor=NULL;
gtk_widget_destroy(window);
if (filter_sel)
gtk_widget_destroy(GTK_WIDGET(filter_sel));
filter_sel=NULL;
delete proxy;
};
tDEdit::~tDEdit() {
done();
};
/*******************************************************/
static void proxy_toggle_pass_ftp(GtkWidget *parent,tProxyWidget *where) {
set_editable_for_combo(where->ftp_proxy_pass,GTK_TOGGLE_BUTTON(parent)->active);
gtk_editable_set_editable(GTK_EDITABLE(GTK_BIN(where->ftp_proxy_user)->child),GTK_TOGGLE_BUTTON(parent)->active);
gtk_widget_set_sensitive(where->ftp_proxy_user,GTK_TOGGLE_BUTTON(parent)->active);
gtk_widget_set_sensitive(where->ftp_proxy_pass,GTK_TOGGLE_BUTTON(parent)->active);
};
static void proxy_toggle_pass_http(GtkWidget *parent,tProxyWidget *where) {
set_editable_for_combo(where->http_proxy_pass,GTK_TOGGLE_BUTTON(parent)->active);
gtk_editable_set_editable(GTK_EDITABLE(GTK_BIN(where->http_proxy_user)->child),GTK_TOGGLE_BUTTON(parent)->active);
gtk_widget_set_sensitive(where->http_proxy_user,GTK_TOGGLE_BUTTON(parent)->active);
gtk_widget_set_sensitive(where->http_proxy_pass,GTK_TOGGLE_BUTTON(parent)->active);
};
static void proxy_toggle_socks(GtkWidget *parent,tProxyWidget *where) {
set_editable_for_combo(where->socks_port,GTK_TOGGLE_BUTTON(parent)->active);
set_editable_for_combo(where->socks_user,GTK_TOGGLE_BUTTON(parent)->active);
set_editable_for_combo(where->socks_pass,GTK_TOGGLE_BUTTON(parent)->active);
gtk_editable_set_editable(GTK_EDITABLE(GTK_BIN(where->socks_host)->child),GTK_TOGGLE_BUTTON(parent)->active);
gtk_widget_set_sensitive(where->socks_user,GTK_TOGGLE_BUTTON(parent)->active);
gtk_widget_set_sensitive(where->socks_pass,GTK_TOGGLE_BUTTON(parent)->active);
gtk_widget_set_sensitive(where->socks_port,GTK_TOGGLE_BUTTON(parent)->active);
gtk_widget_set_sensitive(where->socks_host,GTK_TOGGLE_BUTTON(parent)->active);
};
static void _proxy_port_changed_(GtkEntry *entry,GtkEntry *entryh){
const char *tmp=gtk_entry_get_text(entryh);
char *tmp1=index(tmp,':');
if (tmp1){
*tmp1=0;
char *ns=sum_strings(tmp,":",gtk_entry_get_text(entry),NULL);
*tmp1=':';
if (!equal(ns,tmp))
gtk_entry_set_text(entryh,ns);
delete[] ns;
};
};
static void _ftp_host_changed_(GtkEntry *entry,tProxyWidget *parent){
const char *tmp=gtk_entry_get_text(entry);
tmp=index(tmp,':');
if (tmp){
int a=0;
if (sscanf(tmp+1,"%i",&a)==1){
char str[100];
sprintf(str,"%i",a);
gtk_entry_set_text(GTK_ENTRY(parent->ftp_proxy_port),str);
};
};
};
static void _http_host_changed_(GtkEntry *entry,tProxyWidget *parent){
const char *tmp=gtk_entry_get_text(entry);
tmp=index(tmp,':');
if (tmp){
int a=0;
if (sscanf(tmp+1,"%i",&a)==1){
char str[100];
sprintf(str,"%i",a);
gtk_entry_set_text(GTK_ENTRY(parent->http_proxy_port),str);
};
};
};
static void _socks_host_changed_(GtkEntry *entry,tProxyWidget *parent){
const char *tmp=gtk_entry_get_text(entry);
tmp=index(tmp,':');
if (tmp){
int a=0;
if (sscanf(tmp+1,"%i",&a)==1){
char str[100];
sprintf(str,"%i",a);
gtk_entry_set_text(GTK_ENTRY(parent->socks_port),str);
};
};
};
void tProxyWidget::init() {
// frame=gtk_frame_new(_("Proxy"));
GtkWidget *proxy_frame1=gtk_frame_new("FTP");
GtkWidget *proxy_frame2=gtk_frame_new("HTTP");
GtkWidget *proxy_frame3=gtk_frame_new(_("FTP proxy type"));
// gtk_container_set_border_width(GTK_CONTAINER(frame),5);
gtk_container_set_border_width(GTK_CONTAINER(proxy_frame1),5);
gtk_container_set_border_width(GTK_CONTAINER(proxy_frame2),5);
GtkWidget *vbox=gtk_vbox_new(FALSE,2);
GtkWidget *hbox=gtk_hbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox),vbox,FALSE,0,0);
GtkWidget *table=gtk_table_new(2,1,FALSE);
gtk_container_add(GTK_CONTAINER(proxy_frame3),table);
ftp_proxy_type_ftp=gtk_radio_button_new_with_label(NULL,_("FTP (wingate)"));
GSList *proxy_group1=gtk_radio_button_get_group(GTK_RADIO_BUTTON(ftp_proxy_type_ftp));
gtk_table_attach_defaults(GTK_TABLE(table),ftp_proxy_type_ftp,0,1,0,1);
ftp_proxy_type_http=gtk_radio_button_new_with_label(proxy_group1,"HTTP");
gtk_table_attach_defaults(GTK_TABLE(table),ftp_proxy_type_http,0,1,1,2);
GtkWidget *vbox1=gtk_vbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox1),proxy_frame3,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(hbox),vbox1,FALSE,0,0);
GtkWidget *box1=gtk_vbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox1),box1,FALSE,0,0);
gtk_container_add(GTK_CONTAINER(proxy_frame1),hbox);
ftp_proxy_check=gtk_check_button_new_with_label(_("Use this proxy for FTP"));
gtk_box_pack_start(GTK_BOX(vbox),ftp_proxy_check,FALSE,0,0);
ftp_proxy_host=my_gtk_combo_new(ALL_HISTORIES[PROXY_HISTORY]);
g_signal_connect (G_OBJECT (GTK_BIN(ftp_proxy_host)->child),
"changed",
G_CALLBACK(_ftp_host_changed_), this);
gtk_widget_set_size_request(ftp_proxy_host,120,-1);
gtk_box_pack_start(GTK_BOX(vbox),ftp_proxy_host,FALSE,0,0);
ftp_proxy_port=my_gtk_entry_new_with_max_length(5,0);
g_signal_connect(G_OBJECT (ftp_proxy_port),
"changed",
G_CALLBACK(_proxy_port_changed_),
GTK_BIN(ftp_proxy_host)->child);
GtkWidget *label=gtk_label_new(_("port"));
hbox=gtk_hbox_new(FALSE,3);
gtk_box_pack_start(GTK_BOX(hbox),ftp_proxy_port,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,0,0);
ftp_proxy_user_check=gtk_check_button_new_with_label(_("need password"));
g_signal_connect(G_OBJECT(ftp_proxy_user_check),"clicked",G_CALLBACK(proxy_toggle_pass_ftp),this);
gtk_box_pack_start(GTK_BOX(vbox),ftp_proxy_user_check,FALSE,0,0);
// ftp_proxy_user=gtk_entry_new();
ftp_proxy_user=my_gtk_combo_new(ALL_HISTORIES[USER_HISTORY]);
gtk_widget_set_size_request(ftp_proxy_user,100,-1);
label=gtk_label_new(_("username"));
hbox=gtk_hbox_new(FALSE,3);
gtk_box_pack_start(GTK_BOX(hbox),ftp_proxy_user,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,0,0);
if (CFG.REMEMBER_PASS)
ftp_proxy_pass=my_gtk_combo_new(ALL_HISTORIES[PASS_HISTORY]);
else{
ftp_proxy_pass=gtk_entry_new();
gtk_entry_set_visibility(GTK_ENTRY(ftp_proxy_pass),FALSE);
};
gtk_widget_set_size_request(ftp_proxy_pass,100,-1);
label=gtk_label_new(_("password"));
hbox=gtk_hbox_new(FALSE,3);
gtk_box_pack_start(GTK_BOX(hbox),ftp_proxy_pass,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,0,0);
hbox=gtk_hbox_new(FALSE,3);
gtk_box_pack_start(GTK_BOX(hbox),proxy_frame1,FALSE,0,0);
gtk_box_pack_end(GTK_BOX(hbox),proxy_frame2,FALSE,0,0);
GtkWidget *vbox_temp=gtk_vbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox_temp),hbox,FALSE,0,0);
// gtk_container_add(GTK_CONTAINER(frame),vbox_temp);
frame=vbox_temp;
no_cache=gtk_check_button_new_with_label(_("Don't get from cache"));
gtk_box_pack_start(GTK_BOX(vbox_temp),no_cache,FALSE,0,0);
vbox=gtk_vbox_new(FALSE,2);
gtk_container_add(GTK_CONTAINER(proxy_frame2),vbox);
http_proxy_check=gtk_check_button_new_with_label(_("Use this proxy for HTTP"));
gtk_box_pack_start(GTK_BOX(vbox),http_proxy_check,FALSE,0,0);
http_proxy_host=my_gtk_combo_new(ALL_HISTORIES[PROXY_HISTORY]);
g_signal_connect (G_OBJECT (GTK_BIN(http_proxy_host)->child),
"changed",
G_CALLBACK(_http_host_changed_), this);
gtk_widget_set_size_request(http_proxy_host,120,-1);
gtk_box_pack_start(GTK_BOX(vbox),http_proxy_host,FALSE,0,0);
http_proxy_port=my_gtk_entry_new_with_max_length(5,0);//gtk_entry_new();
g_signal_connect(G_OBJECT (http_proxy_port),
"changed",
G_CALLBACK(_proxy_port_changed_),
GTK_BIN(http_proxy_host)->child);
label=gtk_label_new(_("port"));
hbox=gtk_hbox_new(FALSE,3);
gtk_box_pack_start(GTK_BOX(hbox),http_proxy_port,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,0,0);
http_proxy_user_check=gtk_check_button_new_with_label(_("need password"));
g_signal_connect(G_OBJECT(http_proxy_user_check),"clicked",G_CALLBACK(proxy_toggle_pass_http),this);
gtk_box_pack_start(GTK_BOX(vbox),http_proxy_user_check,FALSE,0,0);
http_proxy_user=my_gtk_combo_new(ALL_HISTORIES[USER_HISTORY]);
gtk_widget_set_size_request(http_proxy_user,100,-1);
label=gtk_label_new(_("username"));
hbox=gtk_hbox_new(FALSE,3);
gtk_box_pack_start(GTK_BOX(hbox),http_proxy_user,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,0,0);
if (CFG.REMEMBER_PASS)
http_proxy_pass=my_gtk_combo_new(ALL_HISTORIES[PASS_HISTORY]);
else{
http_proxy_pass=gtk_entry_new();
gtk_entry_set_visibility(GTK_ENTRY(http_proxy_pass),FALSE);
};
gtk_widget_set_size_request(http_proxy_pass,100,-1);
label=gtk_label_new(_("password"));
hbox=gtk_hbox_new(FALSE,3);
gtk_box_pack_start(GTK_BOX(hbox),http_proxy_pass,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,0,0);
/* SOCKS settings */
use_socks=gtk_check_button_new_with_label(_("Use SOCKS5 proxy"));
g_signal_connect(G_OBJECT(use_socks),"clicked",
G_CALLBACK(proxy_toggle_socks),this);
gtk_box_pack_start(GTK_BOX(vbox_temp),use_socks,FALSE,0,0);
hbox=gtk_hbox_new(FALSE,5);
label=gtk_label_new(_("host"));
socks_host=my_gtk_combo_new(ALL_HISTORIES[PROXY_HISTORY]);
g_signal_connect(G_OBJECT (GTK_BIN(socks_host)->child),
"changed",
G_CALLBACK(_socks_host_changed_), this);
gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(hbox),socks_host,FALSE,0,0);
label=gtk_label_new(_("port"));
socks_port=my_gtk_entry_new_with_max_length(5,0);
g_signal_connect (G_OBJECT (socks_port),
"changed",
G_CALLBACK(_proxy_port_changed_),
GTK_BIN(socks_host)->child);
gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(hbox),socks_port,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(vbox_temp),hbox,FALSE,0,0);
hbox=gtk_hbox_new(FALSE,5);
label=gtk_label_new(_("username"));
socks_user=gtk_entry_new();
gtk_box_pack_start(GTK_BOX(hbox),socks_user,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(vbox_temp),hbox,FALSE,0,0);
hbox=gtk_hbox_new(FALSE,5);
label=gtk_label_new(_("password"));
socks_pass=gtk_entry_new();
gtk_box_pack_start(GTK_BOX(hbox),socks_pass,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,0,0);
gtk_box_pack_start(GTK_BOX(vbox_temp),hbox,FALSE,0,0);
gtk_entry_set_visibility(GTK_ENTRY(socks_pass),FALSE);
};
void tProxyWidget::init_state(tMainCfg *cfg){
GTK_TOGGLE_BUTTON(ftp_proxy_check)->active=cfg->USE_PROXY_FOR_FTP;
GTK_TOGGLE_BUTTON(ftp_proxy_user_check)->active=cfg->NEED_PASS_FTP_PROXY;
if (cfg->FTP_PROXY_USER)
text_to_combo(ftp_proxy_user,cfg->FTP_PROXY_USER);
if (cfg->FTP_PROXY_PORT) {
char data[MAX_LEN];
sprintf(data,"%i",cfg->FTP_PROXY_PORT);
gtk_entry_set_text(GTK_ENTRY(ftp_proxy_port),data);
};
if (cfg->FTP_PROXY_HOST)
text_to_combo(ftp_proxy_host,cfg->FTP_PROXY_HOST);
if (cfg->FTP_PROXY_PASS)
text_to_combo(ftp_proxy_pass,cfg->FTP_PROXY_PASS);
else
text_to_combo(ftp_proxy_pass,"");
GTK_TOGGLE_BUTTON(http_proxy_user_check)->active=cfg->NEED_PASS_HTTP_PROXY;
GTK_TOGGLE_BUTTON(http_proxy_check)->active=cfg->USE_PROXY_FOR_HTTP;
if (cfg->HTTP_PROXY_HOST)
text_to_combo(http_proxy_host,cfg->HTTP_PROXY_HOST);
if (cfg->HTTP_PROXY_PORT) {
char data[MAX_LEN];
sprintf(data,"%i",cfg->HTTP_PROXY_PORT);
gtk_entry_set_text(GTK_ENTRY(http_proxy_port),data);
};
if (cfg->HTTP_PROXY_USER)
text_to_combo(http_proxy_user,cfg->HTTP_PROXY_USER);
if (cfg->HTTP_PROXY_PASS)
text_to_combo(http_proxy_pass,cfg->HTTP_PROXY_PASS);
proxy_toggle_pass_ftp(ftp_proxy_user_check,this);
proxy_toggle_pass_http(http_proxy_user_check,this);
if (cfg->FTP_PROXY_TYPE) {
GTK_TOGGLE_BUTTON(ftp_proxy_type_ftp)->active=FALSE;
GTK_TOGGLE_BUTTON(ftp_proxy_type_http)->active=TRUE;
} else {
GTK_TOGGLE_BUTTON(ftp_proxy_type_ftp)->active=TRUE;
GTK_TOGGLE_BUTTON(ftp_proxy_type_http)->active=FALSE;
};
GTK_TOGGLE_BUTTON(no_cache)->active=cfg->PROXY_NO_CACHE;
if (cfg->SOCKS_HOST){
GTK_TOGGLE_BUTTON(use_socks)->active=TRUE;
text_to_combo(socks_host,cfg->SOCKS_HOST);
}else{
text_to_combo(socks_host,"");
GTK_TOGGLE_BUTTON(use_socks)->active=FALSE;
};
proxy_toggle_socks(use_socks,this);
if (cfg->SOCKS_USER)
text_to_combo(socks_user,cfg->SOCKS_USER);
else
text_to_combo(socks_user,"");
if (cfg->SOCKS_PASS)
text_to_combo(socks_pass,cfg->SOCKS_PASS);
else
text_to_combo(socks_pass,"");
if (cfg->SOCKS_PORT){
char data[MAX_LEN];
sprintf(data,"%i",cfg->SOCKS_PORT);
text_to_combo(socks_port,data);
};
};
void tProxyWidget::init_state() {
init_state(&CFG);
};
void tProxyWidget::init_state(tCfg *cfg,int proto) {
if (cfg->proxy.ftp_host.get()) {
text_to_combo(ftp_proxy_host,cfg->proxy.ftp_host.get());
GTK_TOGGLE_BUTTON(ftp_proxy_check)->active=TRUE;
if (cfg->proxy.ftp_port) {
char data[MAX_LEN];
sprintf(data,"%i",cfg->proxy.ftp_port);
gtk_entry_set_text(GTK_ENTRY(ftp_proxy_port),data);
};
if (cfg->proxy.ftp_user.get() && cfg->proxy.ftp_pass.get()) {
GTK_TOGGLE_BUTTON(ftp_proxy_user_check)->active=TRUE;
text_to_combo(ftp_proxy_user,cfg->proxy.ftp_user.get());
text_to_combo(ftp_proxy_pass,cfg->proxy.ftp_pass.get());
}else
GTK_TOGGLE_BUTTON(ftp_proxy_user_check)->active=FALSE;
} else
GTK_TOGGLE_BUTTON(ftp_proxy_check)->active=FALSE;
proxy_toggle_pass_ftp(ftp_proxy_user_check,this);
if (cfg->proxy.http_host.get()) {
text_to_combo(http_proxy_host,cfg->proxy.http_host.get());
GTK_TOGGLE_BUTTON(http_proxy_check)->active=TRUE;
if (cfg->proxy.http_port) {
char data[MAX_LEN];
sprintf(data,"%i",cfg->proxy.http_port);
gtk_entry_set_text(GTK_ENTRY(http_proxy_port),data);
};
if (cfg->proxy.http_user.get() && cfg->proxy.http_pass.get()) {
GTK_TOGGLE_BUTTON(http_proxy_user_check)->active=TRUE;
text_to_combo(http_proxy_user,cfg->proxy.http_user.get());
text_to_combo(http_proxy_pass,cfg->proxy.http_pass.get());
}else
GTK_TOGGLE_BUTTON(http_proxy_user_check)->active=FALSE;
} else{
GTK_TOGGLE_BUTTON(http_proxy_check)->active=FALSE;
};
proxy_toggle_pass_http(http_proxy_user_check,this);
if (cfg->proxy.type) {
GTK_TOGGLE_BUTTON(ftp_proxy_type_ftp)->active=FALSE;
GTK_TOGGLE_BUTTON(ftp_proxy_type_http)->active=TRUE;
} else {
GTK_TOGGLE_BUTTON(ftp_proxy_type_ftp)->active=TRUE;
GTK_TOGGLE_BUTTON(ftp_proxy_type_http)->active=FALSE;
};
GTK_TOGGLE_BUTTON(no_cache)->active=cfg->proxy.no_cache;
if (cfg->socks_host.get()){
GTK_TOGGLE_BUTTON(use_socks)->active=TRUE;
text_to_combo(socks_host,cfg->socks_host.get());
}else{
text_to_combo(socks_host,"");
GTK_TOGGLE_BUTTON(use_socks)->active=FALSE;
};
proxy_toggle_socks(use_socks,this);
if (cfg->socks_user.get())
text_to_combo(socks_user,cfg->socks_user.get());
else
text_to_combo(socks_user,"");
if (cfg->socks_pass.get())
text_to_combo(socks_pass,cfg->socks_pass.get());
else
text_to_combo(socks_pass,"");
if (cfg->socks_port){
char data[MAX_LEN];
sprintf(data,"%i",cfg->socks_port);
text_to_combo(socks_port,data);
};
};
void tProxyWidget::apply_changes(tMainCfg *cfg) {
cfg->NEED_PASS_FTP_PROXY=GTK_TOGGLE_BUTTON(ftp_proxy_user_check)->active;
cfg->NEED_PASS_HTTP_PROXY=GTK_TOGGLE_BUTTON(http_proxy_user_check)->active;
cfg->USE_PROXY_FOR_FTP=GTK_TOGGLE_BUTTON(ftp_proxy_check)->active;
cfg->USE_PROXY_FOR_HTTP=GTK_TOGGLE_BUTTON(http_proxy_check)->active;
if (cfg->FTP_PROXY_HOST) delete[] cfg->FTP_PROXY_HOST;
cfg->FTP_PROXY_HOST=copy_string(text_from_combo(ftp_proxy_host));
sscanf(gtk_entry_get_text(GTK_ENTRY(ftp_proxy_port)),"%i",&cfg->FTP_PROXY_PORT);
if (cfg->FTP_PROXY_USER) delete[] cfg->FTP_PROXY_USER;
cfg->FTP_PROXY_USER=copy_string(text_from_combo(ftp_proxy_user));
if (cfg->FTP_PROXY_PASS) delete[] cfg->FTP_PROXY_PASS;
cfg->FTP_PROXY_PASS=copy_string(text_from_combo(ftp_proxy_pass));
if (cfg->HTTP_PROXY_HOST) delete[] cfg->HTTP_PROXY_HOST;
cfg->HTTP_PROXY_HOST=copy_string(text_from_combo(http_proxy_host));
sscanf(gtk_entry_get_text(GTK_ENTRY(http_proxy_port)),"%i",&cfg->HTTP_PROXY_PORT);
if (cfg->HTTP_PROXY_USER) delete[] cfg->HTTP_PROXY_USER;
cfg->HTTP_PROXY_USER=copy_string(text_from_combo(http_proxy_user));
if (cfg->HTTP_PROXY_PASS) delete[] cfg->HTTP_PROXY_PASS;
cfg->HTTP_PROXY_PASS=copy_string(text_from_combo(http_proxy_pass));
if (strlen(cfg->HTTP_PROXY_USER)) ALL_HISTORIES[USER_HISTORY]->add(cfg->HTTP_PROXY_USER);
if (strlen(cfg->FTP_PROXY_USER)) ALL_HISTORIES[USER_HISTORY]->add(cfg->FTP_PROXY_USER);
if (GTK_TOGGLE_BUTTON(ftp_proxy_type_ftp)->active) {
cfg->FTP_PROXY_TYPE=0;
} else
cfg->FTP_PROXY_TYPE=1;
if (strlen(text_from_combo(ftp_proxy_host))){
make_proxy_host(text_from_combo(ftp_proxy_host),
cfg->FTP_PROXY_PORT);
};
if (strlen(text_from_combo(http_proxy_host))){
make_proxy_host(text_from_combo(http_proxy_host),
cfg->HTTP_PROXY_PORT);
};
if (cfg->REMEMBER_PASS){
if (cfg->HTTP_PROXY_PASS && strlen(cfg->HTTP_PROXY_PASS))
ALL_HISTORIES[PASS_HISTORY]->add(cfg->HTTP_PROXY_PASS);
if (cfg->FTP_PROXY_PASS && strlen(cfg->FTP_PROXY_PASS))
ALL_HISTORIES[PASS_HISTORY]->add(cfg->FTP_PROXY_PASS);
};
cfg->PROXY_NO_CACHE=GTK_TOGGLE_BUTTON(no_cache)->active;
if (GTK_TOGGLE_BUTTON(use_socks)->active){
if (cfg->SOCKS_HOST) delete[] cfg->SOCKS_HOST;
if (cfg->SOCKS_PASS) delete[] cfg->SOCKS_PASS;
if (cfg->SOCKS_USER) delete[] cfg->SOCKS_USER;
sscanf(text_from_combo(socks_port),"%i",&(cfg->SOCKS_PORT));
char *tmp=text_from_combo(socks_host);
if (tmp && *tmp){
make_proxy_host(tmp,
cfg->SOCKS_PORT);
cfg->SOCKS_HOST=copy_string(tmp);
}else{
cfg->SOCKS_HOST=NULL;
};
tmp=text_from_combo(socks_pass);
if (tmp && *tmp)
cfg->SOCKS_PASS=copy_string(tmp);
else
cfg->SOCKS_PASS=NULL;
tmp=text_from_combo(socks_user);
if (tmp && *tmp)
cfg->SOCKS_USER=copy_string(tmp);
else
cfg->SOCKS_USER=NULL;
}else{
if (cfg->SOCKS_HOST) delete[] cfg->SOCKS_HOST;
if (cfg->SOCKS_PASS) delete[] cfg->SOCKS_PASS;
if (cfg->SOCKS_USER) delete[] cfg->SOCKS_USER;
cfg->SOCKS_HOST=NULL;
cfg->SOCKS_USER=NULL;
cfg->SOCKS_PASS=NULL;
};
/* remove ':' from proxies hosts */
REMOVE_SC_FROM_HOST(cfg->SOCKS_HOST);
REMOVE_SC_FROM_HOST(cfg->HTTP_PROXY_HOST);
REMOVE_SC_FROM_HOST(cfg->FTP_PROXY_HOST);
};
void tProxyWidget::apply_changes() {
apply_changes(&CFG);
};
void tProxyWidget::apply_changes(tCfg *cfg,int proto) {
cfg->reset_proxy();
if (GTK_TOGGLE_BUTTON(ftp_proxy_check)->active) {
cfg->proxy.ftp_host.set(text_from_combo(ftp_proxy_host));
sscanf(gtk_entry_get_text(GTK_ENTRY(ftp_proxy_port)),"%i",&(cfg->proxy.ftp_port));
make_proxy_host(text_from_combo(ftp_proxy_host),
cfg->proxy.ftp_port);
if (GTK_TOGGLE_BUTTON(ftp_proxy_user_check)->active) {
cfg->proxy.ftp_user.set(text_from_combo(ftp_proxy_user));
cfg->proxy.ftp_pass.set(text_from_combo(ftp_proxy_pass));
};
};
if (GTK_TOGGLE_BUTTON(http_proxy_check)->active) {
cfg->proxy.http_host.set(text_from_combo(http_proxy_host));
sscanf(gtk_entry_get_text(GTK_ENTRY(http_proxy_port)),"%i",&(cfg->proxy.http_port));
make_proxy_host(text_from_combo(http_proxy_host),
cfg->proxy.http_port);
if (GTK_TOGGLE_BUTTON(http_proxy_user_check)->active) {
cfg->proxy.http_user.set(text_from_combo(http_proxy_user));
cfg->proxy.http_pass.set(text_from_combo(http_proxy_pass));
};
};
if (strlen(text_from_combo(ftp_proxy_user)))
ALL_HISTORIES[USER_HISTORY]->add(text_from_combo(ftp_proxy_user));
if (strlen(text_from_combo(http_proxy_user)))
ALL_HISTORIES[USER_HISTORY]->add(text_from_combo(http_proxy_user));
if (GTK_TOGGLE_BUTTON(ftp_proxy_type_ftp)->active)
cfg->proxy.type=0;
else
cfg->proxy.type=1;
cfg->proxy.no_cache=GTK_TOGGLE_BUTTON(no_cache)->active;
if (GTK_TOGGLE_BUTTON(use_socks)->active){
char *tmp=text_from_combo(socks_host);
if (tmp && *tmp){
ALL_HISTORIES[PROXY_HISTORY]->add(tmp);
cfg->socks_host.set(tmp);
}else{
cfg->socks_host.set(NULL);
};
tmp=text_from_combo(socks_pass);
if (tmp && *tmp)
cfg->socks_pass.set(tmp);
else
cfg->socks_pass.set(NULL);
tmp=text_from_combo(socks_user);
if (tmp && *tmp)
cfg->socks_user.set(tmp);
else
cfg->socks_user.set(NULL);
sscanf(text_from_combo(socks_port),"%i",&(cfg->socks_port));
}else{
cfg->socks_user.set(NULL);
cfg->socks_pass.set(NULL);
cfg->socks_host.set(NULL);
};
REMOVE_SC_FROM_HOST(cfg->socks_host.get());
REMOVE_SC_FROM_HOST(cfg->proxy.ftp_host.get());
REMOVE_SC_FROM_HOST(cfg->proxy.http_host.get());
};
/*****************************************************************/
GtkWidget *select_options_window = (GtkWidget *)NULL;
gint select_options_window_hide(GtkWidget *window,GdkEvent *event, gpointer data){
if (select_options_window){
gtk_window_set_modal (GTK_WINDOW(select_options_window),FALSE);
// gtk_window_set_transient_for (GTK_WINDOW (select_options_window), GTK_WINDOW (NULL));
gtk_widget_hide(select_options_window);
};
return TRUE;
};
static void _foreach_options_(GtkTreeModel *model,GtkTreePath *path,
GtkTreeIter *iter,gpointer p){
GValue val={0,};
gtk_tree_model_get_value(model,iter,1,&val);
int a=g_value_get_int(&val);
gint *b=(gint *)p;
b[a]=1;
g_value_unset(&val);
};
void select_options_window_ok(GtkWidget *button,GtkWidget *window){
if (window){
GtkTreeView *view=GTK_TREE_VIEW(g_object_get_data(G_OBJECT(window),"d4x_user_data"));
if (view){
GtkTreeSelection *sel=gtk_tree_view_get_selection(view);
gint table[EDIT_OPT_LASTOPTION];
for (int i=0;i<EDIT_OPT_LASTOPTION;i++)
table[i]=0;
gtk_tree_selection_selected_foreach(sel,
_foreach_options_,
table);
int yes=0;
for (int i=0;i<EDIT_OPT_LASTOPTION;i++)
if (table[i]){ yes=1; break;}
select_options_window_hide(window,NULL,NULL);
if (yes)
init_edit_common_properties_window(table);
return;
};
};
select_options_window_hide(window,NULL,NULL);
};
void select_options_window_unselect_all(GtkWidget *button,GtkWidget *view){
GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
gtk_tree_selection_unselect_all(sel);
};
void select_options_window_select_all(GtkWidget *button,GtkWidget *view){
GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
gtk_tree_selection_select_all(sel);
};
void select_options_window_init(){
if (select_options_window){
select_options_window_unselect_all(NULL,
GTK_WIDGET(g_object_get_data(G_OBJECT(select_options_window),"d4x_user_data")));
gtk_widget_show(select_options_window);
}else{
select_options_window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_wmclass(GTK_WINDOW(select_options_window),
"D4X_CommonProp","D4X");
gtk_window_set_title(GTK_WINDOW (select_options_window),_("Select properties"));
gtk_container_set_border_width(GTK_CONTAINER(select_options_window),5);
gtk_window_set_position(GTK_WINDOW(select_options_window),GTK_WIN_POS_CENTER);
gtk_window_set_resizable(GTK_WINDOW(select_options_window), FALSE);
gtk_widget_set_size_request(select_options_window,-1,400);
g_signal_connect(G_OBJECT(select_options_window),
"delete_event",
G_CALLBACK(select_options_window_hide), NULL);
d4x_eschandler_init(select_options_window,NULL);
GtkListStore *list_store = gtk_list_store_new(2,
G_TYPE_STRING,
G_TYPE_INT);
GtkTreeView *view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store)));
gtk_tree_view_set_headers_visible(view,FALSE);
GtkCellRenderer *renderer;
GtkTreeViewColumn *col;
renderer = gtk_cell_renderer_text_new();
col=gtk_tree_view_column_new_with_attributes("Title",
renderer,
"text",0,
NULL);
gtk_tree_view_column_set_visible(col,TRUE);
gtk_tree_view_append_column(view,col);
for (int i=EDIT_OPT_USERPASS;i<EDIT_OPT_LASTOPTION;i++){
GtkTreeIter iter;
gtk_list_store_append(list_store, &iter);
gtk_list_store_set(list_store, &iter,
0,_(edit_fields_labels[i]),
1,i,
-1);
};
GtkTreeSelection *sel=gtk_tree_view_get_selection(view);
gtk_tree_selection_set_mode(sel,GTK_SELECTION_MULTIPLE);
gtk_tree_selection_unselect_all(sel);
g_object_set_data(G_OBJECT(select_options_window),"d4x_user_data",view);
GtkWidget *button_ok=gtk_button_new_from_stock(GTK_STOCK_OK);
GTK_WIDGET_SET_FLAGS(button_ok,GTK_CAN_DEFAULT);
g_signal_connect(G_OBJECT(button_ok),
"clicked",
G_CALLBACK(select_options_window_ok),
select_options_window);
GtkWidget *button_clear=gtk_button_new_with_label(_("Unselect all"));
GTK_WIDGET_SET_FLAGS(button_clear,GTK_CAN_DEFAULT);
g_signal_connect(G_OBJECT(button_clear),
"clicked",
G_CALLBACK(select_options_window_unselect_all),
view);
GtkWidget *button_all=gtk_button_new_with_label(_("Select all"));
GTK_WIDGET_SET_FLAGS(button_all,GTK_CAN_DEFAULT);
g_signal_connect(G_OBJECT(button_all),
"clicked",
G_CALLBACK(select_options_window_select_all),
view);
GtkWidget *hbox=gtk_hbutton_box_new();
gtk_box_set_spacing(GTK_BOX(hbox),5);
gtk_box_pack_start(GTK_BOX(hbox),button_all,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox),button_clear,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox),button_ok,FALSE,FALSE,0);
GtkWidget *vbox=gtk_vbox_new(FALSE,5);
GtkWidget *scroll_window=gtk_scrolled_window_new((GtkAdjustment *)NULL,(GtkAdjustment *)NULL);
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (scroll_window),
GTK_SHADOW_IN);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_window),
GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
gtk_container_add(GTK_CONTAINER(scroll_window),GTK_WIDGET(view));
gtk_box_pack_start(GTK_BOX(vbox),scroll_window,TRUE,TRUE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
gtk_container_add(GTK_CONTAINER(select_options_window),vbox);
gtk_window_set_default(GTK_WINDOW(select_options_window),button_ok);
gtk_widget_show_all(select_options_window);
gtk_window_set_transient_for (GTK_WINDOW (select_options_window), GTK_WINDOW (MainWindow));
};
gtk_window_set_modal (GTK_WINDOW(select_options_window),TRUE);
};
syntax highlighted by Code2HTML, v. 0.9.1