Skip to content

Commit b4ce147

Browse files
committed
Toolbar Icons working
- Icons loading correct - N++ toolbar interface needs HBITMAP, so default Python logo converted to bitmap - Next is to set the bitmap as part of the config dlg
1 parent d771a89 commit b4ce147

File tree

10 files changed

+86
-17
lines changed

10 files changed

+86
-17
lines changed

PythonScript/project/PythonScript2010.vcxproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,13 @@
9797
<DeploymentContent>false</DeploymentContent>
9898
<FileType>BMP</FileType>
9999
</None>
100+
<None Include="..\src\python.bmp" />
100101
<None Include="..\src\python.ico" />
101102
<None Include="FolderClosed.ico" />
102103
<None Include="FolderOpen.ico" />
103104
<None Include="python-powered-w-140x56.bmp" />
104105
<None Include="python-powered-w-140x56.png" />
106+
<None Include="python.bmp" />
105107
<None Include="python.ico" />
106108
<None Include="ReadMe.txt" />
107109
</ItemGroup>

PythonScript/project/PythonScript2010.vcxproj.filters

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@
4949
<None Include="..\src\python.ico">
5050
<Filter>Resource Files</Filter>
5151
</None>
52+
<None Include="python.bmp">
53+
<Filter>Resource Files</Filter>
54+
</None>
55+
<None Include="..\src\python.bmp">
56+
<Filter>Resource Files</Filter>
57+
</None>
5258
</ItemGroup>
5359
<ItemGroup>
5460
<ClCompile Include="..\src\PythonHandler.cpp">

PythonScript/src/ConfigFile.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ ConfigFile::ConfigFile(const TCHAR *configDir, const TCHAR *pluginDir, HINSTANCE
3434
ConfigFile::~ConfigFile()
3535
{
3636
// TODO: Clean up
37+
// DeleteImage
38+
//
39+
3740
}
3841

3942

@@ -44,8 +47,7 @@ void ConfigFile::readConfig()
4447
TCHAR buffer[500];
4548

4649

47-
HICON defaultIcon = LoadIcon(m_hInst, MAKEINTRESOURCE(IDI_PYTHON));
48-
HICON hIcon;
50+
HBITMAP hIcon;
4951

5052
while (startupFile.good())
5153
{
@@ -70,16 +72,16 @@ void ConfigFile::readConfig()
7072
TCHAR *iconPath = _tcstok_s(NULL, _T("/"), &context);
7173
if (!iconPath || !(*iconPath))
7274
{
73-
hIcon = defaultIcon;
75+
hIcon = static_cast<HBITMAP>(LoadImage(m_hInst, MAKEINTRESOURCE(IDB_PYTHON), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE));
7476
iconPath = NULL;
7577
}
7678
else
7779
{
78-
hIcon = static_cast<HICON>(LoadImage(NULL, iconPath, IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR));
80+
hIcon = static_cast<HBITMAP>(LoadImage(NULL, iconPath, IMAGE_BITMAP, 16, 16, LR_LOADMAP3DCOLORS | LR_LOADFROMFILE));
7981
}
8082

8183

82-
m_toolbarItems.push_back(pair<tstring, pair<HICON, tstring> >(tstring(element), pair<HICON, tstring>(hIcon, iconPath ? tstring(iconPath) : tstring())));
84+
m_toolbarItems.push_back(pair<tstring, pair<HBITMAP, tstring> >(tstring(element), pair<HBITMAP, tstring>(hIcon, iconPath ? tstring(iconPath) : tstring())));
8385
}
8486
else if (0 == _tcscmp(element, _T("SETTING")))
8587
{
@@ -131,8 +133,8 @@ void ConfigFile::addMenuItem(const tstring scriptPath)
131133

132134
void ConfigFile::addToolbarItem(const tstring scriptPath, const tstring iconPath)
133135
{
134-
HICON hIcon = static_cast<HICON>(LoadImage(m_hInst, iconPath.c_str(), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR));
135-
m_toolbarItems.push_back(pair<tstring, pair<HICON, tstring> >(scriptPath, pair<HICON, tstring>(hIcon, iconPath)));
136+
HBITMAP hIcon = static_cast<HBITMAP>(LoadImage(m_hInst, iconPath.c_str(), IMAGE_BITMAP, 16, 16, LR_LOADMAP3DCOLORS));
137+
m_toolbarItems.push_back(pair<tstring, pair<HBITMAP, tstring> >(scriptPath, pair<HBITMAP, tstring>(hIcon, iconPath)));
136138
}
137139

138140
void ConfigFile::setSetting(const tstring& settingName, const tstring settingValue)

PythonScript/src/ConfigFile.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class ConfigFile
77
{
88
public:
99
typedef std::vector< tstring > MenuItemsTD;
10-
typedef std::vector< std::pair<tstring, std::pair<HICON, tstring> > > ToolbarItemsTD;
10+
typedef std::vector< std::pair<tstring, std::pair<HBITMAP, tstring> > > ToolbarItemsTD;
1111
typedef std::map< tstring, tstring > SettingsTD;
1212

1313
ConfigFile(const TCHAR *configDir, const TCHAR *pluginDir, HINSTANCE hInst);

PythonScript/src/MenuManager.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ int MenuManager::s_startFixedID;
1919
int MenuManager::s_endFixedID;
2020
int MenuManager::s_startDynamicEntryID;
2121
int MenuManager::s_endDynamicEntryID;
22+
int MenuManager::s_startToolbarID;
23+
int MenuManager::s_endToolbarID;
24+
2225
bool MenuManager::s_menuItemClicked;
2326

2427
void (*MenuManager::s_runScript)(int);
@@ -61,6 +64,8 @@ MenuManager::MenuManager(HWND hNotepad, HINSTANCE hInst, void(*runScript)(const
6164
{
6265
s_startDynamicEntryID = 1;
6366
s_endDynamicEntryID = 0;
67+
s_startToolbarID = 1;
68+
s_endToolbarID = 0;
6469

6570
m_runScriptFuncs[0] = runScript0;
6671
m_runScriptFuncs[1] = runScript1;
@@ -338,6 +343,10 @@ void MenuManager::menuCommand(int commandID)
338343
m_runScript(m_scriptCommands[commandID].c_str());
339344
}
340345

346+
void MenuManager::toolbarCommand(int commandID)
347+
{
348+
m_runScript(m_toolbarCommands[commandID].c_str());
349+
}
341350

342351

343352

@@ -361,6 +370,12 @@ LRESULT CALLBACK notepadWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM l
361370
MenuManager::getInstance()->menuCommand(LOWORD(wParam));
362371
return TRUE;
363372
}
373+
else if (LOWORD(wParam) >= MenuManager::s_startToolbarID && LOWORD(wParam) < MenuManager::s_endToolbarID && HIWORD(wParam) == 0)
374+
{
375+
MenuManager::s_menuItemClicked = true;
376+
MenuManager::getInstance()->toolbarCommand(LOWORD(wParam));
377+
return TRUE;
378+
}
364379

365380
}
366381

@@ -526,4 +541,26 @@ void MenuManager::reconfigure()
526541

527542
m_dynamicCount = menuItems.size();
528543
s_endDynamicEntryID = dynamicEntryID;
544+
}
545+
546+
547+
void MenuManager::configureToolbarIcons()
548+
{
549+
ConfigFile *configFile = ConfigFile::getInstance();
550+
ConfigFile::ToolbarItemsTD toolbarItems = configFile->getToolbarItems();
551+
s_startToolbarID = m_funcItems[0]._cmdID + ADD_TOOLBAR_ID;
552+
int currentToolbarID = s_startToolbarID;
553+
toolbarIcons icons;
554+
555+
for(ConfigFile::ToolbarItemsTD::iterator it = toolbarItems.begin(); it != toolbarItems.end(); ++it)
556+
{
557+
icons.hToolbarBmp = it->second.first;
558+
icons.hToolbarIcon = NULL;
559+
m_toolbarCommands.insert(pair<int, string>(currentToolbarID, WcharMbcsConverter::tchar2char(it->first.c_str()).get()));
560+
::SendMessage(m_hNotepad, NPPM_ADDTOOLBARICON, currentToolbarID, reinterpret_cast<LPARAM>(&icons));
561+
++currentToolbarID;
562+
}
563+
564+
if (currentToolbarID > s_startToolbarID)
565+
s_endToolbarID = currentToolbarID;
529566
}

PythonScript/src/MenuManager.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
// Added to first real menu item command ID for the dynamic Scripts sub menu
1313
#define ADD_CMD_ID 1750
1414

15+
// Added to first real menu item for toolbar commandIDs
16+
#define ADD_TOOLBAR_ID 2150
17+
1518
struct FuncItem;
1619

1720
class MenuManager
@@ -34,17 +37,23 @@ class MenuManager
3437

3538
bool populateScriptsMenu();
3639
void menuCommand(int commandID);
40+
void toolbarCommand(int commandID);
3741

3842
void reconfigure();
3943

4044
void refreshScriptsMenu();
4145

46+
47+
void configureToolbarIcons();
48+
4249
static int s_startCommandID;
4350
static int s_endCommandID;
4451
static int s_startFixedID;
4552
static int s_endFixedID;
4653
static int s_startDynamicEntryID;
4754
static int s_endDynamicEntryID;
55+
static int s_startToolbarID;
56+
static int s_endToolbarID;
4857

4958
static bool s_menuItemClicked;
5059
static WNDPROC s_origWndProc;
@@ -68,8 +77,10 @@ class MenuManager
6877

6978
MachineScriptNamesTD m_machineScriptNames;
7079
ScriptCommandsTD m_scriptCommands;
80+
ScriptCommandsTD m_toolbarCommands;
7181
SubmenusTD m_submenus;
7282

83+
7384
static MenuManager* s_menuManager;
7485

7586
HWND m_hNotepad;

PythonScript/src/PythonScript.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,12 @@ void initialise()
236236

237237
}
238238

239+
void registerToolbarIcons()
240+
{
241+
MessageBox(NULL, _T("Register toolbar icons"), _T("Python Script"), 0);
242+
MenuManager::getInstance()->configureToolbarIcons();
243+
}
244+
239245
extern "C" __declspec(dllexport) void beNotified(SCNotification *notifyCode)
240246
{
241247
/* This switch is split into two
@@ -269,6 +275,10 @@ extern "C" __declspec(dllexport) void beNotified(SCNotification *notifyCode)
269275
}
270276
}
271277
break;
278+
279+
case NPPN_TBMODIFICATION:
280+
registerToolbarIcons();
281+
break;
272282
}
273283

274284
// Notify the scripts

PythonScript/src/PythonScript.rc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -167,13 +167,6 @@ BEGIN
167167
END
168168

169169

170-
/////////////////////////////////////////////////////////////////////////////
171-
//
172-
// Bitmap
173-
//
174-
175-
IDB_BITMAP1 BITMAP "python-powered-w-140x56.bmp"
176-
177170
/////////////////////////////////////////////////////////////////////////////
178171
//
179172
// Icon
@@ -184,6 +177,13 @@ IDB_BITMAP1 BITMAP "python-powered-w-140x56.bmp"
184177
IDI_FOLDERCLOSED ICON "FolderClosed.ico"
185178
IDI_FOLDEROPEN ICON "FolderOpen.ico"
186179
IDI_PYTHON ICON "python.ico"
180+
181+
/////////////////////////////////////////////////////////////////////////////
182+
//
183+
// Bitmap
184+
//
185+
186+
IDB_PYTHON BITMAP "python.bmp"
187187
#endif // English (United Kingdom) resources
188188
/////////////////////////////////////////////////////////////////////////////
189189

PythonScript/src/python.bmp

1.05 KB
Binary file not shown.

PythonScript/src/resource.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
#define IDD_DIALOG1 101
66
#define IDD_ABOUTDLG 101
77
#define IDB_PNG1 102
8-
#define IDB_BITMAP1 103
98
#define IDD_CONSOLE 104
109
#define IDD_SCRIPTCONFIG 105
1110
#define IDI_FOLDERCLOSED 107
1211
#define IDI_FOLDEROPEN 108
1312
#define IDI_ICON3 109
1413
#define IDI_PYTHON 109
14+
#define IDB_BITMAP1 110
15+
#define IDB_PYTHON 110
1516
#define IDC_INPUT 1001
1617
#define IDC_RUN 1002
1718
#define IDC_PROMPT 1003
@@ -31,7 +32,7 @@
3132
//
3233
#ifdef APSTUDIO_INVOKED
3334
#ifndef APSTUDIO_READONLY_SYMBOLS
34-
#define _APS_NEXT_RESOURCE_VALUE 110
35+
#define _APS_NEXT_RESOURCE_VALUE 111
3536
#define _APS_NEXT_COMMAND_VALUE 40001
3637
#define _APS_NEXT_CONTROL_VALUE 1013
3738
#define _APS_NEXT_SYMED_VALUE 101

0 commit comments

Comments
 (0)