Subversion Repositories spk

Rev

Rev 50 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

// stdafx.cpp : source file that includes just the standard includes
// PluginManager.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information

#include "stdafx.h"

using namespace System;
using namespace Runtime::InteropServices;
using namespace System::Drawing;

namespace PluginManager {
        System::String ^GetProgramName(bool advanced)
        {
                System::String ^str = "X-Universe Plugin Manager ";
                if ( !advanced )
                        str += "Lite";
                else
                        str += "Advanced";
                return str;
        }
        System::String ^GetVersionString()
        {
                return GetVersionString((float)PMLVERSION, (int)PMLBETA);
        }
        System::String ^GetVersionString(float version, int beta)
        {
                System::String ^str = "V" + SystemStringFromCyString(CyString::CreateFromFloat(version, 2));
                // beta version
                if ( beta > 0 )
                        str += " (Beta " + beta + ")";
                // RC release
                else if ( beta < 0 )
                        str += " (RC " + (0 - beta) + ")";
                return str;
        }
        void DisplayListIcon(CBaseFile *p, ListView ^list, ListViewItem ^item)
        {
                CyString file = p->GetIcon()->GetFilePointer();
                if ( !file.Empty() )
                {
                        file = file.FindReplace("/", "\\").FindReplace("\\\\", "\\");
                        bool doIcon = false;
                        System::String ^sFile = SystemStringFromCyString(file);
                        int index = list->SmallImageList->Images->IndexOfKey(sFile);
                        if ( index != -1 )
                        {
                                item->ImageIndex = index;
                                return;
                        }

                        if ( System::IO::File::Exists(sFile) )
                        {
                                doIcon = true;
                                if ( p->GetIconExt().Compare("bmp") )
                                {
                                        list->SmallImageList->Images->Add(Bitmap::FromFile(sFile));
                                        if ( list->SmallImageList != list->LargeImageList )
                                                list->LargeImageList->Images->Add(Bitmap::FromFile(sFile));
                                }
                                else if ( p->GetIconExt().Compare("ico") )
                                {
                                        list->SmallImageList->Images->Add(gcnew System::Drawing::Icon(sFile));
                                        if ( list->SmallImageList != list->LargeImageList )
                                                list->LargeImageList->Images->Add(gcnew System::Drawing::Icon(sFile));
                                }
                                else
                                {
                                        doIcon = false;

                                        Bitmap ^myBitmap = gcnew Bitmap(sFile);
                                        if ( myBitmap )
                                        {
                                                IntPtr Hicon = myBitmap->GetHicon();
                                                System::Drawing::Icon ^newIcon = ::Icon::FromHandle(Hicon);
                                                list->SmallImageList->Images->Add(newIcon);
                                                if ( list->SmallImageList != list->LargeImageList )
                                                        list->LargeImageList->Images->Add(newIcon);
                                                doIcon = true;
                                        }
                                }
                        }

                        if ( doIcon )
                        {
                                list->SmallImageList->Images->SetKeyName(list->SmallImageList->Images->Count - 1, sFile);
                                item->ImageIndex = list->SmallImageList->Images->Count - 1;
                        }
                }
        }

        void DisplayContextIcon(CBaseFile *p, ToolStripMenuItem ^item, ImageList ^list)
        {
                CyString file = p->GetIcon()->GetFilePointer();
                if ( !file.Empty() )
                {
                        file = file.FindReplace("/", "\\").FindReplace("\\\\", "\\");
                        PluginManager::DisplayContextIcon(SystemStringFromCyString(file), item, list);
                }
        }

        void DisplayContextIcon(System::String ^filename, ToolStripMenuItem ^item, ImageList ^list)
        {
                if ( System::IO::File::Exists(filename) )
                {
                        if ( System::IO::FileInfo(filename).Extension == "bmp" || System::IO::FileInfo(filename).Extension == "BMP" || System::IO::FileInfo(filename).Extension == "ico" || System::IO::FileInfo(filename).Extension == "ICO")
                        {
                                if ( list )
                                {
                                        list->Images->Add(filename, Bitmap::FromFile(filename));
                                        item->Image = list->Images[list->Images->IndexOfKey(filename)];
                                }
                                else
                                        item->Image = Bitmap::FromFile(filename);
                        }
                        else
                        {
                                Bitmap ^myBitmap = gcnew Bitmap(filename);
                                if ( myBitmap )
                                {
                                        if ( list )
                                        {
                                                list->Images->Add(filename, myBitmap);
                                                item->Image = list->Images[list->Images->IndexOfKey(filename)];
                                        }
                                        else
                                                item->Image = myBitmap;
                                }
                        }
                }
        }

        bool WriteRegistryValue(CyString rKey, CyString rValue)
        {
                CyString first = rKey.GetToken("/", 1, 1);
                rKey = rKey.GetToken("/", 2);

                RegistryKey ^startKey = nullptr;
                if ( first.Compare("HKCU") )
                        startKey = Registry::CurrentUser;
                else if ( first.Compare("HKLM") )
                        startKey = Registry::LocalMachine;

                if ( startKey )
                {
                        CyString value = rKey.GetToken("/", rKey.NumToken("/"));
                        rKey = rKey.GetToken("/", 1, rKey.NumToken("/") - 1);
                        RegistryKey ^writeKey = startKey->OpenSubKey(SystemStringFromCyString(rKey.FindReplace("/", "\\")), true);
                        if ( writeKey )
                        {
                                writeKey->SetValue(SystemStringFromCyString(value), SystemStringFromCyString(rValue));
                                return true;
                        }
                }

                return false;
        }

        System::String ^ReadRegistryValue(CyString rKey)
        {
                CyString first = rKey.GetToken("/", 1, 1);
                rKey = rKey.GetToken("/", 2);

                System::String ^strKey;

                RegistryKey ^startKey = nullptr;
                if ( first.Compare("HKCU") )
                        startKey = Registry::CurrentUser;
                else if ( first.Compare("HKLM") )
                        startKey = Registry::LocalMachine;

                if ( startKey )
                {
                        CyString value = rKey.GetToken("/", rKey.NumToken("/"));
                        rKey = rKey.GetToken("/", 1, rKey.NumToken("/") - 1);
                        RegistryKey ^readKey = startKey->OpenSubKey(SystemStringFromCyString(rKey.FindReplace("/", "\\")), true);
                        if ( readKey )
                                strKey = System::Convert::ToString(readKey->GetValue(SystemStringFromCyString(value)));
                }

                return strKey;
        }
}