Path: blob/main/src/netedit/dialogs/tools/GNENetgenerateDialog.cpp
193723 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2026 German Aerospace Center (DLR) and others.3// This program and the accompanying materials are made available under the4// terms of the Eclipse Public License 2.0 which is available at5// https://www.eclipse.org/legal/epl-2.0/6// This Source Code may also be made available under the following Secondary7// Licenses when the conditions for such availability set forth in the Eclipse8// Public License 2.0 are satisfied: GNU General Public License, version 29// or later which is available at10// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later12/****************************************************************************/13/// @file GNENetgenerateDialog.cpp14/// @author Pablo Alvarez Lopez15/// @date Mar 202316///17// Dialog for netgenerate18/****************************************************************************/1920#include <netedit/GNEApplicationWindow.h>21#include <utils/gui/div/GUIDesigns.h>2223#include "GNENetgenerateDialog.h"2425// ===========================================================================26// FOX callback mapping27// ===========================================================================2829FXDEFMAP(GNENetgenerateDialog) GNENetgenerateDialogMap[] = {30FXMAPFUNC(SEL_COMMAND, MID_GNE_OPEN, GNENetgenerateDialog::onCmdOpenOutputFile),31FXMAPFUNC(SEL_COMMAND, MID_GNE_SET_ATTRIBUTE, GNENetgenerateDialog::onCmdSetOutput),32FXMAPFUNC(SEL_COMMAND, MID_GNE_NETGENERATE_GRID, GNENetgenerateDialog::onCmdSetGridNetwork),33FXMAPFUNC(SEL_COMMAND, MID_GNE_NETGENERATE_SPIDER, GNENetgenerateDialog::onCmdSetSpiderNetwork),34FXMAPFUNC(SEL_COMMAND, MID_GNE_NETGENERATE_RANDOMGRID, GNENetgenerateDialog::onCmdSetRandomNetworkGridNetwork),35FXMAPFUNC(SEL_COMMAND, MID_GNE_NETGENERATE_RANDOM, GNENetgenerateDialog::onCmdSetRandomNetwork),36FXMAPFUNC(SEL_COMMAND, MID_GNE_BUTTON_ADVANCED, GNENetgenerateDialog::onCmdAdvanced),37};3839// Object implementation40FXIMPLEMENT(GNENetgenerateDialog, GNEDialog, GNENetgenerateDialogMap, ARRAYNUMBER(GNENetgenerateDialogMap))4142// ============================================-===============================43// member method definitions44// ===========================================================================4546GNENetgenerateDialog::GNENetgenerateDialog(GNEApplicationWindow* applicationWindow) :47GNEDialog(applicationWindow, "Netgenerate", GUIIcon::NETGENERATE,48DialogType::NETGENERATE, GNEDialog::Buttons::RUN_ADVANCED_CANCEL,49GNEDialog::OpenType::MODAL, ResizeMode::STATIC) {50// build labels51auto horizontalFrame = new FXHorizontalFrame(myContentFrame, GUIDesignAuxiliarHorizontalFrame);52myGridNetworkLabel = new FXLabel(horizontalFrame, TL("Grid"), nullptr, GUIDesignLabelThickedFixed(GUIDesignBigSizeElement));53mySpiderNetworkLabel = new FXLabel(horizontalFrame, TL("Spider"), nullptr, GUIDesignLabelThickedFixed(GUIDesignBigSizeElement));54myRandomGridNetworkLabel = new FXLabel(horizontalFrame, TL("Random grid"), nullptr, GUIDesignLabelThickedFixed(GUIDesignBigSizeElement));55myRandomNetworkLabel = new FXLabel(horizontalFrame, TL("Random"), nullptr, GUIDesignLabelThickedFixed(GUIDesignBigSizeElement));56// build buttons57horizontalFrame = new FXHorizontalFrame(myContentFrame, GUIDesignAuxiliarHorizontalFrame);58myGridNetworkButton = new MFXCheckableButton(false, horizontalFrame, applicationWindow->getStaticTooltipMenu(), "",59GUIIconSubSys::getIcon(GUIIcon::NETGENERATE_GRID), this, MID_GNE_NETGENERATE_GRID, GUIDesignMFXCheckableButtonBig);60mySpiderNetworkButton = new MFXCheckableButton(false, horizontalFrame, applicationWindow->getStaticTooltipMenu(), "",61GUIIconSubSys::getIcon(GUIIcon::NETGENERATE_SPIDER), this, MID_GNE_NETGENERATE_SPIDER, GUIDesignMFXCheckableButtonBig);62myRandomGridNetworkButton = new MFXCheckableButton(false, horizontalFrame, applicationWindow->getStaticTooltipMenu(), "",63GUIIconSubSys::getIcon(GUIIcon::NETGENERATE_RANDOMGRID), this, MID_GNE_NETGENERATE_RANDOMGRID, GUIDesignMFXCheckableButtonBig);64myRandomNetworkButton = new MFXCheckableButton(false, horizontalFrame, applicationWindow->getStaticTooltipMenu(), "",65GUIIconSubSys::getIcon(GUIIcon::NETGENERATE_RANDOM), this, MID_GNE_NETGENERATE_RANDOM, GUIDesignMFXCheckableButtonBig);66// add invisible separator67new FXSeparator(myContentFrame, SEPARATOR_NONE);68// build output file elements69horizontalFrame = new FXHorizontalFrame(myContentFrame, GUIDesignAuxiliarHorizontalFrame);70new FXLabel(horizontalFrame, "output-file", nullptr, GUIDesignLabelThickedFixed(GUIDesignBigSizeElement));71GUIDesigns::buildFXButton(horizontalFrame, "", "", TL("Select filename"),72GUIIconSubSys::getIcon(GUIIcon::OPEN_NET), this, MID_GNE_OPEN, GUIDesignButtonIcon);73myOutputTextField = new FXTextField(horizontalFrame, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);74// open dialog75auto& generateOptions = myApplicationWindow->getNetgenerateOptions();76// reset buttons77if (generateOptions.getBool("grid")) {78if (generateOptions.getBool("rand.grid")) {79myRandomGridNetworkButton->setChecked(true);80onCmdSetRandomNetworkGridNetwork(nullptr, 0, nullptr);81} else {82myGridNetworkButton->setChecked(true);83onCmdSetGridNetwork(nullptr, 0, nullptr);84}85} else if (generateOptions.getBool("spider")) {86mySpiderNetworkButton->setChecked(true);87onCmdSetSpiderNetwork(nullptr, 0, nullptr);88} else if (generateOptions.getBool("random")) {89myRandomNetworkButton->setChecked(true);90onCmdSetRandomNetwork(nullptr, 0, nullptr);91}92// set output93myOutputTextField->setText(generateOptions.getValueString("output-file").c_str());94// disable run and advanced95updateRunButtons();96// open dialog97openDialog();98}99100101GNENetgenerateDialog::~GNENetgenerateDialog() {}102103104void105GNENetgenerateDialog::runInternalTest(const InternalTestStep::DialogArgument* /*dialogArgument*/) {106// nothing to do107}108109110long111GNENetgenerateDialog::onCmdOpenOutputFile(FXObject*, FXSelector, void*) {112// get output file113const GNEFileDialog networkFileDialog(myApplicationWindow, this,114TL("network file"),115SUMOXMLDefinitions::NetFileExtensions.getStrings(),116GNEFileDialog::OpenMode::SAVE,117GNEFileDialog::ConfigType::NETEDIT);118// check file119if (networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) {120myOutputTextField->setText(networkFileDialog.getFilename().c_str(), TRUE);121}122return 1;123}124125126long127GNENetgenerateDialog::onCmdSetOutput(FXObject*, FXSelector, void*) {128auto& generateOptions = myApplicationWindow->getNetgenerateOptions();129generateOptions.resetWritable();130// check if filename is valid131if (SUMOXMLDefinitions::isValidFilename(myOutputTextField->getText().text()) == false) {132myOutputTextField->setTextColor(GUIDesignTextColorRed);133} else {134generateOptions.set("output-file", myOutputTextField->getText().text());135myOutputTextField->setTextColor(GUIDesignTextColorBlack);136}137updateRunButtons();138return 1;139}140141142long143GNENetgenerateDialog::onCmdSetGridNetwork(FXObject*, FXSelector, void*) {144auto& generateOptions = myApplicationWindow->getNetgenerateOptions();145// reset all flags146generateOptions.resetWritable();147generateOptions.set("grid", "true");148generateOptions.set("spider", "false");149generateOptions.set("rand", "false");150generateOptions.set("rand.grid", "false");151// set buttons152myGridNetworkButton->setChecked(true, true);153mySpiderNetworkButton->setChecked(false, true);154myRandomGridNetworkButton->setChecked(false, true);155myRandomNetworkButton->setChecked(false, true);156// set labels color157myGridNetworkLabel->setTextColor(GUIDesignTextColorBlue);158mySpiderNetworkLabel->setTextColor(GUIDesignTextColorBlack);159myRandomGridNetworkLabel->setTextColor(GUIDesignTextColorBlack);160myRandomNetworkLabel->setTextColor(GUIDesignTextColorBlack);161// enable flag162mySelectedNetworktypeFlag = true;163updateRunButtons();164return 1;165}166167168long169GNENetgenerateDialog::onCmdSetSpiderNetwork(FXObject*, FXSelector, void*) {170auto& generateOptions = myApplicationWindow->getNetgenerateOptions();171// reset all flags172generateOptions.resetWritable();173generateOptions.set("grid", "false");174generateOptions.set("spider", "true");175generateOptions.set("spider.omit-center", "true");176generateOptions.set("rand", "false");177generateOptions.set("rand.grid", "false");178// set buttons179myGridNetworkButton->setChecked(false, true);180mySpiderNetworkButton->setChecked(true, true);181myRandomGridNetworkButton->setChecked(false, true);182myRandomNetworkButton->setChecked(false, true);183// set labels color184myGridNetworkLabel->setTextColor(GUIDesignTextColorBlack);185mySpiderNetworkLabel->setTextColor(GUIDesignTextColorBlue);186myRandomGridNetworkLabel->setTextColor(GUIDesignTextColorBlack);187myRandomNetworkLabel->setTextColor(GUIDesignTextColorBlack);188// enable flag189mySelectedNetworktypeFlag = true;190updateRunButtons();191return 1;192}193194195long196GNENetgenerateDialog::onCmdSetRandomNetworkGridNetwork(FXObject*, FXSelector, void*) {197auto& generateOptions = myApplicationWindow->getNetgenerateOptions();198// reset all flags199generateOptions.resetWritable();200generateOptions.set("grid", "false");201generateOptions.set("spider", "false");202generateOptions.set("rand", "true");203generateOptions.set("rand.grid", "true");204// set buttons205myGridNetworkButton->setChecked(false, true);206mySpiderNetworkButton->setChecked(false, true);207myRandomGridNetworkButton->setChecked(true, true);208myRandomNetworkButton->setChecked(false, true);209// set labels color210myGridNetworkLabel->setTextColor(GUIDesignTextColorBlack);211mySpiderNetworkLabel->setTextColor(GUIDesignTextColorBlack);212myRandomGridNetworkLabel->setTextColor(GUIDesignTextColorBlue);213myRandomNetworkLabel->setTextColor(GUIDesignTextColorBlack);214// enable flag215mySelectedNetworktypeFlag = true;216updateRunButtons();217return 1;218}219220221long222GNENetgenerateDialog::onCmdSetRandomNetwork(FXObject*, FXSelector, void*) {223auto& generateOptions = myApplicationWindow->getNetgenerateOptions();224// reset all flags225generateOptions.resetWritable();226generateOptions.set("grid", "false");227generateOptions.set("spider", "false");228generateOptions.set("rand", "true");229generateOptions.set("rand.grid", "false");230// set buttons231myGridNetworkButton->setChecked(false, true);232mySpiderNetworkButton->setChecked(false, true);233myRandomGridNetworkButton->setChecked(false, true);234myRandomNetworkButton->setChecked(true, true);235// set labels color236myGridNetworkLabel->setTextColor(GUIDesignTextColorBlack);237mySpiderNetworkLabel->setTextColor(GUIDesignTextColorBlack);238myRandomGridNetworkLabel->setTextColor(GUIDesignTextColorBlack);239myRandomNetworkLabel->setTextColor(GUIDesignTextColorBlue);240// enable flag241mySelectedNetworktypeFlag = true;242updateRunButtons();243return 1;244}245246247long248GNENetgenerateDialog::onCmdRun(FXObject*, FXSelector, void*) {249// close dialog250closeDialogCanceling();251// run netgenerate252return myApplicationWindow->tryHandle(this, FXSEL(SEL_COMMAND, MID_GNE_RUNNETGENERATE), nullptr);253}254255256long257GNENetgenerateDialog::onCmdAdvanced(FXObject*, FXSelector, void*) {258// close dialog259closeDialogCanceling();260// open netgenerate option dialog261return myApplicationWindow->tryHandle(this, FXSEL(SEL_COMMAND, MID_GNE_NETGENERATEOPTIONS), nullptr);262}263264265void266GNENetgenerateDialog::updateRunButtons() {267// enable or disable run and advanced buttons depending of flags268if ((myOutputTextField->getText().length() > 0) && mySelectedNetworktypeFlag) {269myRunButton->enable();270myAdvancedButton->enable();271} else {272myRunButton->disable();273myAdvancedButton->disable();274}275}276277/****************************************************************************/278279280