Commit 057dd1bb authored by claes's avatar claes

New focustimer class, different pixmaps in menu, list of volumes and nodes

parent 744477d1
......@@ -50,7 +50,9 @@ extern "C" {
#include "xtt_url.h"
#include "co_lng.h"
#include "co_xhelp.h"
#include "co_wow.h"
#include "rt_xnav_msg.h"
#include "xtt_focustimer.h"
//
//
......@@ -72,47 +74,50 @@ static XtActionsRec HotkeyActions[] = {
};
static xnav_sStartMenu alarm_menu[] = {
{ "Alarm list", xnav_eItemType_Command, (void *) "show alarm"},
{ "Event list", xnav_eItemType_Command, (void *) "show event"},
{ "Historical list", xnav_eItemType_Command, (void *) "show hist"},
{ "", 0, NULL}};
{ "Alarm list", xnav_eItemType_Command, menu_ePixmap_List, (void *) "show alarm"},
{ "Event list", xnav_eItemType_Command, menu_ePixmap_List, (void *) "show event"},
{ "Historical list", xnav_eItemType_Command, menu_ePixmap_List, (void *) "show hist"},
{ "", 0, 0, NULL}};
static xnav_sStartMenu nethandler_menu[] = {
{ "Link", xnav_eItemType_Command, (void *) "show link"},
{ "Subscription Client", xnav_eItemType_Command, (void *) "show subcli"},
{ "Subscription Server", xnav_eItemType_Command, (void *) "show subsrv"},
{ "", 0, NULL}};
{ "Link", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show link"},
{ "Subscription Client", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show subcli"},
{ "Subscription Server", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show subsrv"},
{ "", 0, 0, NULL}};
static xnav_sStartMenu communication_menu[] = {
{ "RemNode", xnav_eItemType_Command, (void *) "show remnode"},
{ "RemTrans", xnav_eItemType_Command, (void *) "show remtrans"},
{ "", 0, NULL}};
{ "RemNode", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show remnode"},
{ "RemTrans", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show remtrans"},
{ "", 0, 0, NULL}};
static xnav_sStartMenu logging_menu[] = {
{ "Logging entry 1", xnav_eItemType_Command, (void *) "show logging/entry=1"},
{ "Logging entry 2", xnav_eItemType_Command, (void *) "show logging/entry=2"},
{ "Logging entry 3", xnav_eItemType_Command, (void *) "show logging/entry=3"},
{ "Logging entry 4", xnav_eItemType_Command, (void *) "show logging/entry=4"},
{ "Logging entry 5", xnav_eItemType_Command, (void *) "show logging/entry=5"},
{ "Logging entry 6", xnav_eItemType_Command, (void *) "show logging/entry=6"},
{ "Logging entry 7", xnav_eItemType_Command, (void *) "show logging/entry=7"},
{ "Logging entry 8", xnav_eItemType_Command, (void *) "show logging/entry=8"},
{ "Logging entry 9", xnav_eItemType_Command, (void *) "show logging/entry=9"},
{ "Logging entry 10", xnav_eItemType_Command, (void *) "show logging/entry=10"},
{ "", 0, NULL}};
{ "Logging entry 1", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show logging/entry=1"},
{ "Logging entry 2", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show logging/entry=2"},
{ "Logging entry 3", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show logging/entry=3"},
{ "Logging entry 4", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show logging/entry=4"},
{ "Logging entry 5", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show logging/entry=5"},
{ "Logging entry 6", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show logging/entry=6"},
{ "Logging entry 7", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show logging/entry=7"},
{ "Logging entry 8", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show logging/entry=8"},
{ "Logging entry 9", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show logging/entry=9"},
{ "Logging entry 10", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show logging/entry=10"},
{ "", 0, 0, NULL}};
static xnav_sStartMenu system_menu[] = {
{ "Nethandler", xnav_eItemType_Menu, (void *)&nethandler_menu},
{ "Communication", xnav_eItemType_Menu, (void *)&communication_menu},
{ "Device", xnav_eItemType_Command, (void *) "show device"},
{ "PlcThread", xnav_eItemType_Command, (void *) "show plcthread"},
{ "PlcPgm", xnav_eItemType_Command, (void *) "show plcpgm"},
{ "Logging", xnav_eItemType_Menu, (void *)&logging_menu},
{ "System Messages", xnav_eItemType_Command, (void *) "open consolelog"},
{ "", 0, NULL}};
{ "Nethandler", xnav_eItemType_Menu, menu_ePixmap_Map, (void *)&nethandler_menu},
{ "Communication", xnav_eItemType_Menu, menu_ePixmap_Map, (void *)&communication_menu},
{ "Device", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show device"},
{ "PlcThread", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show plcthread"},
{ "PlcPgm", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show plcpgm"},
{ "Logging", xnav_eItemType_Menu, menu_ePixmap_Map, (void *)&logging_menu},
{ "System Messages", xnav_eItemType_Command, menu_ePixmap_List, (void *) "open consolelog"},
{ "System Status", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show nodeinfo"},
{ "Nodes", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show nodeobjects"},
{ "Volumes", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show volumes"},
{ "", 0, 0, NULL}};
static xnav_sStartMenu root_menu[] = {
{ "Database", xnav_eItemType_Command, (void *) "show database"},
{ "Alarm", xnav_eItemType_Menu, (void *)&alarm_menu},
{ "Store", xnav_eItemType_Command, (void *) "show file"},
{ "System", xnav_eItemType_Menu, (void *)&system_menu},
{ "Exit", xnav_eItemType_Command, (void *) "exit"},
{ "", 0, NULL}};
{ "Database", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show database"},
{ "Alarm", xnav_eItemType_Menu, menu_ePixmap_Map, (void *)&alarm_menu},
{ "Store", xnav_eItemType_Command, menu_ePixmap_Map, (void *) "show file"},
{ "System", xnav_eItemType_Menu, menu_ePixmap_Map, (void *)&system_menu},
{ "Close", xnav_eItemType_Command, menu_ePixmap_Leaf, (void *) "exit"},
{ "", 0, 0, NULL}};
......@@ -139,6 +144,7 @@ typedef struct xtt_sCtx {
Widget india_label;
Widget india_text;
void (*india_ok_cb)( struct xtt_sCtx *, char *);
FocusTimer focustimer;
} *xtt_tCtx;
static Xtt *hot_xtt;
......@@ -366,16 +372,24 @@ static void xtt_message( void *ctx, char severity, char *message)
XmStringFree( cstr);
}
static void xtt_close_ok( void *ctx, void *data)
{
Xtt *xtt = (Xtt *) ctx;
delete xtt->xnav;
exit(0);
}
static void xtt_close( void *ctx)
{
Xtt *xtt = (Xtt *) ctx;
if ( !xtt->xnav->op)
{
delete xtt->xnav;
exit(0);
if ( !xtt->xnav->op) {
wow_DisplayQuestion( xtt, xtt->toplevel, "Confirm",
"Do you want to close", xtt_close_ok, 0, 0);
// delete xtt->xnav;
// exit(0);
}
else
{
else {
xtt->xnav->displayed = 0;
flow_UnmapWidget( xtt->toplevel);
}
......@@ -555,6 +569,7 @@ static void xtt_activate_opengraph( Widget w, Xtt *xtt, XmAnyCallbackStruct *dat
int sts;
pwr_tClassId classid;
char name[120];
char vname[120];
char classname[80];
char filename[120];
char fname[120];
......@@ -580,12 +595,16 @@ static void xtt_activate_opengraph( Widget w, Xtt *xtt, XmAnyCallbackStruct *dat
name, sizeof(name), cdh_mNName);
if ( EVEN(sts)) return;
sts = gdh_ObjidToName( attrref.Objid,
vname, sizeof(vname), cdh_mName_volumeStrict);
if ( EVEN(sts)) return;
sts = gdh_GetObjectClass( attrref.Objid, &classid);
if ( EVEN(sts)) return;
if ( classid == pwr_cClass_DsTrend || classid == pwr_cClass_PlotGroup) {
// Open trend
sprintf( cmd, "open trend /name=%s /title=\"%s\"", name, name);
sprintf( cmd, "open trend /name=%s /title=\"%s\"", vname, name);
xtt->xnav->command( cmd);
return;
......@@ -616,7 +635,7 @@ static void xtt_activate_opengraph( Widget w, Xtt *xtt, XmAnyCallbackStruct *dat
}
}
sprintf( cmd, "open graph %s/inst=%s/name=\"%s\"",
filename, name, name);
filename, vname, name);
// Add scrollbars for some classes
switch ( classid) {
......@@ -790,8 +809,21 @@ static void xtt_action_inputfocus( Widget w, XmAnyCallbackStruct *data)
XtSetArg (args[0], XmNuserData, &xtt);
XtGetValues (w, args, 1);
if ( mrm_IsIconicState(w))
return;
if ( xtt->xnav) {
if ( xtt->focustimer.disabled()) {
// printf( "Inputfocus disabled\n");
return;
}
else {
// printf( "Set Inputfocus\n");
}
xtt->xnav->set_inputfocus();
xtt->focustimer.disable( xtt->toplevel, 400);
}
}
......
......@@ -38,6 +38,10 @@ extern "C" {
#include "xtt_xnav.h"
#endif
#ifndef xtt_focustimer_h
#include "xtt_focustimer.h"
#endif
class Xtt {
public:
Xtt( int argc, char *argv[], int *sts);
......@@ -65,6 +69,7 @@ class Xtt {
void (*india_ok_cb)( Xtt *, char *);
qcom_sQid queid;
XtIntervalId timerid;
FocusTimer focustimer;
};
#endif
......
......@@ -32,6 +32,7 @@ extern "C" {
#include "flow_x.h"
}
#include "co_lng.h"
#include "co_mrm_util.h"
#include "xtt_ev.h"
#include "rt_xnav_msg.h"
......@@ -392,8 +393,16 @@ static void ev_eve_action_inputfocus( Widget w, XmAnyCallbackStruct *data)
XtSetArg (args[0], XmNuserData, &ev);
XtGetValues (w, args, 1);
if ( ev && ev->eve_displayed)
if ( mrm_IsIconicState(w))
return;
if ( ev && ev->eve_displayed) {
if ( ev->eve_focustimer.disabled())
return;
ev->eve->set_input_focus();
ev->eve_focustimer.disable( ev->toplevel_eve, 400);
}
}
static void ev_ala_action_inputfocus( Widget w, XmAnyCallbackStruct *data)
......@@ -404,8 +413,16 @@ static void ev_ala_action_inputfocus( Widget w, XmAnyCallbackStruct *data)
XtSetArg (args[0], XmNuserData, &ev);
XtGetValues (w, args, 1);
if ( ev && ev->ala_displayed)
if ( mrm_IsIconicState(w))
return;
if ( ev && ev->ala_displayed) {
if ( ev->ala_focustimer.disabled())
return;
ev->ala->set_input_focus();
ev->ala_focustimer.disable( ev->toplevel_ala, 400);
}
}
static void ev_eve_activate_exit( Widget w, Ev *ev, XmAnyCallbackStruct *data)
......
......@@ -24,6 +24,10 @@ extern "C" {
# include "xtt_evlist.h"
#endif
#ifndef xtt_focustimer_h
# include "xtt_focustimer.h"
#endif
class Ev {
public:
Ev(
......@@ -68,6 +72,8 @@ class Ev {
int beep;
int eve_size;
int ala_size;
FocusTimer eve_focustimer;
FocusTimer ala_focustimer;
int outunit_connect( pwr_tObjid user);
void update( double scantime);
......@@ -84,3 +90,6 @@ class Ev {
};
#endif
#ifndef xtt_focustimer_h
#define xtt_focustimer_h
class FocusTimer {
public:
FocusTimer() : set_focus_disabled(0), request_cnt(0), focus_timerid(0) {
}
void disable( Widget w, int time) {
set_focus_disabled++;
request_cnt = 0;
focus_timerid = XtAppAddTimeOut( XtWidgetToApplicationContext(w), time,
enable_set_focus, this);
}
int disabled() {
// Return false on first request after disable
request_cnt++;
return (request_cnt > 1);
}
private:
int set_focus_disabled;
int request_cnt;
XtIntervalId focus_timerid;
static void enable_set_focus( void *ft, XtIntervalId *id) {
((FocusTimer *)ft)->set_focus_disabled--;
}
public:
~FocusTimer() {
if ( set_focus_disabled)
XtRemoveTimeOut( focus_timerid);
}
};
#endif
......@@ -358,6 +358,8 @@ extern "C" void ge_delete( ge_tCtx gectx)
{
if ( gectx->close_cb)
(gectx->close_cb)( gectx);
if ( gectx->set_focus_disabled)
XtRemoveTimeOut( gectx->focus_timerid);
delete (Graph *)((Graph *)gectx->graph);
XtDestroyWidget( gectx->toplevel);
free( (char *) gectx);
......
......@@ -74,10 +74,17 @@ ItemObject::ItemObject( XNavBrow *brow, pwr_tObjid item_objid,
if ( EVEN(sts)) throw co_error(sts);
if ( !is_root)
{
sts = gdh_ObjidToName( objid, segname, sizeof(segname), cdh_mName_object);
if ( objid.oix != 0) {
sts = gdh_ObjidToName( objid, segname, sizeof(segname), cdh_mName_object);
brow_CreateNode( brow->ctx, segname, brow->nc_object,
dest, dest_code, (void *) this, 1, &node);
}
else {
sts = gdh_VolumeIdToName( objid.vid, segname, sizeof(segname));
brow_CreateNode( brow->ctx, segname, brow->nc_table,
dest, dest_code, (void *) this, 1, &node);
}
if ( EVEN(sts)) throw co_error(sts);
brow_CreateNode( brow->ctx, segname, brow->nc_object,
dest, dest_code, (void *) this, 1, &node);
// Set pixmap
sts = gdh_GetChild( objid, &child);
......@@ -97,14 +104,31 @@ ItemObject::ItemObject( XNavBrow *brow, pwr_tObjid item_objid,
brow_SetAnnotation( node, 1, segname, strlen(segname));
// Set description annotation
sts = gdh_ObjidToName( objid, segname, sizeof(segname), cdh_mNName);
sts = gdh_ObjidToName( objid, segname, sizeof(segname), cdh_mName_volumeStrict);
if ( EVEN(sts)) throw co_error(sts);
strcat( segname, ".Description");
sts = gdh_GetObjectInfo( segname, descr, sizeof(descr));
if ( ODD(sts))
brow_SetAnnotation( node, 2, descr, strlen(descr));
if ( objid.oix != 0) {
strcat( segname, ".Description");
sts = gdh_GetObjectInfo( segname, descr, sizeof(descr));
if ( ODD(sts))
brow_SetAnnotation( node, 2, descr, strlen(descr));
}
else {
gdh_sVolumeInfo info;
sts = gdh_GetVolumeInfo( objid.vid, &info);
if ( ODD(sts)) {
time_AtoAscii( &info.time, time_eFormat_DateAndTime, descr, sizeof(descr));
strcat( descr, " ");
if ( info.isLoaded)
strcat( descr, "L");
if ( info.isCached)
strcat( descr, "C");
if ( info.isMounted)
strcat( descr, "M");
brow_SetAnnotation( node, 3, descr, strlen(descr));
}
}
}
}
......@@ -830,7 +854,12 @@ int ItemHelp::open_children( XNavBrow *brow, XNav *xnav, double x, double y)
}
else if ( strcmp( link, "") != 0)
{
if ( (strstr( link, ".htm") != 0) || (strstr( link, ".pdf") != 0)) {
if ( strncmp( link, "$web:", 5) == 0) {
// Open the url
xnav_open_URL( &link[5]);
}
else if ( (strstr( link, ".htm") != 0) ||
(strstr( link, ".pdf") != 0)) {
// Open the url
xnav_open_URL( link);
}
......@@ -882,7 +911,12 @@ int ItemHelpBold::open_children( XNavBrow *brow, XNav *xnav, double x, double y)
}
else if ( strcmp( link, "") != 0)
{
if ( (strstr( link, ".htm") != 0) || (strstr( link, ".pdf") != 0)) {
if ( strncmp( link, "$web:", 5) == 0) {
// Open the url
xnav_open_URL( &link[5]);
}
else if ( (strstr( link, ".htm") != 0) ||
(strstr( link, ".pdf") != 0)) {
// Open the url
xnav_open_URL( link);
}
......@@ -1111,29 +1145,48 @@ int ItemMenu::open_children( XNavBrow *brow, double x, double y)
// Display childlist
Item *item;
xnav_sMenu *menu;
flow_sAnnotPixmap *pixmap;
brow_SetNodraw( brow->ctx);
menu = *child_list;
while ( menu)
{
switch ( menu->item_type)
{
case xnav_eItemType_Menu:
item = (Item *) new ItemMenu( brow, menu->title, node,
flow_eDest_IntoLast, &menu->child_list,
0);
break;
case xnav_eItemType_Command:
item = (Item *) new ItemCommand( brow, menu->title, node,
flow_eDest_IntoLast, menu->command, 0,
brow->pixmap_map);
break;
default:
;
switch ( menu->pixmap) {
case menu_ePixmap_Map:
pixmap = brow->pixmap_map;
break;
case menu_ePixmap_Graph:
pixmap = brow->pixmap_graph;
break;
case menu_ePixmap_Script:
pixmap = brow->pixmap_script;
break;
case menu_ePixmap_List:
pixmap = brow->pixmap_list;
break;
case menu_ePixmap_Leaf:
pixmap = brow->pixmap_leaf;
break;
default:
pixmap = brow->pixmap_map;
}
switch ( menu->item_type) {
case xnav_eItemType_Menu:
item = (Item *) new ItemMenu( brow, menu->title, node,
flow_eDest_IntoLast, &menu->child_list,
0);
break;
case xnav_eItemType_Command:
item = (Item *) new ItemCommand( brow, menu->title, 0, node,
flow_eDest_IntoLast, menu->command, 0,
pixmap);
break;
default:
;
}
menu = menu->next;
if ( !is_root)
{
if ( !is_root) {
brow_SetOpen( node, xnav_mOpen_Children);
brow_SetAnnotPixmap( node, 0, brow->pixmap_openmap);
}
......@@ -1167,7 +1220,7 @@ int ItemMenu::close( XNavBrow *brow, double x, double y)
return 1;
}
ItemCommand::ItemCommand( XNavBrow *brow, char *item_name,
ItemCommand::ItemCommand( XNavBrow *brow, char *item_name, char *item_text,
brow_tNode dest, flow_eDest dest_code, char *item_command,
int item_is_root, flow_sAnnotPixmap *pixmap) :
Item( pwr_cNObjid, item_is_root)
......@@ -1185,6 +1238,8 @@ ItemCommand::ItemCommand( XNavBrow *brow, char *item_name,
brow_SetAnnotPixmap( node, 0, pixmap);
// Set object name annotation
brow_SetAnnotation( node, 0, name, strlen(name));
if ( item_text != 0)
brow_SetAnnotation( node, 1, item_text, strlen(item_text));
}
}
......
......@@ -265,18 +265,18 @@ class ItemCollect : public ItemBaseAttr {
};
class ItemMenu : public Item {
public:
ItemMenu( XNavBrow *brow, char *item_name,
public:
ItemMenu( XNavBrow *brow, char *item_name,
brow_tNode dest, flow_eDest dest_code, xnav_sMenu **item_child_list,
int item_is_root);
xnav_sMenu **child_list;
int open_children( XNavBrow *brow, double x, double y);
int close( XNavBrow *brow, double x, double y);
xnav_sMenu **child_list;
int open_children( XNavBrow *brow, double x, double y);
int close( XNavBrow *brow, double x, double y);
};
class ItemCommand : public Item {
public:
ItemCommand( XNavBrow *brow, char *item_name,
ItemCommand( XNavBrow *brow, char *item_name, char *item_text,
brow_tNode dest, flow_eDest dest_code, char *item_command,
int item_is_root, flow_sAnnotPixmap *pixmap);
char command[200];
......
......@@ -2658,28 +2658,28 @@ int XNav::show_logging( int index)
(void *) &logg[index].active, NULL, flow_eDest_IntoLast);
sprintf( command, "logging set/insert/entry=%d", entry);
new ItemCommand( brow, Lng::translate("Insert"), NULL,
new ItemCommand( brow, Lng::translate("Insert"), 0, NULL,
flow_eDest_IntoLast, command, 0, brow->pixmap_action);
sprintf( command, "logging start/entry=%d", entry);
new ItemCommand( brow, Lng::translate("Start"), NULL,
new ItemCommand( brow, Lng::translate("Start"), 0, NULL,
flow_eDest_IntoLast, command, 0, brow->pixmap_action);
sprintf( command, "logging stop/entry=%d", entry);
new ItemCommand( brow, Lng::translate("Stop"), NULL,
new ItemCommand( brow, Lng::translate("Stop"), 0, NULL,
flow_eDest_IntoLast, command, 0, brow->pixmap_action);
sprintf( command, "logging store/entry=%d/file=rtt_store_logg%d.rtt_com",
entry, entry);
new ItemCommand( brow, Lng::translate("Store"), NULL,
new ItemCommand( brow, Lng::translate("Store"), 0, NULL,
flow_eDest_IntoLast, command, 0, brow->pixmap_action);
sprintf( command, "@rtt_store_logg%d", entry);
new ItemCommand( brow, Lng::translate("Restore"), NULL,
new ItemCommand( brow, Lng::translate("Restore"), 0, NULL,
flow_eDest_IntoLast, command, 0, brow->pixmap_action);
sprintf( command, "open loggfile/entry=current");
new ItemCommand( brow, Lng::translate("ShowFile"), NULL,
new ItemCommand( brow, Lng::translate("ShowFile"), 0, NULL,
flow_eDest_IntoLast, command, 0, brow->pixmap_action);
new ItemLocal( brow, Lng::translate("Time (ms)"), "logg_Time",
......@@ -2944,6 +2944,7 @@ xnav_sMenu *XNav::menu_tree_build_children( xnav_sStartMenu *first_child,
menu_p->item_type = start_menu_p->item_type;
strcpy( menu_p->title, Lng::translate(start_menu_p->title));
strcpy( menu_p->command, (char *)start_menu_p->action);
menu_p->pixmap = (menu_ePixmap) start_menu_p->pixmap;
if ( first)
{
return_menu = menu_p;
......@@ -3024,7 +3025,7 @@ int XNav::menu_tree_delete( char *name)
return 1;
}
int XNav::menu_tree_insert( char *title, int item_type, char *command,
int XNav::menu_tree_insert( char *title, int item_type, char *command, menu_ePixmap pixmap,
char *destination, int dest_code, xnav_sMenu **menu_item)
{
xnav_sMenu *dest_item;
......@@ -3045,12 +3046,14 @@ int XNav::menu_tree_insert( char *title, int item_type, char *command,
menu_p->item_type = item_type;
strcpy( menu_p->title, title);
strcpy( menu_p->command, command);
menu_p->pixmap = pixmap;
break;
case xnav_eItemType_Menu:
default:
menu_p = (xnav_sMenu *) calloc( 1, sizeof(xnav_sMenu));
menu_p->item_type = item_type;
strcpy( menu_p->title, title);
menu_p->pixmap = pixmap;
}
if ( !destination)
......@@ -3267,7 +3270,7 @@ static int xnav_init_brow_base_cb( FlowCtx *fctx, void *client_data)
xnav->enable_events( xnav->brow);
// Create the root item
xnav->root_item = new ItemMenu( xnav->brow, "Root",
xnav->root_item = new ItemMenu( xnav->brow, "Root",
NULL, flow_eDest_After, &xnav->menu_tree, 1);
// Open the root item
......
......@@ -115,9 +115,18 @@ typedef enum {
xnav_eSearchType_RegularExpr
} xnav_eSearchType;
typedef enum {
menu_ePixmap_Map,
menu_ePixmap_Graph,
menu_ePixmap_Script,
menu_ePixmap_List,
menu_ePixmap_Leaf
} menu_ePixmap;
typedef struct {
char title[80];
int item_type;
int pixmap;
void *action;
} xnav_sStartMenu;
......@@ -125,6 +134,7 @@ typedef struct xnav_s_Menu {
char title[80];
int item_type;
char command[256];
menu_ePixmap pixmap;
struct xnav_s_Menu *child_list;
struct xnav_s_Menu *parent;
struct xnav_s_Menu *next;
......@@ -319,7 +329,7 @@ class XNav {
int menu_tree_search( char *name, xnav_sMenu **menu_item);
int menu_tree_search_children( char *name, xnav_sMenu *child_list,
xnav_sMenu **menu_item);
int menu_tree_insert( char *title, int item_type, char *command,
int menu_tree_insert( char *title, int item_type, char *command, menu_ePixmap pixmap,
char *destination, int dest_code, xnav_sMenu **menu_item);
int menu_tree_delete( char *name);
void pop();
......
......@@ -115,6 +115,7 @@ extern "C" {
#include "xnav_bitmap_crrread12.h"
#include "xnav_bitmap_crrwrite12.h"
#include "xnav_bitmap_script12.h"
#include "xnav_bitmap_list12.h"
#include "xnav_bitmap_graph12.h"
#include "xnav_bitmap_curve12.h"
#include "xnav_bitmap_file12.h"
......@@ -151,6 +152,7 @@ void XNavBrow::free_pixmaps()
brow_FreeAnnotPixmap( ctx, pixmap_crrread);
brow_FreeAnnotPixmap( ctx, pixmap_crrwrite);
brow_FreeAnnotPixmap( ctx, pixmap_script);
brow_FreeAnnotPixmap( ctx, pixmap_list);
brow_FreeAnnotPixmap( ctx, pixmap_file);
brow_FreeAnnotPixmap( ctx, pixmap_graph);
brow_FreeAnnotPixmap( ctx, pixmap_curve);
......@@ -506,6 +508,15 @@ void XNavBrow::allocate_pixmaps()
brow_AllocAnnotPixmap( ctx, &pixmap_data, &pixmap_script);
for ( i = 0; i < 9; i++)
{
pixmap_data[i].width =xnav_bitmap_list12_width;
pixmap_data[i].height =xnav_bitmap_list12_height;
pixmap_data[i].bits = (char *)xnav_bitmap_list12_bits;
}
brow_AllocAnnotPixmap( ctx, &pixmap_data, &pixmap_list);
for ( i = 0; i < 9; i++)
{
pixmap_data[i].width =xnav_bitmap_graph12_width;
......
......@@ -42,6 +42,7 @@ class XNavBrow {
flow_sAnnotPixmap *pixmap_crrread;
flow_sAnnotPixmap *pixmap_crrwrite;
flow_sAnnotPixmap *pixmap_script;
flow_sAnnotPixmap *pixmap_list;
flow_sAnnotPixmap *pixmap_graph;
flow_sAnnotPixmap *pixmap_curve;
flow_sAnnotPixmap *pixmap_action;
......
......@@ -176,7 +176,7 @@ dcli_tCmdTable xnav_command_table[] = {
&xnav_create_func,
{ "dcli_arg1", "/TEXT", "/MENU", "/DESTINATION",
"/COMMAND", "/AFTER", "/BEFORE", "/FIRSTCHILD",
"/LASTCHILD", "/CLASS", "/NAME",
"/LASTCHILD", "/CLASS", "/NAME", "/PIXMAP",
""}
},
{
......@@ -1529,6 +1529,119 @@ static int xnav_show_func( void *client_data,
xnav->message('I', msg);
}
}
else if ( strncmp( arg1_str, "VOLUMES", strlen( arg1_str)) == 0)
{
/* Command is "SHOW VOLUMES" */
pwr_tVid vid;
pwr_tOid oid;
pwr_tStatus nsts;
int volume_cnt = 0;
Item *item;
sts = gdh_GetVolumeList( &vid);
while ( ODD(sts)) {
oid.oix = 0;
oid.vid = vid;
if ( !volume_cnt) {
xnav->brow_pop();
brow_SetNodraw( xnav->brow->ctx);
}
nsts = xnav->create_object_item( oid, NULL, flow_eDest_IntoLast, (void **)&item, 0);
volume_cnt++;
sts = gdh_GetNextVolume( vid, &vid);
}
brow_ResetNodraw( xnav->brow->ctx);
brow_Redraw( xnav->brow->ctx, 0);
}
else if ( strncmp( arg1_str, "NODEOBJECTS", strlen( arg1_str)) == 0)
{
/* Command is "SHOW NODEOBJECTS" */
pwr_tVid vid;
pwr_tOid oid;
pwr_tStatus nsts;
int node_cnt = 0;
Item *item;
gdh_sVolumeInfo info;
for ( sts = gdh_GetVolumeList( &vid);
ODD(sts);
sts = gdh_GetNextVolume( vid, &vid)) {
sts = gdh_GetVolumeInfo( vid, &info);
if ( EVEN(sts)) continue;
if ( info.cid != pwr_eClass_RootVolume || info.nid == 0)
continue;
sts = gdh_GetNodeObject( info.nid, &oid);
if ( EVEN(sts)) continue;
if ( !node_cnt) {
xnav->brow_pop();
brow_SetNodraw( xnav->brow->ctx);
}
nsts = xnav->create_object_item( oid, NULL, flow_eDest_IntoLast, (void **)&item, 0);
node_cnt++;
}
brow_ResetNodraw( xnav->brow->ctx);
brow_Redraw( xnav->brow->ctx, 0);
}
else if ( strncmp( arg1_str, "NODEINFO", strlen( arg1_str)) == 0)
{
/* Command is "SHOW NODEINFO" */
pwr_tVid vid;
pwr_tOid oid;
int node_cnt = 0;
Item *item;
gdh_sVolumeInfo info;
char name[80];
char vname[120];
char cmd[200];
char descr[120];
char *descr_p;
for ( sts = gdh_GetVolumeList( &vid);
ODD(sts);
sts = gdh_GetNextVolume( vid, &vid)) {
sts = gdh_GetVolumeInfo( vid, &info);
if ( EVEN(sts)) continue;
if ( info.cid != pwr_eClass_RootVolume || info.nid == 0)
continue;
sts = gdh_GetNodeObject( info.nid, &oid);
if ( EVEN(sts)) continue;
if ( !node_cnt) {
xnav->brow_pop();
brow_SetNodraw( xnav->brow->ctx);
}
sts = gdh_ObjidToName( oid, name, sizeof(name), cdh_mName_object);
if ( EVEN(sts)) return sts;
sts = gdh_ObjidToName( oid, vname, sizeof(vname), cdh_mName_volumeStrict);
if ( EVEN(sts)) return sts;
sprintf( cmd, "open graph/class/inst=%s", vname);
// Set description annotation
strcat( vname, ".Description");
sts = gdh_GetObjectInfo( vname, descr, sizeof(descr));
if ( ODD(sts))
descr_p = descr;
else
descr_p = 0;
item = (Item *) new ItemCommand( xnav->brow, name, descr, NULL,
flow_eDest_IntoLast, cmd, 0,
xnav->brow->pixmap_list);
node_cnt++;
}
brow_ResetNodraw( xnav->brow->ctx);
brow_Redraw( xnav->brow->ctx, 0);
}
else
{
/* This might be a system picture */
......@@ -1808,7 +1921,7 @@ static int xnav_add_func( void *client_data,
if ( object)
new ItemObject( xnav->brow, objid, NULL, flow_eDest_IntoLast, 0);
else if ( command)
new ItemCommand( xnav->brow, text_str, NULL,
new ItemCommand( xnav->brow, text_str, 0, NULL,
flow_eDest_IntoLast, command_str, 0, xnav->brow->pixmap_map);
// else
// new ItemMenu( xnav->brow, text_str, NULL,
......@@ -2808,6 +2921,8 @@ static int xnav_create_func( void *client_data,
char destination_str[80];
char command_str[80];
char tmp_str[80];
char pixmap_str[80];
menu_ePixmap pixmap;
int dest_code;
int item_type;
xnav_sMenu *menu_item;
......@@ -2846,7 +2961,24 @@ static int xnav_create_func( void *client_data,
else
dest_code = xnav_eDestCode_After;
sts = xnav->menu_tree_insert( text_str, item_type, command_str,
if ( ODD( dcli_get_qualifier( "/PIXMAP", pixmap_str))) {
if ( strcmp( pixmap_str, "MAP") == 0)
pixmap = menu_ePixmap_Map;
else if ( strcmp( pixmap_str, "GRAPH") == 0)
pixmap = menu_ePixmap_Graph;
else if ( strcmp( pixmap_str, "SCRIPT") == 0)
pixmap = menu_ePixmap_Script;
else if ( strcmp( pixmap_str, "LIST") == 0)
pixmap = menu_ePixmap_List;
else if ( strcmp( pixmap_str, "LEAF") == 0)
pixmap = menu_ePixmap_Leaf;
else
pixmap = menu_ePixmap_Map;
}
else
pixmap = menu_ePixmap_Map;
sts = xnav->menu_tree_insert( text_str, item_type, command_str, pixmap,
destination_str, dest_code, &menu_item);
if ( EVEN(sts))
xnav->message('E',"Destination not found");
......@@ -5008,7 +5140,7 @@ int XNav::show_symbols()
brow_SetNodraw( brow->ctx);
new ItemHeader( brow, "Title", "Symbols", NULL, flow_eDest_IntoLast);
}
new ItemCommand( brow, text, NULL,
new ItemCommand( brow, text, 0, NULL,
flow_eDest_IntoLast, key, 0, brow->pixmap_symbol);
i++;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment