Ticket #6831: stylededit-wordcount-v2.diff

File stylededit-wordcount-v2.diff, 4.9 KB (added by negusnyul, 11 years ago)
  • src/apps/stylededit/StyledEditWindow.cpp

     
    4141#include <TextControl.h>
    4242#include <TextView.h>
    4343#include <TranslationUtils.h>
     44#include <UnicodeChar.h>
    4445
    4546
    4647using namespace BPrivate;
     
    218219    fCopyItem->SetEnabled(false);
    219220    fCopyItem->SetTarget(fTextView);
    220221
    221     menu->AddItem(menuItem = new BMenuItem(B_TRANSLATE("Paste"),
     222    menu->AddItem(fPasteItem = new BMenuItem(B_TRANSLATE("Paste"),
    222223        new BMessage(B_PASTE), 'V'));
    223224    menuItem->SetTarget(fTextView);
    224225    menu->AddItem(fClearItem = new BMenuItem(B_TRANSLATE("Clear"),
     
    240241
    241242    menu->AddItem(menuItem = new BMenuItem(B_TRANSLATE("Find selection"),
    242243        new BMessage(MENU_FIND_SELECTION), 'H'));
    243     menu->AddItem(menuItem = new BMenuItem(
     244    menu->AddItem(fReplaceItem = new BMenuItem(
    244245        B_TRANSLATE("Replace" B_UTF8_ELLIPSIS),
    245246        new BMessage(MENU_REPLACE), 'R'));
    246247    menu->AddItem(fReplaceSameItem = new BMenuItem(B_TRANSLATE("Replace same"),
     
    323324    fMenuBar->AddItem(menu);
    324325
    325326    // "Align"-subMenu:
    326     subMenu = new BMenu(B_TRANSLATE("Align"));
    327     subMenu->SetRadioMode(true);
     327    fAlignMenu = new BMenu(B_TRANSLATE("Align"));
     328    fAlignMenu->SetRadioMode(true);
    328329
    329     subMenu->AddItem(fAlignLeft = new BMenuItem(B_TRANSLATE("Left"),
     330    fAlignMenu->AddItem(fAlignLeft = new BMenuItem(B_TRANSLATE("Left"),
    330331        new BMessage(ALIGN_LEFT)));
    331332    fAlignLeft->SetMarked(true);
    332333
    333     subMenu->AddItem(fAlignCenter = new BMenuItem(B_TRANSLATE("Center"),
     334    fAlignMenu->AddItem(fAlignCenter = new BMenuItem(B_TRANSLATE("Center"),
    334335        new BMessage(ALIGN_CENTER)));
    335     subMenu->AddItem(fAlignRight = new BMenuItem(B_TRANSLATE("Right"),
     336    fAlignMenu->AddItem(fAlignRight = new BMenuItem(B_TRANSLATE("Right"),
    336337        new BMessage(ALIGN_RIGHT)));
    337     menu->AddItem(subMenu);
     338    menu->AddItem(fAlignMenu);
     339
    338340    menu->AddItem(fWrapItem = new BMenuItem(B_TRANSLATE("Wrap lines"),
    339341        new BMessage(WRAP_LINES)));
    340342    fWrapItem->SetMarked(true);
     343    menu->AddItem(fWordCountItem = new BMenuItem(B_TRANSLATE("Word count"),
     344        new BMessage(WORD_COUNT)));
    341345
    342346    fSavePanel = NULL;
    343347    fSavePanelEncodingMenu = NULL;
     
    645649            _UpdateCleanUndoRedoSaveRevert();
    646650            break;
    647651        }
     652        case WORD_COUNT:
     653            CountWords();
     654            break;
    648655        case ENABLE_ITEMS:
    649656            fCutItem->SetEnabled(true);
    650657            fCopyItem->SetEnabled(true);
     
    15591566    return false;
    15601567}
    15611568
     1569
     1570#undef B_TRANSLATE_CONTEXT
     1571#define B_TRANSLATE_CONTEXT "WordCount"
     1572
     1573
     1574int32
     1575StyledEditWindow::CountWords()
     1576{
     1577    uint64 words = 0;
     1578    bool inword = false;
     1579    uint64 length = BString(fTextView->Text()).Length();
     1580   
     1581    for (uint64 i = 0; i < length; i++) {
     1582        if (BUnicodeChar::IsSpace(fTextView->Text()[i])) {
     1583            inword = false;
     1584        } else if (!inword) {
     1585            words++;
     1586            inword = true;
     1587        }
     1588    }
     1589   
     1590    BString result;
     1591    result << B_TRANSLATE("Word count") << '\n' << '\n'
     1592        << B_TRANSLATE("Lines:") << ' ' << fTextView->CountLines() << '\n'
     1593        << B_TRANSLATE("Characters:") << ' '
     1594        << BString(fTextView->Text()).Length() << '\n'
     1595        << B_TRANSLATE("Words:") << ' ' << words;
     1596       
     1597    BAlert* alert = new BAlert("Word count", result, B_TRANSLATE("OK"), NULL,
     1598        NULL, B_WIDTH_AS_USUAL, B_EVEN_SPACING, B_INFO_ALERT);
     1599
     1600    return alert->Go();
     1601}
  • src/apps/stylededit/StyledEditWindow.h

     
    5959        void            SetFontSize(float fontSize);
    6060        void            SetFontColor(const rgb_color *color);
    6161        void            SetFontStyle(const char *fontFamily, const char *fontStyle);
     62        int32           CountWords();
    6263        status_t        _LoadFile(entry_ref* ref);
    6364        void            RevertToSaved();
    6465        void            _UpdateCleanUndoRedoSaveRevert();
     
    7475        BMenu           *fFontMenu;
    7576        BMenu           *fFontSizeMenu;
    7677        BMenu           *fFontColorMenu;
     78        BMenu           *fAlignMenu;
    7779        BMenuItem       *fCurrentFontItem;
    7880        BMenuItem       *fCurrentStyleItem;
    7981
     
    8385        BMenuItem       *fUndoItem;
    8486        BMenuItem       *fCutItem;
    8587        BMenuItem       *fCopyItem;
     88        BMenuItem       *fPasteItem;
    8689        BMenuItem       *fClearItem;
    8790
    8891        BMenuItem       *fFindAgainItem;
     92        BMenuItem       *fReplaceItem;
    8993        BMenuItem       *fReplaceSameItem;
    9094
    9195        BMenuItem       *fBlackItem;
     
    97101        BMenuItem       *fYellowItem;
    98102
    99103        BMenuItem       *fWrapItem;
     104        BMenuItem       *fWordCountItem;
    100105        BMenuItem       *fAlignLeft;
    101106        BMenuItem       *fAlignCenter;
    102107        BMenuItem       *fAlignRight;
  • src/apps/stylededit/Constants.h

     
    6363const uint32 ALIGN_CENTER               = 'ALce';
    6464const uint32 ALIGN_RIGHT                = 'ALri';
    6565const uint32 WRAP_LINES                 = 'MDwr';
     66const uint32 WORD_COUNT                 = 'MDwc';
    6667
    6768// enables "edit" menuitems
    6869const uint32 ENABLE_ITEMS               = 'ENit';