📄 includewinc.c
字号:
*/voidIncludeWinC::DoParamExpose(Widget, IncludeWinC *This, XtPointer){//// Remove this callback// XtRemoveCallback(*This->paramRC, XmNexposeCallback, (XtCallbackProc)DoParamExpose, This);//// Fix sizes of pane// Dimension ht; XtVaGetValues(*This->paramRC, XmNheight, &ht, NULL); XtVaSetValues(*This->paramRC, XmNpaneMinimum, ht, XmNpaneMaximum, ht, NULL);} // End DoParamExpose/*--------------------------------------------------------------- * IncludeWinC destructor */IncludeWinC::~IncludeWinC(){ delete fileRC; delete paramRC;}/*--------------------------------------------------------------- * Method to edit data for a single file */voidIncludeWinC::Show(SendIconC *file){ fileList.removeAll(); fileList.add(file->data->dataFile); fileIndex = 0; typeStr = file->data->conStr; typeIndex = typeList.indexOf(typeStr); XtUnmanageChild(skipPB); HalDialogC::Show();//// Initialize fields// StringC tmpStr; file->data->GetDescription(tmpStr); XmTextFieldSetString(descTF, tmpStr); XtVaSetValues(typeOM, XmNmenuHistory, *typePbList[typeIndex], NULL); Widget tb = NULL; switch ( file->data->accType ) { case (AT_INLINE): tb = includeAsFileTB; break; case (AT_LOCAL_FILE): tb = attachLocalTB; break; case (AT_ANON_FTP): tb = attachAnonTB; break; case (AT_FTP): tb = attachFtpTB; break; case (AT_TFTP): tb = attachTftpTB; break; case (AT_MAIL_SERVER): tb = attachMailTB; break; } if ( tb ) XmToggleButtonSetState(tb, True, True); tb = NULL; switch ( file->data->encType ) { case (ET_NONE): tb = encodeNoneTB; break; case (ET_8BIT): tb = encode8bitTB; break; case (ET_BASE_64): tb = encode64TB; break; case (ET_BINHEX): tb = encodeBinHexTB; break; case (ET_QP): tb = encodeQpTB; break; case (ET_UUENCODE): tb = encodeUuTB; break; } if ( tb ) XmToggleButtonSetState(tb, True, True); XmToggleButtonSetState(preEncodeTB, file->data->IsEncoded(), True); CharC val; ParamC *param = file->data->Param("charset"); if ( param ) val = param->val; else val = ""; TextFieldSetString(charTF, val); param = file->data->Param("name"); if ( param ) val = param->val; else val = file->data->dataFile; TextFieldSetString(nameTF, val); param = file->data->Param("filename"); if ( param ) val = param->val; else val = ""; TextFieldSetString(outNameTF, val); param = file->data->Param("type"); if ( param ) val = param->val; else val = ""; TextFieldSetString(octTypeTF, val); param = file->data->Param("padding"); if ( param ) val = param->val; else val = ""; TextFieldSetString(octPadTF, val);//// Look for other content-type parameters// tmpStr.Clear(); param = file->data->conParams; while ( param ) { if ( !param->val.Equals("charset", IGNORE_CASE) && !param->val.Equals("filename", IGNORE_CASE) && !param->val.Equals("type", IGNORE_CASE) && !param->val.Equals("padding", IGNORE_CASE) ) { if ( tmpStr.size() > 0 ) tmpStr += "; "; tmpStr += param->full; } param = param->next; } TextSetString(otherText, tmpStr); param = file->data->Param("site"); if ( param ) val = param->val; else val = ""; TextFieldSetString(hostTF, val); param = file->data->Param("directory"); if ( param ) val = param->val; else val = ""; TextFieldSetString(dirTF, val); param = file->data->Param("mode"); if ( param ) { val = param->val; tb = NULL; if ( file->data->IsTFTP() ) { if (val.Equals("netascii", IGNORE_CASE)) tb = tftpModeNetAsciiTB; else if (val.Equals("octet" , IGNORE_CASE)) tb = tftpModeOctetTB; else if (val.Equals("mail" , IGNORE_CASE)) tb = tftpModeMailTB; } else { if ( val.Equals ("ascii", IGNORE_CASE) ) tb = ftpModeAsciiTB; else if ( val.Equals ("ebcdic", IGNORE_CASE) ) tb = ftpModeEbcdicTB; else if ( val.Equals ("image", IGNORE_CASE) ) tb = ftpModeImageTB;// else if ( val.StartsWith("local", IGNORE_CASE) ) tb = ftpModeLocalTB; } if ( tb ) XmToggleButtonSetState(tb, True, True); } param = file->data->Param("server"); if ( param ) val = param->val; else val = ""; TextFieldSetString(serverTF, val); param = file->data->Param("subject"); if ( param ) val = param->val; else val = ""; TextFieldSetString(subjectTF, val); tmpStr.Clear(); if ( file->data->IsMail() ) file->data->GetText(tmpStr); TextSetString(bodyText, tmpStr); param = file->data->Param("expiration"); if ( param ) val = param->val; else val = ""; TextFieldSetString(expTF, val); param = file->data->Param("size"); if ( param ) val = param->val; else val = ""; TextFieldSetString(sizeTF, val); param = file->data->Param("permission"); Boolean readWrite = (param && param->val.Equals("read-write", IGNORE_CASE)); XmToggleButtonSetState(readWrite ? permRwTB : permRoTB, True, True); UpdateVisibleFields();} // End Show/*--------------------------------------------------------------- * Method to get data for a list of files */voidIncludeWinC::Show(StringListC *list){ fileList = *list; typeStr.Clear(); // Force a type change if ( list->size() > 1 ) XtManageChild(skipPB); else XtUnmanageChild(skipPB); HalDialogC::Show(); SetFile(0);} // End Show/*--------------------------------------------------------------- * Method to get data for a specific file */voidIncludeWinC::SetFile(int fileNum){ fileIndex = fileNum;//// Display the file name// StringC *name = fileList[fileIndex]; while ( IsDir(*name) ) { StringC errMsg = *name; errMsg += " is a directory"; PopupMessage(errMsg); if ( fileIndex+1 < fileList.size() ) { fileIndex++; name = fileList[fileIndex]; } else { Hide(); return; } } BusyCursor(True); XmTextFieldSetString(nameTF, *name); CharC baseName = BaseName(*name); TextSetString(outNameTF, baseName); XmTextFieldSetString(descTF, "");//// Get the file type// StringC newTypeStr; ::GetFileType(*name, newTypeStr); Boolean typeChange = (newTypeStr != typeStr);//// Initialize buttons if the type changed// if ( typeChange ) { typeStr = newTypeStr; if ( !typeList.includes(typeStr) ) { typeList.add(typeStr); BuildTypeMenu(); } typeIndex = typeList.indexOf(typeStr);//// Display "type" push button// XtVaSetValues(typeOM, XmNmenuHistory, *typePbList[typeIndex], NULL); if ( IsText() || ContentType() == CT_RFC822 ) { XmToggleButtonSetState(includeAsTextTB, True, True); XmToggleButtonSetState(encodeNoneTB, True, True); } else { XmToggleButtonSetState(includeAsFileTB, True, True); XmToggleButtonSetState(encode64TB, True, True); } UpdateVisibleFields(); } // End if file type changed//// Display size if available// struct stat stats; if ( stat(*name, &stats) == 0 ) { StringC sizeStr; sizeStr += (int)stats.st_size; XmTextFieldSetString(sizeTF, sizeStr); } BusyCursor(False);} // End SetFile/*--------------------------------------------------------------- * Method to display the fields appropriate to the current file type * and include type */voidIncludeWinC::UpdateVisibleFields(){ if ( IncludeAsText() ) { XtUnmanageChild(*paramRC); } else {//// Allow pane size to change// XtVaSetValues(*paramRC, XmNpaneMinimum, (Dimension)1, XmNpaneMaximum, (Dimension)10000, NULL);//// Determine which parameters are visible// paramRC->Defer(True); paramRC->SetRowVisible(charsetRow, IsText() && IncludeAsFile()); paramRC->SetRowVisible(octTypeRow, IsAppOctet()); paramRC->SetRowVisible(octPadRow, IsAppOctet()); paramRC->SetRowVisible(hostRow, AttachFtp() || AttachAnon() || AttachTftp()); paramRC->SetRowVisible(dirRow, AttachFtp() || AttachAnon() || AttachTftp()); paramRC->SetRowVisible(ftpModeRow, AttachFtp() || AttachAnon()); paramRC->SetRowVisible(tftpModeRow, AttachTftp()); paramRC->SetRowVisible(serverRow, AttachMail()); paramRC->SetRowVisible(subjectRow, AttachMail()); paramRC->SetRowVisible(bodyRow, AttachMail()); paramRC->Defer(False); XtManageChild(*paramRC); } // End if not including as text//// Encoding can only be pre-existing for attachments// if ( !IncludeAsText() && !IncludeAsFile() ) { XmToggleButtonSetState(preEncodeTB, True, False); XmToggleButtonSetState(encodeNoneTB, True, True); } else XmToggleButtonSetState(preEncodeTB, False, False); if ( IsText() ) { XmToggleButtonSetState(ftpModeAsciiTB, True, True); XmToggleButtonSetState(tftpModeNetAsciiTB, True, True); } else { XmToggleButtonSetState(ftpModeImageTB, True, True); XmToggleButtonSetState(tftpModeOctetTB, True, True); }} // End UpdateVisibleFields/*--------------------------------------------------------------- * Callback to handle press of ok button */voidIncludeWinC::DoOk(Widget, IncludeWinC *This, XtPointer){//// Check the file name field// char *cs = XmTextFieldGetString(This->nameTF); if ( strlen(cs) == 0 ) { set_invalid(This->nameTF, True, True); This->PopupMessage("Please enter a file name."); XtFree(cs); return; }//// Check the file accessibility// if ( This->IncludeAsText() || This->IncludeAsFile() ) { if ( access(cs, F_OK) != 0 ) { set_invalid(This->nameTF, True, True); This->PopupMessage("The specified file does not exist."); XtFree(cs); return; } else if ( access(cs, R_OK) != 0 ) { set_invalid(This->nameTF, True, True); This->PopupMessage("The specified file is not readable."); XtFree(cs); return; }//// Check the encoding fields. Check for 8-bit data in the file if no// encoding has been selected.// if ( This->NoEncoding() ) { MappedFileC *mf = MapFile(cs); if ( mf ) { Boolean has8 = Contains8Bit(mf->data); UnmapFile(mf); if ( has8 ) { This->PopupMessage ("This file contains 8-bit data.\nPlease select an encoding."); XtFree(cs); return; } } } } // End if we need access to the file XtFree(cs);//// Check the ftp host field// if ( This->AttachFtp() || This->AttachAnon() || This->AttachTftp() ) { cs = XmTextFieldGetString(This->hostTF); if ( strlen(cs) == 0 ) { set_invalid(This->hostTF, True, True); This->PopupMessage("Please enter a host name or address."); XtFree(cs); return; } XtFree(cs); }//// Check the mail fields// if ( This->AttachMail() ) { cs = XmTextFieldGetString(This->serverTF); if ( strlen(cs) == 0 ) { set_invalid(This->serverTF, True, True); This->PopupMessage("Please enter an address for the mail server."); XtFree(cs); return; } XtFree(cs); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -