Browse Source

Mixer: Change the appearance/layout of slider modes in parameter editor. Also, add scroll widget.

tags/non-daw-v1.2.0
Jonathan Moore Liles 11 years ago
parent
commit
a05384a8c3
6 changed files with 159 additions and 100 deletions
  1. +59
    -37
      FL/Fl_Flowpack.H
  2. +8
    -1
      FL/Fl_Labelpad_Group.H
  3. +5
    -6
      mixer/src/Mixer.C
  4. +79
    -54
      mixer/src/Module_Parameter_Editor.C
  5. +3
    -2
      mixer/src/Module_Parameter_Editor.H
  6. +5
    -0
      timeline/src/Transport.C

+ 59
- 37
FL/Fl_Flowpack.H View File

@@ -26,9 +26,10 @@ class Fl_Flowpack : public Fl_Group
{ {
int _hspacing; int _hspacing;
int _vspacing; int _vspacing;
int _max_width;
bool _flow; bool _flow;
bool _flowdown; bool _flowdown;
int _initial_height;
int _initial_width;


public: public:


@@ -36,7 +37,9 @@ public:
: Fl_Group( X, Y, W, H, L ) : Fl_Group( X, Y, W, H, L )
{ {
resizable( 0 ); resizable( 0 );
_max_width = _hspacing = _vspacing = 0;
_hspacing = _vspacing = 0;
_initial_width = W;
_initial_height = H;
_flow = true; _flow = true;
_flowdown = false; _flowdown = false;
} }
@@ -45,7 +48,6 @@ public:
{ {
} }


int max_width ( void ) const { return _max_width; }


void vspacing ( int v ) { _vspacing = v; } void vspacing ( int v ) { _vspacing = v; }
int vspacing ( void ) const { return _vspacing; }; int vspacing ( void ) const { return _vspacing; };
@@ -76,50 +78,52 @@ public:
void void
resize ( int X, int Y, int W, int H ) resize ( int X, int Y, int W, int H )
{ {
int NW = W;
int NH = H;
_initial_width = W;
_initial_height = H;


layout( NW, NH );
layout();


Fl_Group::resize( X, Y, NW, NH );
Fl_Group::resize( X, Y, w(), h() );
} }


void void
draw ( void ) draw ( void )
{ {
dolayout();
layout();
Fl_Group::draw(); Fl_Group::draw();
} }


void dolayout ( void ) void dolayout ( void )
{ {
int H = h();
int W = w();

layout( W, H );

if ( H != h() || W != w() )
size( W, H );
layout();
} }


void void
layout ( int &W, int &H )
layout ( void )
{ {
resizable( 0 ); resizable( 0 );


int W;
int H;
int X = 0; int X = 0;
int Y = 0; int Y = 0;
H = 0;
/* int H = 0; */

_max_width = 0;

int LW = 0; int LW = 0;
int LH = 0; int LH = 0;
int LX = 0; int LX = 0;
int LY = 0; int LY = 0;

int RH = 0; int RH = 0;
int RY = 0;

if ( _flow )
{
H = 0;
W = 0;
}
else
{
H = _initial_height;
W = _initial_width;
}


for ( int i = 0; i < children(); ++i ) for ( int i = 0; i < children(); ++i )
{ {
@@ -130,16 +134,25 @@ public:
if ( _flow ) if ( _flow )
{ {
if ( _flowdown && Y + o->h() < RH )
if ( _flowdown )
{ {
/* if it'll fit in this column, put it below the previous widget */
X = LX;
if ( (Y - RY) + o->h() < RH )
{
/* if it'll fit in this column, put it below the previous widget */
X = LX;
}
else
Y = 0;
} }
else if ( X + o->w() >= W )
else if ( X + o->w() >= _initial_width )
{ {
/* maybe wrap to the next row */ /* maybe wrap to the next row */
H += RH + _vspacing; H += RH + _vspacing;
RY = Y;
RH = 0; RH = 0;
if ( X > W )
W = X;

X = 0; X = 0;
} }
else else
@@ -155,15 +168,9 @@ public:
LW = o->w(); LW = o->w();
LH = o->h(); LH = o->h();


/* avoid bothering the control with lots of resize() calls */

LX = X; LX = X;
LY = Y; LY = Y;


if ( ! ( o->x() == x() + LX &&
o->y() == y() + LY ) )
o->position( x() + LX, y() + LY );

if ( _flow ) if ( _flow )
{ {
if ( _flowdown ) if ( _flowdown )
@@ -178,20 +185,35 @@ public:
if ( type() == Fl_Pack::HORIZONTAL ) if ( type() == Fl_Pack::HORIZONTAL )
{ {
X += LW + _hspacing; X += LW + _hspacing;
LH = _initial_height;
W = X;
} }
else else
{ {
Y += LH + _vspacing; Y += LH + _vspacing;
LW = _initial_width;
H = Y;
} }
} }


if ( X > _max_width )
_max_width = X;

if ( ! ( o->x() == x() + LX &&
o->y() == y() + LY &&
o->w() == LW &&
o->h() == LH ) )
o->resize( x() + LX,
y() + LY,
LW,
LH);
} }


H += RH;
if ( _flow )
{
H += RH;
if ( X > W )
W = X;
}


if ( ! _flow )
W = X;
Fl_Group::resize( x(), y(), W, H );
} }
}; };

+ 8
- 1
FL/Fl_Labelpad_Group.H View File

@@ -49,13 +49,20 @@ public:
measure_label( o, W, H ); measure_label( o, W, H );


// set size to contain widget // set size to contain widget
size( W > o->w() ? W : o->w(), o->h() + H );
if ( o->align() & ( FL_ALIGN_TOP | FL_ALIGN_BOTTOM ) )
size( W > o->w() ? W : o->w(), o->h() + H );
if ( o->align() & ( FL_ALIGN_LEFT | FL_ALIGN_RIGHT ) )
size( o->w() + W, H > o->h() ? H : o->h() );


// center widget in group // center widget in group
if ( o->align() & FL_ALIGN_TOP ) if ( o->align() & FL_ALIGN_TOP )
o->position( x() + w() / 2 - (o->w() / 2 ), y() + H ); o->position( x() + w() / 2 - (o->w() / 2 ), y() + H );
else if ( o->align() & FL_ALIGN_BOTTOM ) else if ( o->align() & FL_ALIGN_BOTTOM )
o->position( x() + w() / 2 - (o->w() / 2 ), y() ); o->position( x() + w() / 2 - (o->w() / 2 ), y() );
else if ( o->align() & FL_ALIGN_RIGHT )
o->position( x(), y() );
else if ( o->align() & FL_ALIGN_LEFT )
o->position( x() + W, y() );
else else
{ {
/* TODO: other alignments */ /* TODO: other alignments */


+ 5
- 6
mixer/src/Mixer.C View File

@@ -582,7 +582,7 @@ Mixer::Mixer ( int X, int Y, int W, int H, const char *L ) :
} }
end(); end();


resize( X,Y,W,H );
resize( X,Y,W,H );


update_frequency( 15 ); update_frequency( 15 );


@@ -737,10 +737,10 @@ void Mixer::resize ( int X, int Y, int W, int H )
{ {
Fl_Group::resize( X, Y, W, H ); Fl_Group::resize( X, Y, W, H );


mixer_strips->resize( X, Y + 24, W, H - (18*2) - 24 );

scroll->resize( X, Y + 24, W, H - 24 - 18 ); scroll->resize( X, Y + 24, W, H - 24 - 18 );


mixer_strips->resize( X, Y + 24, W, H - (18*2) - 24 );

rows( _rows ); rows( _rows );
} }


@@ -867,8 +867,6 @@ Mixer::rows ( int ideal_rows )
{ {
sh = (scroll->h() - 18); sh = (scroll->h() - 18);
mixer_strips->flow( false ); mixer_strips->flow( false );

actual_rows = 1;
} }


int tw = 0; int tw = 0;
@@ -885,12 +883,13 @@ Mixer::rows ( int ideal_rows )
if ( actual_rows > 1 ) if ( actual_rows > 1 )
mixer_strips->size( scroll->w() - 18, mixer_strips->h() ); mixer_strips->size( scroll->w() - 18, mixer_strips->h() );
else else
mixer_strips->size( tw, mixer_strips->h() );
mixer_strips->size( tw, sh );


_rows = ideal_rows; _rows = ideal_rows;
if ( _strip_height != sh ); if ( _strip_height != sh );
{ {
mixer_strips->redraw();
scroll->redraw(); scroll->redraw();
_strip_height = sh; _strip_height = sh;
} }


+ 79
- 54
mixer/src/Module_Parameter_Editor.C View File

@@ -33,7 +33,7 @@
#include "FL/Fl_Labelpad_Group.H" #include "FL/Fl_Labelpad_Group.H"
#include "FL/Fl_Value_SliderX.H" #include "FL/Fl_Value_SliderX.H"
#include "FL/Fl_DialX.H" #include "FL/Fl_DialX.H"
#include <FL/Fl_Scroll.H>
#include "Module.H" #include "Module.H"
#include "Module_Parameter_Editor.H" #include "Module_Parameter_Editor.H"
#include "Controller_Module.H" #include "Controller_Module.H"
@@ -46,7 +46,7 @@




Module_Parameter_Editor::Module_Parameter_Editor ( Module *module ) : Fl_Double_Window( 800, 600 )
Module_Parameter_Editor::Module_Parameter_Editor ( Module *module ) : Fl_Double_Window( 900,900 )
{ {
_module = module; _module = module;
_resized = false; _resized = false;
@@ -65,52 +65,37 @@ Module_Parameter_Editor::Module_Parameter_Editor ( Module *module ) : Fl_Double_


copy_label( title ); copy_label( title );


fl_font( FL_HELVETICA, 14 );
// fl_font( FL_HELVETICA, 14 );


_min_width = 30 + fl_width( module->label() ); _min_width = 30 + fl_width( module->label() );

{ Fl_Pack *o = main_pack = new Fl_Pack( 0, 0, w(), h() - 10 );
o->type( FL_VERTICAL );
{ Fl_Group *o = new Fl_Group( 0, 0, w(), 25 );
o->label( module->label() ); o->label( module->label() );
o->labelfont( 2 ); o->labelfont( 2 );
o->labeltype( FL_SHADOW_LABEL ); o->labeltype( FL_SHADOW_LABEL );
o->labelsize( 14 ); o->labelsize( 14 );
o->align( FL_ALIGN_TOP | FL_ALIGN_RIGHT | FL_ALIGN_INSIDE ); o->align( FL_ALIGN_TOP | FL_ALIGN_RIGHT | FL_ALIGN_INSIDE );



{ Fl_Pack *o = new Fl_Pack( 0, 0, 50, 25 );
o->type( FL_HORIZONTAL );
o->spacing( 20 );

{ Fl_Menu_Button *o = mode_choice = new Fl_Menu_Button( 0, 0, 25, 25 );
o->add( "Knobs" );
o->add( "Horizontal Sliders" );
o->add( "Vertical Sliders" );
o->label( NULL );
o->value( 0 );
o->when( FL_WHEN_CHANGED );
o->callback( cb_mode_handle, this );
}

/* { Fl_Box *o = new Fl_Box( 0, 0, 300, 25 ); */
/* o->box( FL_ROUNDED_BOX ); */
/* o->color( FL_YELLOW ); */
/* o->label( strdup( lab ) ); */
/* o->labeltype( FL_SHADOW_LABEL ); */
/* o->labelsize( 18 ); */
/* o->align( (Fl_Align)(FL_ALIGN_TOP | FL_ALIGN_RIGHT | FL_ALIGN_INSIDE ) ); */
/* // Fl_Group::current()->resizable( o ); */
/* } */
o->end();
{ Fl_Menu_Button *o = mode_choice = new Fl_Menu_Button( 0, 0, 25, 25 );
o->add( "Knobs" );
o->add( "Horizontal Sliders" );
o->add( "Vertical Sliders" );
o->label( NULL );
o->value( 0 );
o->when( FL_WHEN_CHANGED );
o->callback( cb_mode_handle, this );
} }
{ Fl_Group *o = new Fl_Group( 0, 0, w(), h() );
{ Fl_Flowpack *o = control_pack = new Fl_Flowpack( 50, 0, w() - 100, h() );
/* o->box( FL_ROUNDED_BOX ); */
/* o->color( FL_GRAY ); */
o->resizable(0);
o->end();
}

{ Fl_Scroll *o = control_scroll = new Fl_Scroll( 0, 40, w(), h() - 40 );
{ Fl_Group *o = new Fl_Group( 0, 40, w(), h() - 40 );
{ Fl_Flowpack *o = control_pack = new Fl_Flowpack( 50, 40, w() - 100, h() - 40 );
o->type( FL_HORIZONTAL ); o->type( FL_HORIZONTAL );
o->flow( true ); o->flow( true );
o->vspacing( 10 );
o->hspacing( 10 );
o->vspacing( 5 );
o->hspacing( 5 );
o->end(); o->end();
} }
o->resizable( 0 ); o->resizable( 0 );
@@ -118,11 +103,10 @@ Module_Parameter_Editor::Module_Parameter_Editor ( Module *module ) : Fl_Double_
} }
o->end(); o->end();
} }
resizable(control_scroll);


end(); end();


// draw();

make_controls(); make_controls();
} }


@@ -154,7 +138,27 @@ Module_Parameter_Editor::make_controls ( void )
Fl_Color bc = FL_BACKGROUND2_COLOR; Fl_Color bc = FL_BACKGROUND2_COLOR;


controls_by_port.resize( module->control_input.size() ); controls_by_port.resize( module->control_input.size() );

if ( mode_choice->value() == 1 )
{
control_pack->flow(false);
control_pack->type( FL_VERTICAL );
control_pack->size( 450, 24 );
}
else if ( mode_choice->value() == 2 )
{
control_pack->flow(false);
control_pack->type( FL_HORIZONTAL );
control_pack->size( 24, 350 );
}
else if ( mode_choice->value() == 0 )
{
control_pack->flow(true);
control_pack->type( FL_HORIZONTAL );
control_pack->size( 700, 50 );
}
for ( unsigned int i = 0; i < module->control_input.size(); ++i ) for ( unsigned int i = 0; i < module->control_input.size(); ++i )
{ {
Fl_Widget *w; Fl_Widget *w;
@@ -165,16 +169,16 @@ Module_Parameter_Editor::make_controls ( void )
/* continue; */ /* continue; */


if ( !strcasecmp( "Azimuth", p->name() ) && if ( !strcasecmp( "Azimuth", p->name() ) &&
180.0f == p->hints.maximum &&
-180.0f == p->hints.minimum )
180.0f == p->hints.maximum &&
-180.0f == p->hints.minimum )
{ {
azimuth_port_number = i; azimuth_port_number = i;
azimuth_value = p->control_value(); azimuth_value = p->control_value();
continue; continue;
} }
else if ( !strcasecmp( "Elevation", p->name() ) && else if ( !strcasecmp( "Elevation", p->name() ) &&
90.0f == p->hints.maximum &&
-90.0f == p->hints.minimum )
90.0f == p->hints.maximum &&
-90.0f == p->hints.minimum )
{ {
elevation_port_number = i; elevation_port_number = i;
elevation_value = p->control_value(); elevation_value = p->control_value();
@@ -194,15 +198,17 @@ Module_Parameter_Editor::make_controls ( void )
o->selection_color( fc ); o->selection_color( fc );
o->type( FL_TOGGLE_BUTTON ); o->type( FL_TOGGLE_BUTTON );
o->value( p->control_value() ); o->value( p->control_value() );
o->align(FL_ALIGN_TOP);
} }
else if ( p->hints.type == Module::Port::Hints::INTEGER ) else if ( p->hints.type == Module::Port::Hints::INTEGER )
{ {


Fl_Counter *o = new Fl_Counter(0, 0, 58, 24, p->name() ); Fl_Counter *o = new Fl_Counter(0, 0, 58, 24, p->name() );
w = o; w = o;
o->type(1); o->type(1);
o->step(1); o->step(1);
o->align(FL_ALIGN_TOP);


if ( p->hints.ranged ) if ( p->hints.ranged )
{ {
@@ -230,6 +236,7 @@ Module_Parameter_Editor::make_controls ( void )
o->color( bc ); o->color( bc );
o->selection_color( fc ); o->selection_color( fc );
o->value( p->control_value() ); o->value( p->control_value() );
o->align(FL_ALIGN_TOP);


o->precision( 2 ); o->precision( 2 );
/* a couple of plugins have ridiculously small units */ /* a couple of plugins have ridiculously small units */
@@ -247,7 +254,8 @@ Module_Parameter_Editor::make_controls ( void )
{ {
o->type( FL_HORIZONTAL ); o->type( FL_HORIZONTAL );


o->size( 120, 24 );
o->align( FL_ALIGN_RIGHT );
o->size( 300, 24 );
if ( p->hints.ranged ) if ( p->hints.ranged )
{ {
o->minimum( p->hints.minimum ); o->minimum( p->hints.minimum );
@@ -257,8 +265,9 @@ Module_Parameter_Editor::make_controls ( void )
else else
{ {
o->type( FL_VERTICAL ); o->type( FL_VERTICAL );
o->align(FL_ALIGN_TOP);


o->size( 24, 120 );
o->size( 24, 300 );
/* have to reverse the meaning of these to get the /* have to reverse the meaning of these to get the
* orientation of the slider right */ * orientation of the slider right */
o->maximum( p->hints.minimum ); o->maximum( p->hints.minimum );
@@ -279,6 +288,8 @@ Module_Parameter_Editor::make_controls ( void )
} }


} }
// w->align(FL_ALIGN_TOP);
w->labelsize( 10 );


controls_by_port[i] = w; controls_by_port[i] = w;


@@ -286,8 +297,6 @@ Module_Parameter_Editor::make_controls ( void )


Fl_Button *bound; Fl_Button *bound;


w->align(FL_ALIGN_TOP);
w->labelsize( 10 );


_callback_data.push_back( callback_data( this, i ) ); _callback_data.push_back( callback_data( this, i ) );


@@ -310,6 +319,7 @@ Module_Parameter_Editor::make_controls ( void )
o->callback( cb_bound_handle, &_callback_data.back() ); o->callback( cb_bound_handle, &_callback_data.back() );
} }


// flg->resizable(w);
o->resizable( 0 ); o->resizable( 0 );
o->end(); o->end();


@@ -317,9 +327,19 @@ Module_Parameter_Editor::make_controls ( void )
flg->set_visible_focus(); flg->set_visible_focus();


flg->position( o->x(), o->y() ); flg->position( o->x(), o->y() );
bound->position( o->x(), flg->y() + flg->h() );
o->size( flg->w(), flg->h() + bound->h() );

if ( mode_choice->value() == 1 )
{
bound->position( flg->x() + 450 - bound->w(), o->y() );
o->size( flg->w() + bound->w(), flg->h() );
}
else
{
bound->position( o->x(), flg->y() + flg->h() );
o->size( flg->w(), flg->h() + bound->h() );
}
o->init_sizes(); o->init_sizes();
// o->resizable(flg);
} }


if (! p->hints.visible ) if (! p->hints.visible )
@@ -367,13 +387,18 @@ Module_Parameter_Editor::make_controls ( void )


update_control_visibility(); update_control_visibility();


int width = control_pack->max_width() + 100;
int height = control_pack->h() + 50;
control_pack->dolayout();

int width = control_pack->w() + 100;
int height = control_pack->h() + 60;


if ( width < _min_width ) if ( width < _min_width )
width = _min_width; width = _min_width;


main_pack->size( width, height );
control_pack->parent()->size( control_pack->w() + 100, control_pack->h() );
control_scroll->scroll_to(0, 0 );

size( width, height ); size( width, height );
size_range( width, height, width, height ); size_range( width, height, width, height );
} }


+ 3
- 2
mixer/src/Module_Parameter_Editor.H View File

@@ -26,6 +26,7 @@ class Fl_Flowpack;
class Module; class Module;
class Fl_Menu_Button; class Fl_Menu_Button;
class Panner; class Panner;
class Fl_Scroll;


#include <vector> #include <vector>
#include <list> #include <list>
@@ -75,8 +76,8 @@ class Module_Parameter_Editor : public Fl_Double_Window
void set_value (int i, float value ); void set_value (int i, float value );
void bind_control ( int i ); void bind_control ( int i );
void make_controls ( void ); void make_controls ( void );
Fl_Pack *main_pack;
Fl_Scroll *control_scroll;
Fl_Flowpack *control_pack; Fl_Flowpack *control_pack;
Fl_Menu_Button *mode_choice; Fl_Menu_Button *mode_choice;
bool _resized; bool _resized;


+ 5
- 0
timeline/src/Transport.C View File

@@ -124,7 +124,12 @@ Transport::Transport ( int X, int Y, int W, int H, const char *L )
o->color2( fl_color_average( FL_GRAY, FL_BLUE, 0.50 ) ); o->color2( fl_color_average( FL_GRAY, FL_BLUE, 0.50 ) );
o->tooltip( "When active, the next playback will be done in freewheeling mode" ); o->tooltip( "When active, the next playback will be done in freewheeling mode" );


type( Fl_Pack::HORIZONTAL );
flowdown( true ); flowdown( true );
vspacing( 1 );
hspacing( 1 );
dolayout();
} }




Loading…
Cancel
Save