Commit Graph
76 Commits
Author SHA1 Message Date
Andreas Stallinger 69ea6adddd src: file extension for header and source in config
header and source extensions are now in the projectsettings
2015-03-18 15:48:59 +01:00
Eberhard Graether e3f1f004a0 logic: combined GraphAccess and LocationAccess to StorageAccess
Having only one access point to the Storage will simplify caching and parallelisation in the future. Also the two
accesses were never really independent of each other anyways, because in some cases they had to access both data sets.
2015-03-17 16:38:17 +01:00
Eberhard Graether 03cf9eeb5f data: Fixes and features for loading Coati into Coati
This change facilitates loading Coati into Coati:
* removed error logs for TokenComponent setting
* fixed edge checks regarding template stuff
* separated CommonSettings to be inherited by Project- and ApplicationSettings for common settings
* pluralized SourcePaths setting in xml to allow for loading multiple directories and single files
* added CompilerFlags section to settings
* passing Compiler arguments to Parser via struct Parser::Arguments
* setting -isystem for all header search paths to avoid distinction between "" and <> headers
* parsing all headers from the SourcePaths, even the ones that are not included
* fixed parsing time measurement and display
* added utility.h file for general utility functionality
2015-03-16 10:07:57 +01:00
Eberhard Graether df888e4151 utility: added FilePath abstraction and rewrote data management to use it
The utility class FilePath wraps an instance of boost::filesystem::path. Using FilePath allows for easy comparision of
file paths on different platforms using absolute or relative paths. Whereever file paths are compared, this wrapper
should be used.
2015-03-09 01:51:32 +01:00
Andreas Stallinger abddf57004 logic: undoredo
Undoredo ignore sequential identical activatetoken messages
2015-03-07 18:14:27 +01:00
Andreas Stallinger da1a6d69c4 ui: Colors in SearchView
Show the right colors in SearchView for the different NodeTypes or QueryNodeTyps

Note: add colors to your Applcationsettings like in the template

fortune cookie message = recognition will come from unexpected sources
2015-03-04 11:55:25 +01:00
Eberhard Graether 598041f896 data: parsing file dependencies
This change adds the node NODE_FILE to the graph and the edge EDGE_INCLUDE, which determine the dependencies between
files by parsing the include preprocessor directive. File nodes can be searched and displayed in the GraphView as file
dependency graph. The filter "file" allows for selecting all files. The file depency information is used on project
refresh do determine which files need to get reparsed.
2015-03-03 00:33:13 +01:00
Eberhard Graether 4f7d31eb79 ui: graph transitions
This change adds animated transitions to the QtGraphView using sequential and parallel animations. First vanishing nodes
and all edges get faded out, then the remaining nodes are moved and resized, lastly new nodes and all edges are faded in.

fortune cookie message = Sorge dich nicht! Du wirst bekommen, was du brauchst.
2015-02-23 12:11:01 +01:00
Eberhard Graether b8f6b4be4e data: added Node type NODE_ENUM_CONSTANT 2015-02-10 14:28:53 +01:00
Eberhard Graether 53eab0a517 logic: fixed Searchbutton not searching and wrong destruction order in ComponentManager 2015-02-10 10:31:14 +01:00
Eberhard Graether 5ecc4fb39a logic/ui: added CompositeView for combining Views to one DockWidget
Added CompositView, which implements both View and ViewLayout, for combining Views to one Widget. The layout can be set
to either horizontal or vertical. SearchView, RefreshView and UndoRedoView are combined to one DockWidget by the
ComponentManager now.

fortune cookie message = You'll get more secure and confident with your relationship with your co-workers.
2015-02-09 16:27:23 +01:00
malte_langkabel 8bc11c9d9c logic: File Manager
* added FileManager that keeps track of the files analyzed by the project. It therefore checks if files get added, updated or deleted from the source- and include folders.
* refactored ASTVisitor::hasValidLocation() and implemented one version that search for the location in the currently parsed file and one that searches in all the project's source files.
* quickfix: switched order in FileManager so that header files are parsed first.
* created folder for helper classes used in tests.
* added test code for FileManager
* adjusted test code for Parser Tests.
2015-02-09 14:52:31 +01:00
Eberhard Graether af1462f955 ui: fixed autocompletion issues
* click in autocompletions list causes search
* right arrow for autocompletion
* changed query operator has from '>' to '.' and operator sub from '.' to '+'
* fixed autocompletions to fit to query
and
* fixed spectral layouting endless looping on unconnected node
2015-02-06 00:51:02 +01:00
Eberhard Graether 1f6d503b9c logic: fixed layouting and parsing
* Fixed spectral layouting not initializing matrices with 0
* Fixed some kinds of template arguments don't resolve to a name
2015-02-05 13:52:34 +01:00
Andreas Stallinger 2e61f38441 logic: undo
undo with shared_ptr
2015-02-05 11:04:03 +01:00
Eberhard Graether 33aff14813 logic: only show edges connected to active node
* split active and visible setting for DummyNodes
* set and check visible on DummyEdges
* include fix for Mac in MatrixDynamicBase
* fix for disappearing style and crashes in GraphView
* cleaned up DummyNode

fortune cookie message = Du stehst kurz davor etwas Neues zu unternehmen.
2015-02-03 16:48:32 +01:00
Eberhard Graether 1690479b0e ui/logic/data: refreshing only source files that have been updated
This change adds the refresh component that allows for refreshing the source code via UI or shortcut. If automatic
refreshing is activated via the UI, the code is refreshed anytime the window gets focus. The contents of all the
updated source files get removed from Storage, before reparsing them. File dependencies are not respected yet.
2015-02-03 14:27:39 +01:00
Andreas Stallinger 944554d034 logic: UndoRedo
UndoRedo working for ActiveTokensMessages
2015-02-03 10:47:56 +01:00
Manuel a7eaeae432 UI: GraphLayouting
Implemented graph layouting, hybrid approach using spectral and force based layouting

fortune cookie message = Giving credit where it's due ensures loyalty to you.
2015-01-29 15:47:02 +01:00
Eberhard Graether 016d692dda ui: preparations for user study
* added sample code
* bigger and closed arrow for inheritance edge
* fixed code hover
* lightened scope colors
* fixed interrupted scope ranges to show all lines
* fixed edge creation to correctly show recursion
* prevent aggregation edge number from floating around
* scroll to top when changing codesnippets
2015-01-26 06:50:23 +01:00
Eberhard Graether bdb38acbce ui/logic/data: show parse errors in CodeView
This change saves the errors while parsing in the Storage and displays them in the CodeView. The error messages can be
read in the tooltip on hovering. The error count is visible in the status bar.
2015-01-15 19:38:19 +01:00
Eberhard Graether 7596c699d6 ui: improvements proposed by Julian Mautner
* automatically expand active class
* increase arrow size
* return child nodes in autocompletions
* always return filters in autocompletions
2015-01-12 23:47:57 +01:00
Eberhard Graether 8242454104 ui/data: cleaned up UI and parsing
* HOT FIX: typename not always correctly split to name hierarchy
* show node main if available as first active token after parsing
* show all contents of namespaces if searched for
* added missing enum type and enum value usages
* added inheritance for structs
* removed MessageActivateToken and replaced it with MessageActivateTokens
* activating correct nodes for clicks in GraphView and CodeView
* no graph change when clicking an edge, but highlighting the edge instead
* only show active nodes without connections when multiple are activated
* fixed snippet sorting to put file that contains declarations on top
* set sizeHints on CodeView and SearchView to increase their initial size

fortune cookie message = Das Leben wird eine positive Wendung nehmen.
2015-01-08 12:12:50 +01:00
Eberhard Graether ee85abfc7b data/logic/ui: added aggregation edges
This change adds the creation of aggregation edges to the StorageGraph, which save the connection counts between
children in their parents. Aggregation edges are displayed using a straight line, that is thicker than more connections
it represents with the connection count in the middle.
2015-01-07 14:42:35 +01:00
Eberhard Graether 3f4ae8343c logic: initially parse source on message thread and add more StatusBar messages
This change puts the initial project loading into a MessageLoadProject so that the UI thread is still responding.
Also the StatusBar is now responding to more Messages and it's MessageListeners get added to the MessageQueue in
front of other listeners so that the StatusBar UI can announce actions.
2014-12-02 01:20:08 +01:00
Eberhard Graether c54c405dd1 logic: fixed warnings, tests and bugs
* fixed clang warnings
* fixed cxxparser tests
* added missing checks for valid location in ASTVisitor callbacks for templates
* removed warning when statusbar view is removed
* made font of activated classes bold
* fixed search box not responding to autocompletion tab or enter press
* fixed search box not updated when active token changes
2014-12-02 00:55:57 +01:00
Andreas Stallinger af4e3f7676 ui: statusbar
statusbar added, listen to status- , error-  and parsingfinishedmessages
2014-11-24 16:35:46 +01:00
Eberhard Graether 048fcb28b4 ui: moved subnode layouting from GraphView to GraphController
This change moves nested layouting of the Graph to GraphController. The DummyNodes get the correct size assigned, as
well as a visible flag. Mouse interaction with the Graph is now handled via the GraphController, which makes it
easier to undo them or reuse the changed state after graph updates.
2014-11-20 20:53:01 +01:00
Eberhard Graether 113aab8e60 ui: styled edges in graph view
This change styles the edges in the QtGraphView. They get drawn with vertical and horizontal parts and rounded corners.
2014-11-15 17:48:13 +01:00
Eberhard Graether 72c5847d75 ui: styled nodes in graph view
This change styles the nodes in the QtGraphView. Since Stylesheets can't be applied to QGraphicsItems, the style
implementation was done in the source files. The containers for public/protected/private nodes are now subclassed from
QtGraphNode as QtGraphNodeAccess, including a helper class QtAccessArrow for indicating the opened/colapsed state.
2014-11-12 01:42:49 +01:00
Eberhard Graether 5b230cefa0 ui: extented graph view ui features
* fitting boxes to name length
* highlighting active edges and nodes
* hover for edges and nodes
* single click selection for edges and nodes
* edges have transparent second line for easier clicking
* sub structure class members by public/protected/private
2014-11-09 05:18:37 +01:00
Eberhard Graether 2c84bf20ed data: split off inner classes of SearchIndex 2014-10-28 22:06:22 +01:00
Eberhard Graether 86f4629b0d logic: preselecting SearchNodes for autocompletion by prefiltering the Graph with the entered Query
This change only shows matches in the autocompletion list that are prefiltered by the already entered query. The
autocompletion now also shows up after an operator of type . or > has been entered to show an alphabetical list of
possible tokens.
2014-10-28 20:21:19 +01:00
Eberhard Graether ede0af4291 logic: Fixed GraphView not updated because MessageActivateTokens was not handled in GraphController 2014-10-27 12:14:21 +01:00
Andreas Stallinger 0a4c65d198 logic: Codeview Snippet order
Sorting the Snippets in. the Codeview. Active Token first then declaration,
filename and extension
2014-10-24 13:37:06 +02:00
Eberhard Graether a9c93a9437 ui: added smart search box
This change switches the search box in the search view from QLineEdit to the derived QtSmartSearchBox implementation,
which is capeable of displaying tokens of the query as selectable button elements in different colors. It allows for all
the usual mouse and keyboard interactions that the QLineEdit offers.

fortune cookie message = Good news from someone dear is coming soon.
2014-10-22 17:28:46 +02:00
Manuel Dobusch 103e60b52a ui: graphView
Graph view has now toggle-able subnodes. Subnodes connected to the active node are always visible.

fortune cookie message = You will enjoy true success in whatever you do.
2014-10-20 14:36:57 +02:00
malte_langkabel 0f34f55844 data: windows crash fix
* fixed a crash on windows that occurred when the name of a token was stored in a container that was destroyed after a const & was returned.
2014-10-06 11:18:27 +02:00
Eberhard Graether a294519cd1 logic: clear views when search query doesn't have a result 2014-09-30 22:23:54 +02:00
Eberhard Graether fec7abbc9b ui: integrated autocompletion and filtering into SearchView
- QtSearchView was split into QtSearchView and QtSearchBox.
- QtSearchBox contains all Qt elements and can use them purely
- QtSearchView forwards calls from the SearchController to QtSearchBox
- Searching is initiated with MessageSearch to the SearchController
- Autocompletion is initiated with MessageSearchAutocomplete to the SearchController
- The search field is able to create filter queries by only giving autocompletions for the last token in the query
- For named tokens the search field adds their token ids to the query in the form of "A,25" for faster lookup

bug id = #21
2014-09-11 14:53:03 +02:00
Eberhard Graether 760e5ffafd logic: refactored GraphAccess and GraphController to use single call that returns Graph
This change refactors the GraphController to use the GraphAccess only with a single call that returns a Graph. The Graph
contains all information for visually representing the active Token with all parent and child nodes and edges. This
reduces coupling of the data and logic tiers.
2014-09-10 01:07:26 +02:00
Eberhard Graether 4fd1f330ed data: added SearchIndex for fuzzy name search and rewrote name handling in the Storage
This change stores each Token name in the separate singleton class Dictionary. The Dictionary gives each saved word an
Id and thereby avoids duplicated names. E.g if the constructor method "Graph::Graph" is stored then the word "Graph"
only appears once in memory.

The class SearchIndex is now responsible for the name hierarchy and is instantiated by the Storage. The SearchIndex
builds the name hierarchy using SearchNodes, each holding a Dictionary string reference of the name it holds. E.g if the
names "math::ceil" and "math::floor" are added to the SearchIndex then 3 nodes get created, the SearchNode "math" will
hold the two childs "ceil" and "floor".

The hierarchical graph creation functionality got split off from Graph into the new subclass StorageGraph. The
StorageGraph creates nodes with a passed SearchNode pointer of the name it represents in the SearchIndex. Thereby the
StorageGraph reuses the hierarchical information in the SearchIndex and can create nodes much quicker by avoiding node
searches and name comparisions.

The name information is now stored in the Nodes via the TokenComponentName class, which is subclassed into
TokenComponentNameReferenced and TokenComponentNameCached. The StorageClass creates nodes with the component
TokenComponentNameReferenced, which holds a pointer to the SearchNode instance holding the name. This allows for
retrieving the full name of the node, without using other Nodes int the Graph, which might not be present. If the Node
is copied then the component changes to a TokenComponentNameCached, which holds the full name as a string, so the
memory in the Storage doesn't have to be accessed anymore.

TokenComponentSignature is now only holding an Id of the signature string saved in the Dictionary, which speeds up the
signature comparison. A follow-up will change saving the whole signature as string to reusing the wordIds it is
consisting of.

Lastly the SearchIndex holds basic fuzzy search functionality. A passed query gets compared down the SearchNode
hierarchy as long as matches for each letter are found. Matches must contain all letters of the query. The search is
case-insensitive. If letters are found in front positions, next to each other or written in uppercase they are weighed
higher in the match ranking. The character ':' is also interpreted and found, although the '::' delimiter is not stored.

E.g. the query "m:l" used on the example above will return both "math::floor" and "math::ceil", but "floor" is ranked
higher because the 'l' appears closer to the start.
2014-09-06 01:13:07 +02:00
Eberhard Graether c84972b96e logic: added query syntax and filtering system for search
This change allows the user to use a simple query syntax in the search field to filter the results using names,
operators and predefined filters.

The class QueryTree is capable of parsing a simple query language consiting of QueryNodes, subclassed as
QueryOperators, QueryCommands and QueryTokens. QueryToken identifies a Token by name. QueryCommand represents predefined
filters. QueryOperator defines the syntactic relationship.

QueryNode examples:
	"A" -> QueryToken that identifies the Token named A
	class -> QueryCommand that filters all Nodes that are classes
	. -> QueryOperator that concatenates filters

QueryExamples:
	"A".class -> All Tokens named A that are classes
	method.(private|protected) -> All methods that are private or protected
	"A".member -> All members of A
	"A":field.!const -> All fields of A that are not const (':' can be used instead of '.member')

QueryTree checks for correct operator precedence and validity of the query.
All QueryCommands can be found in data/query/QueryCommand.cpp
All QueryOperators can be found in data/query/QueryOperator.cpp

The parsed QueryTree is then passed to the class GraphFilterConductor, which is capable of applying the query on a
Graph. Each part of the query gets assigned a GraphFilter that filters the input Graph in order of node precedence. The
class SubGraph is used as intermediate container, only holding bare pointers to Nodes and Edges. The output Graph holds
all Nodes that match the query.

MessageActivateTokens is used to show all of the results in the CodeView. The GraphView currently only shows the first
Node of the results.

bug id = #6
2014-08-30 18:24:00 +02:00
Eberhard Graether 182e18840e ui: show annotation in code snippets for TokenLocations that wrap around the snippet
bug id = #12
2014-07-28 03:27:16 +02:00
Eberhard Graether 95929db6e0 ui: improved ui of maximized code file window
* Annotations updated when active token Id changes
* FileName in window title
* Maximize button not shown
* Scrolls roughly to the maximized location.
* Maximizing also on double click in code snippet
2014-07-28 01:17:01 +02:00
Eberhard Graether dea79f701b ui: added maximize button to CodeSnippets that opens the full file in a separate window 2014-07-27 16:13:59 +02:00
Eberhard Graether 16d49e58cc logic: extended CodeView to show locations of edges to the active Token and merge overlapping snippets 2014-07-26 23:07:47 +02:00
Eberhard Graether 5d201b9880 ui: added shortcut to refresh view
Added a refresh shortcut to the new View menu, that causes stylesheets to be refreshed by dispatching a MessageRefresh.
2014-07-21 17:49:41 +02:00
Eberhard Graether 0074db86e8 src: replaced gui wording with view wording
Changed gui wording in lib and app to view wording, since MVC views do not necessarily deal with GUIs. And moved files
so structure is similar in lib and app.
2014-07-21 14:48:02 +02:00
Eberhard Graether 0d46de871a src: fixed clang warnings, fixed undefined symbols logs, fixed code convention violations 2014-07-21 01:26:35 +02:00