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>
20 #define Scene_SceneMover_ "Translate Scene"
21 #define Scene_SceneZoom_ "ZoomInOut Scene"
22 #define Scene_RoundView_ "RoundView Scene"
23 #define Scene_WholeSceneView_ "WholeScene Scene"
24 #define Scene_WholePlotView_ "View_equal_Plot Scene"
25 #define Scene_ZoomOut10_ "ZoomOut10 Scene"
26 #define Scene_ZoomeIn10_ "ZoomIn10 Scene"
27 #define Scene_SpecView_ "SetView Scene"
28 #define Scene_SizeScene_ "Scene_equal_View Scene"
29 #define Scene_NewView_ "NewView Scene"
30 #define Scene_ShowMenu_ "Scene"
31 #define Scene_ObjectName_ "ObjectName"
35 LayoutKit::instance()->r_margin(WidgetKit::instance()->fancy_label(
name), 0.0,
fil, 0.0);
36 return WidgetKit::instance()->menu_item(
g);
41 LayoutKit::instance()->r_margin(WidgetKit::instance()->fancy_label(
name), 0.0,
fil, 0.0);
42 return WidgetKit::instance()->check_menu_item(
g);
47 LayoutKit::instance()->r_margin(WidgetKit::instance()->fancy_label(
name), 0.0,
fil, 0.0);
48 return WidgetKit::instance()->radio_menu_item(tg,
g);
51 class ButtonItemInfo {
54 virtual ~ButtonItemInfo();
62 ButtonItemInfo::ButtonItemInfo(
const char*
name,
73 ButtonItemInfo::~ButtonItemInfo() {}
78 cnt = parent_->item_count();
79 for (
i = 0;
i <
cnt; ++
i) {
80 if (parent_->item(
i) == mi_) {
94 virtual ~SceneMover();
95 virtual bool event(
Event&);
106 virtual ~SceneZoom();
107 virtual bool event(
Event&);
125 class WholeSceneView:
public Action {
virtual void execute(); };
127 class WholePlotView:
public Action {
virtual void execute(); };
137 class SPObjectName:
public Action {
virtual void execute(); };
139 class ShowMenu:
public Action {
154 SceneZoom* z =
new SceneZoom();
155 SceneMover* m =
new SceneMover();
157 Menu* men =
k.pulldown();
183 class ScenePickerImpl:
public OcHandler {
185 ScenePickerImpl(
Scene*);
186 virtual ~ScenePickerImpl();
187 virtual bool event(
Event&);
188 long info_index(
const char*);
196 ButtonItemInfoList* bil_;
201 h.target(depth, glyph, 0,
spi_);
206 class RadioSelect:
public Action {
209 virtual ~RadioSelect();
218 class RubberTool:
public Action {
221 virtual ~RubberTool();
231 class HandlerTool:
public Action {
234 virtual ~HandlerTool();
244 spi_ =
new ScenePickerImpl(scene);
250 return ScenePickerImpl::window_;
266 spi_->menu_->append_item(mi);
279 spi_->bil_->append(
new ButtonItemInfo(
name, mi->action(), mi->state(), mi,
mm));
290 mi->action(
new RadioSelect(
name, a,
spi_->scene_));
294 Button* mi = WidgetKit::instance()->radio_button(
spi_->tg_,
296 new RadioSelect(
name, a,
spi_->scene_));
297 spi_->bil_->append(
new ButtonItemInfo(
name, mi->action(), mi->state()));
314 long ScenePickerImpl::info_index(
const char*
name) {
317 for (
i = 0;
i <
cnt; ++
i) {
318 ButtonItemInfo* b = bil_->item(
i);
319 if (strcmp(b->name_.string(),
name) == 0) {
336 ScenePickerImpl::window_ =
NULL;
340 ButtonItemInfo* b =
spi_->bil_->item(
i);
342 bool chosen =
t->test(TelltaleState::is_chosen);
344 if (
t->test(TelltaleState::is_toggle)) {
345 t->set(TelltaleState::is_chosen, act);
347 }
else if (
t->test(TelltaleState::is_choosable)) {
348 t->set(TelltaleState::is_chosen,
true);
351 if (act && b->a_ !=
NULL) {
361 ButtonItemInfo* b =
spi_->bil_->item(
i);
362 spi_->bil_->remove(
i);
365 b->parent_->remove_item(
j);
378 ButtonItemInfo* b =
spi_->bil_->item(
i);
381 b->parent_->insert_item(
j, mi);
382 spi_->bil_->insert(
i,
383 new ButtonItemInfo(
name, mi->action(), mi->state(), mi, b->parent_));
389 spi_->scene_->tool(
t);
393 spi_->scene_->help();
401 return spi_->sel_name_.string();
404 ScenePickerImpl::ScenePickerImpl(
Scene* scene)
411 bil_ =
new ButtonItemInfoList(20);
414 ScenePickerImpl::~ScenePickerImpl() {
417 for (
long i = bil_->count() - 1;
i >= 0; --
i) {
418 delete bil_->item(
i);
423 bool ScenePickerImpl::event(
Event&
e) {
439 RubberTool::~RubberTool() {
445 sp_->bind_select(rb_);
446 sp_->set_scene_tool(tool_);
461 RadioSelect::~RadioSelect() {
468 s_->picker()->select_name(this->name_.string());
469 for (
int i = 0;
i < s_->view_count(); ++
i) {
482 HandlerTool::~HandlerTool() {
487 sp_->bind_select(h_);
488 sp_->set_scene_tool(tool_);
498 SceneMover::SceneMover() {
503 SceneMover::~SceneMover() {}
509 bool SceneMover::event(
Event&
e) {
511 if (
e.type() == Event::down) {
525 e.window()->grab_pointer();
529 view_->move_view(
x_ - xold,
y_ - yold);
534 e.window()->ungrab_pointer();
541 SceneZoom::SceneZoom() {
548 SceneZoom::~SceneZoom() {}
554 bool SceneZoom::event(
Event&
e) {
556 if (
e.type() == Event::down) {
570 e.window()->grab_pointer();
576 xold = (
x_ - xold) / 50;
577 yold = (
y_ - yold) / 50;
586 view_->scale_view(xorg_, yorg_, xold, yold);
591 e.window()->ungrab_pointer();
606 Coord x1, y1, x2, y2;
607 v->zin(x1, y1, x2, y2);
617 v->size(x1, y1, x2, y2);
618 v->zout(x1, y1, x2, y2);
619 v->size(x1, y1, x2, y2);
633 Coord x1, y1, x2, y2;
634 v->zout(x1, y1, x2, y2);
635 v->size(x1, y1, x2, y2);
648 Coord x1, y1, x2, y2;
652 v->box_size(x1, y1, x2, y2);
653 v->zout(x1, y1, x2, y2);
654 v->box_size(x1, y1, x2, y2);
664 Coord x1, x2, y1, y2;
665 v->zout(x1, y1, x2, y2);
666 v->size(x1, y1, x2, y2);
678 Coord x1, x2, y1, y2;
679 v->zin(x1, y1, x2, y2);
680 v->size(x1, y1, x2, y2);
699 Coord x1, x2, y1, y2;
700 v->zin(x1, y1, x2, y2);
703 v->size(x1, y1, x2, y2);
704 v->zout(x1, y1, x2, y2);
705 v->size(x1, y1, x2, y2);
717 Coord x1, x2, y1, y2;
718 v->zin(x1, y1, x2, y2);
719 v->scene()->new_size(x1, y1, x2, y2);
720 v->zout(x1, y1, x2, y2);
721 v->size(x1, y1, x2, y2);
724 NewView::NewView() {}
725 NewView::~NewView() {}
738 Coord x1, y1, x2, y2;
743 w->place(l +
e.pointer_root_x() -
e.pointer_x(), b +
e.pointer_root_y() -
e.pointer_y());
747 ShowMenu::ShowMenu(
Menu* m) {
751 ShowMenu::~ShowMenu() {
760 v->parent()->viewmenu(m_);
765 printf(
"OcViewGlyph::viewmenu()\n");
772 hbox->append(lk.center(m, 0, 1));
773 hbox->append(lk.center(
view(), 0, 1));
785 menu_ = WidgetKit::instance()->pulldown();
802 w_->place(10000, 10000);
811 w_->place(
e.pointer_root_x(),
e.pointer_root_y());
813 #if defined(WIN32) || MAC
816 if (b < 0. || l < 0.) {
818 w_->place((l > 0.) ? l : 1., (b > 0.) ? b : 20.);
825 if (b < 0. || l < 0.) {
828 w_->place((l > 0.) ? l : 1., (b > 0.) ? b : 20.);
855 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 XYView * sceneview(int) const
virtual int view_count() const
virtual void wholeplot(Coord &x1, Coord &y1, Coord &x2, Coord &y2) const
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()
char * hoc_object_name(Object *ob)
static void help(const char *)
#define implementPtrList(PtrList, T)
#define declarePtrList(PtrList, T)
static philox4x32_key_t k
static double insert(void *v)
bool var_pair_chooser(const char *, float &x, float &y, Window *w=NULL, Coord x1=400., Coord y1=400.)