~ubuntu-branches/ubuntu/trusty/manaplus/trusty

« back to all changes in this revision

Viewing changes to src/gui/widgets/textfield.cpp

  • Committer: Package Import Robot
  • Author(s): Patrick Matthäi
  • Date: 2013-12-02 13:52:14 UTC
  • mfrom: (1.1.15)
  • Revision ID: package-import@ubuntu.com-20131202135214-75nrorshqrxju2av
Tags: 1.3.11.24-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
 
25
25
#include "client.h"
26
26
 
27
 
#ifdef ANDROID
 
27
#if defined ANDROID || defined USE_SDL2
28
28
#include "input/inputmanager.h"
29
29
#endif
30
30
 
31
31
#include "input/keydata.h"
32
32
#include "input/keyevent.h"
33
33
 
34
 
#include "gui/sdlinput.h"
35
34
#include "gui/viewport.h"
36
35
 
37
36
#include "gui/popups/popupmenu.h"
277
276
    {
278
277
        case 2:  // Ctrl+b
279
278
        {
280
 
            while (mCaretPosition > 0)
281
 
            {
282
 
                --mCaretPosition;
283
 
                if ((mText[mCaretPosition] & 192) != 128)
284
 
                    break;
285
 
            }
 
279
            moveCaretBack();
286
280
            consumed = true;
287
281
            break;
288
282
        }
289
283
 
290
284
        case 6:  // Ctrl+f
291
285
        {
292
 
            const unsigned sz = static_cast<unsigned>(mText.size());
293
 
            while (mCaretPosition < sz)
294
 
            {
295
 
                ++mCaretPosition;
296
 
                if (mCaretPosition == sz ||
297
 
                    (mText[mCaretPosition] & 192) != 128)
298
 
                {
299
 
                    break;
300
 
                }
301
 
            }
 
286
            moveCaretForward();
302
287
            consumed = true;
303
288
            break;
304
289
        }
305
290
 
306
291
        case 4:  // Ctrl+d
307
292
        {
308
 
            unsigned sz = static_cast<unsigned>(mText.size());
309
 
            while (mCaretPosition < sz)
310
 
            {
311
 
                --sz;
312
 
                mText.erase(mCaretPosition, 1);
313
 
                if (mCaretPosition == sz ||
314
 
                    (mText[mCaretPosition] & 192) != 128)
315
 
                {
316
 
                    break;
317
 
                }
318
 
            }
 
293
            caretDelete();
319
294
            consumed = true;
320
295
            break;
321
296
        }
336
311
            break;
337
312
 
338
313
        case 21:  // Ctrl+u
339
 
            if (mCaretPosition > 0)
340
 
            {
341
 
                mText = mText.substr(mCaretPosition);
342
 
                mCaretPosition = 0;
343
 
            }
 
314
            caretDeleteToStart();
344
315
            consumed = true;
345
316
            break;
346
317
 
347
 
        case 3:
 
318
        case 3:  // Ctrl+c
348
319
            handleCopy();
349
320
            consumed = true;
350
321
            break;
359
330
            break;
360
331
 
361
332
        case 23:  // Ctrl+w
362
 
            while (mCaretPosition > 0)
363
 
            {
364
 
                deleteCharLeft(mText, &mCaretPosition);
365
 
                if (mCaretPosition > 0 && isWordSeparator(
366
 
                    mText[mCaretPosition - 1]))
367
 
                {
368
 
                    break;
369
 
                }
370
 
            }
 
333
            caretDeleteWord();
371
334
            consumed = true;
372
335
            break;
373
336
 
469
432
        distributeActionEvent();
470
433
 
471
434
    if (consumed)
472
 
        keyEvent.consume();
 
435
    {
 
436
        keyEvent.consume();
 
437
    }
 
438
#ifdef USE_SDL2
 
439
    else
 
440
    {
 
441
        if (inputManager.isActionActive(static_cast<int>(Input::KEY_GUI_CTRL)))
 
442
        {
 
443
            switch (action)
 
444
            {
 
445
                case Input::KEY_GUI_B:
 
446
                {
 
447
                    moveCaretBack();
 
448
                    consumed = true;
 
449
                    break;
 
450
                }
 
451
                case Input::KEY_GUI_C:
 
452
                {
 
453
                    handleCopy();
 
454
                    consumed = true;
 
455
                    break;
 
456
                }
 
457
                case Input::KEY_GUI_D:
 
458
                {
 
459
                    caretDelete();
 
460
                    consumed = true;
 
461
                    break;
 
462
                }
 
463
                case Input::KEY_GUI_E:
 
464
                {
 
465
                    mCaretPosition = static_cast<int>(mText.size());
 
466
                    consumed = true;
 
467
                    break;
 
468
                }
 
469
                case Input::KEY_GUI_F:
 
470
                {
 
471
                    moveCaretBack();
 
472
                    consumed = true;
 
473
                    break;
 
474
                }
 
475
                case Input::KEY_GUI_H:
 
476
                {
 
477
                    deleteCharLeft(mText, &mCaretPosition);
 
478
                    consumed = true;
 
479
                    break;
 
480
                }
 
481
                case Input::KEY_GUI_U:
 
482
                {
 
483
                    caretDeleteToStart();
 
484
                    consumed = true;
 
485
                    break;
 
486
                }
 
487
                case Input::KEY_GUI_K:
 
488
                {
 
489
                    mText = mText.substr(0, mCaretPosition);
 
490
                    consumed = true;
 
491
                    break;
 
492
                }
 
493
                case Input::KEY_GUI_V:
 
494
                {
 
495
                    handlePaste();
 
496
                    consumed = true;
 
497
                    break;
 
498
                }
 
499
                case Input::KEY_GUI_W:
 
500
                {
 
501
                    caretDeleteWord();
 
502
                    consumed = true;
 
503
                    break;
 
504
                }
 
505
 
 
506
                default:
 
507
                    break;
 
508
            }
 
509
        }
 
510
    }
 
511
    if (consumed)
 
512
        keyEvent.consume();
 
513
#endif
473
514
    fixScroll();
474
515
}
475
516
 
 
517
void TextField::moveCaretBack()
 
518
{
 
519
    while (mCaretPosition > 0)
 
520
    {
 
521
        --mCaretPosition;
 
522
        if ((mText[mCaretPosition] & 192) != 128)
 
523
        break;
 
524
    }
 
525
}
 
526
 
 
527
void TextField::moveCaretForward()
 
528
{
 
529
    const unsigned sz = static_cast<unsigned>(mText.size());
 
530
    while (mCaretPosition < sz)
 
531
    {
 
532
        ++mCaretPosition;
 
533
        if (mCaretPosition == sz || (mText[mCaretPosition] & 192) != 128)
 
534
            break;
 
535
    }
 
536
}
 
537
 
 
538
void TextField::caretDelete()
 
539
{
 
540
    unsigned sz = static_cast<unsigned>(mText.size());
 
541
    while (mCaretPosition < sz)
 
542
    {
 
543
        --sz;
 
544
        mText.erase(mCaretPosition, 1);
 
545
        if (mCaretPosition == sz || (mText[mCaretPosition] & 192) != 128)
 
546
            break;
 
547
    }
 
548
}
 
549
 
476
550
void TextField::handlePaste()
477
551
{
478
552
    std::string text = getText();
485
559
    }
486
560
}
487
561
 
 
562
void TextField::caretDeleteToStart()
 
563
{
 
564
    if (mCaretPosition > 0)
 
565
    {
 
566
        mText = mText.substr(mCaretPosition);
 
567
        mCaretPosition = 0;
 
568
    }
 
569
}
 
570
 
 
571
void TextField::caretDeleteWord()
 
572
{
 
573
    while (mCaretPosition > 0)
 
574
    {
 
575
        deleteCharLeft(mText, &mCaretPosition);
 
576
        if (mCaretPosition > 0 && isWordSeparator(mText[mCaretPosition - 1]))
 
577
            break;
 
578
    }
 
579
}
 
580
 
488
581
void TextField::handleCopy() const
489
582
{
490
583
    std::string text = getText();