⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 edit.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    StyleSetForeground (wxSTC_STYLE_DEFAULT, wxColour (_T("DARK GREY")));    StyleSetForeground (wxSTC_STYLE_INDENTGUIDE, wxColour (_T("DARK GREY")));    // initialize settings    if (g_CommonPrefs.syntaxEnable) {        int keywordnr = 0;        for (Nr = 0; Nr < STYLE_TYPES_COUNT; Nr++) {            if (curInfo->styles[Nr].type == -1) continue;            const StyleInfo &curType = g_StylePrefs [curInfo->styles[Nr].type];            wxFont font (curType.fontsize, wxMODERN, wxNORMAL, wxNORMAL, false,                         curType.fontname);            StyleSetFont (Nr, font);            if (curType.foreground) {                StyleSetForeground (Nr, wxColour (curType.foreground));            }            if (curType.background) {                StyleSetBackground (Nr, wxColour (curType.background));            }            StyleSetBold (Nr, (curType.fontstyle & mySTC_STYLE_BOLD) > 0);            StyleSetItalic (Nr, (curType.fontstyle & mySTC_STYLE_ITALIC) > 0);            StyleSetUnderline (Nr, (curType.fontstyle & mySTC_STYLE_UNDERL) > 0);            StyleSetVisible (Nr, (curType.fontstyle & mySTC_STYLE_HIDDEN) == 0);            StyleSetCase (Nr, curType.lettercase);            const wxChar *pwords = curInfo->styles[Nr].words;            if (pwords) {                SetKeyWords (keywordnr, pwords);                keywordnr += 1;            }        }    }    // set margin as unused    SetMarginType (m_DividerID, wxSTC_MARGIN_SYMBOL);    SetMarginWidth (m_DividerID, 0);    SetMarginSensitive (m_DividerID, false);    // folding    SetMarginType (m_FoldingID, wxSTC_MARGIN_SYMBOL);    SetMarginMask (m_FoldingID, wxSTC_MASK_FOLDERS);    StyleSetBackground (m_FoldingID, *wxWHITE);    SetMarginWidth (m_FoldingID, 0);    SetMarginSensitive (m_FoldingID, false);    if (g_CommonPrefs.foldEnable) {        SetMarginWidth (m_FoldingID, curInfo->folds != 0? m_FoldingMargin: 0);        SetMarginSensitive (m_FoldingID, curInfo->folds != 0);        SetProperty (_T("fold"), curInfo->folds != 0? _T("1"): _T("0"));        SetProperty (_T("fold.comment"),                     (curInfo->folds & mySTC_FOLD_COMMENT) > 0? _T("1"): _T("0"));        SetProperty (_T("fold.compact"),                     (curInfo->folds & mySTC_FOLD_COMPACT) > 0? _T("1"): _T("0"));        SetProperty (_T("fold.preprocessor"),                     (curInfo->folds & mySTC_FOLD_PREPROC) > 0? _T("1"): _T("0"));        SetProperty (_T("fold.html"),                     (curInfo->folds & mySTC_FOLD_HTML) > 0? _T("1"): _T("0"));        SetProperty (_T("fold.html.preprocessor"),                     (curInfo->folds & mySTC_FOLD_HTMLPREP) > 0? _T("1"): _T("0"));        SetProperty (_T("fold.comment.python"),                     (curInfo->folds & mySTC_FOLD_COMMENTPY) > 0? _T("1"): _T("0"));        SetProperty (_T("fold.quotes.python"),                     (curInfo->folds & mySTC_FOLD_QUOTESPY) > 0? _T("1"): _T("0"));    }    SetFoldFlags (wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED |                  wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED);    // set spaces and indention    SetTabWidth (4);    SetUseTabs (false);    SetTabIndents (true);    SetBackSpaceUnIndents (true);    SetIndent (g_CommonPrefs.indentEnable? 4: 0);    // others    SetViewEOL (g_CommonPrefs.displayEOLEnable);    SetIndentationGuides (g_CommonPrefs.indentGuideEnable);    SetEdgeColumn (80);    SetEdgeMode (g_CommonPrefs.longLineOnEnable? wxSTC_EDGE_LINE: wxSTC_EDGE_NONE);    SetViewWhiteSpace (g_CommonPrefs.whiteSpaceEnable?                       wxSTC_WS_VISIBLEALWAYS: wxSTC_WS_INVISIBLE);    SetOvertype (g_CommonPrefs.overTypeInitial);    SetReadOnly (g_CommonPrefs.readOnlyInitial);    SetWrapMode (g_CommonPrefs.wrapModeInitial?                 wxSTC_WRAP_WORD: wxSTC_WRAP_NONE);    return true;}bool Edit::LoadFile (){#if wxUSE_FILEDLG    // get filname    if (!m_filename) {        wxFileDialog dlg (this, _T("Open file"), wxEmptyString, wxEmptyString,                          _T("Any file (*)|*"), wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_CHANGE_DIR);        if (dlg.ShowModal() != wxID_OK) return false;        m_filename = dlg.GetPath();    }    // load file    return LoadFile (m_filename);#else    return false;#endif // wxUSE_FILEDLG}bool Edit::LoadFile (const wxString &filename) {    // load file in edit and clear undo    if (!filename.empty()) m_filename = filename;//     wxFile file (m_filename);//     if (!file.IsOpened()) return false;    ClearAll ();//     long lng = file.Length ();//     if (lng > 0) {//         wxString buf;//         wxChar *buff = buf.GetWriteBuf (lng);//         file.Read (buff, lng);//         buf.UngetWriteBuf ();//         InsertText (0, buf);//     }//     file.Close();    wxStyledTextCtrl::LoadFile(m_filename);    EmptyUndoBuffer();    // determine lexer language    wxFileName fname (m_filename);    InitializePrefs (DeterminePrefs (fname.GetFullName()));    return true;}bool Edit::SaveFile (){#if wxUSE_FILEDLG    // return if no change    if (!Modified()) return true;    // get filname    if (!m_filename) {        wxFileDialog dlg (this, _T("Save file"), wxEmptyString, wxEmptyString, _T("Any file (*)|*"),                          wxFD_SAVE | wxFD_OVERWRITE_PROMPT);        if (dlg.ShowModal() != wxID_OK) return false;        m_filename = dlg.GetPath();    }    // save file    return SaveFile (m_filename);#else    return false;#endif // wxUSE_FILEDLG}bool Edit::SaveFile (const wxString &filename) {    // return if no change    if (!Modified()) return true;//     // save edit in file and clear undo//     if (!filename.empty()) m_filename = filename;//     wxFile file (m_filename, wxFile::write);//     if (!file.IsOpened()) return false;//     wxString buf = GetText();//     bool okay = file.Write (buf);//     file.Close();//     if (!okay) return false;//     EmptyUndoBuffer();//     SetSavePoint();//     return true;    return wxStyledTextCtrl::SaveFile(filename);}bool Edit::Modified () {    // return modified state    return (GetModify() && !GetReadOnly());}//----------------------------------------------------------------------------// EditProperties//----------------------------------------------------------------------------EditProperties::EditProperties (Edit *edit,                                long style)        : wxDialog (edit, wxID_ANY, wxEmptyString,                    wxDefaultPosition, wxDefaultSize,                    style | wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) {    // sets the application title    SetTitle (_("Properties"));    wxString text;    // fullname    wxBoxSizer *fullname = new wxBoxSizer (wxHORIZONTAL);    fullname->Add (10, 0);    fullname->Add (new wxStaticText (this, wxID_ANY, _("Full filename"),                                     wxDefaultPosition, wxSize(80, wxDefaultCoord)),                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL);    fullname->Add (new wxStaticText (this, wxID_ANY, edit->GetFilename()),                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL);    // text info    wxGridSizer *textinfo = new wxGridSizer (4, 0, 2);    textinfo->Add (new wxStaticText (this, wxID_ANY, _("Language"),                                     wxDefaultPosition, wxSize(80, wxDefaultCoord)),                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);    textinfo->Add (new wxStaticText (this, wxID_ANY, edit->m_language->name),                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);    textinfo->Add (new wxStaticText (this, wxID_ANY, _("Lexer-ID: "),                                     wxDefaultPosition, wxSize(80, wxDefaultCoord)),                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);    text = wxString::Format (_T("%d"), edit->GetLexer());    textinfo->Add (new wxStaticText (this, wxID_ANY, text),                   0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);    wxString EOLtype = wxEmptyString;    switch (edit->GetEOLMode()) {        case wxSTC_EOL_CR: {EOLtype = _T("CR (Unix)"); break; }        case wxSTC_EOL_CRLF: {EOLtype = _T("CRLF (Windows)"); break; }        case wxSTC_EOL_LF: {EOLtype = _T("CR (Macintosh)"); break; }    }    textinfo->Add (new wxStaticText (this, wxID_ANY, _("Line endings"),                                     wxDefaultPosition, wxSize(80, wxDefaultCoord)),                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);    textinfo->Add (new wxStaticText (this, wxID_ANY, EOLtype),                   0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);    // text info box    wxStaticBoxSizer *textinfos = new wxStaticBoxSizer (                     new wxStaticBox (this, wxID_ANY, _("Informations")),                     wxVERTICAL);    textinfos->Add (textinfo, 0, wxEXPAND);    textinfos->Add (0, 6);    // statistic    wxGridSizer *statistic = new wxGridSizer (4, 0, 2);    statistic->Add (new wxStaticText (this, wxID_ANY, _("Total lines"),                                     wxDefaultPosition, wxSize(80, wxDefaultCoord)),                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);    text = wxString::Format (_T("%d"), edit->GetLineCount());    statistic->Add (new wxStaticText (this, wxID_ANY, text),                    0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);    statistic->Add (new wxStaticText (this, wxID_ANY, _("Total chars"),                                     wxDefaultPosition, wxSize(80, wxDefaultCoord)),                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);    text = wxString::Format (_T("%d"), edit->GetTextLength());    statistic->Add (new wxStaticText (this, wxID_ANY, text),                    0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);    statistic->Add (new wxStaticText (this, wxID_ANY, _("Current line"),                                     wxDefaultPosition, wxSize(80, wxDefaultCoord)),                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);    text = wxString::Format (_T("%d"), edit->GetCurrentLine());    statistic->Add (new wxStaticText (this, wxID_ANY, text),                    0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);    statistic->Add (new wxStaticText (this, wxID_ANY, _("Current pos"),                                     wxDefaultPosition, wxSize(80, wxDefaultCoord)),                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);    text = wxString::Format (_T("%d"), edit->GetCurrentPos());    statistic->Add (new wxStaticText (this, wxID_ANY, text),                    0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);    // char/line statistics    wxStaticBoxSizer *statistics = new wxStaticBoxSizer (                     new wxStaticBox (this, wxID_ANY, _("Statistics")),                     wxVERTICAL);    statistics->Add (statistic, 0, wxEXPAND);    statistics->Add (0, 6);    // total pane    wxBoxSizer *totalpane = new wxBoxSizer (wxVERTICAL);    totalpane->Add (fullname, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 10);    totalpane->Add (0, 6);    totalpane->Add (textinfos, 0, wxEXPAND | wxLEFT | wxRIGHT, 10);    totalpane->Add (0, 10);    totalpane->Add (statistics, 0, wxEXPAND | wxLEFT | wxRIGHT, 10);    totalpane->Add (0, 6);    wxButton *okButton = new wxButton (this, wxID_OK, _("OK"));    okButton->SetDefault();    totalpane->Add (okButton, 0, wxALIGN_CENTER | wxALL, 10);    SetSizerAndFit (totalpane);    ShowModal();}#if wxUSE_PRINTING_ARCHITECTURE//----------------------------------------------------------------------------// EditPrint//----------------------------------------------------------------------------EditPrint::EditPrint (Edit *edit, wxChar *title)              : wxPrintout(title) {    m_edit = edit;    m_printed = 0;}bool EditPrint::OnPrintPage (int page) {    wxDC *dc = GetDC();    if (!dc) return false;    // scale DC    PrintScaling (dc);    // print page    if (page == 1) m_printed = 0;    m_printed = m_edit->FormatRange (1, m_printed, m_edit->GetLength(),                                     dc, dc, m_printRect, m_pageRect);    return true;}bool EditPrint::OnBeginDocument (int startPage, int endPage) {    if (!wxPrintout::OnBeginDocument (startPage, endPage)) {        return false;    }    return true;}void EditPrint::GetPageInfo (int *minPage, int *maxPage, int *selPageFrom, int *selPageTo) {    // initialize values    *minPage = 0;    *maxPage = 0;    *selPageFrom = 0;    *selPageTo = 0;    // scale DC if possible    wxDC *dc = GetDC();    if (!dc) return;    PrintScaling (dc);    // get print page informations and convert to printer pixels    wxSize ppiScr;    GetPPIScreen (&ppiScr.x, &ppiScr.y);    wxSize page = g_pageSetupData->GetPaperSize();    page.x = static_cast<int> (page.x * ppiScr.x / 25.4);    page.y = static_cast<int> (page.y * ppiScr.y / 25.4);    m_pageRect = wxRect (0,                         0,                         page.x,                         page.y);    // get margins informations and convert to printer pixels    wxPoint pt = g_pageSetupData->GetMarginTopLeft();    int left = pt.x;    int top = pt.y;    pt = g_pageSetupData->GetMarginBottomRight();    int right = pt.x;    int bottom = pt.y;    top = static_cast<int> (top * ppiScr.y / 25.4);    bottom = static_cast<int> (bottom * ppiScr.y / 25.4);    left = static_cast<int> (left * ppiScr.x / 25.4);    right = static_cast<int> (right * ppiScr.x / 25.4);    m_printRect = wxRect (left,                          top,                          page.x - (left + right),                          page.y - (top + bottom));    // count pages    while (HasPage (*maxPage)) {        m_printed = m_edit->FormatRange (0, m_printed, m_edit->GetLength(),                                       dc, dc, m_printRect, m_pageRect);        *maxPage += 1;    }    if (*maxPage > 0) *minPage = 1;    *selPageFrom = *minPage;    *selPageTo = *maxPage;}bool EditPrint::HasPage (int WXUNUSED(page)) {    return (m_printed < m_edit->GetLength());}bool EditPrint::PrintScaling (wxDC *dc){    // check for dc, return if none    if (!dc) return false;    // get printer and screen sizing values    wxSize ppiScr;    GetPPIScreen (&ppiScr.x, &ppiScr.y);    if (ppiScr.x == 0) { // most possible guess 96 dpi        ppiScr.x = 96;        ppiScr.y = 96;    }    wxSize ppiPrt;    GetPPIPrinter (&ppiPrt.x, &ppiPrt.y);    if (ppiPrt.x == 0) { // scaling factor to 1        ppiPrt.x = ppiScr.x;        ppiPrt.y = ppiScr.y;    }    wxSize dcSize = dc->GetSize();    wxSize pageSize;    GetPageSizePixels (&pageSize.x, &pageSize.y);    // set user scale    float scale_x = (float)(ppiPrt.x * dcSize.x) /                    (float)(ppiScr.x * pageSize.x);    float scale_y = (float)(ppiPrt.y * dcSize.y) /                    (float)(ppiScr.y * pageSize.y);    dc->SetUserScale (scale_x, scale_y);    return true;}#endif // wxUSE_PRINTING_ARCHITECTURE

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -