/************************************************************************
*
* Resource ID Organiser Add-In for Visual C++ 5.0/6.0
*
* (c) Copyright 2000-2005 by Riverblade Limited (UK). All rights reserved.
*
************************************************************************
*
* Description : CResOrgAddInApp - application class
*
* Compiler : Microsoft Visual C++ 6.0, Service Pack 3 or later
*
* Target
* Environment : Windows 98/NT/2000/XP
*
* NOTE:
*
* This software is provided "as is". All title and copyrights in and
* to the software, including but not limited to any images, text etc.
* etc. incorporated into it, are the property of Anna-Jayne Metcalfe
* and Riverblade Limited, except where acknowledged otherwise.
*
* Your may freely use this code in your own products, PROVIDED
* this notice is not removed or modified.
*
* Please visit http://www.riverblade.co.uk/products/resorg
* or email support@riverblade.co.uk for latest updates and product support
*
************************************************************************
*
* MODIFICATION HISTORY:
*
* This is a controlled document. See project configuration
* control tool for latest version and full version history.
*
* $Archive: /Projects/AddIns/ResOrg/ResOrgAddIn/ResOrgAddInApp.cpp $
* $Revision: 36 $
* $Date: 28/12/04 9:26 $
* $Author: Anna $
*
* $History: ResOrgAddInApp.cpp $
*
* ***************** Version 36 *****************
* User: Anna Date: 28/12/04 Time: 9:26
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* 1. Only symbols display child frames now contain a splitter window
* 2. Corrected view class for HTML displays
* 3. Updated banner
*
* ***************** Version 35 *****************
* User: Anna Date: 13/12/04 Time: 18:33
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* 1. Changed company registry key to "Riverblade"
* 2. Updated file banners
*
* ***************** Version 34 *****************
* User: Anna Date: 21/08/04 Time: 18:58
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* The add-in now uses CResOrgMDIChildWnd for MDI child frames instead of
* CChildFrame (which has been deleted)
*
* ***************** Version 33 *****************
* User: Anna Date: 30/01/03 Time: 21:05
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Moved common application class functionality to CResOrgCoreApp
*
* ***************** Version 32 *****************
* User: Anna Date: 28/01/03 Time: 21:46
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Added multi-file Symbol Display support
*
* ***************** Version 31 *****************
* User: Anna Date: 25/11/02 Time: 16:51
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Changed website address in banner
*
* ***************** Version 30 *****************
* User: Anna Date: 22/10/02 Time: 13:34
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Changed name/mail address (at last!)
*
* ***************** Version 29 *****************
* User: Andy Date: 12/06/02 Time: 14:56
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Set the module state for the About Box to that of the Add-In's DLL
* before invoking it. This ensures that the Add-In will be listed in the
* "Modules" control
*
* ***************** Version 28 *****************
* User: Andy Date: 7/06/02 Time: 17:06
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Renamed the ResOrgUtils module to ResOrgCore
*
* ***************** Version 27 *****************
* User: Andy Date: 17/05/02 Time: 22:15
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Modifications for compatibility with Visual C++.NET
*
* ***************** Version 26 *****************
* User: Andy Date: 10/05/02 Time: 16:04
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Added "Use Office XP style menus" option
*
* ***************** Version 25 *****************
* User: Andy Date: 30/04/02 Time: 16:00
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Fixed a finger trouble type screw up
*
* ***************** Version 24 *****************
* User: Andy Date: 21/04/02 Time: 20:42
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Use Office XP style menus regardless of the target platform (if there's
* a demand we can make this an option)
*
* ***************** Version 23 *****************
* User: Andy Date: 10/22/01 Time: 11:19a
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Added an option [through an override of CDocument::OpenDocumentFile()]
* to call CResOrgSymbolsDoc::CheckNextSymbolValues() when a symbol file
* is opened. The call is made only if the
* CResOrgAddInApp::m_bCheckNextSymbolValues flag is TRUE
*
* ***************** Version 22 *****************
* User: Andy Date: 24/07/01 Time: 11:42
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Corrected the Mailing List Prompt to point at the new mailing list
*
* ***************** Version 21 *****************
* User: Andy Date: 10/07/01 Time: 9:39
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Fix syntax errors
*
* ***************** Version 20 *****************
* User: Andy Date: 8/07/01 Time: 16:56
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Integrated BXFileDialog module (replaces Office2KDlg)
*
* ***************** Version 19 *****************
* User: Andy Date: 3/07/01 Time: 20:49
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Fixed a typo
*
* ***************** Version 18 *****************
* User: Andy Date: 3/07/01 Time: 20:25
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* 1. Added Discussion Board to the Help Menu
* 2. ResOrg on the Web commands are now disabled if no URL is available
* 3. Web windows are now opened in a CChildFrame window so that the
* first instance is maximised
*
* ***************** Version 17 *****************
* User: Andy Date: 5/06/01 Time: 19:32
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Bug fix for context help support
*
* ***************** Version 16 *****************
* User: Andy Date: 2/06/01 Time: 19:48
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Added "Close all windows" command (was in the MainFrame before)
*
* ***************** Version 15 *****************
* User: Andy Date: 2/06/01 Time: 16:53
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* 1. Initialised MRU list to 9 entries
* 2. Enabled drag/drop
*
* ***************** Version 14 *****************
* User: Andy Date: 26/05/01 Time: 21:01
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Fixed a memory leak (forgot to delete m_pHtmlDocTemplate)
*
* ***************** Version 13 *****************
* User: Andy Date: 26/05/01 Time: 17:23
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* 1. Improved help support
* 2. Added Mailing List prompt
*
* ***************** Version 12 *****************
* User: Andy Date: 22/05/01 Time: 15:56
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Minor bug fixes
*
* ***************** Version 11 *****************
* User: Andy Date: 22/05/01 Time: 6:52
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* 1. Added "ResOrg Mailing List" command to the Help Menu
* 2. Tidied up initialisation of document templates
* 3. Moved initialisation of "Options" to OnConnection()
* 4. Added a call to Options.OnExit() to ExitInstance()
*
* ***************** Version 10 *****************
* User: Andy Date: 4/05/01 Time: 2:32
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Set help file name to ResOrg.hlp (overrides the default -
* ResOrgAddIn.hlp)
*
* ***************** Version 9 *****************
* User: Andy Date: 26/04/01 Time: 19:42
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* 1. Added additional "ResOrg on the Web" commands
* 2. Renamed Resource.h to ResOrgAddIn_Res.h
*
* ***************** Version 8 *****************
* User: Andy Date: 2/03/01 Time: 17:35
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Removed unnecessary #include directive
*
* ***************** Version 7 *****************
* User: Andy Date: 17/02/01 Time: 7:07
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* CResOrgSymbolsView => CResOrgSymbolsListView
*
* ***************** Version 6 *****************
* User: Andy Date: 11/12/00 Time: 19:01
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* 1. Set m_pMainDocTemplate->m_bAutoDelete TRUE to prevent it from
* leaking
* 2. Moved CDocManager memory leak fix to OnDisconnection()
*
* ***************** Version 5 *****************
* User: Andy Date: 5/12/00 Time: 20:40
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* 1. Added "ResOrg on the Web" support
* 2. Bug fix for CDocManager related memory leaks. Thanks to Gavin
* Jerman (gavin.jerman@zurich.co.uk) for this
* 3. Raised version to 1.2.1
*
* ***************** Version 4 *****************
* User: Andy Date: 3/12/00 Time: 9:20
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Set _crtBreakAlloc in debug builds only
*
* ***************** Version 3 *****************
* User: Andy Date: 3/12/00 Time: 8:31
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Updated registry key
*
* ***************** Version 2 *****************
* User: Andy Date: 29/11/00 Time: 18:37
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* 1. Moved Office2KDlg code to its own DLL
* 2. Added file banners
*
* $Nokeywords: $
*
************************************************************************/
#include "StdAfx.h"
#include <initguid.h>
#include <AfxHtml.h>
#include "ResOrgAddIn_Res.h"
#include "MainFrame.h"
#include "ResOrgProjectsDoc.h"
#include "ResOrgProjectsView.h"
#include "DSAddIn.h"
#include "Commands.h"
#include "ResOrgAddIn.h"
#include "DtWinVer.h"
#include "ResOrgAddInApp.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CComModule _Module;
BEGIN_OBJECT_MAP(ObjectMap)
OBJECT_ENTRY(CLSID_DSAddIn, CDSAddIn)
END_OBJECT_MAP()
CResOrgAddInApp* GetApp(void)
{
return (CResOrgAddInApp*)AfxGetApp();
}
/////////////////////////////////////////////////////////////////////////////
// CResOrgAddInApp
BEGIN_MESSAGE_MAP(CResOrgAddInApp, CResOrgAddInApp_BASE)
ON_COMMAND( ID_FILE_NEW, OnFileNew)
ON_COMMAND( ID_APP_ABOUT, OnCmdAbout)
ON_COMMAND( ID_FILE_OPEN, CResOrgAddInApp_BASE::OnFileOpen)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// The one and only CResOrgAddInApp object
CResOrgAddInApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CResOrgAddInApp construction
CResOrgAddInApp::CResOrgAddInApp(void)
{
m_pDocManager = NULL;
m_pMainDocTemplate = NULL;
#ifdef _DEBUG
_crtBreakAlloc = -1;
#endif
}
CResOrgAddInApp::~CResOrgAddInApp(void)
{
}
/////////////////////////////////////////////////////////////////////////////
// CResOrgAddInApp virtual overrides
BOOL CResOrgAddInApp::InitInstance(void)
{
_Module.Init(ObjectMap, m_hInstance);
SetRegistryKey(_T("Riverblade"));
LoadStdProfileSettings(9); // Load standard INI file options (including MRU)
// Create CDynLinkLibrary objects for each of the
// extension DLLs we use.
//
// This is only necessary because DevStudio add-ins are usually
// implemented as Regular DLLs, rather than extension DLLs.
//
// Without this code, the resources in the extension DLLs
// would be unavailable (much badness, in fact)...
InitCJLibrary();
InitNGLibrary();
#if _MSC_VER < 1300 // BXFileDialog doesn't work with VC7 yet
InitBXFileDialogDll();
#endif
InitResOrgCore();
SetHelpFileName( _T("ResOrg.hlp") );
return CResOrgAddInApp_BASE::InitInstance();
}
void CResOrgAddInApp::OnConnection(void)
{
#if _MSC_VER < 1300 // BXFileDialog doesn't work with VC7 yet
m_pDocManager = new BXFileDialogDocManager;
#endif
// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.
m_pMainDocTemplate = new CMultiDocTemplate(
IDR_SYMBOL_FILE_TYPE,
RUNTIME_CLASS(CResOrgSymbolsDoc),
RUNTIME_CLASS(CResOrgMDIChildSplitWnd), // Custom MDI child frame
RUNTIME_CLASS(CResOrgSymbolsListView) );
m_pMainDocTemplate->m_bAutoDelete = TRUE;
AddDocTemplate(m_pMainDocTemplate);
m_pMultiSymbolFileTemplate = new CMultiDocTemplate(
IDR_SYMBOL_FILE_TYPE,
RUNTIME_CLASS(CResOrgSymbolsDocMultiFile),
RUNTIME_CLASS(CResOrgMDIChildSplitWnd), // custom MDI child frame
RUNTIME_CLASS(CResOrgSymbolsListView));
m_pHtmlDocTemplate = new CMultiDocTemplate(
IDR_HTML_TYPE,
RUNTIME_CLASS(CResOrgHtmlDoc),
RUNTIME_CLASS(CResOrgMDIChildWnd),
RUNTIME_CLASS(CResOrgHtmlView) );
// Create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
ASSERT_VALID(pMainFrame);
if (NULL != pMainFrame)
{
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
{
return;
}
AfxGetApp()->m_pMainWnd = pMainFrame;
// Initialize the cool menus...
UINT nToolBars[] =
{
IDR_MAINFRAME
}; // ...can be many toolbars...
pMainFrame->InitializeMenu( m_pMainDocTemplate,
IDR_SYMBOL_FILE_TYPE,
nToolBars,
1,
IDR_MAINFRAME);
pMainFrame->InitializeMenu( m_pMultiSymbolFileTemplate,
IDR_SYMBOL_FILE_TYPE,
nToolBars,
1,
IDR_MAINFRAME);
pMainFrame->InitializeMenu( m_pHtmlDocTemplate,
IDR_HTML_TYPE,
nToolBars,
1,
IDR_MAINFRAME);
// Enable drag/drop open
pMainFrame->DragAcceptFiles();
// Read options from the registry, and kick off the
// version check (if appropriate)
Options.Initialise();
// Use Office XP style menus if selected
CCJMenu::SetMenuDrawMode(Options.UseXpStyleMenus() ? CCJMenu_DRAWMODE_XP : CCJMenu_DRAWMODE_ORIGINAL);
if (Options.IsMailingListPromptEnabled() )
{
Options.EnableMailingListPrompt(FALSE); // Only ask once
if (IDYES == DoMailingListQuery())
{
::ShellExecute( ::GetDesktopWindow(),
_T("open"),
Options.GetMailingListURL(),
NULL,
NULL,
SW_SHOWNORMAL);
}
}
Options.DoVersionCheck();
}
}
void CResOrgAddInApp::OnDisconnection(void)
{
if (NULL != m_pMainWnd)
{
if (::IsWindow(m_pMainWnd->m_hWnd))
{
m_pMainWnd->DestroyWindow();
}
delete m_pMainWnd;
}
if (NULL != m_pDocManager)
{
// Trick CWinApp into thinking we're an application (exe) to
// clear up static CDocManager objects:
//
// CDocManager::pStaticList
// CDocManager::pStaticDocManager
//
// Look at the CWinApp destructor in appcore.cpp for more details.
//
// Thanks to Gavin Jerman (gavin.jerman@zurich.co.uk) for this fix
AfxGetModuleState()->m_bDLL = FALSE;
delete m_pDocManager;
m_pDocManager = NULL;
}
}
BOOL CResOrgAddInApp::OnIdle(LONG lCount)
{
return CResOrgAddInApp_BASE::OnIdle(lCount);
}
int CResOrgAddInApp::ExitInstance(void)
{
// If a version check is running, Wait until it finishes
// before exiting (by now the main window has gone)
Options.OnExit();
_Module.Term();
return CResOrgAddInApp_BASE::ExitInstance();
}
/////////////////////////////////////////////////////////////////////////////
// CResOrgAddInApp implementation
//
// (none)
/////////////////////////////////////////////////////////////////////////////
// CResOrgAddInApp message handlers
void CResOrgAddInApp::OnFileNew(void)
{
CResOrgAddInApp_BASE::OnFileNew();
}
// App command to run the dialog
void CResOrgAddInApp::OnCmdAbout(void)
{
CResOrgAboutBox aboutDlg;
aboutDlg.SetModuleState( ::AfxGetStaticModuleState() );
aboutDlg.DoModal();
}
/////////////////////////////////////////////////////////////////////////////
// CResOrgAddInApp operations