• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

[DEV] Eigene Cachesymbole im Cachewolf

Wutschkow

Geomaster
Hallo Devs,

im Zusammenhang mit dem Thema "Schönere Cachesymbole" kam im Forum (ähem, genaugenommen von mir) der Vorschlag, den Benutzern selbstgestaltete Symbole im Cachewolf zu ermöglichen.
Ich habe das jetzt mal selbst in die Hand genommen und möchte meine Lösung dafür vorstellen. Anbei der entsprechende Patch (.txt nicht .zip!) und ein ZIP mit einem Ordner nebst Symbolen zum Testen.

Die Grundidee: Falls ein Unterordner "symbols" im Cachewolf-Programmverzeichnis vorhanden ist, werden beim Cachewolf-Start die PNGs daraus ausgelesen. Die Namen der PNGs müssen dabei den Indexnummern der Bilder entsprechen, also 1.png,2.png usw. Eine readme-Datei mit der genauen Zuordnung der Dateinamen ist im Beispielverzeichnis enthalten.
Wenn der Name einer PNG-Datei sich auf eine der Indexnummern abbilden lässt, wird das preloaded Image mit dieser Indexnummer durch das Bild in der Datei ersetzt, ansonsten wird sie ignoriert. Man braucht keinen kompletten Satz Symbole, sondern nur die, die man ersetzen will. Für alle anderen bleibt es bei den buildt-in Symbolen.

Vielleicht mag sich das mal einer von euch anschauen? Konstruktive Kritik, insbesondere wenn man etwas schneller/effizienter machen kann, nehme ich gerne an. Das ist ehrlich gesagt mein erster Java/Ewe-Code.
 

Anhänge

  • customizedSymbols.txt.zip
    3,1 KB · Aufrufe: 16
  • symbols.zip
    7,2 KB · Aufrufe: 21

klausundelke

Geowizard
Super Sache!
Leider bin ich noch nicht so weit in Java zu programmieren.
Aber sobald das in die NB's eingeflossen ist, werd ich gleich mal testen...
 
OP
Wutschkow

Wutschkow

Geomaster
ggcode schrieb:
leider ist die ...txt.zip nicht sinvoll lesbar.
Dass das eine Patch-Datei ist, ist aber klar, oder?
Habe sie gerade nochmal aus dem Forum runtergeladen. Bei mir sieht das so aus, wie es sein soll. Genauer gesagt, so:
Code:
Index: F:/Eclipse/Cachewolf/src/CacheWolf/MainForm.java
===================================================================
--- F:/Eclipse/Cachewolf/src/CacheWolf/MainForm.java	(revision 1889)
+++ F:/Eclipse/Cachewolf/src/CacheWolf/MainForm.java	(working copy)
@@ -79,6 +79,11 @@
 			if (!pref.selectProfile(profile,Preferences.PROFILE_SELECTOR_ONOROFF, true))
 				ewe.sys.Vm.exit(0); // User MUST select or create a profile
 			Vm.showWait(true);
+
+
+			// Replace buildt-in symbols with customized images
+			GuiImageBroker.customizedSymbols();
+
 			// Load CacheList
 			infB = new InfoBox("CacheWolf",MyLocale.getMsg(5000,"Loading Cache-List"));
 			infB.exec();
Index: F:/Eclipse/Cachewolf/src/CacheWolf/GuiImageBroker.java
===================================================================
--- F:/Eclipse/Cachewolf/src/CacheWolf/GuiImageBroker.java	(revision 1890)
+++ F:/Eclipse/Cachewolf/src/CacheWolf/GuiImageBroker.java	(working copy)
@@ -1,20 +1,22 @@
 package CacheWolf;
 
 import ewe.fx.Image;
