X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0d5eda9ccdc4c24ac09f58bd0cb6a0709e9ead72..7a36d9c7c1a077ba7e05c248bcf19c4c9bb1356f:/utils/screenshotgen/src/screenshot_main.cpp diff --git a/utils/screenshotgen/src/screenshot_main.cpp b/utils/screenshotgen/src/screenshot_main.cpp index 7181cf9d5f..9dd085e648 100644 --- a/utils/screenshotgen/src/screenshot_main.cpp +++ b/utils/screenshotgen/src/screenshot_main.cpp @@ -1,188 +1,79 @@ ///////////////////////////////////////////////////////////////////////////// // 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 +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ - #pragma hdrstop +#pragma hdrstop #endif -// for all others, include the necessary headers +// for all others, include the necessary headers wxWidgets headers) #ifndef WX_PRECOMP - #include - #include - #include - #include - #include - #include +#include "wx/wx.h" #endif -#include +#include "wx/aboutdlg.h" +#include "wx/dir.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; -} - - // ---------------------------------------------------------------------------- -// wxScreenshotFrame +// ScreenshotFrame // ---------------------------------------------------------------------------- -wxScreenshotFrame::wxScreenshotFrame(wxFrame *frame) -#if SCREENSHOTGEN_USE_AUI -: AuiGUIFrame(frame) -#else -: GUIFrame(frame) -#endif +ScreenshotFrame::ScreenshotFrame(wxFrame *frame) : GUIFrame(frame) { #if wxUSE_STATUSBAR - statusBar->SetStatusText(_("Hello wxWidgets user!"), 0); - // statusBar->SetStatusText(wxbuildinfo(short_f), 1); -#endif - - // We will hold one during the whole life time of the main frame - m_maskout = new wxCtrlMaskOut(); - - // At the begining, we are not specifying the rect region - capturingRect = false; - - // Do some further customization on some controls generated by wxFormBuilder - InitFBControls(); -#if SCREENSHOTGEN_USE_AUI - // Somehow it will be very small after I move to Aui - SetSize(600, 600); - // Maximize(true); + statusBar->SetStatusText(_("Welcome to the Automatic Screenshot Generator!"), 0); #endif -} - -wxScreenshotFrame::~wxScreenshotFrame() -{ - delete m_maskout; -} - -/* - Do some further customization on some controls generated by wxFormBuilder. - - 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. -*/ -void wxScreenshotFrame::InitFBControls() -{ - // Do the default selection for wxComboBox - m_comboBox1->Select(0); - - // To look better under gtk -#ifdef __WXGTK__ - m_comboBox1->Delete(4); -#endif - - // Add a root and some nodes for wxTreeCtrl - wxTreeItemId root = m_treeCtrl1->AddRoot(_("wxTreeCtrl")); - - m_treeCtrl1->AppendItem(root, _("Node1")); - - wxTreeItemId node2 = m_treeCtrl1->AppendItem(root, _("Node2")); - m_treeCtrl1->AppendItem(node2, _("Node3")); - - 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)); - - // 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); + // set minimum size hints + GetSizer()->SetSizeHints(this); } - - // ---------------------------------------------------------------------------- -// wxScreenshotFrame - event handlers +// ScreenshotFrame - event handlers // ---------------------------------------------------------------------------- -void wxScreenshotFrame::OnClose(wxCloseEvent& WXUNUSED(event)) +void ScreenshotFrame::OnClose(wxCloseEvent& WXUNUSED(event)) { Destroy(); } -void wxScreenshotFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) +void ScreenshotFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { Destroy(); } -void wxScreenshotFrame::OnSeeScreenshots(wxCommandEvent& WXUNUSED(event)) +void ScreenshotFrame::OnSeeScreenshots(wxCommandEvent& WXUNUSED(event)) { - wxString defaultDir = m_maskout->GetDefaultDirectory(); - - // Check if defaultDir already existed - if(!wxDirExists(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 + wxString defaultDir = AutoCaptureMechanism::GetDefaultDirectoryAbsPath(); + + if (wxFileName::DirExists(defaultDir)) + wxLaunchDefaultBrowser(defaultDir); + else + wxMessageBox(_("There isn't any screenshots yet.")); } -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(wxT("(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; @@ -191,110 +82,49 @@ void wxScreenshotFrame::OnCaptureFullScreen(wxCommandEvent& WXUNUSED(event)) wxCoord screenWidth, screenHeight; dcScreen.GetSize(&screenWidth, &screenHeight); - m_maskout->Capture(0, 0, screenWidth, screenHeight, _T("fullscreen")); -} - -void wxScreenshotFrame::OnCaptureRect(wxCommandEvent& WXUNUSED(event)) -{ - capturingRect = true; - wxMenuBar * menubar = this->GetMenuBar(); - menubar->FindItem(idMenuCapRect)->Enable(false); - menubar->FindItem(idMenuEndCapRect)->Enable(true); - - 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); -} - -void wxScreenshotFrame::OnEndCaptureRect(wxCommandEvent& WXUNUSED(event)) -{ - capturingRect = false; - wxMenuBar * menubar = this->GetMenuBar(); - menubar->FindItem(idMenuCapRect)->Enable(true); - menubar->FindItem(idMenuEndCapRect)->Enable(false); - - 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); -} - -void wxScreenshotFrame::OnNotebookPageChanging( -#if SCREENSHOTGEN_USE_AUI -wxAuiNotebookEvent& event -#else -wxNotebookEvent& event -#endif -) -{ - if (!capturingRect) - { - event.Skip(); - return; - } - - 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); - - event.Skip(); -} + wxBitmap fullscreen(1, 1); + AutoCaptureMechanism::Capture(&fullscreen, 0, 0, screenWidth, screenHeight); -void wxScreenshotFrame::OnNotebookPageChanged( -#if SCREENSHOTGEN_USE_AUI -wxAuiNotebookEvent& event -#else -wxNotebookEvent& event -#endif -) -{ - if(!capturingRect) - { - event.Skip(); - return; - } + AutoCaptureMechanism::Save(&fullscreen, wxT("fullscreen")); - 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); - - event.Skip(); + wxMessageBox(_("A screenshot of the entire screen was saved as:\n\n ") + + AutoCaptureMechanism::GetDefaultDirectoryAbsPath() + wxT("fullscreen.png"), + _("Full screen capture"), wxICON_INFORMATION|wxOK, this); } -void wxScreenshotFrame::OnCaptureAllControls(wxCommandEvent& WXUNUSED(event)) +void ScreenshotFrame::OnCaptureAllControls(wxCommandEvent& WXUNUSED(event)) { - wxString dir = wxT("screenshots"); + wxString dir = AutoCaptureMechanism::GetDefaultDirectoryAbsPath(); + // check if there are other screenshots taken before 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?"), - wxYES_NO|wxCANCEL|wxICON_QUESTION, this); + 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) { - case wxYES : + case wxYES: { 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; - 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); @@ -311,7 +141,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_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); @@ -356,6 +186,6 @@ void wxScreenshotFrame::OnCaptureAllControls(wxCommandEvent& WXUNUSED(event)) 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); }