/* * * ProLinga-Run * * Copyright (C) 2002-2008 Xobas Software. * All rights reserved. * * This file is part of ProLinga-Run. * * ProLinga-Run 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 3 of the License, or * (at your option) any later version. * * ProLinga-Run 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 ProLinga-Run. If not, see . * * More information is available at the following addresses: * * Website : http://www.prolinga.org * * Email : prolinga-list@prolinga.org * * */ #include "RunCommon.h" #include #include #include #include #include "RunShare.hpp" extern ScreenStackPtr dialogStackPtr; void ToLower(char *inString) { int length, i; length = strlen(inString); for (i = 0; i < length; i++) inString[i] = tolower(inString[i]); } int ReplaceCharInString(char *string, char find, char replace) { int count = 0; for(;*string;string++) { if (*string == find) { count ++; *string = replace; } } return count; } bool DialogConfirm(GtkWidget *openwindow, gchar *message) { GtkWidget *dialog; gint result; bool confirmStatus; dialog = gtk_message_dialog_new (GTK_WINDOW(openwindow), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK_CANCEL, message); result = gtk_dialog_run (GTK_DIALOG (dialog)); if (result == GTK_RESPONSE_OK) confirmStatus = true; else confirmStatus = false; gtk_widget_destroy (dialog); return confirmStatus; } void DialogError(GtkWidget *openwindow, gchar *message) { GtkWidget *dialog; dialog = gtk_message_dialog_new (GTK_WINDOW(openwindow), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, message); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } GtkWidget* LookupWidget(GtkWidget *widget, const gchar *widget_name) { GladeXML *xml; GList *wdgList; GtkWidget *wdgt; xml = glade_get_widget_tree(widget); wdgt = glade_xml_get_widget(xml, widget_name); wdgList = glade_xml_get_widget_prefix(xml, ""); /* if (strcmp((char *)widget_name, "External") == 0) { lengthWdgList = g_list_length(wdgList); for (i = 1; i < lengthWdgList; i++) { tmpWdg = GTK_WIDGET(g_list_nth_data(wdgList, i)); printf("WIDGET : %s NAME : %s\n", G_OBJECT_TYPE_NAME(G_OBJECT(tmpWdg)), gtk_widget_get_name(tmpWdg)); } } */ if(wdgt == NULL) g_warning ("Widget not found: %s", widget_name); return wdgt; } char* CreateGladeString(xmlDocPtr doc) { xmlDocPtr docScreen; xmlNodePtr cur, curScreen; xmlBufferPtr buf; char *string; cur = xmlDocGetRootElement(doc); cur = cur->xmlChildrenNode; while (cur != NULL) { if (!xmlStrcmp(cur->name, (const xmlChar *) "Repository")) break; cur = cur->next; } cur = cur->xmlChildrenNode; while (cur != NULL) { if (!xmlStrcmp(cur->name, (const xmlChar *) "Command")) break; cur = cur->next; } cur = cur->xmlChildrenNode; while (cur != NULL) { if (!xmlStrcmp(cur->name, (const xmlChar *) "Object")) break; cur = cur->next; } cur = cur->xmlChildrenNode; while (cur != NULL) { if (!xmlStrcmp(cur->name, (const xmlChar *) "Screen")) break; cur = cur->next; } cur = cur->xmlChildrenNode; while (cur != NULL) { if (!xmlStrcmp(cur->name, (const xmlChar *) "DisplayData")) break; cur = cur->next; } cur = cur->xmlChildrenNode; while (cur != NULL) { if (!xmlStrcmp(cur->name, (const xmlChar *) "glade-interface")) break; cur = cur->next; } cur = cur->xmlChildrenNode; docScreen = xmlNewDoc((const xmlChar *)"1.0"); docScreen->children = xmlNewDocNode(docScreen, NULL, (const xmlChar *)"glade-interface", NULL); curScreen = xmlDocGetRootElement(docScreen); xmlAddChild(curScreen, xmlCopyNodeList(cur)); curScreen = xmlDocGetRootElement(docScreen); /* Dump to string */ buf = xmlBufferCreate(); xmlNodeDump(buf, docScreen, curScreen, 0, 1); string = new char[strlen((char *)xmlBufferContent(buf))+1]; strcpy(string, (char *)xmlBufferContent(buf)); /* Free */ xmlBufferFree(buf); xmlFreeDoc(docScreen); /* Return */ return string; } void ResetScreenStack(void) { /* Delete dialog stack */ dialogStackPtr->deleteStack(&dialogStackPtr); } ScreenStack::ScreenStack() { prevScreenPtr = NULL; nextPtr = NULL; } ScreenStack::~ScreenStack() { /* Nothing ? */ } void ScreenStack::push(ScreenStack **topPtr, GtkWidget *screenPtr) { ScreenStack *newPtr; newPtr = new ScreenStack; newPtr->prevScreenPtr = screenPtr; newPtr->nextPtr = *topPtr; *topPtr = newPtr; } void ScreenStack::pop(ScreenStack **topPtr, GtkWidget **screenPtr) { ScreenStack *tmpPtr; tmpPtr = *topPtr; *screenPtr = tmpPtr->prevScreenPtr; *topPtr = (*topPtr)->nextPtr; delete tmpPtr; } void ScreenStack::deleteStack(ScreenStack **topPtr) { ScreenStack *tmpPtr; while (*topPtr != NULL) { tmpPtr = *topPtr; *topPtr = (*topPtr)->nextPtr; delete tmpPtr; } } void ScreenStack::get(ScreenStack **topPtr, GtkWidget **screenPtr) { *screenPtr = (*topPtr)->prevScreenPtr; } DesktopScreen::DesktopScreen() { strcpy(screenName, ""); screenWidget = NULL; nextPtr = NULL; } DesktopScreen::~DesktopScreen() { /* Nothing ? */ } GtkWidget *DesktopScreen::getOneValue(DesktopScreenPtr *dtsPtr, const char *name) { DesktopScreenPtr curPtr; curPtr = *dtsPtr; while (curPtr != NULL) { if (strcmp(curPtr->screenName, name) == 0) return curPtr->screenWidget; curPtr= curPtr->nextPtr; } return NULL; } void DesktopScreen::putValue(DesktopScreenPtr *dtsPtr, const char *name, const GtkWidget *wdgScreen) { DesktopScreenPtr newPtr; /* Prepend value to list. Double allowed (multiple modeless) */ newPtr = new DesktopScreen; strcpy(newPtr->screenName, name); newPtr->screenWidget = GTK_WIDGET(wdgScreen); newPtr->nextPtr = *dtsPtr; *dtsPtr = newPtr; } void DesktopScreen::deleteValue(DesktopScreenPtr *dtsPtr, const char *name, const GtkWidget *wdgScreen) { DesktopScreenPtr curPtr, prevPtr; curPtr = *dtsPtr; prevPtr = NULL; while (curPtr != NULL) { if ((strcmp(curPtr->screenName, name) == 0) && (GTK_WIDGET(curPtr->screenWidget) == GTK_WIDGET(wdgScreen))) { if (prevPtr == NULL) { /* First Record */ *dtsPtr = curPtr->nextPtr; break; } else { prevPtr->nextPtr = curPtr->nextPtr; break; } delete curPtr; } prevPtr = curPtr; curPtr = curPtr->nextPtr; } } GtkWidget *DesktopScreen::getFirstValue(DesktopScreenPtr *dtsPtr) { if (*dtsPtr != NULL) return (*dtsPtr)->screenWidget; else return NULL; } int DesktopScreen::isOnDesktop(DesktopScreenPtr dtsPtr, const char *name) { DesktopScreenPtr curPtr; int hits = 0; /* Check if and how many times screen name exits in mem list */ curPtr = dtsPtr; while (curPtr != NULL) { if (strcmp(curPtr->screenName, name) == 0) hits++; curPtr= curPtr->nextPtr; } return hits; } int DesktopScreen::numberOnDesktop(DesktopScreenPtr dtsPtr) { DesktopScreenPtr curPtr; int hits = 0; curPtr = dtsPtr; while (curPtr != NULL) { hits++; curPtr= curPtr->nextPtr; } return hits; } void DesktopScreen::printList(DesktopScreenPtr dtsPtr) const { DesktopScreenPtr curPtr; curPtr = dtsPtr; while (curPtr != NULL) { printf("Screen Name %s\n", curPtr->screenName); curPtr = curPtr->nextPtr; } }