Subversion Repositories DIN Is Noise

Rev

Rev 1156 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
* point_modulator.cc
* DIN Is Noise is copyright (c) 2006-2019 Jagannathan Sampath
* For more information, please visit http://dinisnoise.org/
*/


#include "point_modulator.h"
#include "ui_list.h"
#include "console.h"
using namespace std;

#define NUM_WIDGETS 8
#define NUM_WIDGETS_1 (NUM_WIDGETS - 1)
#define DECLARE_WIDGET_ARRAY_wa widget* wa [] = {&title, &all, &none, &invert, &play, &kill, &plus, &fold};

void point_modulator::setup () {

  DECLARE_WIDGET_ARRAY_wa
  const char* texts [] = {"Point Modulator", "All", "None", "Invert"};
  for (int i = 0; i < 4; ++i)  {
    label* l = dynamic_cast<label*>(wa[i]);
    l->set_text (texts[i]);
  }

  for (int i = 1; i < NUM_WIDGETS; ++i) dynamic_cast<button*>(wa[i])->set_listener (this);

  make_family (&title, &wa[1], NUM_WIDGETS_1);
  /*make_hierarchy (&wa[1], 3);
  make_hierarchy (&wa[4], 2);*/

  for (int i = 4; i < 7; ++i) {
    button* wi = dynamic_cast<button*>(wa [i]);
    wi->set_size (16);
  }

  title.set_moveable (1);
  title.movlis = this;
  for (int i = 0; i < NUM_WIDGETS; ++i) {
    widget* wi = wa[i];
    wi->set_moveable (1);
  }

  fold.set_dir (arrow_button::down);
  play.set_dir (arrow_button::right);

  widget_load ("d_point_modulator", wa, NUM_WIDGETS);

  folded = 0;
  moved ();

}

state_button* point_modulator::add () {
  state_button* sb = new state_button;
  sb->set_pos (sbx, sby);
  sbx += state_button::SIZE2;
  title.add_child (sb);
  /*caps.push_back (sb);
  ++ncaps;*/

  return sb;
}

point_modulator::point_modulator () {
  ++ref;
}

point_modulator::~point_modulator () {
  /*for (list<state_button*>::iterator i = caps.begin (), j = caps.end(); i != j; ++i) {
    state_button* sb = *i;
    delete sb;
  }*/


  if (--ref == 0) {
    DECLARE_WIDGET_ARRAY_wa
    widget_save ("d_point_modulator", wa, NUM_WIDGETS);
  }
}

int point_modulator::handle_input () {

  /*for (list<state_button*>::iterator i = caps.begin (), j = caps.end(); i != j; ++i) {
    state_button* sb = *i;
    if (sb->visible) {
      if (sb->handle_input()) return 1;
    }
  }*/


  DECLARE_WIDGET_ARRAY_wa
  for (int i = 0; i < NUM_WIDGETS; ++i) {
    widget* wi = wa[i];
    if (wi->visible) {
      if (wi->handle_input()) return 1;
    }
  }

  return 0;

}

void point_modulator::remove () {
  /*int p = ncaps;
  for (list<state_button*>::iterator i = caps.begin (), j = caps.end(); i != j;) {
    state_button* sb = *i;
    if (sb->state) {
      CRVED->remove_mouse_capture (sb);
      title.remove_child (sb);
      delete sb;
      i = caps.erase (i);
      j = caps.end ();
      --ncaps;
    } else ++i;
  }
  rearrange ();
  int q = p - ncaps;
  cons << RED << "Removed " << q << " mouse captures" << eol;*/

}

void point_modulator::rearrange () {
  /*int sx = title.extents.left;
  for (list<state_button*>::iterator i = caps.begin (), j = caps.end(); i != j; ++i) {
    state_button* sb = *i;
    sb->set_pos (sx, sby);
    sx += state_button::SIZE2;
  }
  sbx = sx;*/

}

void point_modulator::on_caps (const op_cap& op) {
  /*for (list<state_button*>::iterator i = caps.begin (), j = caps.end(); i != j; ++i) {
    state_button* sb = *i;
    sb->set_state (op (sb->state));
  }*/

}

void point_modulator::clicked (button& b) {
  if (&b == &kill) {
    remove ();
  } else if (&b == &play) {
    //CRVED->toggle_mouse_capture (caps);
  } else if (&b == &all) {
    on_caps (_sel);
  } else if (&b == &invert) {
    on_caps (_togg);
  } else if (&b == &none) {
    on_caps (_desel);
  } else if (&b == &fold) {
    if (fold.dir == arrow_button::down) {
      title.hide (widget::only_children);
      fold.show ();
      fold.set_dir (arrow_button::right);
      folded = 1;
    } else {
      title.show ();
      fold.set_dir (arrow_button::down);
      folded = 0;
    }
  }
}

void point_modulator::draw () {

  DECLARE_WIDGET_ARRAY_wa
  for (int i = 0; i < NUM_WIDGETS; ++i) {
    widget* wi = wa[i];
    if (wi->visible) wi->draw ();
  }

  if (folded == 0) {
    /*for (list<state_button*>::iterator i = caps.begin (), j = caps.end(); i != j; ++i) {
      state_button* sb = *i;
      sb->draw ();
      glEnable (GL_LINE_STIPPLE);
      glLineStipple (1, 0xf00f);
      point<int>& p = sbpt [sb];
      glBegin (GL_LINES);
        glVertex2i (p.x, p.y);
        glVertex2i (sb->extents.midx, sb->extents.midy);
      glEnd ();
      glDisable (GL_LINE_STIPPLE);
    }*/

  }

}

void point_modulator::moved () {
  /*sbx = title.extents.left + ncaps * state_button::SIZE2;
  sby = title.extents.bottom - title.extents.height;*/

}