+import ewe.io.FileBase;
+import utils.FileBugfix;
 
 /**
  * hold preloaded versions of GUI images in a single place
- * 
+ *
  * Do not instantiate this class, only use it in a static way.
  */
 
 public final class GuiImageBroker {
-	
+
 	// TODO: check with Image and mImage
-	
+
 	/** image to be displayed in case of error */
 	public static Image imageError = new Image("guiError.png");
-	
+
 	/**
 	 * images to be displayed for cache types in GUI
 	 * @see getTypeImage
@@ -44,16 +46,16 @@
 		new Image(CacheType.CW_GUIIMG_WEBCAM),		// 20
 		new Image(CacheType.CW_GUIIMG_WHEREIGO)		// 21
 	};
-	
+
 	// TODO: move size images here
 	private static final Image[] sizeImages = {
-		
+
 	};
 
 	/** constructor does nothing */
 	private GuiImageBroker() { // no instantiation needed
 	}
-	
+
 	/**
 	 * select image to be displayed for a given cache type
 	 * @param id internal cache type id
@@ -84,6 +86,40 @@
 		case CacheType.CW_TYPE_WEBCAM: return typeImages[20];
 		case CacheType.CW_TYPE_WHEREIGO: return typeImages[21];
 		default: return imageError;
-		}	
+		}
 	}
+
+	/**
+	 * Replaces the buildt-in symbols by images stored in /symbols:
+	 * If the subdirectory symbols exists in CW-directory *.png-files
+	 * are read in and roughly checked for validity (names must be
+	 * convertable to integers between 0 and 21).
+	 * For every valid file x.png the corresponding typeImages[x] is
+	 * replaced by the image in x.png.
+	 * Images are NOT checked for size etc.
+	 */
+	public static void customizedSymbols()
+	{
+		int id;
+		String name = "";
+		FileBugfix dir=new FileBugfix(FileBase.getProgramDirectory()+"/symbols");
+		if (dir.isDirectory()){
+			String [] pngFiles;
+			pngFiles=dir.list("*.png",0);
+			for (int i=0; i<pngFiles.length; i++) {
+				name = pngFiles[i].substring(0,pngFiles[i].length()-4);
+
+				try {
+					id = Integer.parseInt (name);
+					} catch (Exception E){
+						id = -1; //filename invalid for symbols
+					}
+
+					if (0<=id && id<=typeImages.length){
+						typeImages[id]= new Image(FileBase.getProgramDirectory()+"/symbols/"+pngFiles[i]);
+					}
+			}
+		}
+	}
+
 }
 

ggcode

Geocacher
Hi,
nee dann ist es nicht klar. So siehts bei mir auch aus. Dachte das ist ne Klasse und ich muss sie neu mit compilieren.
Wie bekomm ich das dann hin?

Danke
Gruß ggcode
 
OP
Wutschkow

Wutschkow

Geomaster
Eine Patchdatei kannst Du in Eclipse (und vermutlich auch anderen Umgebungen) in Dein lokales Projekt importieren. Sehr praktisch, wenn es um Änderungen an bestehenden Dateien und womöglich noch mehreren davon geht. Hier steht ein bisschen mehr dazu: http://www.geoclub.de/viewtopic.php?p=369215#p369215.
Bei Eclipse geht es kurz gesagt mit "Team/Apply Patch", eventuell musst Du dann im Assistenten die Pfade noch an Deine lokale Konfiguration anpassen.
 

ggcode

Geocacher
Danke

Ich hatte aus der Text-Datei eine Klasse gemacht und versucht diese einzubinden.
So ist es natürlich easy. Werd das dann heute Abend mal ausprobieren. :D

Vile Grüsse
ggcode
 
OP
Wutschkow

Wutschkow

Geomaster
araber95 schrieb:
Sollte das vielleicht in die aktuelle Version integriert werden?
Von mir aus gerne. Ich hatte gerade mit MiK Kontakt deswegen aufgenommen, aber der kommt vorläufig nicht dazu. Von daher wäre es schön, wenn Du Dir das mal anschauen würdest.
 

MiK

Geoguru
Grundsätzlich bin ich für eine solche Lösung. Die konkrete Umsetzung habe ich mir aber selbst nicht angeschaut. Da sollte auf jeden 'Fall nochmal ein erfahrener CW-Programmierer drüber schauen.
 

greiol

Geoguru
das mit den type images ist so eine sache. das nummern system hat soich so halb erledugt aber mit der umstellung bin ich noch nicht wirklich durch. im moment ist das eine wüste mischung.

ist halt noch eine baustelle die ich mir zu gemüte führen muss, bisher habe ich das erst mal unter dem gesichtspunkt von "es muss laufen" wieder zum leben erweckt.
 
OP
Wutschkow

Wutschkow

