/////////////////////////////////////////////////////////////////////////////
// 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
#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 <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
-#include <wx/dir.h>
-#include <wx/aboutdlg.h>
-#include <wx/msgdlg.h>
-#include <wx/dcscreen.h>
-#include <wx/filesys.h>
-#include <wx/utils.h>
+#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
// ----------------------------------------------------------------------------
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))
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);
}
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);
+ AutoCaptureMechanism::Save(&fullscreen, wxT("fullscreen"));
- 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);
-
- 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))