]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/stc/stctest.cpp
compilation fix for bcc
[wxWidgets.git] / samples / stc / stctest.cpp
index b33052c86c9d5c8dd399bad0c9cfe4fa41f5a6aa..538d00ef98aa4f05126fb8554833d3bbea89bdfb 100644 (file)
@@ -40,7 +40,26 @@ public:
 };
 
 //----------------------------------------------------------------------
+//  Make an editor class
 
+class MySTC : public wxStyledTextCtrl
+{
+public:
+    MySTC(wxWindow *parent, wxWindowID id,
+          const wxPoint& pos = wxDefaultPosition,
+          const wxSize& size = wxDefaultSize, long style = 0);
+
+    void OnKeyPressed(wxKeyEvent& evt);
+
+private:
+    DECLARE_EVENT_TABLE()
+};
+
+BEGIN_EVENT_TABLE(MySTC, wxStyledTextCtrl)
+    EVT_KEY_DOWN(MySTC::OnKeyPressed)
+END_EVENT_TABLE()
+
+//----------------------------------------------------------------------
 // Define a new frame type: this is going to be our main frame
 class MyFrame : public wxFrame
 {
@@ -51,7 +70,7 @@ public:
     void OnAbout(wxCommandEvent& event);
 
 private:
-    wxStyledTextCtrl* ed;
+    MySTC* ed;
 
     DECLARE_EVENT_TABLE()
 };
@@ -78,8 +97,8 @@ IMPLEMENT_APP(MyApp)
 
 bool MyApp::OnInit()
 {
-    MyFrame *frame = new MyFrame("Testing wxStyledTextCtrl",
-                                 wxPoint(5, 5), wxSize(400, 600));
+    MyFrame *frame = new MyFrame(_T("Testing wxStyledTextCtrl"),
+                                 wxPoint(5, 5), wxSize(600, 600));
 
     frame->Show(TRUE);
     return TRUE;
@@ -99,81 +118,31 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
 
 
     // create a menu bar
-    wxMenu *menuFile = new wxMenu("", wxMENU_TEAROFF);
+    wxMenu *menuFile = new wxMenu(wxEmptyString, wxMENU_TEAROFF);
 
     // the "About" item should be in the help menu
     wxMenu *helpMenu = new wxMenu;
-    helpMenu->Append(ID_About, "&About...\tCtrl-A", "Show about dialog");
+    helpMenu->Append(ID_About, _T("&About...\tCtrl-A"), _T("Show about dialog"));
 
-    menuFile->Append(ID_Quit, "E&xit\tAlt-X", "Quit this program");
+    menuFile->Append(ID_Quit, _T("E&xit\tAlt-X"), _T("Quit this program"));
 
     // now append the freshly created menu to the menu bar...
     wxMenuBar *menuBar = new wxMenuBar();
-    menuBar->Append(menuFile, "&File");
-    menuBar->Append(helpMenu, "&Help");
+    menuBar->Append(menuFile, _T("&File"));
+    menuBar->Append(helpMenu, _T("&Help"));
 
     // ... and attach this menu bar to the frame
     SetMenuBar(menuBar);
 
 #if wxUSE_STATUSBAR
     CreateStatusBar(2);
-    SetStatusText("Testing wxStyledTextCtrl");
+    SetStatusText(_T("Testing wxStyledTextCtrl"));
 #endif // wxUSE_STATUSBAR
 
 
     //----------------------------------------
     // Setup the editor
-    ed = new wxStyledTextCtrl(this, ID_ED);
-
-    // Default font
-    wxFont font(10, wxMODERN, wxNORMAL, wxNORMAL);
-    ed->StyleSetFont(wxSTC_STYLE_DEFAULT, font);
-    ed->StyleClearAll();
-
-    ed->StyleSetForeground(0,  wxColour(0x80, 0x80, 0x80));
-    ed->StyleSetForeground(1,  wxColour(0x00, 0x7f, 0x00));
-    //ed->StyleSetForeground(2,  wxColour(0x00, 0x7f, 0x00));
-    ed->StyleSetForeground(3,  wxColour(0x7f, 0x7f, 0x7f));
-    ed->StyleSetForeground(4,  wxColour(0x00, 0x7f, 0x7f));
-    ed->StyleSetForeground(5,  wxColour(0x00, 0x00, 0x7f));
-    ed->StyleSetForeground(6,  wxColour(0x7f, 0x00, 0x7f));
-    ed->StyleSetForeground(7,  wxColour(0x7f, 0x00, 0x7f));
-    ed->StyleSetForeground(8,  wxColour(0x00, 0x7f, 0x7f));
-    ed->StyleSetForeground(9,  wxColour(0x7f, 0x7f, 0x7f));
-    ed->StyleSetForeground(10, wxColour(0x00, 0x00, 0x00));
-    ed->StyleSetForeground(11, wxColour(0x00, 0x00, 0x00));
-    ed->StyleSetBold(5,  TRUE);
-    ed->StyleSetBold(10, TRUE);
-
-#ifdef __WXMSW__
-    ed->StyleSetSpec(2, "fore:#007f00,bold,face:Arial,size:9");
-#else
-    ed->StyleSetSpec(2, "fore:#007f00,bold,face:Helvetica,size:9");
-#endif
-
-    // give it some text to play with
-    wxFile   file("stctest.cpp");
-    wxString st;
-
-    char* buff = st.GetWriteBuf(file.Length());
-    file.Read(buff, file.Length());
-    st.UngetWriteBuf();
-
-    ed->InsertText(0, st);
-    ed->EmptyUndoBuffer();
-
-    ed->SetLexer(wxSTC_LEX_CPP);
-    ed->SetKeyWords(0,
-                    "asm auto bool break case catch char class const "
-                    "const_cast continue default delete do double "
-                    "dynamic_cast else enum explicit export extern "
-                    "false float for friend goto if inline int long "
-                    "mutable namespace new operator private protected "
-                    "public register reinterpret_cast return short signed "
-                    "sizeof static static_cast struct switch template this "
-                    "throw true try typedef typeid typename union unsigned "
-                    "using virtual void volatile wchar_t while");
-
+    ed = new MySTC(this, ID_ED);
 }
 
 
@@ -190,5 +159,96 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
     wxString msg;
     msg.Printf( _T("Testing wxStyledTextCtrl...\n"));
 
-    wxMessageBox(msg, "About This Test", wxOK | wxICON_INFORMATION, this);
+    wxMessageBox(msg, _T("About This Test"), wxOK | wxICON_INFORMATION, this);
+}
+
+
+//----------------------------------------------------------------------
+
+wxChar* keywords =
+_T("asm auto bool break case catch char class const \
+const_cast continue default delete do double \
+dynamic_cast else enum explicit export extern \
+false float for friend goto if inline int long \
+mutable namespace new operator private protected \
+public register reinterpret_cast return short signed \
+sizeof static static_cast struct switch template this \
+throw true try typedef typeid typename union unsigned \
+using virtual void volatile wchar_t while");
+
+
+
+MySTC::MySTC(wxWindow *parent, wxWindowID id,
+             const wxPoint& pos, const wxSize& size,
+             long style)
+    : wxStyledTextCtrl(parent, id, pos, size, style)
+{
+    // Default font
+    wxFont font(10, wxMODERN, wxNORMAL, wxNORMAL);
+    StyleSetFont(wxSTC_STYLE_DEFAULT, font);
+    StyleClearAll();
+
+    StyleSetForeground(0,  wxColour(0x80, 0x80, 0x80));
+    StyleSetForeground(1,  wxColour(0x00, 0x7f, 0x00));
+    //StyleSetForeground(2,  wxColour(0x00, 0x7f, 0x00));
+    StyleSetForeground(3,  wxColour(0x7f, 0x7f, 0x7f));
+    StyleSetForeground(4,  wxColour(0x00, 0x7f, 0x7f));
+    StyleSetForeground(5,  wxColour(0x00, 0x00, 0x7f));
+    StyleSetForeground(6,  wxColour(0x7f, 0x00, 0x7f));
+    StyleSetForeground(7,  wxColour(0x7f, 0x00, 0x7f));
+    StyleSetForeground(8,  wxColour(0x00, 0x7f, 0x7f));
+    StyleSetForeground(9,  wxColour(0x7f, 0x7f, 0x7f));
+    StyleSetForeground(10, wxColour(0x00, 0x00, 0x00));
+    StyleSetForeground(11, wxColour(0x00, 0x00, 0x00));
+    StyleSetBold(5,  TRUE);
+    StyleSetBold(10, TRUE);
+
+#ifdef __WXMSW__
+    StyleSetSpec(2, _T("fore:#007f00,bold,face:Arial,size:9"));
+#else
+    StyleSetSpec(2, _T("fore:#007f00,bold,face:Helvetica,size:9"));
+#endif
+
+    // give it some text to play with
+    wxString st;
+    wxFileInputStream stream(wxT("stctest.cpp"));
+    size_t sz = stream.GetSize();
+    char* buf = new char[sz + 1];
+    stream.Read((void*) buf, stream.GetSize());
+    buf[sz] = 0;
+    st = wxString::FromAscii(buf);
+    delete[] buf;
+
+    InsertText(0, st);
+    EmptyUndoBuffer();
+
+    SetLexer(wxSTC_LEX_CPP);
+    SetKeyWords(0, keywords);
+}
+
+void MySTC::OnKeyPressed(wxKeyEvent& evt)
+{
+    if (CallTipActive())
+        CallTipCancel();
+
+    int key = evt.GetKeyCode();
+    if ( key == WXK_SPACE && evt.ControlDown()) {
+        int pos = GetCurrentPos();
+
+        if (evt.ShiftDown()) {
+            // show how to do CallTips
+            CallTipSetBackground(wxColour(_T("YELLOW")));
+            CallTipShow(pos, _T("lots of of text: blah, blah, blah\n\n"
+                                "show some suff, maybe parameters..\n\n"
+                                "fubar(param1, param2)"));
+        }
+        else {
+            // show how to do AutoComplete
+            AutoCompSetIgnoreCase(false);
+            AutoCompShow(0, keywords);   // reuse the keyword list here
+            // normally you would build a string of completion texts...
+        }
+    }
+    else
+        evt.Skip();
 }