Advertisement
1400_SpaceCat

wpstart.py

Nov 1st, 2015
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 15.83 KB | None | 0 0
  1. try:
  2.     from Tkinter import *
  3.     from Tkinter.filedialog import *
  4.     from Tkinter import tkMessageBox as messagebox
  5.     import Tix as tix
  6. except ImportError:
  7.     from tkinter import *
  8.     from tkinter.filedialog import *
  9.     from tkinter import messagebox
  10.     import tkinter.tix as tix
  11.  
  12. from os.path import expanduser
  13. from os import execl,system
  14. from sys import executable,argv,exit
  15. from time import gmtime,strftime
  16. from re import sub
  17. from subprocess import Popen
  18.  
  19. # from PIL import Image,ImageTk
  20. #import pygame
  21.  
  22. from wpktb import *
  23. from wpvs import *
  24.  
  25. class wpClass:
  26.     def __init__(self):
  27.         hideTaskbar()
  28.         #pygame.init()
  29.         view()
  30.  
  31.         # self.ram_check     = view.l["ram_check"]
  32.         self.pygameUpload = view.l["resources_settings"]["pygame"]["x32"]
  33.         self.pyexeUpload  = view.l["resources_settings"]["py2exe"]["x32"]
  34.        
  35.         self.appsNames      = view.l["apps_settings_windows"]["coding"]
  36.         self.appName        = list(self.appsNames.keys())
  37.         self.appsLambdaName = [ self.appName[i] for i in range(len(self.appsNames)) ]
  38.         self.appPath        = list(self.appsNames.values())
  39.         self.appsLambdaPath = [ self.appPath[i] for i in range(len(self.appsNames)) ]
  40.        
  41.         self.folderResources = view.l["resources_settings"]["resources_folder"]
  42.         self.folderModules   = view.l["resources_settings"]["modules_folder"]
  43.         self.folderThemes    = view.l["resources_settings"]["theme_folder"]
  44.         self.folderImages    = view.l["resources_settings"]["images_folder"]
  45.         self.styleTheme      = view.l["resources_settings"]["theme_style"]
  46.         self.folderIcons     = view.l["resources_settings"]["icons_folder"]
  47.         self.folderSounds    = view.l["resources_settings"]["sounds_folder"]
  48.        
  49.         fullscreenGM = view.l["windows_settings"]["fullscreen"]["gm_f"]
  50.         fullscreenOD = view.l["windows_settings"]["fullscreen"]["od_f"]
  51.        
  52.         self.WRX            = view.l["windows_settings"]["window_resizable"]["x0"]
  53.         self.WRY            = view.l["windows_settings"]["window_resizable"]["y0"]
  54.         mainWindowTitle     = view.l["windows_settings"]["main_window_title"]
  55.         self.imageDesktop   = view.l["windows_settings"]["desktop_image"]
  56.         self.iconMainwindow = view.l["windows_settings"]["mainwindow_icon"]
  57.  
  58.         #self.buttonAppsBoxIMG = view.l["buttons_settings"]["icons"]["appsbox_icon"]
  59.         self.iconSettings     = view.l["buttons_settings"]["icons"]["settings_icon"]
  60.         self.iconQC           = view.l["buttons_settings"]["icons"]["quickcommand_icon"]
  61.         self.iconSession      = view.l["buttons_settings"]["icons"]["session_icon"]
  62.         self.iconShutdown     = view.l["buttons_settings"]["icons"]["shutdown_icon"]
  63.         self.iconReboot       = view.l["buttons_settings"]["icons"]["reboot_icon"]
  64.         self.iconYes          = view.l["buttons_settings"]["icons"]["yes_icon"]
  65.         self.iconNo           = view.l["buttons_settings"]["icons"]["no_icon"]
  66.        
  67.         self.buttonsRelief   = view.l["buttons_settings"]["relief"]["flat"]
  68.         self.buttonsCompound = view.l["buttons_settings"]["compound"]["left"]
  69.        
  70.         self.buttonAppsBoxText  = view.l["buttons_settings"]["text"][1]["appsbox"]
  71.         self.buttonQCText       = view.l["buttons_settings"]["text"][1]["quickcommand"]
  72.         self.buttonSettingsText = view.l["buttons_settings"]["text"][1]["settings"]
  73.         self.buttonSessionText  = view.l["buttons_settings"]["text"][1]["session"]
  74.         self.buttonShutdownText = view.l["buttons_settings"]["text"][1]["shutdown"]
  75.         self.buttonRebootText   = view.l["buttons_settings"]["text"][1]["reboot"]
  76.         self.buttonCloseYesText = view.l["buttons_settings"]["text"][1]["yes"]
  77.         self.buttonCloseNoText  = view.l["buttons_settings"]["text"][1]["no"]
  78.        
  79.         self.soundInfo = view.l["sounds_settings"]["info_sound"]
  80.        
  81.         self.timewidgetFontName    = view.l["timewidget_settings"]["font"]["name"]
  82.         self.timewidgetFontSize    = view.l["timewidget_settings"]["font"]["size"]
  83.         self.timewidgetFontStyle   = view.l["timewidget_settings"]["font"]["style"]
  84.         self.timewidgetRelief      = view.l["timewidget_settings"]["relief"]["flat"]
  85.         self.timewidgetSeparator   = view.l["timewidget_settings"]["separator"]["none"]
  86.         self.timewidgetColumnsPos  = view.l["timewidget_settings"]["column_position"]["nextline"]
  87.         self.timewidgetShowTime    = view.l["timewidget_settings"]["datetime"]["time"]
  88.         self.timewidgetShowDate    = view.l["timewidget_settings"]["datetime"]["date"]
  89.  
  90.         self.mainWindow = Tk()
  91.         self.mainWindow.title(mainWindowTitle)
  92.         #self.mainWindow.iconbitmap(self.folderResources+self.folderThemes+self.styleTheme+self.folderIcons+self.iconMainwindow)
  93.  
  94.         w = self.mainWindow.winfo_screenwidth()
  95.         h = self.mainWindow.winfo_screenheight()
  96.  
  97.         self.mainWindow.geometry(fullscreenGM % (w, h))
  98.         self.mainWindow.overrideredirect(fullscreenOD)
  99.         self.mainWindow.resizable(self.WRX,self.WRY)
  100.  
  101.         self.mainWindow.protocol("WM_DELETE_WINDOW",self.blockClose)
  102.  
  103.         #init and destroy next widgets
  104.         self.frameButtons = Frame(self.mainWindow)
  105.         self.frameButtons.pack(side=BOTTOM,fill=X)
  106.         self.cmdFrame0 = Frame(self.mainWindow)
  107.         self.cmdFrame1 = Frame(self.mainWindow)
  108.         self.widgetSession = Toplevel()
  109.         self.widgetSession.destroy()
  110.         self.widgetSettings = Toplevel()
  111.         self.widgetSettings.destroy()
  112.         self.widgetMessage = Toplevel()
  113.         self.widgetMessage.destroy()
  114.  
  115.         self.buttonClock = Button(self.frameButtons,
  116.             text="",
  117.             font=(self.timewidgetFontName,self.timewidgetFontSize,self.timewidgetFontStyle),
  118.             relief=self.timewidgetRelief)
  119.         self.buttonClock.pack(side=LEFT)
  120.         self.Clocks()
  121.        
  122.         #self.buttonAppsBoxIMG = PhotoImage(file=self.folderResources+self.folderThemes+self.styleTheme+self.folderIcons+self.iconAppsBox)
  123.         self.buttonAppsBox = Button(self.frameButtons,
  124.             text=self.buttonAppsBoxText,
  125.             #image=self.buttonAppsBoxIMG,
  126.             compound=self.buttonsCompound,
  127.             relief=self.buttonsRelief,
  128.             command=self.appsMenuSelect)
  129.         self.buttonAppsBox.pack(side=RIGHT)
  130.  
  131.         self.buttonSettingsIMG = PhotoImage(file=self.folderResources+self.folderThemes+self.styleTheme+self.folderIcons+self.iconSettings)
  132.         self.buttonSettings = Button(self.frameButtons,
  133.             text=self.buttonSettingsText,
  134.             image=self.buttonSettingsIMG,
  135.             compound=self.buttonsCompound,
  136.             relief=self.buttonsRelief,
  137.             command=self.osSettings)
  138.         self.buttonSettings.pack(side=RIGHT)
  139.  
  140.         self.buttonSessionIMG = PhotoImage(file=self.folderResources+self.folderThemes+self.styleTheme+self.folderIcons+self.iconSession)
  141.         self.buttonSession = Button(self.frameButtons,
  142.             text=self.buttonSessionText,
  143.             image=self.buttonSessionIMG,
  144.             compound=self.buttonsCompound,
  145.             relief=self.buttonsRelief,
  146.             command=self.osSession)
  147.         self.buttonSession.pack(side=RIGHT)
  148.  
  149.         self.buttonQCIMG = PhotoImage(file=self.folderResources+self.folderThemes+self.styleTheme+self.folderIcons+self.iconQC)
  150.         self.buttonQC = Button(self.frameButtons,
  151.             text=self.buttonQCText,
  152.             image=self.buttonQCIMG,
  153.             compound=self.buttonsCompound,
  154.             relief=self.buttonsRelief,
  155.             command=self.quickCommand)
  156.         self.buttonQC.pack(side=RIGHT)
  157.  
  158.         #upper side
  159.         self.frameDesktop = Frame(self.mainWindow)
  160.         self.frameDesktop.pack(side=TOP,fill=X)
  161.        
  162.         self.labelDesktopIMG = PhotoImage(file=self.folderResources+self.folderThemes+self.styleTheme+self.folderImages+self.imageDesktop)
  163.         self.labelDesktop = Label(self.frameDesktop,image=self.labelDesktopIMG)
  164.         self.labelDesktop.pack(side=BOTTOM)
  165.  
  166.         self.mainWindow.mainloop()
  167.  
  168.     def Clocks(self):
  169.         now = strftime(self.timewidgetShowTime+self.timewidgetSeparator+self.timewidgetColumnsPos+self.timewidgetShowDate)
  170.         self.buttonClock.configure(text=now)
  171.         self.frameButtons.after(1000,self.Clocks)
  172.        
  173.     def appsMenuGet(self,event):
  174.         widgetEvent = event.widget
  175.         appSelected = widgetEvent.curselection()
  176.        
  177.         if ( len(appSelected) == 1 ):
  178.             Popen(self.appsLambdaPath[appSelected[0]])
  179.                
  180.     def appsMenuSelect(self):
  181.         self.widgetApps = Toplevel(self.mainWindow)
  182.         self.objectInTop(self.widgetApps)
  183.         self.widgetApps.title("Choose your app")
  184.         self.widgetApps.resizable(self.WRX,self.WRY)
  185.        
  186.         self.appsListBox = Listbox(self.widgetApps)
  187.         self.appsListBox.insert(END, *(self.appsLambdaName))
  188.        
  189.         for i in range(0, self.appsListBox.size()):
  190.             if ( self.appsListBox.get(i)[0] == "-" ):
  191.                 self.appsListBox.itemconfig(i,
  192.                     foreground="gray", \
  193.                     selectforeground="white", \
  194.                     selectbackground=self.appsListBox.itemcget(i,"background"))
  195.            
  196.         self.appsListBox.pack()
  197.         self.appsListBox.bind("<<ListboxSelect>>",self.appsMenuGet)
  198.        
  199.  
  200.     def osSession(self):
  201.         if ( self.widgetSession.winfo_exists() == 1 ):
  202.             self.widgetSession.destroy()
  203.  
  204.         self.widgetSession = Toplevel(self.mainWindow)
  205.         self.objectInTop(self.widgetSession)
  206.         self.widgetSession.title("Session options")
  207.         self.widgetSession.resizable(self.WRX,self.WRY)
  208.        
  209.         self.labelSession = Label(self.widgetSession,
  210.             text="\nPress a button \"Shutdown\" or \"Reboot\"",
  211.             font=("calibri",10,"bold")
  212.             )
  213.         self.labelSession.pack(side=BOTTOM)
  214.  
  215.         self.buttonRebootIMG = PhotoImage(file=self.folderResources+self.folderThemes+self.styleTheme+self.folderIcons+self.iconReboot)
  216.         self.buttonReboot = Button(self.widgetSession,
  217.             text=self.buttonRebootText,
  218.             image=self.buttonRebootIMG,
  219.             compound=self.buttonsCompound,
  220.             relief=self.buttonsRelief,
  221.             command=self.restartProgram)
  222.         self.buttonReboot.pack(side=LEFT)
  223.  
  224.         self.buttonShutdownIMG = PhotoImage(file=self.folderResources+self.folderThemes+self.styleTheme+self.folderIcons+self.iconShutdown)
  225.         self.buttonShutdown = Button(self.widgetSession,
  226.             text=self.buttonShutdownText,
  227.             image=self.buttonShutdownIMG,
  228.             compound=self.buttonsCompound,
  229.             relief=self.buttonsRelief,
  230.             command=self.shutdownProgram)
  231.         self.buttonShutdown.pack(side=RIGHT)
  232.  
  233.     def osSettings(self):
  234.         if ( self.widgetSettings.winfo_exists() == 1 ):
  235.             self.widgetSettings.destroy()
  236.  
  237.         self.widgetSettings = Toplevel(self.mainWindow)
  238.         self.objectInTop(self.widgetSettings)
  239.         self.widgetSettings.title("WP settings")
  240.         self.widgetSettings.resizable(self.WRX,self.WRY)
  241.  
  242.         self.buttonDesktopBG = Button(self.widgetSettings,
  243.             text="Background image",
  244.             relief=self.buttonsRelief,
  245.             command=self.settingsChangeBG)
  246.         self.buttonDesktopBG.pack()
  247.  
  248.     def settingsChangeBG(self):
  249.         pass
  250.  
  251.     def quickCommand(self):
  252.         self.buttonQC.pack_forget()
  253.  
  254.         self.buttonHide = Button(self.frameButtons,
  255.             text="Hide",
  256.             command=self.hideQCButtons,
  257.             relief=self.buttonsRelief)
  258.         self.buttonHide.pack(side=RIGHT)
  259.  
  260.         self.buttonAccept = Button(self.frameButtons,
  261.             text="Accept",
  262.             command=self.qcCheck,
  263.             relief=self.buttonsRelief)
  264.         self.buttonAccept.pack(side=RIGHT)
  265.  
  266.         self.entryQC = Entry(self.frameButtons)
  267.         self.entryQC.pack(side=RIGHT)
  268.         self.entryQC.focus_set()
  269.         self.entryQC.bind("<Return>",lambda x: self.qcCheck())
  270.  
  271.         self.labelQC = Label(self.frameButtons,text="Command: ")
  272.         self.labelQC.pack(side=RIGHT)
  273.  
  274.     def hideQCButtons(self):
  275.         self.buttonQC.pack(side=RIGHT)
  276.  
  277.         self.buttonAccept.pack_forget()
  278.         self.buttonHide.pack_forget()
  279.         self.entryQC.pack_forget()
  280.         self.labelQC.pack_forget()
  281.  
  282.     def qcCheck(self):
  283.         qc = self.entryQC.get()
  284.  
  285.         if ( "msg:" in qc ):
  286.             self._messagebox("Message",qc.replace("msg:",""))
  287.  
  288.         elif ( "do:" in qc ):
  289.             self.doCheck(qc.replace("do:",""))
  290.  
  291.         elif ( "info:" in qc ):
  292.             self.infoCheck(qc.replace("info:",""))
  293.  
  294.         else:
  295.             self._messagebox("Quick Command error","Unknow command: \""+qc+"\"")
  296.  
  297.     def info(self,infoParameter):
  298.         infoSound = pygame.mixer.Sound(self.folderResources+self.folderThemes+self.styleTheme+self.folderSounds+self.soundInfo)
  299.         infoSound.play()
  300.  
  301.         sw = self.mainWindow.winfo_screenwidth()
  302.         sh = self.mainWindow.winfo_screenheight()
  303.         swh = "W: "+str(sw)+"|H: "+str(sh)
  304.  
  305.         if ( infoParameter == "your-os" ):
  306.             self._messagebox("Scren information",swh)
  307.  
  308.         elif ( infoParameter == "virtual-os" ):
  309.             self._messagebox("Screen information","W: 800|H: 600")
  310.  
  311.         elif ( infoParameter == "" ):
  312.             self._messagebox("Scren information error","Try to use screen_info{} with a parameter virtual-os or your-os")
  313.  
  314.         else:
  315.             self._messagebox("Information error","Error is \""+infoParameter+"\"")
  316.  
  317.     def _messagebox(self,msgTitle,msgText):
  318.         if ( self.widgetMessage.winfo_exists() == 1 ):
  319.             self.widgetMessage.destroy()
  320.    
  321.         self.widgetMessage = Toplevel(self.mainWindow)
  322.         self.objectInTop(self.widgetMessage)
  323.         self.widgetMessage.title(msgTitle)
  324.         self.widgetMessage.resizable(self.WRX,self.WRY)
  325.  
  326.         self.frameMessage0 = Frame(width=100,height=100)
  327.         self.frameMessage1 = Frame(width=100,height=100)
  328.         self.frameMessage0.pack(fill="both", expand=True, padx=10, pady=10)
  329.         self.frameMessage1.place(in_=self.frameMessage0,anchor="c",
  330.             relx=.5,rely=.5)
  331.            
  332.         self.labelMessage = Label(self.widgetMessage,text=msgText)
  333.         self.labelMessage.pack()
  334.         self.widgetMessage.geometry("300x300")
  335.  
  336.     def doCheck(self,commandParameter):
  337.         if ( commandParameter.find("cmdl{start}") != -1 ):
  338.             print(commandParameter)
  339.             self.commandLineInit()
  340.         elif ( commandParameter.find("cmdl{exit}") != -1 ):
  341.             self.commandLineClose()
  342.         else:
  343.             self._messagebox("Systemdo error","Error is \""+commandParameter+"\"")
  344.  
  345.     def infoCheck(self,infoParameter):
  346.         if ( infoParameter.find("screen") != -1 ):
  347.             infoParameter = sub("^\w+{","",infoParameter)
  348.             infoParameter = infoParameter.replace("}","")
  349.             print(infoParameter)
  350.             self.info(infoParameter)
  351.  
  352.     def commandLineInit(self):
  353.         self.frameDesktop.pack_forget()
  354.         # self.desktop_label.pack_forget()
  355.  
  356.         if ( self.cmdFrame0.winfo_exists() == 1 and self.cmdFrame1.winfo_exists() == 1 ):
  357.             self.cmdFrame0.destroy()
  358.             self.cmdFrame1.destroy()
  359.  
  360.         self.cmdFrame0 = Frame(width=100,height=100,bg="black")
  361.         self.cmdFrame1 = Frame(width=100,height=100,bg="black")
  362.         self.cmdFrame0.pack(fill="both", expand=True, padx=10, pady=10)
  363.         self.cmdFrame1.place(in_=self.cmdFrame0,
  364.             anchor="c",
  365.             relx=.5,
  366.             rely=.5)
  367.  
  368.         self.cmdText = Text(self.cmdFrame1,
  369.             font=("doslike",10),
  370.             insertbackground="white",
  371.             bg="black",
  372.             fg="white",
  373.             bd=0)
  374.        
  375.         self.cmdEntry = Entry(self.cmdFrame0,
  376.             width=100,
  377.             font=("doslike",10),
  378.             insertbackground="white",
  379.             bg="black",
  380.             fg="white",
  381.             bd=0)
  382.         self.cmdEntry.pack(side=TOP)
  383.         self.cmdText.pack(side=TOP)
  384.         self.cmdText.insert(1.0, "GEOS command line [Syntax is WPL 2.0] | ")
  385.         self.cmdText.config(state=DISABLED)
  386.  
  387.     def commandLineClose(self):
  388.         if ( self.cmdFrame0.winfo_exists() == 1 and self.cmdFrame1.winfo_exists() == 1 ):
  389.             self.cmdFrame0.destroy()
  390.             self.cmdFrame1.destroy()
  391.             self.frameDesktop.pack(side=TOP,fill=X)
  392.             #self.desktop_label.pack(side=BOTTOM)
  393.  
  394.     def yesno(self,yesArg,noArg):
  395.         self.widgetCloseQuestion = Toplevel(self.mainWindow)
  396.         self.objectInTop(self.widgetCloseQuestion)
  397.        
  398.         self.buttonCloseYesIMG = PhotoImage(file=self.folderResources+self.folderThemes+self.styleTheme+self.folderIcons+self.iconYes)
  399.         self.buttonCloseYes = Button(self.widgetCloseQuestion,
  400.             text=self.buttonCloseYesText,
  401.             image=self.buttonCloseYesIMG,
  402.             compound=self.buttonsCompound,
  403.             relief=self.buttonsRelief,
  404.             command=lambda y: sys.exit()
  405.             )
  406.  
  407.         self.buttonCloseNoIMG = PhotoImage(file=self.folderResources+self.folderThemes+self.styleTheme+self.folderIcons+self.iconNo)
  408.         self.buttonCloseNo = Button(self.widgetCloseQuestion,
  409.             text=self.buttonCloseNoText,
  410.             image=self.buttonCloseNoIMG,
  411.             compound=self.buttonsCompound,
  412.             relief=self.buttonsRelief,
  413.             command=lambda n: print("Hello"))
  414.  
  415.     def combineFunction(self,*funcs):
  416.         def combineFunctionResult(*args, **kwargs):
  417.             for f in funcs:
  418.                 f(*args, **kwargs)
  419.         return combineFunctionResult
  420.  
  421.     def objectInTop(self,*objName):
  422.         for o in objName:
  423.             o.wm_attributes("-topmost", 1)
  424.        
  425.     def restartProgram(self):
  426.         python = sys.executable
  427.         os.execl(python, python, * sys.argv)
  428.  
  429.     def shutdownProgram(self):
  430.         unhideTaskbar()
  431.         self.mainWindow.destroy()
  432.  
  433.     def blockClose(self):
  434.         pass
  435.            
  436.     def checkMouseMotion(event):
  437.         self.XMP, self.YMP = event.x, event.y
  438.         print('{}, {}'.format(self.XMP, self.YMP))
  439.  
  440. app = wpClass()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement