---
name: "Prima::IntUtils"
section: "3"
platform: "linux"
package: "libprima-perl"
version: "1.28-1.3+b3"
release: "Debian 8 (Jessie)"
platforms: ["linux"]
url: "https://new.carta.tech/Prima::IntUtils"
---

# Prima::IntUtils(3)

internal functions

## NAME

Prima::IntUtils - internal functions

## DESCRIPTION

The module provides packages, containing common functionality for some standard classes. The packages are designed as a code containers, not as widget classes, and are to be used as  secondary ascendants in the widget inheritance declaration.

## Prima::MouseScroller

Implements routines for emulation of auto repeating mouse events. A code inside `"MouseMove"` callback can be implemented by the following scheme:

```
        if ( mouse_pointer_inside_the_scrollable_area) {
                $self-> scroll_timer_stop;
        } else {
                $self-> scroll_timer_start unless $self-> scroll_timer_active;
                return unless $self-> scroll_timer_semaphore;
                $self-> scroll_timer_semaphore( 0);
        }
```

The class uses a semaphore `"{mouseTransaction}"`, which should be set to non-zero if a widget is in mouse capture state, and set  to zero or `"undef"` otherwise.

The class starts an internal timer, which sets a semaphore and calls `"MouseMove"` notification when triggered. The timer is assigned the timeouts, returned by `"Prima::Application::get_scroll_rate"` ( see "get\_scroll\_rate" in Prima::Application ).

### Methods

- scroll\_timer\_active

  Returns a boolean value indicating if the internal timer is started.

- scroll\_timer\_semaphore \[ VALUE \]

  A semaphore, set to 1 when the internal timer was triggered. It is advisable to check the semaphore state to discern a timer-generated event from the real mouse movement. If VALUE is specified, it is assigned to the semaphore.

- scroll\_timer\_start

  Starts the internal timer.

- scroll\_timer\_stop

  Stops the internal timer.

## Prima::IntIndents

Provides the common functionality for the widgets that delegate part of their surface to the border elements. A list box can be of an example, where its scroll bars and 3-d borders are such elements.

### Properties

- indents ARRAY

  Contains four integers, specifying the breadth of decoration elements for each side. The first integer is width of the left element, the second - height of the lower element, the third - width of the right element, the fourth - height of the upper element.

  The property can accept and return the array either as a four scalars, or as an anonymous array of four scalars.

### Methods

- get\_active\_area \[ TYPE = 0, WIDTH, HEIGHT \]

  Calculates and returns the extension of the area without the border elements, or the active area. The extension are related to the current size of a widget, however, can be overridden by specifying WIDTH and HEIGHT. TYPE is an integer, indicating the type of calculation:

  - TYPE = 0

    Returns four integers, defining the area in the inclusive-exclusive coordinates.

  - TYPE = 1

    Returns four integers, defining the area in the inclusive-inclusive coordinates.

  - TYPE = 2

    Returns two integers, the size of the area.

## Prima::GroupScroller

The class is used for widgets that contain optional scroll bars, and provides means for their maintenance. The class is the descendant of Prima::IntIndents, and adjusts the indents property when scrollbars are shown or hidden, or borderWidth is changed.

The class does not provide range selection for the scrollbars; the descentant classes must implement that.

The descendant classes must follow the guidelines:

- •

  A class must provide `"borderWidth"`, `"hScroll"`, and `"vScroll"` property keys in *profile\_default()* . A class may provide `"autoHScroll"` and `"autoVScroll"` property keys in *profile\_default()* .

- •

  A class' *init()* method must set `"{borderWidth}"`, `"{hScroll}"`, and `"{vScroll}"`  variables to 0 before the initialization, call `"setup_indents"` method, and then assign the properties from the object profile.

  If a class provides `"autoHScroll"` and `"autoVScroll"` properties, these must be set to  0 before the initialization.

- •

  If a class needs to overload one of `"borderWidth"`, `"hScroll"`, `"vScroll"`, `"autoHScroll"`, and `"autoVScroll"` properties, it is mandatory to call the inherited properties.

- •

  A class must implement the scroll bar notification callbacks: `"HScroll_Change"` and `"VScroll_Change"`.

- •

  A class must not use the reserved variable names, which are:

  ```
          {borderWidth}  - internal borderWidth storage
          {hScroll}      - internal hScroll value storage
          {vScroll}      - internal vScroll value storage
          {hScrollBar}   - pointer to the horizontal scroll bar
          {vScrollBar}   - pointer to the vertical scroll bar
          {bone}         - rectangular widget between the scrollbars
          {autoHScroll}  - internal autoHScroll value storage
          {autoVScroll}  - internal autoVScroll value storage
  ```

  The reserved method names:

  ```
          set_h_scroll
          set_v_scroll
          insert_bone
          setup_indents
          reset_indents
          borderWidth
          autoHScroll
          autoVScroll
          hScroll
          vScroll
  ```

  The reserved widget names:

  ```
          HScroll
          VScroll
          Bone
  ```

### Properties

- autoHScroll BOOLEAN

  Selects if the horizontal scrollbar is to be shown and hidden dynamically, depending on the widget layout.

- autoVScroll BOOLEAN

  Selects if the vertical scrollbar is to be shown and hidden dynamically, depending on the widget layout.

- borderWidth INTEGER

  Width of 3d-shade border around the widget.

  Recommended default value: 2

- hScroll BOOLEAN

  Selects if the horizontal scrollbar is visible. If it is, `"{hScrollBar}"` points to it.

- vScroll BOOLEAN

  Selects if the vertical scrollbar is visible. If it is, `"{vScrollBar}"` points to it.

### Properties

- setup\_indents

  The method is never called directly; it should be called whenever widget layout is changed so that indents are affected. The method is a request to recalculate indents, depending on the widget layout.

  The method is not reentrant; to receive this callback and update the widget layout, that in turn can result in more `"setup_indents"` calls, overload `"reset_indents"` .

- reset\_indents

  Called after `"setup_indents"` is called and internal widget layout is updated, to give a chance to follow-up the layout changes.

## AUTHOR

Dmitry Karasik, \<dmitry@karasik.eu.org\>.

## SEE ALSO

Prima, Prima::Widget, Prima::InputLine, Prima::Lists, Prima::Edit, Prima::Outlines, Prima::ScrollBar.
