]> git.saurik.com Git - wxWidgets.git/blobdiff - utils/screenshotgen/src/screenshot_main.cpp
change generic ints to enums in wxDC (closes #9959)
[wxWidgets.git] / utils / screenshotgen / src / screenshot_main.cpp
index 7181cf9d5f704ce4ef7d8026ce959e12414cbd90..46e28632fbdd059be86fa9d4dbeb7aad7f19cfcb 100644 (file)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        screenshot_main.cpp
 /////////////////////////////////////////////////////////////////////////////
 // Name:        screenshot_main.cpp
-// Purpose:     Implement the Application Frame
+// Purpose:     Implements the window containing all controls.
 // Author:      Utensil Candel (UtensilCandel@@gmail.com)
 // RCS-ID:      $Id$
 // Licence:     wxWindows license
 // Author:      Utensil Candel (UtensilCandel@@gmail.com)
 // RCS-ID:      $Id$
 // Licence:     wxWindows license
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-    #pragma hdrstop
+#pragma hdrstop
 #endif
 
 #endif
 
-// for all others, include the necessary headers
+// for all others, include the necessary headers wxWidgets headers)
 #ifndef WX_PRECOMP
 #ifndef WX_PRECOMP
-    #include <wx/filename.h>
-    #include <wx/dcbuffer.h>
-    #include <wx/colordlg.h>
-    #include <wx/fontdlg.h>
-    #include <wx/filedlg.h>
-    #include <wx/dirdlg.h>
+#include "wx/wx.h"
 #endif
 
 #endif
 
-#include <wx/dir.h>
+#include "wx/aboutdlg.h"
+#include "wx/dir.h"
+#include "wx/filesys.h"
+
 #include "screenshot_main.h"
 #include "ctrlmaskout.h"
 #include "autocapture.h"
 
 #include "screenshot_main.h"
 #include "ctrlmaskout.h"
 #include "autocapture.h"
 
-
-// Global helper functions
-enum wxBuildInfoFormat
-{
-    short_f,
-    long_f
-};
-
-wxString wxbuildinfo(wxBuildInfoFormat format)
-{
-    wxString wxbuild(wxVERSION_STRING);
-
-    if (format == long_f )
-    {
-    #if defined(__WXMSW__)
-        wxbuild << _T("-Windows");
-    #elif defined(__WXMAC__)
-        wxbuild << _T("-Mac");
-    #elif defined(__UNIX__)
-        wxbuild << _T("-Linux");
-    #endif
-
-    #if wxUSE_UNICODE
-        wxbuild << _T("-Unicode build");
-    #else
-        wxbuild << _T("-ANSI build");
-    #endif // wxUSE_UNICODE
-    }
-
-    return wxbuild;
-}
+#include "bitmaps/play.xpm"
+#include "bitmaps/stop.xpm"
 
 
 // ----------------------------------------------------------------------------
 
 
 // ----------------------------------------------------------------------------
-// wxScreenshotFrame
+// ScreenshotFrame
 // ----------------------------------------------------------------------------
 
 // ----------------------------------------------------------------------------
 
-wxScreenshotFrame::wxScreenshotFrame(wxFrame *frame)
+ScreenshotFrame::ScreenshotFrame(wxFrame *frame)
 #if SCREENSHOTGEN_USE_AUI
 : AuiGUIFrame(frame)
 #else
 #if SCREENSHOTGEN_USE_AUI
 : AuiGUIFrame(frame)
 #else
@@ -73,12 +42,11 @@ wxScreenshotFrame::wxScreenshotFrame(wxFrame *frame)
 #endif
 {
 #if wxUSE_STATUSBAR
 #endif
 {
 #if wxUSE_STATUSBAR
-    statusBar->SetStatusText(_("Hello wxWidgets user!"), 0);
-    // statusBar->SetStatusText(wxbuildinfo(short_f), 1);
+    statusBar->SetStatusText(_("Welcome to the Automatic Screenshot Generator!"), 0);
 #endif
 
 #endif
 
-    // We will hold one during the whole life time of the main frame
-    m_maskout = new wxCtrlMaskOut();
+    // We will hold one ctrlmaskout during the whole life time of the main frame
+    m_maskout = new CtrlMaskOut();
 
     // At the begining, we are not specifying the rect region
     capturingRect = false;
 
     // At the begining, we are not specifying the rect region
     capturingRect = false;
@@ -92,22 +60,22 @@ wxScreenshotFrame::wxScreenshotFrame(wxFrame *frame)
 #endif
 }
 
 #endif
 }
 
-wxScreenshotFrame::~wxScreenshotFrame()
+ScreenshotFrame::~ScreenshotFrame()
 {
     delete m_maskout;
 }
 
 /*
 {
     delete m_maskout;
 }
 
 /*
-    Do some further customization on some controls generated by wxFormBuilder.
+    Do some further customization on some controls.
 
 
-    Some controls can only be generated by wxFormBuilder without further
-    customization, e.g. unable to load a richtext file in a wxRichtextCtrl
-    during initialization.
-
-    Those customizations will be done here.
+    NB: under wxGTK for the radio button "unchecked" to be unchecked, it's
+        important to put the wxRB_GROUP style on the first wxRadioButton
+        (the one "checked") and no flags on the second one.
 */
 */
-void wxScreenshotFrame::InitFBControls()
+void ScreenshotFrame::InitFBControls()
 {
 {
+    m_scrollBar1->SetScrollbar(50, 1, 100, 1);
+
     // Do the default selection for wxComboBox
     m_comboBox1->Select(0);
 
     // Do the default selection for wxComboBox
     m_comboBox1->Select(0);
 
@@ -118,71 +86,89 @@ void wxScreenshotFrame::InitFBControls()
 
     // Add a root and some nodes for wxTreeCtrl
     wxTreeItemId root = m_treeCtrl1->AddRoot(_("wxTreeCtrl"));
 
     // Add a root and some nodes for wxTreeCtrl
     wxTreeItemId root = m_treeCtrl1->AddRoot(_("wxTreeCtrl"));
-
     m_treeCtrl1->AppendItem(root, _("Node1"));
     m_treeCtrl1->AppendItem(root, _("Node1"));
-
     wxTreeItemId node2 = m_treeCtrl1->AppendItem(root, _("Node2"));
     m_treeCtrl1->AppendItem(node2, _("Node3"));
     wxTreeItemId node2 = m_treeCtrl1->AppendItem(root, _("Node2"));
     m_treeCtrl1->AppendItem(node2, _("Node3"));
-
     m_treeCtrl1->ExpandAll();
 
     // Add items into wxListCtrl
     m_treeCtrl1->ExpandAll();
 
     // Add items into wxListCtrl
-    for(long index = 0; index < 5; index++)
-        m_listCtrl1->InsertItem( index, wxString::Format(_("Item\n(0,%d)"),index));
+    m_listCtrl1->InsertColumn(0, "Names");
+    m_listCtrl1->InsertColumn(1, "Values");
+    for(long index = 0; index < 5; index++) {
+        m_listCtrl1->InsertItem( index, wxString::Format(_("Item%d"),index));
+        m_listCtrl1->SetItem(index, 1, wxString::Format("%d", index));
+    }
+
+    // Init file and dir pickers
+    wxString file, dir;
+#if defined(__WXMSW__)
+    file = "C:\\Windows\\explorer.exe";
+    dir = "C:\\Windows";
+#else
+    file = "/bin/bash";
+    dir = "/home";
+#endif
+    m_filePicker1->SetPath(file);
+    m_dirPicker1->SetPath(dir);
 
     // Check the first item in wxCheckListBox
     m_checkList1->Check(0);
 
     // Load richtext.xml into wxRichtextCtrl
     m_richText1->LoadFile(_T("richtext.xml"));
 
     // Check the first item in wxCheckListBox
     m_checkList1->Check(0);
 
     // Load richtext.xml into wxRichtextCtrl
     m_richText1->LoadFile(_T("richtext.xml"));
-    m_richText1->ShowPosition(335);
+    //m_richText1->ShowPosition(335);
+
+    // select first page in the main notebook ctrl
+    m_notebook1->ChangeSelection(0);
+
+    // set minimum size hints
+    GetSizer()->SetSizeHints(this);
+
+    // add bitmaps to the menus
+    m_menuCapRect->SetBitmap( wxIcon(play_xpm) );
+    m_menuEndCapRect->SetBitmap( wxIcon(stop_xpm) );
 }
 
 
 
 // ----------------------------------------------------------------------------
 }
 
 
 
 // ----------------------------------------------------------------------------
-// wxScreenshotFrame - event handlers
+// ScreenshotFrame - event handlers
 // ----------------------------------------------------------------------------
 
 // ----------------------------------------------------------------------------
 
-void wxScreenshotFrame::OnClose(wxCloseEvent& WXUNUSED(event))
+void ScreenshotFrame::OnClose(wxCloseEvent& WXUNUSED(event))
 {
     Destroy();
 }
 
 {
     Destroy();
 }
 
-void wxScreenshotFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
+void ScreenshotFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
 {
     Destroy();
 }
 
 {
     Destroy();
 }
 
-void wxScreenshotFrame::OnSeeScreenshots(wxCommandEvent& WXUNUSED(event))
+void ScreenshotFrame::OnSeeScreenshots(wxCommandEvent& WXUNUSED(event))
 {
     wxString defaultDir = m_maskout->GetDefaultDirectory();
 
     // Check if defaultDir already existed
 {
     wxString defaultDir = m_maskout->GetDefaultDirectory();
 
     // Check if defaultDir already existed
-    if(!wxDirExists(defaultDir))
+    if (!wxDirExists(defaultDir))
         wxMkdir(defaultDir);
 
     // Use the native file browser to open defaultDir
         wxMkdir(defaultDir);
 
     // Use the native file browser to open defaultDir
-    #if defined(__WXMSW__)
-        wxExecute(_T("explorer ") + defaultDir);
-    #elif defined(__UNIX__) // nautilus is the GNOME file browser but works also for KDE
-        wxExecute(_T("nautilus ") + defaultDir);
-    #elif defined(_WXMAC_)
-        wxExecute(_T("open ") + defaultDir);
-    #else
-        wxMessageBox(_("Sorry, not Implemeted for this platform yet! Please open subdirectory \"")
-                    + defaultDir
-                    + _("\" manually.") );
-    #endif
+    wxLaunchDefaultBrowser(wxFileSystem::FileNameToURL(defaultDir));
 }
 
 }
 
-void wxScreenshotFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
+void ScreenshotFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
 {
 {
-    wxString msg = wxbuildinfo(long_f);
-    wxMessageBox(msg, _("Welcome to..."));
+    wxAboutDialogInfo info;
+    info.SetName(_("Automatic Screenshot Generator"));
+    info.SetVersion(_("1.0"));
+    info.SetDescription(_("This utility automatically creates screenshots of wxWidgets controls for use in wxWidgets documentation."));
+    info.SetCopyright(_T("(C) 2008 Utensil Candel"));
+
+    wxAboutBox(info);
 }
 
 }
 
-void wxScreenshotFrame::OnCaptureFullScreen(wxCommandEvent& WXUNUSED(event))
+void ScreenshotFrame::OnCaptureFullScreen(wxCommandEvent& WXUNUSED(event))
 {
     // Create a DC for the whole screen area
     wxScreenDC dcScreen;
 {
     // Create a DC for the whole screen area
     wxScreenDC dcScreen;
@@ -192,9 +178,14 @@ void wxScreenshotFrame::OnCaptureFullScreen(wxCommandEvent& WXUNUSED(event))
     dcScreen.GetSize(&screenWidth, &screenHeight);
 
     m_maskout->Capture(0, 0, screenWidth, screenHeight, _T("fullscreen"));
     dcScreen.GetSize(&screenWidth, &screenHeight);
 
     m_maskout->Capture(0, 0, screenWidth, screenHeight, _T("fullscreen"));
+
+    // Inform the user
+    wxMessageBox(_("A screenshot of the entire screen was saved as:\n\n  ") +
+                 m_maskout->GetDefaultDirectoryAbsPath() + wxFileName::GetPathSeparator() + "fullscreen.png",
+                 _("Full screen capture"), wxICON_INFORMATION|wxOK, this);
 }
 
 }
 
-void wxScreenshotFrame::OnCaptureRect(wxCommandEvent& WXUNUSED(event))
+void ScreenshotFrame::OnCaptureRect(wxCommandEvent& WXUNUSED(event))
 {
     capturingRect = true;
     wxMenuBar * menubar = this->GetMenuBar();
 {
     capturingRect = true;
     wxMenuBar * menubar = this->GetMenuBar();
@@ -203,12 +194,12 @@ void wxScreenshotFrame::OnCaptureRect(wxCommandEvent& WXUNUSED(event))
 
     wxWindow * thePage = m_notebook1->GetPage(m_notebook1->GetSelection());
 
 
     wxWindow * thePage = m_notebook1->GetPage(m_notebook1->GetSelection());
 
-    thePage->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( wxCtrlMaskOut::OnLeftButtonDown ), NULL, m_maskout);
-    thePage->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( wxCtrlMaskOut::OnLeftButtonUp ), NULL, m_maskout);
-    thePage->Connect( wxEVT_MOTION, wxMouseEventHandler( wxCtrlMaskOut::OnMouseMoving ), NULL, m_maskout);
+    thePage->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( CtrlMaskOut::OnLeftButtonDown ), NULL, m_maskout);
+    thePage->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( CtrlMaskOut::OnLeftButtonUp ), NULL, m_maskout);
+    thePage->Connect( wxEVT_MOTION, wxMouseEventHandler( CtrlMaskOut::OnMouseMoving ), NULL, m_maskout);
 }
 
 }
 
-void wxScreenshotFrame::OnEndCaptureRect(wxCommandEvent& WXUNUSED(event))
+void ScreenshotFrame::OnEndCaptureRect(wxCommandEvent& WXUNUSED(event))
 {
     capturingRect = false;
     wxMenuBar * menubar = this->GetMenuBar();
 {
     capturingRect = false;
     wxMenuBar * menubar = this->GetMenuBar();
@@ -217,12 +208,12 @@ void wxScreenshotFrame::OnEndCaptureRect(wxCommandEvent& WXUNUSED(event))
 
     wxWindow * thePage = m_notebook1->GetPage(m_notebook1->GetSelection());
 
 
     wxWindow * thePage = m_notebook1->GetPage(m_notebook1->GetSelection());
 
-    thePage->Disconnect( wxEVT_LEFT_DOWN, wxMouseEventHandler( wxCtrlMaskOut::OnLeftButtonDown ), NULL, m_maskout);
-    thePage->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( wxCtrlMaskOut::OnLeftButtonUp ), NULL, m_maskout);
-    thePage->Disconnect( wxEVT_MOTION, wxMouseEventHandler( wxCtrlMaskOut::OnMouseMoving ), NULL, m_maskout);
+    thePage->Disconnect( wxEVT_LEFT_DOWN, wxMouseEventHandler( CtrlMaskOut::OnLeftButtonDown ), NULL, m_maskout);
+    thePage->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( CtrlMaskOut::OnLeftButtonUp ), NULL, m_maskout);
+    thePage->Disconnect( wxEVT_MOTION, wxMouseEventHandler( CtrlMaskOut::OnMouseMoving ), NULL, m_maskout);
 }
 
 }
 
