blob: a5131275eaf51423dd477d8839f5e27c8718de50 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
#pragma once
#include "resource.h"
#include <Shlobj.h>
#include <ShlGuid.h>
#include "IECrossfireExtension.h"
#include "Util.h"
#include "Logger.h"
enum {
STATE_DISCONNECTED,
STATE_LISTENING,
STATE_CONNECTED,
};
class ATL_NO_VTABLE ExplorerBar :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<ExplorerBar, &CLSID_ExplorerBar>,
public IClassFactory,
public IObjectWithSite,
public IPersistStream,
public IDeskBand,
public IInputObject {
public:
DECLARE_REGISTRY_RESOURCEID(IDR_EXPLORERBAR)
DECLARE_NOT_AGGREGATABLE(ExplorerBar)
BEGIN_COM_MAP(ExplorerBar)
COM_INTERFACE_ENTRY_IID(IID_IInputObject, IInputObject)
// COM_INTERFACE_ENTRY(IExplorerBar)
COM_INTERFACE_ENTRY(IClassFactory)
COM_INTERFACE_ENTRY(IObjectWithSite)
COM_INTERFACE_ENTRY(IPersistStream)
COM_INTERFACE_ENTRY(IDeskBand)
// COM_INTERFACE_ENTRY(IInputObject)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct() {
return S_OK;
}
void FinalRelease() {
}
public:
ExplorerBar();
virtual ~ExplorerBar();
/* IClassFactory */
HRESULT STDMETHODCALLTYPE CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObject);
HRESULT STDMETHODCALLTYPE LockServer(BOOL fLock);
/* IObjectWithSite */
HRESULT STDMETHODCALLTYPE GetSite(REFIID riid, LPVOID *ppvReturn);
HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite);
/* IPersistStream */
HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClassID);
HRESULT STDMETHODCALLTYPE IsDirty();
HRESULT STDMETHODCALLTYPE Load(IStream *pStm);
HRESULT STDMETHODCALLTYPE Save(IStream *pStm, BOOL fClearDirty);
HRESULT STDMETHODCALLTYPE GetSizeMax(ULARGE_INTEGER *pcbSize);
/* IDeskBand */
HRESULT STDMETHODCALLTYPE GetWindow(HWND *phwnd);
HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode);
HRESULT STDMETHODCALLTYPE ShowDW(BOOL fShow);
HRESULT STDMETHODCALLTYPE CloseDW(DWORD dwReserved);
HRESULT STDMETHODCALLTYPE ResizeBorderDW(LPCRECT prcBorder, IUnknown *punkToolbarSite, BOOL fReserved);
HRESULT STDMETHODCALLTYPE GetBandInfo(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO *pdbi);
/* IInputObject */
HRESULT STDMETHODCALLTYPE UIActivateIO(BOOL fActivate, LPMSG lpMsg);
HRESULT STDMETHODCALLTYPE HasFocusIO();
HRESULT STDMETHODCALLTYPE TranslateAcceleratorIO(LPMSG lpMsg);
private:
bool createWindow();
void createControls();
bool initServer(bool startIfNeeded);
void layoutControls();
bool onCommand(HWND hWnd, WPARAM wParam, LPARAM lParam);
bool onNCCreate(HWND hWnd, WPARAM wParam, LPARAM lParam);
// bool onPaint(HWND hWnd, WPARAM wParam, LPARAM lParam);
LRESULT onWndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam);
void onServerStateChanged(WPARAM wParam, LPARAM lParam);
void setErrorText(wchar_t* text);
bool m_bFocus;
HINSTANCE g_hInst;
HWND m_hWnd;
HWND m_hWndParent;
HWND m_messageWindow;
POINT m_portTextSize;
IInputObjectSite* m_pSite;
ICrossfireServer* m_server;
unsigned int m_serverPort;
int m_serverState;
WNDCLASS wc;
/* controls */
HWND m_button;
HWND m_errorLabel;
HWND m_portLabel;
HWND m_portText;
HWND m_portUpDown;
HWND m_separator;
HWND m_statusLabel;
static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam);
/* constants */
static const UINT ServerStateChangeMsg;
static const wchar_t* ServerWindowClass;
static const wchar_t* WindowClass;
static const int SEPARATOR_WIDTH = 5;
static const int SPACING_WIDTH = 10;
};
OBJECT_ENTRY_AUTO(__uuidof(ExplorerBar), ExplorerBar)