X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/88300af4db7ba9db9f242b777068222331765443..7a36d9c7c1a077ba7e05c248bcf19c4c9bb1356f:/utils/screenshotgen/src/screenshot_main.cpp diff --git a/utils/screenshotgen/src/screenshot_main.cpp b/utils/screenshotgen/src/screenshot_main.cpp index cebae3daf4..9dd085e648 100644 --- a/utils/screenshotgen/src/screenshot_main.cpp +++ b/utils/screenshotgen/src/screenshot_main.cpp @@ -1,151 +1,43 @@ ///////////////////////////////////////////////////////////////////////////// // 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 -#include -#include -#include -#include +#include "wx/aboutdlg.h" +#include "wx/dir.h" #include "screenshot_main.h" -#include "ctrlmaskout.h" #include "autocapture.h" -#include "bitmaps/play.xpm" -#include "bitmaps/stop.xpm" - - // ---------------------------------------------------------------------------- // ScreenshotFrame // ---------------------------------------------------------------------------- -ScreenshotFrame::ScreenshotFrame(wxFrame *frame) -#if SCREENSHOTGEN_USE_AUI -: AuiGUIFrame(frame) -#else -: GUIFrame(frame) -#endif +ScreenshotFrame::ScreenshotFrame(wxFrame *frame) : GUIFrame(frame) { #if wxUSE_STATUSBAR statusBar->SetStatusText(_("Welcome to the Automatic Screenshot Generator!"), 0); #endif - // 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; - - // 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); -#endif -} - -ScreenshotFrame::~ScreenshotFrame() -{ - delete m_maskout; -} - -/* - Do some further customization on some controls generated by wxFormBuilder. - - wxFormBuilder does not allow customizations on some controls; - e.g. you cannot 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 ScreenshotFrame::InitFBControls() -{ - // For some reason, wxFormBuilder does not set the scrollbar range - m_scrollBar1->SetScrollbar(50, 1, 100, 1); - - // 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 - 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")); - //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) ); } - - // ---------------------------------------------------------------------------- // ScreenshotFrame - event handlers // ---------------------------------------------------------------------------- @@ -162,14 +54,12 @@ void ScreenshotFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) void ScreenshotFrame::OnSeeScreenshots(wxCommandEvent& WXUNUSED(event)) { - wxString defaultDir = m_maskout->GetDefaultDirectory(); - - // Check if defaultDir already existed - if (!wxDirExists(defaultDir)) - wxMkdir(defaultDir); + wxString defaultDir = AutoCaptureMechanism::GetDefaultDirectoryAbsPath(); - // Use the native file browser to open defaultDir - wxLaunchDefaultBrowser(wxFileSystem::FileNameToURL(defaultDir)); + if (wxFileName::DirExists(defaultDir)) + wxLaunchDefaultBrowser(defaultDir); + else + wxMessageBox(_("There isn't any screenshots yet.")); } void ScreenshotFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) @@ -178,7 +68,7 @@ void ScreenshotFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) 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")); + info.SetCopyright(wxT("(C) 2008 Utensil Candel")); wxAboutBox(info); } @@ -192,98 +82,28 @@ void ScreenshotFrame::OnCaptureFullScreen(wxCommandEvent& WXUNUSED(event)) wxCoord screenWidth, screenHeight; dcScreen.GetSize(&screenWidth, &screenHeight); - m_maskout->Capture(0, 0, screenWidth, screenHeight, _T("fullscreen")); + wxBitmap fullscreen(1, 1); + AutoCaptureMechanism::Capture(&fullscreen, 0, 0, screenWidth, screenHeight); - // 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 ScreenshotFrame::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( 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 ScreenshotFrame::OnEndCaptureRect(wxCommandEvent& WXUNUSED(event)) -{ - capturingRect = false; - wxMenuBar * menubar = this->GetMenuBar(); - menubar->FindItem(idMenuCapRect)->Enable(true); - menubar->FindItem(idMenuEndCapRect)->Enable(false); + AutoCaptureMechanism::Save(&fullscreen, wxT("fullscreen")); - wxWindow * thePage = m_notebook1->GetPage(m_notebook1->GetSelection()); - - 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 ScreenshotFrame::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( 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(); -} - -void ScreenshotFrame::OnNotebookPageChanged( -#if SCREENSHOTGEN_USE_AUI -wxAuiNotebookEvent& event -#else -wxNotebookEvent& event -#endif -) -{ - if (!capturingRect) - { - event.Skip(); - return; - } - - wxWindow *thePage = m_notebook1->GetPage(event.GetSelection()); - - 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(); + 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 ScreenshotFrame::OnCaptureAllControls(wxCommandEvent& WXUNUSED(event)) { - wxString dir = m_maskout->GetDefaultDirectoryAbsPath(); + 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.\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); + 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: