Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
gmsh
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Larry Price
gmsh
Commits
91efb494
Commit
91efb494
authored
Dec 4, 2011
by
Christophe Geuzaine
Browse files
Options
Downloads
Patches
Plain Diff
onelab interface can now perform imbricated loops (3 levels)
parent
7fb133b6
No related branches found
No related tags found
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
Common/onelab.h
+2
-0
2 additions, 0 deletions
Common/onelab.h
Fltk/inputRange.h
+41
-3
41 additions, 3 deletions
Fltk/inputRange.h
Fltk/onelabWindow.cpp
+29
-10
29 additions, 10 deletions
Fltk/onelabWindow.cpp
with
72 additions
and
13 deletions
Common/onelab.h
+
2
−
0
View file @
91efb494
...
@@ -21,6 +21,8 @@
...
@@ -21,6 +21,8 @@
// WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
// WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
// OF THIS SOFTWARE.
// OF THIS SOFTWARE.
//
// Please report all bugs and problems to <gmsh@geuz.org>.
#ifndef _ONELAB_H_
#ifndef _ONELAB_H_
#define _ONELAB_H_
#define _ONELAB_H_
...
...
...
...
This diff is collapsed.
Click to expand it.
Fltk/inputRange.h
+
41
−
3
View file @
91efb494
...
@@ -121,6 +121,29 @@ class inputRange : public Fl_Group {
...
@@ -121,6 +121,29 @@ class inputRange : public Fl_Group {
_range
->
hide
();
_range
->
hide
();
}
}
}
}
void
_set_loop_value
(
const
std
::
string
&
val
)
{
if
(
val
==
"1"
){
_loop_butt
->
label
(
"1"
);
_loop_butt
->
selection_color
(
FL_GREEN
);
_loop_butt
->
value
(
1
);
}
else
if
(
val
==
"2"
){
_loop_butt
->
label
(
"2"
);
_loop_butt
->
selection_color
(
FL_BLUE
);
_loop_butt
->
value
(
1
);
}
else
if
(
val
==
"3"
){
_loop_butt
->
label
(
"3"
);
_loop_butt
->
selection_color
(
FL_RED
);
_loop_butt
->
value
(
1
);
}
else
{
_loop_butt
->
label
(
"@-1gmsh_rotate"
);
_loop_butt
->
selection_color
(
_loop_butt
->
color
());
_loop_butt
->
value
(
0
);
}
}
static
void
_input_cb
(
Fl_Widget
*
w
,
void
*
data
)
static
void
_input_cb
(
Fl_Widget
*
w
,
void
*
data
)
{
{
((
inputRange
*
)
data
)
->
do_callback
();
((
inputRange
*
)
data
)
->
do_callback
();
...
@@ -136,6 +159,15 @@ class inputRange : public Fl_Group {
...
@@ -136,6 +159,15 @@ class inputRange : public Fl_Group {
}
}
static
void
_loop_butt_cb
(
Fl_Widget
*
w
,
void
*
data
)
static
void
_loop_butt_cb
(
Fl_Widget
*
w
,
void
*
data
)
{
{
Fl_Toggle_Button
*
b
=
(
Fl_Toggle_Button
*
)
w
;
if
(
std
::
string
(
b
->
label
())
==
"1"
)
((
inputRange
*
)
data
)
->
_set_loop_value
(
"2"
);
else
if
(
std
::
string
(
b
->
label
())
==
"2"
)
((
inputRange
*
)
data
)
->
_set_loop_value
(
"3"
);
else
if
(
std
::
string
(
b
->
label
())
==
"3"
)
((
inputRange
*
)
data
)
->
_set_loop_value
(
"0"
);
else
((
inputRange
*
)
data
)
->
_set_loop_value
(
"1"
);
((
inputRange
*
)
data
)
->
do_callback
();
((
inputRange
*
)
data
)
->
do_callback
();
}
}
public
:
public
:
...
@@ -162,7 +194,6 @@ class inputRange : public Fl_Group {
...
@@ -162,7 +194,6 @@ class inputRange : public Fl_Group {
_loop_butt
=
new
Fl_Toggle_Button
(
x
+
input_w
+
dot_w
,
y
,
loop_w
,
h
);
_loop_butt
=
new
Fl_Toggle_Button
(
x
+
input_w
+
dot_w
,
y
,
loop_w
,
h
);
_loop_butt
->
label
(
"@-1gmsh_rotate"
);
_loop_butt
->
label
(
"@-1gmsh_rotate"
);
_loop_butt
->
selection_color
(
FL_GREEN
);
_loop_butt
->
align
(
FL_ALIGN_CENTER
|
FL_ALIGN_INSIDE
);
_loop_butt
->
align
(
FL_ALIGN_CENTER
|
FL_ALIGN_INSIDE
);
_loop_butt
->
callback
(
_loop_butt_cb
,
this
);
_loop_butt
->
callback
(
_loop_butt_cb
,
this
);
_loop_butt
->
tooltip
(
"Loop over range when computing"
);
_loop_butt
->
tooltip
(
"Loop over range when computing"
);
...
@@ -180,6 +211,13 @@ class inputRange : public Fl_Group {
...
@@ -180,6 +211,13 @@ class inputRange : public Fl_Group {
double
maximum
()
{
return
_max
;
}
double
maximum
()
{
return
_max
;
}
void
step
(
double
val
)
{
_step
=
val
;
_values2string
();
}
void
step
(
double
val
)
{
_step
=
val
;
_values2string
();
}
double
step
()
{
return
_step
;
}
double
step
()
{
return
_step
;
}
void
loop
(
int
val
)
{
_loop_butt
->
value
(
val
);
}
void
loop
(
const
std
::
string
&
val
)
int
loop
()
{
return
_loop_butt
->
value
();
}
{
_set_loop_value
(
val
);
}
std
::
string
loop
()
{
if
(
!
_loop_butt
->
value
())
return
"0"
;
else
return
_loop_butt
->
label
();
}
};
};
This diff is collapsed.
Click to expand it.
Fltk/onelabWindow.cpp
+
29
−
10
View file @
91efb494
...
@@ -320,13 +320,13 @@ static std::string getModelName(onelab::client *c)
...
@@ -320,13 +320,13 @@ static std::string getModelName(onelab::client *c)
}
}
}
}
static
void
init
Compute
(
)
static
void
init
ializeLoop
(
std
::
string
level
)
{
{
bool
changed
=
false
;
bool
changed
=
false
;
std
::
vector
<
onelab
::
number
>
numbers
;
std
::
vector
<
onelab
::
number
>
numbers
;
onelab
::
server
::
instance
()
->
get
(
numbers
);
onelab
::
server
::
instance
()
->
get
(
numbers
);
for
(
unsigned
int
i
=
0
;
i
<
numbers
.
size
();
i
++
){
for
(
unsigned
int
i
=
0
;
i
<
numbers
.
size
();
i
++
){
if
(
numbers
[
i
].
getAttribute
(
"loop"
)
==
"true"
){
if
(
numbers
[
i
].
getAttribute
(
"loop"
)
==
level
){
if
(
numbers
[
i
].
getChoices
().
size
()
>
1
){
if
(
numbers
[
i
].
getChoices
().
size
()
>
1
){
numbers
[
i
].
setValue
(
numbers
[
i
].
getChoices
()[
0
]);
numbers
[
i
].
setValue
(
numbers
[
i
].
getChoices
()[
0
]);
onelab
::
server
::
instance
()
->
set
(
numbers
[
i
]);
onelab
::
server
::
instance
()
->
set
(
numbers
[
i
]);
...
@@ -344,13 +344,14 @@ static void initCompute()
...
@@ -344,13 +344,14 @@ static void initCompute()
FlGui
::
instance
()
->
onelab
->
rebuildTree
();
FlGui
::
instance
()
->
onelab
->
rebuildTree
();
}
}
static
bool
shouldRecompute
(
)
static
bool
incrementLoop
(
std
::
string
level
)
{
{
bool
recompute
=
false
;
bool
recompute
=
false
,
loop
=
false
;
std
::
vector
<
onelab
::
number
>
numbers
;
std
::
vector
<
onelab
::
number
>
numbers
;
onelab
::
server
::
instance
()
->
get
(
numbers
);
onelab
::
server
::
instance
()
->
get
(
numbers
);
for
(
unsigned
int
i
=
0
;
i
<
numbers
.
size
();
i
++
){
for
(
unsigned
int
i
=
0
;
i
<
numbers
.
size
();
i
++
){
if
(
numbers
[
i
].
getAttribute
(
"loop"
)
==
"true"
){
if
(
numbers
[
i
].
getAttribute
(
"loop"
)
==
level
){
loop
=
true
;
if
(
numbers
[
i
].
getChoices
().
size
()
>
1
){
if
(
numbers
[
i
].
getChoices
().
size
()
>
1
){
std
::
vector
<
double
>
choices
(
numbers
[
i
].
getChoices
());
std
::
vector
<
double
>
choices
(
numbers
[
i
].
getChoices
());
for
(
unsigned
int
j
=
0
;
j
<
choices
.
size
()
-
1
;
j
++
){
for
(
unsigned
int
j
=
0
;
j
<
choices
.
size
()
-
1
;
j
++
){
...
@@ -376,12 +377,30 @@ static bool shouldRecompute()
...
@@ -376,12 +377,30 @@ static bool shouldRecompute()
}
}
}
}
if
(
recompute
)
if
(
loop
&&
!
recompute
)
// end of this loop level
initializeLoop
(
level
);
if
(
loop
)
FlGui
::
instance
()
->
onelab
->
rebuildTree
();
FlGui
::
instance
()
->
onelab
->
rebuildTree
();
return
recompute
;
return
recompute
;
}
}
static
void
initializeLoop
()
{
initializeLoop
(
"1"
);
initializeLoop
(
"2"
);
initializeLoop
(
"3"
);
}
static
bool
incrementLoop
()
{
if
(
incrementLoop
(
"3"
))
return
true
;
else
if
(
incrementLoop
(
"2"
))
return
true
;
else
if
(
incrementLoop
(
"1"
))
return
true
;
return
false
;
}
void
onelab_cb
(
Fl_Widget
*
w
,
void
*
data
)
void
onelab_cb
(
Fl_Widget
*
w
,
void
*
data
)
{
{
if
(
!
data
)
return
;
if
(
!
data
)
return
;
...
@@ -408,7 +427,7 @@ void onelab_cb(Fl_Widget *w, void *data)
...
@@ -408,7 +427,7 @@ void onelab_cb(Fl_Widget *w, void *data)
FlGui
::
instance
()
->
onelab
->
deactivate
();
FlGui
::
instance
()
->
onelab
->
deactivate
();
if
(
action
==
"compute"
)
init
Compute
();
if
(
action
==
"compute"
)
init
ializeLoop
();
do
{
// enter computation loop
do
{
// enter computation loop
...
@@ -479,7 +498,7 @@ void onelab_cb(Fl_Widget *w, void *data)
...
@@ -479,7 +498,7 @@ void onelab_cb(Fl_Widget *w, void *data)
printf
(
"Gmsh ONELAB db:
\n
%s
\n
"
,
onelab
::
server
::
instance
()
->
toChar
().
c_str
());
printf
(
"Gmsh ONELAB db:
\n
%s
\n
"
,
onelab
::
server
::
instance
()
->
toChar
().
c_str
());
}
while
(
action
==
"compute"
&&
shouldRecompute
());
}
while
(
action
==
"compute"
&&
incrementLoop
());
FlGui
::
instance
()
->
onelab
->
activate
();
FlGui
::
instance
()
->
onelab
->
activate
();
FlGui
::
instance
()
->
onelab
->
rebuildTree
();
FlGui
::
instance
()
->
onelab
->
rebuildTree
();
...
@@ -512,7 +531,7 @@ static void onelab_input_range_cb(Fl_Widget *w, void *data)
...
@@ -512,7 +531,7 @@ static void onelab_input_range_cb(Fl_Widget *w, void *data)
numbers
[
0
].
setMax
(
o
->
maximum
());
numbers
[
0
].
setMax
(
o
->
maximum
());
numbers
[
0
].
setStep
(
o
->
step
());
numbers
[
0
].
setStep
(
o
->
step
());
numbers
[
0
].
setChoices
(
o
->
choices
());
numbers
[
0
].
setChoices
(
o
->
choices
());
numbers
[
0
].
setAttribute
(
"loop"
,
o
->
loop
()
?
"true"
:
"false"
);
numbers
[
0
].
setAttribute
(
"loop"
,
o
->
loop
());
onelab
::
server
::
instance
()
->
set
(
numbers
[
0
]);
onelab
::
server
::
instance
()
->
set
(
numbers
[
0
]);
}
}
}
}
...
@@ -655,7 +674,7 @@ void onelabWindow::rebuildTree()
...
@@ -655,7 +674,7 @@ void onelabWindow::rebuildTree()
but
->
maximum
(
numbers
[
i
].
getMax
());
but
->
maximum
(
numbers
[
i
].
getMax
());
but
->
step
(
numbers
[
i
].
getStep
());
but
->
step
(
numbers
[
i
].
getStep
());
but
->
choices
(
numbers
[
i
].
getChoices
());
but
->
choices
(
numbers
[
i
].
getChoices
());
but
->
loop
(
numbers
[
i
].
getAttribute
(
"loop"
)
==
"true"
);
but
->
loop
(
numbers
[
i
].
getAttribute
(
"loop"
));
but
->
align
(
FL_ALIGN_RIGHT
);
but
->
align
(
FL_ALIGN_RIGHT
);
but
->
callback
(
onelab_input_range_cb
,
(
void
*
)
n
);
but
->
callback
(
onelab_input_range_cb
,
(
void
*
)
n
);
but
->
when
(
FL_WHEN_RELEASE
|
FL_WHEN_ENTER_KEY
);
but
->
when
(
FL_WHEN_RELEASE
|
FL_WHEN_ENTER_KEY
);
...
...
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment