static void PrintOneUASCommon(UAS_Pointer<UAS_Common> &doc, Widget pshell, int *cur_pageP) { Arg args[15]; int n; XmString label; char buf[BUFSIZ]; // Retrieve the topic from the doc // The retrieve function will send a UAS_DocumentRetrievedMsg to the // print manager which will render the canvas with the appropriate topic doc->retrieve((void *)1); // set print orientation to either landscape or portrait (if set) if (f_printOrientation != NULL) { snprintf(buf, sizeof(buf), "*content-orientation: %s\n", f_printOrientation); XpSetAttributes(XtDisplay(pshell), XpGetContext(XtDisplay(pshell)), XPPageAttr, buf, XPAttrMerge); } for (gHelpDisplayArea->firstVisible = gHelpDisplayArea->nextNonVisible = 0; gHelpDisplayArea->nextNonVisible >= 0; gHelpDisplayArea->firstVisible = gHelpDisplayArea->nextNonVisible + 1) { (*cur_pageP)++; XpStartPage(XtDisplay(pshell), XtWindow(pshell)); snprintf(buf, sizeof(buf), "%d", *cur_pageP); label = XmStringCreateLocalized(buf); n = 0; XtSetArg(args[n], XmNlabelString, label); n++; XtSetValues(footer_page_no, args, n); XmStringFree(label); // Process exposures so label is updated. XmUpdateDisplay(footer_page_no); // _DtHelpCleanAndDrawWholeCanvas((XtPointer)gHelpDisplayArea); XpEndPage(XtDisplay(pshell)); } // Print chidren if appropriate if (print_hierarchy) { unsigned int i; UAS_List<UAS_Common> kids = doc->children(); for (i = 0; i < kids.length(); i++) { PrintOneUASCommon(kids[i], pshell, cur_pageP); } } }
UAS_String MMDB_Library::name () { if (f_name == "") { DIR *dir; struct dirent *sdir; dir = opendir((const char*)id()); while((sdir = readdir(dir)) != NULL) { char *p; p = strstr(sdir->d_name, ".oli"); if (p != NULL) { *p = '\0'; f_name = UAS_String(sdir->d_name); break; } } closedir(dir); // check to see if found .oli file. if not, // use the name of the first bookcase as the // name of the infolib. if (f_name == "") { UAS_List<UAS_Common> kids = children(); unsigned int i; for (i = 0; i < kids.length(); i++) { if (kids[i]->type() == UAS_BOOKCASE) break; } if (i < kids.length()) { char scratch[128]; snprintf(scratch, sizeof(scratch), CATGETS(Set_UAS_MMDB, 6, "File a Bug"), (char *)kids[i]->id()); f_name = UAS_String(scratch); } } } return f_name; }
MapButton::MapButton (WComposite &parent, const UAS_Pointer<UAS_Common> &doc_ptr, MapButton *ancestor) : f_form (parent, "form"), f_doc_ptr (doc_ptr), f_expanded (FALSE) { ON_DEBUG (printf ("MapButton::MapButton (%s)\n", (char*)f_doc_ptr->title())); static bool expandable_tree = window_system().get_boolean_default ("ExpandableMap"); UAS_List<UAS_Common> kids (f_doc_ptr->children()); UAS_String t = f_doc_ptr->title(); if (kids.length() > 0 && expandable_tree) { f_arrow = WXmArrowButton (f_form, "expand", WAutoManage); ON_ACTIVATE (f_arrow,expand); f_button = WXmPushButton (f_form, t, WAutoManage, WArgList (XmNrightWidget, (XtArgVal) ((Widget) f_arrow), XmNrightAttachment, XmATTACH_WIDGET, NULL)); } else { f_button = WXmPushButton (f_form, t, WAutoManage); } ON_ACTIVATE (f_button,activate); SET_CALLBACK (f_form,Destroy,destroy); f_form.ShadowThickness (0); // f_form.Realize(); // Add to the list so that we can manage 'em all at once. if (f_num_kids + 1 > f_kids_size) { f_kids_size *= 2; f_kids = (Widget *) realloc (f_kids, sizeof (Widget) * f_kids_size); } f_kids[f_num_kids++] = (Widget) f_form; ON_DEBUG (printf ("Form managed = %d\n", XtIsManaged (f_form))); if (ancestor != NULL) { CXawTree form (f_form); WArgList args; form.TreeParent (ancestor->f_form, args); form.Set (args.Args(), args.NumArgs()); } }
UAS_Pointer<UAS_SearchEngine> MMDB_Library::search_engine() { UAS_List<UAS_Common> bookcases = bookcaseList(); UAS_PtrList<const char> cList; unsigned int i; #ifdef DEBUG for (i = 0; i < bookcases.length(); i++) fprintf(stderr, "(DEBUG) bookcases %d=%s\n", i, (char*)bookcases[i]->id()); #endif UAS_List<UAS_String> strings; for (i = 0; i < bookcases.length(); i++) { UAS_Pointer<UAS_String> string = new UAS_String; strings.insert_item(string); } for (i = 0; i < bookcases.length(); i++) { UAS_Pointer<UAS_Common> infolib = bookcases[i]->parent(); UAS_String str = infolib->id(); str = str + "/" + bookcases[i]->id(); *(UAS_String *)strings[i] = str; cList.append((char*)(*(UAS_String *)strings[i])); } #ifdef DTSEARCH fSearchEngine = &(DtSR_SearchEngine::search_engine (&cList)); #else fSearchEngine = &(Fulcrum_SearchEngine::search_engine (&cList)); #endif return fSearchEngine; }
UAS_List<UAS_String> UAS_Factory::getRootLocators () { UAS_List<UAS_String> rval; if (gFactoryList == 0) return rval; UAS_PtrList<FactoryEntry>&theList = *gFactoryList; for (int i = 0; i < theList.numItems(); i ++) { UAS_List<UAS_String> cur = theList[i]->factory()->rootLocators(); for (unsigned int j = 0; j < cur.length(); j ++) { rval.insert_item (cur[j]); } } return rval; }
int main (int, char *[]) { INIT_EXCEPTIONS(); UAS_Common::initialize (); UAS_List<UAS_String> locList = UAS_Common::rootLocators (); for (int i = 0; i < locList.length(); i ++) { UAS_String &cur = locList[i]; UAS_Pointer<UAS_Common> curDoc = UAS_Common::create(cur); UAS_Pointer<UAS_Collection> curCol = (UAS_Collection *) ((UAS_Common *) curDoc); printLocs (curCol->root(), 0); curDoc = curCol->root(); curCol = 0; UAS_Common::destroy (curDoc); } UAS_Common::finalize (); return 0; }
void printLocs (UAS_Pointer<UAS_Common> doc, int level) { for (int i = 0; i < level; i ++) cerr << " "; UAS_String theLoc = doc->locator(); if (level >= 2) { char buf[1024]; UAS_String loc = doc->id(); (void) sprintf (buf, "mmdb:LOCATOR=%s", (char *) loc); UAS_Pointer<UAS_Common> theDoc = UAS_Common::create(buf); cerr << (char *) theLoc << ", " << (char *) theDoc->title() << endl; } else { cerr << (char *) theLoc << endl; } UAS_List<UAS_Common> kids = doc->children(); for (i = 0; i < kids.length(); i ++) { printLocs (kids[i], level + 1); } }
void printTitles (UAS_Pointer<UAS_Common> doc, int level) { int i; for (i = 0; i < level; i ++) fprintf (stderr, " "); fprintf (stderr, "%s\n", (char *) doc->title ()); UAS_Pointer<UAS_Common> curDoc; if (doc->type() == UAS_BOOK) { curDoc = doc->next(); while (curDoc != 0) { fprintf (stderr, "********** %s \n", (char *) curDoc->title ()); curDoc = curDoc->next(); } } else { UAS_List<UAS_Common> theList = doc->children (); for (i = 0; i < theList.length(); i ++) printTitles (theList[i], level + 1); } }
// each element of theList is concatenated into a single string using // the "delimiter" character for separation. Delimiter is treated as // a prefix if "infix" is False, in which case it initiates the string. // UAS_String EnvMgr::cvtListToString( UAS_List<UAS_String> theList, UAS_String delimiter, bool infix ) { UAS_String aggregate ; int len = theList.length(); if( len != 0 ) { if( infix ) aggregate = *(theList[0]); else aggregate = delimiter + *(theList[0]); // prefix for (int i = 1; i < len; i++) { // concatenate each additional item using the separator aggregate = aggregate + delimiter + *(theList[i]) ; } } return aggregate ; }
/* * ------------------------------------------------------------------------ * Name: reset_ui * * Description: * Resets the number of nodes and what to print buttons. * * Return value: * None. * */ void reset_ui(AppPrintData *p) { RCS_DEBUG("reset_ui called.\n"); xList<UAS_Pointer<UAS_Common> > &print_list = *(p->f_print_list); Xassert (print_list.length() > 0); // Set up the "Number of Nodes" labels. static char buffer[24]; snprintf (buffer, sizeof(buffer), "%d", print_list.length()); f_selected_field.LabelString (WXmString (buffer)); f_to_print_field.LabelString (WXmString (buffer)); // Set up "What to print" buttons based on command line // value set in Window System print_hierarchy = window_system().videoShell()->hierarchy; f_print_hierarchy.Set(print_hierarchy); f_print_nodes.Set(!print_hierarchy); Boolean hierarchy_sensitive = False; List_Iterator<UAS_Pointer<UAS_Common> > l (print_list); // NOTE: Could fail if toc() is NULL. UAS_List<UAS_Common> kids = l.item()->children(); if ((!strncmp(l.item()->locator(), "mmdb:", 5)) && print_list.length() == 1 && kids.length() > 0) { hierarchy_sensitive = True; } // If one is insensitive, the other one must be as well. f_print_nodes.SetSensitive (hierarchy_sensitive); f_print_hierarchy.SetSensitive (hierarchy_sensitive); }
void MapButton::expand() { if (f_expanded) { f_arrow.ArrowDirection (XmARROW_RIGHT); f_expanded = FALSE; } else { f_arrow.ArrowDirection (XmARROW_DOWN); f_expanded = TRUE; // Create a button for each child. UAS_List<UAS_Common> kids (f_doc_ptr->children()); WXawTree tree (XtParent (f_form)); for (unsigned int i = 0; i < kids.length(); i++) new MapButton (tree, kids[i], this); ON_DEBUG (puts ("managing kids")); MapButton::ManageKids(); ON_DEBUG (puts ("calling force layout")); tree.ForceLayout(); ON_DEBUG (puts ("called force layout")); } }
void MapAgent::display (UAS_Pointer<UAS_Common> &doc_ptr, bool popup) { static bool first_time = True; u_int i, num_children; MapButton *parent_button, *child_button, *this_button = NULL; if (f_shell == NULL) create_ui(); // Just pop up the window if the map has already been created // for the specified document. if (doc_ptr == f_doc_ptr) { if (popup) { f_shell->Popup(); XMapRaised(XtDisplay(*f_shell), XtWindow(*f_shell)); } f_onscreen = TRUE; return; } // Must have to create a new tree, so start by wiping out the old one. if (f_tree != NULL) { f_tree->Destroy(); delete f_tree; } f_tree = new WXawTree (*f_porthole, "tree"); // f_tree->Realize(); // Tree gravity should be a preference that is retrieved right here. // (Or better yet stored in the class record.) /* -------- Start the local map at this node's parent. -------- */ UAS_Pointer<UAS_Common> toc_this = doc_ptr; UAS_Pointer<UAS_Common> toc_parent = (doc_ptr != (UAS_Pointer<UAS_Common>)0) ? doc_ptr->parent() : (UAS_Pointer<UAS_Common>)0; // If the entry has a parent, create a button for it and each of // the entry's siblings. if (toc_parent != (UAS_Pointer<UAS_Common>)NULL) { parent_button = new MapButton (*f_tree, toc_parent, NULL); // parent_button->expand(); /* -------- Create a button for each sibling. -------- */ UAS_List<UAS_Common> kids = toc_parent->children(); num_children = kids.length(); UAS_Pointer<UAS_Common> toc_kid; for (i = 0; i < num_children; i++) { toc_kid = kids[i]; child_button = new MapButton (*f_tree, toc_kid, parent_button); if (toc_kid == doc_ptr) { f_doc_ptr = doc_ptr; this_button = child_button; } } } else // No TOC parent -- SWM: Also may be no TOC!!! { f_doc_ptr = doc_ptr; this_button = new MapButton (*f_tree, toc_this, NULL); } if (this_button == NULL) { message_mgr(). error_dialog (CATGETS(Set_Messages, 7, "File a Bug")); return; } else { static bool first_time = TRUE; static Pixel highlight_bg, highlight_fg; if (first_time) { const char *s; unsigned long status; s = window_system().get_string_default ("MapHighlightBackground"); if (s == NULL || *s == '\0') { highlight_bg = this_button->f_button.Foreground(); } else { status = window_system().get_color (s, highlight_bg); // On failure to allocate, just invert. if (status == 0) { highlight_bg = this_button->f_button.Foreground(); highlight_fg = this_button->f_button.Background(); } // Got bg, so now try for fg. else { s = window_system(). get_string_default ("MapHighlightForeground"); if (s == NULL || *s == '\0') { highlight_fg =this_button->f_button.Background(); } else { status = window_system().get_color (s, highlight_fg); // If we cant get both colors, just invert the button. if (status == 0) { Display *dpy = window_system().display(); XFreeColors (dpy, DefaultColormap(dpy,DefaultScreen(dpy)), &highlight_bg, 1, 0); highlight_bg = this_button->f_button.Foreground(); highlight_fg = this_button->f_button.Background(); } } } } if (highlight_fg == this_button->f_button.Foreground() || highlight_bg == this_button->f_button.Background() || highlight_fg == highlight_bg) { highlight_bg = this_button->f_button.Foreground(); highlight_fg = this_button->f_button.Background(); } first_time = FALSE; } this_button->f_button.Background (highlight_bg); this_button->f_button.Foreground (highlight_fg); // this_button->expand(); } /* -------- Create a button for each child. -------- */ if (toc_this != (UAS_Pointer<UAS_Common>)NULL) { UAS_List<UAS_Common> myKids = toc_this->children(); num_children = myKids.length(); for (i = 0; i < num_children; i++) child_button = new MapButton (*f_tree, myKids[i], this_button); #if 0 if (!XtIsRealized(*f_shell)) { f_tree->Manage(); f_shell->Realize(); } #endif } // Manage all the children. MapButton::ManageKids(); UAS_String buffer = CATGETS(Set_MapAgent, 2, "Dtinfo: "); buffer = buffer + doc_ptr->title(); f_shell->Title ((char*)buffer); if (!XtIsRealized (*f_shell)) f_shell->Realize(); f_tree->Realize(); f_tree->ForceLayout(); f_min_tree_width = f_tree->Width(); f_min_tree_height = f_tree->Height(); ON_DEBUG (printf ("+++++ Tree min dims: %d x %d\n", f_min_tree_width, f_min_tree_height)); center_on (this_button); f_tree->Manage(); if (popup) { if (first_time) { WXmForm form (XtParent (XtParent (*f_panner))); form.Height (50); first_time = False; } f_shell->Popup(); XMapRaised(XtDisplay(*f_shell), XtWindow(*f_shell)); } f_onscreen = TRUE; }