📄 popinterface.cpp
字号:
/**********************************************
** 文件名: PopInterface.cpp
** 建立日期: 2002年8月1日
** 作者: 何林强
** 描述: 这里集中了界面元素中的弹出菜单,
** 弹出对话框等。
***********************************************/
#include "stdglo.h"
/******************************************类Chftp_login_dialog****************************************************/
GtkWidget *Chftp_login_dialog::dialogwindow;
Chftp_login_dialog::Chftp_login_dialog(){
GtkWidget *packingtable=NULL,*scrollwindow=NULL;
dialogwindow=gtk_window_new(GTK_WINDOW_DIALOG);
gtk_window_set_title(GTK_WINDOW(dialogwindow),"登录成功!");
gtk_container_set_border_width(GTK_CONTAINER(dialogwindow),10);
gtk_window_set_default_size(GTK_WINDOW(dialogwindow),600,200);
gtk_window_set_position(GTK_WINDOW(dialogwindow),GTK_WIN_POS_CENTER);
packingtable=gtk_table_new(20,10,TRUE);
gtk_container_add(GTK_CONTAINER(dialogwindow),packingtable);
GtkObject *mess_vadj=GTK_OBJECT(gtk_adjustment_new(10000,1,10000,1,200,200));
scrollwindow=gtk_scrolled_window_new(NULL,GTK_ADJUSTMENT(mess_vadj));
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwindow),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
gtk_table_attach_defaults(GTK_TABLE(packingtable),scrollwindow,0,10,0,18);
list=gtk_list_new();
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollwindow),list);
button=gtk_button_new_with_label("确定");
gtk_table_attach_defaults(GTK_TABLE(packingtable),button,8,9,19,20);
gtk_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(Shutup),(gpointer)this);
gtk_window_set_modal(GTK_WINDOW(dialogwindow),TRUE);
gtk_widget_show_all(dialogwindow);
}
void Chftp_login_dialog::Shutup(GtkButton *button,gpointer data){
gtk_widget_destroy(((Chftp_login_dialog *)data)->list);
gtk_widget_destroy(((Chftp_login_dialog *)data)->button);
gtk_widget_destroy(GTK_WIDGET(dialogwindow));
}
void Chftp_login_dialog::hftp_AddStringToList(gchar *textstring){
GtkWidget *listitem;
listitem=gtk_list_item_new_with_label(textstring);
gtk_container_add(GTK_CONTAINER(list),listitem);
gtk_widget_show(listitem);
}
/***************************类Chftp_conflict_dialog部分****************************************/
Chftp_conflict_dialog::Chftp_conflict_dialog(gpointer object){
Theobject=object;
dialog=gnome_dialog_new("存在同名文件,请选择相应操作:","续传","覆盖","改名","跳过",NULL);
gtk_widget_show(dialog);
gnome_dialog_button_connect(GNOME_DIALOG(dialog),0,GTK_SIGNAL_FUNC(resume),object);
gnome_dialog_button_connect(GNOME_DIALOG(dialog),1,GTK_SIGNAL_FUNC(overwrite),object);
gnome_dialog_button_connect(GNOME_DIALOG(dialog),2,GTK_SIGNAL_FUNC(rename),object);
gnome_dialog_button_connect(GNOME_DIALOG(dialog),3,GTK_SIGNAL_FUNC(skip),object);
gtk_signal_connect(GTK_OBJECT(dialog),"destroy",GTK_SIGNAL_FUNC(skip),object);
}
Chftp_conflict_dialog::~Chftp_conflict_dialog(){
if(((Chftp_transfer *)Theobject)->Rfc959->downnow==1){
if(((Chftp_transfer *)Theobject)->filename_text)
delete ((Chftp_transfer *)Theobject)->filename_text;
}
}
void Chftp_conflict_dialog::resume(GtkButton *button,gpointer data){
((Chftp_transfer *)data)->progress=((Chftp_transfer *)data)->donesize; //要续传,则记录下已有进度.
((Chftp_transfer *)data)->create_transfer(((Chftp_transfer *)data)->filename_text,
((Chftp_transfer *)data)->fulldir,
((Chftp_transfer *)data)->donesize);
gtk_widget_destroy(((Chftp_transfer *)data)->conflict->dialog);
}
void Chftp_conflict_dialog::overwrite(GtkButton *button,gpointer data){
((Chftp_transfer *)data)->progress=0; //要覆盖则进度清零.
((Chftp_transfer *)data)->donesize=0;
((Chftp_transfer *)data)->create_transfer
(((Chftp_transfer *)data)->filename_text,((Chftp_transfer *)data)->fulldir,0);
gtk_widget_destroy(((Chftp_transfer *)data)->conflict->dialog);
}
void Chftp_conflict_dialog::rename(GtkButton *button,gpointer data){
((Chftp_transfer *)data)->progress=0;
((Chftp_transfer *)data)->donesize=0;
gtk_widget_hide(((Chftp_transfer *)data)->conflict->dialog);
((Chftp_transfer *)data)->conflict->rename_dialog(data);
}
void Chftp_conflict_dialog::skip(GtkButton *button,gpointer data){
if(-1==((Chftp_transfer *)data)->mutitrans)
((Chftp_transfer *)data)->mutex=1;
else
((Chftp_transfer *)data)->mutitrans=1;
gtk_widget_destroy(((Chftp_transfer *)data)->conflict->dialog);
}
void Chftp_conflict_dialog::rename_dialog(gpointer data){
GtkWidget *entrybox;
renamedialog=gtk_window_new(GTK_WINDOW_DIALOG);
gtk_window_set_title(GTK_WINDOW(renamedialog),"文件改名:");
gtk_container_set_border_width(GTK_CONTAINER(renamedialog),10);
gtk_window_set_position(GTK_WINDOW(renamedialog),GTK_WIN_POS_CENTER);
entrybox=gtk_entry_new();
gtk_container_add(GTK_CONTAINER(renamedialog),entrybox);
gtk_signal_connect(GTK_OBJECT(entrybox),"activate",GTK_SIGNAL_FUNC(GetNewName),(gpointer)data);
gtk_signal_connect(GTK_OBJECT(renamedialog),"destroy",GTK_SIGNAL_FUNC(closedialog),data);
gtk_window_set_modal(GTK_WINDOW(renamedialog),TRUE);
gtk_widget_show_all(renamedialog);
}
void Chftp_conflict_dialog::closedialog(GtkWidget *widget,gpointer data){
if(-1==((Chftp_transfer *)data)->mutitrans)
((Chftp_transfer *)data)->mutex=1;
else
((Chftp_transfer *)data)->mutitrans=1;
gtk_widget_destroy(GTK_WIDGET(((Chftp_transfer *)data)->conflict->renamedialog));
gtk_widget_destroy(((Chftp_transfer *)data)->conflict->dialog);
}
void Chftp_conflict_dialog::GetNewName(GtkEntry *entry,gpointer data){
gchar filename[300];
strcpy(filename,((Chftp_transfer *)data)->Localdata->hftp_GetCurrent_dir());
strcat(filename, "/");
strcat(filename,gtk_entry_get_text(entry));
((Chftp_transfer *)data)->create_transfer(((Chftp_transfer *)data)->filename_text,filename,0);
gtk_widget_destroy(GTK_WIDGET(((Chftp_transfer *)data)->conflict->renamedialog));
gtk_widget_destroy(((Chftp_transfer *)data)->conflict->dialog);
}
/**************************************************类Chftp_Remote_menu_1部分********************/
Chftp_Remote_menu_1::Chftp_Remote_menu_1(gpointer data){
menu=NULL;
TheObject=data;
menu=gtk_menu_new();
gtk_widget_show(menu);
Builder_MenuItem("--------",NULL,menu,data);
Builder_MenuItem("刷新",GTK_SIGNAL_FUNC(hftp_refresh),menu,data);
Builder_MenuItem("新建目录",GTK_SIGNAL_FUNC(hftp_mkdir),menu,(gpointer)this);
gtk_menu_popup(GTK_MENU(menu),NULL,NULL,NULL,NULL,3,0);
}
void Chftp_Remote_menu_1::Builder_MenuItem(
gchar *menutext,
GtkSignalFunc signalhandler,
GtkWidget *menu,gpointer data){
GtkWidget *menuitem;
menuitem=gtk_menu_item_new_with_label(menutext);
if(signalhandler)
gtk_signal_connect(GTK_OBJECT(menuitem),"activate",signalhandler,data);
if(menu)
gtk_menu_append(GTK_MENU(menu),menuitem);
gtk_widget_show(menuitem);
}
void Chftp_Remote_menu_1::hftp_refresh(GtkWidget *TheWindow,gpointer data){
if(-2!=((Chftp_transfer *)data)->Rfc959->rfc959_chdir()){
if(-2!=(((Chftp_transfer *)data)->Rfc959->rfc959_list_files()))
((Chftp_transfer *)data)->hftp_read_files(NULL,0);
}
return;
}
void Chftp_Remote_menu_1::hftp_mkdir(GtkWidget *TheWindow,gpointer data){
((Chftp_Remote_menu_1 *)data)->showdialog("新建目录:",GTK_SIGNAL_FUNC(GetNewdir));
}
void Chftp_Remote_menu_1::showdialog(const gchar *title,GtkSignalFunc signalhandler){
GtkWidget *entrybox;
mkdirdialog=gtk_window_new(GTK_WINDOW_DIALOG);
gtk_window_set_title(GTK_WINDOW(mkdirdialog),title);
gtk_container_set_border_width(GTK_CONTAINER(mkdirdialog),10);
gtk_window_set_position(GTK_WINDOW(mkdirdialog),GTK_WIN_POS_CENTER);
entrybox=gtk_entry_new();
gtk_container_add(GTK_CONTAINER(mkdirdialog),entrybox);
gtk_signal_connect(GTK_OBJECT(entrybox),"activate",signalhandler,TheObject);
gtk_window_set_modal(GTK_WINDOW(mkdirdialog),TRUE);
gtk_widget_show_all(mkdirdialog);
}
void Chftp_Remote_menu_1::GetNewdir(GtkEntry *entry,gpointer data){
gchar filename[300];
strcpy(filename,gtk_entry_get_text(entry));
((Chftp_transfer *)data)->Rfc959->rfc959_mkdir(filename);
if(-2!=((Chftp_transfer *)data)->Rfc959->rfc959_chdir()){
if(-2!=(((Chftp_transfer *)data)->Rfc959->rfc959_list_files()))
((Chftp_transfer *)data)->hftp_read_files(NULL,0);
}
if(((Chftp_transfer *)data)->Remote_pop_menu_1)
gtk_widget_destroy(GTK_WIDGET(((Chftp_transfer *)data)->Remote_pop_menu_1->mkdirdialog));
else if(((Chftp_transfer *)data)->Remote_pop_menu_2)
gtk_widget_destroy(GTK_WIDGET(((Chftp_transfer *)data)->Remote_pop_menu_2->mkdirdialog));
}
/*******************************类Chftp_Remote_menu_2部分**************************************/
Chftp_Remote_menu_2::Chftp_Remote_menu_2(gpointer data,gchar *filetype)
:Chftp_Remote_menu_1(data){
strcpy(thetype,filetype);
Builder_MenuItem("改名",GTK_SIGNAL_FUNC(hftp_rename),menu,data);
Builder_MenuItem("下载",GTK_SIGNAL_FUNC(hftp_download),menu,data);
Builder_MenuItem("删除",GTK_SIGNAL_FUNC(hftp_delete),menu,data);
gtk_menu_popup(GTK_MENU(menu),NULL,NULL,NULL,NULL,3,0);
}
void Chftp_Remote_menu_2::hftp_rename(GtkWidget *TheWindow,gpointer data){
((Chftp_transfer *)data)->Remote_pop_menu_2->showdialog("文件改名:",GTK_SIGNAL_FUNC(do_rename));
}
void Chftp_Remote_menu_2::do_rename(GtkEntry *entry,gpointer data){
gchar filename[300];
strcpy(filename,gtk_entry_get_text(entry));
((Chftp_transfer *)data)->Rfc959->rfc959_rename(((Chftp_transfer *)data)->filename_text,filename);
gtk_widget_destroy(GTK_WIDGET(((Chftp_transfer *)data)->Remote_pop_menu_2->mkdirdialog));
if(-2!=(((Chftp_transfer *)data)->Rfc959->rfc959_list_files()))
((Chftp_transfer *)data)->hftp_read_files(NULL,0);
}
void Chftp_Remote_menu_2::hftp_download(GtkEntry *entry,gpointer data){
if(0==strcmp(((Chftp_transfer *)data)->Remote_pop_menu_2->thetype,"目录")){
((Chftp_transfer *)data)->tag=0;
((Chftp_transfer *)data)->is_dir=1;
}
else{
((Chftp_transfer *)data)->tag=0;
((Chftp_transfer *)data)->is_dir=0;
}
((Chftp_transfer *)data)->Remotelistbox_drag(NULL,NULL,NULL,0,0,data);
}
void Chftp_Remote_menu_2::hftp_delete(GtkWidget *TheWindow,gpointer data){
if(0==strcmp(((Chftp_transfer *)data)->Remote_pop_menu_2->thetype,"目录"))
((Chftp_transfer *)data)->Rfc959->rfc959_rmdir(((Chftp_transfer *)data)->filename_text);
else
((Chftp_transfer *)data)->Rfc959->rfc959_rmfile(((Chftp_transfer *)data)->filename_text);
if(-2!=(((Chftp_transfer *)data)->Rfc959->rfc959_list_files()))
((Chftp_transfer *)data)->hftp_read_files(NULL,0);
}
/**************************************************类Chftp_Local_menu_1部分********************/
Chftp_Local_menu_1::Chftp_Local_menu_1(gpointer data){
menu=NULL;
TheObject=data;
menu=gtk_menu_new();
gtk_widget_show(menu);
Builder_MenuItem("--------",NULL,menu,data);
Builder_MenuItem("刷新",GTK_SIGNAL_FUNC(hftp_refresh),menu,data);
Builder_MenuItem("新建目录",GTK_SIGNAL_FUNC(hftp_mkdir),menu,(gpointer)this);
gtk_menu_popup(GTK_MENU(menu),NULL,NULL,NULL,NULL,3,0);
}
void Chftp_Local_menu_1::Builder_MenuItem(
gchar *menutext,
GtkSignalFunc signalhandler,
GtkWidget *menu,gpointer data){
GtkWidget *menuitem;
menuitem=gtk_menu_item_new_with_label(menutext);
if(signalhandler)
gtk_signal_connect(GTK_OBJECT(menuitem),"activate",signalhandler,data);
if(menu)
gtk_menu_append(GTK_MENU(menu),menuitem);
gtk_widget_show(menuitem);
}
void Chftp_Local_menu_1::hftp_refresh(GtkWidget *TheWindow,gpointer data){
((Chftp_transfer *)data)->Localdata->
hftp_GetFiles(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(((Chftp_transfer *)data)->Local->hftp_GetCombo())->entry)),
((Chftp_transfer *)data)->Local->hftp_GetClist());
}
void Chftp_Local_menu_1::hftp_mkdir(GtkWidget *TheWindow,gpointer data){
((Chftp_Local_menu_1 *)data)->showdialog("新建目录:",GTK_SIGNAL_FUNC(GetNewdir));
}
void Chftp_Local_menu_1::showdialog(const gchar *title,GtkSignalFunc signalhandler){
GtkWidget *entrybox;
mkdirdialog=gtk_window_new(GTK_WINDOW_DIALOG);
gtk_window_set_title(GTK_WINDOW(mkdirdialog),title);
gtk_container_set_border_width(GTK_CONTAINER(mkdirdialog),10);
gtk_window_set_position(GTK_WINDOW(mkdirdialog),GTK_WIN_POS_CENTER);
entrybox=gtk_entry_new();
gtk_container_add(GTK_CONTAINER(mkdirdialog),entrybox);
gtk_signal_connect(GTK_OBJECT(entrybox),"activate",signalhandler,TheObject);
gtk_window_set_modal(GTK_WINDOW(mkdirdialog),TRUE);
gtk_widget_show_all(mkdirdialog);
}
void Chftp_Local_menu_1::GetNewdir(GtkEntry *entry,gpointer data){
gchar filename[300];
strcpy(filename,gtk_entry_get_text(entry));
mkdir(filename,S_IRUSR|S_IWUSR|S_IXUSR);
hftp_refresh(NULL,data);
if(((Chftp_transfer *)data)->Local_pop_menu_1)
gtk_widget_destroy(GTK_WIDGET(((Chftp_transfer *)data)->Local_pop_menu_1->mkdirdialog));
else if(((Chftp_transfer *)data)->Local_pop_menu_2)
gtk_widget_destroy(GTK_WIDGET(((Chftp_transfer *)data)->Local_pop_menu_2->mkdirdialog));
}
/*******************************类Chftp_Local_menu_2部分**************************************/
Chftp_Local_menu_2::Chftp_Local_menu_2(gpointer data,gchar *filetype)
:Chftp_Local_menu_1(data){
strcpy(thetype,filetype);
Builder_MenuItem("改名",GTK_SIGNAL_FUNC(hftp_rename),menu,data);
Builder_MenuItem("上传",GTK_SIGNAL_FUNC(hftp_upload),menu,data);
gtk_menu_popup(GTK_MENU(menu),NULL,NULL,NULL,NULL,3,0);
}
void Chftp_Local_menu_2::hftp_rename(GtkWidget *TheWindow,gpointer data){
((Chftp_transfer *)data)->Local_pop_menu_2->showdialog("文件改名:",GTK_SIGNAL_FUNC(do_rename));
}
void Chftp_Local_menu_2::do_rename(GtkEntry *entry,gpointer data){
gchar filename[300];
strcpy(filename,gtk_entry_get_text(entry));
if(0==strcmp(((Chftp_transfer *)data)->Local_pop_menu_2->thetype,"文件"))
rename(((Chftp_transfer *)data)->filename_text,filename);
gtk_widget_destroy(GTK_WIDGET(((Chftp_transfer *)data)->Local_pop_menu_2->mkdirdialog));
}
void Chftp_Local_menu_2::hftp_upload(GtkEntry *entry,gpointer data){
if(0==strcmp(((Chftp_transfer *)data)->Local_pop_menu_2->thetype,"目录")){
((Chftp_transfer *)data)->tag=1;
((Chftp_transfer *)data)->is_dir=1;
}
else{
((Chftp_transfer *)data)->tag=1;
((Chftp_transfer *)data)->is_dir=0;
}
((Chftp_transfer *)data)->Locallistbox_drag(NULL,NULL,NULL,0,0,data);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -