Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 9 Mar 95 10:52:16 EST
From:      wmooney@casws009.shl.com (William D. Mooney)
To:        oi-users@freefall.cdrom.com
Cc:        wmooney@casws009.shl.com
Subject:   Re: adding cells to Help menu
Message-ID:  <9503091552.AA00286@casws009.shl.com>

next in thread | raw e-mail | index | archive | help

----- Begin Included Message -----
I've been trying to add some cells to the
Help menu in an app_window's main menu, but
I can't find the Help button menu in the
builder anywhere. In addition to 'On Context'
I'd like a couple of other Help menu options.

Dropping a cell onto the Help button menu doesn't
do the trick, and traversing the app_window and/or
@main_menu never reveal a Help menu.
----- End Included Message -----

David,

Here is a solution we cooked up.  It replaces the Help menu button
with one of our own with a single help item.  We could not find a way to do it
from the Builder.  You could add additional items if you wish.
The .H and .C files follow.  Somewhere in your main()
before you start OI_begin_interaction() have the statements:
  #include "mungeHelp.H"
  mungeHelp(topLevel[0]);

**** mungeHelp.H ****

#include <OI/oi.H>

///////////////////////
// mungeHelp -- function to set mungify the builtin OI Help menu button
// so that it invokes FrameMaker as help instead of the builtin OI
// context help.  
//
// This function is very OI dependant, and requires an "@on_context" 
// menu button object.  If there doesn't exist such an object, this function
// will throw up a warning dialog box to inform the user that Frame Help
// is unavailable.
///////////////////////

void
mungeHelp(OI_d_tech *topWindow);

// Executable to invoke is Frame Viewer.
#define MH_EXECSTRING		"viewer -f %s"

// FrameMaker helpfile path.
#define MH_HELPPATH	"/usr/docs/aFrameHelpFile"

**** mungeHelp.C ****

#include "mungeHelp.H"

static 
void destroyWarningDialog(OI_menu_cell *cp,void *arg,OI_number num)
{
  cp->parent()->parent()->del();
  return;
}

static
void invokeHelp (OI_menu_cell *cellp, void *argp, OI_number button)
{
  int pid;
  static char command[1024];
  static char *filename=MH_HELPPATH;
  char *xlatedFilename;

  xlatedFilename = OI_translate_filename(filename);
  sprintf(command, MH_EXECSTRING, xlatedFilename);

  printf("Invoking help...\n");
  OI_fork_nowait(command);
  return;
}

void
mungeHelp(OI_d_tech *tp)
{
  static OI_cell_spec cells[] = {
    {"Oh Well", "Oh Well, life goes on", destroyWarningDialog}
  };
  static char *warnText = 
    "WARNING:  Cannot find '@on_context' in OI object tree.\n"
      "Continuing on without access to Frame help.";

  OI_menu_cell *helpKey = 
    (OI_menu_cell *) tp->descendant("@on_context");

  if (!helpKey) {
    OI_warn_dialog_box *bp = oi_create_warn_dialog_box("warnBox", warnText, 
						       OI_count(cells),
						       &cells[0]);
    bp->set_associated_object(tp->root(), OI_def_loc, OI_def_loc, OI_active);

    return;
  }

  helpKey->set_label("Frame Help");
  helpKey->change_action(invokeHelp, NULL);

}


=============================================================================
William D. Mooney       | email: wmooney@shl.com or 74353.1325@compuserve.com
                        | phone: 407.263.3329
SHL Systemhouse, Inc.   | fax:   407.260.0590
=============================================================================



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9503091552.AA00286>