Ctor hat zu viele Paramater
-
Es ist ein ComboBox UI Control in einer Render-Engine. Die ComboBox benutzt intern verschiedene andere Controls, z.B. einen Button (für die ComboBox selber) und ein Panel mit n Buttons (für die Liste der Items).
Aber jede der Komponente ist eben konfigurierbar. So hat alleine der HauptButton (mit dem sich die Liste öffnen) eine Größe, Position, ein Material und 3 Texturen.
Die Buttons in dem aufgeklappten Panel haben exakt die selben Parameter. Dann gibt es noch verschiedene Abstände/Border/Margin Werte um die Buttons auszurichten etc. So komm ich ganz schnell auf 20 Parameter.Ist jetzt nicht mega tragisch. Aber evtl. gäbe es ja interessante Alternativen.
-
CtorFrage schrieb:
So hat alleine der HauptButton (mit dem sich die Liste öffnen) eine Größe, Position, ein Material und 3 Texturen.
Wieso ist das dann nicht Sache des Buttons, sich um diese zu kümmern?
-
Spendier deinen Controls Defaultwerte für ihre Eigenschaften und kümmer dich in den Containerklassen (ComboBox) um Werte, die eventuell geändert werden müssen.
Ich mach das zB so:
http://svn.oldschoolhack.de/filedetails.php?repname=OSHGui+(...%2Foshgui)&path=%2Ftrunk%2FControls%2FComboBox.cppgreetz KN4CK3R
-
CtorFrage schrieb:
... Dann gibt es noch verschiedene Abstände/Border/Margin Werte um die Buttons auszurichten ...
Also die Abstände/Border/Margin kannst du sicher auch mit default werten initialisieren. Denke nicht, dass die für die instanziierung des Objectes eine tragende rolle spielen!
-
SeppJ schrieb:
CtorFrage schrieb:
So hat alleine der HauptButton (mit dem sich die Liste öffnen) eine Größe, Position, ein Material und 3 Texturen.
Wieso ist das dann nicht Sache des Buttons, sich um diese zu kümmern?
Sollen die Controls ihre Größen und Texturen per Hellsehen erraten?

@KN4CK3R,_Sascha_: Klar kann ich für einige Werte einfach Defaultwerte setzen. Aber meistens braucht man halt doch leicht andere Werte und setzt dann doch wieder alles nochmal. Und für zentrale Dinge wie die Texturen der Buttons kann ich keine Defaultwerte festlegen.
-
Braucht das Object andere werte oder der Nutzer?
Klar wird der Nutzer bei Border und Margin usw. evtl noch nachjustieren müssen wenn er es anders hätte....aber das object an sich kann damit leben oder?Wenn du es brauchst dann fasse es zu config strukturen zusammen!
-
Sascha schrieb:
Braucht das Object andere werte oder der Nutzer?
Klar wird der Nutzer bei Border und Margin usw. evtl noch nachjustieren müssen wenn er es anders hätte....aber das object an sich kann damit leben oder?Ja, bei einigen Werten könnte man Default-Werte setzen und das Objekt wäre gültig. Ich setz z.B. den horizontalBorder auf 5 Pixel, aber der Anwender will eher 3px. Dennoch ist das Objekt erstmal mit 5px gültig.
Sascha schrieb:
Wenn du es brauchst dann fasse es zu config strukturen zusammen!
Von Config Structs halte ich eigentlich nicht so viel. Die machen im Grunde ja nichts anderes als zusammenzufassen. Ich sehe kaum einen Vorteil von:
ComboBox(..., ButtonTextures(hoveredTexture, pressedTexture, defaultTexture), ...gegenüber:
ComboBox(..., hoveredTexture, pressedTexture, defaultTexture, ...
-
schau mal eben in meinen Source, dann wirst du sehen, dass sich die Combobox um ihre internen Komponenten kümmert.
Benutzer ändert Farbe der Combobox -> Combobox ändert Farbe von Button und Liste
Benutzer ändert Größe der Combobox -> Combobox ändert Größe von Button und Liste
...Wie die Combobox intern aufgebaut ist, geht den Benutzer doch gar nichts an.
greetz KN4CK3R
-
Stell dir das ganze doch mal aus der Sicht des Benutzers vor:
Ich möchte ehrlich gesagt nicht jedes mal, wenn ich mir eine solche Combobox erstelle einen Konstruktor mit 22 Parametern aufrufen müssen, vor allem, weil ich in den meisten Fällen nicht jedes Detail an der Combobox im Konstruktor festlegen will. Dann lieber für jene spezielle Eigenschaften ein paar Getter und im Konstruktor nur allgemeine Größen, wie die Gesamtgröße u.ä. angeben, aus denen dann vorerst die einzelnen Abstände u.ä. berechnet werden. Wenn ich später was ändern will, kann ich ja auf die Getter/Setter zurückgreifen.
-
CtorFrage schrieb:
SeppJ schrieb:
CtorFrage schrieb:
So hat alleine der HauptButton (mit dem sich die Liste öffnen) eine Größe, Position, ein Material und 3 Texturen.
Wieso ist das dann nicht Sache des Buttons, sich um diese zu kümmern?
Sollen die Controls ihre Größen und Texturen per Hellsehen erraten?

Wenn ich einen speziellen Button möchte, dann übergebe ich dem Konstruktor den speziellen Button.
-
KN4CK3R schrieb:
Wie die Combobox intern aufgebaut ist, geht den Benutzer doch gar nichts an.
greetz KN4CK3R
Logisch geht den Anwender das nichts an. Genau deshalb hat der Ctor ja so viele Parameter, weil quasi indirekt auch ein paar Parameter der internen Button Ctor Parameter durchgeschleift werden. Der Anwender der ComboBox weiß gar nicht, dass ich intern einen Button verwende.
SeppJ schrieb:
Wenn ich einen speziellen Button möchte, dann übergebe ich dem Konstruktor den speziellen Button.
Nicht wirklich. Der Anwender der ComboBox soll überhaupt nicht wissen, dass ComboBox intern Buttons benutzt.
-
dann ist es aber arg verräterisch die Buttoneigenschaften beim Combobox Konstruktor zu verlangen

greetz KN4CK3R