Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 96 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,99 @@ Thumbs.db
/src/plugins/automation/generated/salamander_h.h
/src/plugins/automation/generated/salamander_i.c
/src/plugins/automation/generated/salamander_p.c
/src/plugins/7zip/vcxproj/7ZA/salamander/Debug_x64/plugins/7zip
/src/plugins/7zip/vcxproj/7ZA/salamander/Release_x64/plugins/7zip
/src/plugins/7zip/vcxproj/7zwrapper/salamander/Debug_x64/plugins/7zip
/src/plugins/7zip/vcxproj/7zwrapper/salamander/Release_x64/plugins/7zip
/src/plugins/7zip/vcxproj/salamander/Debug_x64/plugins/7zip
/src/plugins/7zip/vcxproj/salamander/Release_x64/plugins/7zip
/src/plugins/automation/vcxproj/salamander/Debug_x64/plugins/automation
/src/plugins/automation/vcxproj/salamander/Release_x64/plugins/automation
/src/plugins/checksum/vcxproj/salamander/Debug_x64/plugins/checksum
/src/plugins/checksum/vcxproj/salamander/Release_x64/plugins/checksum
/src/plugins/checkver/vcxproj/salamander/Debug_x64/plugins/checkver
/src/plugins/checkver/vcxproj/salamander/Release_x64/plugins/checkver
/src/plugins/dbviewer/vcxproj/salamander/Debug_x64/plugins/dbviewer
/src/plugins/dbviewer/vcxproj/salamander/Release_x64/plugins/dbviewer
/src/plugins/demomenu/vcxproj/salamander/Debug_x64/plugins/demomenu
/src/plugins/demomenu/vcxproj/salamander/Release_x64/plugins/demomenu
/src/plugins/demoplug/vcxproj/salamander/Debug_x64/plugins/demoplug
/src/plugins/demoplug/vcxproj/salamander/Release_x64/plugins/demoplug
/src/plugins/demoview/vcxproj/salamander/Debug_x64/plugins/demoview
/src/plugins/demoview/vcxproj/salamander/Release_x64/plugins/demoview
/src/plugins/diskmap/vcxproj/salamander/Debug_x64/plugins/diskmap
/src/plugins/diskmap/vcxproj/salamander/Release_x64/plugins/diskmap
/src/plugins/filecomp/vcxproj/fcremote/salamander/Debug_x64/plugins/filecomp
/src/plugins/filecomp/vcxproj/fcremote/salamander/Release_x64/plugins/filecomp
/src/plugins/filecomp/vcxproj/salamander/Debug_x64/plugins/filecomp
/src/plugins/filecomp/vcxproj/salamander/Release_x64/plugins/filecomp
/src/plugins/folders/vcxproj/salamander/Debug_x64/plugins/folders
/src/plugins/folders/vcxproj/salamander/Release_x64/plugins/folders
/src/plugins/ftp/vcxproj/salamander/Debug_x64/plugins/ftp
/src/plugins/ftp/vcxproj/salamander/Release_x64/plugins/ftp
/src/plugins/ieviewer/vcxproj/salamander/Debug_x64/plugins/ieviewer
/src/plugins/ieviewer/vcxproj/salamander/Release_x64/plugins/ieviewer
/src/plugins/mmviewer/vcxproj/salamander/Debug_x64/plugins/mmviewer
/src/plugins/mmviewer/vcxproj/salamander/Release_x64/plugins/mmviewer
/src/plugins/nethood/vcxproj/salamander/Debug_x64/plugins/nethood
/src/plugins/nethood/vcxproj/salamander/Release_x64/plugins/nethood
/src/plugins/pak/vcxproj/salamander/Debug_x64/plugins/pak
/src/plugins/pak/vcxproj/salamander/Release_x64/plugins/pak
/src/plugins/peviewer/vcxproj/salamander/Debug_x64/plugins/peviewer
/src/plugins/peviewer/vcxproj/salamander/Release_x64/plugins/peviewer
/src/plugins/pictview/vcxproj/exif/salamander/Debug_x64/plugins/pictview
/src/plugins/pictview/vcxproj/exif/salamander/Release_x64/plugins/pictview
/src/plugins/pictview/vcxproj/salamander/Debug_x64/plugins/pictview
/src/plugins/pictview/vcxproj/salamander/Release_x64/plugins/pictview
/src/plugins/portables/vcxproj/salamander/Debug_x64/plugins/portables
/src/plugins/portables/vcxproj/salamander/Release_x64/plugins/portables
/src/plugins/regedt/vcxproj/salamander/Debug_x64/plugins/regedt
/src/plugins/regedt/vcxproj/salamander/Release_x64/plugins/regedt
/src/plugins/renamer/vcxproj/salamander/Debug_x64/plugins/renamer
/src/plugins/renamer/vcxproj/salamander/Release_x64/plugins/renamer
/src/plugins/splitcbn/vcxproj/salamander/Debug_x64/plugins/splitcbn
/src/plugins/splitcbn/vcxproj/salamander/Release_x64/plugins/splitcbn
/src/plugins/tar/vcxproj/salamander/Debug_x64/plugins/tar
/src/plugins/tar/vcxproj/salamander/Release_x64/plugins/tar
/src/plugins/unarj/vcxproj/salamander/Debug_x64/plugins/unarj
/src/plugins/unarj/vcxproj/salamander/Release_x64/plugins/unarj
/src/plugins/uncab/vcxproj/salamander/Debug_x64/plugins/uncab
/src/plugins/uncab/vcxproj/salamander/Release_x64/plugins/uncab
/src/plugins/unchm/vcxproj/chmlib/salamander/Debug_x64/plugins/unchm
/src/plugins/unchm/vcxproj/chmlib/salamander/Release_x64/plugins/unchm
/src/plugins/unchm/vcxproj/salamander/Debug_x64/plugins/unchm
/src/plugins/unchm/vcxproj/salamander/Release_x64/plugins/unchm
/src/plugins/undelete/vcxproj/salamander/Debug_x64/plugins/undelete
/src/plugins/undelete/vcxproj/salamander/Release_x64/plugins/undelete
/src/plugins/unfat/vcxproj/salamander/Debug_x64/plugins/unfat
/src/plugins/unfat/vcxproj/salamander/Release_x64/plugins/unfat
/src/plugins/uniso/vcxproj/salamander/Debug_x64/plugins/uniso
/src/plugins/uniso/vcxproj/salamander/Release_x64/plugins/uniso
/src/plugins/unlha/vcxproj/salamander/Debug_x64/plugins/unlha
/src/plugins/unlha/vcxproj/salamander/Release_x64/plugins/unlha
/src/plugins/unmime/vcxproj/salamander/Debug_x64/plugins/unmime
/src/plugins/unmime/vcxproj/salamander/Release_x64/plugins/unmime
/src/plugins/unole/vcxproj/salamander/Debug_x64/plugins/unole
/src/plugins/unole/vcxproj/salamander/Release_x64/plugins/unole
/src/plugins/unrar/vcxproj/salamander/Debug_x64/plugins/unrar
/src/plugins/unrar/vcxproj/salamander/Release_x64/plugins/unrar
/src/plugins/wmobile/vcxproj/salamander/Debug_x64/plugins/wmobile
/src/plugins/wmobile/vcxproj/salamander/Release_x64/plugins/wmobile
/src/plugins/zip/vcxproj/salamander/Debug_x64/plugins/zip
/src/plugins/zip/vcxproj/salamander/Release_x64/plugins/zip
/src/plugins/zip/vcxproj/zip2sfx/salamander/Debug_x86/plugins/zip/zip2sfx/Intermediate/microsoft/STL
/src/plugins/zip/vcxproj/zip2sfx/salamander/Release_x86/plugins/zip/zip2sfx/Intermediate/microsoft/STL
/src/vcxproj/salamander/Debug_x64
/src/vcxproj/salamander/Release_x64
/src/vcxproj/salmon/salamander/Debug_x64
/src/vcxproj/salmon/salamander/Release_x64
/src/vcxproj/salopen/salamander/Debug_x64/plugins/Intermediate/salopen/Intermediate/microsoft/STL
/src/vcxproj/salopen/salamander/Release_x64/plugins/Intermediate/salopen/Intermediate/microsoft/STL
/src/vcxproj/salspawn/salamander/Debug_x64/plugins/Intermediate/salspawn/Intermediate/microsoft/STL
/src/vcxproj/salspawn/salamander/Release_x64/plugins/Intermediate/salspawn/Intermediate/microsoft/STL
/src/vcxproj/shellext/salamander/Debug_x64/plugins/Intermediate/salextx64/Intermediate/microsoft/STL
/src/vcxproj/shellext/salamander/Debug_x86/plugins/Intermediate/salextx86/Intermediate/microsoft/STL
/src/vcxproj/shellext/salamander/Release_x64/plugins/Intermediate/salextx64/Intermediate/microsoft/STL
/src/vcxproj/shellext/salamander/Release_x86/plugins/Intermediate/salextx86/Intermediate/microsoft/STL
/src/vcxproj/sqlite/salamander/Debug_x64
/src/vcxproj/sqlite/salamander/Release_x64
198 changes: 198 additions & 0 deletions src/plugins/csdemo/csdemo.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
// SPDX-FileCopyrightText: 2023 Open Salamander Authors
// SPDX-License-Identifier: GPL-2.0-or-later

