root/_FtpPanel/BF_GUI_FtpPanel.cpp

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. SetFromFtp
  2. Path
  3. PrepareKeysMenu
  4. RefreshNodeList
  5. MessageReceived
  6. NavEnter
  7. Bookmark_Edit
  8. LoadBookmarks
  9. Bookmark_Save
  10. Act_Connect
  11. Action_SwitchShowIcons
  12. Ftp_LoadIcons
  13. Ftp_ListLoaded
  14. Act_ChangeDir_Start
  15. Act_ReloadDir_Start
  16. ActionMakeDir_Run
  17. ActionDelete_Run
  18. Bookmark_Delete
  19. Bookmark_Delete_Yes
  20. Bookmark_Create
  21. Ftp_Disconnect
  22. PrepareTopMenuItem
  23. ActionCopyFrom_Run
  24. ActionCopyTo_Run

   1 #include "Directory.h"
   2 #include "Mime.h"
   3 
   4 #include "BF_Dict.h"
   5 #include "BF_Roster.h"
   6 #include "BF_GUI_KeysMenu.h"
   7 #include "BF_GUI_WinMain.h"
   8 
   9 #include "BF_GUI_FtpPanel.h"
  10 #include "BF_GUI_FtpPanel_Tasks.h"
  11 
  12 
  13 
  14 #define SETTINGS_FTP_DIR        (const char*)"/boot/home/config/settings/BeFAR/ftp"
  15 
  16 /////////////////////////////////////////////////////////////////
  17 
  18 void                                    
  19 BF_FtpPath::SetFromFtp(const char *pc_Path)    /* [previous][next][first][last][top][bottom][index][help] */
  20 {
  21         BL_String s(pc_Path);           
  22         int i1 = s.FindFirst("\"");             
  23         BL_String s1(s);
  24         if(i1>=0) s.CopyInto(s1,0,i1);
  25         
  26         BF_Path::SetTo(s1.String());
  27 }
  28 
  29 /////////////////////////////////////////////////////////////////
  30 
  31 BF_GUI_FtpPanel_Bookmark::BF_GUI_FtpPanel_Bookmark()
  32 {
  33         iPort = 21;
  34         bPassive = true;
  35         
  36         bAscii_Mode = false;
  37 }
  38 
  39 void                                    
  40 BF_GUI_FtpPanel_Bookmark::operator = (BF_GUI_FtpPanel_Bookmark & o_Source)
  41 {
  42         sHost = o_Source.sHost;
  43         sUserName = o_Source.sUserName;
  44         sUserPassword = o_Source.sUserPassword;
  45         sProxy = o_Source.sProxy;
  46         sFolder = o_Source.sFolder;
  47         iPort = o_Source.iPort; 
  48         bPassive = o_Source.bPassive;           
  49         bAscii_Mode = o_Source.bAscii_Mode;                     
  50 }
  51 
  52 /////////////////////////////////////////////////////////////////
  53 BF_GUI_FtpPanel_NodeBookmark::BF_GUI_FtpPanel_NodeBookmark()
  54 {
  55         poBookmark = NULL;
  56 }
  57 
  58 BF_GUI_FtpPanel_NodeBookmark::~BF_GUI_FtpPanel_NodeBookmark()
  59 {
  60         if(poBookmark) DELETE(poBookmark);
  61 }
  62 
  63 
  64 /////////////////////////////////////////////////////////////////
  65 BF_GUI_FtpPanel::BF_GUI_FtpPanel(const BRect & o_Rect,bool b_WinPos_OnLeft)
  66 :BF_GUI_NodePanel(o_Rect,b_WinPos_OnLeft)
  67 {       
  68         //iModeColsStyles = iModeColsStyles | BF_NODEPANEL_COLS_SICON;
  69         //iColsColCount = 2;
  70         //bCanSelect = false;
  71         //
  72         iVisMode = BF_FTPPANEL_VISMODE_BOOKMARKS;
  73         iState = BF_FTPPANEL_STATE_DEFAULT;
  74         poClient = new FtpClient(this);
  75         uConnectThread = 0;
  76         poBookmark = NULL;      
  77         oBookmarkDir.SetTo(SETTINGS_FTP_DIR,NULL);
  78         { // load icons ///
  79                 poFolderSIcon = BL_Load_SIconFromMIME(BL_MIME_FOLDER);
  80                 poBookmarkSIcon = BL_Load_SIconFromMIME(BL_MIME_BOOKMARK);
  81                 poDocSIcon      = BL_Load_SIconFromMIME(BL_MIME_FILE);
  82         }
  83         ///
  84         Calc();
  85         RefreshNodeList();
  86         ///     
  87 }
  88 
  89 const BL_String 
  90 BF_GUI_FtpPanel::Path() const    /* [previous][next][first][last][top][bottom][index][help] */
  91 {
  92         BL_String sResult("//ftp:");
  93         return sResult;
  94 }
  95 
  96 BF_GUI_FtpPanel::~BF_GUI_FtpPanel()
  97 {
  98         if(poClient)            DELETE(poClient);
  99         if(poFolderSIcon)       DELETE(poFolderSIcon);
 100         if(poBookmarkSIcon) DELETE(poBookmarkSIcon);
 101         if(poDocSIcon)          DELETE(poDocSIcon);
 102 }
 103 
 104 void
 105 BF_GUI_FtpPanel::PrepareKeysMenu()    /* [previous][next][first][last][top][bottom][index][help] */
 106 {
 107         BF_GUI_NodePanel::PrepareKeysMenu();
 108         uint32  iKeysModifiers = modifiers();
 109         
 110         if(iKeysModifiers & B_RIGHT_OPTION_KEY){        
 111         }else{                                  
 112                 switch(iVisMode){
 113                 case BF_FTPPANEL_VISMODE_BOOKMARKS:{
 114                         if(iState==BF_FTPPANEL_STATE_DEFAULT){
 115                                 poSysKeysMenu->SetText(4,BF_DictAt(BF_DICT_EDIT));
 116                                 poSysKeysMenu->SetMessage(4,new BMessage(BF_FTP_MSG_EDIT_BOOKMARK),this);
 117                                 poSysKeysMenu->SetText(7,BF_DictAt(BF_DICT_CREATE));
 118                                 poSysKeysMenu->SetMessage(7,new BMessage(BF_FTP_MSG_BOOKMARK_CREATE),this);                     
 119                                 poSysKeysMenu->SetText(8,BF_DictAt(BF_DICT_DELETE));
 120                                 poSysKeysMenu->SetMessage(8,new BMessage(BF_FTP_MSG_BOOKMARK_DELETE),this);
 121                         }
 122                         break;}
 123                 case BF_FTPPANEL_VISMODE_FTPLIST:{
 124                         if(iState==BF_FTPPANEL_STATE_CONNECTED){
 125                                 poSysKeysMenu->SetText(3,BF_DictAt(BF_DICT_FTP_DISCONNECT));
 126                                 poSysKeysMenu->SetMessage(3,new BMessage(BF_FTP_MSG_DISCONNECT),this);                  
 127                                 poSysKeysMenu->SetText(5,BF_DictAt(BF_DICT_COPY));
 128                                 poSysKeysMenu->SetMessage(5,new BMessage(BF_MSG_NODEPANEL_COPY_START),this);                    
 129                                 poSysKeysMenu->SetText(7,BF_DictAt(BF_DICT_FTP_MAKEDIR));
 130                                 poSysKeysMenu->SetMessage(7,new BMessage(BF_MSG_NODEPANEL_MAKEDIR_START),this);                 
 131                                 poSysKeysMenu->SetText(8,BF_DictAt(BF_DICT_DELETE));
 132                                 poSysKeysMenu->SetMessage(8,new BMessage(BF_MSG_NODEPANEL_DELETE_START),this);  
 133                         }
 134                         break;}
 135                 };
 136         }                               
 137 }
 138 
 139 
 140 void
 141 BF_GUI_FtpPanel::RefreshNodeList()    /* [previous][next][first][last][top][bottom][index][help] */
 142 {       
 143         switch(iVisMode){
 144         case BF_FTPPANEL_VISMODE_BOOKMARKS:{
 145                 LoadBookmarks();
 146                 break;}
 147         }
 148 }
 149 
 150 
 151 #define BF_GUI_KEY_SYS  B_CONTROL_KEY | B_OPTION_KEY | B_COMMAND_KEY
 152 
 153 void                                                    
 154 BF_GUI_FtpPanel::MessageReceived(BMessage* po_Message)    /* [previous][next][first][last][top][bottom][index][help] */
 155 {
 156         switch(po_Message->what){
 157         ////////////////////////////////        
 158         case BF_FTP_MSG_DIR_RELOAD_START:
 159                 Act_ReloadDir_Start();
 160                 break;
 161         case BF_FTP_MSG_DIR_CHANGED:{
 162                 SetHeader(BF_DictAt(BF_DICT_FTP_CONNECTED),poFolderSIcon);
 163                 uConnectThread = 0;
 164                 iState = BF_FTPPANEL_STATE_CONNECTED;
 165                 BL_String s;
 166                 s = po_Message->FindString("list");
 167                 Ftp_ListLoaded(s);
 168                 //
 169                 break;} 
 170         case BF_FTP_MSG_DIR_RELOAD:{
 171                 SetHeader(BF_DictAt(BF_DICT_FTP_CONNECTED),poFolderSIcon);
 172                 uConnectThread = 0;
 173                 iState = BF_FTPPANEL_STATE_CONNECTED;
 174                 BL_String s;
 175                 s = po_Message->FindString("list");
 176                 Ftp_ListLoaded(s);
 177                 break;}
 178         ////////////////////////////////        
 179         case BF_FTP_MSG_CONNECTED:{
 180                 oPath.SetFromFtp( po_Message->FindString("path") );             
 181                 uConnectThread = 0;
 182                 iState = BF_FTPPANEL_STATE_CONNECTED;
 183                 BL_String s;            
 184                 s = po_Message->FindString("list");             
 185                 Ftp_ListLoaded(s);
 186                 //
 187                 break;}
 188         ////////////////////////////////        
 189         case BF_FTP_MSG_MESSAGE:{
 190                 char *pcMessage=NULL;
 191                 pcMessage = (char*)po_Message->FindString("message");
 192                 BF_Dialog_Alert_Sep(BF_DictAt(BF_DICT_FTP_ERROR),pcMessage,NULL,this);
 193                 break;}
 194         ////////////////////////////////
 195         case BF_FTP_MSG_BOOKMARK_CREATE:{
 196                 Bookmark_Create();
 197                 break;}
 198         case BF_FTP_MSG_BOOKMARK_DELETE:{
 199                 Bookmark_Delete();
 200                 break;}
 201         case BF_FTP_MSG_BOOKMARK_DELETE_ANSWER:{
 202                 int32 iResult=-1;
 203                 ASSERT(B_OK==po_Message->FindInt32("menu",&iResult));
 204                 if(iResult==0) Bookmark_Delete_Yes();
 205                 /* enable panels */
 206                 BF_GUI_Func_PanelsEnable(true);
 207                 MakeFocus();
 208                 //
 209                 break;}
 210         case BF_FTP_MSG_EDIT_BOOKMARK:{                 
 211                 Bookmark_Edit();                
 212                 break;}
 213         //////////////////////////////// 
 214         case BF_FTP_MSG_BOOKMARK_EDIT:{                         
 215                 /* enable panels */
 216                 BF_GUI_Func_PanelsEnable(true);
 217                 MakeFocus();
 218                 /* change bookmark_info */
 219                 bool bOk;
 220                 ASSERT(B_OK==po_Message->FindBool(BF_GUI_DIALOG_MESSAGE_DATA_OK,&bOk));                         
 221                 if(bOk && po_Message->FindInt32("menu")==0){                    
 222                 
 223                         BF_GUI_FtpPanel_NodeBookmark *poNode = (BF_GUI_FtpPanel_NodeBookmark*)Nodes_Focus();                    
 224                         if(!poNode) return;
 225                         char *pcValue;
 226                         BL_String sOldTitle(poNode->poBookmark->sTitle.String());
 227                         
 228                         ASSERT(poNode->poBookmark);                                             
 229                         
 230                         ASSERT(B_OK==po_Message->FindString("title",(const char**)&pcValue) && pcValue);
 231                         poNode->poBookmark->sTitle = pcValue;
 232                         poNode->sName = pcValue;
 233                         
 234                         ASSERT(B_OK==po_Message->FindString("host",(const char**)&pcValue) && pcValue);
 235                         poNode->poBookmark->sHost = pcValue;                    
 236                         ASSERT(B_OK==po_Message->FindString("user_name",(const char**)&pcValue) && pcValue);
 237                         poNode->poBookmark->sUserName = pcValue;
 238                         ASSERT(B_OK==po_Message->FindString("user_password",(const char**)&pcValue) && pcValue);
 239                         poNode->poBookmark->sUserPassword = pcValue;
 240                         ASSERT(B_OK==po_Message->FindString("folder",(const char**)&pcValue) && pcValue);
 241                         poNode->poBookmark->sFolder = pcValue;
 242                         ASSERT(B_OK==po_Message->FindBool("passive",&poNode->poBookmark->bPassive));
 243                         ASSERT(B_OK==po_Message->FindBool("ascii",&poNode->poBookmark->bAscii_Mode));
 244                         
 245                         Bookmark_Save(sOldTitle.String(),poNode);  
 246                                                                                                                         
 247                         DrawNodeAt(iNavCursorIndex);
 248                 }
 249                 break;}
 250         ////////////////////////////////                
 251         case BF_FTP_MSG_DISCONNECT:{
 252                 Ftp_Disconnect();
 253                 break;}
 254         ////////////////////////////////
 255         default:
 256                 BF_GUI_NodePanel::MessageReceived(po_Message);
 257         };
 258 }
 259 
 260 bool                                                    
 261 BF_GUI_FtpPanel::NavEnter()    /* [previous][next][first][last][top][bottom][index][help] */
 262 {       
 263         ///
 264         switch(iVisMode){
 265         case BF_FTPPANEL_VISMODE_BOOKMARKS:{
 266                 Act_Connect();
 267                 break;}
 268         case BF_FTPPANEL_VISMODE_FTPLIST:{
 269                 switch(iState){
 270                 case BF_FTPPANEL_STATE_CONNECTED:{
 271                         BF_Node *poNode = Nodes_Focus();
 272                         if(!poNode) return true;
 273                         
 274                         switch(poNode->iType){
 275                         case BF_NODE_TYPE_PARENTDIR:{
 276                                 Act_ChangeDir_Start(poNode);
 277                                 return true;
 278                                 break;}
 279                         case BF_NODE_TYPE_DIR:{
 280                                 Act_ChangeDir_Start(poNode);
 281                                 return true;
 282                                 break;}
 283                         } 
 284                         
 285                         break;}
 286                 }
 287                 break;}
 288         };
 289         return true;
 290 }
 291 
 292 void
 293 BF_GUI_FtpPanel::Bookmark_Edit()    /* [previous][next][first][last][top][bottom][index][help] */
 294 {
 295         BF_GUI_FtpPanel_NodeBookmark *poNode = (BF_GUI_FtpPanel_NodeBookmark*)Nodes_Focus();
 296         if(!poNode) return;
 297         ASSERT(poNode->poBookmark);
 298         
 299         BMessage oMessage(BF_FTP_MSG_BOOKMARK_EDIT);
 300         oMessage.AddPointer("bf_focus",this);
 301         
 302         /* */
 303         BF_GUI_Func_PanelsEnable(false);
 304         /* make dialog */       
 305         BF_GUI_Dialog *poDialog = new BF_GUI_Dialog(BRect(0,0,300,0),
 306                 BF_DictAt(BF_DICT_FTP_EDITBKM),"dialog",oMessage,BG_GUI_DIALOG_WINRESIZE_MOVE_CENTER);  
 307         //poDialog->SetSizeBy( 300 , poSysSetup->oFontToolView.fHeight*7 + 5*6 );
 308         //poDialog->MoveToCenter( poWinView );
 309         BRect oRect;    
 310         ////////////////////
 311         poDialog->LocalBounds(oRect);   
 312         oRect.bottom = oRect.top+poSysSetup->oFontToolView.fHeight;
 313         BF_GUI_ViewCheck        *poCheck;
 314         /* insert title */              
 315         oRect.bottom = oRect.top+poSysSetup->oFontToolView.fHeight;
 316         BF_GUI_ViewEdit_Create(oRect,BF_DictAt(BF_DICT_FTP_BKM_TITLE),poDialog,"title",poNode->poBookmark->sTitle.String(),
 317                                         B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP,B_NAVIGABLE);  
 318         /* insert host */               
 319         oRect.top = oRect.bottom+5;
 320         oRect.bottom = oRect.top+poSysSetup->oFontToolView.fHeight;
 321         BF_GUI_ViewEdit_Create(oRect,BF_DictAt(BF_DICT_FTP_BKM_HOST),poDialog,"host",poNode->poBookmark->sHost.String(),
 322                                         B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP,B_NAVIGABLE);
 323         ///
 324         oRect.top = oRect.bottom+5;
 325         oRect.bottom = oRect.top+poSysSetup->oFontToolView.fHeight;
 326         BF_GUI_ViewEdit_Create(oRect,BF_DictAt(BF_DICT_FTP_BKM_USERNAME),poDialog,"user_name",poNode->poBookmark->sUserName.String(),
 327                                         B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP,B_NAVIGABLE);
 328         ///
 329         oRect.top = oRect.bottom+5;
 330         oRect.bottom = oRect.top+poSysSetup->oFontToolView.fHeight;
 331         BF_GUI_ViewEdit_Create(oRect,BF_DictAt(BF_DICT_FTP_BKM_PWD),poDialog,"user_password",poNode->poBookmark->sUserPassword.String(),
 332                                         B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP,B_NAVIGABLE);
 333         // folder  //
 334         oRect.top = oRect.bottom+5;
 335         oRect.bottom = oRect.top+poSysSetup->oFontToolView.fHeight;
 336         BF_GUI_ViewEdit_Create(oRect,BF_DictAt(BF_DICT_FTP_BKM_FOLDER),poDialog,"folder",poNode->poBookmark->sFolder.String(),
 337                                         B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP,B_NAVIGABLE);
 338         // insert "passive"
 339         oRect.top = oRect.bottom+5;
 340         oRect.bottom = oRect.top + poSysSetup->oFontToolView.fHeight;
 341         poCheck = new BF_GUI_ViewCheck(oRect,"passive",
 342                                         "passive",poNode->poBookmark->bPassive,
 343                                         B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP,B_NAVIGABLE);
 344         poDialog->AddChild(poCheck);
 345         // insert "ascii"
 346         oRect.top = oRect.bottom+5;
 347         oRect.bottom = oRect.top + poSysSetup->oFontToolView.fHeight;
 348         poCheck = new BF_GUI_ViewCheck(oRect,"ascii",
 349                                         "ascii mode",poNode->poBookmark->bAscii_Mode,
 350                                         B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP,B_NAVIGABLE);
 351         poDialog->AddChild(poCheck);    
 352                 
 353         /* menu */
 354         poDialog->AddOkCancelMenu(oRect);
 355         /* finish */
 356         poDialog->SetHeightFromLastChild();
 357         poDialog->MoveToCenter( poWinView );
 358         BF_GUI_Func_AddChildToMainView( poDialog );             
 359         /* */                   
 360 }
 361 
 362 ////////////////////////////////////////////////////////////////////////////////////////////
 363 void
 364 BF_GUI_FtpPanel::LoadBookmarks()    /* [previous][next][first][last][top][bottom][index][help] */
 365 {       
 366         BF_NodeList             loBookmarkNode(false);
 367 
 368         /// load bookmarks from config_dir //
 369         {                       
 370                 BF_Roster_LoadNodeList(oBookmarkDir,loBookmarkNode,BF_ROSTER_LOAD_NORMAL | BF_ROSTER_LOAD_SICON | BF_ROSTER_LOAD_NODE_FILE);
 371         }       
 372         BF_GUI_FtpPanel_NodeBookmark    *poNode; 
 373         char pc[400];
 374         status_t uRes;
 375         BF_Node *poBookmarkNode;
 376         BDirectory oDir(SETTINGS_FTP_DIR);      
 377         uRes = oDir.InitCheck();
 378         BF_NodeCollection loBukNode;
 379         
 380         for(int i=0;i<loBookmarkNode.CountItems();i++){
 381                 poBookmarkNode = loBookmarkNode.NodeAt(i);   
 382                 
 383                 BFile oFile(&oDir,poBookmarkNode->sName.String(),B_READ_ONLY);
 384                 uRes = oFile.InitCheck();
 385         
 386                 poNode = new BF_GUI_FtpPanel_NodeBookmark();
 387                 poNode->iType = BF_NODE_TYPE_FILE;
 388                 poNode->poBookmark = new BF_GUI_FtpPanel_Bookmark();
 389                 poNode->CopySIconFrom( poBookmarkSIcon );
 390 
 391 
 392                 poNode->poBookmark->sTitle = poBookmarkNode->sName;
 393                 if(oFile.ReadAttr("host",B_STRING_TYPE,0,pc,400)>0) poNode->poBookmark->sHost=pc;
 394                 if(oFile.ReadAttr("user_name",B_STRING_TYPE,0,pc,400)>0) poNode->poBookmark->sUserName=pc;
 395                 if(oFile.ReadAttr("user_password",B_STRING_TYPE,0,pc,400)>0) poNode->poBookmark->sUserPassword=pc;              
 396                 if(oFile.ReadAttr("folder",B_STRING_TYPE,0,pc,400)>0) poNode->poBookmark->sFolder=pc;           
 397                 if(oFile.ReadAttr("proxy",B_STRING_TYPE,0,pc,400)>0) poNode->poBookmark->sProxy=pc;             
 398                 oFile.ReadAttr("passive",B_BOOL_TYPE,0,&poNode->poBookmark->bPassive,sizeof(bool));
 399                 oFile.ReadAttr("ascii",B_BOOL_TYPE,0,&poNode->poBookmark->bAscii_Mode,sizeof(bool));
 400                 oFile.ReadAttr("port",B_INT32_TYPE,0,&poNode->poBookmark->iPort,sizeof(B_INT32_TYPE));                          
 401                 
 402                 
 403                 poNode->sName = poNode->poBookmark->sTitle;             
 404                 
 405                 loBukNode.AddItem(poNode);
 406         }
 407         SetHeader(BF_DictAt(BF_DICT_FTP_PANELTITLE),poFolderSIcon);
 408         loNode.DeleteItems();
 409         Nodes_Add(NULL,&loBukNode);
 410 }
 411 ////////////////////////////////////////////////////////////////////////////////////////////
 412 void
 413 BF_GUI_FtpPanel::Bookmark_Save(const char *pc_OldTitle,BF_GUI_FtpPanel_NodeBookmark *po_Node)    /* [previous][next][first][last][top][bottom][index][help] */
 414 {
 415         BL_String s,s1;
 416         ASSERT(po_Node);
 417         
 418         if(B_OK!=BF_Roster_MakeDir(SETTINGS_FTP_DIR)){
 419                 Action_Alert(BF_DictAt(BF_DICT_ERROR),BF_DictAt(BF_DICT_FTP_CANTMAKESETDIR));
 420                 return;
 421         }       
 422         BF_GUI_FtpPanel_Bookmark *poBookmark = po_Node->poBookmark;
 423         ASSERT(poBookmark);
 424         
 425         /* kill old file */     
 426         s=SETTINGS_FTP_DIR;
 427         s<<"/";
 428         s<<pc_OldTitle;
 429         BF_Roster_RemoveNode(s.String());
 430         
 431         /* create new file */
 432         BDirectory oDir(SETTINGS_FTP_DIR);
 433         BFile           oFile;
 434         status_t        uErr;
 435         
 436         uErr = oDir.CreateFile(poBookmark->sTitle.String(),&oFile,false);       
 437         if(uErr!=B_OK){
 438                 s = BF_DictAt(BF_DICT_FTP_CANTMAKESETFILE);
 439                 BL_System_TranslError(uErr,s1);
 440                 s<<s1;
 441                 Action_Alert(BF_DictAt(BF_DICT_ERROR),s1.String());
 442                 return;
 443         }
 444         
 445         /* save attributes */   
 446         oFile.WriteAttr("host",B_STRING_TYPE,0,poBookmark->sHost.String(),poBookmark->sHost.Length()+1);
 447         oFile.WriteAttr("user_name",B_STRING_TYPE,0,poBookmark->sUserName.String(),poBookmark->sUserName.Length()+1);
 448         oFile.WriteAttr("user_password",B_STRING_TYPE,0,poBookmark->sUserPassword.String(),poBookmark->sUserPassword.Length()+1);
 449         oFile.WriteAttr("proxy",B_STRING_TYPE,0,poBookmark->sProxy.String(),poBookmark->sProxy.Length()+1);
 450         oFile.WriteAttr("folder",B_STRING_TYPE,0,poBookmark->sFolder.String(),poBookmark->sFolder.Length()+1);
 451         oFile.WriteAttr("passive",B_BOOL_TYPE,0,&poBookmark->bPassive,sizeof(poBookmark->bPassive));
 452         oFile.WriteAttr("ascii",B_BOOL_TYPE,0,&poBookmark->bAscii_Mode,sizeof(poBookmark->bAscii_Mode));
 453         oFile.WriteAttr("port",B_INT32_TYPE,0,&poBookmark->iPort,sizeof(B_INT32_TYPE));
 454 }
 455 ////////////////////////////////////////////////////////////////////////////////////////////
 456 
 457 
 458 void
 459 BF_GUI_FtpPanel::Act_Connect()    /* [previous][next][first][last][top][bottom][index][help] */
 460 {
 461         if(!Nodes_Focus()) return;
 462         
 463         iState = BF_FTPPANEL_STATE_CONNECTING;
 464         SetHeader(BF_DictAt(BF_DICT_FTP_CONNECTING),poFolderSIcon);
 465         if(poSysKeysMenu) PrepareKeysMenu();
 466         
 467         uConnectThread = spawn_thread(BF_GUI_FtpPanel__Act_Connect_Thread, "ftp_connect", 
 468                 B_NORMAL_PRIORITY, this);                               
 469         resume_thread(uConnectThread);  
 470                 
 471         /*
 472         BF_Dialog_Alert_Sep("Connecting to ",poBookmark->sHost.String(),
 473                 new BL_List(),this,NULL,BF_FTP_MSG_CONNECT_BREAK);
 474         */              
 475 }
 476 ////////////////////////////////////////////////////////////////////////////////////////////
 477 
 478 void                                    
 479 BF_GUI_FtpPanel::Action_SwitchShowIcons()    /* [previous][next][first][last][top][bottom][index][help] */
 480 {
 481         if(!ModeShowSIcon()) Ftp_LoadIcons();
 482         
 483         BF_GUI_NodePanel::Action_SwitchShowIcons();
 484 }
 485 
 486 void
 487 BF_GUI_FtpPanel::Ftp_LoadIcons()    /* [previous][next][first][last][top][bottom][index][help] */
 488 {
 489         switch(iVisMode){       
 490         case BF_FTPPANEL_VISMODE_FTPLIST:{
 491                 BF_Node         *poNode;        
 492                 BMimeType       oMimeType;
 493                 BL_String       s;
 494                 
 495                 for(int i=0;i<loNode.CountItems();i++){
 496                         poNode = loNode.NodeAt(i);
 497                         
 498                         switch(poNode->iType){
 499                         case BF_NODE_TYPE_PARENTDIR:
 500                         case BF_NODE_TYPE_DIR:
 501                                 if(poFolderSIcon)       poNode->CopySIconFrom(poFolderSIcon);
 502                                 break;
 503                         default:
 504                                 if(     poDocSIcon )                    poNode->CopySIconFrom(poDocSIcon);              
 505                         }
 506                 } 
 507                 break;}
 508         }
 509 }
 510 
 511 ////////////////////////////////////////////////////////////////////////////////////////////
 512 void
 513 BF_GUI_FtpPanel::Ftp_ListLoaded(const  BL_String & s_List)    /* [previous][next][first][last][top][bottom][index][help] */
 514 {
 515 
 516         loNode.DeleteItems();
 517         
 518         int             iStart = 0,i1,i2;
 519         BL_String       sNode,s;
 520         BF_Node         *poNode;
 521         char            pc[5];
 522         bool            bParentLoaded = false;
 523         
 524         pc[0] = (char) 0x0D;
 525         pc[1] = (char) 0x0A;    
 526         pc[2] = '\0';           
 527         
 528         BMimeType oMimeType;
 529         
 530         while(true){
 531                 i1 = s_List.FindFirst(pc,iStart);
 532                 if(i1<0) break;
 533                 //
 534                 s_List.CopyInto(sNode,iStart,i1-iStart);
 535                 iStart = i1+2;
 536                 //
 537                 if(sNode.FindFirst("total")==0) continue;                                               
 538                 poNode = new BF_Node();
 539                 loNode.AddItem(poNode);
 540                 // name 
 541                 sNode.CopyInto(poNode->sName,55,sNode.Length()-55);
 542                 Debug_Info(poNode->sName.String());
 543                 
 544                 poNode->sName.LTrim();
 545                 poNode->sName.RTrim();
 546                 /*
 547                 poNode->sName.RemoveFirst(" ");
 548                 poNode->sName.RemoveLast(" ");
 549                 */
 550                 
 551                 // check spec_names 
 552 
 553                 if(poNode->sName==".."){                        
 554                         poNode->iType = BF_NODE_TYPE_PARENTDIR;
 555                         bParentLoaded = true;
 556                         continue;
 557                 }
 558                 if(poNode->sName=="."){                 
 559                         poNode->iType = poNode->iType = BF_NODE_TYPE_PARENTDIR;;
 560                         continue;
 561                 }
 562                 
 563                 // size
 564                 i2 = sNode.FindFirst(" ",24);
 565                 if(i2>0){                       
 566                         sNode.CopyInto(s,i2,41-i2);
 567                         poNode->iSize = s.Int32();
 568                 }
 569                 // node type 
 570                 if(sNode.FindFirst("d")==0) poNode->iType = BF_NODE_TYPE_DIR;   else
 571                 poNode->iType = BF_NODE_TYPE_FILE;
 572                 //              
 573         }
 574         
 575         if(!bParentLoaded){
 576                 poNode = new BF_Node("..");             
 577                 poNode->iType = BF_NODE_TYPE_PARENTDIR;
 578                 loNode.AddItem(poNode);
 579         }
 580         
 581         loNode.Sort(iSortType );                
 582         iVisMode = BF_FTPPANEL_VISMODE_FTPLIST;
 583         if(ModeShowSIcon()) Ftp_LoadIcons();
 584         
 585         NavChangeCursor(0);     
 586         Draw(Bounds());
 587         
 588         s = "ftp : ";
 589         s << oPath.Path();
 590         SetHeader(s.String(),poFolderSIcon);
 591         
 592         if(poSysKeysMenu) PrepareKeysMenu();
 593 }
 594 ////////////////////////////////////////////////////////////////////////////////////////////
 595 
 596 void
 597 BF_GUI_FtpPanel::Act_ChangeDir_Start(BF_Node *po_Node)    /* [previous][next][first][last][top][bottom][index][help] */
 598 {
 599         ASSERT(po_Node);
 600                 
 601         iState = BF_FTPPANEL_STATE_DIR_CHANGING;
 602         SetHeader(BF_DictAt(BF_DICT_FTP_DIRCHANGING),poFolderSIcon);
 603         if(poSysKeysMenu) PrepareKeysMenu();
 604         
 605         uConnectThread = spawn_thread(BF_GUI_FtpPanel__Act_ChangeDir_Thread, "ftp_change_dir",  B_NORMAL_PRIORITY, this);                               
 606         resume_thread(uConnectThread);          
 607         
 608 }
 609 
 610 void
 611 BF_GUI_FtpPanel::Act_ReloadDir_Start()    /* [previous][next][first][last][top][bottom][index][help] */
 612 {
 613         if(BF_FTPPANEL_STATE_CONNECTED!=iState){
 614                 BF_Dialog_Alert_Sep(BF_DictAt(BF_DICT_ERROR),BF_DictAt(BF_DICT_FTP_NOTREADY),NULL,this);
 615                 return; 
 616         }
 617         
 618         iState = BF_FTPPANEL_STATE_DIR_RELOAD;
 619         SetHeader(BF_DictAt(BF_DICT_FTP_DIRRELOADING),poFolderSIcon);
 620         if(poSysKeysMenu) PrepareKeysMenu();
 621         
 622         uConnectThread = spawn_thread(BF_GUI_FtpPanel__Act_ReloadDir_Thread, "ftp_reload_dir",B_NORMAL_PRIORITY,this);
 623         resume_thread(uConnectThread);                  
 624 }
 625 
 626 void
 627 BF_GUI_FtpPanel::ActionMakeDir_Run(BL_String & s_Title)    /* [previous][next][first][last][top][bottom][index][help] */
 628 {
 629         if(BF_FTPPANEL_STATE_CONNECTED!=iState){
 630                 BF_Dialog_Alert_Sep(BF_DictAt(BF_DICT_ERROR),BF_DictAt(BF_DICT_FTP_NOTREADY),NULL,this);
 631                 return; 
 632         }
 633         
 634         BMessage *poMessage = new BMessage();
 635         poMessage->AddPointer("panel",this);
 636         poMessage->AddString("name",s_Title.String());
 637         
 638         uConnectThread = spawn_thread(BF_GUI_FtpPanel__Act_MakeDir_Thread, "ftp_make_dir",B_NORMAL_PRIORITY,(void*)poMessage);
 639         resume_thread(uConnectThread);
 640 }
 641 
 642 void
 643 BF_GUI_FtpPanel::ActionDelete_Run(BF_NodeCollection & lo_Node)    /* [previous][next][first][last][top][bottom][index][help] */
 644 {
 645         BF_GUI_OperRoster_AddTask(new BF_GUI_FtpPanel_DeleteTask(this,lo_Node));
 646 }
 647 
 648 ////////////////////////////////////////////////////////////////////////////////////////////
 649 void
 650 BF_GUI_FtpPanel::Bookmark_Delete()    /* [previous][next][first][last][top][bottom][index][help] */
 651 {
 652         // make quit_dialog //          
 653         BL_List *ploMenuItem = new BL_List();
 654         ploMenuItem->AddItem(new BF_GUI_ViewMenu_Item(BF_DictAt(BF_DICT_YES),""));
 655         ploMenuItem->AddItem(new BF_GUI_ViewMenu_Item(BF_DictAt(BF_DICT_NO),""));
 656         BF_Dialog_Alert_Sep("",BF_DictAt(BF_DICT_FTP_BKM_ASKDEL),ploMenuItem,this,NULL,BF_FTP_MSG_BOOKMARK_DELETE_ANSWER);
 657 }
 658 
 659 void
 660 BF_GUI_FtpPanel::Bookmark_Delete_Yes()    /* [previous][next][first][last][top][bottom][index][help] */
 661 {
 662         BF_GUI_FtpPanel_NodeBookmark *poNode = (BF_GUI_FtpPanel_NodeBookmark*)Nodes_Focus();
 663         if(!poNode) return;                             
 664         BF_Roster_RemoveNode(oBookmarkDir,poNode->sName.String());              
 665         loNode.DeleteItemAt(iNavCursorIndex);
 666         
 667         DrawNodes(true);
 668         DrawListInfo(true);
 669         DrawSelListInfo(true);
 670         NavChangeCursor(iNavCursorIndex);                       
 671 }
 672 
 673 void
 674 BF_GUI_FtpPanel::Bookmark_Create()    /* [previous][next][first][last][top][bottom][index][help] */
 675 {
 676         BF_GUI_FtpPanel_NodeBookmark *poNode = new      BF_GUI_FtpPanel_NodeBookmark();
 677         poNode->poBookmark = new BF_GUI_FtpPanel_Bookmark();
 678         poNode->poBookmark->sTitle = "untitled";
 679         poNode->sName = poNode->poBookmark->sTitle;
 680         poNode->CopySIconFrom(poBookmarkSIcon);
 681         poNode->poBookmark->sUserName = "anonymous";
 682                         
 683         loNode.AddItem(poNode);
 684         
 685         DrawNodes(true);
 686         DrawListInfo(true);
 687         DrawSelListInfo(true);
 688         NavChangeCursor(loNode.IndexOf(poNode));                                
 689         
 690         Bookmark_Edit();
 691 }
 692 ////////////////////////////////////////////////////////////////////////////////////////////
 693 
 694 void
 695 BF_GUI_FtpPanel::Ftp_Disconnect()    /* [previous][next][first][last][top][bottom][index][help] */
 696 {       
 697         DELETE(poClient);
 698         poClient = new FtpClient();
 699         poBookmark = NULL;
 700         
 701         iVisMode =      BF_FTPPANEL_VISMODE_BOOKMARKS;  
 702         iState = BF_FTPPANEL_STATE_DEFAULT;
 703         
 704         RefreshNodeList();
 705         DrawNodes(true);
 706         DrawListInfo(true);
 707         DrawSelListInfo(true);
 708         NavChangeCursor(0);
 709         
 710         if(poSysKeysMenu) PrepareKeysMenu();
 711 }
 712 ////////////////////////////////////////////////////////////////////////////////////////////
 713 void                                                    
 714 BF_GUI_FtpPanel::PrepareTopMenuItem(BF_GUI_TopMenu_HItem *po_HItem)    /* [previous][next][first][last][top][bottom][index][help] */
 715 {
 716         BF_GUI_NodePanel::PrepareTopMenuItem(po_HItem);
 717         po_HItem->AddHItem("",NULL);
 718         po_HItem->AddHItem(BF_DictAt(BF_DICT_FTP_RELOADFOLDER),BF_FTP_MSG_DIR_RELOAD_START,this,"");
 719 }
 720 ////////////////////////////////////////////////////////////////////////////////////////////
 721 void
 722 BF_GUI_FtpPanel::ActionCopyFrom_Run(BL_String & s_Path,BF_NodeCollection & lo_Node,bool b_Move)    /* [previous][next][first][last][top][bottom][index][help] */
 723 {
 724         if(!poBookmark) return;
 725         BF_GUI_OperRoster_AddTask(new BF_GUI_FtpPanel_UploadTask(s_Path,this,lo_Node,b_Move));
 726 }
 727 ////////////////////////////////////////////////////////////////////////////////////////////
 728 void                                                    
 729 BF_GUI_FtpPanel::ActionCopyTo_Run(BL_String & s_Path,BF_NodeCollection & lo_Node)    /* [previous][next][first][last][top][bottom][index][help] */
 730 {
 731         if(!poBookmark) return;
 732         BF_GUI_OperRoster_AddTask(new BF_GUI_FtpPanel_DownloadTask(s_Path,this,lo_Node,false));         
 733 }
 734 ////////////////////////////////////////////////////////////////////////////////////////////

/* [previous][next][first][last][top][bottom][index][help] */