/////////////////////////////////////////////////////////////////////////////
// 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/dir.h"
+#include "wx/filesys.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
#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
- // 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;
#endif
}
-wxScreenshotFrame::~wxScreenshotFrame()
+ScreenshotFrame::~ScreenshotFrame()
{
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);
// 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));
+ 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);
+ //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();
}
-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))
+ 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
+ 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;
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();
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();
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
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();
}
-void wxScreenshotFrame::OnNotebookPageChanged(
+void ScreenshotFrame::OnNotebookPageChanged(
#if SCREENSHOTGEN_USE_AUI
wxAuiNotebookEvent& event
#else
#endif
)
{
- if(!capturingRect)
+ if (!capturingRect)
{
event.Skip();
return;
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();
}
-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))
{
- 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)
{
- 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);
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.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);
}