Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
MFXLinkLabel.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2006-2025 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
20//
21/****************************************************************************/
22
23/* =========================================================================
24 * included modules
25 * ======================================================================= */
26#include <config.h>
27
28#ifdef WIN32
29#define NOMINMAX
30#include <windows.h>
31#undef NOMINMAX
32#endif
33
35
36#include "MFXLinkLabel.h"
37
38
39FXint
41#ifdef WIN32
42 return (int)(intptr_t)ShellExecute(nullptr, "open", link.text(), nullptr, nullptr, SW_SHOWNORMAL) > 32 ? 1 : 0;
43#else
44 FXString ext = FXPath::extension(link);
45 FXString list;
46 if (comparecase(link.section(':', 0), "http") == 0 ||
47 comparecase(link.section(':', 0), "https") == 0 ||
48 comparecase(link.section(':', 0), "ftp") == 0 ||
49 comparecase(ext, "htm") == 0 || comparecase(ext, "html") == 0 ||
50 comparecase(ext, "php") == 0 || comparecase(ext, "asp") == 0) {
51 list = "firefox\tchromium\tkonqueror\tdillo\tlynx\topen";
52 } else if (comparecase(ext, "pdf") == 0) {
53 list = "acroread\tkghostview\tgpdf\txpdf";
54 }
55
56 if (list.length()) {
57 FXString software;
58 FXint index = 0;
59 FXString path = FXSystem::getExecPath();
60
61 software = list.section("\t", index);
62 while (!software.empty()) {
63 software = FXPath::search(path, software);
64 if (software.length())
65 return system(FXString().format("%s \"%s\" >/dev/null 2>&1 & ",
66 software.text(), link.text()).text()) > 0 ? 0 : 1;
67 index++;
68 software = list.section("\t", index);
69 }
70 } else if (FXStat::isExecutable(link)) {
71 return system((link + " >/dev/null 2>&1 & ").text()) > 0 ? 0 : 1;
72 }
73 return 0;
74#endif
75}
76
77
78
79FXDEFMAP(MFXLinkLabel) MFXLinkLabelMap[] = {
80 FXMAPFUNC(SEL_LEFTBUTTONPRESS, 0, MFXLinkLabel::onLeftBtnPress),
81 FXMAPFUNC(SEL_TIMEOUT, MFXLinkLabel::ID_TIMER, MFXLinkLabel::onTimer),
82};
83FXIMPLEMENT(MFXLinkLabel, FXLabel, MFXLinkLabelMap, ARRAYNUMBER(MFXLinkLabelMap))
84
85
86MFXLinkLabel::MFXLinkLabel(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) {
87 setDefaultCursor(getApp()->getDefaultCursor(DEF_HAND_CURSOR));
88 setTextColor(GUIDesignTextColorBlue);
89}
90
92 getApp()->removeTimeout(this, ID_TIMER);
93}
94
95long MFXLinkLabel::onLeftBtnPress(FXObject*, FXSelector, void*) {
96 FXString link = getTipText();
97 if (link.length()) {
98 getApp()->beginWaitCursor();
99 if (fxexecute(link)) {
100 getApp()->addTimeout(this, ID_TIMER, 2000); // 2 seconds of way cursor
101 } else {
102 getApp()->endWaitCursor();
103 getApp()->beep();
104 }
105 }
106 return 1;
107}
108
109long MFXLinkLabel::onTimer(FXObject*, FXSelector, void*) {
110 getApp()->endWaitCursor();
111 return 1;
112}
#define GUIDesignTextColorBlue
blue color (for default text)
Definition GUIDesigns.h:41