AZJIO

SaveFolders (PureBasic, Linux)

Nov 1st, 2018
809
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Declare Create_ini(ini$)
  2. UsePNGImageDecoder()
  3.  
  4.  
  5. If OpenWindow(0, 100, 150, 300, 100, "SaveFolders - SysTray", #PB_Window_SystemMenu | #PB_Window_Invisible)
  6.     ;   CompilerIf #PB_Compiler_OS = #PB_OS_Linux
  7.     ; some Linux and x86 specific code.
  8.     ;   CompilerEndIf
  9.     CatchImage(0, ?folder24_png)
  10.     CatchImage(1, ?folder_png)
  11.     AddSysTrayIcon(0, WindowID(0), ImageID(0))        ; иконка в трее
  12.     SysTrayIconToolTip(0, "SaveFolders")              ; Название проги в подсказке
  13.  
  14.     ArrSize = 100
  15.     Dim ArrPath.s(ArrSize)
  16.  
  17.     Repeat
  18.         CreatePopupImageMenu(0)
  19.         ; получаем путь к ини по имени программы
  20.         ini$ = GetPathPart(ProgramFilename()) + GetFilePart(ProgramFilename(), #PB_FileSystem_NoExtension) + ".ini"
  21.         ;   Debug ini$
  22.         If FileSize(ini$) = -1 And Not Create_ini(ini$)
  23.             MessageRequester("Ошибка", "Не найден файл и не удаётся создать" + #CRLF$ + ini$)
  24.             End
  25.         EndIf
  26.         ; заполнение массива
  27.         OpenPreferences(ini$)
  28.         i=0
  29.         ExaminePreferenceGroups()
  30.         While NextPreferenceGroup()
  31.            
  32.             tmp$ = PreferenceGroupName()
  33.             OpenSubMenu(tmp$, ImageID(1))
  34.             ;       Debug tmp$
  35.            
  36.             ExaminePreferenceKeys()
  37.             While NextPreferenceKey()
  38.                 ;           Param.s = PreferenceKeyValue()
  39.                 ;           If Param<>""
  40.                 ;               Param = " - параметры: "+Param
  41.                 ;           EndIf
  42.                 tmp$ = PreferenceKeyName()
  43.                 If Not FileSize(tmp$) = -2 ; Если путь не является существующим каталогом, то игнор и следующий
  44.                     Continue
  45.                 EndIf
  46.                 i+1
  47.                 If i > ArrSize
  48.                     ArrSize + 100
  49.                     ReDim ArrPath(ArrSize)
  50.                 EndIf
  51.                 MenuItem(i, tmp$, ImageID(1))
  52.                 ArrPath(i) = tmp$
  53.                 ;           Debug tmp$
  54.             Wend
  55.             CloseSubMenu()
  56.  
  57.         Wend
  58.         ClosePreferences()
  59.  
  60.         MenuBar()
  61.         OpenSubMenu("Меню")
  62.         MenuItem(997, "Перезапуск ini")
  63.         MenuItem(998, "Открыть ini")
  64.         MenuItem(999, "Выход")
  65.         CloseSubMenu()
  66.         ;   MenuItem(998, "Инфа")
  67.         ;   Q = 0
  68.         ;   Dim ArrProg.s(3)
  69.         ;   ArrProg(1) = "geany"
  70.         Prog.s = ""
  71.         If FileSize("geany")
  72.             Prog.s = "geany"
  73.         ElseIf FileSize("xed")
  74.             Prog.s = "xed"
  75.         ElseIf FileSize("gedit")
  76.             Prog.s = "gedit"
  77.         EndIf
  78.        
  79.         tmp$ = ""
  80.  
  81.         Repeat
  82.             Event = WaitWindowEvent()
  83.             If Event = #PB_Event_SysTray
  84.                 Select EventType()
  85.                     Case #PB_EventType_LeftClick, #PB_EventType_RightClick
  86.                         DisplayPopupMenu(0, WindowID(0))          ; показ вспывающего меню
  87.                 EndSelect
  88.             EndIf
  89.             If Event = #PB_Event_Menu
  90.                 em = EventMenu()
  91.                 If em >= 1 And em <= i
  92. ;                   If FindString(ArrPath(em) , " ")
  93. ;                       tmp$ = ReplaceString(ArrPath(em) , "/" , Chr(34)+"/"+Chr(34), #PB_String_NoCase)+Chr(34)
  94. ;                       tmp$ = LTrim(tmp$, Chr(34))
  95. ; ;                         tmp$ = RTrim(tmp$, Chr(34))
  96. ;                   Else
  97. ;                       tmp$ = ArrPath(em)
  98. ;                   EndIf
  99. ;                   RunProgram("nemo", ArrPath(em), "")
  100.                     RunProgram("nemo", Chr(34)+ArrPath(em)+Chr(34), "")
  101. ;                   RunProgram("nemo", tmp$, "")
  102. ;                   Debug "nemo " + ArrPath(em)
  103. ;                   Debug tmp$
  104.                 ElseIf em = 997
  105.                     Break
  106.                 ElseIf em = 998
  107.                     If Prog.s <> ""
  108.                         RunProgram(Prog.s, ini$, "")
  109.                     EndIf
  110.                 ElseIf em = 999
  111.                     FreeMenu(0)
  112.                     FreeArray(ArrPath())
  113.                     CloseWindow(0)
  114.                     End
  115.                 EndIf
  116.             EndIf
  117.         ForEver
  118.  
  119.         FreeMenu(0)
  120.         FreeArray(ArrPath())
  121.         ArrSize = 100
  122.         Dim ArrPath(ArrSize)
  123.     ForEver
  124. EndIf
  125.  
  126.  
  127. End
  128.  
  129.  
  130. Procedure Create_ini(ini$)
  131.     Protected hfile, Text$
  132.     Text$ = "[System]" + #CRLF$ + GetHomeDirectory() + #CRLF$ + "/usr/share/backgrounds" + #CRLF$ + "/usr/share/icons" + #CRLF$ + "/usr/share/themes" + #CRLF$ + "/usr/share/applications" + #CRLF$ + #CRLF$ + "[PureBasic]" + #CRLF$ + GetCurrentDirectory() + #CRLF$ + #PB_Compiler_Home
  133.     hfile = OpenFile(#PB_Any, ini$, #PB_UTF8)
  134.     If hfile
  135.         If WriteStringFormat(hfile, #PB_UTF8)
  136.             WriteString(hfile, Text$, #PB_UTF8)
  137.             CloseFile(hfile)
  138.             ProcedureReturn 1
  139.         EndIf
  140.         CloseFile(hfile)
  141.     EndIf
  142.     ProcedureReturn 0
  143. EndProcedure
  144.  
  145.  
  146. DataSection
  147.     folder_png:
  148.     IncludeBinary "images/folder.png"
  149.     folder_pngend:
  150.     folder24_png:
  151.     IncludeBinary "images/folder24.png"
  152.     folder24_pngend:
  153. EndDataSection
RAW Paste Data