summaryrefslogtreecommitdiffstats
path: root/kcachegrind/kcachegrind/treemap.h
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-01-30 20:20:24 -0600
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-01-30 20:20:24 -0600
commitcfccedd9c8db3af36d7c5635ca212fa170bb6ff5 (patch)
treec80df038c9b6e40b4e28c26203de0dd9b1cd1593 /kcachegrind/kcachegrind/treemap.h
parent2020f146a7175288d0aaf15cd91b95e545bbb915 (diff)
downloadtdesdk-cfccedd9c8db3af36d7c5635ca212fa170bb6ff5.tar.gz
tdesdk-cfccedd9c8db3af36d7c5635ca212fa170bb6ff5.zip
Part 2 of prior commit
Diffstat (limited to 'kcachegrind/kcachegrind/treemap.h')
-rw-r--r--kcachegrind/kcachegrind/treemap.h759
1 files changed, 0 insertions, 759 deletions
diff --git a/kcachegrind/kcachegrind/treemap.h b/kcachegrind/kcachegrind/treemap.h
deleted file mode 100644
index 422cd35c..00000000
--- a/kcachegrind/kcachegrind/treemap.h
+++ /dev/null
@@ -1,759 +0,0 @@
-/* This file is part of KCachegrind.
- Copyright (C) 2002, 2003 Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
-
- KCachegrind is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public
- License as published by the Free Software Foundation, version 2.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; see the file COPYING. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-/**
- * A Widget for visualizing hierarchical metrics as areas.
- * The API is similar to TQListView.
- *
- * This file defines the following classes:
- * DrawParams, RectDrawing, TreeMapItem, TreeMapWidget
- *
- * DrawParams/RectDrawing allows reusing of TreeMap drawing
- * functions in other widgets.
- */
-
-#ifndef TREEMAP_H
-#define TREEMAP_H
-
-#include <tqstring.h>
-#include <tqwidget.h>
-#include <tqpixmap.h>
-#include <tqptrlist.h>
-#include <tqvaluevector.h>
-#include <tqcolor.h>
-#include <tqapplication.h>
-#include <tqstringlist.h>
-
-class TQPopupMenu;
-class TreeMapTip;
-class TreeMapWidget;
-class TreeMapItem;
-class TreeMapItemList;
-class TQString;
-
-class KConfigGroup;
-
-
-/**
- * Drawing parameters for an object.
- * A Helper Interface for RectDrawing.
- */
-class DrawParams
-{
-public:
- /**
- * Positions for drawing into a rectangle.
- *
- * The specified position assumes no rotation.
- * If there is more than one text for one position, it is put
- * nearer to the center of the item.
- *
- * Drawing at top positions cuts free space from top,
- * drawing at bottom positions cuts from bottom.
- * Default usually gives positions clockwise according to field number.
- */
- enum Position { TopLeft, TopCenter, TopRight,
- BottomLeft, BottomCenter, BottomRight,
- Default, Unknown};
-
- // no constructor as this is an abstract class
- virtual ~DrawParams() {}
-
- virtual TQString text(int) const = 0;
- virtual TQPixmap pixmap(int) const = 0;
- virtual Position position(int) const = 0;
- // 0: no limit, negative: leave at least -maxLines() free
- virtual int maxLines(int) const { return 0; }
- virtual int fieldCount() const { return 0; }
-
- virtual TQColor backColor() const { return TQt::white; }
- virtual const TQFont& font() const = 0;
-
- virtual bool selected() const { return false; }
- virtual bool current() const { return false; }
- virtual bool shaded() const { return true; }
- virtual bool rotated() const { return false; }
- virtual bool drawFrame() const { return true; }
-};
-
-
-/*
- * DrawParam with attributes stored
- */
-class StoredDrawParams: public DrawParams
-{
-public:
- StoredDrawParams();
- StoredDrawParams(TQColor c,
- bool selected = false, bool current = false);
-
- // getters
- TQString text(int) const;
- TQPixmap pixmap(int) const;
- Position position(int) const;
- int maxLines(int) const;
- int fieldCount() const { return _field.size(); }
-
- TQColor backColor() const { return _backColor; }
- bool selected() const { return _selected; }
- bool current() const { return _current; }
- bool shaded() const { return _shaded; }
- bool rotated() const { return _rotated; }
- bool drawFrame() const { return _drawFrame; }
-
- const TQFont& font() const;
-
- // attribute setters
- void setField(int f, const TQString& t, TQPixmap pm = TQPixmap(),
- Position p = Default, int maxLines = 0);
- void setText(int f, const TQString&);
- void setPixmap(int f, const TQPixmap&);
- void setPosition(int f, Position);
- void setMaxLines(int f, int);
- void setBackColor(const TQColor& c) { _backColor = c; }
- void setSelected(bool b) { _selected = b; }
- void setCurrent(bool b) { _current = b; }
- void setShaded(bool b) { _shaded = b; }
- void setRotated(bool b) { _rotated = b; }
- void drawFrame(bool b) { _drawFrame = b; }
-
-protected:
- TQColor _backColor;
- bool _selected :1;
- bool _current :1;
- bool _shaded :1;
- bool _rotated :1;
- bool _drawFrame :1;
-
-private:
- // resize field array if needed to allow to access field <f>
- void ensureField(int f);
-
- struct Field {
- TQString text;
- TQPixmap pix;
- Position pos;
- int maxLines;
- };
-
- TQValueVector<Field> _field;
-};
-
-
-/* State for drawing on a rectangle.
- *
- * Following drawing functions are provided:
- * - background drawing with shading and 3D frame
- * - successive pixmap/text drawing at various positions with wrap-around
- * optimized for minimal space usage (e.g. if a text is drawn at top right
- * after text on top left, the same line is used if space allows)
- *
- */
-class RectDrawing
-{
-public:
- RectDrawing(TQRect);
- ~RectDrawing();
-
- // The default DrawParams object used.
- DrawParams* drawParams();
- // we take control over the given object (i.e. delete at destruction)
- void setDrawParams(DrawParams*);
-
- // draw on a given TQPainter, use this class as info provider per default
- void drawBack(TQPainter*, DrawParams* dp = 0);
- /* Draw field at position() from pixmap()/text() with maxLines().
- * Returns true if something was drawn
- */
- bool drawField(TQPainter*, int f, DrawParams* dp = 0);
-
- // resets rectangle for free space
- void setRect(TQRect);
-
- // Returns the rectangle area still free of text/pixmaps after
- // a number of drawText() calls.
- TQRect remainingRect(DrawParams* dp = 0);
-
-private:
- int _usedTopLeft, _usedTopCenter, _usedTopRight;
- int _usedBottomLeft, _usedBottomCenter, _usedBottomRight;
- TQRect _rect;
-
- // temporary
- int _fontHeight;
- TQFontMetrics* _fm;
- DrawParams* _dp;
-};
-
-
-class TreeMapItemList: public TQPtrList<TreeMapItem>
-{
-public:
- TreeMapItem* commonParent();
-protected:
- int compareItems ( Item item1, Item item2 );
-};
-
-typedef TQPtrListIterator<TreeMapItem> TreeMapItemListIterator;
-
-
-/**
- * Base class of items in TreeMap.
- *
- * This class supports an arbitrary number of text() strings
- * positioned counterclock-wise starting at TopLeft. Each item
- * has its own static value(), sum() and sorting(). The
- * splitMode() and borderWidth() is taken from a TreeMapWidget.
- *
- * If you want more flexibility, reimplement TreeMapItem and
- * override the corresponding methods. For dynamic creation of child
- * items on demand, reimplement children().
- */
-class TreeMapItem: public StoredDrawParams
-{
-public:
-
- /**
- * Split direction for nested areas:
- * AlwaysBest: Choose split direction for every subitem according to
- * longest side of rectangle left for drawing
- * Best: Choose split direction for all subitems of an area
- * depending on longest side
- * HAlternate:Qt::Horizontal at top; alternate direction on depth step
- * VAlternate:Qt::Vertical at top; alternate direction on depth step
- * Qt::Horizontal: Always horizontal split direction
- * Qt::Vertical: Always vertical split direction
- */
- enum SplitMode { Bisection, Columns, Rows,
- AlwaysBest, Best,
- HAlternate, VAlternate,
- Horizontal, Vertical };
-
- TreeMapItem(TreeMapItem* parent = 0, double value = 1.0 );
- TreeMapItem(TreeMapItem* parent, double value,
- TQString text1, TQString text2 = TQString(),
- TQString text3 = TQString(), TQString text4 = TQString());
- virtual ~TreeMapItem();
-
- bool isChildOf(TreeMapItem*);
-
- TreeMapItem* commonParent(TreeMapItem* item);
-
- // force a redraw of this item
- void redraw();
-
- // delete all children
- void clear();
-
- // force new child generation & refresh
- void refresh();
-
- // call in a reimplemented items() method to check if already called
- // after a clear(), this will return false
- bool initialized();
-
- /**
- * Adds an item to a parent.
- * When no sorting is used, the item is appended (drawn at bottom).
- * This is only needed if the parent was not already specified in the
- * construction of the item.
- */
- void addItem(TreeMapItem*);
-
- /**
- * Returns a list of text strings of specified text number,
- * from root up to this item.
- */
- TQStringList path(int) const;
-
- /**
- * Depth of this item. This is the distance to root.
- */
- int depth() const;
-
- /**
- * Parent Item
- */
- TreeMapItem* parent() const { return _parent; }
-
- /**
- * Temporary rectangle used for drawing this item the last time.
- * This is internally used to map from a point to an item.
- */
- void setItemRect(const TQRect& r) { _rect = r; }
- void clearItemRect();
- const TQRect& itemRect() const { return _rect; }
- int width() const { return _rect.width(); }
- int height() const { return _rect.height(); }
-
- /**
- * Temporary rectangle list of free space of this item.
- * Used internally to enable tooltip.
- */
- void clearFreeRects();
- TQPtrList<TQRect>* freeRects() const { return _freeRects; }
- void addFreeRect(const TQRect& r);
-
- /**
- * Temporary child item index of the child that was current() recently.
- */
- int index() const { return _index; }
- void setIndex(int i) { _index = i; }
-
-
- /**
- * TreeMap widget this item is put in.
- */
- TreeMapWidget* widget() const { return _widget; }
-
- void setParent(TreeMapItem* p);
- void setWidget(TreeMapWidget* w) { _widget = w; }
- void setSum(double s) { _sum = s; }
- void setValue(double s) { _value = s; }
-
- virtual double sum() const;
- virtual double value() const;
- // replace "Default" position with setting from TreeMapWidget
- virtual Position position(int) const;
- virtual const TQFont& font() const;
- virtual bool isMarked(int) const;
-
- virtual int borderWidth() const;
-
- /**
- * Returns the text number after that sorting is done or
- * -1 for no sorting, -2 for value() sorting (default).
- * If ascending != 0, a bool value is written at that location
- * to indicate if sorting should be ascending.
- */
- virtual int sorting(bool* ascending) const;
-
- /**
- * Set the sorting for child drawing.
- *
- * Default is no sorting: <textNo> = -1
- * For value() sorting, use <textNo> = -2
- *
- * For fast sorting, set this to -1 before child insertions and call
- * again after inserting all children.
- */
- void setSorting(int textNo, bool ascending = true);
-
- /**
- * Resort according to the already set sorting.
- *
- * This has to be done if the sorting base changes (e.g. text or values
- * change). If this is only true for the children of this item, you can
- * set the recursive parameter to false.
- */
- void resort(bool recursive = true);
-
- virtual SplitMode splitMode() const;
- virtual int rtti() const;
- // not const as this can create children on demand
- virtual TreeMapItemList* children();
-
-protected:
- TreeMapItemList* _children;
- double _sum, _value;
-
-private:
- TreeMapWidget* _widget;
- TreeMapItem* _parent;
-
- int _sortTextNo;
- bool _sortAscending;
-
- // temporary layout
- TQRect _rect;
- TQPtrList<TQRect>* _freeRects;
- int _depth;
-
- // temporary self value (when using level skipping)
- double _unused_self;
-
- // index of last active subitem
- int _index;
-};
-
-
-/**
- * Class for visualization of a metric of hierarchically
- * nested items as 2D areas.
- */
-class TreeMapWidget: public TQWidget
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
-
- /**
- * Same as in TQListBox/TQListView
- */
- enum SelectionMode { Single, Multi, Extended, NoSelection };
-
- /* The widget becomes owner of the base item */
- TreeMapWidget(TreeMapItem* base, TQWidget* parent=0, const char* name=0);
- ~TreeMapWidget();
-
- /**
- * Returns the TreeMapItem filling out the widget space
- */
- TreeMapItem* base() const { return _base; }
-
- /**
- * Returns a reference to the current widget font.
- */
- const TQFont& currentFont() const;
-
- /**
- * Returns the area item at position x/y, independent from any
- * maxSelectDepth setting.
- */
- TreeMapItem* item(int x, int y) const;
-
- /**
- * Returns the nearest item with a visible area; this
- * can be the given item itself.
- */
- TreeMapItem* visibleItem(TreeMapItem*) const;
-
- /**
- * Returns the item possible for selection. this returns the
- * given item itself or a parent thereof,
- * depending on setting of maxSelectDepth().
- */
- TreeMapItem* possibleSelection(TreeMapItem*) const;
-
- /**
- * Selects or unselects an item.
- * In multiselection mode, the constrain that a selected item
- * has no selected children or parents stays true.
- */
- void setSelected(TreeMapItem*, bool selected = true);
-
- /**
- * Switches on the marking <markNo>. Marking 0 switches off marking.
- * This is mutually exclusive to selection, and is automatically
- * switched off when selection is changed (also by the user).
- * Marking is visually the same as selection, and is based on
- * TreeMapItem::isMarked(<markNo>).
- * This enables to programmatically show multiple selected items
- * at once even in single selection mode.
- */
- void setMarked(int markNo = 1, bool redraw = true);
-
- /**
- * Clear selection of all selected items which are children of
- * parent. When parent == 0, clears whole selection
- * Returns true if selection changed.
- */
- bool clearSelection(TreeMapItem* parent = 0);
-
- /**
- * Selects or unselects items in a range.
- * This is needed internally for Shift-Click in Extented mode.
- * Range means for a hierarchical widget:
- * - select/unselect i1 and i2 according selected
- * - search common parent of i1 and i2, and select/unselect the
- * range of direct children between but excluding the child
- * leading to i1 and the child leading to i2.
- */
- void setRangeSelection(TreeMapItem* i1,
- TreeMapItem* i2, bool selected);
-
- /**
- * Sets the current item.
- * The current item is mainly used for keyboard navigation.
- */
- void setCurrent(TreeMapItem*, bool kbd=false);
-
- /**
- * Set the maximal depth a selected item can have.
- * If you try to select a item with higher depth, the ancestor holding
- * this condition is used.
- *
- * See also possibleSelection().
- */
- void setMaxSelectDepth(int d) { _maxSelectDepth = d; }
-
-
- void setSelectionMode(SelectionMode m) { _selectionMode = m; }
-
- /**
- * for setting/getting global split direction
- */
- void setSplitMode(TreeMapItem::SplitMode m);
- TreeMapItem::SplitMode splitMode() const;
- // returns true if string was recognized
- bool setSplitMode(TQString);
- TQString splitModeString() const;
-
-
- /*
- * Shading of rectangles enabled ?
- */
- void setShadingEnabled(bool s);
- bool isShadingEnabled() const { return _shading; }
-
- /* Setting for a whole depth level: draw 3D frame (default) or solid */
- void drawFrame(int d, bool b);
- bool drawFrame(int d) const { return (d<4)?_drawFrame[d]:true; }
-
- /* Setting for a whole depth level: draw items (default) or transparent */
- void setTransparent(int d, bool b);
- bool isTransparent(int d) const { return (d<4)?_transparent[d]:false; }
-
- /**
- * Items usually have a size proportional to their value().
- * With <width>, you can give the minimum width
- * of the resulting rectangle to still be drawn.
- * For space not used because of to small items, you can specify
- * with <reuseSpace> if the background should shine through or
- * the space will be used to enlarge the next item to be drawn
- * at this level.
- */
- void setVisibleWidth(int width, bool reuseSpace = false);
-
- /**
- * If a children value() is almost the parents sum(),
- * it can happen that the border to be drawn for visibilty of
- * nesting relations takes to much space, and the
- * parent/child size relation can not be mapped to a correct
- * area size relation.
- *
- * Either
- * (1) Ignore the incorrect drawing, or
- * (2) Skip drawing of the parent level alltogether.
- */
- void setSkipIncorrectBorder(bool enable = true);
- bool skipIncorrectBorder() const { return _skipIncorrectBorder; }
-
- /**
- * Maximal nesting depth
- */
- void setMaxDrawingDepth(int d);
- int maxDrawingDepth() const { return _maxDrawingDepth; }
-
- /**
- * Minimal area for rectangles to draw
- */
- void setMinimalArea(int area);
- int minimalArea() const { return _minimalArea; }
-
- /* defaults for text attributes */
- TQString defaultFieldType(int) const;
- TQString defaultFieldStop(int) const;
- bool defaultFieldVisible(int) const;
- bool defaultFieldForced(int) const;
- DrawParams::Position defaultFieldPosition(int) const;
-
- /**
- * Set the type name of a field.
- * This is important for the visualization menu generated
- * with visualizationMenu()
- */
- void setFieldType(int, TQString);
- TQString fieldType(int) const;
-
- /**
- * Stop drawing at item with name
- */
- void setFieldStop(int, TQString);
- TQString fieldStop(int) const;
-
- /**
- * Should the text with number textNo be visible?
- * This is only done if remaining space is enough to allow for
- * proportional size constrains.
- */
- void setFieldVisible(int, bool);
- bool fieldVisible(int) const;
-
- /**
- * Should the drawing of the name into the rectangle be forced?
- * This enables drawing of the name before drawing subitems, and
- * thus destroys proportional constrains.
- */
- void setFieldForced(int, bool);
- bool fieldForced(int) const;
-
- /**
- * Set the field position in the area. See TreeMapItem::Position
- */
- void setFieldPosition(int, DrawParams::Position);
- DrawParams::Position fieldPosition(int) const;
- void setFieldPosition(int, TQString);
- TQString fieldPositionString(int) const;
-
- /**
- * Do we allow the texts to be rotated by 90 degrees for better fitting?
- */
- void setAllowRotation(bool);
- bool allowRotation() const { return _allowRotation; }
-
- void setBorderWidth(int w);
- int borderWidth() const { return _borderWidth; }
-
- /**
- * Save/restore options.
- */
- void saveOptions(KConfigGroup*, TQString prefix = TQString());
- void restoreOptions(KConfigGroup*, TQString prefix = TQString());
-
- /**
- * These functions populate given popup menus.
- * The added items are already connected to handlers.
- *
- * The int is the menu id where to start for the items (100 IDs reserved).
- */
- void addSplitDirectionItems(TQPopupMenu*, int);
- void addSelectionItems(TQPopupMenu*, int, TreeMapItem*);
- void addFieldStopItems(TQPopupMenu*, int, TreeMapItem*);
- void addAreaStopItems(TQPopupMenu*, int, TreeMapItem*);
- void addDepthStopItems(TQPopupMenu*, int, TreeMapItem*);
- void addVisualizationItems(TQPopupMenu*, int);
-
- TreeMapWidget* widget() { return this; }
- TreeMapItem* current() const { return _current; }
- TreeMapItemList selection() const { return _selection; }
- bool isSelected(TreeMapItem* i) const;
- int maxSelectDepth() const { return _maxSelectDepth; }
- SelectionMode selectionMode() const { return _selectionMode; }
-
- /**
- * Return tooltip string to show for a item (can be rich text)
- * Default implementation gives lines with "text0 (text1)" going to root.
- */
- virtual TQString tipString(TreeMapItem* i) const;
-
- /**
- * Redraws an item with all children.
- * This takes changed values(), sums(), colors() and text() into account.
- */
- void redraw(TreeMapItem*);
- void redraw() { redraw(_base); }
-
- /**
- * Resort all TreeMapItems. See TreeMapItem::resort().
- */
- void resort() { _base->resort(true); }
-
- // internal
- void drawTreeMap();
-
- // used internally when items are destroyed
- void deletingItem(TreeMapItem*);
-
-protected slots:
- void splitActivated(int);
- void selectionActivated(int);
- void fieldStopActivated(int);
- void areaStopActivated(int);
- void depthStopActivated(int);
- void visualizationActivated(int);
-
-signals:
- void selectionChanged();
- void selectionChanged(TreeMapItem*);
-
- /**
- * This signal is emitted if the current item changes.
- * If the change is done because of keyboard navigation,
- * the <kbd> is set to true
- */
- void currentChanged(TreeMapItem*, bool keyboard);
- void clicked(TreeMapItem*);
- void returnPressed(TreeMapItem*);
- void doubleClicked(TreeMapItem*);
- void rightButtonPressed(TreeMapItem*, const TQPoint &);
- void contextMenuRequested(TreeMapItem*, const TQPoint &);
-
-protected:
- void mousePressEvent( TQMouseEvent * );
- void contextMenuEvent( TQContextMenuEvent * );
- void mouseReleaseEvent( TQMouseEvent * );
- void mouseMoveEvent( TQMouseEvent * );
- void mouseDoubleClickEvent( TQMouseEvent * );
- void keyPressEvent( TQKeyEvent* );
- void paintEvent( TQPaintEvent * );
- void resizeEvent( TQResizeEvent * );
- void showEvent( TQShowEvent * );
- void fontChange( const TQFont& );
-
-private:
- TreeMapItemList diff(TreeMapItemList&, TreeMapItemList&);
- // returns true if selection changed
- TreeMapItem* setTmpSelected(TreeMapItem*, bool selected = true);
- TreeMapItem* setTmpRangeSelection(TreeMapItem* i1,
- TreeMapItem* i2, bool selected);
- bool isTmpSelected(TreeMapItem* i);
-
- void drawItem(TQPainter* p, TreeMapItem*);
- void drawItems(TQPainter* p, TreeMapItem*);
- bool horizontal(TreeMapItem* i, const TQRect& r);
- void drawFill(TreeMapItem*,TQPainter* p, TQRect& r);
- void drawFill(TreeMapItem*,TQPainter* p, TQRect& r,
- TreeMapItemListIterator it, int len, bool goBack);
- bool drawItemArray(TQPainter* p, TreeMapItem*, TQRect& r, double,
- TreeMapItemListIterator it, int len, bool);
- bool resizeAttr(int);
-
- TreeMapItem* _base;
- TreeMapItem *_current, *_pressed, *_lastOver, *_oldCurrent;
- TreeMapTip* _tip;
- int _maxSelectDepth, _maxDrawingDepth;
-
- // attributes for field, per textNo
- struct FieldAttr {
- TQString type, stop;
- bool visible, forced;
- DrawParams::Position pos;
- };
- TQValueVector<FieldAttr> _attr;
-
- SelectionMode _selectionMode;
- TreeMapItem::SplitMode _splitMode;
- int _visibleWidth, _stopArea, _minimalArea, _borderWidth;
- bool _reuseSpace, _skipIncorrectBorder, _drawSeparators, _shading;
- bool _allowRotation;
- bool _transparent[4], _drawFrame[4];
- TreeMapItem * _needsRefresh;
- TreeMapItemList _selection;
- int _markNo;
-
- // for the context menus: start IDs
- int _splitID, _selectionID, _visID;
- int _fieldStopID, _areaStopID, _depthStopID;
- TreeMapItem* _menuItem;
-
- // temporary selection while dragging, used for drawing
- // most of the time, _selection == _tmpSelection
- TreeMapItemList _tmpSelection;
- bool _inShiftDrag, _inControlDrag;
-
- // temporary widget font metrics while drawing
- TQFont _font;
- int _fontHeight;
-
- // back buffer pixmap
- TQPixmap _pixmap;
-};
-
-#endif