Geomaster
Wird sich deshalb etwas am Grundprinzip ändern, dass die Cachesymbole als preloaded Images in einem Array gespeichert werden?
Wenn nein, ist der Code - soweit überhaupt notwendig - schnell angepasst. Falls ja, sollten wir das ganze sicherlich erst mal zurückstellen.
Dann erfreue ich mich solange alleine an gut erkennbaren Cachesymbolen. ;)
 

arbor95

Geoguru
Wenn wir es reinnehmen ist es auch schnell wieder ausgebaut, ist ja nicht so gigantischer Code.
Wie erwähnt hängt es von der arraydefinition ab.
Die Codeerweiterung ist gering, so dass der Systemstart nicht merkbar länger dauert.

Andererseits gibt es natürlich die vordefinierten Symbole.
Sie werden ja mit installiert, obwohl sie da ja nicht mehr gebraucht werden (weil im Programm vorhanden)
Die haben dann auch wieder andere Namen.
Wenn Greiol daran arbeitet, dann wird das Customizing / Skins wohl berücksichtigt. Die Frage ist der Zeitrahmen.

Weiterhin kann in den 15x15 Bildchen ja nicht wirklich was dargestellt werden. Das wird so immer unübersichtlich bleiben. Und dann muss man noch über die Verwendung an den unterschiedlichen Stellen im Programm nachdenken. Auf der Kartenansicht sind die "neuen" Symbole aber vermutlich besser zu erkennen.
Auf dem Radar und in der Liste stört der gelbe Rahmen etwas.
 
OP
Wutschkow

Wutschkow

Geomaster
araber95 schrieb:
Und dann muss man noch über die Verwendung an den unterschiedlichen Stellen im Programm nachdenken.
Ich habe auch schon an die Variante gedacht, die Symbole nur für die Moving Map dynamisch anzupassen. Das ist aber weitaus aufwändiger und bringt wieder neue Probleme mit sich (dem einen gefällt es, der andere will es lieber anders).
araber95 schrieb:
Auf der Kartenansicht sind die "neuen" Symbole aber vermutlich besser zu erkennen.
Definitiv! :D
araber95 schrieb:
Auf dem Radar und in der Liste stört der gelbe Rahmen etwas.
Die mitgelieferten Bilder waren nur zum schnellen Testen für Euch gedacht. Der Witz ist ja, dass sich so jeder seine eigene Bilder erstellen kann. Wenn Du keinen dicken Rahmen haben willst, machst Du es Dir halt etwas dezenter, bis Du den für Dich passenden Kompromiss gefunden hast. Hier http://www.geoclub.de/viewtopic.php?p=341097#p341097 hatte blackeye501 schon mal alternative Symbole veröffentlicht, die man z. B. auch nehmen könnte. Die sind etwas dezenter - mir waren sie für die Topokarte zu dezent.

Ansonsten: Die Alternative wären verschiedene Sätze Symbole für Menüs und Karte, was auch mehr Speicher, evtl. längerer Start usw. bedeutet. Von mir aus können wir auch in diese Richtung weitermachen, aber da müsste dann erst ein Konsens hergestellt werden, ob das so erwünscht ist.
 

MiK

Geoguru
Es muss auf jeden Fall zwischen den Symbolen auf der Karte und in der Liste unterschieden werden. Auf der Karte möchte man evtl. größere haben. In der List wohl meist die kleinen.
 

arbor95

Geoguru
MiK schrieb:
Es muss auf jeden Fall zwischen den Symbolen auf der Karte und in der Liste unterschieden werden. Auf der Karte möchte man evtl. größere haben. In der List wohl meist die kleinen.

Die Symbole auf der Karte grösser darzustellen (u.a.auch beim vga-mode) ist glaub ich ein Wunsch von allen Anwendern.
Was ich persönlich auch gern grösser hätte ist die Anzeige der Entfernung, aber das ist ja nicht mit Symbolen gemacht.
Auch das gelbe Dreieck bzw den Zoom zu treffen ist nicht immer einfach.

Warum muss ich auf der Karte noch mal das GPS einschalten können ? (Ausschalten geht ja nicht)
 

MiK

Geoguru
araber95 schrieb:
Warum muss ich auf der Karte noch mal das GPS einschalten können ? (Ausschalten geht ja nicht)
Falls Du auf das Symbol oben rechts anspielst: Das dient hauptsächlich dazu wieder auf die GPS-Position zu zentrieren. Das dabei auch das GPS gestartet wird ist eher eine "Nebenfunktion".
 
Oben