/* Note: You are free to use whatever license you want. Eventually you will be able to edit it within Glade. */ /* cheatah * Copyright (C) * * 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 #include "cheatah.h" #include "cheatsig.h" using namespace std; 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;igetSwordManager(); 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=\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); }