diff options
Diffstat (limited to 'apps/X11/cheatah/cheatsig.cpp')
-rw-r--r-- | apps/X11/cheatah/cheatsig.cpp | 326 |
1 files changed, 326 insertions, 0 deletions
diff --git a/apps/X11/cheatah/cheatsig.cpp b/apps/X11/cheatah/cheatsig.cpp new file mode 100644 index 0000000..d3646ba --- /dev/null +++ b/apps/X11/cheatah/cheatsig.cpp @@ -0,0 +1,326 @@ +/* Note: You are free to use whatever license you want. + Eventually you will be able to edit it within Glade. */ + +/* cheatah + * Copyright (C) <YEAR> <AUTHORS> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#include <gtk/gtk.h> +#include "cheatah.h" +#include "cheatsig.h" + +int +main (int argc, char *argv[]) +{ + GtkWidget *mainWindow; + + gtk_set_locale (); + gtk_init (&argc, &argv); + + /* + * The following code was added by Glade to create one of each component + * (except popup menus), just so that you see something after building + * the project. Delete any components that you don't want shown initially. + */ + mainWindow = create_mainWindow (); + gtk_widget_show (mainWindow); + + gtk_main (); + + destroy_mainWindow(); + return 0; +} + + +void +on_Exit3_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + +} + + +void +on_View3_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + +} + + +void +on_Help_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + +} + + +void +on_viewMod_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + cheatahWindow->viewModActivate(menuitem, (gchar *)user_data); +} + + +/* +* This function is used to do a quick and dirty translation of the formating +* commands in the module descriptions into reasonable equivalents in +* plain ascii. (The descriptions look like .rtf-lite, perhaps?) +* It takes a character pointer to the module description and +* returns a pointer to a new string that's been fixed up. Ultimately, +* a better solution should be developed, but this improves the +* appearance of the descriptions significantly for now. +* +* Perhaps this could serve as the basis for a function that would take +* an input string and a text widget, then insert the string into the +* widget in a formatted manner (good next step?); +*/ + +char * +str_fixup_format (const char *string) +{ + char *strNew; + int i,j; + + assert(string!=NULL); + strNew = (char *) malloc(strlen(string)); // First, allocate space for the new string + assert(strNew!=NULL); + if(strNew==NULL) return ((char *)NULL); // Make sure we actually got it + + for (i=0,j=0;i<strlen(string);i++) { // Work through input string char at a time + if (string[i]=='\\') { // Found backslash, probably a command + if (string[i+1]=='q') { // Looks like an alignment command + if(string[i+2]=='c') { // Want to center text + strNew[j]='\n'; // - make do with a new line + j++; + strNew[j]='\t'; // - and a tab for now + j++; + } + i=i+2; // Assume command and skip past q and ? + continue; + } + else { // if string[i+1] != 'q' + if(string[i+1]=='p' && string[i+2]=='a' && string[i+3]=='r') { // "\par" or "\pard"command? + if(string[i+4]=='d') { // "\pard" command - ignore for now + i=i+4; // Skip past the "pard" + continue; + } + else { // "\par" command + strNew[j]='\n'; // - use a new line for now + j++; + i=i+3; // Skip past the "par" + continue; + } + } + } // End of "else" + } // End of "if(string[i]=='\\') + strNew[j]=string[i]; // Don't know what it is, so copy it + j++; + } // End of "for" + strNew[j]='\0'; // Terminate new string + +// fprintf(stderr, "strlen(string) = %i, strlen(strNew) = %i \n", strlen(string), strlen(strNew)); // Used for debugging +// fprintf(stderr, "string = \"%s\"\n",string); // Used for debugging +// fprintf(stderr, "strNew = \"%s\"\n",strNew); // Used for debugging + + assert(strlen(strNew)<=strlen(string)); // Nothing we have done should have lengthend it + return(strNew); // Return fixed-up string +} + +void +on_About_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + SWMgr *mainMgr; + + mainMgr=cheatahWindow->getSwordManager(); + int i; + char *tempString; + static char *modtypes[] = {"Biblical Texts", "Commentaries", "Lexicons / Dictionaries"}; + string newtext, tmptext; + ModMap::iterator it; + SectionMap::iterator sit; + ConfigEntMap::iterator eit; + + GtkWidget *dialogAbout; + GtkWidget *hBoxModDesc; + GtkWidget *textAboutMods; + GtkWidget *textScrollbarMods; + GtkWidget *hBoxAbout; + GtkWidget *textAbout; + GtkWidget *textScrollbar; + GtkWidget *buttonOK; + + dialogAbout=gtk_dialog_new(); + gtk_object_set_data (GTK_OBJECT (dialogAbout), "dialogAbout", dialogAbout); + gtk_window_set_title (GTK_WINDOW (dialogAbout), "About Cheatah"); + gtk_window_set_policy (GTK_WINDOW (dialogAbout), FALSE, TRUE, FALSE); + gtk_widget_set_usize(GTK_WIDGET(dialogAbout), 360, 360); + gtk_window_position(GTK_WINDOW(dialogAbout),GTK_WIN_POS_CENTER); + + buttonOK = gtk_button_new_with_label("O.k."); + +/* */ +/* Set it up so that the dialog box and all it's children are automatically */ +/* destroyed when the user is done looking at it. */ +/* Note: Use gtk_signal_connect_object() rather than */ +/* gtk_signal_connect(), because we want the "destroy" */ +/* connected to the dialog box, not just the button. */ +/* */ + gtk_signal_connect_object(GTK_OBJECT(buttonOK), + "clicked", + GTK_SIGNAL_FUNC(gtk_widget_destroy), + GTK_OBJECT(dialogAbout)); + + gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialogAbout)->action_area), buttonOK); + + hBoxModDesc = gtk_hbox_new (FALSE,0); + gtk_object_set_data (GTK_OBJECT (dialogAbout), "hBoxModDesc", hBoxModDesc); + gtk_box_pack_end (GTK_BOX (GTK_DIALOG(dialogAbout)->vbox), hBoxModDesc, TRUE, TRUE, 0); + textAboutMods = gtk_text_new (NULL, NULL); + gtk_object_set_data (GTK_OBJECT (dialogAbout), "textAboutMods", textAboutMods); + gtk_box_pack_start (GTK_BOX (hBoxModDesc), textAboutMods, TRUE, TRUE, 0); + gtk_text_set_editable (GTK_TEXT (textAboutMods), FALSE); + gtk_text_set_word_wrap (GTK_TEXT (textAboutMods), TRUE); + + gtk_text_freeze (GTK_TEXT(textAboutMods)); + gtk_text_set_point(GTK_TEXT(textAboutMods), 0); + gtk_text_forward_delete (GTK_TEXT (textAboutMods), gtk_text_get_length((GTK_TEXT(textAboutMods)))); + + if (mainMgr->Modules.empty()==TRUE) { + gtk_text_freeze (GTK_TEXT(textAboutMods)); + gtk_text_insert(GTK_TEXT(textAboutMods), NULL, &textAboutMods->style->black, NULL, "\nCheatah was unable to find any books installed!\n\n", -1); + gtk_text_insert(GTK_TEXT(textAboutMods), NULL, &textAboutMods->style->black, NULL, "They should be listed in a configuration file named either: ", -1); + gtk_text_insert(GTK_TEXT(textAboutMods), NULL, &textAboutMods->style->black, NULL, "'mods.conf' or 'mods.d'. \n\n", -1); + gtk_text_insert(GTK_TEXT(textAboutMods), NULL, &textAboutMods->style->black, NULL, "Try setting:\n\tSWORD_PATH=<directory containing mods.conf>\n\t",-1); + gtk_text_insert(GTK_TEXT(textAboutMods), NULL, &textAboutMods->style->black, NULL, "Or see the README file for a full description of setup options.\n", -1); + } + else { + gtk_text_insert(GTK_TEXT(textAboutMods), NULL, &textAboutMods->style->black, NULL, "\tInstalled Book Modules", -1); + for (i = 0; i < 3; i++) { + gtk_text_insert(GTK_TEXT(textAboutMods), NULL, &textAboutMods->style->black, NULL, "\n\n\t", -1); + gtk_text_insert(GTK_TEXT(textAboutMods), NULL, &textAboutMods->style->black, NULL, modtypes[i], -1); + gtk_text_insert(GTK_TEXT(textAboutMods), NULL, &textAboutMods->style->black, NULL, "\n\n", -1); + for (it = mainMgr->Modules.begin(); it != mainMgr->Modules.end(); it++) { + if (!strcmp((*it).second->Type(), modtypes[i])) { + sit = mainMgr->config->Sections.find((*it).second->Name()); + if (sit != mainMgr->config->Sections.end()) { + gtk_text_insert(GTK_TEXT(textAboutMods), NULL, &textAboutMods->style->black, NULL, (*it).second->Name() ,-1); + gtk_text_insert(GTK_TEXT(textAboutMods), NULL, &textAboutMods->style->black, NULL, ": " ,-1); + gtk_text_insert(GTK_TEXT(textAboutMods), NULL, &textAboutMods->style->black, NULL, (*it).second->Description() ,-1); + gtk_text_insert(GTK_TEXT(textAboutMods), NULL, &textAboutMods->style->black, NULL, "\n\n", -1); + eit = (*sit).second.find("About"); + if (eit != (*sit).second.end()) { +// gtk_text_insert(GTK_TEXT(textAboutMods), NULL, &textAboutMods->style->black, NULL, (*eit).second.c_str() ,-1); + tempString=str_fixup_format((*eit).second.c_str() ); + gtk_text_insert(GTK_TEXT(textAboutMods), NULL, &textAboutMods->style->black, NULL, tempString, -1); + free(tempString); + gtk_text_insert(GTK_TEXT(textAboutMods), NULL, &textAboutMods->style->black, NULL, "\n\n" ,-1); + } +// eit = (*sit).second.find("SourceType"); +// if (eit != (*sit).second.end()) { +// fprintf(stderr,"SourceType: %s\n", (*eit).second.c_str() ); +// } + } + } + } + } + } + + gtk_text_set_point(GTK_TEXT(textAboutMods), 0); + gtk_text_thaw(GTK_TEXT(textAboutMods)); + + /* Add a vertical scrollbar to the textAboutMods GtkText widget */ + textScrollbarMods = gtk_vscrollbar_new (GTK_TEXT (textAboutMods)->vadj); + gtk_box_pack_end (GTK_BOX (hBoxModDesc), textScrollbarMods, FALSE, FALSE, 0); + + hBoxAbout = gtk_hbox_new (FALSE,0); + gtk_object_set_data (GTK_OBJECT (dialogAbout), "hBoxAbout", hBoxAbout); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialogAbout)->vbox), hBoxAbout, FALSE, TRUE, 0); + textAbout = gtk_text_new (NULL, NULL); + gtk_object_set_data (GTK_OBJECT (dialogAbout), "textAbout", textAbout); + gtk_box_pack_start (GTK_BOX (hBoxAbout), textAbout, TRUE, TRUE, 0); + gtk_text_set_editable (GTK_TEXT (textAbout), FALSE); + gtk_text_set_word_wrap (GTK_TEXT (textAbout), TRUE); + + gtk_text_freeze (GTK_TEXT(textAbout)); + gtk_text_set_point(GTK_TEXT(textAbout), 0); + gtk_text_forward_delete (GTK_TEXT (textAbout), gtk_text_get_length((GTK_TEXT(textAbout)))); + gtk_text_insert(GTK_TEXT(textAbout), NULL, &textAbout->style->black, NULL, "Cheatah is a quick and dirty GTK/Linux front end to the Sword software.", -1); + gtk_text_insert(GTK_TEXT(textAbout), NULL, &textAbout->style->black, NULL, "\n\nSword is developed by the CrossWire Software & Bible Society:",-1); + gtk_text_insert(GTK_TEXT(textAbout), NULL, &textAbout->style->black, NULL, "\n\tP. O. Box 2528",-1); + gtk_text_insert(GTK_TEXT(textAbout), NULL, &textAbout->style->black, NULL, "\n\tTempe, AZ 85280-2528 ", -1); + gtk_text_insert(GTK_TEXT(textAbout), NULL, &textAbout->style->black, NULL, "\n\thttp://www.crosswire.org ", -1); + gtk_text_insert(GTK_TEXT(textAbout), NULL, &textAbout->style->black, NULL, "\n\nThis software is provided free for the study of God and His Word.",-1); + + gtk_text_set_point(GTK_TEXT(textAbout), 0); + gtk_text_thaw(GTK_TEXT(textAbout)); + + /* Add a vertical scrollbar to the textAbout GtkText widget */ + textScrollbar = gtk_vscrollbar_new (GTK_TEXT (textAbout)->vadj); + gtk_box_pack_end (GTK_BOX (hBoxAbout), textScrollbar, FALSE, FALSE, 0); + + gtk_widget_show_all(dialogAbout); // "show_all" makes all the children visable too + +/* */ +/* No need to clean up the various widgets - we've arranged */ +/* for that to happen automatically when the user presses the */ +/* "o.k." button. */ +/* */ + + return; +} + + +void +on_lookupText_changed (GtkEditable *editable, + gpointer user_data) +{ + cheatahWindow->lookupTextChanged(); +} + + +void +on_searchButton_clicked (GtkButton *button, + gpointer user_data) +{ + cheatahWindow->searchButtonClicked(); +} + + +void +on_resultList_selection_changed (GtkWidget *clist, gint row, gint column, GdkEventButton *event, gpointer data) +{ + cheatahWindow->resultListSelectionChanged(clist, row, column, event, data); +} + + +void on_arrow1_button_press_event(GtkButton *button, gpointer user_data) { + cheatahWindow->navigateButtonClicked(0); +} + + +void on_arrow2_button_press_event(GtkButton *button, gpointer user_data) { + cheatahWindow->navigateButtonClicked(1); +} + + + + + |