#Import required modules
import sys
import os
import os.path
import platform
if platform.architecture()[0] == "64bit":
sysdir=os.path.dirname(__file__)+'/lib/stdlib64'
else:
sysdir=os.path.dirname(__file__)+'/lib/stdlib'
sys.path.insert(0, sysdir)
os.environ['PATH'] = os.environ['PATH'] + ";."
import ac
import acsys
import configparser
import traceback
#from lib.sim_info_cbv import sm
from module.debug import debug
from lib.pyaccsharedmemory import accSharedMemory
asm = accSharedMemory()
sm = asm.read_shared_memory()
#Variables
desktop = 1
currentSession = -1
#Fields
toggleAppSizeButton = None
lbl_desktop = None
lbl_session = None
appWindow = None
#Session Types
#1 - Practice
#2 - Qualify
#3 - Race
#4 - Hotlap
#5 - Time Attack
#6 - Drift
#7 - Drag
choice_1 = ""
choice_2 = ""
choice_3 = ""
choice_4 = ""
settingsSection = "general"
min_win_x = 200
min_win_y = 80
max_win_x = 200
max_win_y = 200
minimised = True
def acMain(ac_version):
#Global Variables
global currentSession, desktop
#App Window
global appWindow
#Global Fields
global lbl_desktop, lbl_session, toggleAppSizeButton
#Screen fields
global min_win_x, min_win_y, max_win_x, max_win_y, minimised
#Set up window
appWindow = ac.newApp("desktopSwitcher")
ac.setSize(appWindow, min_win_x, min_win_y)
#Get Session
currentSession = sm.Graphics.session
ac.log('desktopSwitcher: currentSession in acMain = ' + str(currentSession))
#Add fields to form
#Current Desktop
lbl_desktop = ac.addLabel(appWindow, "Current Desktop = " + str(desktop))
ac.setPosition(lbl_desktop,3,30)
lbl_session = ac.addLabel(appWindow, "Current Session = " + returnSessionName(currentSession))
ac.setPosition(lbl_session,3,50)
toggleAppSizeButton = ac.addButton(appWindow, "+")
ac.setPosition(toggleAppSizeButton, 170, 30)
ac.setSize(toggleAppSizeButton, 20, 20)
ac.addOnClickedListener(toggleAppSizeButton, onToggleAppSizeButtonClickedListener)
#Dropdowns for selecting Session type
lst_desktop1 = ac.addListBox(appWindow, "lst_desktop_1")
ac.setPosition(lst_desktop1, 3, 70)
ac.addItem(lst_desktop1,"Practice")
ac.addItem(lst_desktop1,"Qualify")
ac.addItem(lst_desktop1,"Race")
ac.addItem(lst_desktop1,"Hotlap")
ac.addItem(lst_desktop1,"Time attack")
ac.addItem(lst_desktop1,"Drift")
ac.addItem(lst_desktop1,"Drag")
lst_desktop2 = ac.addListBox(appWindow, "lst_desktop_2")
ac.setPosition(lst_desktop2, 3, 90)
ac.addItem(lst_desktop2,"Practice")
ac.addItem(lst_desktop2,"Qualify")
ac.addItem(lst_desktop2,"Race")
ac.addItem(lst_desktop2,"Hotlap")
ac.addItem(lst_desktop2,"Time attack")
ac.addItem(lst_desktop2,"Drift")
ac.addItem(lst_desktop2,"Drag")
lst_desktop3 = ac.addListBox(appWindow, "lst_desktop_3")
ac.setPosition(lst_desktop3, 3, 110)
ac.addItem(lst_desktop3,"Practice")
ac.addItem(lst_desktop3,"Qualify")
ac.addItem(lst_desktop3,"Race")
ac.addItem(lst_desktop3,"Hotlap")
ac.addItem(lst_desktop3,"Time attack")
ac.addItem(lst_desktop3,"Drift")
ac.addItem(lst_desktop3,"Drag")
lst_desktop4 = ac.addListBox(appWindow, "lst_desktop_4")
ac.setPosition(lst_desktop4, 3, 130)
ac.addItem(lst_desktop4,"Practice")
ac.addItem(lst_desktop4,"Qualify")
ac.addItem(lst_desktop4,"Race")
ac.addItem(lst_desktop4,"Hotlap")
ac.addItem(lst_desktop4,"Time attack")
ac.addItem(lst_desktop4,"Drift")
ac.addItem(lst_desktop4,"Drag")
getSettings()
return "desktopSwitcher"
def acUpdate(deltaT):
#Global Variables
global currentSession, desktop
#Global Fields
global lbl_desktop, lbl_session
session = sm.Graphics.session
if session != currentSession:
currentSession = session;
ac.setText(lbl_session, "Current session: {}".format(returnSessionName(currentSession)))
def returnSessionName(sessionID):
if sessionID == 0:
return "Practice (" + str(sessionID) + ")"
elif sessionID == 1:
return "Qualify (" + str(sessionID) + ")"
elif sessionID == 2:
return "Race (" + str(sessionID) + ")"
elif sessionID == 3:
return "Hotlap (" + str(sessionID) + ")"
elif sessionID == 4:
return "Time Attack (" + str(sessionID) + ")"
elif sessionID == 5:
return "Drift (" + str(sessionID) + ")"
elif sessionID == 6:
return "Drag (" + str(sessionID) + ")"
else:
return "Unknown (" + str(sessionID) + ")"
def getSettings():
#Add global variables
global choice_1, choice_2, choice_3, choice_4
global desktop
#setup config
try:
FilePath = os.path.dirname(__file__)+'/settings/settings.ini'
if not os.path.isfile(FilePath):
with open(FilePath, "w") as sf:
debug("Settings file created")
settingsParser = configparser.ConfigParser()
settingsParser.optionxform = str
settingsParser.read(FilePath)
desktop = int(getSettingsValue(settingsParser, settingsSection, "desktop", -1))
choice_1 = str(getSettingsValue(settingsParser, settingsSection, "choice_1", "na"))
choice_2 = str(getSettingsValue(settingsParser, settingsSection, "choice_2", "na"))
choice_3 = str(getSettingsValue(settingsParser, settingsSection, "choice_3", "na"))
choice_4 = str(getSettingsValue(settingsParser, settingsSection, "choice_4", "na"))
with open(FilePath, 'w') as settingsFile:
FilePath.write(settingsFile)
return True
except exception:
debug("Error while loading settings : " + traceback.format_exc())
return False
def getSettingsValue(parser, section, option, value, boolean = False):
if parser.has_option(str(section), str(option)):
if boolean:
return parser.getboolean(str(section), option)
else:
return parser.get(str(section), str(option))
else:
return setSettingsValue(parser, section, option, value)
def setSettingsValue(parser, section, option, value):
if not parser.has_section(section):
parser.add_section(section)
parser.set(str(section), str(option), str(value))
return value
def onToggleAppSizeButtonClickedListener(*args):
global minimised, toggleAppSizeButton
ac.log("desktopSwitcher: minimised = " + str(minimised))
minimised = not minimised
if minimised:
ac.setText(toggleAppSizeButton, "+")
else:
ac.setText(toggleAppSizeButton, "-")
updateUIVisibility()
def updateUIVisibility():
#Screen fields
global appWindow
global min_win_x, min_win_y, max_win_x, max_win_y, minimised
global lst_desktop1, lst_desktop2, lst_desktop3, lst_desktop4
if minimised:
ac.setSize(appWindow, min_win_x, min_win_y)
ac.setVisible(lst_desktop1, False)
ac.setVisible(lst_desktop2, False)
ac.setVisible(lst_desktop3, False)
ac.setVisible(lst_desktop4, False)
else:
ac.setSize(appWindow, max_win_x, max_win_y)
ac.setVisible(lst_desktop1, True)
ac.setVisible(lst_desktop2, True)
ac.setVisible(lst_desktop3, True)
ac.setVisible(lst_desktop4, True)