1 #include <../../nrnconf.h>
4 #include <IV-look/kit.h>
5 #include <InterViews/layout.h>
6 #include <InterViews/telltale.h>
7 #include <InterViews/window.h>
21 #define Scene_SceneMover_ "Translate Scene"
22 #define Scene_SceneZoom_ "ZoomInOut Scene"
23 #define Scene_RoundView_ "RoundView Scene"
24 #define Scene_WholeSceneView_ "WholeScene Scene"
25 #define Scene_WholePlotView_ "View_equal_Plot Scene"
26 #define Scene_ZoomOut10_ "ZoomOut10 Scene"
27 #define Scene_ZoomeIn10_ "ZoomIn10 Scene"
28 #define Scene_SpecView_ "SetView Scene"
29 #define Scene_SizeScene_ "Scene_equal_View Scene"
30 #define Scene_NewView_ "NewView Scene"
31 #define Scene_ShowMenu_ "Scene"
32 #define Scene_ObjectName_ "ObjectName"
36 LayoutKit::instance()->r_margin(WidgetKit::instance()->fancy_label(
name), 0.0,
fil, 0.0);
37 return WidgetKit::instance()->menu_item(g);
42 LayoutKit::instance()->r_margin(WidgetKit::instance()->fancy_label(
name), 0.0,
fil, 0.0);
43 return WidgetKit::instance()->check_menu_item(g);
48 LayoutKit::instance()->r_margin(WidgetKit::instance()->fancy_label(
name), 0.0,
fil, 0.0);
49 return WidgetKit::instance()->radio_menu_item(tg, g);
52 class ButtonItemInfo {
55 virtual ~ButtonItemInfo();
63 ButtonItemInfo::ButtonItemInfo(
const char*
name,
74 ButtonItemInfo::~ButtonItemInfo() {}
79 cnt = parent_->item_count();
80 for (
i = 0;
i <
cnt; ++
i) {
81 if (parent_->item(
i) == mi_) {
92 virtual ~SceneMover();
93 virtual bool event(
Event&);
104 virtual ~SceneZoom();
105 virtual bool event(
Event&);
121 class RoundView:
public Action {
virtual void execute(); };
123 class WholeSceneView:
public Action {
virtual void execute(); };
125 class WholePlotView:
public Action {
virtual void execute(); };
127 class SpecView:
public Action {
virtual void execute(); };
129 class SizeScene:
public Action {
virtual void execute(); };
131 class ZoomOut10:
public Action {
virtual void execute(); };
133 class ZoomIn10:
public Action {
virtual void execute(); };
135 class SPObjectName:
public Action {
virtual void execute(); };
137 class ShowMenu:
public Action {
141 virtual void execute();
152 SceneZoom* z =
new SceneZoom();
153 SceneMover* m =
new SceneMover();
155 Menu* men =
k.pulldown();
181 class ScenePickerImpl:
public OcHandler {
183 ScenePickerImpl(
Scene*);
184 virtual ~ScenePickerImpl();
185 virtual bool event(
Event&);
186 long info_index(
const char*);
193 CopyString sel_name_;
194 std::vector<ButtonItemInfo*>* bil_;
199 h.target(depth, glyph, 0,
spi_);
204 class RadioSelect:
public Action {
207 virtual ~RadioSelect();
208 virtual void execute();
216 class RubberTool:
public Action {
219 virtual ~RubberTool();
220 virtual void execute();
229 class HandlerTool:
public Action {
232 virtual ~HandlerTool();
233 virtual void execute();
242 spi_ =
new ScenePickerImpl(scene);
248 return ScenePickerImpl::window_;
264 spi_->menu_->append_item(mi);
277 spi_->bil_->push_back(
new ButtonItemInfo(
name, mi->action(), mi->state(), mi,
mm));
288 mi->action(
new RadioSelect(
name, a,
spi_->scene_));
292 Button* mi = WidgetKit::instance()->radio_button(
spi_->tg_,
294 new RadioSelect(
name, a,
spi_->scene_));
295 spi_->bil_->push_back(
new ButtonItemInfo(
name, mi->action(), mi->state()));
312 long ScenePickerImpl::info_index(
const char*
name) {
314 if (strcmp(b->name_.string(),
name) == 0) {
323 if (
s->view_count()) {
331 ScenePickerImpl::window_ =
NULL;
335 ButtonItemInfo* b =
spi_->bil_->at(
i);
337 bool chosen =
t->test(TelltaleState::is_chosen);
339 if (
t->test(TelltaleState::is_toggle)) {
340 t->set(TelltaleState::is_chosen, act);
342 }
else if (
t->test(TelltaleState::is_choosable)) {
343 t->set(TelltaleState::is_chosen,
true);
346 if (act && b->a_ !=
NULL) {
355 ButtonItemInfo* b =
spi_->bil_->at(
i);
356 spi_->bil_->erase(
spi_->bil_->begin() +
i);
359 b->parent_->remove_item(
j);
372 ButtonItemInfo* b =
spi_->bil_->at(
i);
375 b->parent_->insert_item(
j, mi);
376 spi_->bil_->insert(
spi_->bil_->begin() +
i,
377 new ButtonItemInfo(
name, mi->action(), mi->state(), mi, b->parent_));
383 spi_->scene_->tool(
t);
387 spi_->scene_->help();
395 return spi_->sel_name_.string();
398 ScenePickerImpl::ScenePickerImpl(
Scene* scene)
405 bil_ =
new std::vector<ButtonItemInfo*>();
409 ScenePickerImpl::~ScenePickerImpl() {
412 for (ButtonItemInfo* bii: *bil_) {
418 bool ScenePickerImpl::event(
Event& e) {
434 RubberTool::~RubberTool() {
439 void RubberTool::execute() {
440 sp_->bind_select(rb_);
441 sp_->set_scene_tool(tool_);
456 RadioSelect::~RadioSelect() {
460 void RadioSelect::execute() {
463 s_->picker()->select_name(this->name_.string());
464 for (
int i = 0;
i < s_->view_count(); ++
i) {
477 HandlerTool::~HandlerTool() {
481 void HandlerTool::execute() {
482 sp_->bind_select(h_);
483 sp_->set_scene_tool(tool_);
493 SceneMover::SceneMover() {
498 SceneMover::~SceneMover() {}
500 void SceneMover::help() {
504 bool SceneMover::event(
Event& e) {
506 if (e.type() == Event::down) {
520 e.window()->grab_pointer();
524 view_->move_view(
x_ - xold,
y_ - yold);
529 e.window()->ungrab_pointer();
536 SceneZoom::SceneZoom() {
543 SceneZoom::~SceneZoom() {}
545 void SceneZoom::help() {
549 bool SceneZoom::event(
Event& e) {
551 if (e.type() == Event::down) {
565 e.window()->grab_pointer();
571 xold = (
x_ - xold) / 50;
572 yold = (
y_ - yold) / 50;
581 view_->scale_view(xorg_, yorg_, xold, yold);
586 e.window()->ungrab_pointer();
593 void RoundView::execute() {
601 Coord x1, y1, x2, y2;
602 v->zin(x1, y1, x2, y2);
612 v->size(x1, y1, x2, y2);
613 v->zout(x1, y1, x2, y2);
614 v->size(x1, y1, x2, y2);
618 void WholeSceneView::execute() {
627 v->size(
s.x1(),
s.y1(),
s.x2(),
s.y2());
628 Coord x1, y1, x2, y2;
629 v->zout(x1, y1, x2, y2);
630 v->size(x1, y1, x2, y2);
634 void WholePlotView::execute() {
643 Coord x1, y1, x2, y2;
644 s.wholeplot(x1, y1, x2, y2);
647 v->box_size(x1, y1, x2, y2);
648 v->zout(x1, y1, x2, y2);
649 v->box_size(x1, y1, x2, y2);
653 void ZoomOut10::execute() {
659 Coord x1, x2, y1, y2;
660 v->zout(x1, y1, x2, y2);
661 v->size(x1, y1, x2, y2);
665 void ZoomIn10::execute() {
673 Coord x1, x2, y1, y2;
674 v->zin(x1, y1, x2, y2);
675 v->size(x1, y1, x2, y2);
679 void SPObjectName::execute() {
687 void SpecView::execute() {
694 Coord x1, x2, y1, y2;
695 v->zin(x1, y1, x2, y2);
698 v->size(x1, y1, x2, y2);
699 v->zout(x1, y1, x2, y2);
700 v->size(x1, y1, x2, y2);
704 void SizeScene::execute() {
712 Coord x1, x2, y1, y2;
713 v->zin(x1, y1, x2, y2);
714 v->scene()->new_size(x1, y1, x2, y2);
715 v->zout(x1, y1, x2, y2);
716 v->size(x1, y1, x2, y2);
719 NewView::NewView() {}
720 NewView::~NewView() {}
721 void NewView::help() {
733 Coord x1, y1, x2, y2;
738 w->place(l + e.pointer_root_x() - e.pointer_x(), b + e.pointer_root_y() - e.pointer_y());
742 ShowMenu::ShowMenu(
Menu* m) {
746 ShowMenu::~ShowMenu() {
749 void ShowMenu::execute() {
755 v->parent()->viewmenu(m_);
760 printf(
"OcViewGlyph::viewmenu()\n");
767 hbox->append(lk.center(m, 0, 1));
768 hbox->append(lk.center(
view(), 0, 1));
780 menu_ = WidgetKit::instance()->pulldown();
801 w_->place(e.pointer_root_x(), e.pointer_root_y());
806 if (b < 0. || l < 0.) {
808 w_->place((l > 0.) ? l : 1., (b > 0.) ? b : 20.);
815 if (b < 0. || l < 0.) {
818 w_->place((l > 0.) ? l : 1., (b > 0.) ? b : 20.);
845 menu_->append_item(mi);
static MenuItem * radio_menu_item(TelltaleGroup *, const char *)
static MenuItem * menu_item(const char *)
static MenuItem * check_menu_item(const char *)
static void round_range_down(Coord x1, Coord x2, double &y1, double &y2, int &ntic)
static double round(float &x1, float &x2, int direction, int digits)
static void help(const char *)
virtual void unref() const
virtual void execute(Rubberband *)
virtual bool event(Event &)
virtual void pick_menu(Glyph *, int, Hit &)
virtual const char * select_name()
void insert_item(const char *, const char *, MenuItem *)
MenuItem * add_radio_menu(const char *, Action *, Menu *=NULL)
Button * radio_button(const char *, Action *)
MenuItem * add_menu(MenuItem *, Menu *=NULL)
TelltaleGroup * telltale_group()
void remove_item(const char *)
virtual void exec_item(const char *)
virtual void set_scene_tool(int)
static DismissableWindow * last_window()
void bind_menu(Rubberband *rb)
void bind_select(Rubberband *rb)
void bind_adjust(Rubberband *rb)
virtual Scene * scene() const
virtual XYView * new_view(Coord x1, Coord y1, Coord x2, Coord y2)
static XYView * current_pick_view()
#define y_(arg)
Crout matrix decomposition : Forward/Backward substitution.
constexpr auto enumerate(T &&iterable)
char * hoc_object_name(Object *ob)
void insert(SparseObj *so, Item *item)
bool var_pair_chooser(const char *, float &x, float &y, Window *w=NULL, Coord x1=400., Coord y1=400.)