Beispiel #1
0
// -----------------------------------------------------------------------
// Initialize Form
int CALLBACK FRMAddInsProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT CreatePs;
    long CurrentLvItem = 0;
    long AddInIcon = 0;
    CStr RunningInIniFile;
    POINT PopMenuCoords;
    CStr OpFilters;
    CStr LdFile;
    FARPROC AddInAuthUpDate = 0;
    FARPROC AddInDescUpDate = 0;
    long OldRunningState = 0;
    CStr BufString;

    switch(uMsg)
    {
        case WM_SYSCOLORCHANGE:
            ListViewSetBackColor(FRMAddInsListView, GetSysColor(COLOR_WINDOW));
            break;
        case WM_INITDIALOG:
            FRMAddInshWnd = hwndDlg;
            ControlSetText(hwndDlg, "AddIns manager");
            FRMAddInsCmdOk = CreateButton(327, 292, 77, 23, hwndDlg, "Ok", 1, 0, 0, 0, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP, Buttons_StaticEdge);
            FRMAddInsCmdCancel = CreateButton(406, 292, 77, 23, hwndDlg, "Cancel", 2, 0, 0, 0, WS_TABSTOP, Buttons_StaticEdge);
            FRMAddInsListView = CreateListView(2, 1, 482, 278, hwndDlg, 0, GlobalImageList1, 0, LVS_EX_FULLROWSELECT | LVS_EX_LABELTIP | LVS_EX_CHECKBOXES, LVS_REPORT | LVS_SINGLESEL | WS_TABSTOP | LVS_NOSORTHEADER, WS_EX_STATICEDGE);
            ListViewAddCol(FRMAddInsListView, "Author", 198, 0);
            ListViewAddCol(FRMAddInsListView, "Description", 265, 1);
            ListViewSetItemSel(FRMAddInsListView, 0);
            FillAddinsList();
            hAddInsMenu = CreatePopupMenu();
            MenuAddString(hAddInsMenu, "Load/Unload AddIn", ADDIN_IDBASE + ADDIN_ENABLE, TRUE);
            MenuSetDefaultItem(hAddInsMenu, 0);
            MenuAddSeparator(hAddInsMenu);
            MenuAddString(hAddInsMenu, "Display in AddIns menu", ADDIN_IDBASE + ADDIN_MENU, TRUE);
            MenuAddString(hAddInsMenu, "Remove from AddIns menu", ADDIN_IDBASE + ADDIN_REMMENU, TRUE);
            MenuAddSeparator(hAddInsMenu);
            MenuAddString(hAddInsMenu, "Update AddIn", ADDIN_IDBASE + ADDIN_UPDATE, TRUE);
            FreezeTimer = 1;
            return(0);
        case WM_PAINT:
            BeginPaint(hwndDlg, &CreatePs);
            GDIDrawHorzSep(hwndDlg, 0, 285, 486);
            EndPaint(hwndDlg, &CreatePs);
            break;
        case WM_COMMAND:
            if((HWND) lParam == FRMAddInsCmdOk)
            {
                SaveAddInList();
                ReFillAddInsArrays();
                FillAddInsMenu();
                RefreshRunningStates();
                ControlClose(hwndDlg);
                return(0);
            }
            else if((HWND) lParam == FRMAddInsCmdCancel)
            {
                ControlClose(hwndDlg);
                return(0);
            }
            switch(wParam)
            {
                case (ADDIN_ENABLE + ADDIN_IDBASE):
                    AddInIcon = ListViewGetSubItemImage(FRMAddInsListView, CurrentPopupItem, 0);
                    if(AddInIcon == ICON_ADDINR) AddInIcon = ICON_ADDINS;
                    else AddInIcon = ICON_ADDINR;
                    ListViewSetSubItemImage(FRMAddInsListView, AddInIcon, CurrentPopupItem, 0);
                    return(0);
                case (ADDIN_MENU + ADDIN_IDBASE):
                    ListViewSetItemCheckbox(FRMAddInsListView, CurrentPopupItem, 1);
                    return(0);
                case (ADDIN_REMMENU + ADDIN_IDBASE):
                    ListViewSetItemCheckbox(FRMAddInsListView, CurrentPopupItem, 0);
                    return(0);
                case (ADDIN_UPDATE + ADDIN_IDBASE):
                    OpFilters = AppTitle + (CStr) " AddIn (*.dll)|*.dll";
                    LdFile = ComDlgGetOpenFileName(hwndDlg, OpFilters, LastAddInDir, 0, CurrentDir);
                    if(LdFile.Len() != 0)
                    {
                        // Check if the AddIn is located in AddIns directory
                        if(_strcmpi(FileGetDirectory(LdFile).Get_String(), Dirs[DIR_ADDINS]) == 0)
                        {
                            MiscMsgBox(hwndDlg, "New AddIn can't be located in AddIns directory.", MB_ERROR, Requesters);
                            return(0);
                        }
                        // Check if file exist
                        if(FileExist(Dirs[DIR_ADDINS] + (CStr) "\\" + (CStr) FileGetFileName(LdFile)) == 0)
                        {
                            MiscMsgBox(hwndDlg, "No corresponding AddIn found.", MB_ERROR, Requesters);
                            return(0);
                        }
                        // Check if names are identicals
                        if(_strcmpi(LocalAddInsFiles.Get(CurrentPopupItem)->Content,
                                   FileGetFileName(LdFile).Get_String()) != 0)
                        {
                            MiscMsgBox(hwndDlg, "AddIn name doesn't match.", MB_ERROR, Requesters);
                            return(0);
                        }
                        if(IsAddIn(LdFile) == 0)
                        {
                            MiscMsgBox(hwndDlg, "Not a Chromatic AddIn.", MB_ERROR, Requesters);
                            return(0);
                        }
                        // Step 1: Shutdown it
                        OldRunningState = ShutDownAddIn(CurrentPopupItem);
                        // Step 2: Delete it
                        BufString = Dirs[DIR_ADDINS] + (CStr) "\\" + (CStr) LocalAddInsFiles.Get(CurrentPopupItem)->Content;
                        DeleteFile(BufString.Get_String());
                        // Step 3: Copy it
                        CopyFile(LdFile.Get_String(), BufString.Get_String(), 0);
                        // Step 4: Restart it
                        RunningAddIns.Set(CurrentPopupItem, OldRunningState);
                        if(RestartAddIn(CurrentPopupItem) == 0)
                        {
                            MiscMsgBox(hwndDlg, "Can't update this AddIn.", MB_ERROR, Requesters);
                            return(0);
                        }
                        SetForegroundWindow(FRMAddInshWnd);
                        SetActiveWindow(FRMAddInshWnd);
                        // Step 5: Update listview with possible new infos
                        AddInDescUpDate = GetProcAddress(AddInsDLL.Get(CurrentPopupItem)->Content, "AddInDescription");
                        AddInAuthUpDate = GetProcAddress(AddInsDLL.Get(CurrentPopupItem)->Content, "AddInAuthor");
                        ListViewSetSelItemText(FRMAddInsListView, GetDLLDescription(LocalAddInsFiles.Get(CurrentPopupItem)->Content, AddInDescUpDate), 0);
                        ListViewSetSelItemText(FRMAddInsListView, GetDLLAuthor(AddInAuthUpDate), 1);
                        LastAddInDir = FileGetDirectory(LdFile);
                        MiscMsgBox(hwndDlg, "AddIn '" + GetDLLDescription(LocalAddInsFiles.Get(CurrentPopupItem)->Content, AddInDescUpDate) + (CStr) "' updated.", MB_INFORMATION, Requesters);
                    }
                    return(0);
            }
            break;
        case WM_NOTIFY:
            if(ControlGetNotifiedhWnd(lParam) == FRMAddInsListView)
            {
                switch(ControlGetNotifiedMsg(lParam))
                {
                    case NM_DBLCLK:
                        CurrentLvItem = ListViewGetItemUnderCursor(FRMAddInsListView);
                        if(CurrentLvItem != -1)
                        {
                            AddInIcon = ListViewGetSubItemImage(FRMAddInsListView, CurrentLvItem, 0);
                            if(AddInIcon == ICON_ADDINR) AddInIcon = ICON_ADDINS;
                            else AddInIcon = ICON_ADDINR;
                            ListViewSetItemSel(FRMAddInsListView, CurrentLvItem);
                            ListViewSetSubItemImage(FRMAddInsListView, AddInIcon, CurrentLvItem, 0);
                        }
                        return(0);
                }
            }
            break;
        case WM_CONTEXTMENU:
            CurrentLvItem = ListViewGetItemUnderCursor(FRMAddInsListView);
            if(CurrentLvItem != -1)
            {
                ListViewSetItemSel(FRMAddInsListView, CurrentLvItem);
                CurrentPopupItem = ListViewGetItemUnderCursor(FRMAddInsListView);
                SetFocus(FRMAddInsListView);
                GetCursorPos(&PopMenuCoords);
                TrackPopupMenu(hAddInsMenu, TPM_LEFTALIGN + TPM_LEFTBUTTON, PopMenuCoords.x, PopMenuCoords.y, 0, hwndDlg, NULL);
            }
            return(0);
        case WM_CLOSE:
            if(hAddInsMenu != 0) DestroyMenu(hAddInsMenu);
            FreezeTimer = 0;
            FRMAddInsListView = 0;
            EndDialog(hwndDlg, 0);
    }
    return(0);
}
Beispiel #2
0
// -----------------------------------------------------------------------
// Save the list of selected addins
void SaveAddInList(void)
{
    int i = 0;
    long NewAddInPos = 0;
    long AddInIcon = 0;

    // Delete every entries
    IniDeleteKey("AddIns", "", MainIniFile);
    // First refresh ini file with found addins
    for(i = 0; i <= (long) ListViewItemCount(FRMAddInsListView) - 1; i++)
    {
        // Obtain an empty slot
        NewAddInPos = GetAddInSlot();
        IniWriteKey("AddIns", "File" + (CStr) StringNumberComplement(NewAddInPos, 3).Get_String(), LocalAddInsFiles.Get(i)->Content, MainIniFile);
        IniWriteKey("AddIns", "Loaded" + (CStr) StringNumberComplement(NewAddInPos, 3).Get_String(), ListViewGetItemCheckbox(FRMAddInsListView, i), MainIniFile);
        // User wants to run it now ?
        AddInIcon = ListViewGetSubItemImage(FRMAddInsListView, i, 0);
        if(AddInIcon == ICON_ADDINS) IniWriteKey("AddIns", "Running" + (CStr) StringNumberComplement(NewAddInPos, 3).Get_String(), "1", MainIniFile);
        else IniWriteKey("AddIns", "Running" + (CStr) StringNumberComplement(NewAddInPos, 3).Get_String(), "0", MainIniFile);
    }
    // Save old datas
    OldRunningAddIns.Erase();
    OldRunningAddIns.MAdd(RunningAddIns.Amount(), 0L);
    OldAddInsFiles.Erase();
    OldAddInsFiles.MAdd(AddInsFiles.Amount(), "");
    OldAddInsDLL.Erase();
    OldAddInsDLL.MAdd(AddInsDLL.Amount(), 0L);
    for(i = 0; i < RunningAddIns.Amount(); i++)
    {
        // Save names
        OldAddInsFiles.Set(i, AddInsFiles.Get(i)->Content);
        // Save handles
        OldAddInsDLL.Set(i, AddInsDLL.Get(i)->Content);
        // Save running states
        OldRunningAddIns.Set(i, RunningAddIns.Get(i)->Content);
    }
}