guit  0.1
 All Classes Functions Variables Typedefs Enumerations Friends
Public Types | Public Member Functions | List of all members
guit::GItem Class Reference

Base class for labels, state and stateless buttons, menu items, etc. More...

Inheritance diagram for guit::GItem:
guit::Gadget guit::GObject guit::GFiller guit::GTextItem guit::GValueItem guit::GChartItem guit::GSlider guit::GScrollBar

Public Types

enum  Update
 Layout update modes (see updateLayout()).
 

Public Member Functions

 ~GItem ()
 Creates an item, adds a prop, a menu, a window/dialog or a function to it, returns the item. More...
 
GItemclone (GClone const &) override
 Clones the gadget according to GClone argument.
 
GString text () const override
 Returns the text of the item. More...
 
virtual void doAction ()
 Perform on::action callbacks (the defaut action).
 
GString stringValue () const override
 returns "true" if the item is selected, "false" otherwise.
 
void setValue (GString const &text) override
 selects or deselects the item if Gadget::istCheckable() is true.
 
bool hasValue () const override
 Returns true if the gadget has a value. More...
 
GPropvalueProp () override
 Returns the prop that stores the gadget's value. More...
 
void add (GMenu *) override
 Adds a menu, a window, a dialog box to the gadget. More...
 
void blink (GString const &message="", GTime duration=350)
 Blinks the gadget, optionally showing a message. More...
 
GPropList const & props () const
 Returns all props. More...
 
void cssProps (class GPropMap &)
 Returns the props relative to this gadget in CSSs. More...
 
virtual void removeProps ()
 Removes all props (including conditional props and callbacks). More...
 
virtual void cleanup ()
 Removes all props and children. More...
 
bool isMultiLine () const
 Returns true if gadget displays multiline text.
 
virtual void update ()
 Notifies the toolkit that this gadget needs to be repainted. More...
 
virtual void updateLayout (Update=Update::IfNeeded)
 Notifies the toolkit that the layout needs to be updated. More...
 
virtual GWindowgetWindow () const
 Returns the GWindow that contains the gadget (if any, null otherwise).
 
virtual bool isTopLevel () const
 Returns true if the gadget is a Window or a Menu.
 
virtual void clearValues ()
 Clears the values of the gadget and its descendants. More...
 
int zlayer () const
 Returns the z-layer of the gadget. More...
 
GRect const & wframe ()
 Returns the frame (position and size) of the gadget in window coordinates.
 
virtual void keepInside (GBox &box, GPoint &point)
 Changes point to keep the gadget inside an ancestor when moving or resizing it.
 
virtual GHandle findHandle (GPoint const &wpos)
 Returns the handle that contains this position in window corrdinates.
 
bool isActive () const
 Returns true if the gadget is currently active (eg pressed).
 
GadgetModes const & modes () const
 Returns all gadget modes.
 
GEventType const & eventMask () const
 Returns the events (ORed mask) that the gadget takes into account.
 
virtual void doFire (GEvent &)
 Fires callbacks and conditional props (see GCond) that match this event.
 
virtual void doPaint (GRenderGraphics &, GRender *parent_render)
 Paints the gadget. More...
 
virtual GadgetdoPick (GPoint const &wpos, class GPickMode &)
 Returns the gadget the gadget that contains this point. More...
 
virtual void onAdd (GBox *parent)
 Called when the gadget is added to a parent.
 
virtual void onRemove (GBox *parent)
 Called when the gadget is removed from a parent.
 
void removeNotifiers (void *) override
 [Implementation] Notifies this object that it must no longer refer obj.
 
virtual void error (GString const &funname, GString const &message) const
 Prints an error message. More...
 
void operator delete (void *)
 delete does nothing, see GObject class.
 
void forgetSmartPointers ()
 Forgets all smart pointers pointing this object. More...
 
unsigned int useCount () const
 Returns the numbers of smart pointers referencing the object.
 
virtual GItemoperator= (GString const &str)
 Changes the text.
 
GString typeName () const override
 Returns the name and ID of the gadget's type.
 
GadgettoGadget () override
 Class conversions.
 
virtual bool contain (GProp *prop) const
 Returns true if the gadget contains this prop.
 
virtual GPropfindProp (GPropType &) const
 Searches if the gadget contains a prop of this class or a derived class. More...
 
virtual GPropprop (GPropType &, bool in_css=false)
 Searches a prop of this class in the gadget and the CSS, and creates it if needed. More...
 
virtual void add (GString const &str)
 Adds/replaces props. More...
 
void add (class GStateTransition &)
 Adds a callback function or a state transitions. More...
 
