diff --git a/xtt/lib/ge/src/ge_graph.cpp b/xtt/lib/ge/src/ge_graph.cpp index 5783c8821ab668a56d946b330c0f8f13f74a6b72..f3b511e2844ad5b82a921e74268603fb30c97102 100644 --- a/xtt/lib/ge/src/ge_graph.cpp +++ b/xtt/lib/ge/src/ge_graph.cpp @@ -3956,7 +3956,7 @@ int Graph::set_folder_index( const char *name, int idx) return grow_SetFolderIndex( object, idx); } -int Graph::set_subwindow_source( const char *name, char *source) +int Graph::set_subwindow_source( const char *name, char *source, char *owner) { int sts; grow_tObject object; @@ -3971,7 +3971,7 @@ int Graph::set_subwindow_source( const char *name, char *source) if ( grow_GetObjectType( object) != glow_eObjectType_GrowWindow) return 0; - sts = grow_SetWindowSource( object, source); + sts = grow_SetWindowSource( object, source, owner); if ( ctx != grow->ctx) grow->pop(ctx); diff --git a/xtt/lib/ge/src/ge_graph.h b/xtt/lib/ge/src/ge_graph.h index 2255788a7657c193e833b75793b5b21eede4ace8..6802a3986a02c2a3b48e6b2472924e73a1360598 100644 --- a/xtt/lib/ge/src/ge_graph.h +++ b/xtt/lib/ge/src/ge_graph.h @@ -1288,8 +1288,9 @@ class Graph { /*! \param name Object name of window object. \param source Name of source graph. + \param owner Name of instance object. NULL if not used. */ - int set_subwindow_source( const char *name, char *source); + int set_subwindow_source( const char *name, char *source, char *owner); //! Play a sound. /*! diff --git a/xtt/lib/glow/src/glow_growapi.cpp b/xtt/lib/glow/src/glow_growapi.cpp index f83a77ecd8780bea71f886195d7fefb666086801..7ec9c311b4c458e2f63d18d1650d1dd80decdfee 100644 --- a/xtt/lib/glow/src/glow_growapi.cpp +++ b/xtt/lib/glow/src/glow_growapi.cpp @@ -4769,9 +4769,9 @@ int grow_SetFolderIndex( grow_tObject folder, int idx) return ((GrowFolder *)folder)->set_folder( idx); } -int grow_SetWindowSource( grow_tObject window, char *source) +int grow_SetWindowSource( grow_tObject window, char *source, char *owner) { - return ((GrowWindow *)window)->set_source( source); + return ((GrowWindow *)window)->set_source( source, owner); } void grow_GetWindowSize( grow_tCtx ctx, int *width, int *height) diff --git a/xtt/lib/glow/src/glow_growapi.h b/xtt/lib/glow/src/glow_growapi.h index ca6f821bbb0c4dc514917e1f4a365f30fc90437d..700f8511eed281d9d0cf16720d8239c56e79f391 100644 --- a/xtt/lib/glow/src/glow_growapi.h +++ b/xtt/lib/glow/src/glow_growapi.h @@ -2993,7 +2993,7 @@ extern "C" { void grow_GetSubmenuPosition( grow_tObject menu, int item, double *x, double *y); int grow_GetMenuParent( grow_tObject menu, grow_tObject *parent); int grow_SetFolderIndex( grow_tObject folder, int idx); - int grow_SetWindowSource( grow_tObject window, char *source); + int grow_SetWindowSource( grow_tObject window, char *source, char *owner); void grow_GetWindowSize( grow_tCtx ctx, int *width, int *height); int grow_IsJava( char *name, int *is_frame, int *is_applet, char *java_name); void grow_GetOwner( grow_tCtx ctx, char *owner); diff --git a/xtt/lib/glow/src/glow_growwindow.cpp b/xtt/lib/glow/src/glow_growwindow.cpp index 91446fedd22574a8b04038edc9b96faf68771bd3..2fbbd7c0bac574648d4d1c9dd0f5f7594aac081d 100644 --- a/xtt/lib/glow/src/glow_growwindow.cpp +++ b/xtt/lib/glow/src/glow_growwindow.cpp @@ -981,7 +981,7 @@ int GrowWindow::get_background_object_limits(GlowTransform *t, return 0; } -int GrowWindow::set_source( char *source) +int GrowWindow::set_source( char *source, char *new_owner) { int clip_removed = 0; @@ -992,6 +992,8 @@ int GrowWindow::set_source( char *source) } strcpy( input_file_name, source); + if ( new_owner) + strncpy( owner, new_owner, sizeof(owner)); update_attributes(); draw(); diff --git a/xtt/lib/glow/src/glow_growwindow.h b/xtt/lib/glow/src/glow_growwindow.h index d4d790aa12b0bd4775f587c1546f49b7d7a632c4..bec309c7069d82fd09edb3dca91ef73e5a3ea3ee 100644 --- a/xtt/lib/glow/src/glow_growwindow.h +++ b/xtt/lib/glow/src/glow_growwindow.h @@ -282,7 +282,7 @@ class GrowWindow : public GrowRect { double x, double y, GlowArrayElem **background, double *min, double *max, glow_eDirection *direction); void set_input_focus( int focus, glow_eEvent event); - int set_source( char *source); + int set_source( char *source, char *new_owner); static void v_value_changed_cb( void *o, double value); static void h_value_changed_cb( void *o, double value); diff --git a/xtt/lib/xtt/src/xtt_ge.cpp b/xtt/lib/xtt/src/xtt_ge.cpp index 077681120661c08f7afb7971439a3cbb63b9fedb..a3e6e67516ec3a96641b5cf2800cf569204abe8c 100644 --- a/xtt/lib/xtt/src/xtt_ge.cpp +++ b/xtt/lib/xtt/src/xtt_ge.cpp @@ -193,9 +193,9 @@ int XttGe::set_folder_index( const char *name, int idx) return graph->set_folder_index( name, idx); } -int XttGe::set_subwindow_source( const char *name, char *source) +int XttGe::set_subwindow_source( const char *name, char *source, char *object) { - return graph->set_subwindow_source( name, source); + return graph->set_subwindow_source( name, source, object); } XttGe::~XttGe() diff --git a/xtt/lib/xtt/src/xtt_ge.h b/xtt/lib/xtt/src/xtt_ge.h index 2c8609fe5ede2e21ac99db1ba570d04dcc95370f..2c6e3091880f7fc1000fc0beecaed1d07cf35138 100644 --- a/xtt/lib/xtt/src/xtt_ge.h +++ b/xtt/lib/xtt/src/xtt_ge.h @@ -89,7 +89,7 @@ class XttGe { void print(); int set_object_focus( const char *name, int empty); int set_folder_index( const char *name, int idx); - int set_subwindow_source( const char *name, char *source); + int set_subwindow_source( const char *name, char *source, char *object); void swap( int mode); void event_exec( int type, void *event, unsigned int size); diff --git a/xtt/lib/xtt/src/xtt_xnav_command.cpp b/xtt/lib/xtt/src/xtt_xnav_command.cpp index 8cf21129613ef7a9b6384aa9a479baab56658609..d6beacee44fa1b9f9fa9fbad8061eb52382435a1 100644 --- a/xtt/lib/xtt/src/xtt_xnav_command.cpp +++ b/xtt/lib/xtt/src/xtt_xnav_command.cpp @@ -340,7 +340,7 @@ dcli_tCmdTable xnav_command_table[] = { "SET", &xnav_set_func, { "dcli_arg1", "dcli_arg2", "/NAME", "/VALUE", - "/BYPASS", "/INDEX", "/SOURCE", ""} + "/BYPASS", "/INDEX", "/SOURCE", "/OBJECT", ""} }, { "SETUP", @@ -686,7 +686,7 @@ static int xnav_logout_func( void *client_data, } static int xnav_set_func( void *client_data, - void *client_flag) + void *client_flag) { XNav *xnav = (XNav *)client_data; char arg1_str[80]; @@ -815,7 +815,9 @@ static int xnav_set_func( void *client_data, // Command is "SET SUBWINDOW" XttGe *gectx; char graph_str[80]; - char object_str[80]; + char name_str[80]; + pwr_tOName object_str; + char *object_p; char source_str[80]; if ( EVEN( dcli_get_qualifier( "dcli_arg2", graph_str, sizeof(graph_str)))) { @@ -823,7 +825,7 @@ static int xnav_set_func( void *client_data, return XNAV__HOLDCOMMAND; } - if ( EVEN( dcli_get_qualifier( "/NAME", object_str, sizeof(object_str)))) { + if ( EVEN( dcli_get_qualifier( "/NAME", name_str, sizeof(name_str)))) { xnav->message('E', "Object name is missing"); return XNAV__HOLDCOMMAND; } @@ -833,12 +835,17 @@ static int xnav_set_func( void *client_data, return XNAV__HOLDCOMMAND; } + if ( ODD( dcli_get_qualifier( "/OBJECT", object_str, sizeof(object_str)))) + object_p = object_str; + else + object_p = 0; + if ( !xnav->appl.find( applist_eType_Graph, graph_str, 0, (void **) &gectx)) { xnav->message('E', "Graph is not open"); return XNAV__HOLDCOMMAND; } - return gectx->set_subwindow_source( object_str, source_str); + return gectx->set_subwindow_source( name_str, source_str, object_p); } else if ( cdh_NoCaseStrncmp( arg1_str, "LANGUAGE", strlen( arg1_str)) == 0) { @@ -3683,6 +3690,23 @@ static int xnav_open_func( void *client_data, fileview = xnav->fileview_new( aref.Objid, title_str, dir_str, file_str, type, target_str, trigger_str, filetype_p); } + else if ( cdh_NoCaseStrncmp( arg1_str, "NAVIGATOR", strlen( arg1_str)) == 0) { + pwr_tAName object_str; + pwr_tAttrRef aref; + pwr_tStatus sts; + + if ( ODD( dcli_get_qualifier( "/OBJECT", object_str, sizeof(object_str)))) { + sts = gdh_NameToAttrref( pwr_cNObjid, object_str, &aref); + if ( EVEN(sts)) { + xnav->message('E', "Uable to find object"); + return XNAV__HOLDCOMMAND; + } + + xnav->display_object( &aref, 0); + } + + xnav->pop(); + } else xnav->message('E',"Syntax error");