Preference Editor
Verfasst: 16.03.2009 11:56
Dieses Snippet ist bereits ein vollständiger Preference-Editor, sollte aber für
eigene Anwendungen doch noch leicht angepaßt werden.
Ich hab mir das Teil schnell zusammengehackt, um Sprachdateien zu
editieren, hab aber drauf geachtet, das es für viele Arten von Prefs nützlich ist.
Bei Standard Windows INI-Dateien wird kein Space vor "=" und dahinter
gesetzt, bei allen anderen ist da ein Space davor, und natürlich dahinter!
Bedienung:
Doppelclick auf Item und im Kontextmenü wählen
Der Code ist für PB 4.30 läßt sich jedoch auch leicht an PB 4.20 anpassen
(WindowBounds() raus und CreateGadgetList() rein)
Viel Spaß
Update
Sollte jetzt unter jedem von PB unterstütztem OS laufen. Komplett
neugestaltet und mehr Funktionen!
eigene Anwendungen doch noch leicht angepaßt werden.
Ich hab mir das Teil schnell zusammengehackt, um Sprachdateien zu
editieren, hab aber drauf geachtet, das es für viele Arten von Prefs nützlich ist.
Bei Standard Windows INI-Dateien wird kein Space vor "=" und dahinter
gesetzt, bei allen anderen ist da ein Space davor, und natürlich dahinter!
Bedienung:
Doppelclick auf Item und im Kontextmenü wählen
Der Code ist für PB 4.30 läßt sich jedoch auch leicht an PB 4.20 anpassen
(WindowBounds() raus und CreateGadgetList() rein)
Viel Spaß
Code: Alles auswählen
;
; Copyright (C) 2009 Thomas Schulz (ts-soft)
; -----------------------------------------------------------------------
; This software is provided 'as-is', without any express Or implied
; warranty. In no event will the authors be held liable For any damages
; arising from the use of this software.
;
; Permission is granted To anyone To use this software For any purpose,
; including commercial applications, And To alter it And redistribute it
; freely, subject To the following restrictions:
;
; 1. The origin of this software must Not be misrepresented; you must not
; claim that you wrote the original software. If you use this software
; in a product, an acknowledgment in the product documentation would be
; appreciated but is Not required.
; 2. Altered source versions must be plainly marked As such, And must Not be
; misrepresented As being the original software.
; 3. This notice may Not be removed Or altered from any source distribution.
;
EnableExplicit
; hier könnt ihr Titel, Pattern und Kommentarzeichen anpassen
#APPNAME$ = "Preference Editor"
#PATTERN$ = "Supported Files |*.lng;*.pref;*.prefs;*.ini;*.catalog|All Files (*.*)|*.*"
#COMMENTCHAR$ = ";"
Global SEPARATOR$ = " "
Global Format = #PB_Ascii
Enumeration ; windows
#frmMain
EndEnumeration
Enumeration ; gadgets
#lvEdit
EndEnumeration
Enumeration ; menu
#tbNew
#tbLoad
#tbSave
#mnuChangeValue
#mnuAppendKey
#mnuInsertKey
#mnuChangeKey
#mnuAppendGroupName
#mnuInsertGroupName
#mnuChangeGroupName
#mnuAppendComment
#mnuInsertComment
#mnuChangeComment
#mnuDeleteUnknownLine
EndEnumeration
Procedure SavePreference()
Protected File.s = SaveFileRequester("", "", #PATTERN$, 0)
Protected FF, I, J
If File
FF = CreateFile(#PB_Any, File)
If FF
WriteStringFormat(FF, Format)
J = CountGadgetItems(#lvEdit)
If J
For I = 1 To J
WriteStringN(FF, GetGadgetItemText(#lvEdit, I - 1), Format)
Next
EndIf
CloseFile(FF)
EndIf
EndIf
EndProcedure
Procedure LoadPreference()
Protected File.s = OpenFileRequester("", "", #PATTERN$, 0)
Protected FF, string.s
If File
If LCase(GetExtensionPart(File)) = "ini"
SEPARATOR$ = ""
Else
SEPARATOR$ = " "
EndIf
FF = ReadFile(#PB_Any, File)
If FF
ClearGadgetItems(#lvEdit)
SetWindowTitle(#frmMain, #APPNAME$ + " - " + GetFilePart(File))
If ReadStringFormat(FF) = #PB_Ascii
Format = #PB_Ascii
Else
Format = #PB_UTF8
EndIf
While Not Eof(FF)
string = ReadString(FF, Format)
If FindString(string, "=", 1)
string = Trim(StringField(string, 1, "=")) + SEPARATOR$ + "=" + SEPARATOR$ + Trim(StringField(string, 2, "="))
EndIf
AddGadgetItem(#lvEdit, -1, string)
Wend
CloseFile(FF)
EndIf
EndIf
EndProcedure
Procedure OpenMain()
Protected Style.i = #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget |#PB_Window_SystemMenu
If OpenWindow(#frmMain, #PB_Ignore, #PB_Ignore, 640, 480, #APPNAME$, Style)
If CreatePopupMenu(#frmMain)
MenuItem(#mnuChangeValue, "change value")
MenuBar()
MenuItem(#mnuAppendKey, "append new key")
MenuItem(#mnuInsertKey, "insert new key")
MenuItem(#mnuChangeKey, "change keyname")
MenuBar()
MenuItem(#mnuAppendGroupName, "append new group")
MenuItem(#mnuInsertGroupName, "insert new group")
MenuItem(#mnuChangeGroupName, "change groupname")
MenuBar()
MenuItem(#mnuAppendComment, "append comment")
MenuItem(#mnuInsertComment, "insert comment")
MenuItem(#mnuChangeComment, "change comment")
MenuBar()
MenuItem(#mnuDeleteUnknownLine, "delete this line")
EndIf
WindowBounds(#frmMain, 500, 300, #PB_Ignore, #PB_Ignore)
If CreateToolBar(#frmMain, WindowID(#frmMain))
ToolBarStandardButton(#tbNew, #PB_ToolBarIcon_New)
ToolBarStandardButton(#tbLoad, #PB_ToolBarIcon_Open)
ToolBarStandardButton(#tbSave, #PB_ToolBarIcon_Save)
EndIf
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
ListViewGadget(#lvEdit, 5, 5, 630, 480 - ToolBarHeight(#frmMain) - 10)
CompilerElse
ListViewGadget(#lvEdit, 5, 5 + ToolBarHeight(#frmMain), 630, 480 - ToolBarHeight(#frmMain) - 10)
CompilerEndIf
AddGadgetItem(#lvEdit, -1, #COMMENTCHAR$)
EndIf
EndProcedure
OpenMain()
Define.s result
Define.i i
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow : Break
Case #PB_Event_SizeWindow
ResizeGadget(#lvEdit, #PB_Ignore, #PB_Ignore, WindowWidth(#frmMain) -10, WindowHeight(#frmMain) - ToolBarHeight(#frmMain) - 10)
Case #PB_Event_Menu
Select EventMenu()
Case #tbNew
ClearGadgetItems(#lvEdit)
SetWindowTitle(#frmMain, #APPNAME$)
AddGadgetItem(#lvEdit, -1, #COMMENTCHAR$)
Case #tbLoad
LoadPreference()
Case #tbSave
SavePreference()
Case #mnuChangeValue
result = InputRequester("", "new value", Trim(StringField(GetGadgetItemText(#lvEdit, GetGadgetState(#lvEdit)), 2, "=")))
If result
SetGadgetItemText(#lvEdit, GetGadgetState(#lvEdit), Trim(StringField(GetGadgetItemText(#lvEdit, GetGadgetState(#lvEdit)), 1, "=")) + SEPARATOR$ + "=" + SEPARATOR$ + result)
EndIf
Case #mnuAppendKey
result = InputRequester("", "new key name", "")
If result
If Right(result, 1) <> "=" : result + SEPARATOR$ + "=" + SEPARATOR$: EndIf
AddGadgetItem(#lvEdit, GetGadgetState(#lvEdit) + 1, result)
SetGadgetState(#lvEdit, GetGadgetState(#lvEdit) + 1)
EndIf
Case #mnuInsertKey
result = InputRequester("", "new key name", "")
If result
If Right(result, 1) <> "=" : result + SEPARATOR$ + "=" + SEPARATOR$: EndIf
AddGadgetItem(#lvEdit, GetGadgetState(#lvEdit), result)
SetGadgetState(#lvEdit, GetGadgetState(#lvEdit) -1)
EndIf
Case #mnuChangeKey
result = InputRequester("", "new key", Trim(StringField(GetGadgetItemText(#lvEdit, GetGadgetState(#lvEdit)), 1, "=")))
If result
SetGadgetItemText(#lvEdit, GetGadgetState(#lvEdit), result + SEPARATOR$ + "=" + SEPARATOR$ + Trim(StringField(GetGadgetItemText(#lvEdit, GetGadgetState(#lvEdit)), 2, "=")))
EndIf
Case #mnuAppendGroupName
result = InputRequester("", "new group name", "")
If result
If Left(result, 1) <> "[" : result = "[" + result : EndIf
If Right(result, 1) <> "]" : result + "]" : EndIf
AddGadgetItem(#lvEdit, GetGadgetState(#lvEdit) + 1, result)
SetGadgetState(#lvEdit, GetGadgetState(#lvEdit) + 1)
EndIf
Case #mnuInsertGroupName
result = InputRequester("", "new group name", "")
If result
If Left(result, 1) <> "[" : result = "[" + result : EndIf
If Right(result, 1) <> "]" : result + "]" : EndIf
AddGadgetItem(#lvEdit, GetGadgetState(#lvEdit), result)
EndIf
SetGadgetState(#lvEdit, GetGadgetState(#lvEdit) -1)
Case #mnuChangeGroupName
result = InputRequester("", "new group name", "")
If result
If Left(result, 1) <> "[" : result = "[" + result : EndIf
If Right(result, 1) <> "]" : result + "]" : EndIf
SetGadgetItemText(#lvEdit, GetGadgetState(#lvEdit), result)
EndIf
Case #mnuAppendComment
result = InputRequester("", "new comment", "")
If result
If Left(result, 1) <> #COMMENTCHAR$ : result = #COMMENTCHAR$ + result : EndIf
AddGadgetItem(#lvEdit, GetGadgetState(#lvEdit) + 1, result)
SetGadgetState(#lvEdit, GetGadgetState(#lvEdit) + 1)
EndIf
Case #mnuInsertComment
result = InputRequester("", "new comment", "")
If result
If Left(result, 1) <> #COMMENTCHAR$ : result = #COMMENTCHAR$ + result : EndIf
AddGadgetItem(#lvEdit, GetGadgetState(#lvEdit), result)
SetGadgetState(#lvEdit, GetGadgetState(#lvEdit) -1)
EndIf
Case #mnuChangeComment
result = InputRequester("", "new comment", GetGadgetItemText(#lvEdit, GetGadgetState(#lvEdit)))
If result
If Left(result, Len(#COMMENTCHAR$)) <> #COMMENTCHAR$ : result = #COMMENTCHAR$ + result : EndIf
SetGadgetItemText(#lvEdit, GetGadgetState(#lvEdit), result)
EndIf
Case #mnuDeleteUnknownLine
RemoveGadgetItem(#lvEdit, GetGadgetState(#lvEdit))
If Not CountGadgetItems(#lvEdit) : AddGadgetItem(#lvEdit, -1, #COMMENTCHAR$) : EndIf
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #lvEdit
If EventType() = #PB_EventType_LeftDoubleClick
For i = #mnuChangeValue To #mnuDeleteUnknownLine
DisableMenuItem(#frmMain, i, #False)
Next
If GetGadgetState(#lvEdit) >= 0
If Left(GetGadgetItemText(#lvEdit, GetGadgetState(#lvEdit)), 1) = "["
DisableMenuItem(#frmMain, #mnuChangeComment, #True)
DisableMenuItem(#frmMain, #mnuChangeKey, #True)
DisableMenuItem(#frmMain, #mnuChangeValue, #True)
ElseIf Left(GetGadgetItemText(#lvEdit, GetGadgetState(#lvEdit)), Len(#COMMENTCHAR$)) = #COMMENTCHAR$
DisableMenuItem(#frmMain, #mnuChangeGroupName, #True)
DisableMenuItem(#frmMain, #mnuChangeKey, #True)
DisableMenuItem(#frmMain, #mnuChangeValue, #True)
ElseIf GetGadgetItemText(#lvEdit, GetGadgetState(#lvEdit)) = ""
For i = #mnuChangeValue To #mnuDeleteUnknownLine - 1
DisableMenuItem(#frmMain, i, #True)
Next
Else
DisableMenuItem(#frmMain, #mnuChangeGroupName, #True)
DisableMenuItem(#frmMain, #mnuChangeComment, #True)
EndIf
Else
DisableMenuItem(#frmMain, #mnuChangeComment, #True)
DisableMenuItem(#frmMain, #mnuChangeGroupName, #True)
DisableMenuItem(#frmMain, #mnuChangeKey, #True)
DisableMenuItem(#frmMain, #mnuChangeValue, #True)
DisableMenuItem(#frmMain, #mnuChangeGroupName, #True)
DisableMenuItem(#frmMain, #mnuChangeGroupName, #True)
EndIf
DisplayPopupMenu(#frmMain, WindowID(#frmMain))
EndIf
EndSelect
EndSelect
ForEver
Sollte jetzt unter jedem von PB unterstütztem OS laufen. Komplett
neugestaltet und mehr Funktionen!