Skip to content

Instantly share code, notes, and snippets.

@Appendme
Created January 20, 2020 18:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Appendme/2ca4c3bb4c73f9f79ff8f4cc780f3b3b to your computer and use it in GitHub Desktop.
Save Appendme/2ca4c3bb4c73f9f79ff8f4cc780f3b3b to your computer and use it in GitHub Desktop.
Aimp Demo Form
#include "aimpDemoForm.h"
#include "dllmain.h"
#include <aimpString.h>
namespace AIMP::UI
{
DemoForm::DemoForm(IAIMPServiceUI* Service)
: _skipMouseEvents{ true }
, _service{ Service }
, _form{ nullptr }
, _images{ nullptr }
, _log{ nullptr }
, _treeList{ nullptr }
{
RECT bounds{};
auto handler = static_cast<Base*>(this);
CheckResult(_service->CreateForm(0, 0, String(L"DemoForm"), handler, & _form));
CheckResult(_form->SetValueAsInt32(AIMPUI_FORM_PROPID_CLOSEBYESCAPE, 1));
// Center the Form on screen
SystemParametersInfo(SPI_GETWORKAREA, 0, &bounds, 0);
CheckResult(_form->SetPlacement(Place(CenterRect(bounds, 1024, 600))));
// Create ImageList for children controls
CheckResult(_service->CreateObject(_form, nullptr, IID_IAIMPUIImageList, r_cast(_images)));
CheckResult(_images->LoadFromResource(HInstance, L"IMAGES", L"PNG"));
// Create children controls
CreateControls(_form);
}
DemoForm::~DemoForm()
{
if (_form)
{
_form->Release(0);
}
}
int DemoForm::ShowModal()
{
return _form->ShowModal();
}
void DemoForm::AddPathToTreeList(
std::wstring_view Name,
std::wstring_view ParentFolder,
std::wstring_view Notes,
int ImageIndex)
{
}
void DemoForm::Log(IUnknown* Sender, std::wstring_view S)
{
}
void DemoForm::CreateControls(IAIMPUIWinControl* Parent)
{
CreateBottomBar(Parent);
//CreateLog(Parent);
CreatePageControl(Parent);
}
void DemoForm::CreateBottomBar(IAIMPUIWinControl* Parent)
{
IAIMPUIButton* button = nullptr;
IAIMPUIWinControl* panel = nullptr;
// Create the panel for Bar
CheckResult(_service->CreateControl(_form, Parent, nullptr, nullptr, IID_IAIMPUIPanel, r_cast(panel)));
CheckResult(panel->SetPlacement(Place(ualBottom, { 0, SHRT_MAX, 0, 28 })));
CheckResult(panel->SetValueAsInt32(AIMPUI_PANEL_PROPID_BORDERS, 0));
//auto closeBtn = new NotifyEventAdapter([this](IUnknown*) { _form->Close(); });
//auto event = static_cast<NotifyEventAdapter::Base*>(closeBtn);
auto event = nullptr;
// Create the Button
CheckResult(_service->CreateControl(_form, panel, String(L"B1"), event, IID_IAIMPUIButton, r_cast(button)));
CheckResult(button->SetPlacement(Place(ualRight, 0)));
CheckResult(button->SetPlacementConstraints(PlaceConst(100, 25)));
}
void DemoForm::CreateLog(IAIMPUIWinControl* Parent)
{
IAIMPUITreeListColumn* column = nullptr;
IAIMPUIControl* control = nullptr;
IAIMPUIWinControl* panel = nullptr;
CheckResult(_service->CreateControl(_form, Parent, nullptr, nullptr, IID_IAIMPUIPanel, r_cast(panel)));
CheckResult(panel->SetPlacement(Place(ualLeft, 400, { 6, 6, 0, 0 })));
CheckResult(panel->SetValueAsInt32(AIMPUI_PANEL_PROPID_BORDERS, 0));
auto handler = static_cast<Base*>(this);
// The Treelist control will be used for loging all events
CheckResult(_service->CreateControl(_form, panel, String(L"Log"), handler, IID_IAIMPUITreeList, r_cast(_log)));
CheckResult(_log->SetPlacement(Place(ualClient, 0)));
CheckResult(_log->SetValueAsInt32(AIMPUI_TL_PROPID_COLUMN_AUTOWIDTH, 1));
CheckResult(_log->AddColumn(IID_IAIMPUITreeListColumn, r_cast(column))); // Create the Sender column
CheckResult(column->SetValueAsInt32(AIMPUI_TL_COLUMN_PROPID_CAN_RESIZE, 0));
CheckResult(_log->AddColumn(IID_IAIMPUITreeListColumn, r_cast(column))); // Create the Action column
auto skipMouseEvents = new NotifyEventAdapter([](IUnknown*) {});
auto event = static_cast<NotifyEventAdapter::Base*>(skipMouseEvents);
// Create the SkipMouseEvents option
CheckResult(_service->CreateControl(_form, panel, String(L"cbSkipMouseEvents"),
event, IID_IAIMPUICheckBox, r_cast(control)));
CheckResult(control->SetPlacement(Place(ualBottom, 0, { 0, 6, 0, 0 })));
CheckResult(control->SetValueAsInt32(AIMPUI_CHECKBOX_PROPID_STATE, _skipMouseEvents));
// Create the splitter
CheckResult(_service->CreateControl(_form, Parent, nullptr, handler , IID_IAIMPUISplitter, r_cast(control)));
CheckResult(control->SetPlacement(Place(ualLeft, 3)));
CheckResult(control->SetValueAsObject(AIMPUI_SPLITTER_PROPID_CONTROL, panel));
}
void DemoForm::CreatePageControl(IAIMPUIWinControl* Parent)
{
}
void DemoForm::CreateBBCBox(IAIMPUIWinControl* Parent)
{
}
void DemoForm::CreateEditors(IAIMPUIWinControl* Parent)
{
}
void DemoForm::CreateGraphics(IAIMPUIWinControl* Parent)
{
}
void DemoForm::CreateGroups(IAIMPUIWinControl* Parent)
{
}
void DemoForm::CreateIndicators(IAIMPUIWinControl* Parent)
{
}
void DemoForm::CreateTreeList(IAIMPUIWinControl* Parent)
{
}
void DemoForm::HandlerAddCustom(IUnknown* Sender)
{
}
void DemoForm::HandlerAddFiles(IUnknown* Sender)
{
}
void DemoForm::HandlerAddFolders(IUnknown* Sender)
{
}
void DemoForm::HandlerCloseButton(IUnknown* Sender)
{
}
void DemoForm::HandlerCustomDrawSlider(IUnknown* Sender, HDC DC, const RECT R)
{
}
void DemoForm::HandlerEditButton(IUnknown* Sender)
{
}
void DemoForm::HandlerSkipMouseEvents(IUnknown* Sender)
{
}
HRESULT WINAPI DemoForm::QueryInterface(REFIID riid, LPVOID* ppvObj)
{
auto result = Base::QueryInterface(riid, ppvObj);
if (SUCCEEDED(result))
{
return result;
}
if (riid == IID_IAIMPUIChangeEvents)
{
*ppvObj = static_cast<IAIMPUIChangeEvents*>(this);
AddRef();
return S_OK;
}
if (riid == IID_IAIMPUIKeyboardEvents)
{
*ppvObj = static_cast<IAIMPUIKeyboardEvents*>(this);
AddRef();
return S_OK;
}
/*if (riid == IID_IAIMPUIMouseEvents)
{
*ppvObj = static_cast<IAIMPUIMouseEvents*>(this);
AddRef();
return S_OK;
}*/
if (riid == IID_IAIMPUIMouseWheelEvents)
{
*ppvObj = static_cast<IAIMPUIMouseWheelEvents*>(this);
AddRef();
return S_OK;
}
if (riid == IID_IAIMPUIPageControlEvents)
{
*ppvObj = static_cast<IAIMPUIPageControlEvents*>(this);
AddRef();
return S_OK;
}
if (riid == IID_IAIMPUIFormEvents)
{
*ppvObj = static_cast<IAIMPUIFormEvents*>(this);
AddRef();
return S_OK;
}
return result;
}
ULONG WINAPI DemoForm::AddRef(void)
{
return Base::AddRef();
}
ULONG WINAPI DemoForm::Release(void)
{
return Base::Release();
}
void WINAPI DemoForm::OnChanged(IUnknown* Sender)
{
}
void WINAPI DemoForm::OnEnter(IUnknown* Sender)
{
}
void WINAPI DemoForm::OnExit(IUnknown* Sender)
{
}
void WINAPI DemoForm::OnKeyDown(IUnknown* Sender, WORD* Key, WORD Modifiers)
{
}
void WINAPI DemoForm::OnKeyPress(IUnknown* Sender, WCHAR* Key)
{
}
void WINAPI DemoForm::OnKeyUp(IUnknown* Sender, WORD* Key, WORD Modifiers)
{
}
void WINAPI DemoForm::OnMouseDoubleClick(IUnknown* Sender, TAIMPUIMouseButton Button, int X, int Y, WORD Modifiers)
{
}
void WINAPI DemoForm::OnMouseDown(IUnknown* Sender, TAIMPUIMouseButton Button, int X, int Y, WORD Modifiers)
{
}
void WINAPI DemoForm::OnMouseLeave(IUnknown* Sender)
{
}
void WINAPI DemoForm::OnMouseMove(IUnknown* Sender, int X, int Y, WORD Modifiers)
{
}
void WINAPI DemoForm::OnMouseUp(IUnknown* Sender, TAIMPUIMouseButton Button, int X, int Y, WORD Modifiers)
{
}
BOOL WINAPI DemoForm::OnMouseWheel(IUnknown* Sender, int WheelDelta, int X, int Y, WORD Modifiers)
{
return 0;
}
void WINAPI DemoForm::OnActivating(IAIMPUIPageControl* Sender, IAIMPUITabSheet* Page, BOOL* Allow)
{
}
void WINAPI DemoForm::OnActivated(IAIMPUIPageControl* Sender, IAIMPUITabSheet* Page)
{
}
void WINAPI DemoForm::OnActivated(IAIMPUIForm* Sender)
{
}
void WINAPI DemoForm::OnDeactivated(IAIMPUIForm* Sender)
{
}
void WINAPI DemoForm::OnCreated(IAIMPUIForm* Sender)
{
}
void WINAPI DemoForm::OnDestroyed(IAIMPUIForm* Sender)
{
_images = nullptr;
_log = nullptr;
_treeList = nullptr;
_form = nullptr;
}
void WINAPI DemoForm::OnCloseQuery(IAIMPUIForm* Sender, BOOL* CanClose)
{
*CanClose = true;
}
void WINAPI DemoForm::OnLocalize(IAIMPUIForm* Sender)
{
}
void WINAPI DemoForm::OnShortCut(IAIMPUIForm* Sender, WORD Key, WORD Modifiers, BOOL* Handled)
{
}
RECT DemoForm::CenterRect(const RECT& Bounds, int Width, int Height)
{
RECT result{};
result.left = (Bounds.left + Bounds.right - Width) / 2;
result.top = (Bounds.top + Bounds.bottom - Height) / 2;
result.right = result.left + Width;
result.bottom = result.top + Height;
return result;
}
}
#pragma once
#include <apiWrappersGUI.h>
namespace AIMP::UI
{
class DemoForm final
: public UnknownII<IAIMPUIChangeEvents>
, public IAIMPUIKeyboardEvents
, public IAIMPUIMouseEvents
, public IAIMPUIMouseWheelEvents
, public IAIMPUIPageControlEvents
, public IAIMPUIFormEvents
{
using Base = UnknownII<IAIMPUIChangeEvents>;
public:
DemoForm(IAIMPServiceUI* Service);
~DemoForm();
int ShowModal();
private:
void AddPathToTreeList(
std::wstring_view Name,
std::wstring_view ParentFolder,
std::wstring_view Notes,
int ImageIndex);
void Log(IUnknown* Sender, std::wstring_view S);
void CreateControls(IAIMPUIWinControl* Parent);
void CreateBottomBar(IAIMPUIWinControl* Parent);
void CreateLog(IAIMPUIWinControl* Parent);
void CreatePageControl(IAIMPUIWinControl* Parent);
void CreateBBCBox(IAIMPUIWinControl* Parent);
void CreateEditors(IAIMPUIWinControl* Parent);
void CreateGraphics(IAIMPUIWinControl* Parent);
void CreateGroups(IAIMPUIWinControl* Parent);
void CreateIndicators(IAIMPUIWinControl* Parent);
void CreateTreeList(IAIMPUIWinControl* Parent);
// Custom Handlers
void HandlerAddCustom(IUnknown* Sender);
void HandlerAddFiles(IUnknown* Sender);
void HandlerAddFolders(IUnknown* Sender);
void HandlerCloseButton(IUnknown* Sender);
void HandlerCustomDrawSlider(IUnknown* Sender, HDC DC, const RECT R);
void HandlerEditButton(IUnknown* Sender);
void HandlerSkipMouseEvents(IUnknown* Sender);
// IUnknown
HRESULT WINAPI QueryInterface(REFIID riid, LPVOID* ppvObj) override;
ULONG WINAPI AddRef(void) override;
ULONG WINAPI Release(void) override;
// IAIMPUIChangeEvents
void WINAPI OnChanged(IUnknown* Sender) override;
// IAIMPUIKeyboardEvents
void WINAPI OnEnter(IUnknown* Sender) override;
void WINAPI OnExit(IUnknown* Sender) override;
void WINAPI OnKeyDown(IUnknown* Sender, WORD* Key, WORD Modifiers) override;
void WINAPI OnKeyPress(IUnknown* Sender, WCHAR* Key) override;
void WINAPI OnKeyUp(IUnknown* Sender, WORD* Key, WORD Modifiers) override;
// IAIMPUIMouseEvents
void WINAPI OnMouseDoubleClick(IUnknown* Sender, TAIMPUIMouseButton Button, int X, int Y, WORD Modifiers) override;
void WINAPI OnMouseDown(IUnknown* Sender, TAIMPUIMouseButton Button, int X, int Y, WORD Modifiers) override;
void WINAPI OnMouseLeave(IUnknown* Sender) override;
void WINAPI OnMouseMove(IUnknown* Sender, int X, int Y, WORD Modifiers) override;
void WINAPI OnMouseUp(IUnknown* Sender, TAIMPUIMouseButton Button, int X, int Y, WORD Modifiers) override;
// IAIMPUIMouseWheelEvents
BOOL WINAPI OnMouseWheel(IUnknown* Sender, int WheelDelta, int X, int Y, WORD Modifiers) override;
// IAIMPUIPageControlEvents
void WINAPI OnActivating(IAIMPUIPageControl* Sender, IAIMPUITabSheet* Page, BOOL* Allow) override;
void WINAPI OnActivated(IAIMPUIPageControl* Sender, IAIMPUITabSheet* Page) override;
// IAIMPUIFormEvents
void WINAPI OnActivated(IAIMPUIForm* Sender) override;
void WINAPI OnDeactivated(IAIMPUIForm* Sender) override;
void WINAPI OnCreated(IAIMPUIForm* Sender) override;
void WINAPI OnDestroyed(IAIMPUIForm* Sender) override;
void WINAPI OnCloseQuery(IAIMPUIForm* Sender, BOOL* CanClose) override;
void WINAPI OnLocalize(IAIMPUIForm* Sender) override;
void WINAPI OnShortCut(IAIMPUIForm* Sender, WORD Key, WORD Modifiers, BOOL* Handled) override;
static RECT CenterRect(const RECT& Bounds, int Width, int Height);
bool _skipMouseEvents;
IAIMPServiceUI* _service;
IAIMPUIForm* _form;
IAIMPUIImageList* _images;
IAIMPUITreeList* _log;
IAIMPUITreeList* _treeList;
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment