summaryrefslogtreecommitdiff
path: root/apps/X11/cheatah/cheatsig.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'apps/X11/cheatah/cheatsig.cpp')
-rw-r--r--apps/X11/cheatah/cheatsig.cpp326
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);
+}
+
+
+
+
+