text: # ##########################################################
  # FlatCAM: 2D Post-processing for Manufacturing            #
  # File Author: Marius Adrian Stanciu (c)                   #
  # Date: 4/28/2020                                          #
  # MIT Licence                                              #
  # ##########################################################
  
  from tclCommands.TclCommand import TclCommand
  
  import collections
  import os
  import logging
  import gettext
  import appTranslation as fcTranslate
  import builtins
  
  fcTranslate.apply_language('strings')
  if '_' not in builtins.__dict__:
      _ = gettext.gettext
  
  log = logging.getLogger('base')
  
  
  class TclCommandSetPath(TclCommand):
      """
      Tcl shell command to set the default path for Tcl Shell for opening files.
  
      example:
  
      """
  
      # List of all command aliases, to be able use old names for backward compatibility (add_poly, add_polygon)
      aliases = ['set_path']
  
      description = '%s %s' % ("--", "Set the folder path to the specified path.")
  
      # Dictionary of types from Tcl command, needs to be ordered
      arg_names = collections.OrderedDict([
          ('path', str)
      ])
  
      # Dictionary of types from Tcl command, needs to be ordered , this  is  for options  like -optionname value
      option_types = collections.OrderedDict([
      ])
  
      # array of mandatory options for current Tcl command: required = {'name','outname'}
      required = ['path']
  
      # structured help for current command, args needs to be ordered
      help = {
          'main': "Will set the folder path to the specified path.\n"
                  "By using this command there is no need for usage of the absolute path to the files.",
          'args': collections.OrderedDict([
              ('path', 'A folder path to where the user is supposed to have the file that he will work with.\n'
                       'WARNING: No spaces allowed. Use quotes around the path if it contains spaces.'),
          ]),
          'examples': ['set_path D:\\Project_storage_path']
      }
  
      def execute(self, args, unnamed_args):
          """
  
          :param args:
          :param unnamed_args:
          :return:
          """
  
          if 'path' not in args:
              return "Failed. The Tcl command set_path was used but no path argument was provided."
          else:
              path = str(args['path']).replace('\\', '/')
  
          # check if path exists
          path_isdir = os.path.isdir(path)
          if path_isdir is False:
              path_isfile = os.path.isfile(path)
              if path_isfile:
                  msg = '[ERROR] %s: %s, %s' % (
                      "The provided path",
                      str(path),
                      "is a path to file and not a directory as expected.")
                  self.app.inform_shell.emit(msg)
                  return "Failed. The Tcl command set_path was used but it was not a directory."
              else:
                  msg = '[ERROR] %s: %s, %s' % (
                      "The provided path", str(path), "do not exist. Check for typos.")
                  self.app.inform_shell.emit(msg)
                  return "Failed. The Tcl command set_path was used but it does not exist."
  
          cd_command = 'cd %s' % path
          self.app.shell.exec_command(cd_command, no_echo=False)
          self.app.defaults["global_tcl_path"] = str(path)
          msg = '[success] %s: %s' % ("Relative path set to", str(path))
          self.app.inform_shell.emit(msg)
  