Selaa lähdekoodia

added progress

Ken Martin 23 vuotta sitten
vanhempi
sitoutus
c751d2ebff

+ 22 - 26
Source/MFCDialog/CMakeSetup.rc

@@ -1,4 +1,4 @@
-//Microsoft Developer Studio generated resource script.
+// Microsoft Visual C++ generated resource script.
 //
 #include "resource.h"
 
@@ -27,18 +27,18 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
 // TEXTINCLUDE
 //
 
-1 TEXTINCLUDE DISCARDABLE 
+1 TEXTINCLUDE 
 BEGIN
     "resource.h\0"
 END
 
-2 TEXTINCLUDE DISCARDABLE 
+2 TEXTINCLUDE 
 BEGIN
     "#include ""afxres.h""\r\n"
     "\0"
 END
 
-3 TEXTINCLUDE DISCARDABLE 
+3 TEXTINCLUDE 
 BEGIN
     "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
     "#define _AFX_NO_OLE_RESOURCES\r\n"
@@ -66,15 +66,15 @@ END
 
 // Icon with lowest ID value placed first to ensure application icon
 // remains consistent on all systems.
-IDR_MAINFRAME           ICON    DISCARDABLE     "res\\CMakeSetupDialog.ico"
+IDR_MAINFRAME           ICON                    "res\\CMakeSetupDialog.ico"
 
 /////////////////////////////////////////////////////////////////////////////
 //
 // Dialog
 //
 
-IDD_ABOUTBOX DIALOG DISCARDABLE  0, 0, 235, 55
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_ABOUTBOX DIALOG  0, 0, 235, 55
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "About CMakeSetup"
 FONT 8, "MS Sans Serif"
 BEGIN
@@ -86,11 +86,11 @@ BEGIN
 END
 
 IDD_CMakeSetupDialog_DIALOG DIALOGEX 0, 0, 446, 241
-STYLE WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
-    WS_SYSMENU | WS_THICKFRAME
+STYLE DS_SETFONT | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | 
+    WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
 EXSTYLE WS_EX_APPWINDOW
 CAPTION "CMakeSetupDialog"
-FONT 8, "MS Sans Serif"
+FONT 8, "MS Sans Serif", 0, 0, 0x1
 BEGIN
     COMBOBOX        IDC_WhereSource,96,6,169,66,CBS_DROPDOWN | 
                     CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
@@ -116,10 +116,11 @@ BEGIN
     PUSHBUTTON      "Help",IDC_HELP_BUTTON,278,223,51,15
     CONTROL         "Show Advanced Values",IDC_AdvancedValues,"Button",
                     BS_AUTOCHECKBOX | WS_TABSTOP,305,28,98,9
+    RTEXT           "Static",IDC_PROGRESS,341,226,100,12,SS_CENTERIMAGE
 END
 
-IDD_CMAKE_HELP_DIALOG DIALOG DISCARDABLE  0, 0, 365, 183
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_CMAKE_HELP_DIALOG DIALOG  0, 0, 365, 183
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "CMake Help"
 FONT 8, "MS Sans Serif"
 BEGIN
@@ -129,7 +130,6 @@ BEGIN
 END
 
 
-#ifndef _MAC
 /////////////////////////////////////////////////////////////////////////////
 //
 // Version
@@ -152,15 +152,13 @@ BEGIN
     BEGIN
         BLOCK "040904B0"
         BEGIN
-            VALUE "CompanyName", "\0"
-            VALUE "FileDescription", "CMakeSetup MFC Application\0"
-            VALUE "FileVersion", "1, 0, 0, 1\0"
-            VALUE "InternalName", "CMakeSetup\0"
-            VALUE "LegalCopyright", "Copyright (C) 2000\0"
-            VALUE "LegalTrademarks", "\0"
-            VALUE "OriginalFilename", "CMakeSetup.EXE\0"
-            VALUE "ProductName", "CMakeSetup Application\0"
-            VALUE "ProductVersion", "1, 0, 0, 1\0"
+            VALUE "FileDescription", "CMakeSetup MFC Application"
+            VALUE "FileVersion", "1, 0, 0, 1"
+            VALUE "InternalName", "CMakeSetup"
+            VALUE "LegalCopyright", "Copyright (C) 2000"
+            VALUE "OriginalFilename", "CMakeSetup.EXE"
+            VALUE "ProductName", "CMakeSetup Application"
+            VALUE "ProductVersion", "1, 0, 0, 1"
         END
     END
     BLOCK "VarFileInfo"
@@ -169,8 +167,6 @@ BEGIN
     END
 END
 
-#endif    // !_MAC
-
 
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -178,7 +174,7 @@ END
 //
 
 #ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE 
+GUIDELINES DESIGNINFO 
 BEGIN
     IDD_ABOUTBOX, DIALOG
     BEGIN
@@ -210,7 +206,7 @@ END
 // String Table
 //
 
-STRINGTABLE DISCARDABLE 
+STRINGTABLE 
 BEGIN
     IDS_ABOUTBOX            "&About CMakeSetup..."
     IDS_CREATESHORTCUT      "&Create shortcut"

+ 17 - 0
Source/MFCDialog/CMakeSetupDialog.cpp

@@ -103,6 +103,20 @@ void MFCMessageCallback(const char* m, const char* title, bool& nomore, void*)
 
 /////////////////////////////////////////////////////////////////////////////
 // CMakeSetupDialog dialog
+void updateProgress(const char *msg, float prog, void *cd)
+{
+  char tmp[1024];
+  if (prog >= 0)
+    {
+    sprintf(tmp,"%s %i%%",msg,(int)(100*prog));
+    }
+  else
+    {
+    sprintf(tmp,"%s",msg);    
+    }
+  CMakeSetupDialog *self = (CMakeSetupDialog *)cd;
+  self->SetDlgItemText(IDC_PROGRESS, tmp);
+}
 
 CMakeSetupDialog::CMakeSetupDialog(const CMakeCommandLineInfo& cmdInfo,
                                    CWnd* pParent /*=NULL*/)
@@ -147,6 +161,8 @@ CMakeSetupDialog::CMakeSetupDialog(const CMakeCommandLineInfo& cmdInfo,
   m_oldCX = -1;
   m_deltaXRemainder = 0;
   m_CMakeInstance = new cmake;
+  m_CMakeInstance->SetProgressCallback(updateProgress, (void *)this);
+  
 }
 
 void CMakeSetupDialog::DoDataExchange(CDataExchange* pDX)
@@ -268,6 +284,7 @@ BOOL CMakeSetupDialog::OnInitDialog()
   sprintf(tmp,"Version %d.%d - %s", cmake::GetMajorVersion(),
           cmake::GetMinorVersion(), cmake::GetReleaseVersion());
   SetDlgItemText(IDC_CMAKE_VERSION, tmp);
+  SetDlgItemText(IDC_PROGRESS, "");
   this->UpdateData(FALSE);
   return TRUE;  // return TRUE  unless you set the focus to a control
 }

+ 3 - 2
Source/MFCDialog/resource.h

@@ -1,5 +1,5 @@
 //{{NO_DEPENDENCIES}}
-// Microsoft Developer Studio generated include file.
+// Microsoft Visual C++ generated include file.
 // Used by CMakeSetup.rc
 //
 #define IDM_ABOUTBOX                    0x0010
@@ -26,6 +26,7 @@
 #define IDC_HELP_BUTTON                 1021
 #define IDC_EDIT1                       1025
 #define IDC_AdvancedValues              1027
+#define IDC_PROGRESS                    1028
 
 // Next default values for new objects
 // 
@@ -33,7 +34,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        134
 #define _APS_NEXT_COMMAND_VALUE         32771
-#define _APS_NEXT_CONTROL_VALUE         1028
+#define _APS_NEXT_CONTROL_VALUE         1029
 #define _APS_NEXT_SYMED_VALUE           102
 #endif
 #endif

+ 16 - 4
Source/cmGlobalGenerator.cxx

@@ -69,23 +69,31 @@ void cmGlobalGenerator::Configure()
   lg->GetMakefile()->MakeStartDirectoriesCurrent();
   
   // now do it
-  this->RecursiveConfigure(lg);
+  this->RecursiveConfigure(lg,0.0f,0.9f);
 
   // after it is all done do a ConfigureFinalPass
   for (i = 0; i < m_LocalGenerators.size(); ++i)
     {
     m_LocalGenerators[i]->ConfigureFinalPass();
+    m_CMakeInstance->UpdateProgress("Configuring", 
+                                    0.9f+0.1f*(i+1.0f)/m_LocalGenerators.size());
     }
+  m_CMakeInstance->UpdateProgress("Configuring done", -1);
 }
 
 // loop through the directories creating cmLocalGenerators and Configure()
-void cmGlobalGenerator::RecursiveConfigure(cmLocalGenerator *lg)
+void cmGlobalGenerator::RecursiveConfigure(cmLocalGenerator *lg, 
+                                           float startProgress, 
+                                           float endProgress)
 {
   // configure the current directory
   lg->Configure();
-  
+                                  
   // get all the subdirectories
   std::vector<std::string> subdirs = lg->GetMakefile()->GetSubDirectories();
+  float progressPiece = (endProgress - startProgress)/(1.0f+subdirs.size());
+  m_CMakeInstance->UpdateProgress("Configuring",
+                                  startProgress + progressPiece);
   
   // for each subdir recurse
   unsigned int i;
@@ -107,7 +115,9 @@ void cmGlobalGenerator::RecursiveConfigure(cmLocalGenerator *lg)
     lg2->GetMakefile()->SetStartDirectory(currentDir.c_str());
     lg2->GetMakefile()->MakeStartDirectoriesCurrent();
   
-    this->RecursiveConfigure(lg2);
+    this->RecursiveConfigure(lg2, 
+                             startProgress + (i+1.0f)*progressPiece,
+                             startProgress + (i+2.0f)*progressPiece);
     }
 }
 
@@ -118,6 +128,8 @@ void cmGlobalGenerator::Generate()
   for (i = 0; i < m_LocalGenerators.size(); ++i)
     {
     m_LocalGenerators[i]->Generate(true);
+    m_CMakeInstance->UpdateProgress("Generating", 
+                                    (i+1.0f)/m_LocalGenerators.size());
     }
 }
 

+ 1 - 1
Source/cmGlobalGenerator.h

@@ -103,7 +103,7 @@ protected:
   std::vector<cmLocalGenerator *> m_LocalGenerators;
 
   ///! used by Configure()
-  void RecursiveConfigure(cmLocalGenerator *lg);
+  void RecursiveConfigure(cmLocalGenerator *lg, float start, float end);
   
 private:
   std::map<cmStdString, bool> m_LanguageEnabled;

+ 17 - 0
Source/cmake.cxx

@@ -41,6 +41,9 @@ cmake::cmake()
   m_InTryCompile = false;
   m_CacheManager = new cmCacheManager;
   m_GlobalGenerator = 0;
+  m_ProgressCallback = 0;
+  m_ProgressCallbackClientData = 0;
+
   this->AddDefaultCommands();
 }
 
@@ -907,3 +910,17 @@ int cmake::LoadCache()
   return 0;
 }
 
+void cmake::SetProgressCallback(ProgressCallback f, void *cd)
+{
+  m_ProgressCallback = f;
+  m_ProgressCallbackClientData = cd;
+}
+
+void cmake::UpdateProgress(const char *msg, float prog)
+{
+  if(m_ProgressCallback && !m_InTryCompile)
+    {
+    (*m_ProgressCallback)(msg, prog, m_ProgressCallbackClientData);
+    return;
+    }
+}

+ 15 - 0
Source/cmake.h

@@ -211,6 +211,19 @@ class cmake
   ///! Parse command line arguments that might set cache values
   void SetCacheArgs(const std::vector<std::string>&);
 
+  typedef  void (*ProgressCallback)(const char*msg, float progress, void *);
+  /**
+   *  Set the function used by GUI's to receive progress updates
+   *  Function gets passed: message as a const char*, a progress 
+   *  amount ranging from 0 to 1.0 and client data. The progress
+   *  number provided may be negative in cases where a message is 
+   *  to be displayed without any progress percentage.
+   */
+  void SetProgressCallback(ProgressCallback f, void* clientData=0);
+
+  ///! this is called by generators to update the progress
+  void UpdateProgress(const char *msg, float prog);
+
 protected:
   typedef std::map<cmStdString, cmCommand*> RegisteredCommandsMap;
   RegisteredCommandsMap m_Commands;
@@ -235,6 +248,8 @@ protected:
   int AddCMakePaths(const char *arg0);
 
 private:
+  ProgressCallback m_ProgressCallback;
+  void* m_ProgressCallbackClientData;
   bool m_Verbose;
   bool m_Local;
   bool m_InTryCompile;