//****************************************************************************
//
// Copyright (c) 2023 Open Salamander Authors
//
// This is a part of the Open Salamander SDK library.
//
//****************************************************************************

#include "precomp.h"

// plugin interface object; Salamander calls its methods
CPluginInterface PluginInterface;
// additional parts of the CPluginInterface interface
CPluginInterfaceForMenuExt InterfaceForMenuExt;

// global data
const char* PluginNameEN = "C# Demo"; // untranslated plugin name, used before the language module loads and for debugging
const char* PluginNameShort = "CSDEMO"; // plugin name (short, without spaces)

HINSTANCE DLLInstance = NULL; // handle of the SPL - language-neutral resources
HINSTANCE HLanguage = NULL; // handle of the SLG - language-specific resources

// generic Salamander interface - valid from startup until the plugin shuts down
CSalamanderGeneralAbstract* SalamanderGeneral = NULL;

// variable definition for "dbg.h"
CSalamanderDebugAbstract* SalamanderDebug = NULL;

// variable definition for "spl_com.h"
int SalamanderVersion = 0;

// interface providing custom Windows controls used in Salamander
//CSalamanderGUIAbstract *SalamanderGUI = NULL;

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
DLLInstance = hinstDLL;

INITCOMMONCONTROLSEX initCtrls;
initCtrls.dwSize = sizeof(INITCOMMONCONTROLSEX);
initCtrls.dwICC = ICC_BAR_CLASSES;
if (!InitCommonControlsEx(&initCtrls))
{
MessageBox(NULL, "InitCommonControlsEx failed!", "Error", MB_OK | MB_ICONERROR);
return FALSE; // DLL won't start
}
}

return TRUE; // DLL can be loaded
}

// ****************************************************************************

char* LoadStr(int resID)
{
return SalamanderGeneral->LoadStr(HLanguage, resID);
}

void OnAbout(HWND hParent)
{
if (!ManagedBridge_ShowAbout(hParent))
{
SalamanderGeneral->SalMessageBox(hParent,
"Unable to open the managed About dialog.\n"
"Verify that CSDemo.Managed.dll is located next to the plugin.",
LoadStr(IDS_PLUGINNAME), MB_OK | MB_ICONERROR);
}
}

//
// ****************************************************************************
// SalamanderPluginGetReqVer
//

#ifdef __BORLANDC__
extern "C"
{
int WINAPI SalamanderPluginGetReqVer();
CPluginInterfaceAbstract* WINAPI SalamanderPluginEntry(CSalamanderPluginEntryAbstract* salamander);
};
#endif // __BORLANDC__

int WINAPI SalamanderPluginGetReqVer()
{
return LAST_VERSION_OF_SALAMANDER;
}

//
// ****************************************************************************
// SalamanderPluginEntry
//

CPluginInterfaceAbstract* WINAPI SalamanderPluginEntry(CSalamanderPluginEntryAbstract* salamander)
{
// configure SalamanderDebug for "dbg.h"
SalamanderDebug = salamander->GetSalamanderDebug();
// configure SalamanderVersion for "spl_com.h"
SalamanderVersion = salamander->GetVersion();
HANDLES_CAN_USE_TRACE();
CALL_STACK_MESSAGE1("SalamanderPluginEntry()");

// the plugin targets the current version of Salamander and newer - verify the requirement
if (SalamanderVersion < LAST_VERSION_OF_SALAMANDER)
{ // reject older versions
MessageBox(salamander->GetParentWindow(),
REQUIRE_LAST_VERSION_OF_SALAMANDER,
PluginNameEN, MB_OK | MB_ICONERROR);
return NULL;
}

// load the language module (.slg)
HLanguage = salamander->LoadLanguageModule(salamander->GetParentWindow(), PluginNameEN);
if (HLanguage == NULL)
return NULL;

// obtain the general Salamander interface
SalamanderGeneral = salamander->GetSalamanderGeneral();
// obtain the interface providing custom Windows controls used in Salamander
// SalamanderGUI = salamander->GetSalamanderGUI();

// set the help file name
SalamanderGeneral->SetHelpFileName("csdemo.chm");

// set the basic plugin metadata
salamander->SetBasicPluginData(LoadStr(IDS_PLUGINNAME), FUNCTION_DYNAMICMENUEXT | FUNCTION_CONFIGURATION,
VERSINFO_VERSION_NO_PLATFORM, VERSINFO_COPYRIGHT,
LoadStr(IDS_PLUGIN_DESCRIPTION), PluginNameShort,
NULL, NULL);

// set the plugin home page URL
salamander->SetPluginHomePageURL(LoadStr(IDS_PLUGIN_HOME));

return &PluginInterface;
}

//
// ****************************************************************************
// CPluginInterface
//

void WINAPI
CPluginInterface::About(HWND parent)
{
OnAbout(parent);
}

BOOL WINAPI
CPluginInterface::Release(HWND parent, BOOL force)
{
ManagedBridge_Shutdown();
return TRUE;
}

void WINAPI
CPluginInterface::Configuration(HWND parent)
{
if (!ManagedBridge_ShowConfiguration(parent))
{
SalamanderGeneral->SalMessageBox(parent,
"Unable to open the managed configuration window.",
LoadStr(IDS_PLUGINNAME), MB_OK | MB_ICONERROR);
}
}

void WINAPI
CPluginInterface::Connect(HWND parent, CSalamanderConnectAbstract* salamander)
{
CALL_STACK_MESSAGE1("CPluginInterface::Connect(,)");

// basic part:
salamander->AddMenuItem(-1, LoadStr(IDS_MENU_HELLO), SALHOTKEY('M', HOTKEYF_CONTROL | HOTKEYF_SHIFT),
MENUCMD_SHOWHELLO, FALSE, MENU_EVENT_TRUE, MENU_EVENT_TRUE, MENU_SKILLLEVEL_ALL);

ManagedBridge_EnsureInitialized(parent);

/*
CGUIIconListAbstract *iconList = SalamanderGUI->CreateIconList();
iconList->Create(16, 16, 1);
HICON hIcon = (HICON)LoadImage(DLLInstance, MAKEINTRESOURCE(IDI_PLUGINICON), IMAGE_ICON, 16, 16, SalamanderGeneral->GetIconLRFlags());
iconList->ReplaceIcon(0, hIcon);
DestroyIcon(hIcon);
salamander->SetIconListForGUI(iconList); // Salamander takes care of destroying the icon list

salamander->SetPluginIcon(0);
salamander->SetPluginMenuAndToolbarIcon(0);
*/
}

CPluginInterfaceForMenuExtAbstract* WINAPI
CPluginInterface::GetInterfaceForMenuExt()
{
return &InterfaceForMenuExt;
}
4 changes: 4 additions & 0 deletions src/plugins/csdemo/csdemo.def
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
LIBRARY CSDEMO.SPL

EXPORTS SalamanderPluginEntry
EXPORTS SalamanderPluginGetReqVer
73 changes: 73 additions & 0 deletions src/plugins/csdemo/csdemo.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
// SPDX-FileCopyrightText: 2023 Open Salamander Authors
// SPDX-License-Identifier: GPL-2.0-or-later

//****************************************************************************
//
// Copyright (c) 2023 Open Salamander Authors
//
// This is a part of the Open Salamander SDK library.
//
//****************************************************************************

#pragma once

// global data
extern HINSTANCE DLLInstance; // handle of the SPL - language-neutral resources
extern HINSTANCE HLanguage; // handle of the SLG - language-specific resources

// generic Salamander interface - valid from startup until the plugin shuts down
extern CSalamanderGeneralAbstract* SalamanderGeneral;

char* LoadStr(int resID);

// plugin menu commands
#define MENUCMD_SHOWHELLO 1

//
// ****************************************************************************
// CPluginInterface
//

class CPluginInterfaceForMenuExt : public CPluginInterfaceForMenuExtAbstract
{
public:
virtual DWORD WINAPI GetMenuItemState(int id, DWORD eventMask) { return 0; }
virtual BOOL WINAPI ExecuteMenuItem(CSalamanderForOperationsAbstract* salamander, HWND parent,
int id, DWORD eventMask);
virtual BOOL WINAPI HelpForMenuItem(HWND parent, int id);
virtual void WINAPI BuildMenu(HWND parent, CSalamanderBuildMenuAbstract* salamander) {}
};

class CPluginInterface : public CPluginInterfaceAbstract
{
public:
virtual void WINAPI About(HWND parent);

virtual BOOL WINAPI Release(HWND parent, BOOL force);

virtual void WINAPI LoadConfiguration(HWND parent, HKEY regKey, CSalamanderRegistryAbstract* registry) {}
virtual void WINAPI SaveConfiguration(HWND parent, HKEY regKey, CSalamanderRegistryAbstract* registry) {}
virtual void WINAPI Configuration(HWND parent);

virtual void WINAPI Connect(HWND parent, CSalamanderConnectAbstract* salamander);

virtual void WINAPI ReleasePluginDataInterface(CPluginDataInterfaceAbstract* pluginData) {}

virtual CPluginInterfaceForArchiverAbstract* WINAPI GetInterfaceForArchiver() { return NULL; }
virtual CPluginInterfaceForViewerAbstract* WINAPI GetInterfaceForViewer() { return NULL; }
virtual CPluginInterfaceForMenuExtAbstract* WINAPI GetInterfaceForMenuExt();
virtual CPluginInterfaceForFSAbstract* WINAPI GetInterfaceForFS() { return NULL; }
virtual CPluginInterfaceForThumbLoaderAbstract* WINAPI GetInterfaceForThumbLoader() { return NULL; }

virtual void WINAPI Event(int event, DWORD param) {}
virtual void WINAPI ClearHistory(HWND parent) {}
virtual void WINAPI AcceptChangeOnPathNotification(const char* path, BOOL includingSubdirs) {}

virtual void WINAPI PasswordManagerEvent(HWND parent, int event) {}
};

// plugin interface provided to Salamander
extern CPluginInterface PluginInterface;

// open the About dialog
void OnAbout(HWND hParent);
Loading
Loading