[erledigt] Hard-Coded vs. User-definierbar

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

[erledigt] Hard-Coded vs. User-definierbar

Beitrag von scholly »

moin, moin...

Irgendwie scheint dieses Stoffwechsel-Endprodukt-Wetter auf mein Programmiergemüt zu schlagen :(
Vielleicht kann mir ja der ein oder andere von Euch etwas auf die Sprüng helfen.

In meiner Video-Verwaltung habe ich bisher den Aufbau eines TreeGadget nach folgendem Schema hardcoded:

Code: Alles auswählen

createmaintree:
;#############################################                                      
;{
;...Create the newly sized image list
newIL = ImageList_Create_(32, 32, #ILC_COLOR32|#ILC_MASK, 0, 700)

;...Icons für die Nodes laden
Define.l dummi             = LoadImage(  0,"gfx/0_dummy.ico") 
Define.l ico_all           = LoadImage(  1,"gfx/all.ico")

Define.l ico_speicherort   = LoadImage(  2,"gfx/speicherort.ico")
Define.l ico_hdd           = LoadImage( 21,"gfx/hdds.ico")
Define.l ico_cd            = LoadImage( 22,"gfx/cds.ico")
Define.l ico_dvd           = LoadImage( 23,"gfx/dvds.ico")

Define.l ico_genre         = LoadImage(  3,"gfx/genre.ico")
Define.l ico_lohntnich     = LoadImage(301,"gfx/_lohntnich.ico")
Define.l ico_abenteuer     = LoadImage(302,"gfx/abenteuer.ico")
Define.l ico_action        = LoadImage(303,"gfx/action.ico")
Define.l ico_anime         = LoadImage(304,"gfx/anime.ico")
Define.l ico_astro         = LoadImage(305,"gfx/astro.ico")
Define.l ico_comedian      = LoadImage(306,"gfx/comedian.ico")
Define.l ico_comic         = LoadImage(307,"gfx/comic.ico")
Define.l ico_diy           = LoadImage(308,"gfx/diy.ico")
Define.l ico_doku          = LoadImage(309,"gfx/doku.ico")
;.....  

Define.l ico_artist        = LoadImage(  4,"gfx/artist.ico")

Define.l ico_owner         = LoadImage(  5,"gfx/owner.ico")
Define.l ico_ugs           = LoadImage( 51,"gfx/ugs.ico")
 
Define.l ico_todo          = LoadImage(  6,"gfx/todo.ico")

;...Icons in die neue Liste
ImageList_ReplaceIcon_(newIL, -1, dummi)
ImageList_ReplaceIcon_(newIL, -1, ico_all)

ImageList_ReplaceIcon_(newIL, -1, ico_speicherort)
ImageList_ReplaceIcon_(newIL, -1, ico_hdd)
ImageList_ReplaceIcon_(newIL, -1, ico_cd)
ImageList_ReplaceIcon_(newIL, -1, ico_dvd)

ImageList_ReplaceIcon_(newIL, -1, ico_genre)
ImageList_ReplaceIcon_(newIL, -1, ico_lohntnich)
ImageList_ReplaceIcon_(newIL, -1, ico_abenteuer)
ImageList_ReplaceIcon_(newIL, -1, ico_action)
ImageList_ReplaceIcon_(newIL, -1, ico_anime)
ImageList_ReplaceIcon_(newIL, -1, ico_astro)
ImageList_ReplaceIcon_(newIL, -1, ico_comedian)
ImageList_ReplaceIcon_(newIL, -1, ico_comic)
ImageList_ReplaceIcon_(newIL, -1, ico_diy)
ImageList_ReplaceIcon_(newIL, -1, ico_doku)
;........

ImageList_ReplaceIcon_(newIL, -1, ico_artist)
ImageList_ReplaceIcon_(newIL, -1, ico_owner)
ImageList_ReplaceIcon_(newIL, -1, ico_ugs)
 
ImageList_ReplaceIcon_(newIL, -1, ico_todo)

;...Icons in das TreeGadget
AddGadgetItem(#main_tree, -1, "Alles",         ico_all,  0)

AddGadgetItem(#main_tree, -1, "Speicherort",   ico_speicherort,  0)
AddGadgetItem(#main_tree, -1, "HDDs",          ico_hdd, 1)
AddGadgetItem(#main_tree, -1, "CDs",           ico_cd, 1)
AddGadgetItem(#main_tree, -1, "DVDs",          ico_dvd, 1)

AddGadgetItem(#main_tree, -1, "Genre",         ico_genre, 0)
AddGadgetItem(#main_tree, -1, "_lohnt nich",   ico_lohntnich, 1)
AddGadgetItem(#main_tree, -1, "Abenteuer",     ico_abenteuer, 1)
AddGadgetItem(#main_tree, -1, "Action",        ico_action, 1)
AddGadgetItem(#main_tree, -1, "Anime",         ico_anime, 1)
AddGadgetItem(#main_tree, -1, "Astro",         ico_astro, 1)
AddGadgetItem(#main_tree, -1, "Comedian",      ico_comedian, 1)
AddGadgetItem(#main_tree, -1, "Comic",         ico_comic, 1)
AddGadgetItem(#main_tree, -1, "DIY",           ico_diy, 1)
AddGadgetItem(#main_tree, -1, "Doku",          ico_doku, 1)
;......
 
AddGadgetItem(#main_tree, -1, "Artist",        ico_artist,  0)
AddGadgetItem(#main_tree, -1, "Owner",         ico_owner,  0)
AddGadgetItem(#main_tree, -1, "ugs",           ico_ugs, 1)
 
AddGadgetItem(#main_tree, -1, "To Do",         ico_todo,  0)
     
;...Get handle to current TreeGadget normal image list
oldIL = SendMessage_(GadgetID(#main_tree), #TVM_GETIMAGELIST, #TVSIL_NORMAL, 0)

;...Replace the old image list with our new one
SendMessage_(GadgetID(#main_tree), #TVM_SETIMAGELIST, #TVSIL_NORMAL, newIL)
;}
Return; createmaintree
Da sich die Zielgruppe verflüchtigt hat, will ich das Programm jetzt so umschreiben, daß es auch Andere als nützlich empfinden und Ihren Bedürfnissen teilweise anpassen können.
Da bestimmt nicht jeder mit meinen Vorgaben übereinstimmt, sollen u.a. die ganzen Icons (bzw. deren Pfade) und die Genres über ein Prefs-Fenster erfaßt und mit in die SQLite-DB geschrieben werden.

Ich hab jetzt 2 Tage darüber gebrütet, wie ich das am geschicktesten in einen oder mehrere Tables verfrachte, aber es ist leider kein Konzept geschlüpft :(

Hat jemand eine zündende Idee ?

mDv... scholly
Zuletzt geändert von scholly am 17.05.2008 15:21, insgesamt 1-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Vielleicht so:

Code: Alles auswählen

CREATE TABLE "tree" (
  "parent_id" INTEGER DEFAULT -1,
  "id" INTEGER PRIMARY KEY,
  "order" INTEGER,
  "text" VARCHAR(255),
  "icon" VARCHAR(255)
);
Ich weiß grad nicht, ob das syntaktisch stimmt, aber so kannst du dir eine
Tabelle basteln, die jedem Eintrag eine ID zuordnet und eine Position 'order', einen Anzeigetext 'text' und den Iconpfad 'icon' hat. 'parent_id' gibt zusätzlich
an, ob der Eintrag ein Untereintrag eines anderen Eintrags mit der Id
'parent_id' ist.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

NicTheQuick hat geschrieben:Vielleicht so:....
Ich weiß grad nicht, ob das syntaktisch stimmt
Nö, aber das macht nix, für SQLite lass ich die Typen-Festlegung einfach weg ;)

Der Ansatz sieht vielversprechend aus, ma gucken, ob ich das erfolgreich aus einem Prefs-Editor raus schreiben und in eine App einlesen und nutzen kann.

:allright: Schankedön...
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Antworten