-void wxScreenshotFrame::OnNotebookPageChanging(
+void ScreenshotFrame::OnNotebookPageChanging(
 #if SCREENSHOTGEN_USE_AUI
 wxAuiNotebookEvent& event
 #else
 #if SCREENSHOTGEN_USE_AUI
 wxAuiNotebookEvent& event
 #else
@@ -238,14 +229,14 @@ wxNotebookEvent& event
 
     wxWindow * thePage = m_notebook1->GetPage(event.GetOldSelection());
 
 
     wxWindow * thePage = m_notebook1->GetPage(event.GetOldSelection());
 
-    thePage->Disconnect( wxEVT_LEFT_DOWN, wxMouseEventHandler( wxCtrlMaskOut::OnLeftButtonDown ), NULL, m_maskout);
-    thePage->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( wxCtrlMaskOut::OnLeftButtonUp ), NULL, m_maskout);
-    thePage->Disconnect( wxEVT_MOTION, wxMouseEventHandler( wxCtrlMaskOut::OnMouseMoving ), NULL, m_maskout);
+    thePage->Disconnect( wxEVT_LEFT_DOWN, wxMouseEventHandler( CtrlMaskOut::OnLeftButtonDown ), NULL, m_maskout);
+    thePage->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( CtrlMaskOut::OnLeftButtonUp ), NULL, m_maskout);
+    thePage->Disconnect( wxEVT_MOTION, wxMouseEventHandler( CtrlMaskOut::OnMouseMoving ), NULL, m_maskout);
 
     event.Skip();
 }
 
 
     event.Skip();
 }
 
-void wxScreenshotFrame::OnNotebookPageChanged(
+void ScreenshotFrame::OnNotebookPageChanged(
 #if SCREENSHOTGEN_USE_AUI
 wxAuiNotebookEvent& event
 #else
 #if SCREENSHOTGEN_USE_AUI
 wxAuiNotebookEvent& event
 #else
@@ -253,7 +244,7 @@ wxNotebookEvent& event
 #endif
 )
 {
 #endif
 )
 {
-    if(!capturingRect)
+    if (!capturingRect)
     {
         event.Skip();
         return;
     {
         event.Skip();
         return;
@@ -261,40 +252,44 @@ wxNotebookEvent& event
 
     wxWindow *thePage = m_notebook1->GetPage(event.GetSelection());
 
 
     wxWindow *thePage = m_notebook1->GetPage(event.GetSelection());
 
-    thePage->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( wxCtrlMaskOut::OnLeftButtonDown ), NULL, m_maskout);
-    thePage->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( wxCtrlMaskOut::OnLeftButtonUp ), NULL, m_maskout);
-    thePage->Connect( wxEVT_MOTION, wxMouseEventHandler( wxCtrlMaskOut::OnMouseMoving ), NULL, m_maskout);
+    thePage->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( CtrlMaskOut::OnLeftButtonDown ), NULL, m_maskout);
+    thePage->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( CtrlMaskOut::OnLeftButtonUp ), NULL, m_maskout);
+    thePage->Connect( wxEVT_MOTION, wxMouseEventHandler( CtrlMaskOut::OnMouseMoving ), NULL, m_maskout);
 
     event.Skip();
 }
 
 
     event.Skip();
 }
 
-void wxScreenshotFrame::OnCaptureAllControls(wxCommandEvent& WXUNUSED(event))
+void ScreenshotFrame::OnCaptureAllControls(wxCommandEvent& WXUNUSED(event))
 {
 {
-    wxString dir = wxT("screenshots");
+    wxString dir = m_maskout->GetDefaultDirectoryAbsPath();
 
 
+    // check if there are other screenshots taken before
     if (wxFileName::DirExists(dir))
     {
     if (wxFileName::DirExists(dir))
     {
-        int choice = wxMessageBox(_("It seems that you have already generated some screenshots.\nClick YES to delete them all(recommended), NO to preserve them\nCANCEL to cancel this auto-capture(so you can save them elsewhere)."),
-                            _("Do you want to delete the existing screenshots?"),
+        int choice = wxMessageBox(_("It seems that you have already generated some screenshots.\n\nClick YES to delete them all (recommended) or NO to preserve them.\nClick CANCEL to cancel this auto-capture operation."),
+                            _("Delete existing screenshots?"),
                             wxYES_NO|wxCANCEL|wxICON_QUESTION, this);
         switch(choice)
         {
                             wxYES_NO|wxCANCEL|wxICON_QUESTION, this);
         switch(choice)
         {
-            case wxYES :
+            case wxYES:
             {
                 wxArrayString files;
                 wxDir::GetAllFiles(dir, &files, wxT("*.png"), wxDIR_FILES);
 
             {
                 wxArrayString files;
                 wxDir::GetAllFiles(dir, &files, wxT("*.png"), wxDIR_FILES);
 
+                // remove all PNG files from the screenshots folder
                 int n = files.GetCount();
                 for (int i = 0; i < n; ++i)
                     wxRemoveFile(files[i]);
             }
             break;
 
                 int n = files.GetCount();
                 for (int i = 0; i < n; ++i)
                     wxRemoveFile(files[i]);
             }
             break;
 
-            case wxNO : break;
-            case wxCANCEL : return;
+            case wxNO: break;
+            case wxCANCEL: return;
         }
     }
 
         }
     }
 
+    // proceed with the automatic screenshot capture
+
     this->Maximize();
 
     AutoCaptureMechanism auto_cap(m_notebook1);
     this->Maximize();
 
     AutoCaptureMechanism auto_cap(m_notebook1);
@@ -311,7 +306,7 @@ void wxScreenshotFrame::OnCaptureAllControls(wxCommandEvent& WXUNUSED(event))
     auto_cap.RegisterControl(m_slider1);
     auto_cap.RegisterControl(m_toggleBtn1, AJ_Union);
     auto_cap.RegisterControl(m_toggleBtn2, AJ_UnionEnd);
     auto_cap.RegisterControl(m_slider1);
     auto_cap.RegisterControl(m_toggleBtn1, AJ_Union);
     auto_cap.RegisterControl(m_toggleBtn2, AJ_UnionEnd);
-    auto_cap.RegisterControl(m_hyperlink1);
+    auto_cap.RegisterControl(m_hyperlink1, wxT("wxHyperlinkCtrl"));
     auto_cap.RegisterControl(m_spinCtrl1, AJ_RegionAdjust);
     auto_cap.RegisterControl(m_spinBtn1);
     auto_cap.RegisterControl(m_scrollBar1);
     auto_cap.RegisterControl(m_spinCtrl1, AJ_RegionAdjust);
     auto_cap.RegisterControl(m_spinBtn1);
     auto_cap.RegisterControl(m_scrollBar1);
@@ -356,6 +351,6 @@ void wxScreenshotFrame::OnCaptureAllControls(wxCommandEvent& WXUNUSED(event))
 
     auto_cap.CaptureAll();
 
 
     auto_cap.CaptureAll();
 
-    wxMessageBox(_("All screenshots are generated successfully.\nSelect \"File->See screenshots\" to see them."),
-                 _("Success"), wxOK, this);
+    wxMessageBox(_("All screenshots were generated successfully in the folder:\n  ") + dir,
+                 _("Success"), wxOK|wxICON_INFORMATION, this);
 }
 }