Archive: When will NSIS support skins!?!?!?!


When will NSIS support skins!?!?!?!
I believe NSIS needs to wake up! There is a fantastic team over there that has at least two fantastic products (NSIS and WinAmp) But I feel that NSIS lacks one thing.....one simple thing that Winamp does so well....Skins!

I think The NSIS Installer should acquire the support for skinning!

(I'm going to try and post this as a poll.....)

:D

Whether it's a compile time only or runtime only, both would be nice.

For example:
Compile time, read in an skin.ini file that applys the skin to the installer, which overrides modern.exe's default look.

Runtime looks for a skin.ini residing in the same directory as the executable and applies it to modern.exe at runtime.

Great way to brand an installer for a specific client without having to rebuild your installer, for each branding. Build once, apply many skins....sweet.....


mmm, I don't think.... normally a Installer is ment to be run once...

But that would be cool, also meaning increasing header source code.

BTW:
#1
#2
#3 <- wow an old mod :igor:


One of the main reasons is I'd be able to supply different graphics for different companies and different languages. Right now you cant specify a different MUI_HEADER_BITMAP or any other MUI image based on language without writing script to change the image constantly. Right now you have to rebuild if you want to use a different look and feel, instead of just applying a skin.

I do agree a plugin would be nice, that way those that don't want to use it don't have to have the overhead.

NSIS can be used for more then installers. I saw a whole database application that fully integrated with sql server, and it was written completely with nsis. I even saw a a game that was written in NSIS using standard mui dialogs for configuration etc, and using a custom dialog (modified modern.exe) that contained a directx active x control to host the graphical portion. So there's absolutely no way that anyone can say NSIS is only used for installers.


that would be great..... Iam planning to make some plugins .. but need to learn some C++ first ;)

** reading a book about it ** (at page 11 .. only 658 to go)

maybe I can improve it someday :PP


Well I'd write one, seeing as I know C....I'll have the time soon too. Unfortunately, I've never done anything in regards to skinning. Anyone know of any decent FREE tutorials or books? C, C++, C# preferred.


if u've got problems with the mui settings, why don't u simply write your own define system?
e.g. you got this in your installer:

!define MUI_HEADER_IMAGE_BITMAP "example.bmp"

i'd do this one:
!define skin exampleskin
!define MUI_HEADER_IMAGE_BITMAP "${skin}\header.bmp"

now do so with all image/color defines u're using in your script, and u just need to set 3 defines at the very beginning of your script:
!define SkinPath "somehow\somewhere"
!define PrimColor A1B2C3
!define SecColor D4E5F6

with these 3 defines, u can now set all the look and feel of your installer:
!define MUI_ICON "${SkinPath}\Icon.ico"
!define MUI_UNICON "${SkinPath}\unIcon.ico"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "${SkinPath}\Header.bmp"
!define MUI_HEADERIMAGE_UNBITMAP "${SkinPath}\unHeader.bmp"
!define MUI_BGCOLOR "${SecColor}"
!define MUI_WELCOMEFINISHPAGE_BITMAP "${SkinPath}\WelcomeFinish.bmp"
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "${SkinPath}\unWelcomeFinish.bmp"
!define MUI_LICENSEPAGE_BGCOLOR "${SecColor}"
!define MUI_COMPONENTSPAGE_CHECKBITMAP "${SkinPath}\Checks.bmp"
!define MUI_INSTFILESPAGE_COLORS "${PrimColor}" "${SecColor}"

anymore questions?

ok, few things, that won't be set:
- the settings
- what images should be used
- the RTL settings
- the welcome/finish INI settings
- the description lookout of the components-page
- the ressource-file settings
- the autoclose and abortwarning settings

so, now the second REAL skin method:
1. !define all settings in one header-file (.nsh) per skin
2. !include the headerfile of the skin you want to use
3. finished. you now have a real skin-system

extension:
1. create a new subdirectory for every skin, e.g.:
"C:\mynsisprojects\skintest\skins\skin1" and
"C:\mynsisprojects\skintest\skins\skin2"
2. copy all images for the skin "skin1" into the first directory, for "skin2" into the second ...
3. copy the headerfile with defines from the second skin system to the subdirectory and rename it to "settings.nsh"
4. use this inside your script:
!define Skin "skin1"
!include ".\skins\${Skin}"


now, i think, you can do skins without plugins, and without increasing the overhead of our installers.

I think it's better to do the core first, then think of the options later...

But, are you planning of doing support for a fixed theme or a dynamic one which can be changed everytime I call this plugin?


Well, I haven't decided if I'm even going to attempt it. It would definately increase the "cool factor". Not to mention give NSIS one more "up" on the competition which don't let you chnage hardly anything. The MSI stuff in .Net 2005 looks pretty interesting though....