Beispiel #1
0
void NifStream( HeaderString const & val, ostream& out, const NifInfo & info ) {
	stringstream header_string;
	if ( info.version <= VER_10_0_1_0 ) {
		header_string << "NetImmerse File Format, Version ";
	} else {
		header_string << "Gamebryo File Format, Version ";
	}

	header_string << FormatVersionString(info.version);
	out << header_string.str() << "\n";
};
Beispiel #2
0
LRESULT CALLBACK StringTableDrawProc(HWND hwnd, UINT iMessage, WPARAM wParam,
    LPARAM lParam)
{
    static HCURSOR origCurs;
    RECT r;
    LPCREATESTRUCT createStruct;
    struct resRes *stringTableData;
    LVHITTESTINFO hittest;
    int i;
    struct stringTableUndo *undo;
    switch (iMessage)
    {
        case WM_MDIACTIVATE:
            if ((HWND)lParam == hwnd)
            {
                doMaximize();
            }
            break;
        case WM_SETFOCUS:
            stringTableData = (struct resRes *)GetWindowLong(hwnd, 0);
            SetFocus(stringTableData->gd.childWindow);
            break;
        case WM_NOTIFY:
                switch (((LPNMHDR)lParam)->code)
                {
                    case LVN_GETDISPINFO:
                    {
                        LV_DISPINFO *plvdi = (LV_DISPINFO*)lParam;
                        STRINGS *strings;
                        plvdi->item.mask |= LVIF_TEXT | LVIF_DI_SETITEM;
                        plvdi->item.mask &= ~LVIF_IMAGE;
                        strings = (STRINGS *)plvdi->item.lParam;
                        switch (plvdi->item.iSubItem)
                        {
                            char id[256];
                        case 1:
                            FormatVersionString(id, strings->string, strings->length);//FIXME id
                            plvdi->item.pszText = id;
                            break;
                        }
                        break;
                    }
                    case LVN_KEYDOWN:
                    {
                        stringTableData = (struct resRes *)GetWindowLong(hwnd, 0);
                        SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(ID_EDIT, CBN_KILLFOCUS), 0);
                        switch (((LPNMLVKEYDOWN)lParam)->wVKey)
                        {
                            case 'S':
                                if (GetKeyState(VK_CONTROL) &0x80000000)
                                {
                                    PostMessage(hwnd, WM_COMMAND, IDM_SAVE, 0);
                                    return TRUE;
                                }
                                
                                break;
                            case 'Z':
                                if (GetKeyState(VK_CONTROL) &0x80000000)
                                {
                                    PostMessage(hwnd, WM_COMMAND, IDM_UNDO, 0);
                                    return TRUE;
                                }
                                break;
                            case VK_INSERT:
                                stringTableData->gd.selectedRow = ListView_GetNextItem(stringTableData->gd.childWindow, -1, LVNI_SELECTED);
                                PostMessage(hwnd, WM_COMMAND, IDM_INSERT, 0);
                                return TRUE;
                            case VK_DELETE:
                                stringTableData->gd.selectedRow = ListView_GetNextItem(stringTableData->gd.childWindow, -1, LVNI_SELECTED);
                                PostMessage(hwnd, WM_COMMAND, IDM_DELETE, 0);
                                return TRUE;
                        }
                    }
                        break;
                    case NM_CLICK:
                    {
                            SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(ID_EDIT, CBN_KILLFOCUS), 0);
                    }
                        break;
                    case NM_RCLICK:
                    {
                        POINT pt;
                        stringTableData = (struct resRes *)GetWindowLong(hwnd, 0);
                        GetCursorPos(&hittest.pt);
                        pt = hittest.pt;
                        ScreenToClient(stringTableData->gd.childWindow, &hittest.pt);
                        if (ListView_HitTest(stringTableData->gd.childWindow, &hittest) < 0)
                        {
                            hittest.iItem = ListView_GetItemCount(stringTableData->gd.childWindow);
                            hittest.iSubItem = 0;
                        }
                        {
                            HMENU menu, popup;
                            SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(ID_EDIT, CBN_KILLFOCUS), 0);
                            menu = LoadMenuGeneric(hInstance, "RESSTRINGSMENU");
                            stringTableData = (struct resRes *)GetWindowLong(hwnd, 0);
                            stringTableData->gd.selectedRow = hittest.iItem;
                            stringTableData->gd.selectedColumn = hittest.iSubItem;
                            popup = GetSubMenu(menu, 0);
                            InsertBitmapsInMenu(popup);
                            TrackPopupMenuEx(popup, TPM_TOPALIGN | TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x,
                                pt.y, hwnd, NULL);
                            DestroyMenu(menu);
                        }
                        return 1;
                    }
                        break;
                    case NM_DBLCLK:
                        stringTableData = (struct resRes *)GetWindowLong(hwnd, 0);
                        GetCursorPos(&hittest.pt);
                        ScreenToClient(stringTableData->gd.childWindow, &hittest.pt);
                        if (ListView_SubItemHitTest(stringTableData->gd.childWindow, &hittest) >= 0)
                        {
                            stringTableData = (struct resRes *)GetWindowLong(hwnd, 0);
                            stringTableData->gd.selectedRow = hittest.iItem;
                            stringTableData->gd.selectedColumn = hittest.iSubItem;
                            PostMessage(hwnd, WM_HANDLEDBLCLICK, 0, 0);
                        }
                        break;
                    case NM_SETFOCUS:
                        stringTableData = (struct resRes *)GetWindowLong(hwnd, 0);
                        SetResourceProperties(stringTableData, &accFuncs);
                        break;
                    case NM_KILLFOCUS:
//                        SetResourceProperties(NULL, NULL);
                        break;
                }
            break;
        case WM_HANDLEDBLCLICK:
        {
            STRINGS *strings;
            RECT r;
            stringTableData = (struct resRes *)GetWindowLong(hwnd, 0);
            if (stringTableData->gd.editWindow)
            {
                DestroyWindow(stringTableData->gd.editWindow);
                stringTableData->gd.editWindow = NULL;
            }
            strings = stringTableData->resource->u.stringtable;
            i = 0;
            while (strings && strings->next && i < stringTableData->gd.selectedRow)
                strings = strings->next, i++;
            if (strings)
            {
                ListView_GetSubItemRect(stringTableData->gd.childWindow, 
                                        stringTableData->gd.selectedRow,
                                        stringTableData->gd.selectedColumn,
                                        LVIR_BOUNDS, &r);
                stringTableData->gd.editWindow = CreateWindow("edit", "", WS_VISIBLE |
                    WS_CHILD | WS_CLIPSIBLINGS | WS_BORDER,
                    r.left,r.top,r.right-r.left,16, hwnd, (HMENU)ID_EDIT,
                    hInstance, NULL);
                SetParent(stringTableData->gd.editWindow, stringTableData->gd.childWindow);
                AccSubclassEditWnd(hwnd, stringTableData->gd.editWindow);
                switch(stringTableData->gd.selectedColumn)
                {
                    char buf[256];
                    case 0:
                        buf[0] = 0;
                        FormatExp(buf, strings->id);
                        SendMessage(stringTableData->gd.editWindow, WM_SETTEXT, 0, (LPARAM)buf);
                        break;
                    case 1:
                        FormatVersionString(buf, strings->string, strings->length);
                        buf[strlen(buf)-1] = 0;
                        SendMessage(stringTableData->gd.editWindow, WM_SETTEXT, 0, (LPARAM)buf+1);
                        break;
                }
                SendMessage(stringTableData->gd.editWindow, EM_SETSEL, 0, -1);
                SetFocus(stringTableData->gd.editWindow);
            }
        }
            break;
        case WM_TIMER:
            stringTableData = (struct resRes *)GetWindowLong(hwnd, 0);
            ListView_Scroll(stringTableData->gd.childWindow, 0,
                           (stringTableData->gd.lvscroll & 1) ? -16 : 16);
            break;
        case WM_COMMAND:
            stringTableData = (struct resRes *)GetWindowLong(hwnd, 0);
            switch (LOWORD(wParam))
            {
                case ID_EDIT:
                    if (HIWORD(wParam) == CBN_KILLFOCUS || HIWORD(wParam) == EN_KILLFOCUS)
                    {
                        static BOOL inKillFocus;
                        if (stringTableData->gd.editWindow && !inKillFocus)
                        {
                            STRINGS *strings = stringTableData->resource->u.stringtable;
                            i = 0;
                            while (strings && strings->next && i < stringTableData->gd.selectedRow)
                                strings = strings->next,i++;
                            if (strings)
                            {
                                char buf[256];
                                buf[GetWindowText(stringTableData->gd.editWindow, buf, sizeof(buf)-1)] = 0;
                                StringTableSetChanged(stringTableData, strings);
                                if (stringTableData->gd.selectedColumn == 0)
                                {
                                    PropSetIdName(stringTableData, buf, &strings->id, NULL);
                                }
                                else
                                {
                                    int len;
                                    char *p = ParseVersionString(buf, &len); //FIXME ?
                                    strings->length = StringAsciiToWChar(&strings->string, p, len);
                                    ResGetStringItemName(strings->id, p);
                                }
                                ListView_DeleteItem(stringTableData->gd.childWindow, stringTableData->gd.selectedRow);
                                PopulateItem(stringTableData->gd.childWindow, strings, stringTableData->gd.selectedRow);
                            }
                            i = 0;
                            inKillFocus = TRUE;
                            DestroyWindow(stringTableData->gd.editWindow);
                            inKillFocus = FALSE;
                            stringTableData->gd.editWindow = NULL;
                        }
                    }
                    break;
                case IDM_INSERT:
                    StringTableInsert(stringTableData, stringTableData->gd.selectedRow);
                    break;
                case IDM_DELETE:
                    StringTableDelete(stringTableData, stringTableData->gd.selectedRow);
                    break;
                case IDM_SAVE:
                    if (stringTableData->resource->changed)
                    {
                         ResSaveCurrent(workArea, stringTableData);
                    }
                    break;
                case IDM_UNDO:
                    StringTableUndo(hwnd, stringTableData);
                    break;
            }
            break;
        case EM_CANUNDO:
            stringTableData = (struct resRes *)GetWindowLong(hwnd, 0);
            return stringTableData->gd.undoData != NULL;
        case WM_CREATE:
            GetClientRect(hwnd, &r);
            createStruct = (LPCREATESTRUCT)lParam;
            stringTableData = (struct resRes *)((LPMDICREATESTRUCT)(createStruct->lpCreateParams))->lParam;
            SetWindowLong(hwnd, 0, (long)stringTableData);
            stringTableData->activeHwnd = hwnd;
            stringTableData->gd.childWindow = CreateWindowEx(0, WC_LISTVIEW, "", WS_VISIBLE |
                WS_CHILD | LVS_REPORT | LVS_SINGLESEL,
                0, 0, r.right, r.bottom, hwnd, (HMENU)ID_TREEVIEW,
                hInstance, NULL);
            SetListViewColumns(hwnd, stringTableData->gd.childWindow);
            PopulateStrings(hwnd, stringTableData );
            break;
        case WM_CLOSE:
            SendMessage(hwndSrcTab, TABM_REMOVE, 0, (LPARAM)hwnd);
            break;
        case WM_DESTROY:
            stringTableData = (struct resRes *)GetWindowLong(hwnd, 0);
            if (stringTableData->gd.editWindow)
                DestroyWindow(stringTableData->gd.editWindow);
            stringTableData->gd.editWindow = NULL;
            undo = stringTableData->gd.undoData;
            if (undo)
                stringTableData->gd.cantClearUndo = TRUE;
            while (undo)
            {
                struct stringTableUndo *next = undo->next;
                free(undo);
                undo = next;
            }
            stringTableData->gd.undoData = NULL;
            stringTableData->activeHwnd = NULL;
            break;
        case WM_SIZE:
            stringTableData = (struct resRes *)GetWindowLong(hwnd, 0);
            MoveWindow(stringTableData->gd.childWindow, 0, 0, LOWORD(lParam), HIWORD(lParam), 1);
            break;
        default:
            break;
    }
    return DefMDIChildProc(hwnd, iMessage, wParam, lParam);
}