News:

The new Release 25.03 is out! You can download binaries for Windows and many major Linux distros here .

Main Menu

template implementation

Started by Freem, September 25, 2011, 07:27:47 PM

Previous topic - Next topic

Freem

Usually, it is possible to use F11 key to switch between headers and source files.

For templates files, it is not possible, as they don't have true implementation file (ie: no cpp file) but it is common to use a tpp (or whatever else) file to avoid spamming the header file.

The problem is that, by default, C::B do not recognize those files as CPP ones.
It disable the F11 key and find implementation/declarations.

Is it possible to force CB to recognize tpp files as cpp for templates? And if yes, how? (I am currently working on a library using nearly only templates... so it is a bit annoying)

[edit]
removed the dumb assertion about color syntax. Just have to add it in the maskfile list, in general editor options.
But maybe it could be added by default?
[/edit]

Alpha

I am not sure about the rest, but for highlighting, you could add *.tpp to the filemasks for C/C++ under the syntax highlighting configuration.

Edit: I guess you just noticed that as well.

Freem

that's true, thanks anyway :)

But there is still the rest, the most useful in fact.

Alpha

Try this patch; it should register *.tpp as a source file, enabling header/source switching (warning, untested).

Index: src/sdk/globals.cpp
===================================================================
--- src/sdk/globals.cpp (revision 7467)
+++ src/sdk/globals.cpp (working copy)
@@ -230,6 +230,7 @@
         ext.IsSameAs(FileFilters::CC_EXT) ||
         ext.IsSameAs(FileFilters::CPP_EXT) ||
         ext.IsSameAs(FileFilters::CXX_EXT) ||
+        ext.IsSameAs(FileFilters::TPP_EXT) ||
         ext.IsSameAs(FileFilters::S_EXT) ||
         ext.IsSameAs(FileFilters::SS_EXT) ||
         ext.IsSameAs(FileFilters::S62_EXT) ||
Index: src/sdk/filefilters.cpp
===================================================================
--- src/sdk/filefilters.cpp (revision 7467)
+++ src/sdk/filefilters.cpp (working copy)
@@ -159,6 +159,7 @@
const wxString FileFilters::CC_EXT                       = _T("cc");
const wxString FileFilters::CPP_EXT                      = _T("cpp");
const wxString FileFilters::CXX_EXT                      = _T("cxx");
+const wxString FileFilters::TPP_EXT                      = _T("tpp");
const wxString FileFilters::INL_EXT                      = _T("inl");
const wxString FileFilters::H_EXT                        = _T("h");
const wxString FileFilters::HH_EXT                       = _T("hh");

Freem

I have think about a workaround: added a tpp folder which contains the tpp files, renamed as cpp.
Adding the "tpp/*.cpp" files in the project, uncheck "compile file" and "linking file" in "Build" tab of files properties.

It's not very nice because I don't like to use cpp extension, but it allow to use near every CB tools (except for auto completion, because it actually don't like templates)

But I will test your patch this evening, when I will be able to download CB source code.

Alpha

If it does not work, you could try this one; it includes more changes (but again, untested).

Index: src/sdk/scripting/bindings/sc_consts.cpp
===================================================================
--- src/sdk/scripting/bindings/sc_consts.cpp (revision 7470)
+++ src/sdk/scripting/bindings/sc_consts.cpp (working copy)
@@ -206,6 +206,7 @@
         BIND_WXSTR_CONSTANT_NAMED(FileFilters::CC_EXT, "EXT_CC");
         BIND_WXSTR_CONSTANT_NAMED(FileFilters::CPP_EXT, "EXT_CPP");
         BIND_WXSTR_CONSTANT_NAMED(FileFilters::CXX_EXT, "EXT_CXX");
+        BIND_WXSTR_CONSTANT_NAMED(FileFilters::TPP_EXT, "EXT_TPP");
         BIND_WXSTR_CONSTANT_NAMED(FileFilters::INL_EXT, "EXT_INL");
         BIND_WXSTR_CONSTANT_NAMED(FileFilters::H_EXT, "EXT_H");
         BIND_WXSTR_CONSTANT_NAMED(FileFilters::HH_EXT, "EXT_HH");
@@ -242,6 +243,7 @@
         BIND_WXSTR_CONSTANT_NAMED(FileFilters::CC_DOT_EXT, "DOT_EXT_CC");
         BIND_WXSTR_CONSTANT_NAMED(FileFilters::CPP_DOT_EXT, "DOT_EXT_CPP");
         BIND_WXSTR_CONSTANT_NAMED(FileFilters::CXX_DOT_EXT, "DOT_EXT_CXX");
+        BIND_WXSTR_CONSTANT_NAMED(FileFilters::TPP_DOT_EXT, "DOT_EXT_TPP");
         BIND_WXSTR_CONSTANT_NAMED(FileFilters::H_DOT_EXT, "DOT_EXT_H");
         BIND_WXSTR_CONSTANT_NAMED(FileFilters::HH_DOT_EXT, "DOT_EXT_HH");
         BIND_WXSTR_CONSTANT_NAMED(FileFilters::HPP_DOT_EXT, "DOT_EXT_HPP");
Index: src/sdk/globals.cpp
===================================================================
--- src/sdk/globals.cpp (revision 7470)
+++ src/sdk/globals.cpp (working copy)
@@ -230,6 +230,7 @@
         ext.IsSameAs(FileFilters::CC_EXT) ||
         ext.IsSameAs(FileFilters::CPP_EXT) ||
         ext.IsSameAs(FileFilters::CXX_EXT) ||
+        ext.IsSameAs(FileFilters::TPP_EXT) ||
         ext.IsSameAs(FileFilters::S_EXT) ||
         ext.IsSameAs(FileFilters::SS_EXT) ||
         ext.IsSameAs(FileFilters::S62_EXT) ||
Index: src/sdk/filefilters.cpp
===================================================================
--- src/sdk/filefilters.cpp (revision 7470)
+++ src/sdk/filefilters.cpp (working copy)
@@ -159,6 +159,7 @@
const wxString FileFilters::CC_EXT                       = _T("cc");
const wxString FileFilters::CPP_EXT                      = _T("cpp");
const wxString FileFilters::CXX_EXT                      = _T("cxx");
+const wxString FileFilters::TPP_EXT                      = _T("tpp");
const wxString FileFilters::INL_EXT                      = _T("inl");
const wxString FileFilters::H_EXT                        = _T("h");
const wxString FileFilters::HH_EXT                       = _T("hh");
@@ -210,6 +211,7 @@
const wxString FileFilters::CPP_DOT_EXT                      = _T('.') + FileFilters::CPP_EXT;
const wxString FileFilters::INL_DOT_EXT                      = _T('.') + FileFilters::INL_EXT;
const wxString FileFilters::CXX_DOT_EXT                      = _T('.') + FileFilters::CXX_EXT;
+const wxString FileFilters::TPP_DOT_EXT                      = _T('.') + FileFilters::TPP_EXT;
const wxString FileFilters::H_DOT_EXT                        = _T('.') + FileFilters::H_EXT;
const wxString FileFilters::HH_DOT_EXT                       = _T('.') + FileFilters::HH_EXT;
const wxString FileFilters::HPP_DOT_EXT                      = _T('.') + FileFilters::HPP_EXT;
Index: src/include/filefilters.h
===================================================================
--- src/include/filefilters.h (revision 7470)
+++ src/include/filefilters.h (working copy)
@@ -83,6 +83,7 @@
     extern const DLLIMPORT wxString CC_EXT;
     extern const DLLIMPORT wxString CPP_EXT;
     extern const DLLIMPORT wxString CXX_EXT;
+    extern const DLLIMPORT wxString TPP_EXT;
     extern const DLLIMPORT wxString INL_EXT;
     extern const DLLIMPORT wxString H_EXT;
     extern const DLLIMPORT wxString HH_EXT;
@@ -123,6 +124,7 @@
     extern const DLLIMPORT wxString CC_DOT_EXT;
     extern const DLLIMPORT wxString CPP_DOT_EXT;
     extern const DLLIMPORT wxString CXX_DOT_EXT;
+    extern const DLLIMPORT wxString TPP_DOT_EXT;
     extern const DLLIMPORT wxString INL_DOT_EXT;
     extern const DLLIMPORT wxString H_DOT_EXT;
     extern const DLLIMPORT wxString HH_DOT_EXT;
Index: src/src/associations.cpp
===================================================================
--- src/src/associations.cpp (revision 7470)
+++ src/src/associations.cpp (working copy)
@@ -34,6 +34,7 @@
     { FileFilters::CC_EXT,              _T("C++ source file"),               4 },
     { FileFilters::CPP_EXT,             _T("C++ source file"),               4 },
     { FileFilters::CXX_EXT,             _T("C++ source file"),               4 },
+    { FileFilters::TPP_EXT,             _T("C++ source file"),               4 },
     { FileFilters::INL_EXT,             _T("C++ source file"),               4 },

     { FileFilters::H_EXT,               _T("Header file"),                   5 },