Code::Blocks Forums

Developer forums (C::B DEVELOPMENT STRICTLY!) => Development => CodeCompletion redesign => Topic started by: blueshake on July 19, 2009, 12:08:20 PM

Title: how to get SCN_AUTOCSELECTION message defined in Scintilla
Post by: blueshake on July 19, 2009, 12:08:20 PM
hello:
    if I want to get the message SCN_AUTOCSELECTION in the function
void CodeCompletion::EditorEventHook(cbEditor* editor, wxScintillaEvent& event) in codecompletion.cpp
how can I make that.

it seems that if (event.GetEventType() == wxEVT_SCI_AUTOCOMP_SELECTION) don't work.

any idea ?


Title: Re: how to get SCN_AUTOCSELECTION message defined in Scintilla
Post by: ollydbg on July 19, 2009, 04:36:48 PM
I guess in these function:


cbStyledTextCtrl* cbEditor::CreateEditor()
{
   m_ID = wxNewId();

   // avoid gtk-critical because of sizes less than -1 (can happen with wxAuiNotebook)
   wxSize size = m_pControl ? wxDefaultSize : GetSize();
   size.x = std::max(size.x, -1);
   size.y = std::max(size.y, -1);

   cbStyledTextCtrl* control = new cbStyledTextCtrl(this, m_ID, wxDefaultPosition, size);
   control->UsePopUp(false);

   wxString enc_name = Manager::Get()->GetConfigManager(_T("editor"))->Read(_T("/default_encoding"), wxEmptyString);
   m_pData->m_encoding = wxFontMapper::GetEncodingFromName(enc_name);

   // dynamic events
   Connect( m_ID,  -1, wxEVT_SCI_MARGINCLICK,
                 (wxObjectEventFunction) (wxEventFunction) (wxScintillaEventFunction)
                 &cbEditor::OnMarginClick );
   Connect( m_ID,  -1, wxEVT_SCI_UPDATEUI,
                 (wxObjectEventFunction) (wxEventFunction) (wxScintillaEventFunction)
                 &cbEditor::OnEditorUpdateUI );
   Connect( m_ID,  -1, wxEVT_SCI_CHANGE,
                 (wxObjectEventFunction) (wxEventFunction) (wxScintillaEventFunction)
                 &cbEditor::OnEditorChange );
   Connect( m_ID,  -1, wxEVT_SCI_CHARADDED,
                 (wxObjectEventFunction) (wxEventFunction) (wxScintillaEventFunction)
                 &cbEditor::OnEditorCharAdded );
   Connect( m_ID,  -1, wxEVT_SCI_DWELLSTART,
                 (wxObjectEventFunction) (wxEventFunction) (wxScintillaEventFunction)
                 &cbEditor::OnEditorDwellStart );
   Connect( m_ID,  -1, wxEVT_SCI_DWELLEND,
                 (wxObjectEventFunction) (wxEventFunction) (wxScintillaEventFunction)
                 &cbEditor::OnEditorDwellEnd );
   Connect( m_ID,  -1, wxEVT_SCI_USERLISTSELECTION,
                 (wxObjectEventFunction) (wxEventFunction) (wxScintillaEventFunction)
                 &cbEditor::OnUserListSelection );
   Connect( m_ID,  -1, wxEVT_SCI_MODIFIED,
                 (wxObjectEventFunction) (wxEventFunction) (wxScintillaEventFunction)
                 &cbEditor::OnEditorModified );

   // Now bind all *other* scintilla events to a common function so that editor hooks
   // can be informed for them too.
   // If you implement one of these events using a different function, do the following:
   //  * comment it out here,
   //  * "connect" it in the above block
   //  * and make sure you call OnScintillaEvent() from your new handler function
   // This will make sure that all editor hooks will be called when needed.
   int scintilla_events[] =
   {
//        wxEVT_SCI_CHANGE,
       wxEVT_SCI_STYLENEEDED,
//        wxEVT_SCI_CHARADDED,
       wxEVT_SCI_SAVEPOINTREACHED,
       wxEVT_SCI_SAVEPOINTLEFT,
       wxEVT_SCI_ROMODIFYATTEMPT,
       wxEVT_SCI_KEY,
       wxEVT_SCI_DOUBLECLICK,
//        wxEVT_SCI_UPDATEUI,
//        wxEVT_SCI_MODIFIED,
       wxEVT_SCI_MACRORECORD,
//        wxEVT_SCI_MARGINCLICK,
       wxEVT_SCI_NEEDSHOWN,
       wxEVT_SCI_PAINTED,
//        wxEVT_SCI_USERLISTSELECTION,
       wxEVT_SCI_URIDROPPED,
//        wxEVT_SCI_DWELLSTART,
//        wxEVT_SCI_DWELLEND,
       wxEVT_SCI_START_DRAG,
       wxEVT_SCI_DRAG_OVER,
       wxEVT_SCI_DO_DROP,
       wxEVT_SCI_ZOOM,
       wxEVT_SCI_HOTSPOT_CLICK,
       wxEVT_SCI_HOTSPOT_DCLICK,
       wxEVT_SCI_CALLTIP_CLICK,
//        wxEVT_SCI_AUTOCOMP_SELECTION,
//        wxEVT_SCI_INDICATOR_CLICK,
//        wxEVT_SCI_INDICATOR_RELEASE,

       -1 // to help enumeration of this array
   };
   int i = 0;
   while (scintilla_events[i] != -1)
   {
       Connect( m_ID,  -1, scintilla_events[i],
                     (wxObjectEventFunction) (wxEventFunction) (wxScintillaEventFunction)
                     &cbEditor::OnScintillaEvent );
       ++i;
   }

   return control;
}




Note the wxEVT_SCI_AUTOCOMP_SELECTION event was comment out, so, it doesn't connect to OnScintillaEvent  function.

So, this event will never be passed to the CodeCompletion::EditorEventHook function.

Just a guess, don't fully trust me :D
Title: Re: how to get SCN_AUTOCSELECTION message defined in Scintilla
Post by: blueshake on July 20, 2009, 06:44:19 AM
it seem so. I uncomment it.It works .Thank you for your help.
Title: Re: how to get SCN_AUTOCSELECTION message defined in Scintilla
Post by: blueshake on September 05, 2009, 01:10:32 PM
Recently I consider to implement the functionity.
if the item in suggestion list is a function ,the () will be added automaticlly.
so I need the wxEVT_SCI_AUTOCOMP_SELECTION message to turn on.
can any dev turn it on?
Title: Re: how to get SCN_AUTOCSELECTION message defined in Scintilla
Post by: MortenMacFly on September 05, 2009, 09:38:51 PM
Quote from: blueshake on September 05, 2009, 01:10:32 PM
can any dev turn it on?
Please do it in your working copy only for the moment. Then if you provide a patch with considerable functionality we can discuss to apply it including turning this on. ATM I don't know if it would have any side-effects, so I am better careful as wxScinitlla is a core component.