⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 popinterface.cpp

📁 这个是LINUX下的HFTP测试版本
💻 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 + -