bool remove (GProp *prop)
 Removes a prop (including conditional props and callbacks). More...
 
bool isRichText () const
 Checks/changes whether HTML-like tags are interpreted when displaying text. More...
 
GadgetcatchEvents (bool=true)
 Checks/changes whether the gadget catches events. More...
 
GadgetignoreEvents (bool=true)
 Checks/changes whether the gadget ignores events. More...
 
virtual Gadgetcheck (bool=true)
 Checks/changes whether the gadget is checked (ie selected). More...
 
GadgetsetCheckable (bool=true)
 Checks/changes whether the gadget is checkable (ie can be selected). More...
 
virtual Gadgetenable (bool=true)
 Checks/change whether the gadget is enabled. More...
 
virtual Gadgetshow (bool=true)
 Checks or change whether the gadget is shown. More...
 
GBoxgetParent () const
 Returns the parent gadget. More...
 
bool read (GString const &filename, GIOMode=GIOMode::Auto)
 Reads the values or the children of this gadget recursively.
 
bool write (GString const &filename, GIOMode) const
 Writes the values or the children of this gadget recursively.
 
bool isColumn () const
 Returns the direction of the gadget. More...
 
virtual void move (GPoint const &)
 Changes the position (in pixels) of the gadget. More...
 
virtual void resize (float w, float h)
 Changes the preferred size (in pixels) of the gadget. More...
 
virtual void reshapeInteractively ()
 Allows reshaping a gadget interactivelly. More...
 
virtual GPoint pos () const
 Returns the position of the gadget in its parent. More...
 
GPoint wpos () const
 Returns the position of the gadget in its containing window. More...
 
GPoint screenPos () const
 Returns the position of the gadget on the screen.
 
float w () const
 Returns the dimension (size) of the gadget.
 
float angleStart () const
 Returns/changes the starting angle and the extent when painting gadgets as pie slices. More...
 
bool isActivable () const
 Ckecks/changes whether the gadget can be active.
 
bool isDownActivable () const
 Ckecks/changes whether the gadget is active on mouse down rather than mouse up.
 
bool isFocus () const
 Returns true if the gadget has/can have the focus.
 
bool isInternal () const
 Ckecks/changes whether the gadget is an internal (implementation-specific) object. More...
 
template<class Subclass >
Subclass * to ()
 Class conversions.
 
void ignoreSmartPointers ()
 Checks/sets whether this object can be auto-deleted by smart pointers. More...
 
enum  Place : int8_t
 Placement of the gadget in a GBox parent. More...
 

Detailed Description

Base class for labels, state and stateless buttons, menu items, etc.

A GItem auto-adapts to its parent, meaning that its look & feel depends on its parent. For instance it will look and behave as a menu item in a GMenu, as a GButton in a GButtonBox, as a GRadioItem in a GRadioBox, as a GListItem in a GListBox/GOptionBox/GComboBox.

Subclasses of GItem (e.g. GCheckItem, GRadioItem) implement a more specific look & feel. Some other subclasses implement gadgets that can have a numerical value (e.g. GValueitem, GChartItem, GSlider, GScrollBar) or can handle text editing (GTextItem, GTextField, GTextArea)

A GItem is very similar to a Gadget. The main difference is that it can display rich text (including images) and an icon. Text is not editable (see GItextItem for that purpose).

Text

the item

see Gadget::check(), Gadget::isCkecked(), etc.

Props

Props can be bound together:

auto& value = Float();
auto& lbl = Label << value;
auto& tf = TextField << value;
auto& sl = Slider << value;

The label and the textfield will then display a float number and the user will be forced to enter a number in the textfield.

Props can be bound together, see GVarProp. Active expressions allow binding props and performing calculations, see GExpr.

Opening a Menu or a Window
A Menu, a Window, a Dialog and subclasses can be added to an item. The menu is automatically opened when the item is pressed, and the window/dialog box when the item is clicked. Other gadgets cannot be added to an item.

See Also
Gadget, GExpr, GText

Member Enumeration Documentation

enum guit::Gadget::Place : int8_t
stronginherited

Placement of the gadget in a GBox parent.

When adedd to a GBox, the placement of the gadget depends on its place() method:

  • Place::Content means it is added to the content area of the box
  • other values means it is added to the border of the box (e.g. Place::Top for a title or a menubar)

Constructor & Destructor Documentation

guit::GItem::~GItem ( )

Creates an item, adds a prop, a menu, a window/dialog or a function to it, returns the item.

  • When a menu is added to the item, pressing the item opens the menu
  • When a window/dialog is added to the item, clicking on the item opens the window/dialog

Member Function Documentation

GString guit::GItem::text ( ) const
overridevirtual

Returns the text of the item.

Note
The text can be changed as follows:
auto& btn = Button("toto");
btn << "DoIt"; // changes the text

Reimplemented from guit::Gadget.

Reimplemented in guit::GTextItem.

bool guit::GItem::hasValue ( ) const
inlineoverridevirtual

Returns true if the gadget has a value.

Gadgets such as TextField, Slider, ChartItem, ChoiceBox, OptionBox, ComboBox have a value. This methods then returns true, and false otherwise.

See Also
stringValue() and setValue().

Reimplemented from guit::Gadget.

Reimplemented in guit::GTextItem, and guit::GValueItem.

GProp * guit::GItem::valueProp ( )
overridevirtual

Returns the prop that stores the gadget's value.

If the gadget has a value (see hasValue()) this method returns the prop storing the value. Otherwise it returns null.

Reimplemented from guit::Gadget.

Reimplemented in guit::GTextItem, and guit::GValueItem.

void guit::GItem::add ( GMenu child)
overridevirtual

Adds a menu, a window, a dialog box to the gadget.

operator<<() provides a more convenient API: a << b << c adds b and c to a. The appropriate adding function is automatically called.

If the gadget is a GItem or GButton, the GMenu, GWindow, GDialog given as an argument will be automatically opened when pressing the mouse on the item (GMenu) or clicking it (GWindow, GDialog).

Note
Only one GMenu can be added to a gadget. If another menu is added, it will replace the previous one.

Reimplemented from guit::Gadget.

void guit::Gadget::blink ( GString const &  message = "",
GTime  duration = 350 
)
inherited

Blinks the gadget, optionally showing a message.

Shows a message if message is not empty. The duration is in ms.

GProp * guit::Gadget::findProp ( GPropType t) const
virtualinherited

Searches if the gadget contains a prop of this class or a derived class.

The first version returns the prop as a GProp* if it is found, and null otherwise. In addition, the second version casts the returned prop to the desired type.

