Added ShConstants.h to makenssi project
Size optimization on ui.c Some fixes in Shell Folders code git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3297 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
2589a5fc85
commit
660bbf5e2d
6 changed files with 104 additions and 10 deletions
91
Source/ShConstants.h
Normal file
91
Source/ShConstants.h
Normal file
|
@ -0,0 +1,91 @@
|
|||
// constants.h by Ramon 18 Nov 2003
|
||||
|
||||
#ifndef ___CONSTANTS___H_____
|
||||
#define ___CONSTANTS___H_____
|
||||
|
||||
#include "Lang.h"
|
||||
|
||||
struct constantstring {
|
||||
int name;
|
||||
int index;
|
||||
int pos;
|
||||
int value1;
|
||||
int value2;
|
||||
};
|
||||
|
||||
class ConstantsStringList : public SortedStringListND<struct constantstring>
|
||||
{
|
||||
public:
|
||||
ConstantsStringList()
|
||||
{
|
||||
index = 0;
|
||||
}
|
||||
~ConstantsStringList() { }
|
||||
|
||||
int add(const char *name, int value1, int value2)
|
||||
{
|
||||
int pos=SortedStringListND<struct constantstring>::add(name);
|
||||
if (pos == -1) return -1;
|
||||
|
||||
((struct constantstring*)gr.get())[pos].index = index;
|
||||
((struct constantstring*)gr.get())[pos].pos = pos;
|
||||
((struct constantstring*)gr.get())[pos].value1 = value1;
|
||||
((struct constantstring*)gr.get())[pos].value2 = value2;
|
||||
|
||||
int temp = index;
|
||||
index++;
|
||||
|
||||
return temp;
|
||||
}
|
||||
|
||||
int get(char *name, size_t n_chars = -1)
|
||||
{
|
||||
int v=SortedStringListND<struct constantstring>::find(name, n_chars);
|
||||
if (v==-1) return -1;
|
||||
return (((struct constantstring*)gr.get())[v].index);
|
||||
}
|
||||
|
||||
int getnum()
|
||||
{
|
||||
return index;
|
||||
}
|
||||
|
||||
int get_value1(int idx)
|
||||
{
|
||||
int pos=get_internal_idx(idx);
|
||||
if (pos==-1) return -1;
|
||||
return (((struct constantstring*)gr.get())[pos].value1);
|
||||
}
|
||||
|
||||
int get_value2(int idx)
|
||||
{
|
||||
int pos=get_internal_idx(idx);
|
||||
if (pos==-1) return -1;
|
||||
return (((struct constantstring*)gr.get())[pos].value2);
|
||||
}
|
||||
|
||||
char *idx2name(int idx)
|
||||
{
|
||||
int pos=get_internal_idx(idx);
|
||||
if (pos==-1) return NULL;
|
||||
struct constantstring *data=(struct constantstring *)gr.get();
|
||||
return ((char*)strings.get() + data[pos].name);
|
||||
}
|
||||
|
||||
private:
|
||||
int index;
|
||||
int get_internal_idx(int idx)
|
||||
{
|
||||
struct constantstring *data=(struct constantstring *)gr.get();
|
||||
for (int i = 0; i < index; i++)
|
||||
{
|
||||
if (data[i].index == idx)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
|
@ -11,7 +11,7 @@ using namespace std;
|
|||
#include "ResourceEditor.h"
|
||||
#include "ResourceVersionInfo.h"
|
||||
#include "uservars.h"
|
||||
#include "constants.h"
|
||||
#include "ShConstants.h"
|
||||
|
||||
#include "exehead/fileform.h"
|
||||
#include "exehead/config.h"
|
||||
|
|
|
@ -353,7 +353,7 @@ static int CALLBACK WINAPI BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lPara
|
|||
hwnd,
|
||||
BFFM_ENABLEOK,
|
||||
0,
|
||||
my_PIDL2Path((char*)lpData, (LPITEMIDLIST)lParam, 0)
|
||||
SHGetPathFromIDList((LPITEMIDLIST)lParam,(char*)lpData)
|
||||
#ifdef NSIS_SUPPORT_CODECALLBACKS
|
||||
&& !ExecuteCodeSegment(g_header->code_onVerifyInstDir,NULL)
|
||||
#endif
|
||||
|
|
|
@ -31,7 +31,7 @@ NSIS_STRING g_usrvars[TOTAL_COMPATIBLE_STATIC_VARS_COUNT];
|
|||
#define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
|
||||
#endif
|
||||
|
||||
int my_PIDL2Path(char *out, LPITEMIDLIST idl, int bFree)
|
||||
int NSISCALL my_PIDL2Path(char *out, LPITEMIDLIST idl, int bFree)
|
||||
{
|
||||
int Res;
|
||||
IMalloc *m;
|
||||
|
@ -39,7 +39,6 @@ int my_PIDL2Path(char *out, LPITEMIDLIST idl, int bFree)
|
|||
Res = SHGetPathFromIDList(idl, out);
|
||||
if (m && bFree)
|
||||
{
|
||||
m->lpVtbl->Free(m,idl);
|
||||
m->lpVtbl->Release(m);
|
||||
}
|
||||
return Res;
|
||||
|
@ -491,12 +490,12 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
|
|||
// NOTE 3: the code CSIDL_CONTROLS is used for PROGRAMFILES
|
||||
LPITEMIDLIST idl;
|
||||
int qLaunch=0;
|
||||
int nCreateFlag = CSIDL_FLAG_CREATE;
|
||||
|
||||
nVarIdx = (*(WORD*)in & 0x0FFF)-1; in+=sizeof(WORD); // Read code for current user
|
||||
if ( g_exec_flags.all_user_var )
|
||||
nVarIdx = (*(WORD*)in & 0x0FFF)-1; in+=sizeof(WORD); // Use code for All users instead
|
||||
|
||||
nVarIdx |= CSIDL_FLAG_CREATE;
|
||||
*out=0;
|
||||
|
||||
while (TRUE)
|
||||
|
@ -512,12 +511,12 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
|
|||
mystrcpy(out, "C:\\Program Files");
|
||||
break;
|
||||
case CSIDL_DESKTOP: // QUICKLAUNCH
|
||||
nVarIdx = CSIDL_APPDATA;
|
||||
nVarIdx |= CSIDL_APPDATA;
|
||||
qLaunch = 1;
|
||||
// dont break
|
||||
default:
|
||||
// Get and force path creation
|
||||
if ( !SHGetSpecialFolderLocation(g_hwnd, nVarIdx, &idl) )
|
||||
if ( !SHGetSpecialFolderLocation(g_hwnd, nVarIdx | nCreateFlag, &idl) )
|
||||
{
|
||||
if (my_PIDL2Path(out, idl, 1))
|
||||
{
|
||||
|
@ -530,10 +529,10 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
|
|||
break;
|
||||
}
|
||||
|
||||
if ( *out || ((nVarIdx & CSIDL_FLAG_CREATE) != CSIDL_FLAG_CREATE) )
|
||||
if ( *out || nCreateFlag == 0 )
|
||||
break;
|
||||
else
|
||||
nVarIdx &= ~CSIDL_FLAG_CREATE;
|
||||
nCreateFlag = 0; // remove create flag if it fails
|
||||
}
|
||||
|
||||
validate_filename(out);
|
||||
|
|
|
@ -14,7 +14,7 @@ int NSISCALL mystrlen(const char *in);
|
|||
char * NSISCALL mystrstr(char *a, char *b);
|
||||
WIN32_FIND_DATA * NSISCALL file_exists(char *buf);
|
||||
char * NSISCALL my_GetTempFileName(char *buf, const char *dir);
|
||||
int my_PIDL2Path(char *out, LPITEMIDLIST idl, int bFree);
|
||||
int NSISCALL my_PIDL2Path(char *out, LPITEMIDLIST idl, int bFree);
|
||||
|
||||
//BOOL NSISCALL my_SetWindowText(HWND hWnd, const char *val);
|
||||
#define my_SetWindowText SetWindowText
|
||||
|
|
|
@ -297,6 +297,10 @@ SOURCE=.\ResourceVersionInfo.h
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ShConstants.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\strlist.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue