Commit 501b6be2 authored by claes's avatar claes

Next and prevous topic added, and new toolbar in helpwindow

parent 6788c995
/**
* Proview $Id: co_xhelp_gtk.cpp,v 1.2 2007-02-05 09:28:43 claes Exp $
* Proview $Id: co_xhelp_gtk.cpp,v 1.3 2008-02-27 06:24:37 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -66,6 +66,27 @@ void CoXHelpGtk::activate_close( GtkWidget *w, gpointer data)
// delete xhelp;
}
void CoXHelpGtk::activate_back( GtkWidget *w, gpointer data)
{
CoXHelpGtk *xhelp = (CoXHelpGtk *)data;
xhelp->back();
}
void CoXHelpGtk::activate_nexttopic( GtkWidget *w, gpointer data)
{
CoXHelpGtk *xhelp = (CoXHelpGtk *)data;
xhelp->next_topic();
}
void CoXHelpGtk::activate_previoustopic( GtkWidget *w, gpointer data)
{
CoXHelpGtk *xhelp = (CoXHelpGtk *)data;
xhelp->previous_topic();
}
void CoXHelpGtk::activate_zoom_in( GtkWidget *w, gpointer data)
{
CoXHelpGtk *xhelp = (CoXHelpGtk *)data;
......@@ -214,6 +235,7 @@ CoXHelpGtk::CoXHelpGtk(
{
int sts;
char title[80];
pwr_tFileName fname;
strcpy( title, Lng::translate("Help"));
......@@ -235,13 +257,35 @@ CoXHelpGtk::CoXHelpGtk(
gtk_window_add_accel_group(GTK_WINDOW(toplevel), accel_g);
GtkMenuBar *menu_bar = (GtkMenuBar *) g_object_new(GTK_TYPE_MENU_BAR, NULL);
GtkToolbar *tools = (GtkToolbar *) g_object_new(GTK_TYPE_TOOLBAR, NULL);
// File entry
GtkWidget *file_close = gtk_image_menu_item_new_from_stock(GTK_STOCK_CLOSE, accel_g);
g_signal_connect(file_close, "activate", G_CALLBACK(CoXHelpGtk::activate_close), this);
GtkWidget *file_back = gtk_menu_item_new_with_mnemonic( "_Back");
g_signal_connect( file_back, "activate",
G_CALLBACK(activate_back), this);
gtk_widget_add_accelerator( file_back, "activate", accel_g,
'b', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
GtkWidget *file_nexttopic = gtk_menu_item_new_with_mnemonic( "_Next Topic");
g_signal_connect( file_nexttopic, "activate",
G_CALLBACK(activate_nexttopic), this);
gtk_widget_add_accelerator( file_nexttopic, "activate", accel_g,
'n', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
GtkWidget *file_prevtopic = gtk_menu_item_new_with_mnemonic( "_Previous Topic");
g_signal_connect( file_prevtopic, "activate",
G_CALLBACK(activate_previoustopic), this);
gtk_widget_add_accelerator( file_prevtopic, "activate", accel_g,
'p', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
GtkMenu *file_menu = (GtkMenu *) g_object_new( GTK_TYPE_MENU, NULL);
gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), file_close);
gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), file_back);
gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), file_nexttopic);
gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), file_prevtopic);
GtkWidget *file = gtk_menu_item_new_with_mnemonic("_File");
gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), file);
......@@ -306,6 +350,58 @@ CoXHelpGtk::CoXHelpGtk(
gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), help);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(help), GTK_WIDGET(help_menu));
// Toolbar
GtkWidget *tools_back = gtk_button_new();
dcli_translate_filename( fname, "$pwr_exe/xtt_back.png");
gtk_container_add( GTK_CONTAINER(tools_back),
gtk_image_new_from_file( fname));
g_signal_connect(tools_back, "clicked", G_CALLBACK(activate_back), this);
g_object_set( tools_back, "can-focus", FALSE, NULL);
gtk_toolbar_append_widget( tools, tools_back,CoWowGtk::translate_utf8("Go back"), "");
GtkWidget *tools_previous = gtk_button_new();
dcli_translate_filename( fname, "$pwr_exe/xtt_previous.png");
gtk_container_add( GTK_CONTAINER(tools_previous),
gtk_image_new_from_file( fname));
g_signal_connect(tools_previous, "clicked", G_CALLBACK(activate_previoustopic), this);
g_object_set( tools_previous, "can-focus", FALSE, NULL);
gtk_toolbar_append_widget( tools, tools_previous,CoWowGtk::translate_utf8("Previous topic"), "");
GtkWidget *tools_next = gtk_button_new();
dcli_translate_filename( fname, "$pwr_exe/xtt_next.png");
gtk_container_add( GTK_CONTAINER(tools_next),
gtk_image_new_from_file( fname));
g_signal_connect(tools_next, "clicked", G_CALLBACK(activate_nexttopic), this);
g_object_set( tools_next, "can-focus", FALSE, NULL);
gtk_toolbar_append_widget( tools, tools_next,CoWowGtk::translate_utf8("Next topic"), "");
GtkWidget *tools_zoom_in = gtk_button_new();
dcli_translate_filename( fname, "$pwr_exe/xtt_zoom_in.png");
gtk_container_add( GTK_CONTAINER(tools_zoom_in),
gtk_image_new_from_file( fname));
g_signal_connect(tools_zoom_in, "clicked", G_CALLBACK(activate_zoom_in), this);
g_object_set( tools_zoom_in, "can-focus", FALSE, NULL);
gtk_toolbar_append_widget( tools, tools_zoom_in,CoWowGtk::translate_utf8("Zoom in"), "");
GtkWidget *tools_zoom_out = gtk_button_new();
dcli_translate_filename( fname, "$pwr_exe/xtt_zoom_out.png");
gtk_container_add( GTK_CONTAINER(tools_zoom_out),
gtk_image_new_from_file( fname));
g_signal_connect(tools_zoom_out, "clicked", G_CALLBACK(activate_zoom_out), this);
g_object_set( tools_zoom_out, "can-focus", FALSE, NULL);
gtk_toolbar_append_widget( tools, tools_zoom_out,CoWowGtk::translate_utf8("Zoom out"), "");
GtkWidget *tools_zoom_reset = gtk_button_new();
dcli_translate_filename( fname, "$pwr_exe/xtt_zoom_reset.png");
gtk_container_add( GTK_CONTAINER(tools_zoom_reset),
gtk_image_new_from_file( fname));
g_signal_connect(tools_zoom_reset, "clicked", G_CALLBACK(activate_zoom_reset), this);
g_object_set( tools_zoom_reset, "can-focus", FALSE, NULL);
gtk_toolbar_append_widget( tools, tools_zoom_reset,CoWowGtk::translate_utf8("Zoom reset"), "");
GtkWidget *vbox = gtk_vbox_new( FALSE, 0);
xhelpnav = new CoXHelpNavGtk( (void *)this, vbox, title, utility, &brow_widget,
......@@ -313,6 +409,7 @@ CoXHelpGtk::CoXHelpGtk(
xhelpnav->open_URL_cb = CoXHelp::open_URL;
gtk_box_pack_start( GTK_BOX(vbox), GTK_WIDGET(menu_bar), FALSE, FALSE, 0);
gtk_box_pack_start( GTK_BOX(vbox), GTK_WIDGET(tools), FALSE, FALSE, 0);
gtk_box_pack_start( GTK_BOX(vbox), GTK_WIDGET(brow_widget), TRUE, TRUE, 0);
gtk_container_add( GTK_CONTAINER(toplevel), vbox);
......
/**
* Proview $Id: co_xhelp_gtk.h,v 1.1 2007-01-04 07:51:41 claes Exp $
* Proview $Id: co_xhelp_gtk.h,v 1.2 2008-02-27 06:24:37 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -53,6 +53,9 @@ class CoXHelpGtk : public CoXHelp {
char *init_text,
void (*ok_cb)( CoXHelp *, char *));
static void activate_close( GtkWidget *w, gpointer data);
static void activate_back( GtkWidget *w, gpointer data);
static void activate_nexttopic( GtkWidget *w, gpointer data);
static void activate_previoustopic( GtkWidget *w, gpointer data);
static void activate_zoom_in( GtkWidget *w, gpointer data);
static void activate_zoom_out( GtkWidget *w, gpointer data);
static void activate_zoom_reset( GtkWidget *w, gpointer data);
......
/**
* Proview $Id: co_nav_help.cpp,v 1.10 2006-02-23 14:35:42 claes Exp $
* Proview $Id: co_nav_help.cpp,v 1.11 2008-02-27 06:24:37 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -152,8 +152,10 @@ int NavHelp::help( char *help_key, char *help_bookmark,
dcli_get_defaultfilename( base_file, filestr, NULL);
else if ( file_type == navh_eHelpFile_Project)
dcli_get_defaultfilename( project_file, filestr, NULL);
else
else if ( file_name)
dcli_get_defaultfilename( file_name, filestr, NULL);
else
dcli_get_defaultfilename( base_file, filestr, NULL);
// Replace symbol for language
if ( strncmp( filestr, "$pwr_lang/", 10) == 0) {
......@@ -556,6 +558,230 @@ int NavHelp::help( char *help_key, char *help_bookmark,
}
int NavHelp::get_next_key( char *help_key, navh_eHelpFile file_type, char *file_name,
bool strict, char *next_key)
{
char filestr[200];
FILE *file;
char line[200];
char key[80];
char key_part[4][40];
char include_file[80];
char subject[80];
char subject_part[4][40];
int key_nr;
int subject_nr;
int hit = 0;
int next_hit = 0;
int sts;
int i;
char *s;
if ( help_key) {
cdh_ToLower( key, help_key);
}
// Open file
if ( file_type == navh_eHelpFile_Base)
dcli_get_defaultfilename( base_file, filestr, NULL);
else if ( file_type == navh_eHelpFile_Project)
dcli_get_defaultfilename( project_file, filestr, NULL);
else if ( file_name)
dcli_get_defaultfilename( file_name, filestr, NULL);
else
dcli_get_defaultfilename( base_file, filestr, NULL);
// Replace symbol for language
if ( strncmp( filestr, "$pwr_lang/", 10) == 0) {
char lng_filestr[200];
sprintf( lng_filestr, "$pwr_exe/%s/%s", Lng::get_language_str(),
&filestr[10]);
strcpy( filestr, lng_filestr);
}
dcli_translate_filename( filestr, filestr);
file = fopen( filestr, "r");
if ( file == 0)
return NAV__NOFILE;
key_nr = dcli_parse( key, " ", "", (char *)key_part,
sizeof( key_part) / sizeof( key_part[0]),
sizeof( key_part[0]), 0);
sts = dcli_read_line( line, sizeof( line), file);
while ( ODD(sts)) {
if ( cdh_NoCaseStrncmp( line, "<include>", 9) == 0) {
help_remove_spaces( &line[9], include_file);
// Replace symbol for language
if ( strncmp( include_file, "$pwr_lang/", 10) == 0) {
char lng_include_file[200];
sprintf( lng_include_file, "$pwr_exe/%s/%s", Lng::get_language_str(),
&include_file[10]);
strcpy( include_file, lng_include_file);
}
if ( !noprop) {
sts = get_next_key( help_key, navh_eHelpFile_Other,
include_file, strict, next_key);
if ( ODD(sts)) {
fclose( file);
return sts;
}
}
hit = 0;
}
if ( cdh_NoCaseStrncmp( line, "<topic>", 7) == 0) {
if ( (s = strstr( line, "<style>")) || (s = strstr( line, "<STYLE>"))) {
*s = 0;
}
help_remove_spaces( &line[7], subject);
if ( hit) {
strcpy( next_key, subject);
next_hit = 1;
break;
}
cdh_ToLower( subject, subject);
subject_nr = dcli_parse( subject, " ", "", (char *)subject_part,
sizeof( subject_part) / sizeof( subject_part[0]),
sizeof( subject_part[0]), 0);
if ( key_nr == subject_nr ) {
for ( i = 0; i < key_nr; i++) {
if ( (!strict && strncmp( subject_part[i], key_part[i], strlen(key_part[i])) == 0) ||
(strict && strcmp( subject_part[i], key_part[i]) == 0)) {
if ( i == key_nr - 1)
hit = 1;
}
else
break;
}
}
}
sts = dcli_read_line( line, sizeof( line), file);
}
fclose( file);
if ( !next_hit)
return NAV__TOPICNOTFOUND;
return NAV__SUCCESS;
}
int NavHelp::get_previous_key( char *help_key, navh_eHelpFile file_type, char *file_name,
bool strict, char *prev_key)
{
char filestr[200];
FILE *file;
char line[200];
char key[80];
char key_part[4][40];
char include_file[80];
char subject[80];
char subject_part[4][40];
int key_nr;
int subject_nr;
int hit = 0;
int sts;
int i;
char *s;
char prev[80] = "";
if ( help_key) {
cdh_ToLower( key, help_key);
}
// Open file
if ( file_type == navh_eHelpFile_Base)
dcli_get_defaultfilename( base_file, filestr, NULL);
else if ( file_type == navh_eHelpFile_Project)
dcli_get_defaultfilename( project_file, filestr, NULL);
else if ( file_name)
dcli_get_defaultfilename( file_name, filestr, NULL);
else
dcli_get_defaultfilename( base_file, filestr, NULL);
// Replace symbol for language
if ( strncmp( filestr, "$pwr_lang/", 10) == 0) {
char lng_filestr[200];
sprintf( lng_filestr, "$pwr_exe/%s/%s", Lng::get_language_str(),
&filestr[10]);
strcpy( filestr, lng_filestr);
}
dcli_translate_filename( filestr, filestr);
file = fopen( filestr, "r");
if ( file == 0)
return NAV__NOFILE;
key_nr = dcli_parse( key, " ", "", (char *)key_part,
sizeof( key_part) / sizeof( key_part[0]),
sizeof( key_part[0]), 0);
sts = dcli_read_line( line, sizeof( line), file);
while ( ODD(sts)) {
if ( cdh_NoCaseStrncmp( line, "<include>", 9) == 0) {
help_remove_spaces( &line[9], include_file);
// Replace symbol for language
if ( strncmp( include_file, "$pwr_lang/", 10) == 0) {
char lng_include_file[200];
sprintf( lng_include_file, "$pwr_exe/%s/%s", Lng::get_language_str(),
&include_file[10]);
strcpy( include_file, lng_include_file);
}
if ( !noprop) {
sts = get_next_key( help_key, navh_eHelpFile_Other,
include_file, strict, prev_key);
if ( ODD(sts)) {
fclose( file);
return sts;
}
}
hit = 0;
}
if ( cdh_NoCaseStrncmp( line, "<topic>", 7) == 0) {
if ( (s = strstr( line, "<style>")) || (s = strstr( line, "<STYLE>"))) {
*s = 0;
}
help_remove_spaces( &line[7], subject);
cdh_ToLower( subject, subject);
subject_nr = dcli_parse( subject, " ", "", (char *)subject_part,
sizeof( subject_part) / sizeof( subject_part[0]),
sizeof( subject_part[0]), 0);
if ( key_nr == subject_nr ) {
for ( i = 0; i < key_nr; i++) {
if ( (!strict && strncmp( subject_part[i], key_part[i], strlen(key_part[i])) == 0) ||
(strict && strcmp( subject_part[i], key_part[i]) == 0)) {
if ( i == key_nr - 1) {
hit = 1;
strcpy( prev_key, prev);
}
}
else
break;
}
}
if ( hit)
break;
strcpy( prev, subject);
}
sts = dcli_read_line( line, sizeof( line), file);
}
fclose( file);
if ( !hit || strcmp( prev, "") == 0)
return NAV__TOPICNOTFOUND;
return NAV__SUCCESS;
}
int NavHelp::help_index( navh_eHelpFile file_type, char *file_name)
{
char filestr[80];
......@@ -571,8 +797,10 @@ int NavHelp::help_index( navh_eHelpFile file_type, char *file_name)
dcli_get_defaultfilename( base_file, filestr, NULL);
else if ( file_type == navh_eHelpFile_Project)
dcli_get_defaultfilename( project_file, filestr, NULL);
else
else if ( file_name)
dcli_get_defaultfilename( file_name, filestr, NULL);
else
dcli_get_defaultfilename( base_file, filestr, NULL);
if ( strncmp( filestr, "$pwr_lang/", 10) == 0) {
char lng_file[200];
......
/**
* Proview $Id: co_nav_help.h,v 1.7 2005-09-01 14:57:52 claes Exp $
* Proview $Id: co_nav_help.h,v 1.8 2008-02-27 06:24:37 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -75,6 +75,10 @@ class NavHelp {
int help( char *key, char *help_bookmark, navh_eHelpFile file_type,
char *file_name, void **bookmark, bool strict = false);
int get_next_key( char *help_key, navh_eHelpFile file_type, char *file_name,
bool strict, char *next_key);
int get_previous_key( char *help_key, navh_eHelpFile file_type, char *file_name,
bool strict, char *prev_key);
int help_index( navh_eHelpFile file_type, char *file_name);
void set_propagate( int prop) { noprop = !prop;}
};
......
/**
* Proview $Id: co_xhelp.cpp,v 1.9 2007-02-07 15:45:44 claes Exp $
* Proview $Id: co_xhelp.cpp,v 1.10 2008-02-27 06:24:37 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -74,6 +74,21 @@ int CoXHelp::help( char *key, char *help_bookmark, navh_eHelpFile file_type,
file_name, 0, strict);
}
int CoXHelp::back()
{
return xhelpnav->back();
}
int CoXHelp::next_topic()
{
return xhelpnav->next_topic();
}
int CoXHelp::previous_topic()
{
return xhelpnav->previous_topic();
}
//
// Static function to call help for the default xhelp
//
......
/**
* Proview $Id: co_xhelp.h,v 1.7 2007-01-04 07:51:42 claes Exp $
* Proview $Id: co_xhelp.h,v 1.8 2008-02-27 06:24:37 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -54,6 +54,9 @@ class CoXHelp {
int help( char *key, char *help_bookmark, navh_eHelpFile file_type,
char *file_name, bool strict);
int help_index( navh_eHelpFile file_type, char *file_name);
int back();
int next_topic();
int previous_topic();
static void set_default( CoXHelp *xhelp) { default_xhelp = xhelp;}
static int dhelp( char *key, char *help_bookmark, navh_eHelpFile file_type,
char *file_name, bool strict);
......
/**
* Proview $Id: co_xhelpnav.cpp,v 1.11 2007-02-07 15:45:44 claes Exp $
* Proview $Id: co_xhelpnav.cpp,v 1.12 2008-02-27 06:24:37 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -376,10 +376,12 @@ static int xhelpnav_brow_cb( FlowCtx *ctx, flow_tEvent event)
free( node_list);
break;
}
case flow_eEvent_Key_ShiftDown:
case flow_eEvent_Key_PageDown: {
brow_Page( xhelpnav->brow->ctx, 0.95);
break;
}
case flow_eEvent_Key_ShiftUp:
case flow_eEvent_Key_PageUp: {
brow_Page( xhelpnav->brow->ctx, -0.95);
break;
......@@ -396,16 +398,35 @@ static int xhelpnav_brow_cb( FlowCtx *ctx, flow_tEvent event)
case flow_eEvent_Key_Right:
{
brow_tNode *node_list;
brow_tNode first;
int node_count;
pwr_tStatus sts;
brow_GetSelectedNodes( xhelpnav->brow->ctx, &node_list, &node_count);
if ( !node_count)
break;
brow_GetUserData( node_list[0], (void **)&item);
sts = brow_GetFirst( xhelpnav->brow->ctx, &first);
if ( ODD(sts) && first == node_list[0]) {
xhelpnav->next_topic();
free( node_list);
break;
}
item->doubleclick_action( xhelpnav->brow, xhelpnav, 0, 0);
break;
}
case flow_eEvent_Key_ShiftRight:
{
xhelpnav->next_topic();
break;
}
case flow_eEvent_Key_ShiftLeft:
{
xhelpnav->previous_topic();
break;
}
case flow_eEvent_Key_Left:
{
brow_tNode *node_list;
......@@ -578,6 +599,14 @@ void CoXHelpNav::enable_events( CoXHelpNavBrow *brow)
xhelpnav_brow_cb);
brow_EnableEvent( brow->ctx, flow_eEvent_Key_Left, flow_eEventType_CallBack,
xhelpnav_brow_cb);
brow_EnableEvent( brow->ctx, flow_eEvent_Key_ShiftRight, flow_eEventType_CallBack,
xhelpnav_brow_cb);
brow_EnableEvent( brow->ctx, flow_eEvent_Key_ShiftLeft, flow_eEventType_CallBack,
xhelpnav_brow_cb);
brow_EnableEvent( brow->ctx, flow_eEvent_Key_ShiftUp, flow_eEventType_CallBack,
xhelpnav_brow_cb);
brow_EnableEvent( brow->ctx, flow_eEvent_Key_ShiftDown, flow_eEventType_CallBack,
xhelpnav_brow_cb);
brow_EnableEvent( brow->ctx, flow_eEvent_Key_PageUp, flow_eEventType_CallBack,
xhelpnav_brow_cb);
brow_EnableEvent( brow->ctx, flow_eEvent_Key_PageDown, flow_eEventType_CallBack,
......@@ -964,6 +993,19 @@ int HItemHelpBold::doubleclick_action( CoXHelpNavBrow *brow, CoXHelpNav *xhelpna
}
static void trim( char *str)
{
if ( !str)
return;
unsigned char *s = (unsigned char *)str;
while ( *s) {
if ( *s < ' ')
*s = ' ';
s++;
}
}
/*************************************************************************
*
* Name: help()
......@@ -987,6 +1029,9 @@ void *xhelpnav_help_insert_cb( void *ctx, navh_eItemType item_type, char *text1,
case navh_eItemType_Help:
case navh_eItemType_HelpCode:
{
trim( text1);
trim( text2);
trim( text3);
HItemHelp *item = new HItemHelp( xhelpnav->brow, "help", text1, text2, text3,
link, bookmark, file_name, file_type, help_index,
NULL, flow_eDest_IntoLast);
......@@ -994,6 +1039,9 @@ void *xhelpnav_help_insert_cb( void *ctx, navh_eItemType item_type, char *text1,
}
case navh_eItemType_HelpBold:
{
trim( text1);
trim( text2);
trim( text3);
HItemHelpBold *item = new HItemHelpBold( xhelpnav->brow, "help", text1, text2,
text3, link, bookmark, file_name, file_type, help_index,
NULL, flow_eDest_IntoLast);
......@@ -1001,18 +1049,21 @@ void *xhelpnav_help_insert_cb( void *ctx, navh_eItemType item_type, char *text1,
}
case navh_eItemType_HelpHeader:
{
trim( text1);
HItemHelpHeader *item = new HItemHelpHeader( xhelpnav->brow, "help", text1, xhelpnav->brow_cnt == 1,
NULL, flow_eDest_IntoLast);
return item->node;
}
case navh_eItemType_Header:
{
trim( text1);
HItemHeader *item = new HItemHeader( xhelpnav->brow, "help", text1,
NULL, flow_eDest_IntoLast);
return item->node;
}
case navh_eItemType_HeaderLarge:
{
trim( text1);
HItemHeaderLarge *item = new HItemHeaderLarge( xhelpnav->brow, "help", text1,
NULL, flow_eDest_IntoLast);
return item->node;
......@@ -1060,6 +1111,7 @@ int CoXHelpNav::help( char *help_key, char *help_bookmark,
}
navhelp->insert_cb = xhelpnav_help_insert_cb;
if ( pop)
init_help = 1;
else {
......@@ -1093,11 +1145,93 @@ int CoXHelpNav::help( char *help_key, char *help_bookmark,
if ( ODD(sts))
brow_CenterObject( brow->ctx, first, 0.0);
}
strncpy( brow_stack[brow_cnt-1]->current_key, help_key, sizeof(brow_stack[brow_cnt-1]->current_key));
if ( file_name)
strncpy( brow_stack[brow_cnt-1]->current_filename, file_name, sizeof(brow_stack[brow_cnt-1]->current_filename));
else
strcpy( brow_stack[brow_cnt-1]->current_filename, "");
brow_stack[brow_cnt-1]->current_filetype = file_type;
delete navhelp;
return 1;
}
int CoXHelpNav::back()
{
brow_push();
return 1;
}
int CoXHelpNav::next_topic()
{
int sts;
NavHelp *navhelp;
char next_key[200];
navh_eHelpFile current_filetype;
char current_key[200];
pwr_tFileName current_filename;
current_filetype = brow_stack[brow_cnt-1]->current_filetype;
strncpy( current_key, brow_stack[brow_cnt-1]->current_key, sizeof(current_key));
strncpy( current_filename, brow_stack[brow_cnt-1]->current_filename, sizeof(current_filename));
switch ( utility) {
case xhelp_eUtility_Xtt:
navhelp = new NavHelp( (void *)this, xhelp_cFile_BaseXtt, xhelp_cFile_Project);
break;
case xhelp_eUtility_Wtt:
navhelp = new NavHelp( (void *)this, xhelp_cFile_BaseWtt, xhelp_cFile_Project);
break;
default:
return 0;
}
sts = navhelp->get_next_key( current_key, current_filetype,
current_filename[0] == 0 ? 0 : current_filename, 0, next_key);
delete navhelp;
if ( ODD(sts)) {
brow_push();
sts = help( next_key, 0, current_filetype,
current_filename[0] == 0 ? 0 : current_filename, 1, 0);
}
return sts;
}
int CoXHelpNav::previous_topic()
{
int sts;
NavHelp *navhelp;
char prev_key[200];
navh_eHelpFile current_filetype;
char current_key[200];
pwr_tFileName current_filename;
current_filetype = brow_stack[brow_cnt-1]->current_filetype;
strncpy( current_key, brow_stack[brow_cnt-1]->current_key, sizeof(current_key));
strncpy( current_filename, brow_stack[brow_cnt-1]->current_filename, sizeof(current_filename));
switch ( utility) {
case xhelp_eUtility_Xtt:
navhelp = new NavHelp( (void *)this, xhelp_cFile_BaseXtt, xhelp_cFile_Project);
break;
case xhelp_eUtility_Wtt:
navhelp = new NavHelp( (void *)this, xhelp_cFile_BaseWtt, xhelp_cFile_Project);
break;
default:
return 0;
}
sts = navhelp->get_previous_key( current_key, current_filetype,
current_filename[0] == 0 ? 0 : current_filename, 0, prev_key);
delete navhelp;
if ( ODD(sts)) {
brow_push();
sts = help( prev_key, 0, current_filetype, current_filename[0] == 0 ? 0 : current_filename, 1, 0);
}
return sts;
}
/*************************************************************************
*
* Name: help_index()
......
/**
* Proview $Id: co_xhelpnav.h,v 1.9 2007-01-04 07:51:42 claes Exp $
* Proview $Id: co_xhelpnav.h,v 1.10 2008-02-27 06:24:37 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -72,6 +72,7 @@ class CoXHelpNavBrow {
CoXHelpNavBrow( BrowCtx *brow_ctx, void *brow_userdata) :
ctx(brow_ctx), userdata(brow_userdata)
{}
#if 0
~CoXHelpNavBrow();
#endif
......@@ -85,6 +86,9 @@ class CoXHelpNavBrow {
brow_tNodeClass nc_line;
flow_sAnnotPixmap *pixmap_morehelp;
flow_sAnnotPixmap *pixmap_closehelp;
navh_eHelpFile current_filetype;
char current_key[200];
pwr_tFileName current_filename;
void free_pixmaps();
void allocate_pixmaps();
......@@ -131,6 +135,9 @@ class CoXHelpNav {
void enable_events( CoXHelpNavBrow *brow);
int help( char *key, char *help_bookmark, navh_eHelpFile file_type,
char *file_name, int pop, bool strict);
int back();
int next_topic();
int previous_topic();
int help_index( navh_eHelpFile file_type, char *file_name, int pop);
pwr_tStatus search( char *str, bool strict);
pwr_tStatus search_next();
......
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