Note
The returned prop may be immutable (ie if GVarProp::isMutable() return false). For instance, predefined variables such as GColor::red or GFont::bold are immutable.
Props in inline styles (e.g. Button( "{color:red; font:bold} DoIt" ) belong to the gadget, they are added to it in the same way as if using operator<<().
GProp & guit::Gadget::prop ( GPropType t,
bool  in_css = false 
)
virtualinherited

Searches a prop of this class in the gadget and the CSS, and creates it if needed.

This method always returns a mutable prop of the desired type:

  • first it searches if the gadget contains this prop by calling find()
  • then, if 'in_css' is true, it also searches in CSSs (not the default because somewhat CPU intensive)
  • finally, if no corresponding prop is found, it created it and adds it to the gadget
Note
If the found prop is immutable (see find()), it is duplicated and the copy is added to the gadget then returned
See Also
findProp() and cssProps()
GPropList const& guit::Gadget::props ( ) const
inlineinherited

Returns all props.

Note
Does not return the props relative to the gadget that are defined in CSS styles (see cssProps() for this purpose), except those that are defined in inline styles, eg in: Button( "{color:red; font:bold} DoIt" )
void guit::Gadget::cssProps ( class GPropMap &  props)
inherited

Returns the props relative to this gadget in CSSs.

Note
Does not return the props that belong to the gadget (see props() for this purpose), except those that are defined in inline styles, eg in: Button( "{color:red; font:bold} DoIt" )
void guit::Gadget::add ( GString const &  str)
virtualinherited

Adds/replaces props.

operator<<() provides a more convenient API: a << b << c adds b and c to a. The appropriate adding function is automatically called.

Note
These methods do not just adds props, they also replaces them if the added prop has the same role (GProp::role()) as an existing gadget's prop. For instance, if the gadget has a GColor prop, adding a new GColor to it will replace the previous one.
Replacing a prop will delete the old prop if it does not belong to another gadget and is not gptr-pointed elsewhere (see gptr<> smart pointer)
When a GPropList (list of props) is given as an argument, each of it elements is added in sequence.
See Also
Gadget, GProp, GCond (conditional props).

Reimplemented in guit::GBox, and guit::GTextItem.

void guit::Gadget::add ( class GStateTransition trans)
inherited

Adds a callback function or a state transitions.

operator<<() provides a more convenient API: a << b << c adds b and c to a. The appropriate adding function is automatically called.

Note
The default on::action triggers of the gadget is used. For instance, the callback will be called if a GButton is clicked, if a GCheckItem is checked or unchecked, if a GRadioItem belonging to a box that performs exclusive selection is checked.
bool guit::Gadget::remove ( GProp prop)
inherited

Removes a prop (including conditional props and callbacks).

Returns true if the prop was actually removed (i.e. if it was belonging to the gadget).

Note
Removing a prop will delete it if it does not belong to another gadget and is not gptr-pointed elsewhere (see gptr<> smart pointer)
See Also
Gadget, GProp, GCond (conditional props).
void guit::Gadget::removeProps ( )
virtualinherited

Removes all props (including conditional props and callbacks).

Note
Beware that the removed props will be auto-deleted if not gptr-referenced elsewhere (see Gadget).
void guit::Gadget::cleanup ( )
virtualinherited

Removes all props and children.

This method also removes children if the gadget has children (i.e. if the class derives from GBox).

Reimplemented in guit::GBox.

bool guit::Gadget::isRichText ( ) const
inlineinherited

Checks/changes whether HTML-like tags are interpreted when displaying text.

HTML-like tags such as <b>, <i>, etc. will be interpreted when rendering text. This option is true by default, except for gadgets that edit text (e.g. TextField and TextArea).

Gadget & guit::Gadget::catchEvents ( bool  val = true)
inherited

Checks/changes whether the gadget catches events.

The gadget will receive events that should have been received by its descendants. The received GEvent will be set so that:

  • GEvent::gadget() will return the gadget
  • GEvent::item() will return the descendant that should have received the event.
Gadget & guit::Gadget::ignoreEvents ( bool  val = true)
inherited

Checks/changes whether the gadget ignores events.

The gadget and its descendants will then ignore all events.

Gadget & guit::Gadget::check ( bool  state = true)
virtualinherited

Checks/changes whether the gadget is checked (ie selected).

check() has not effect if isCheckable() is false; see setCheckable().

Gadget & guit::Gadget::setCheckable ( bool  s = true)
inherited

Checks/changes whether the gadget is checkable (ie can be selected).

setCheckable(true) makes any gadget checkable. Some gadgets (e.g. GCheckItem, GRadioItem) are checkable by default, but most others are not.

Gadget & guit::Gadget::enable ( bool  state = true)
virtualinherited

Checks/change whether the gadget is enabled.

  • enable() sets isSelfEnabled() to true or false
  • isTrulyEnabled() is true if the gadget and all its ancestors ar isSelfEnabled().
Gadget & guit::Gadget::show ( bool  state = true)
virtualinherited

Checks or change whether the gadget is shown.

isShown() does mean that the gadget is shown, but that it will be shown if all its ancesters are shown

Reimplemented in guit::GInfoDialog, guit::GWindow, guit::GDialog, guit::GFileDialog, guit::GInspector, and guit::GMenu.

void guit::Gadget::update ( )
virtualinherited

Notifies the toolkit that this gadget needs to be repainted.

The gadget is not repainted immediately, but after executing callback functions. The doPaint() method is then called.

Reimplemented in guit::GWindow.

void guit::Gadget::updateLayout ( Update  mode = Update::IfNeeded)
virtualinherited

Notifies the toolkit that the layout needs to be updated.

By default (UpdateIfNeeded mode) the layout is not updated immediately, but after executing callback functions, and before repainting the gadget by calling doPaint().

Possible arguments are:

  • IfNeeded (default): the layout is updated if the toolkit thinks this is needed
  • Needed: the layout is always updated
  • Now: the layout is updated immediately. Sometimes needed but CPU inefficient

Reimplemented in guit::GWindow.

GBox* guit::Gadget::getParent ( ) const
inlineinherited

Returns the parent gadget.

  • getParent() returns the gadget's parent if it derives from GBox, and null if no parent or not a box.
  • getPseudoParent() returns the gadget's parent whatever its type. Displayed gadgets have a non-null parent that derives from GBox, except toplevel gadgets (GMenu, GWindow, GDialog, etc.) which parent can be null or can be any gadget.
void guit::Gadget::clearValues ( )
virtualinherited

Clears the values of the gadget and its descendants.

Clearing means setting to the default value (0 for numbers, the empty string for strings, etc.)

Reimplemented in guit::GBox.

bool guit::Gadget::isColumn ( ) const
inlineinherited

Returns the direction of the gadget.

The direction can be changed by adding a GFlow prop to the gadget.

void guit::Gadget::move ( GPoint const &  p)
virtualinherited

Changes the position (in pixels) of the gadget.

This function is a shortcut that changes the value of the gadget's GPos prop (and adds a GPos to the gadget if it doesn't already have one). Importantly, the gadget won't be auto laid-out any longer if this function is called (or a GPos is directly added to the gadget).

Gadgets that are automatically laid out don't need a GPos. Gadgets that are positioned manually need a GPos that specifies their position and (optionally) their zlayer().

The position is relative to the parent gadget, or to the screen if the gadget is a GWindow. The zlayer() of auto-laid out gadgets is 0, the zlayer() of other gadgets is > 0 (see GPos).

A GPos prop can be directly added to a gadget as follows:

auto& pos = Pos();
auto& win = Window("My Window") << pos;
pos.set(100,100);
...
pos.set(200,200);

Adding a GPos rather than calling move() allows:

  • controlling the zlayer of the gadget
  • better performance if the gadget is frequently moved
  • sharing the GPos with other gadgets (which are then synced)

Reimplemented in guit::GLineShape.

void guit::Gadget::resize ( float  w,
float  h 
)
virtualinherited

Changes the preferred size (in pixels) of the gadget.

This function is a shortcut that changes the value of the gadgte's GSIze prop (and adds a GSize to the gadget if it doesn't already have one). The actual size of the gadget also depends on its GFlex prop and the GAlign prop of its parent.

The GSize prop can also be added directly by using the << operator (see move() for an example). Adding a GSize rather than calling resize() allows:

  • specifying the unit of w and h, or if they are computed automatically
  • better performance if the gadget is frequently resized
  • sharing the GSize with other gadgets (which are then synced)
void guit::Gadget::reshapeInteractively ( )
virtualinherited

Allows reshaping a gadget interactivelly.

Adds the appropriate GPos and GSize props to the gadget so that it will display handles allowing to reshape it when it is checked. "Reshaping" both means changing the position and the size (e.g. when dragging left-side handles). The second version of this function allows reshaping a gadget just after instantiating it. The GMouseEvent argument typically corresponds to a mouse down event in a gadget that serves as a canvas for drawing other gadgets (or geometrical shapes, see GShape).

Reimplemented in guit::GLineShape.

GPoint guit::Gadget::pos ( ) const
virtualinherited

Returns the position of the gadget in its parent.

Return the position on the screen if the gadget is a GWindow,

Reimplemented in guit::GWindow, and guit::GMenu.

int guit::Gadget::zlayer ( ) const
inlineinherited

Returns the z-layer of the gadget.

The z-layer is 0 if the gadget is auto laid-out and > 0 otherwise (see GPos prop).

GPoint guit::Gadget::wpos ( ) const
inlineinherited

Returns the position of the gadget in its containing window.

Return 0 if the gadget is a GWindow.

float guit::Gadget::angleStart ( ) const
inherited

Returns/changes the starting angle and the extent when painting gadgets as pie slices.

GItem gadgets are drawn as pie slices when contained in a box with a GFlow::pie prop. This is typically used in pie charts (see GChart) and pie menus (see GPieMenu).

bool guit::Gadget::isInternal ( ) const
inlineinherited

Ckecks/changes whether the gadget is an internal (implementation-specific) object.

internal objects are ignored when inspecting, reading or writting gadgets.

void guit::Gadget::doPaint ( GRenderGraphics &  gr,
GRender *  parent_render 
)
virtualinherited

Paints the gadget.

Repaints the gadget then fires on::paint callbacks. For instance, mycallback can be called to draw on the gadget as follows;

mygadget << on::paint / [this](GEvent& e){mycallback(e);};
See Also
Graphics.

Reimplemented in guit::GBox, guit::GFreehandShape, guit::GLineShape, guit::GArcShape, guit::GOvalShape, guit::GValueItem, and guit::GRectShape.

Gadget * guit::Gadget::doPick ( GPoint const &  wpos,
class GPickMode &  pm 
)
virtualinherited

Returns the gadget the gadget that contains this point.

The point is in window coordinates.

See Also
GBox::childAtPos() and GBox::childAtWPos()

Reimplemented in guit::GBox, guit::GLineShape, guit::GArcShape, and guit::GOvalShape.

void guit::GObject::error ( GString const &  funname,
GString const &  message 
) const
virtualinherited

Prints an error message.

See Also
GApp::onError() to change error management.
void guit::GObject::ignoreSmartPointers ( )
inlineinherited

Checks/sets whether this object can be auto-deleted by smart pointers.

ignoreSmartPointers() has a permanent effect, contrary to forgetSmartPointers(). Objects not created by calling new are never auto-deleted by smart pointers.

void guit::GObject::forgetSmartPointers ( )
inlineinherited

Forgets all smart pointers pointing this object.

The smart pointers that are currently pointing to the object won't auto-delete it. forgetSmartPointers() has a temporary effect, contrary to ignoreSmartPointers().


The documentation for this class was generated from the following files: