====== Ptidej UI Viewer Standalone Swing ====== The ''Ptidej UI Viewer Standalone Swing'' project provides the class ''ptidej.viewer.ProjectViewer'', which is currently the most usable graphical interface to the Ptidej Tool Suite. ===== Usage ===== Here are some steps to use it: ^ Clickable Screenshots ^ Steps ^ | {{:ptidej_ui_viewer_standalone_swing_1.png?100|}} | Starting-up the project viewer | | {{:ptidej_ui_viewer_standalone_swing_2.png?100|}} | Using the File menu to create a new model from some C++ source files | | {{:ptidej_ui_viewer_standalone_swing_3.png?100|}} | Giving a name to the model | | {{:ptidej_ui_viewer_standalone_swing_4.png?100|}} | Selecting a directory containing C++ source files | | {{:ptidej_ui_viewer_standalone_swing_5.png?100|}} {{:ptidej_ui_viewer_standalone_swing_5.1.png?100|}} | After reverse-engineering the C++ source code files, displaying the model | | {{:ptidej_ui_viewer_standalone_swing_6.png?100|}} | Selecting the Tools tab... | | {{:ptidej_ui_viewer_standalone_swing_6.1.png?100|}} | ... and showing the list of micro-architectures similar to some motifs (either from design patterns, design anti-patterns, code smells, or micro-patterns) | | {{:ptidej_ui_viewer_standalone_swing_7.png?100|}} | At first, the list is empty... | | {{:ptidej_ui_viewer_standalone_swing_8.png?100|}} | ... but selecting the Code Smells tab and the AbstractClass code smell reveals some potential problems | | {{:ptidej_ui_viewer_standalone_swing_9.png?100|}} | These problem can be investigated by selecting the displayed occurrence in the list... | | {{:ptidej_ui_viewer_standalone_swing_10.png?100|}}{{:ptidej_ui_viewer_standalone_swing_10.1.png?100|}} | ... or in the model view | ===== Implementation ===== The current implementation of the ''Ptidej UI Viewer Standaline Swing'' is actually a mini-framework. It makes it easy for third-parties to integrate their own [[ptidej_ui_viewer_extensions|extensions]] and visualisations. It provides currently three types of visualisation: one purely graphical, one showing a hierarchical tree and a graphical representation, and one showing two hierarchical trees and graphical representations to distinguish types and their implementation classes. The class ''DesktopPane'' is the world in which various visualisations can live. These visualisations are typically displayed as internal ''Window''s. Extensions and other lists listens to the visualisations by implementing the ''CanvasListener'' interface. The canvas also listens to the ''DesktopPane'' to receive notification of changes, for example in the choice of graphical elements to display. Hence, interactions can go in three directions without strong coupling (from the ''DesktopPane'' to its ''Window''s, from the ''Windows'' to the lists, and from the lists to the ''Window''s. {{ ::desktoppane_and_windows.png?direct&500 |}}