Exemplo n.º 1
0
DBCursorPriv *DBPrivOpenCursor(DBPriv *db)
{
    if (!LockCursor(db))
    {
        return NULL;
    }

    if (!Lock(db))
    {
        UnlockCursor(db);
        return NULL;
    }

    if (!dpiterinit(db->depot))
    {
        Log(LOG_LEVEL_ERR, "Could not initialize QuickDB iterator. (dpiterinit: %s)", dperrmsg(dpecode));
        Unlock(db);
        UnlockCursor(db);
        return NULL;
    }

    DBCursorPriv *cursor = xcalloc(1, sizeof(DBCursorPriv));
    cursor->db = db;

    Unlock(db);

    /* Cursor remains locked */
    return cursor;
}
Exemplo n.º 2
0
/*
 * This one has to be locked against cursor -- deleting entries might interrupt
 * iteration.
 */
bool DBPrivDelete(DBPriv *db, const void *key, int key_size)
{
    if (!LockCursor(db))
    {
        return false;
    }

    int ret = Delete(db->hdb, key, key_size);

    UnlockCursor(db);
    return ret;
}
Exemplo n.º 3
0
void DBPrivCloseCursor(DBCursorPriv *cursor)
{
    DBPriv *db = cursor->db;

    /* FIXME: communicate the deadlock if happens */
    Lock(db);

    free(cursor->curkey);
    free(cursor->curval);
    free(cursor);

    Unlock(db);
    /* Cursor lock was obtained in DBPrivOpenCursor */
    UnlockCursor(db);
}
Exemplo n.º 4
0
void DBPrivCloseCursor(DBCursorPriv *cursor)
{
    DBPriv *db = cursor->db;

    if (cursor->pending_delete)
    {
        Delete(db->hdb, cursor->current_key, cursor->current_key_size);
    }

    free(cursor->current_key);
    free(cursor);

    /* Cursor lock was obtained in DBPrivOpenCursor */
    UnlockCursor(db);
}
Exemplo n.º 5
0
void Chkdraft::KeyListener(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch ( msg )
    {
        case WM_KEYDOWN:
            {
                switch ( wParam )
                {
                    case VK_SPACE: CM->LockCursor(); return; break;
                    case VK_DELETE: CM->deleteSelection(); return; break;
                    case VK_ESCAPE: maps.endPaste(); return; break;
                    case VK_RETURN: CM->ReturnKeyPress(); return; break;
                }

                if ( GetKeyState(VK_CONTROL) & 0x8000 ) // Control is down
                {
                    if ( GetKeyState(VK_SHIFT) & 0x8000 ) // Shift is down
                    {
                        switch ( wParam )
                        {
                            case 'S': maps.SaveCurr(true); return; break;
                        }
                    }
                    else // Only control
                    {
                        switch ( wParam )
                        {
                            case 'A': case 'C': case 'X': case 'V':
                                {
                                    switch ( wParam )
                                    {
                                        case 'A': CM->selectAll(); return; break;
                                        case 'C': maps.copy(); return; break;
                                        case 'X': maps.cut(); return; break;
                                        case 'V': maps.startPaste(false); return; break;
                                    }
                                }
                                break;
                            case 'D': maps.ChangeLayer(Layer::Doodads); return; break;
                            case 'E': FindLeaks(); return; break;
                            case 'F': maps.ChangeLayer(Layer::FogEdit); return; break;
                            case 'L': maps.ChangeLayer(Layer::Locations);return; break;
                            case 'N': newMap.CreateThis(getHandle()); return; break;
                            case 'O': maps.OpenMap(); return; break;
                            case 'R': maps.ChangeLayer(Layer::Sprites); return; break;
                            case 'S': maps.SaveCurr(false); return; break;
                            case 'T': maps.ChangeLayer(Layer::Terrain); return; break;
                            case 'U': maps.ChangeLayer(Layer::Units); return; break;
                            case 'Y': CM->redo(); return; break;
                            case 'Z': CM->undo(); return; break;
                            case VK_OEM_PLUS: maps.ChangeZoom(true); return; break;
                            case VK_OEM_MINUS: maps.ChangeZoom(false); return; break;
                            case VK_F4: maps.CloseActive(); return; break;
                            case VK_F6: maps.nextMdi(); return; break;
                        }
                    }
                }
            }
            break;

        case WM_SYSKEYDOWN: // Sent insted of WM_KEYUP when alt is pressed
            {
                switch ( wParam )
                {
                    case 'U': maps.SetGrid(8, 8); return; break;
                    case 'F': maps.SetGrid(16, 16); return; break;
                    case 'G': maps.SetGrid(32, 32); return; break;
                    case 'L': maps.SetGrid(64, 64); return; break;
                    case 'E': maps.SetGrid(128, 128); return; break;
                }
            }
            break;

        case WM_KEYUP:
            {
                switch ( wParam )
                {
                    case VK_SPACE:
                        if ( !maps.clipboard.isPasting() )
                            UnlockCursor();
                        return; break;
                }
            }
            break;
    }

    if ( CM && editFocused == false && GetActiveWindow() == getHandle() )
    {
        Layer layer = CM->getLayer();
        if ( layer == Layer::Units || layer == Layer::FogEdit || layer == Layer::Sprites )
        {
            u8 newPlayer;
            switch ( wParam )
            {
                case '1': newPlayer = 0 ; break;
                case '2': newPlayer = 1 ; break;
                case '3': newPlayer = 2 ; break;
                case '4': newPlayer = 3 ; break;
                case '5': newPlayer = 4 ; break;
                case '6': newPlayer = 5 ; break;
                case '7': newPlayer = 6 ; break;
                case '8': newPlayer = 7 ; break;
                case '9': newPlayer = 8 ; break;
                case '0': newPlayer = 9 ; break;
                case '-': newPlayer = 10; break;
                case '=': newPlayer = 11; break;
                default: return; break;
            }

            mainToolbar.playerBox.SetSel(newPlayer);
            maps.ChangePlayer(newPlayer);
        }
    }
}
Exemplo n.º 6
0
bool Chkdraft::DlgKeyListener(HWND hWnd, UINT &msg, WPARAM wParam, LPARAM lParam)
{
    switch ( msg )
    {
        case WM_KEYDOWN:
            {
                switch ( wParam )
                {
                    case VK_TAB:
                        if ( GetParent(GetParent(hWnd)) == trigEditorWindow.triggersWindow.trigModifyWindow.conditionsWindow.getHandle() ||
                             GetParent(hWnd) == trigEditorWindow.triggersWindow.trigModifyWindow.conditionsWindow.getHandle() )
                        {
                            msg = WM_NULL; // Dirty fix to prevent tabs from being focused
                            trigEditorWindow.triggersWindow.trigModifyWindow.conditionsWindow.ProcessKeyDown(wParam, lParam);
                            return true;
                        }
                        else if ( GetParent(GetParent(hWnd)) == trigEditorWindow.triggersWindow.trigModifyWindow.actionsWindow.getHandle() ||
                            GetParent(hWnd) == trigEditorWindow.triggersWindow.trigModifyWindow.actionsWindow.getHandle() )
                        {
                            msg = WM_NULL; // Dirty fix to prevent tabs from being focused
                            trigEditorWindow.triggersWindow.trigModifyWindow.actionsWindow.ProcessKeyDown(wParam, lParam);
                            return true;
                        }
                        break;
                    case VK_RETURN:
                        if ( GetParent(GetParent(hWnd)) == trigEditorWindow.triggersWindow.trigModifyWindow.conditionsWindow.getHandle() ||
                             GetParent(hWnd) == trigEditorWindow.triggersWindow.trigModifyWindow.conditionsWindow.getHandle() )
                        {
                            trigEditorWindow.triggersWindow.trigModifyWindow.conditionsWindow.ProcessKeyDown(wParam, lParam);
                            return true;
                        }
                        else if ( GetParent(GetParent(hWnd)) == trigEditorWindow.triggersWindow.trigModifyWindow.actionsWindow.getHandle() ||
                            GetParent(hWnd) == trigEditorWindow.triggersWindow.trigModifyWindow.actionsWindow.getHandle() )
                        {
                            trigEditorWindow.triggersWindow.trigModifyWindow.actionsWindow.ProcessKeyDown(wParam, lParam);
                            return true;
                        }
                        if ( GetParent(hWnd) == unitWindow.getHandle() )
                        {
                            unitWindow.DestroyThis();
                            return true;
                        }
                        else if ( GetParent(hWnd) == locationWindow.getHandle() )
                        {
                            locationWindow.DestroyThis();
                            return true;
                        }
                        else if ( GetParent(hWnd) == enterPasswordWindow.getHandle())
                        {
                            enterPasswordWindow.ButtonLogin();
                            return true;
                        }
                        break;
                    case VK_DELETE:
                        if ( GetParent(hWnd) == unitWindow.getHandle() )
                        {
                            SendMessage(unitWindow.getHandle(), WM_COMMAND, MAKEWPARAM(IDC_BUTTON_DELETE, 0), 0);
                            return true;
                        }
                        break;
                    case 'Z': case 'Y': case 'X': case 'C': case 'V':
                        if ( GetKeyState(VK_CONTROL) & 0x8000 )
                        {
                            KeyListener(hWnd, msg, wParam, lParam);
                            return true;
                        }
                        break;
                }
            }
            break;
        case WM_KEYUP:
            if ( wParam == VK_SPACE && CM != nullptr && maps.clipboard.isPasting() )
            {
                UnlockCursor();
                return true;
            }
            break;
    }
    return false;
}