SUMO - Simulation of Urban MObility

FXLinkLabel.cpp

Go to the documentation of this file.
00001 /* =========================================================================
00002  * included modules
00003  * ======================================================================= */
00004 #ifdef _MSC_VER
00005 #include <windows_config.h>
00006 #else
00007 #include <config.h>
00008 #endif
00009 
00010 #ifdef WIN32
00011 #include <windows.h>
00012 #endif
00013 
00014 #include "FXLinkLabel.h"
00015 
00016 #ifdef CHECK_MEMORY_LEAKS
00017 #include <foreign/nvwa/debug_new.h>
00018 #endif // CHECK_MEMORY_LEAKS
00019 
00020 
00021 FXint fxexecute(FXString link) {
00022 #ifdef WIN32
00023     FXString quoted = FXPath::enquote(link);
00024     return (size_t)ShellExecute(NULL,"open",quoted.text(),NULL,NULL,SW_SHOW) > 32;
00025 #else
00026     FXString ext = FXPath::extension(link);
00027     FXString list;
00028     if (comparecase(link.section(':',0), "http")==0 ||
00029             comparecase(link.section(':',0), "ftp")==0 ||
00030             comparecase(ext, "htm")==0 || comparecase(ext, "html")==0 ||
00031             comparecase(ext, "php")==0 || comparecase(ext, "asp")==0) {
00032         list = "mozilla-firefox\tmozilla\tnetscape\tkonqueror\tdillo\tlynx";
00033     } else if (comparecase(ext, "pdf")==0) {
00034         list = "acroread\tkghostview\tgpdf\txpdf";
00035     }
00036 
00037     if (list.length()) {
00038         FXString software;
00039         FXint index=0;
00040         FXString path = FXSystem::getExecPath();
00041 
00042         software = list.section("\t",index);
00043         while (!software.empty()) {
00044             software = FXPath::search(path, software);
00045             if (software.length())
00046                 return system(FXString().format("%s \"%s\" >/dev/null 2>&1 & ",
00047                                                 software.text(),link.text()).text())>0?0:1;
00048             index++;
00049             software = list.section("\t",index);
00050         }
00051     } else if (FXStat::isExecutable(link)) {
00052         return system((link + " >/dev/null 2>&1 & ").text()) > 0 ? 0:1;
00053     }
00054     return 0;
00055 #endif
00056 }
00057 
00058 
00059 
00060 FXDEFMAP(FXLinkLabel) FXLinkLabelMap[]= {
00061     FXMAPFUNC(SEL_LEFTBUTTONPRESS,0,FXLinkLabel::onLeftBtnPress),
00062     FXMAPFUNC(SEL_TIMEOUT,FXLinkLabel::ID_TIMER,FXLinkLabel::onTimer),
00063 };
00064 FXIMPLEMENT(FXLinkLabel,FXLabel,FXLinkLabelMap,ARRAYNUMBER(FXLinkLabelMap))
00065 
00066 
00067 FXLinkLabel::FXLinkLabel(FXComposite* p,const FXString& text,FXIcon* ic,FXuint opts,FXint x,FXint y,FXint w,FXint h,FXint pl,FXint pr,FXint pt,FXint pb) :FXLabel(p,text,ic,opts,x,y,w,h,pl,pr,pt,pb) {
00068     setDefaultCursor(getApp()->getDefaultCursor(DEF_HAND_CURSOR));
00069     setTextColor(FXRGB(0,0,255));
00070 }
00071 
00072 FXLinkLabel::~FXLinkLabel() {
00073     getApp()->removeTimeout(this,ID_TIMER);
00074 }
00075 
00076 long FXLinkLabel::onLeftBtnPress(FXObject*,FXSelector,void*) {
00077     FXString link = getTipText();
00078     if (link.length()) {
00079         getApp()->beginWaitCursor();
00080         if (fxexecute(link)) {
00081             getApp()->addTimeout(this,ID_TIMER,2000);    // 2 seconds of way cursor
00082         } else {
00083             getApp()->endWaitCursor();
00084             getApp()->beep();
00085         }
00086     }
00087     return 1;
00088 }
00089 
00090 long FXLinkLabel::onTimer(FXObject*,FXSelector,void*) {
00091     getApp()->endWaitCursor();
00092     return 1;
00093 }
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Defines