Well I have been hacking on ClassBuilder a bit and made some modifications - hopefully not too heinous
Currently I have added:
- C++ reverse engineering - works pretty well, handles a pretty good set of C++. Haven't seen any problems so far. I need to add some UI for lengthy operations (like a dialog that shows a progress bar or something).
Currently it only allows for a selecting a single directory to search in - so it would be nice to have do recursive as well - that's the next step.
- Some minor changes to the UI: separated out the main toolbar into several smaller toolbars. Also fixed a bug where the toolbar state was not being stored correctly by SaveBarState(). This was due to missing toolbar ID's. Also changed all the Notes fields in dialogs to use Richedits instead of plain of Edit boxes.
- Added a new top level menu called "Select" with items, "All" - does the same as Edit | Select All, "Clear" which clears the selection, and "Export" which allows you to export the selection in the Diagram (Class or Sequence) as a BMP or PNG file, using FreeImage as the image lib. Also allows to save as a metafile but for whatever reason the metafiles seem weird and don't show up right in other programs.
- HTML Documentation - yes I know that this is already present but I wanted formatting similar to what doxygen does. So I wrote a little class that takes a CClassBuilderDoc and documents it. Currently this creates files for all the classes, a main index, a Compund list file, and Compound member file, formatted very similar to doxygen. I would like to add a dialog for customizing the out put via a CSS file. I am aware I could have done this using the Add-ins but wasn't sure how to use them.
Currently working on outputting docs for the diagrams now.
I don't know if any ine else is interested in this code - if you are then I can either email someone a zip of my current code or you can add me to the project and I'll check it in, possibly in a branch ?
Cheers, and once again thanks for an awesome program !
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
It looks, that you've been busy!!
As noted by yourself it is best to make the html thing an add-in, there are working examples, so it shouldn't be to hard to get it to work as add-in. This way different people can used different add-ins, especially documentation generation is a subjective thing concerning formatting.
Also the C++ reverse enginering was original planned as an add-in, this keep rather complex software from the core and can be developed independly.
Can you elaborate on the richedit notes, what is teh difference for the user?
Jimmy Venema
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
>Can you elaborate on the richedit notes,
>what is teh difference for the user
Not much, but one thing s is that if your "importing" code from somewhere else and you pull in the comments, the Richedit will handle /n or /r/n correctly whereas the plain EDIT control does NOT.
Can you send me a quick little sample code for hte add-ins or point out where some of the add-ins are in CVS ?
thanks
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
If you go to all project files, you find an adk.zip and addins.zip. The first is a stripped version of the source files, only those files needed for making add-in, you can also copy them from your own sources. The other are examples, I do not know were ther are in CVS, I do not hhave CVS running.
Jimmy Venema
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Also I have/am making some mods to the UI so that the main ClassBuilderView is hosted in a dockable toolbar. This is a bit tricky due to the use of MFC wonderful Doc/View stuff.
I would like to modify the relationship editor so that you can configure it to either use your macros, or to use some alternate style/collections like STL. Any suggestions on how or where to start ?
Also how should I check this stuff in ? Or does anyone even want it ? I want it for my projects and for work
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
OK I just pulled down the two files you mentioned - the adk.zip simply has header files - no source whatsoever, nor any documentation that I am aware of on how to use the AddInBase. The addins.zip file has only the DLL's - no source . What do I need to do to actually create a an add ? Is it enough to just derive a new class from AddInBase, export this class in a DLL and put it in the same dir as ClassBuilder ?
Thanks
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Jimmy Venema
Here a zip file with examples and bat files to create a fresh adk directory. If placed in the correct directory the bat files will populate the ADK directory. Check the bat file were it gets it stuff from. Before going into the STL stuff reread carefully what I've posted into teh other thread about it. templated list classes are not very suited for code generation and by using it you throw away a lot of the features. It is also making things more difficult for the user, how do you explain that certain features he relies on won't work if he selects another type of implementation. Say he depends on automatic lifetime control and suddenly the application behaves differently if the uses some checkbox in a dialog. In my opinion it is better to use such a things as members directly, then you know you are on your own and responsible for everything. There is a reason the macro's are there, believe me I tried very hard to get the same functionality with templated list classes, but it is impossible to get the same functionality with the same cost as it is now. Further the solution must be scaleable, you must be able to implement a relation in the same way independed if teh associated classes have other relations. The hold for the type of relation (association/aggregation), suppose you are implementing something because of performance reasons as a value in a list instead of a reference. This immediately implies an aggregation, deleting the list, destoyes all contained objects. This immediate gives problems if the contained objects must also participate in other relations, adding or removing relations have an enormeous impact on the generated code, please consider very carefully all those issues before you start. With templated link list you are not adding relations to classes, but are effectively adding classes to relations. This makes things very comples if a class must participate in more then one relation. A lot of people are avoiding these constructs as a result and come up with bad designs, only of some stupid implementation constrains which are not necessary.
Jimmy Venema
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Well I have been hacking on ClassBuilder a bit and made some modifications - hopefully not too heinous
Currently I have added:
- C++ reverse engineering - works pretty well, handles a pretty good set of C++. Haven't seen any problems so far. I need to add some UI for lengthy operations (like a dialog that shows a progress bar or something).
Currently it only allows for a selecting a single directory to search in - so it would be nice to have do recursive as well - that's the next step.
- Some minor changes to the UI: separated out the main toolbar into several smaller toolbars. Also fixed a bug where the toolbar state was not being stored correctly by SaveBarState(). This was due to missing toolbar ID's. Also changed all the Notes fields in dialogs to use Richedits instead of plain of Edit boxes.
- Added a new top level menu called "Select" with items, "All" - does the same as Edit | Select All, "Clear" which clears the selection, and "Export" which allows you to export the selection in the Diagram (Class or Sequence) as a BMP or PNG file, using FreeImage as the image lib. Also allows to save as a metafile but for whatever reason the metafiles seem weird and don't show up right in other programs.
- HTML Documentation - yes I know that this is already present but I wanted formatting similar to what doxygen does. So I wrote a little class that takes a CClassBuilderDoc and documents it. Currently this creates files for all the classes, a main index, a Compund list file, and Compound member file, formatted very similar to doxygen. I would like to add a dialog for customizing the out put via a CSS file. I am aware I could have done this using the Add-ins but wasn't sure how to use them.
Currently working on outputting docs for the diagrams now.
I don't know if any ine else is interested in this code - if you are then I can either email someone a zip of my current code or you can add me to the project and I'll check it in, possibly in a branch ?
Cheers, and once again thanks for an awesome program !
It looks, that you've been busy!!
As noted by yourself it is best to make the html thing an add-in, there are working examples, so it shouldn't be to hard to get it to work as add-in. This way different people can used different add-ins, especially documentation generation is a subjective thing concerning formatting.
Also the C++ reverse enginering was original planned as an add-in, this keep rather complex software from the core and can be developed independly.
Can you elaborate on the richedit notes, what is teh difference for the user?
Jimmy Venema
>Can you elaborate on the richedit notes,
>what is teh difference for the user
Not much, but one thing s is that if your "importing" code from somewhere else and you pull in the comments, the Richedit will handle /n or /r/n correctly whereas the plain EDIT control does NOT.
Can you send me a quick little sample code for hte add-ins or point out where some of the add-ins are in CVS ?
thanks
If you go to all project files, you find an adk.zip and addins.zip. The first is a stripped version of the source files, only those files needed for making add-in, you can also copy them from your own sources. The other are examples, I do not know were ther are in CVS, I do not hhave CVS running.
Jimmy Venema
OK thanks for the info.
Also I have/am making some mods to the UI so that the main ClassBuilderView is hosted in a dockable toolbar. This is a bit tricky due to the use of MFC wonderful Doc/View stuff.
I would like to modify the relationship editor so that you can configure it to either use your macros, or to use some alternate style/collections like STL. Any suggestions on how or where to start ?
Also how should I check this stuff in ? Or does anyone even want it ? I want it for my projects and for work
OK I just pulled down the two files you mentioned - the adk.zip simply has header files - no source whatsoever, nor any documentation that I am aware of on how to use the AddInBase. The addins.zip file has only the DLL's - no source . What do I need to do to actually create a an add ? Is it enough to just derive a new class from AddInBase, export this class in a DLL and put it in the same dir as ClassBuilder ?
Thanks
Copy of a mail send to ddiego
Jimmy Venema
Here a zip file with examples and bat files to create a fresh adk directory. If placed in the correct directory the bat files will populate the ADK directory. Check the bat file were it gets it stuff from. Before going into the STL stuff reread carefully what I've posted into teh other thread about it. templated list classes are not very suited for code generation and by using it you throw away a lot of the features. It is also making things more difficult for the user, how do you explain that certain features he relies on won't work if he selects another type of implementation. Say he depends on automatic lifetime control and suddenly the application behaves differently if the uses some checkbox in a dialog. In my opinion it is better to use such a things as members directly, then you know you are on your own and responsible for everything. There is a reason the macro's are there, believe me I tried very hard to get the same functionality with templated list classes, but it is impossible to get the same functionality with the same cost as it is now. Further the solution must be scaleable, you must be able to implement a relation in the same way independed if teh associated classes have other relations. The hold for the type of relation (association/aggregation), suppose you are implementing something because of performance reasons as a value in a list instead of a reference. This immediately implies an aggregation, deleting the list, destoyes all contained objects. This immediate gives problems if the contained objects must also participate in other relations, adding or removing relations have an enormeous impact on the generated code, please consider very carefully all those issues before you start. With templated link list you are not adding relations to classes, but are effectively adding classes to relations. This makes things very comples if a class must participate in more then one relation. A lot of people are avoiding these constructs as a result and come up with bad designs, only of some stupid implementation constrains which are not necessary.
Jimmy Venema
Actually some of the source files are there, they just have to be generated from the CBD file
Craig Gunhouse (gunner)