Ticket #6831: stylededit-wordcount-showasreadonly.diff

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

     
    218218    fCopyItem->SetEnabled(false);
    219219    fCopyItem->SetTarget(fTextView);
    220220
    221     menu->AddItem(menuItem = new BMenuItem(B_TRANSLATE("Paste"),
     221    menu->AddItem(fPasteItem = new BMenuItem(B_TRANSLATE("Paste"),
    222222        new BMessage(B_PASTE), 'V'));
    223223    menuItem->SetTarget(fTextView);
    224224    menu->AddItem(fClearItem = new BMenuItem(B_TRANSLATE("Clear"),
     
    240240
    241241    menu->AddItem(menuItem = new BMenuItem(B_TRANSLATE("Find selection"),
    242242        new BMessage(MENU_FIND_SELECTION), 'H'));
    243     menu->AddItem(menuItem = new BMenuItem(
     243    menu->AddItem(fReplaceItem = new BMenuItem(
    244244        B_TRANSLATE("Replace" B_UTF8_ELLIPSIS),
    245245        new BMessage(MENU_REPLACE), 'R'));
    246246    menu->AddItem(fReplaceSameItem = new BMenuItem(B_TRANSLATE("Replace same"),
     
    323323    fMenuBar->AddItem(menu);
    324324
    325325    // "Align"-subMenu:
    326     subMenu = new BMenu(B_TRANSLATE("Align"));
    327     subMenu->SetRadioMode(true);
     326    fAlignMenu = new BMenu(B_TRANSLATE("Align"));
     327    fAlignMenu->SetRadioMode(true);
    328328
    329     subMenu->AddItem(fAlignLeft = new BMenuItem(B_TRANSLATE("Left"),
     329    fAlignMenu->AddItem(fAlignLeft = new BMenuItem(B_TRANSLATE("Left"),
    330330        new BMessage(ALIGN_LEFT)));
    331331    fAlignLeft->SetMarked(true);
    332332
    333     subMenu->AddItem(fAlignCenter = new BMenuItem(B_TRANSLATE("Center"),
     333    fAlignMenu->AddItem(fAlignCenter = new BMenuItem(B_TRANSLATE("Center"),
    334334        new BMessage(ALIGN_CENTER)));
    335     subMenu->AddItem(fAlignRight = new BMenuItem(B_TRANSLATE("Right"),
     335    fAlignMenu->AddItem(fAlignRight = new BMenuItem(B_TRANSLATE("Right"),
    336336        new BMessage(ALIGN_RIGHT)));
    337     menu->AddItem(subMenu);
     337    menu->AddItem(fAlignMenu);
     338
    338339    menu->AddItem(fWrapItem = new BMenuItem(B_TRANSLATE("Wrap lines"),
    339340        new BMessage(WRAP_LINES)));
    340341    fWrapItem->SetMarked(true);
     342    menu->AddItem(fReadOnlyItem = new BMenuItem(B_TRANSLATE("Show as read only"),
     343        new BMessage(SET_READONLY)));
     344    menu->AddItem(fWordCountItem = new BMenuItem(B_TRANSLATE("Word count"),
     345        new BMessage(WORD_COUNT)));
    341346
    342347    fSavePanel = NULL;
    343348    fSavePanelEncodingMenu = NULL;
     
    645650            _UpdateCleanUndoRedoSaveRevert();
    646651            break;
    647652        }
     653        case SET_READONLY:
     654        {
     655            if (fTextView->IsEditable())
     656            {
     657                fPasteItem->SetEnabled(false);
     658                fReplaceItem->SetEnabled(false);
     659                fReplaceSameItem->SetEnabled(false);
     660                fFontMenu->SetEnabled(false);
     661                fAlignMenu->SetEnabled(false);
     662                fWrapItem->SetEnabled(false);
     663            } else
     664            {
     665                fPasteItem->SetEnabled(true);
     666                fReplaceItem->SetEnabled(true);
     667                fReplaceSameItem->SetEnabled(true);
     668                fFontMenu->SetEnabled(true);
     669                fAlignMenu->SetEnabled(true);
     670                fWrapItem->SetEnabled(true);               
     671            }
     672           
     673            fTextView->MakeEditable(!fTextView->IsEditable());
     674            fReadOnlyItem->SetMarked(!fReadOnlyItem->IsMarked());   
     675           
     676            bool fCleanTmp = fClean;
     677            _UpdateCleanUndoRedoSaveRevert();
     678            fClean = fCleanTmp;
     679           
     680            break;
     681        }
     682        case WORD_COUNT:
     683        {
     684            CountWords();
     685           
     686            break;
     687        }
    648688        case ENABLE_ITEMS:
    649689            fCutItem->SetEnabled(true);
    650690            fCopyItem->SetEnabled(true);
     
    15591599    return false;
    15601600}
    15611601
     1602
     1603#undef B_TRANSLATE_CONTEXT
     1604#define B_TRANSLATE_CONTEXT "WordCount"
     1605
     1606
     1607int32
     1608StyledEditWindow::CountWords()
     1609{
     1610    uint64 words = 0;
     1611    bool inword = false;
     1612    uint64 length = BString(fTextView->Text()).Length();
     1613   
     1614    // recognized word separators: spaces, tabs, newlines, commas
     1615    for (uint64 i = 0; i < length; i++)
     1616    {
     1617        if (fTextView->Text()[i] == '\n' || fTextView->Text()[i] == ' '||
     1618            fTextView->Text()[i] == '   ' || fTextView->Text()[i] == ',')
     1619        {
     1620            inword = false;
     1621        } else
     1622        {
     1623            if (!inword)
     1624            {
     1625                words++;
     1626                inword = true;
     1627            }
     1628        }
     1629    }
     1630   
     1631    BString result;
     1632    result << B_TRANSLATE("Word count") << '\n' << '\n'
     1633        << B_TRANSLATE("Lines:") << " " << fTextView->CountLines() << '\n'
     1634        << B_TRANSLATE("Characters:") << " " << BString(fTextView->Text()).Length() << '\n'
     1635        << B_TRANSLATE("Words:") << " " << words;
     1636       
     1637    BAlert* alert = new BAlert("Word count", result, B_TRANSLATE("OK"), NULL,
     1638        NULL, B_WIDTH_AS_USUAL, B_EVEN_SPACING, B_INFO_ALERT);
     1639
     1640    return alert->Go();
     1641}
  • 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       *fReadOnlyItem;
     105        BMenuItem       *fWordCountItem;
    100106        BMenuItem       *fAlignLeft;
    101107        BMenuItem       *fAlignCenter;
    102108        BMenuItem       *fAlignRight;
  • src/apps/stylededit/Constants.h

     
    6363const uint32 ALIGN_CENTER               = 'ALce';
    6464const uint32 ALIGN_RIGHT                = 'ALri';
    6565const uint32 WRAP_LINES                 = 'MDwr';
     66const uint32 SET_READONLY               = 'MDro';
     67const uint32 WORD_COUNT                 = 'MDwc';
    6668
    6769// enables "edit" menuitems
    6870const uint32 ENABLE_ITEMS               = 'ENit';