Пример #1
0
ItemUpdate_TC::ItemUpdate_TC(position fieldpos, ITEMVECTOR &items) : BasicServerCommand(SC_ITEMUPDATE_TC) {
    Logger::writeMessage("rot_update", "sending new itemstack for pos("+Logger::toString(fieldpos.x)+", "+Logger::toString(fieldpos.y)+", "+Logger::toString(fieldpos.z)+")",false);
    addShortIntToBuffer(fieldpos.x);
    addShortIntToBuffer(fieldpos.y);
    addShortIntToBuffer(fieldpos.z);
    int16_t size = static_cast<unsigned char>(items.size());

    if (size > 255) {
        size = 255;
    }

    addUnsignedCharToBuffer(static_cast<uint8_t>(size));

    for (auto it = items.begin(); it != items.end(); ++it) {
        //we added 255 items
        if (size <= 0) {
            break;
        }

        addShortIntToBuffer(it->getId());
        addShortIntToBuffer(it->getNumber());
        Logger::writeMessage("rot_update", "adding item id: "+Logger::toString(it->getId())+" count: "+Logger::toString(static_cast<int>(it->getNumber())),false);
        size--;
    }
}
Пример #2
0
void LV_OnDelete(HWND hwnd, INT iRow = -1)
{
    if (iRow == -1)
        iRow = ListView_GetNextItem(hwnd, -1, LVNI_SELECTED);
    if (iRow == -1)
        return;

    UINT State = LVIS_SELECTED | LVIS_FOCUSED;
    ListView_SetItemState(g_hListView, iRow, State, State);

    WCHAR sz[MAX_STRING];
    LoadStringW(g_hInstance, IDS_QUERYDELETE, sz, _countof(sz));
    if (IDYES != MessageBoxW(g_hMainWnd, sz, g_szTitle,
                             MB_ICONINFORMATION | MB_YESNO))
    {
        return;
    }

    ListView_DeleteItem(hwnd, iRow);
    g_Items.erase(g_Items.begin() + iRow);
    g_bModified = TRUE;

    ListView_SetItemState(g_hListView, iRow, State, State);

    InvalidateRect(hwnd, NULL, TRUE);
}
Пример #3
0
BOOL DoLoadItems(void)
{
    ITEMVECTOR Items;

    HKEY hKey = NULL;
    RegOpenKeyExW(HKEY_LOCAL_MACHINE, g_pszKey, 0, KEY_READ, &hKey);
    if (hKey == NULL)
        return FALSE;

    WCHAR szName[MAX_STRING], szValue[MAX_STRING];
    DWORD cbName, cbValue;
    for (DWORD dwIndex = 0; ; ++dwIndex)
    {
        cbName = sizeof(szName);
        cbValue = sizeof(szValue);
        LONG Error = RegEnumValueW(hKey, dwIndex, szName, &cbName,
            NULL, NULL, (LPBYTE)szValue, &cbValue);
        if (Error != ERROR_SUCCESS)
            break;

        BYTE CharSet1 = DEFAULT_CHARSET, CharSet2 = DEFAULT_CHARSET;
        LPWSTR pch;

        pch = wcsrchr(szName, L',');
        if (pch)
        {
            *pch = 0;
            CharSet1 = (BYTE)_wtoi(pch + 1);
        }

        pch = wcsrchr(szValue, L',');
        if (pch)
        {
            *pch = 0;
            CharSet2 = (BYTE)_wtoi(pch + 1);
        }

        ITEM Item(szName, szValue, CharSet1, CharSet2);
        trim(Item.m_Name);
        trim(Item.m_Substitute);
        Items.push_back(Item);
    }

    RegCloseKey(hKey);

    g_Items = Items;
    LV_AddItems(g_hListView);
    DoSort(0, TRUE);
    g_bModified = FALSE;
    g_bNeedsReboot = FALSE;

    return !g_Items.empty();
}
Пример #4
0
void DoSort(INT iColumn, BOOL bAscendant = TRUE)
{
    LV_COLUMN Column;
    ZeroMemory(&Column, sizeof(Column));
    Column.mask = LVCF_IMAGE | LVCF_SUBITEM;
    Column.iImage = 2;
    Column.iSubItem = 0;
    ListView_SetColumn(g_hListView, 0, &Column);
    Column.iSubItem = 1;
    ListView_SetColumn(g_hListView, 1, &Column);

    switch (iColumn)
    {
        case 0:
            Column.iSubItem = 0;
            if (bAscendant)
            {
                std::sort(g_Items.begin(), g_Items.end(),
                          ItemCompareByNameAscend);
                Column.iImage = 0;
                ListView_SetColumn(g_hListView, 0, &Column);
            }
            else
            {
                std::sort(g_Items.begin(), g_Items.end(),
                          ItemCompareByNameDescend);
                Column.iImage = 1;
                ListView_SetColumn(g_hListView, 0, &Column);
            }
            break;
        case 1:
            Column.iSubItem = 1;
            if (bAscendant)
            {
                std::sort(g_Items.begin(), g_Items.end(),
                          ItemCompareBySubAscend);
                Column.iImage = 0;
                ListView_SetColumn(g_hListView, 1, &Column);
            }
            else
            {
                std::sort(g_Items.begin(), g_Items.end(),
                          ItemCompareBySubDescend);
                Column.iImage = 1;
                ListView_SetColumn(g_hListView, 1, &Column);
            }
            break;
    }
    g_iSortColumn = iColumn;
    g_bSortAscendant = bAscendant;
    InvalidateRect(g_hListView, NULL, TRUE);
}
Пример #5
0
ItemUpdate_TC::ItemUpdate_TC(int16_t px, int16_t py, int16_t pz, ITEMVECTOR &items) : BasicServerCommand(SC_ITEMUPDATE_TC) {
    addShortIntToBuffer(px);
    addShortIntToBuffer(py);
    addShortIntToBuffer(pz);
    int16_t size = static_cast<unsigned char>(items.size());

    if (size > 255) {
        size = 255;
    }

    addUnsignedCharToBuffer(static_cast<uint8_t>(size));

    for (auto it = items.begin(); it != items.end(); ++it) {
        //we added 255 items
        if (size <= 0) {
            break;
        }

        addShortIntToBuffer(it->getId());
        addShortIntToBuffer(it->getNumber());
        size--;
    }
}
Пример #6
0
BOOL MainWnd_OnUpdateRegistry(HWND hwnd)
{
    // open the key
    HKEY hKey = NULL;
    RegOpenKeyExW(HKEY_LOCAL_MACHINE, g_pszKey, 0, KEY_ALL_ACCESS, &hKey);
    if (hKey == NULL)
        return FALSE;

    // clear all values
    WCHAR szName[MAX_STRING], szValue[MAX_STRING];
    DWORD cbName, cbValue;
    for (;;)
    {
        cbName = sizeof(szName);
        cbValue = sizeof(szValue);
        LONG Error = RegEnumValueW(hKey, 0, szName, &cbName,
                                   NULL, NULL, (LPBYTE)szValue, &cbValue);
        if (Error != ERROR_SUCCESS)
            break;

        RegDeleteValueW(hKey, szName);
    }

    // set values
    size_t Count = g_Items.size();
    for (size_t i = 0; i < Count; ++i)
    {
        DWORD cbData = (g_Items[i].m_Substitute.size() + 1) * sizeof(WCHAR);
        RegSetValueExW(hKey, g_Items[i].m_Name.c_str(), 0,
            REG_SZ, (LPBYTE)g_Items[i].m_Substitute.c_str(), cbData);
    }

    // close now
    RegCloseKey(hKey);

    g_bModified = FALSE;
    g_bNeedsReboot = TRUE;
    return TRUE;
}
Пример #7
0
void LV_AddItems(HWND hwnd)
{
    ListView_DeleteAllItems(hwnd);

    LV_ITEM Item;
    ZeroMemory(&Item, sizeof(Item));
    Item.mask = LVIF_PARAM;

    const INT Count = INT(g_Items.size());
    for (INT i = 0; i < Count; ++i)
    {
        Item.iItem = i;
        Item.iSubItem = 0;
        Item.lParam = i;
        ListView_InsertItem(hwnd, &Item);

        Item.iItem = i;
        Item.iSubItem = 1;
        Item.lParam = i;
        ListView_InsertItem(hwnd, &Item);
    }
}
Пример #8
0
BOOL DoParseFile(LPVOID pvContents, DWORD dwSize)
{
    ITEMVECTOR  Items;

    LPWSTR pch, pchSep, pchStart = (LPWSTR)pvContents;

    pchStart[dwSize / sizeof(WCHAR)] = UNICODE_NULL;

    // check header
    const DWORD cbHeader = lstrlenW(g_pszFileHeader) * sizeof(WCHAR);
    if (memcmp(pchStart, g_pszFileHeader, cbHeader) != 0)
        return FALSE;

    pchStart += cbHeader / sizeof(WCHAR);

    // find the key
    WCHAR szKey[MAX_STRING];
    wsprintfW(szKey, L"[HKEY_LOCAL_MACHINE\\%s]", g_pszKey);
    pch = wcsstr(pchStart, szKey);
    if (pch == NULL)
        return FALSE;

    pchStart = pch + lstrlenW(szKey);

    for (;;)
    {
        pchStart = SkipSpace(pchStart);
        if (*pchStart == UNICODE_NULL || *pchStart == L'[')
            break;

        pch = wcschr(pchStart, L'\n');
        if (pch)
            *pch = UNICODE_NULL;

        pchSep = SkipQuoted(pchStart);
        if (*pchSep == L'=')
        {
            *pchSep = UNICODE_NULL;

            STRING key = pchStart;
            trim(key);
            key = Unquote(key);

            STRING value = pchSep + 1;
            trim(value);
            value = Unquote(value);

            BYTE CharSet1 = DEFAULT_CHARSET, CharSet2 = DEFAULT_CHARSET;

            size_t pos;
            pos = key.find(L',');
            if (pos != STRING::npos)
            {
                CharSet1 = (BYTE)_wtoi(&key[pos + 1]);
                key.resize(pos);
                trim(key);
            }
            pos = value.find(L',');
            if (pos != STRING::npos)
            {
                CharSet2 = (BYTE)_wtoi(&value[pos + 1]);
                value.resize(pos);
                trim(value);
            }

            ITEM Item(key, value, CharSet1, CharSet2);
            Items.push_back(Item);
        }

        if (pch == NULL)
            break;

        pchStart = pch + 1;
    }

    g_Items = Items;
    g_bModified = TRUE;

    LV_AddItems(g_hListView);
    return TRUE;
}
Пример #9
0
void AddDlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    WCHAR szKey[MAX_STRING], szValue[MAX_STRING], sz[MAX_STRING];
    INT i, iCharSet1, iCharSet2;
    BYTE CharSet1, CharSet2;
    STRING key, value;
    switch (id)
    {
        case IDOK:
            GetDlgItemTextW(hwnd, cmb1, szKey, _countof(szKey));
            key = szKey;
            trim(key);
            LoadStringW(g_hInstance, IDS_ENTERNAME, sz, _countof(sz));
            if (key.empty() || key == sz)
            {
                SendDlgItemMessageW(hwnd, cmb1, CB_SETEDITSEL, 0, MAKELPARAM(0, -1));
                SetFocus(GetDlgItem(hwnd, cmb1));
                LoadStringW(g_hInstance, IDS_ENTERNAME2, sz, _countof(sz));
                MessageBoxW(hwnd, sz, NULL, MB_ICONERROR);
                return;
            }

            GetDlgItemTextW(hwnd, cmb2, szValue, _countof(szValue));
            value = szValue;
            trim(value);
            if (value.empty())
            {
                SendDlgItemMessageW(hwnd, cmb2, CB_SETEDITSEL, 0, MAKELPARAM(0, -1));
                SetFocus(GetDlgItem(hwnd, cmb2));
                LoadStringW(g_hInstance, IDS_ENTERNAME2, sz, _countof(sz));
                MessageBoxW(hwnd, sz, NULL, MB_ICONERROR);
                return;
            }

            iCharSet1 = SendDlgItemMessageW(hwnd, cmb3, CB_GETCURSEL, 0, 0);
            if (iCharSet1 == CB_ERR)
                iCharSet1 = 0;
            iCharSet2 = SendDlgItemMessageW(hwnd, cmb4, CB_GETCURSEL, 0, 0);
            if (iCharSet2 == CB_ERR)
                iCharSet2 = 0;

            CharSet1 = g_CharSetList[iCharSet1].CharSet;
            CharSet2 = g_CharSetList[iCharSet2].CharSet;

            for (i = 0; i < (INT)g_Items.size(); ++i)
            {
                if (g_Items[i].m_Name == key &&
                    g_Items[i].m_CharSet1 == CharSet1)
                {
                    WCHAR sz[MAX_STRING];
                    SendDlgItemMessageW(hwnd, cmb1, CB_SETEDITSEL, 0, MAKELPARAM(0, -1));
                    SetFocus(GetDlgItem(hwnd, cmb1));
                    LoadStringW(g_hInstance, IDS_ALREADYEXISTS, sz, _countof(sz));
                    MessageBoxW(hwnd, sz, NULL, MB_ICONERROR);
                    return;
                }
            }
            {
                ITEM Item(key, value, CharSet1, CharSet2);
                g_Items.push_back(Item);
                g_bModified = TRUE;

                i = (INT)g_Items.size();
                LV_ITEM LvItem;
                ZeroMemory(&LvItem, sizeof(LvItem));
                LvItem.mask = LVIF_PARAM;
                LvItem.iItem = i;
                LvItem.lParam = i;

                LvItem.iSubItem = 0;
                ListView_InsertItem(g_hListView, &LvItem);

                LvItem.iSubItem = 1;
                ListView_InsertItem(g_hListView, &LvItem);
            }
            g_bModified = TRUE;
            EndDialog(hwnd, IDOK);
            break;
        case IDCANCEL:
            EndDialog(hwnd, IDCANCEL);
            break;
    }
}
Пример #10
0
BOOL DoExport(HWND hwnd, LPCWSTR pszFile)
{
    HANDLE hFile = CreateFileW(pszFile, GENERIC_WRITE, FILE_SHARE_READ,
        NULL, CREATE_ALWAYS,
        FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH, NULL);
    if (hFile == INVALID_HANDLE_VALUE)
        return FALSE;

    BOOL bSuccess;
    DWORD dwSize, cbWritten;
    WCHAR szCharSet1[MAX_STRING], szCharSet2[MAX_STRING];
    WCHAR szLine[MAX_STRING * 2 + 4];

    /* write header */
    dwSize = lstrlenW(g_pszFileHeader) * sizeof(WCHAR);
    bSuccess =
        WriteFile(hFile, "\xFF\xFE", 2, &cbWritten, NULL) &&
        WriteFile(hFile, g_pszFileHeader, dwSize, &cbWritten, NULL);
    if (bSuccess)
    {
        wsprintfW(szLine, L"\r\n\r\n[HKEY_LOCAL_MACHINE\\%s]\r\n", g_pszKey);
        dwSize = lstrlenW(szLine) * sizeof(WCHAR);
        bSuccess = WriteFile(hFile, szLine, dwSize, &cbWritten, NULL);
    }
    if (bSuccess)
    {
        size_t i, Count = g_Items.size();
        for (i = 0; i < Count; ++i)
        {
            if (g_Items[i].m_CharSet1 != DEFAULT_CHARSET)
                wsprintfW(szCharSet1, L",%u", g_Items[i].m_CharSet1);
            else
                szCharSet1[0] = UNICODE_NULL;

            if (g_Items[i].m_CharSet2 != DEFAULT_CHARSET)
                wsprintfW(szCharSet2, L",%u", g_Items[i].m_CharSet2);
            else
                szCharSet2[0] = UNICODE_NULL;

            STRING Name = Escape(g_Items[i].m_Name);
            STRING Substitute = Escape(g_Items[i].m_Substitute);
            wsprintfW(szLine, L"\"%s%s\"=\"%s%s\"\r\n",
                      Name.c_str(), szCharSet1,
                      Substitute.c_str(), szCharSet2);

            dwSize = lstrlenW(szLine) * sizeof(WCHAR);
            if (!WriteFile(hFile, szLine, dwSize, &cbWritten, NULL))
            {
                bSuccess = FALSE;
                break;
            }
        }
        WriteFile(hFile, L"\r\n", 2 * sizeof(WCHAR), &cbWritten, NULL);
    }
    CloseHandle(hFile);

    if (!bSuccess)
    {
        DeleteFileW(pszFile);
    }

    return bSuccess;
}