Ejemplo n.º 1
0
const char* hsFile::GetName()
{
    return FindNameInPath(this->GetPathAndName());
}
// Поток приложения вызывает WindowProc всякий раз, когда для окна есть сообщение.
// Window - окно, Message - сообщение, *_parameter - данные, которые передаются вместе с сообщением.
MRESULT EXPENTRY VIOWindows_SSH_Prompts_WndProc( HWND Window, ULONG Message, MPARAM First_parameter, MPARAM Second_parameter )
{
 // Указатель на страницу.
 PPAGE Page = Enhancer.Pages.VIOWindows_SSH_prompts;

 // Проверяем сообщение.
 switch( Message )
  {
   // Отображаем настройки.
   case SM_SHOW_SETTINGS:
    {
     BYTE Value = 0; if( VIOMenuManager.Settings.SSH_Commands ) Value = 1;
     WinSendDlgItemMsg( Window, VIOWindows_SSH_Prompts.Settings.SSH_Commands_button_ID, BM_SETCHECK, MPFROMLONG( Value ), 0 );

     WinEnableControl( Window, VIOWindows_SSH_Prompts.Settings.Use_AltTilde_button_ID, Value );

     WinEnableWindow( WinWindowFromID( WinWindowFromID( WinWindowFromID( Window, VIOWindows_SSH_Prompts.Settings.FileList_Container_ID ), VIOWindows_SSH_Prompts.Settings.SelectBox_ID ), VIOWindows_SSH_Prompts.Settings.File_list_ID ), Value );
     WinEnableWindow( WinWindowFromID( WinWindowFromID( WinWindowFromID( Window, VIOWindows_SSH_Prompts.Settings.FileList_Container_ID ), VIOWindows_SSH_Prompts.Settings.AddRemove_ID ), VIOWindows_SSH_Prompts.Settings.File_Add_ID ), Value );
     WinEnableWindow( WinWindowFromID( WinWindowFromID( WinWindowFromID( Window, VIOWindows_SSH_Prompts.Settings.FileList_Container_ID ), VIOWindows_SSH_Prompts.Settings.AddRemove_ID ), VIOWindows_SSH_Prompts.Settings.File_Remove_ID ), Value );

     Value = 0; if( VIOMenuManager.Settings.Use_AltTilde ) Value = 1;
     WinSendDlgItemMsg( Window, VIOWindows_SSH_Prompts.Settings.Use_AltTilde_button_ID, BM_SETCHECK, MPFROMLONG( Value ), 0 );
    }
   return 0;

   // Распознаем настройки.
   case SM_UPDATE_LIST:
    {
     HWND List_window = WinWindowFromID( WinWindowFromID( WinWindowFromID( Window, VIOWindows_SSH_Prompts.Settings.FileList_Container_ID ), VIOWindows_SSH_Prompts.Settings.SelectBox_ID ), VIOWindows_SSH_Prompts.Settings.File_list_ID );

     WinSendMsg( List_window, LM_DELETEALL, 0, 0 );

     for( INT Count = 0; Count < MAX_VIO_MENU_FILES; Count ++ )
      if( VIOMenuManager.Settings.Files[ Count ][ 0 ] != 0 )
       WinSendMsg( List_window, LM_INSERTITEM, MPFROMSHORT( LIT_END ), MPFROMP( FindNameInPath( VIOMenuManager.Settings.Files[ Count ] ) ) );
    }
   return 0;

   // Следим за полями ввода.
   case WM_CONTROL:
    {
     ULONG WM_Control_Window_ID = SHORT1FROMMP( First_parameter );
     ULONG WM_Control_Action_ID = SHORT2FROMMP( First_parameter );

     if( WM_Control_Window_ID == VIOWindows_SSH_Prompts.Settings.SSH_Commands_button_ID )
      {
       switch( WM_Control_Action_ID )
        {
         case BN_CLICKED:
         case BN_DBLCLICKED:
          {
           ULONG Button_is_checked = (ULONG) WinSendDlgItemMsg( Window, WM_Control_Window_ID, BM_QUERYCHECK, 0, 0 );

           if( Button_is_checked ) VIOMenuManager.Settings.SSH_Commands = 0;
           else VIOMenuManager.Settings.SSH_Commands = 1;

           BroadcastMessage( SM_SHOW_SETTINGS );
          }
         break;
        }
      }

     if( WM_Control_Window_ID == VIOWindows_SSH_Prompts.Settings.Use_AltTilde_button_ID )
      {
       switch( WM_Control_Action_ID )
        {
         case BN_CLICKED:
         case BN_DBLCLICKED:
          {
           ULONG Button_is_checked = (ULONG) WinSendDlgItemMsg( Window, WM_Control_Window_ID, BM_QUERYCHECK, 0, 0 );

           if( Button_is_checked ) VIOMenuManager.Settings.Use_AltTilde = 0;
           else VIOMenuManager.Settings.Use_AltTilde = 1;

           BroadcastMessage( SM_SHOW_SETTINGS );
          }
         break;
        }
      }
    }
   return 0;

   // Обрабатываем нажатия на кнопки.
   case WM_COMMAND:
    {
     ULONG WM_Control_Button_ID = SHORT1FROMMP( First_parameter );

     if( WM_Control_Button_ID == VIOWindows_SSH_Prompts.Settings.File_Add_ID )
      {
       BYTE List_is_full = 1;
       for( INT Count = 0; Count < MAX_VIO_MENU_FILES; Count ++ )
        if( VIOMenuManager.Settings.Files[ Count ][ 0 ] == 0 ) { List_is_full = 0; break; }

       if( List_is_full ) return 0;

       FILEDLG Parameters; HWND OpenFile_window;

       bzero( &Parameters, sizeof( FILEDLG ) );
       Parameters.cbSize = sizeof( FILEDLG );
       Parameters.fl = FDS_OPEN_DIALOG | FDS_CENTER;

       LONG Code_page = Enhancer.Code_page;

       if( Code_page == RUSSIAN ) Parameters.pszTitle = StrConst_RU_Pages_VIOWindows_SSH_prompts_Dialog;
       else Parameters.pszTitle = StrConst_EN_Pages_VIOWindows_SSH_prompts_Dialog;

       if( VIOWindows_SSH_Prompts.RTSettings.FileDlg_path[ 0 ] == 0 )
        {
         ULONG Current_drive = 0; ULONG Drive_map = 0;
         DosQueryCurrentDisk( &Current_drive, &Drive_map );
         Parameters.szFullFile[ 0 ] = (CHAR) Current_drive + 64;
         Parameters.szFullFile[ 1 ] = 0;
         strcat( Parameters.szFullFile, ":\\*.txt" );
        }
       else
        {
         strcpy( Parameters.szFullFile, VIOWindows_SSH_Prompts.RTSettings.FileDlg_path );
         strcat( Parameters.szFullFile, "\\*.txt" );
        }

       OpenFile_window = WinFileDlg( HWND_DESKTOP, Window, &Parameters );

       if( OpenFile_window != NULLHANDLE ) if( Parameters.lReturn == DID_OK )
        if( stristr( ".txt", Parameters.szFullFile ) )
         {
          BYTE Already_present = 0;
          for( INT Count = 0; Count < MAX_VIO_MENU_FILES; Count ++ )
           if( VIOMenuManager.Settings.Files[ Count ][ 0 ] != 0 )
            if( stric( VIOMenuManager.Settings.Files[ Count ], Parameters.szFullFile ) )
             {
              Already_present = 1;
              break;
             }

          if( !Already_present )
           {
            for( Count = 0; Count < MAX_VIO_MENU_FILES; Count ++ )
             if( VIOMenuManager.Settings.Files[ Count ][ 0 ] == 0 )
              {
               strncpy( VIOMenuManager.Settings.Files[ Count ], Parameters.szFullFile, SIZE_OF_PATH );
               break;
              }

            BroadcastRSMessages();
           }

          strncpy( VIOWindows_SSH_Prompts.RTSettings.FileDlg_path, Parameters.szFullFile, SIZE_OF_PATH );
          CutNameInPath( VIOWindows_SSH_Prompts.RTSettings.FileDlg_path );
         }
      }

     if( WM_Control_Button_ID == VIOWindows_SSH_Prompts.Settings.File_Remove_ID )
      {
       HWND List_window = WinWindowFromID( WinWindowFromID( WinWindowFromID( Window, VIOWindows_SSH_Prompts.Settings.FileList_Container_ID ), VIOWindows_SSH_Prompts.Settings.SelectBox_ID ), VIOWindows_SSH_Prompts.Settings.File_list_ID );

       INT Selected_string = (INT) WinSendMsg( List_window, LM_QUERYSELECTION, MPFROMLONG( LIT_FIRST ), MPFROMLONG( 0 ) );
       if( Selected_string == LIT_NONE ) return 0;

       WinSendMsg( List_window, LM_DELETEITEM, MPFROMLONG( Selected_string ), 0 );

       for( INT Count = Selected_string; Count < MAX_VIO_MENU_FILES - 1; Count ++ )
        memcpy( VIOMenuManager.Settings.Files[ Count ], VIOMenuManager.Settings.Files[ Count + 1 ], SIZE_OF_PATH );

       bzero( VIOMenuManager.Settings.Files[ MAX_VIO_MENU_FILES - 1 ], SIZE_OF_PATH );

       WinPostMsg( Window, WM_COMMAND, (MPARAM) OK_BUTTON_ID, 0 );
      }

     if( WM_Control_Button_ID == OK_BUTTON_ID )
      {
       CHAR Settings_file_name[ SIZE_OF_PATH ] = ""; GetSettingsFileName( Settings_file_name );
       HINI Ini_file = OpenIniProfile( Enhancer.Application, Settings_file_name );

       if( Ini_file )
        {
         PrfWriteProfileData( Ini_file, "Settings", "SSH Commands", &VIOMenuManager.Settings.SSH_Commands, sizeof( BYTE ) );
         PrfWriteProfileData( Ini_file, "Settings", "Use AltTilde", &VIOMenuManager.Settings.Use_AltTilde, sizeof( BYTE ) );

         PrfWriteProfileData( Ini_file, "SSH prompts", NULL, NULL, 0 );

         for( INT Count = 0; Count < MAX_VIO_MENU_FILES; Count ++ )
          {
           if( VIOMenuManager.Settings.Files[ Count ][ 0 ] != 0 )
            {
             CHAR Number[ 4 ] = ""; itoa( Count, Number, 10 );
             CHAR Ini_record_name[ SIZE_OF_NAME ] = "File "; strcat( Ini_record_name, Number );

             PrfWriteProfileData( Ini_file, "SSH prompts", Ini_record_name, VIOMenuManager.Settings.Files[ Count ], strlen( VIOMenuManager.Settings.Files[ Count ] ) + 1 );
            }
          }

         PrfCloseProfile( Ini_file );

         BroadcastRSMessages();
         NiceReadSettings();
        }
      }

     if( WM_Control_Button_ID == PD_BUTTON_ID )
      {
       BYTE Files_are_present = 0;

       for( INT Count = 0; Count < MAX_VIO_MENU_FILES; Count ++ )
        if( VIOMenuManager.Settings.Files[ Count ][ 0 ] != 0 )
         {
          Files_are_present = 1;
          break;
         }

       if( Files_are_present )
        {
         CHAR String[ 256 ] = ""; LONG Reply = 0;
         BYTE Clear_list = 0;

         LONG Code_page = Enhancer.Code_page;

         if( Code_page == RUSSIAN ) strcpy( String, StrConst_RU_Pages_VIOWindows_SSH_prompts_Question );
         else strcpy( String, StrConst_EN_Pages_VIOWindows_SSH_prompts_Question );

         {
          CHAR Title[ SIZE_OF_TITLE ] = ""; GetEnhancerWindowTitle( Title );
          Reply = WinMessageBox( HWND_DESKTOP, HWND_DESKTOP, String, Title, 0, MB_YESNO );
         }

         if( Reply == MBID_YES ) Clear_list = 1;

         if( Clear_list )
          {
           CHAR Empty_path[ SIZE_OF_PATH ] = ""; bzero( Empty_path, SIZE_OF_PATH );

           for( Count = 0; Count < MAX_VIO_MENU_FILES; Count ++ )
            memcpy( VIOMenuManager.Settings.Files[ Count ], Empty_path, SIZE_OF_PATH );

           WinPostMsg( Window, SM_UPDATE_LIST, 0, 0 );
          }
        }

       if( Page->SetDefSettings ) Page->SetDefSettings( Page->Settings_to_show );
       if( Page->SetDefSettings_Ext1 ) Page->SetDefSettings_Ext1( Page->Settings_to_show );
       if( Page->SetDefSettings_Ext2 ) Page->SetDefSettings_Ext2( Page->Settings_to_show );
       if( Page->SetDefSettings_Ext3 ) Page->SetDefSettings_Ext3( Page->Settings_to_show );

       WinPostMsg( Window, WM_COMMAND, (MPARAM) OK_BUTTON_ID, 0 );
      }

     if( WM_Control_Button_ID == HP_BUTTON_ID )
      {
       Help( Page->Settings_to_show, Enhancer.Code_page );
      }
    }
   return 0;
  }

 // Возврат.
 return WinDefWindowProc( Window, Message, First_parameter, Second_parameter );
}