Qt Editor: Add "File->New" menu entry

qteditor
Sven Eberhardt 2016-03-22 00:41:39 -04:00
parent e1eb62a552
commit b1ac208249
18 changed files with 1097 additions and 66 deletions

2
.gitignore vendored
View File

@ -136,5 +136,5 @@ tests/openclonk_unittest.sln
*_automoc.cpp
moc_*.cpp
qrc_resource.cpp
ui_C4ConsoleQtMainWindow.h
ui_C4ConsoleQt*.h
resource.qrc.depends

View File

@ -935,6 +935,9 @@ elseif(USE_WIN32_WINDOWS)
src/editor/C4ConsoleQtDefinitionListViewer.h
src/editor/C4ConsoleQtViewport.cpp
src/editor/C4ConsoleQtViewport.h
src/editor/C4ConsoleQtNewScenario.cpp
src/editor/C4ConsoleQtNewScenario.h
src/editor/C4ConsoleQtNewScenario.ui
src/editor/C4ConsoleQtMainWindow.ui
src/editor/resource.qrc
${qt_editor_resources}

View File

@ -1,6 +1,6 @@
IDS_LANG_NAME=Deutsch
IDS_LANG_INFO=Original-Sprachpaket.
IDS_LANG_FALLBACK=
IDS_ADDON_INSTALLFAILURE=Installation von '%s' fehlgeschlagen.
IDS_ADDON_INSTALLSUCCESS=Installation von '%s' erfolgreich.
IDS_ADDON_INSTALLTITLE=Addon-Installation
IDS_BTN_ACTIVATE=Aktivieren
IDS_BTN_BACK=Zurück
IDS_BTN_CHAT=&Chat
@ -32,19 +32,28 @@ IDS_BTN_YES=Ja
IDS_CHAT_NOTCONNECTED=nicht verbunden
IDS_CHAT_SERVER=Server
IDS_CNS_ACTION=Aktivität:
IDS_CNS_BROWSE=Durchsuchen...
IDS_CNS_CONSOLE=Editor
IDS_CNS_CONTENTS=Inhalt:
IDS_CNS_CREATE=Erzeugen
IDS_CNS_CREATESTATUS=Platzierung: %s
IDS_CNS_CREATOR=Objekte erstellen
IDS_CNS_DEFINITIONS=Definitionen
IDS_CNS_DROPNODEF=Ungültiges oder nicht geladenes Objekt: %s
IDS_CNS_EFFECTS=Effekte:
IDS_CNS_EXACTTOSTATIC=Beim Wechsel von einer exakten zur statischen Landschaft gehen sämtliche in der exakten Karte gemachten Änderungen verloren.
IDS_CNS_FILENAME=Dateiname
IDS_CNS_FILLNOHALT=Das Füllwerkzeug kann nicht im Haltemodus eingesetzt werden.
IDS_CNS_GAMECLOSED=Spiel deinitialisiert.
IDS_CNS_GAMEMODE=Spielmodus
IDS_CNS_GAMESAVED=Spiel gespeichert.
IDS_CNS_HEIGHT=Höhe
IDS_CNS_LOG=Log
IDS_CNS_MAPSIZE=Breite
IDS_CNS_MAPZOOM=Zoom
IDS_CNS_MULTIPLEOBJECTS=%i Objekte ausgewählt.
IDS_CNS_NEWPLRVIEWPORT=Neu für %s
IDS_CNS_NEWSCENARIO=Neues Szenario
IDS_CNS_NOCHILDSAVE=%s befindet sich in einem Rundenordner. Szenarien können nicht in geschlossenen Gruppendateien gespeichert werden.
IDS_CNS_NOFULLSCREENPLRS=Im Vollbildmodus kann nur gestartet werden, wenn Spieler am Spiel teilnehmen.
IDS_CNS_NOMATDEF=Zeichnen nicht möglich, da die angegebene Material-Textur-Kombination '%s-%s' nicht in der geladenen Texturtabelle definiert ist.
@ -58,12 +67,17 @@ IDS_CNS_PLRQUITNET=%s (%s) löschen
IDS_CNS_PROPERTIES=Eigenschaften
IDS_CNS_SAVEASERROR=Fehler beim Speichern des Szenarios nach %s.
IDS_CNS_SAVERROR=Fehler beim Speichern des Szenarios.
IDS_CNS_SCENARIOFILE=OpenClonk Szenariendatei
IDS_CNS_SCENARIOSAVED=Szenario gespeichert.
IDS_CNS_SCENARIOSETTINGS=Szenarieneinstellungen
IDS_CNS_SCRIPT=Script
IDS_CNS_SCRIPTCREATEDOBJECTS=Das Script dieses Szenarios hat beim Start der Runde Objekte erschaffen.
IDS_CNS_TITLE=Titel
IDS_CNS_TYPE=Typ: %s (%s)
IDS_CNS_VALUE=Wert
IDS_CNS_VIEWPORT=Sichtfenster
IDS_CNS_WARNDOUBLE=Um Verdoppelungen der abgespeicherten Objekte beim nächsten Start zu vermeiden, sollte die Initialize-Funktion des Scripts entsprechend angepasst werden.
IDS_CNS_WIDTH=Breite
IDS_COMM_ACQUIRE=Beschaffung
IDS_COMM_ACTIVATE=Aktivieren
IDS_COMM_ATTACK=Angreifen
@ -83,8 +97,8 @@ IDS_COMM_PUSHTO=Schieben
IDS_COMM_PUT=Ablegen
IDS_COMM_RETRY=Erneuter Versuch
IDS_COMM_SELL=Verkaufen
IDS_COMM_TAKE2=Herausnehmen
IDS_COMM_TAKE=Nehmen
IDS_COMM_TAKE2=Herausnehmen
IDS_COMM_THROW=Werfen
IDS_COMM_TRANSFER=Bewegung
IDS_COMM_UNGRAB=Loslassen
@ -122,17 +136,17 @@ IDS_CTL_FRONTEND=Menüsystem
IDS_CTL_FULLSCREENMODE=Fenstermodus
IDS_CTL_GAME=Spiel
IDS_CTL_GAMEFUNCTIONS=Spielfunktionen
IDS_CTL_GAMESPEEDUP=Spielgeschwindigkeit erhöhen
IDS_CTL_GAMESPEEDDOWN=Spielgeschwindigkeit verringern
IDS_CTL_GAMESPEEDUP=Spielgeschwindigkeit erhöhen
IDS_CTL_GFXENGINE=Grafiktreiber
IDS_CTL_INETSERVER=&Internet
IDS_CTL_IRCCHAT=IRC-Chat
IDS_CTL_LANGUAGE=Sprache
IDS_CTL_LEAGUE_ACCOUNT=Liga-Benutzername:
IDS_CTL_LEAGUE_CHK_PLRPW=Liga-Passwort eingeben
IDS_CTL_LEAGUE_PLRPW2=Liga-Passwort (Wiederholung):
IDS_CTL_LEAGUE_PLRPW=Liga-Passwort:
IDS_CTL_LEAGUE_CHK_REMEMBERLOGIN=Logindaten speichern
IDS_CTL_LEAGUE_PLRPW=Liga-Passwort:
IDS_CTL_LEAGUE_PLRPW2=Liga-Passwort (Wiederholung):
IDS_CTL_LOST=verloren
IDS_CTL_LOUD=laut
IDS_CTL_MATERIAL=Material
@ -140,8 +154,8 @@ IDS_CTL_MESSAGEBOARDBACK=Nachrichten zurück
IDS_CTL_MESSAGEBOARDFORWARD=Nachrichten vor
IDS_CTL_MMTIMER=Multimedia-Timer abschalten
IDS_CTL_MUSIC=Musik
IDS_CTL_NAME2=Name:
IDS_CTL_NAME=Name
IDS_CTL_NAME2=Name:
IDS_CTL_NICK=Kurzname:
IDS_CTL_NOGOAL=Kein Spielziel
IDS_CTL_NOLANGINFO=Sprachpaket nicht verfügbar.
@ -151,11 +165,11 @@ IDS_CTL_ON=an
IDS_CTL_PACKETLOGGING=Paketlogging
IDS_CTL_PASSWORDOPTIONAL=Passwort (optional):
IDS_CTL_PICTURE=Bild:
IDS_CTL_PLAYER=Spieler
IDS_CTL_PLAYER1=Spieler 1
IDS_CTL_PLAYER2=Spieler 2
IDS_CTL_PLAYER3=Spieler 3
IDS_CTL_PLAYER4=Spieler 4
IDS_CTL_PLAYER=Spieler
IDS_CTL_REALNAME=Realname:
IDS_CTL_RECORD=Au&fnehmen
IDS_CTL_RESOLUTION=Auflösung
@ -183,8 +197,6 @@ IDS_CTL_USEOTHERSERVER=anderen Internetserver verwenden
IDS_CTL_WON=gewonnen
IDS_DESC_AUTOFRAMESKIP=Überspringt automatisch Grafikframes, wenn das Spiel stockt.
IDS_DESC_AUTOMATICUPDATES=Prüft beim Programmstart einmal pro Tag, ob Updates für die installierte Version verfügbar sind.
IDS_DESC_PACKETLOGGING=Speichert den gesamten Netzwerkverkehr in der Logdatei.
IDS_DESC_UPNP=Aktiviert automatische Portweiterleitung für direkte Verbindungen zwischen Teilnehmern in Netzwerkspielen.
IDS_DESC_CHANGESTHEWAYCONTROLDATAI=Legt fest, wie Steuerungsdaten in Netzwerkspielen zwischen Client-Rechnern ausgetauscht werden.
IDS_DESC_CHECKONLINEFORNEWVERSIONS=Sucht online nach Updates für diese Version.
IDS_DESC_CLIENTS=Clients:
@ -218,6 +230,7 @@ IDS_DESC_NOPROMO=Wird nicht weiter befördert.
IDS_DESC_NOTINITED=Nicht initialisiert
IDS_DESC_OBJECT=Typ: %s|Erfahrung: %i|Runden: %i|Gestorben: %i mal|%s|Spielzeit: %s|Geburtstag: %s||
IDS_DESC_OLDANDNEWSCORE=Alter und neuer Punktestand.
IDS_DESC_PACKETLOGGING=Speichert den gesamten Netzwerkverkehr in der Logdatei.
IDS_DESC_PLAYER=Punkte: %i|Runden: %i (%i gew. %i verl.)|Spielzeit: %s|Kommentar: %s|
IDS_DESC_PLAYERSCONTROLLEDBYCOMPUT=Computergesteuerte Spieler.
IDS_DESC_PLRS=Spieler:
@ -231,6 +244,7 @@ IDS_DESC_SHOWSAVAILABLENETWORKGAME=Zeigt laufende Netzwerkspiele.
IDS_DESC_TEAM=Team %s
IDS_DESC_UNASSOCIATEDSAVEGAMEPLAYE=Nicht zugewiesene Spielstand-Spieler.
IDS_DESC_UNKNOWNGAMESTATE=Spiel ist in einem unbekannten Zustand
IDS_DESC_UPNP=Aktiviert automatische Portweiterleitung für direkte Verbindungen zwischen Teilnehmern in Netzwerkspielen.
IDS_DESC_VERSION=Engine-Version: %s
IDS_DESC_VOLUMEMUSIC=Lautstärke der Hintergrundmusik.
IDS_DESC_VOLUMESOUND=Lautstärke der Geräuscheffekte.
@ -248,8 +262,8 @@ IDS_DLGTIP_EXIT=Beendet das Programm.
IDS_DLGTIP_GAMEGO=Startet das Spiel.
IDS_DLGTIP_NETWORKGAME=Startet ein Netzwerkspiel oder tritt einem laufenden Netzwerkspiel bei.
IDS_DLGTIP_NEWPLAYER=Erzeugt eine neue Spielerdatei.
IDS_DLGTIP_OK2=Aktion bestätigen.
IDS_DLGTIP_OK=Dialog schließen
IDS_DLGTIP_OK2=Aktion bestätigen.
IDS_DLGTIP_OPTIONS=Ändert die Programmeinstellungen.
IDS_DLGTIP_PASTE=Fügt den Inhalt der Zwischenablage an der Einfügemarke ein
IDS_DLGTIP_PING=Ping
@ -329,12 +343,15 @@ IDS_DLG_VOTING=Abstimmung
IDS_DLG_YES=&Ja
IDS_DL_CANCEL=Download abbrechen
IDS_DL_STATUSCONNECTING=verbinden...
IDS_ERR_CHANNELNOTALLOWED=Kann nur Chat-Kanäle mit "clonk" im Namen und einem # am Anfang betreten.
IDS_ERR_CLONKCOLLISION=Ein Clonk mit Dateinamen "%s" existiert bereits.
IDS_ERR_CONFIG=Konfigurationsfehler
IDS_ERR_CONFREAD=Einstellungen konnten nicht gelesen werden: %s
IDS_ERR_CONFSAVE=Einstellungen konnten nicht gespeichert werden: %s
IDS_ERR_CREATESCENARIO=Fehler beim Erstellen des Szenarios. Ist der Dateiname gültig und der Zielpfad beschreibbar?
IDS_ERR_DDRAW=Fehler bei Direct3d oder OpenGL.
IDS_ERR_DELOLDTITLE=Fehler beim Löschen des alten Titels aus Datei "%s": %s
IDS_ERR_ENTERTITLE=Titel muss angegeben werden.
IDS_ERR_ERRORADDINGNEWTITLEFORFIL=Fehler beim Setzen des Titels in Datei \"%s\": %s
IDS_ERR_ERRORLOADINGROUNDRESULTS=Fehler beim Laden der Spielergebnisse.
IDS_ERR_ERRORSAVINGROUNDRESULTS=Fehler beim Speichern der Spielergebnisse.
@ -345,14 +362,14 @@ IDS_ERR_FATAL=FATALER FEHLER: %s
IDS_ERR_FILEEXISTS=Datei mit Namen "%s" existiert bereits.
IDS_ERR_GAMELEFTVIAPLAYERMENU=Spiel per Spielermenü verlassen.
IDS_ERR_GBACK=Fehler beim Landschaftsgenerator.
IDS_ERR_GFX_REGISTERMAIN=Fehler beim Laden der Grafikdatei
IDS_ERR_GFX_INITSHADERS=Fehler beim Initialisieren der GLSL-Shader
IDS_ERR_GFX_REGISTERMAIN=Fehler beim Laden der Grafikdatei
IDS_ERR_HELPCMD=Grundlegende Befehle im IRC-Chat:|/join [Chatraum] - Neuen Chatraum betreten|/part - Diesen Chatraum verlassen|/notice [Benutzer] [Nachricht] - Sende eine Nachricht an den Benutzer|/query [Benutzer] - Öffne ein neues Chatfenster für einen privaten Dialog mit dem Benutzer|/msg [Benutzer] [Nachricht] - Dasselbe wie /query, nur dass bereits die erste Nachrich geschickt wird|/nick [Neuer Spitzname] - Wähle einen neuen Spitznamen|/quit - Chat ganz verlassen|/raw - Raw-Kommando senden
IDS_ERR_INITFONTS=Fehler bei der Schriftinitialisierung
IDS_ERR_INSUFFICIENTPARAMETERS=/%s: fehlende Parameter
IDS_ERR_INVALIDCHANNELNAME=Kein gültiger Chat-Kanal.
IDS_ERR_CHANNELNOTALLOWED=Kann nur Chat-Kanäle mit "clonk" im Namen und einem # am Anfang betreten.
IDS_ERR_INVALIDNICKNAME2=/%s: unzulässiger Kurzname
IDS_ERR_INVALIDNICKNAME=Unzulässiger Kurzname.
IDS_ERR_INVALIDNICKNAME2=/%s: unzulässiger Kurzname
IDS_ERR_INVALIDPASSWORDMAX31CHARA=Nicht zulässiges Passwort: maximal 31 Zeichen, keine Leerzeichen.
IDS_ERR_INVALIDSYSGRP=System.c4g nicht vorhanden oder ungültig.
IDS_ERR_IRCCONNECTIONFAILED=IRC-Verbindung fehlgeschlagen: %s
@ -360,10 +377,12 @@ IDS_ERR_JOINPLR_NOFILE=Kann Spieler %s nicht beitreten lassen: Datei nicht gefun
IDS_ERR_JOINPLR_NOLOCALCLIENT=Kann Spieler %s nicht bei Client %d beitreten lassen: Fremdclient!
IDS_ERR_JOINQUEUEPLRS=C4PlayerInfoList::LocalJoinUnjoinedPlayersInQueue konnte Spieler %s nicht beitreten lassen!
IDS_ERR_LEAGUEERRORREPORTINGUNEXP=Liga: Fehler beim Melden des unerwarteten Verbindungsabbruchs: %s
IDS_ERR_LOAD_PLAYER=Fehler beim Laden des Spielers "%s"
IDS_ERR_LOAD_RECR_NOEXTRACT=Fehler beim Wiederherstellen von Spieler %s aus %s: Entpacken fehlgeschlagen!
IDS_ERR_LOAD_RECR_NOFILE=Fehler beim Wiederherstellen von Spieler %s: Datei nicht gefunden!
IDS_ERR_LOAD_RECR_NOFILEFROMNET=C4PlayerInfoList::RecreatePlayers konnte Spieler %s nicht beitreten lassen: Datei nicht gefunden!
IDS_ERR_MOVER=Fehler beim Laden der MassMover.
IDS_ERR_NEWSCENARIOFILEEXISTS=Datei existiert. Bitte das alte Szenario löschen, einen anderen Titel angeben oder eine andere Datei wählen.
IDS_ERR_NOFILE=Datei konnte nicht geladen werden
IDS_ERR_NOGFXSYS=Fehler beim Grafiksystem.
IDS_ERR_NOKEYBOARD=Fehler beim Initialisieren der Tastaturbelegung
@ -396,14 +415,13 @@ IDS_ERR_SCENSECTION=Fehler beim Laden des Szenarienteils "%s"
IDS_ERR_SWITCHRES=Fehler beim Ändern der Bildschirmauflösung: %s
IDS_ERR_TITLE=Fehler
IDS_ERR_TODO=Fehler beim Schreiben in TODO-Datei.
IDS_ERR_TOOMANYDEFINITIONS=Zu viele Definitionen ausgewählt. %d gewählt; maximal erlaubt sind %d.
IDS_ERR_UNKNOWNCMD=Unbekannter Befehl: "%s" - Befehl /help für eine Liste gültiger Befehle
IDS_ERR_HELPCMD=Grundlegende Befehle im IRC-Chat:|/join [Chatraum] - Neuen Chatraum betreten|/part - Diesen Chatraum verlassen|/notice [Benutzer] [Nachricht] - Sende eine Nachricht an den Benutzer|/query [Benutzer] - Öffne ein neues Chatfenster für einen privaten Dialog mit dem Benutzer|/msg [Benutzer] [Nachricht] - Dasselbe wie /query, nur dass bereits die erste Nachrich geschickt wird|/nick [Neuer Spitzname] - Wähle einen neuen Spitznamen|/quit - Chat ganz verlassen|/raw - Raw-Kommando senden
IDS_ERR_UNSUPPORTED_ACCELERATOR=Die Schnelltaste "%s" wird nicht unterstützt. (Im Text "%s".) Bitte melde diesen Fehler.
IDS_ERR_USERCANCEL=Benutzerabbruch
IDS_ERR_WRITENEWTITLE=Fehler beim Speichern des neuen Titels in Datei "%s": %s
IDS_ERR_YOUHAVEBEENREMOVEDBYVOTIN=Du wurdest per Abstimmung aus dem Spiel entfernt. (%s)
IDS_ERR_YOUSURRENDEREDTHELEAGUEGA=Du hast das Ligaspiel aufgegeben.
IDS_ERR_LOAD_PLAYER=Fehler beim Laden des Spielers "%s"
IDS_FAIL_DELETE=Fehler beim Löschen.
IDS_FAIL_MODIFY=Fehler beim Bearbeiten der Datei.
IDS_FAIL_RENAME=Fehler beim Umbenennen.
@ -416,6 +434,9 @@ IDS_GAME_RECORDSTITLE=Aufnahmen
IDS_GAME_SAVEGAMESTITLE=Spielstände
IDS_HOLD_ABORT=Runde abbrechen?
IDS_HOLD_SAVINGGAME=Spiel wird gespeichert...
IDS_LANG_FALLBACK=
IDS_LANG_INFO=Original-Sprachpaket.
IDS_LANG_NAME=Deutsch
IDS_LEAGUE_LEAGUEREPORTINGUNEXPECTED=Liga: unerwarteter Verbindungsabbruch wird gemeldet... (Grund %d)
IDS_LEAGUE_WAITINGFORLASTLEAGUESERVE=Warten auf letzte Meldung des Ligaservers...
IDS_LGA_INVALIDRESPONSE3=Ungültige Antwort des Ligaservers (kein CSID).
@ -472,7 +493,7 @@ IDS_MNU_NET=Host
IDS_MNU_NETCLIENT=Client %s (%i) deaktivieren
IDS_MNU_NETCLIENTDE=Client %s (%i) deaktiviert
IDS_MNU_NETHOST=Host %s
IDS_MNU_NEW=Neu
IDS_MNU_NEW=Neu...
IDS_MNU_NEWVIEWPORT=Neues Sichtfenster
IDS_MNU_OPEN=Öffnen...
IDS_MNU_OPENWPLRS=Öffnen mit Spielern...
@ -544,6 +565,8 @@ IDS_MSG_GFXERR_TXT=OpenClonk konnte OpenGL nicht laden. Prüfen Sie, ob Ihr Graf
IDS_MSG_HASDISCONNECTED=%s hat die Verbindung beendet (%s).
IDS_MSG_HASJOINEDTHECHANNEL=%s ist dem Chat-Kanal beigetreten.
IDS_MSG_HASLEFTTHECHANNEL=%s hat den Chat-Kanal verlassen (%s)
IDS_MSG_HIGHRESLANDSCAPE=Hochauflösende Landschaft
IDS_MSG_HIGHRESLANDSCAPE_DESC=Effekt für hochauflösende Texturen auf der Landschaft.
IDS_MSG_HOST=Host
IDS_MSG_INACTIVE=Inaktiver
IDS_MSG_INTERNETGAMEEVALUATED=Internetspiel ausgewertet.
@ -578,6 +601,7 @@ IDS_MSG_MAP_STARTSCEN=Szenario %s starten
IDS_MSG_MMTIMER_DESC=Kann bei Problemen mit der Spielgeschwindigkeit helfen.
IDS_MSG_NEWPLRCOLOR=Neue &Farbe
IDS_MSG_NEWPLRCOLOR_DESC=Zufällige neue Farbe aussuchen
IDS_MSG_NEWRELEASEAVAILABLE=Für die neue Version ist kein Update-Paket verfügbar. Bitte lade die neue Version von der Download-Seite herunter.
IDS_MSG_NODEBUGMODE=Kein Debug-Modus!
IDS_MSG_NOPARTICIPATE_DESC=%s von der nächsten Runde ausnehmen.
IDS_MSG_NOPLAYERSELECTED=Es sind keine Spieler ausgewählt. Bitte zuerst in der Spielerauswahl die Teilnehmer für diese Runde aktivieren.
@ -637,7 +661,6 @@ IDS_MSG_TRYLEAGUESIGNUP=Liga-Anmeldung für Spieler %s...
IDS_MSG_UPDATEFAILED=Update fehlgeschlagen.
IDS_MSG_UPDATEINPROGRESS=Update-Vorgang läuft noch. Bitte warten.
IDS_MSG_UPDATENOTAVAILABLE=Das Update ist eventuell noch nicht für dieses Betriebssystem verfügbar.
IDS_MSG_NEWRELEASEAVAILABLE=Für die neue Version ist kein Update-Paket verfügbar. Bitte lade die neue Version von der Download-Seite herunter.
IDS_MSG_UPNPHINT=Tipp: Deaktiviere UPnP in den Netzwerkoptionen um den Start zu beschleunigen (wird ggf. für Hosting benötigt)
IDS_MSG_USINGPLR=Mit %s spielen
IDS_MSG_USINGPLR_DESC=Diesen Spieler benutzen um das Spiel fortzusetzen
@ -658,6 +681,8 @@ IDS_NET_CLIENTINFO_DESC=Umfangreiche Informationen anzeigen
IDS_NET_CLIENTONNET=%s auf %s
IDS_NET_CLIENT_ACTIVATED=%s %s aktiviert.
IDS_NET_CLIENT_DEACTIVATED=%s %s deaktiviert.
IDS_NET_CLIENT_IGNORE=Ignorieren
IDS_NET_CLIENT_IGNORE_DESC=%s ignorieren. Du kannst Nachrichten von diesem Client dann in der Lobby nicht mehr lesen.
IDS_NET_CLIENT_INFO=Client-Informationen
IDS_NET_CLIENT_INFO_ADDRESSES=Adressen:
IDS_NET_CLIENT_INFO_CONNDATA= Daten: %s (%s:%d, %d ms)
@ -669,6 +694,7 @@ IDS_NET_CLIENT_JOIN=Client %s verbunden.
IDS_NET_CLIENT_OBSERVE=%s %s muss zuschauen.
IDS_NET_CLIENT_READY=%s %s is bereit.
IDS_NET_CLIENT_REMOVED=%s %s entfernt (%s).
IDS_NET_CLIENT_UNIGNORE=Nicht mehr ignorieren
IDS_NET_CLIENT_UNREADY=%s %s is nicht mehr bereit.
IDS_NET_COMMENTCHANGED=Neuer Netzwerkspiel-Kommentar gesetzt.
IDS_NET_CONNECTHOST=Verbinde mit Host auf %s...
@ -682,7 +708,6 @@ IDS_NET_CTRLMODE_NONE=Kein Netzwerkmodus
IDS_NET_DEACTIVATECLIENT=De&aktivieren
IDS_NET_ERR_COPYFILE=Fehler beim Dateikopieren
IDS_NET_ERR_COPYFILE_LOCAL=Datei ist schon lokal vorhanden
IDS_NET_ERR_VERSIONMISMATCH=WARNUNG! Spielversion beim Host (%s) weicht von lokaler Version (%s) ab. Das Spiel koennte asynchron ablaufen.
IDS_NET_ERR_INITRESLIST=Netzwerk: Ressourcenliste kann nicht initialisiert werden!
IDS_NET_ERR_LEAGUE=Ligafehler
IDS_NET_ERR_LEAGUEINIT=Liga konnte nicht initialisiert werden: %s
@ -697,6 +722,7 @@ IDS_NET_ERR_PORT_UDPDISC=UDP- und Discovery-Port müssen ungleiche Werte zwische
IDS_NET_ERR_REFINVALID=Ungültige Spielreferenz
IDS_NET_ERR_REFREQTIMEOUT=Zeitüberschreitung bei der Referenzabfrage
IDS_NET_ERR_RESTIMEOUT=Warte auf %s: Zeitüberschreitung!
IDS_NET_ERR_VERSIONMISMATCH=WARNUNG! Spielversion beim Host (%s) weicht von lokaler Version (%s) ab. Das Spiel koennte asynchron ablaufen.
IDS_NET_GAMELIST=Laufende Spiele
IDS_NET_GAMELIST_INFO=Liste der im Netzwerk gefundenen Spiele.
IDS_NET_GRAPH=Graph
@ -711,8 +737,6 @@ IDS_NET_INPUT=Netzwerk Eingehend
IDS_NET_INVALIDREF=Ungültige Spielreferenz!
IDS_NET_IP=IP:
IDS_NET_IP_DESC=Spiel mit angegebener Adresse beitreten. Adresse eingeben um einem bekannten Spiel direkt beizutreten.
IDS_NET_MSSEARCH=Suche:
IDS_NET_MSSEARCH_DESC=Liste nach Schlüsselwörtern durchsuchen.
IDS_NET_JOINGAME=Netzwerkbeitritt
IDS_NET_JOINGAMEBY=Trete Spiel von %s bei...
IDS_NET_JOINGAME_BTN=&Beitreten
@ -726,6 +750,8 @@ IDS_NET_LEAGUE_STARTGAME=Spiel wird gestartet...
IDS_NET_LOBBYWAITING=Teilnehmer werden erwartet...
IDS_NET_LOCAL_CLIENT=Lokaler Client
IDS_NET_MASTERSRV_DESC=Hier kann eine abweichende Internetserver-Adresse eingegeben werden. Ist diese Option abgeschaltet, wird der offizielle Internetserver auf openclonkclonk.org genutzt.
IDS_NET_MSSEARCH=Suche:
IDS_NET_MSSEARCH_DESC=Liste nach Schlüsselwörtern durchsuchen.
IDS_NET_NEWGAME=&Neues Spiel
IDS_NET_NEWGAME_DESC=Startet ein neues Netzwerk- oder Internetspiel.
IDS_NET_NODIRECTSTART=Netzwerkspieldaten können nicht direkt gestartet werden.
@ -897,8 +923,8 @@ IDS_TEXT_ADDTODO=Text zur lokalen TODO-Liste hinzufügen.
IDS_TEXT_ALERTTHEHOSTIFTHEHOSTISAW=Den Host aufwecken (wenn er nicht da ist).
IDS_TEXT_CHANGETHECOLOROFTHESPECIF=Farbe des angegebenen Spielers ändern.
IDS_TEXT_CHANGEYOUROWNPLAYERCOLOR=Eigene Farbe ändern.
IDS_TEXT_COMMANDSAVAILABLEDURINGLO=Verfügbare Befehle in der Lobby:
IDS_TEXT_COMMANDSAVAILABLEDURINGGA=Verfügbare Befehle während des Spiels:
IDS_TEXT_COMMANDSAVAILABLEDURINGLO=Verfügbare Befehle in der Lobby:
IDS_TEXT_COMPUTER=Computer
IDS_TEXT_CONTROLMODE=Netzwerkmodus
IDS_TEXT_DESKTOP=Desktop
@ -954,11 +980,3 @@ IDS_VOTE_SURRENDERWARNING=Es wurde entschieden, dass du das Spiel nicht verlasse
IDS_VOTE_VOTEDOUT=rausgeworfen
IDS_VOTE_WANTSTO=%s möchte %s
IDS_VOTE_WANTSTOALLOW=%s möchte %s. Zulassen?
IDS_NET_CLIENT_IGNORE_DESC=%s ignorieren. Du kannst Nachrichten von diesem Client dann in der Lobby nicht mehr lesen.
IDS_NET_CLIENT_IGNORE=Ignorieren
IDS_NET_CLIENT_UNIGNORE=Nicht mehr ignorieren
IDS_MSG_HIGHRESLANDSCAPE=Hochauflösende Landschaft
IDS_MSG_HIGHRESLANDSCAPE_DESC=Effekt für hochauflösende Texturen auf der Landschaft.
IDS_ADDON_INSTALLSUCCESS=Installation von '%s' erfolgreich.
IDS_ADDON_INSTALLFAILURE=Installation von '%s' fehlgeschlagen.
IDS_ADDON_INSTALLTITLE=Addon-Installation

View File

@ -1,6 +1,6 @@
IDS_LANG_NAME=English
IDS_LANG_INFO=Original language pack.
IDS_LANG_FALLBACK=
IDS_ADDON_INSTALLFAILURE=Failed to install '%s'.
IDS_ADDON_INSTALLSUCCESS=Installation of '%s' successful.
IDS_ADDON_INSTALLTITLE=Addon Installation
IDS_BTN_ACTIVATE=Activate
IDS_BTN_BACK=Back
IDS_BTN_CHAT=&Chat
@ -32,19 +32,28 @@ IDS_BTN_YES=Yes
IDS_CHAT_NOTCONNECTED=not connected
IDS_CHAT_SERVER=Server
IDS_CNS_ACTION=Action:
IDS_CNS_BROWSE=Browse...
IDS_CNS_CONSOLE=Editor
IDS_CNS_CONTENTS=Contents:
IDS_CNS_CREATE=Create
IDS_CNS_CREATESTATUS=Place new %s
IDS_CNS_CREATOR=Create objects
IDS_CNS_DEFINITIONS=Definitions
IDS_CNS_DROPNODEF=Object invalid or not loaded: %s
IDS_CNS_EFFECTS=Effects:
IDS_CNS_EXACTTOSTATIC=When switching from exact to dynamic mode all changes made in dynamic mode will be lost.
IDS_CNS_FILENAME=Filename
IDS_CNS_FILLNOHALT=The fill tool cannot be used in halt mode.
IDS_CNS_GAMECLOSED=Game cleared.
IDS_CNS_GAMEMODE=Game mode
IDS_CNS_GAMESAVED=Game saved.
IDS_CNS_HEIGHT=Height
IDS_CNS_LOG=Log
IDS_CNS_MAPSIZE=Map size
IDS_CNS_MAPZOOM=Zoom
IDS_CNS_MULTIPLEOBJECTS=%i selected objects.
IDS_CNS_NEWPLRVIEWPORT=New for %s
IDS_CNS_NEWSCENARIO=New Scenario
IDS_CNS_NOCHILDSAVE=%s is located in a group folder. Scenarios cannot be saved in closed group folders.
IDS_CNS_NOFULLSCREENPLRS=Fullscreen mode requires at least one participating player.
IDS_CNS_NOMATDEF=Cannot draw because selected material-texture combination '%s-%s' is not defined in the texture table.
@ -58,12 +67,17 @@ IDS_CNS_PLRQUITNET=Remove %s (%s)
IDS_CNS_PROPERTIES=Properties
IDS_CNS_SAVEASERROR=Error while saving the scenario to %s.
IDS_CNS_SAVERROR=Error while saving the scenario.
IDS_CNS_SCENARIOFILE=OpenClonk scenario file
IDS_CNS_SCENARIOSAVED=Scenario saved.
IDS_CNS_SCENARIOSETTINGS=Scenario settings
IDS_CNS_SCRIPT=Script
IDS_CNS_SCRIPTCREATEDOBJECTS=This scenario's script has created objects on initialization.
IDS_CNS_TITLE=Title
IDS_CNS_TYPE=Type: %s (%s)
IDS_CNS_VALUE=Value
IDS_CNS_VIEWPORT=Viewport
IDS_CNS_WARNDOUBLE=In order to avoid double creation, the script's 'Initialize' function should be modified.
IDS_CNS_WIDTH=Width
IDS_COMM_ACQUIRE=Acquisition
IDS_COMM_ACTIVATE=Activation
IDS_COMM_ATTACK=Attack
@ -83,8 +97,8 @@ IDS_COMM_PUSHTO=Push
IDS_COMM_PUT=Put
IDS_COMM_RETRY=Retry
IDS_COMM_SELL=Sell
IDS_COMM_TAKE2=Take out
IDS_COMM_TAKE=Take
IDS_COMM_TAKE2=Take out
IDS_COMM_THROW=Throw
IDS_COMM_TRANSFER=Movement
IDS_COMM_UNGRAB=Let go
@ -100,7 +114,6 @@ IDS_CTL_ACTIVE=Active
IDS_CTL_ANTIALIASING=Antialiasing:
IDS_CTL_AUTHOR=Author: %s
IDS_CTL_AUTOMATICUPDATES=Enable automatic updates
IDS_CTL_PACKETLOGGING=Packet logging
IDS_CTL_BACKGROUND=Background:
IDS_CTL_BITDEPTH=Color Depth
IDS_CTL_CHANNEL=Channel:
@ -123,17 +136,17 @@ IDS_CTL_FRONTEND=Frontend
IDS_CTL_FULLSCREENMODE=Window mode
IDS_CTL_GAME=Game
IDS_CTL_GAMEFUNCTIONS=Game Functions
IDS_CTL_GAMESPEEDUP=Increase game speed
IDS_CTL_GAMESPEEDDOWN=Decrease game speed
IDS_CTL_GAMESPEEDUP=Increase game speed
IDS_CTL_GFXENGINE=Renderer
IDS_CTL_INETSERVER=&Internet
IDS_CTL_IRCCHAT=IRC-Chat
IDS_CTL_LANGUAGE=Language
IDS_CTL_LEAGUE_ACCOUNT=League user name:
IDS_CTL_LEAGUE_CHK_PLRPW=Specify league password
IDS_CTL_LEAGUE_PLRPW2=League password (repeat):
IDS_CTL_LEAGUE_PLRPW=League password:
IDS_CTL_LEAGUE_CHK_REMEMBERLOGIN=Remember login
IDS_CTL_LEAGUE_PLRPW=League password:
IDS_CTL_LEAGUE_PLRPW2=League password (repeat):
IDS_CTL_LOST=lost
IDS_CTL_LOUD=loud
IDS_CTL_MATERIAL=Material
@ -141,21 +154,22 @@ IDS_CTL_MESSAGEBOARDBACK=Scroll messages back
IDS_CTL_MESSAGEBOARDFORWARD=Scroll messages forward
IDS_CTL_MMTIMER=Disable multimedia timer
IDS_CTL_MUSIC=Music
IDS_CTL_NAME2=Name:
IDS_CTL_NAME=Name
IDS_CTL_NAME2=Name:
IDS_CTL_NICK=Nickname:
IDS_CTL_NOGOAL=No game goal
IDS_CTL_NOLANGINFO=Language pack not available.
IDS_CTL_NONE=none
IDS_CTL_OFF=off
IDS_CTL_ON=on
IDS_CTL_PACKETLOGGING=Packet logging
IDS_CTL_PASSWORDOPTIONAL=Password (optional):
IDS_CTL_PICTURE=Picture:
IDS_CTL_PLAYER=Player
IDS_CTL_PLAYER1=Player 1
IDS_CTL_PLAYER2=Player 2
IDS_CTL_PLAYER3=Player 3
IDS_CTL_PLAYER4=Player 4
IDS_CTL_PLAYER=Player
IDS_CTL_REALNAME=Real name:
IDS_CTL_RECORD=&Record
IDS_CTL_RESOLUTION=Resolution
@ -165,9 +179,9 @@ IDS_CTL_SCREENSHOTEX=Screenshot (full game area)
IDS_CTL_SCRIPT=Script
IDS_CTL_SCRIPTPLAYERS=Script players
IDS_CTL_SENDMESSAGE=Send message
IDS_CTL_SIZE=Size:
IDS_CTL_SHOW=Display
IDS_CTL_SILENT=quiet
IDS_CTL_SIZE=Size:
IDS_CTL_SMOKE=Effects Level
IDS_CTL_SMOKEHI=High
IDS_CTL_SMOKELOW=Low
@ -183,8 +197,6 @@ IDS_CTL_USEOTHERSERVER=Use alternate internet server
IDS_CTL_WON=won
IDS_DESC_AUTOFRAMESKIP=Automatically skips graphics frames if the game is lagging.
IDS_DESC_AUTOMATICUPDATES=With this option enabled, the program will automatically check for updates once a day at program start.
IDS_DESC_PACKETLOGGING=Dumps all network traffic into the log file.
IDS_DESC_UPNP=Enable automatic port forwarding for direct connections between participants in network games.
IDS_DESC_CHANGESTHEWAYCONTROLDATAI=Changes the way control data is exchanged between network clients.
IDS_DESC_CHECKONLINEFORNEWVERSIONS=Check online for new versions.
IDS_DESC_CLIENTS=Clients:
@ -218,6 +230,7 @@ IDS_DESC_NOPROMO=No further promotions.
IDS_DESC_NOTINITED=Not initialised
IDS_DESC_OBJECT=Type: %s|Experience: %i|Rounds: %i|Died: %i x|%s|Playing time: %s|Birthday: %s||
IDS_DESC_OLDANDNEWSCORE=Old and new score.
IDS_DESC_PACKETLOGGING=Dumps all network traffic into the log file.
IDS_DESC_PLAYER=Score: %i|Rounds: %i (%i won %i lost)|Playing time: %s|Comment: %s|
IDS_DESC_PLAYERSCONTROLLEDBYCOMPUT=Players controlled by computer.
IDS_DESC_PLRS=Players:
@ -231,6 +244,7 @@ IDS_DESC_SHOWSAVAILABLENETWORKGAME=Shows running network games.
IDS_DESC_TEAM=Team %s
IDS_DESC_UNASSOCIATEDSAVEGAMEPLAYE=Unassociated savegame players.
IDS_DESC_UNKNOWNGAMESTATE=Game is in an unknown state
IDS_DESC_UPNP=Enable automatic port forwarding for direct connections between participants in network games.
IDS_DESC_VERSION=Engine version: %s
IDS_DESC_VOLUMEMUSIC=Volume of background music.
IDS_DESC_VOLUMESOUND=Volume of sound effects.
@ -248,8 +262,8 @@ IDS_DLGTIP_EXIT=End the program.
IDS_DLGTIP_GAMEGO=Starts the game.
IDS_DLGTIP_NETWORKGAME=Start a network game or join an existing one.
IDS_DLGTIP_NEWPLAYER=Create a new player file.
IDS_DLGTIP_OK2=Confirm.
IDS_DLGTIP_OK=Close dialog.
IDS_DLGTIP_OK2=Confirm.
IDS_DLGTIP_OPTIONS=Change program options.
IDS_DLGTIP_PASTE=Inserts the contents of the clipboard.
IDS_DLGTIP_PING=Ping
@ -329,12 +343,15 @@ IDS_DLG_VOTING=Voting
IDS_DLG_YES=&Yes
IDS_DL_CANCEL=Cancel download
IDS_DL_STATUSCONNECTING=connecting...
IDS_ERR_CHANNELNOTALLOWED=Can only join channels with "clonk" in it's name and a # in front.
IDS_ERR_CLONKCOLLISION=A Clonk with the file name "%s" exists already.
IDS_ERR_CONFIG=Configuration error
IDS_ERR_CONFREAD=Could not read configuration: %s
IDS_ERR_CONFSAVE=Could not save configuration: %s
IDS_ERR_CREATESCENARIO=Error creating scenario. Is the filename valid and destination writable?
IDS_ERR_DDRAW=Direct3d or OpenGL failure.
IDS_ERR_DELOLDTITLE=Error deleting old title from file "%s": %s
IDS_ERR_ENTERTITLE=You must enter a scenario title!
IDS_ERR_ERRORADDINGNEWTITLEFORFIL=Error adding new title for file \"%s\": %s
IDS_ERR_ERRORLOADINGROUNDRESULTS=Error loading round results.
IDS_ERR_ERRORSAVINGROUNDRESULTS=Error saving round results.
@ -345,14 +362,14 @@ IDS_ERR_FATAL=FATAL ERROR: %s
IDS_ERR_FILEEXISTS=A file with the name "%s" exists already.
IDS_ERR_GAMELEFTVIAPLAYERMENU=Game left via player menu.
IDS_ERR_GBACK=Landscape error.
IDS_ERR_GFX_REGISTERMAIN=Could not register main graphic groups
IDS_ERR_GFX_INITSHADERS=Failed to initialize GLSL shaders
IDS_ERR_GFX_REGISTERMAIN=Could not register main graphic groups
IDS_ERR_HELPCMD=Basic commands in the IRC-chat:|/join [channel] - Enter a new chat room|/part - Leave this chat room|/notice [user] [message] - Send a message to the user|/query [user] - Open a new chat window to chat for chatting with the user|/msg [user] [message] - The same as /query, only that the first message is already sent|/nick [new nick name] - Choose a new nick name|/quit - Exit the chat|/raw - Send a raw command
IDS_ERR_INITFONTS=Error initializing fonts
IDS_ERR_INSUFFICIENTPARAMETERS=/%s: insufficient parameters
IDS_ERR_INVALIDCHANNELNAME=Invalid channel name.
IDS_ERR_CHANNELNOTALLOWED=Can only join channels with "clonk" in it's name and a # in front.
IDS_ERR_INVALIDNICKNAME2=/%s: invalid nick name
IDS_ERR_INVALIDNICKNAME=Invalid nickname.
IDS_ERR_INVALIDNICKNAME2=/%s: invalid nick name
IDS_ERR_INVALIDPASSWORDMAX31CHARA=Invalid password. Maximum 31 characters. No spaces allowed.
IDS_ERR_INVALIDSYSGRP=System.c4g not found or invalid.
IDS_ERR_IRCCONNECTIONFAILED=IRC connection failed: %s
@ -360,10 +377,12 @@ IDS_ERR_JOINPLR_NOFILE=Cannot join player %s: File not found!
IDS_ERR_JOINPLR_NOLOCALCLIENT=Cannot join player %s to client %d: Client not local!
IDS_ERR_JOINQUEUEPLRS=C4PlayerInfoList::LocalJoinUnjoinedPlayersInQueue failed to join player %s!
IDS_ERR_LEAGUEERRORREPORTINGUNEXP=League: Error reporting unexpected disconnect: %s
IDS_ERR_LOAD_PLAYER=Error loading player "%s"
IDS_ERR_LOAD_RECR_NOEXTRACT=Error recreating player %s from %s: Extract failed!
IDS_ERR_LOAD_RECR_NOFILE=Error recreating player %s: No file!
IDS_ERR_LOAD_RECR_NOFILEFROMNET=C4PlayerInfoList::RecreatePlayers couldn't join player %s: No file.
IDS_ERR_MOVER=MassMover data error.
IDS_ERR_NEWSCENARIOFILEEXISTS=Filename exists. Please change title or press Browse to select a new filename.
IDS_ERR_NOFILE=Could not load file
IDS_ERR_NOGFXSYS=Graphics system error.
IDS_ERR_NOKEYBOARD=Error initializing keyboard bindings
@ -396,14 +415,13 @@ IDS_ERR_SCENSECTION=Error loading scenario section "%s"
IDS_ERR_SWITCHRES=Error switching resolution: %s
IDS_ERR_TITLE=Error
IDS_ERR_TODO=Error writing to TODO file.
IDS_ERR_TOOMANYDEFINITIONS=Too many definitions selected. %d selected; maximum allowed amount is %d.
IDS_ERR_UNKNOWNCMD=Unknown command: "%s" - type /help to get a list of valid commands
IDS_ERR_HELPCMD=Basic commands in the IRC-chat:|/join [channel] - Enter a new chat room|/part - Leave this chat room|/notice [user] [message] - Send a message to the user|/query [user] - Open a new chat window to chat for chatting with the user|/msg [user] [message] - The same as /query, only that the first message is already sent|/nick [new nick name] - Choose a new nick name|/quit - Exit the chat|/raw - Send a raw command
IDS_ERR_UNSUPPORTED_ACCELERATOR=Accelerator key "%s" not supported. (In string "%s"). Please report this error.
IDS_ERR_USERCANCEL=User abort
IDS_ERR_WRITENEWTITLE=Error writing new title for file "%s": %s
IDS_ERR_YOUHAVEBEENREMOVEDBYVOTIN=You have been removed by vote. (%s)
IDS_ERR_YOUSURRENDEREDTHELEAGUEGA=You have surrendered the league game.
IDS_ERR_LOAD_PLAYER=Error loading player "%s"
IDS_FAIL_DELETE=Delete failure.
IDS_FAIL_MODIFY=File modification failure.
IDS_FAIL_RENAME=Rename failure.
@ -416,6 +434,9 @@ IDS_GAME_RECORDSTITLE=Records
IDS_GAME_SAVEGAMESTITLE=Savegames
IDS_HOLD_ABORT=Abort round?
IDS_HOLD_SAVINGGAME=Saving game...
IDS_LANG_FALLBACK=
IDS_LANG_INFO=Original language pack.
IDS_LANG_NAME=English
IDS_LEAGUE_LEAGUEREPORTINGUNEXPECTED=League: Reporting unexpected disconnect (reason %d)...
IDS_LEAGUE_WAITINGFORLASTLEAGUESERVE=Waiting for last league server reply...
IDS_LGA_INVALIDRESPONSE3=Invalid reply from internet server (no CSID).
@ -472,7 +493,7 @@ IDS_MNU_NET=Host
IDS_MNU_NETCLIENT=Client %s (%i)
IDS_MNU_NETCLIENTDE=Client %s (%i) deactivated
IDS_MNU_NETHOST=Host %s
IDS_MNU_NEW=New
IDS_MNU_NEW=New...
IDS_MNU_NEWVIEWPORT=New viewport
IDS_MNU_OPEN=Open...
IDS_MNU_OPENWPLRS=Open with players...
@ -544,6 +565,8 @@ IDS_MSG_GFXERR_TXT=OpenClonk could not load OpenGL. Please check if your graphic
IDS_MSG_HASDISCONNECTED=%s has disconnected (%s).
IDS_MSG_HASJOINEDTHECHANNEL=%s has joined the channel.
IDS_MSG_HASLEFTTHECHANNEL=%s has left the channel (%s)
IDS_MSG_HIGHRESLANDSCAPE=High resolution landscape
IDS_MSG_HIGHRESLANDSCAPE_DESC=Effect for high resolution textures on the landscape.
IDS_MSG_HOST=host
IDS_MSG_INACTIVE=Inactive
IDS_MSG_INTERNETGAMEEVALUATED=Internet game evaluated.
@ -578,6 +601,7 @@ IDS_MSG_MAP_STARTSCEN=Start scenario %s
IDS_MSG_MMTIMER_DESC=Try this option if you experience timing problems during the game, e.g. very slow game even in small scenarios on decent hardware.
IDS_MSG_NEWPLRCOLOR=New &color
IDS_MSG_NEWPLRCOLOR_DESC=Generate a new random player color
IDS_MSG_NEWRELEASEAVAILABLE=For the new version there is no update package available. Please download and install the new version from the downloads page.
IDS_MSG_NODEBUGMODE=No debug mode!
IDS_MSG_NOPARTICIPATE_DESC=Exclude %s from participation in the next round.
IDS_MSG_NOPLAYERSELECTED=No players are selected. Please go to player selection and activate the participants for this round.
@ -638,7 +662,6 @@ IDS_MSG_UPDATEFAILED=Update failed.
IDS_MSG_UPDATEINPROGRESS=Update still in progress. Please wait.
IDS_MSG_UPDATENOTAVAILABLE=The update is possibly not yet available for this operating system.
IDS_MSG_UPNPHINT=Hint: You can disable UPnP in network options to skip this delay if you don't need port forwarding to host games.
IDS_MSG_NEWRELEASEAVAILABLE=For the new version there is no update package available. Please download and install the new version from the downloads page.
IDS_MSG_USINGPLR=Using %s
IDS_MSG_USINGPLR_DESC=Use this player to continue the savegame
IDS_MSG_WASKICKEDFROMTHECHANNEL=%s was kicked from the channel (%s).
@ -658,6 +681,8 @@ IDS_NET_CLIENTINFO_DESC=Show extended info
IDS_NET_CLIENTONNET=%s on %s
IDS_NET_CLIENT_ACTIVATED=%s %s activated.
IDS_NET_CLIENT_DEACTIVATED=%s %s deactivated.
IDS_NET_CLIENT_IGNORE=Ignore
IDS_NET_CLIENT_IGNORE_DESC=Ignores %s. You will not be able to see messages from this client.
IDS_NET_CLIENT_INFO=Client info
IDS_NET_CLIENT_INFO_ADDRESSES=Addresses:
IDS_NET_CLIENT_INFO_CONNDATA= Data: %s (%s:%d, %d ms)
@ -669,6 +694,7 @@ IDS_NET_CLIENT_JOIN=Client %s connected.
IDS_NET_CLIENT_OBSERVE=%s %s forced to observe.
IDS_NET_CLIENT_READY=%s %s is ready.
IDS_NET_CLIENT_REMOVED=%s %s removed (%s).
IDS_NET_CLIENT_UNIGNORE=Unignore
IDS_NET_CLIENT_UNREADY=%s %s is no longer ready.
IDS_NET_COMMENTCHANGED=Network game comment adjusted.
IDS_NET_CONNECTHOST=Connecting to host on %s...
@ -682,7 +708,6 @@ IDS_NET_CTRLMODE_NONE=No control mode
IDS_NET_DEACTIVATECLIENT=De&activate
IDS_NET_ERR_COPYFILE=Error copying file
IDS_NET_ERR_COPYFILE_LOCAL=The file is local already
IDS_NET_ERR_VERSIONMISMATCH=WARNING! Host engine revision (%s) differs from local revision (%s). Engines might run out of sync.
IDS_NET_ERR_INITRESLIST=Network: failed to initialize resource list!
IDS_NET_ERR_LEAGUE=League error
IDS_NET_ERR_LEAGUEINIT=Could not initialize league: %s
@ -697,6 +722,7 @@ IDS_NET_ERR_PORT_UDPDISC=UDP port and discovery port must be set to different va
IDS_NET_ERR_REFINVALID=Invalid reference
IDS_NET_ERR_REFREQTIMEOUT=Reference request timed out
IDS_NET_ERR_RESTIMEOUT=Waiting for %s: Timeout!
IDS_NET_ERR_VERSIONMISMATCH=WARNING! Host engine revision (%s) differs from local revision (%s). Engines might run out of sync.
IDS_NET_GAMELIST=Running Games
IDS_NET_GAMELIST_INFO=List of running games found in network
IDS_NET_GRAPH=Graph
@ -711,8 +737,6 @@ IDS_NET_INPUT=Network Input
IDS_NET_INVALIDREF=Invalid reference!
IDS_NET_IP=IP:
IDS_NET_IP_DESC=Join address of selected game. Enter an address here to join a game directly.
IDS_NET_MSSEARCH=Search:
IDS_NET_MSSEARCH_DESC=Search masterserver games for keywords.
IDS_NET_JOINGAME=Joining network game
IDS_NET_JOINGAMEBY=Joining game by %s...
IDS_NET_JOINGAME_BTN=&Join game
@ -726,6 +750,8 @@ IDS_NET_LEAGUE_STARTGAME=Starting game...
IDS_NET_LOBBYWAITING=Awaiting participants...
IDS_NET_LOCAL_CLIENT=Local client
IDS_NET_MASTERSRV_DESC=Here you can enter the address of an alternate internet server you wish to use. If this option is disabled, the official server on openclonk.org is used.
IDS_NET_MSSEARCH=Search:
IDS_NET_MSSEARCH_DESC=Search masterserver games for keywords.
IDS_NET_NEWGAME=&New game
IDS_NET_NEWGAME_DESC=Create a new network or internet game.
IDS_NET_NODIRECTSTART=Cannot start network game data directly.
@ -897,8 +923,8 @@ IDS_TEXT_ADDTODO=Add text to local TODO list.
IDS_TEXT_ALERTTHEHOSTIFTHEHOSTISAW=Alert the host (if the host is away).
IDS_TEXT_CHANGETHECOLOROFTHESPECIF=Change the color of the specified player.
IDS_TEXT_CHANGEYOUROWNPLAYERCOLOR=Change your own player color.
IDS_TEXT_COMMANDSAVAILABLEDURINGLO=Commands available during lobby:
IDS_TEXT_COMMANDSAVAILABLEDURINGGA=Commands available during game:
IDS_TEXT_COMMANDSAVAILABLEDURINGLO=Commands available during lobby:
IDS_TEXT_COMPUTER=Computer
IDS_TEXT_CONTROLMODE=Control mode
IDS_TEXT_DESKTOP=Desktop
@ -954,11 +980,3 @@ IDS_VOTE_SURRENDERWARNING=It was decided that you cannot leave the game. However
IDS_VOTE_VOTEDOUT=voted out
IDS_VOTE_WANTSTO=%s wants to %s
IDS_VOTE_WANTSTOALLOW=%s wants to %s. Allow?
IDS_NET_CLIENT_IGNORE_DESC=Ignores %s. You will not be able to see messages from this client.
IDS_NET_CLIENT_IGNORE=Ignore
IDS_NET_CLIENT_UNIGNORE=Unignore
IDS_MSG_HIGHRESLANDSCAPE=High resolution landscape
IDS_MSG_HIGHRESLANDSCAPE_DESC=Effect for high resolution textures on the landscape.
IDS_ADDON_INSTALLSUCCESS=Installation of '%s' successful.
IDS_ADDON_INSTALLFAILURE=Failed to install '%s'.
IDS_ADDON_INSTALLTITLE=Addon Installation

View File

@ -248,6 +248,20 @@ bool C4Console::Message(const char *szMessage, bool fQuery)
return C4ConsoleGUI::Message(szMessage, fQuery);
}
bool C4Console::FileNew()
{
StdCopyStrBuf filename;
#ifdef WITH_QT_EDITOR
if (!C4ConsoleGUI::CreateNewScenario(&filename)) return false;
Application.ClearCommandLine();
Application.OpenGame(filename.getData());
return true;
#endif
// Not implemented
return false;
}
bool C4Console::FileOpen()
{
// Get scenario file name

View File

@ -76,6 +76,7 @@ public:
bool SaveScenario(const char * path);
bool FileSaveAs(bool fSaveGame);
bool FileSave();
bool FileNew();
bool FileOpen();
bool FileOpenWPlrs();
bool FileCommand();

View File

@ -83,6 +83,7 @@ public:
void Execute();
void AddViewport(C4ViewportWindow *cvp);
void OnObjectSelectionChanged(class C4EditCursorSelection &selection); // selection changed (through other means than creator or object list view)
bool CreateNewScenario(StdStrBuf *out_filename);
friend class C4ConsoleQtMainWindow;
friend class C4ToolsDlg;

View File

@ -337,6 +337,15 @@ void C4ConsoleGUI::UpdateMenuText(HMENU hMenu) { /* Translation done through QTr
state->AddViewport(cvp);
}
bool C4ConsoleGUI::CreateNewScenario(StdStrBuf *out_filename)
{
#ifdef WITH_QT_EDITOR
return state->CreateNewScenario(out_filename);
#else
return false
#endif
}
void C4ConsoleGUI::OnObjectSelectionChanged(class C4EditCursorSelection &selection)
{
// selection changed (through other means than creator or object list view)

View File

@ -95,6 +95,7 @@
<property name="title">
<string comment="res">IDS_MNU_FILE</string>
</property>
<addaction name="actionFileNew"/>
<addaction name="actionFileOpen"/>
<addaction name="actionFileOpenWithPlayers"/>
<addaction name="separator"/>
@ -604,6 +605,17 @@
<string>CURSOR_CREATEOBJ_TIP</string>
</property>
</action>
<action name="actionFileNew">
<property name="text">
<string comment="res">IDS_MNU_NEW</string>
</property>
<property name="toolTip">
<string comment="res">IDS_MNU_NEW</string>
</property>
<property name="shortcut">
<string>Ctrl+N</string>
</property>
</action>
</widget>
<resources>
<include location="resource.qrc"/>
@ -1041,6 +1053,22 @@
</hint>
</hints>
</connection>
<connection>
<sender>actionFileNew</sender>
<signal>triggered()</signal>
<receiver>MainWindow</receiver>
<slot>FileNew()</slot>
<hints>
<hint type="sourcelabel">
<x>-1</x>
<y>-1</y>
</hint>
<hint type="destinationlabel">
<x>477</x>
<y>288</y>
</hint>
</hints>
</connection>
</connections>
<slots>
<slot>PlayPressed(bool)</slot>
@ -1071,5 +1099,6 @@
<slot>CursorCreateObjPressed(bool)</slot>
<slot>ForegroundMaterialChanged(QString)</slot>
<slot>BackgroundMaterialChanged(QString)</slot>
<slot>FileNew()</slot>
</slots>
</ui>

View File

@ -0,0 +1,354 @@
/*
* OpenClonk, http://www.openclonk.org
*
* Copyright (c) 2001-2009, RedWolf Design GmbH, http://www.clonk.de/
* Copyright (c) 2013, The OpenClonk Team and contributors
*
* Distributed under the terms of the ISC license; see accompanying file
* "COPYING" for details.
*
* "Clonk" is a registered trademark of Matthes Bender, used with permission.
* See accompanying file "TRADEMARK" for details.
*
* To redistribute this file separately, substitute the full license texts
* for the above references.
*/
/* "New scenario" editor dialogue */
#include <C4Include.h>
#include <C4Value.h>
#include <C4Config.h>
#include <C4ConsoleQtNewScenario.h>
/* Definition file list model for new scenario definition selection */
C4ConsoleQtDefinitionFileListModel::DefFileInfo::DefFileInfo(C4ConsoleQtDefinitionFileListModel::DefFileInfo *parent, const char *filename, const char *root_path)
: parent(parent), filename(filename), root_path(root_path), was_opened(false), is_root(false), selected(parent->IsSelected()), disabled(parent->IsSelected() /*not a bug*/)
{
// Delay opening of groups until information is actually requested
// Full names into child groups in C4S always delimeted with backslashes
if (parent->full_filename.getLength())
full_filename = parent->full_filename + "\\" + filename;
else
full_filename = filename;
}
C4ConsoleQtDefinitionFileListModel::DefFileInfo::DefFileInfo()
: parent(NULL), was_opened(true), is_root(true), selected(false), disabled(false)
{
// Init as root: List definitions in root paths
// Objects.ocd is always there (even if not actually found) and always first
DefFileInfo *main_objects_def = new DefFileInfo(this, C4CFN_Objects, "");
children.emplace_back(main_objects_def);
main_objects_def->SetSelected(true);
main_objects_def->SetDisabled(true);
bool has_default_objects_found = false;
for (auto & root_iter : ::Reloc)
{
const char *root = root_iter.strBuf.getData();
for (DirectoryIterator def_file_iter(root); *def_file_iter; ++def_file_iter)
{
const char *def_file = ::GetFilename(*def_file_iter);
if (WildcardMatch(C4CFN_DefFiles, def_file))
{
// Set path of main objects if found
if (!has_default_objects_found && !strcmp(C4CFN_Objects, def_file))
{
main_objects_def->root_path.Copy(root);
continue;
}
// Avoid duplicates on top level
bool dup = false;
for (auto & child : children)
if (!strcmp(child->GetName(), def_file))
{
dup = true; break;
}
if (dup) continue;
children.emplace_back(new DefFileInfo(this, def_file, root));
}
}
}
}
void C4ConsoleQtDefinitionFileListModel::DefFileInfo::SetSelected(bool to_val)
{
selected = to_val;
// Selection propagates to children; children of selected are disabled because they cannot be un-selected
for (auto & child : children)
{
child->SetSelected(selected);
child->SetDisabled(selected);
}
}
bool C4ConsoleQtDefinitionFileListModel::DefFileInfo::OpenGroup()
{
children.clear();
was_opened = true; // mark as opened even if fails to prevent permanent re-loading of broken groups
if (parent->IsRoot())
{
if (!grp.Open((root_path + DirectorySeparator + filename).getData())) return false;
}
else
{
if (!grp.OpenAsChild(&parent->grp, filename.getData())) return false;
}
// Init child array (without loading full groups)
StdStrBuf child_filename;
children.reserve(grp.EntryCount(C4CFN_DefFiles));
grp.ResetSearch();
while (grp.FindNextEntry(C4CFN_DefFiles, &child_filename))
children.emplace_back(new DefFileInfo(this, child_filename.getData(), NULL));
return true;
}
int32_t C4ConsoleQtDefinitionFileListModel::DefFileInfo::GetChildCount()
{
if (!was_opened) OpenGroup();
return children.size();
}
C4ConsoleQtDefinitionFileListModel::DefFileInfo *C4ConsoleQtDefinitionFileListModel::DefFileInfo::GetChild(int32_t index)
{
if (!was_opened) OpenGroup();
if (index >= children.size()) return NULL;
return children[index].get();
}
int32_t C4ConsoleQtDefinitionFileListModel::DefFileInfo::GetChildIndex(const DefFileInfo *child)
{
auto iter = std::find_if(children.begin(), children.end(),
[child](std::unique_ptr<DefFileInfo> & item)->bool { return item.get() == child; });
if (iter == children.end()) return -1; // not found
return int32_t(iter - children.begin());
}
void C4ConsoleQtDefinitionFileListModel::DefFileInfo::AddSelectedDefinitions(std::list<const char *> *result) const
{
// Add parent-most selected
if (IsSelected())
result->push_back(full_filename.getData());
else
for (auto &iter : children) iter->AddSelectedDefinitions(result);
}
C4ConsoleQtDefinitionFileListModel::C4ConsoleQtDefinitionFileListModel()
{
}
C4ConsoleQtDefinitionFileListModel::~C4ConsoleQtDefinitionFileListModel()
{
}
std::list<const char *> C4ConsoleQtDefinitionFileListModel::GetSelectedDefinitions() const
{
std::list<const char *> result;
root.AddSelectedDefinitions(&result);
return result;
}
int C4ConsoleQtDefinitionFileListModel::rowCount(const QModelIndex & parent) const
{
if (!parent.isValid()) return root.GetChildCount();
DefFileInfo *parent_def = static_cast<DefFileInfo *>(parent.internalPointer());
if (!parent_def) return 0;
return parent_def->GetChildCount();
}
int C4ConsoleQtDefinitionFileListModel::columnCount(const QModelIndex & parent) const
{
return 1; // Name
}
QVariant C4ConsoleQtDefinitionFileListModel::data(const QModelIndex & index, int role) const
{
DefFileInfo *def = static_cast<DefFileInfo *>(index.internalPointer());
if (!def) return QVariant();
// Query latest data from prop list
if (role == Qt::DisplayRole)
{
return QString(def->GetName());
}
else if (role == Qt::CheckStateRole)
{
return def->IsSelected() ? Qt::Checked : Qt::Unchecked;
}
// Nothing to show
return QVariant();
}
QModelIndex C4ConsoleQtDefinitionFileListModel::index(int row, int column, const QModelIndex &parent) const
{
if (column) return QModelIndex();
DefFileInfo *parent_def = &root;
if (parent.isValid()) parent_def = static_cast<DefFileInfo *>(parent.internalPointer());
if (!parent_def) return QModelIndex();
return createIndex(row, column, parent_def->GetChild(row));
}
QModelIndex C4ConsoleQtDefinitionFileListModel::parent(const QModelIndex &index) const
{
DefFileInfo *def = static_cast<DefFileInfo *>(index.internalPointer());
if (!def) return QModelIndex();
DefFileInfo *parent_def = def->GetParent();
if (!parent_def) return QModelIndex();
int32_t def_index = parent_def->GetChildIndex(def);
if (def_index < 0) return QModelIndex(); // can't happen
return createIndex(def_index, 0, parent_def);
}
Qt::ItemFlags C4ConsoleQtDefinitionFileListModel::flags(const QModelIndex &index) const
{
Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsUserCheckable;
DefFileInfo *def = static_cast<DefFileInfo *>(index.internalPointer());
if (def && !def->IsDisabled()) flags |= Qt::ItemIsEnabled;
return flags;
}
bool C4ConsoleQtDefinitionFileListModel::setData(const QModelIndex& index, const QVariant& value, int role)
{
// Adjust check-state
if (role == Qt::CheckStateRole)
{
DefFileInfo *def = static_cast<DefFileInfo *>(index.internalPointer());
if (def && !def->IsDisabled())
{
def->SetSelected(value.toBool());
// Update changed index and all children
int32_t child_count = def->GetChildCount();
QModelIndex end_changed = index;
if (child_count) end_changed = createIndex(child_count - 1, 0, def->GetChild(child_count - 1));
emit dataChanged(index, end_changed);
}
}
return true;
}
/* New scenario dialogue */
C4ConsoleQtNewScenarioDlg::C4ConsoleQtNewScenarioDlg(class QMainWindow *parent_window)
: QDialog(parent_window, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint)
, has_custom_filename(false)
{
ui.setupUi(this);
adjustSize();
setMinimumSize(size());
ui.filenameEdit->setText(::Config.General.UserDataPath);
ui.definitionTreeView->setModel(&def_file_model);
}
bool C4ConsoleQtNewScenarioDlg::SaveScenario(C4Group &grp)
{
// Save c4s
if (!c4s.Save(grp)) return false;
//return grp.Save(false); -- not needed because group is unpacked
return true;
}
void C4ConsoleQtNewScenarioDlg::CreatePressed()
{
// Take over settings
c4s.Landscape.MapWdt.SetConstant(ui.mapWidthSpinBox->value());
c4s.Landscape.MapHgt.SetConstant(ui.mapHeightSpinBox->value());
c4s.Landscape.MapZoom.SetConstant(ui.mapZoomSpinBox->value());
SCopy(ui.titleEdit->text().toUtf8(), c4s.Head.Title, C4MaxTitle);
c4s.Game.Mode.Copy(ui.gameModeComboBox->currentText().toUtf8());
if (c4s.Game.Mode == "Undefined") c4s.Game.Mode.Clear();
filename.Copy(ui.filenameEdit->text().toUtf8());
std::list<const char *> definitions = def_file_model.GetSelectedDefinitions();
if (definitions.size() > C4S_MaxDefinitions)
{
DoError(FormatString(::LoadResStr("IDS_ERR_TOOMANYDEFINITIONS"), (int)definitions.size(), (int)C4S_MaxDefinitions).getData());
ui.definitionTreeView->setFocus();
return;
}
std::ostringstream definitions_join("");
if (definitions.size())
{
// definitions_join = definitions.join(";")
auto iter_end = definitions.end();
std::copy(definitions.begin(), --iter_end, std::ostream_iterator<std::string>(definitions_join, ";"));
definitions_join << *iter_end;
}
c4s.Definitions.SetModules(definitions_join.str().c_str());
// Check validity of settings
if (!*c4s.Head.Title)
{
DoError(::LoadResStr("IDS_ERR_ENTERTITLE"));
ui.titleEdit->setFocus();
return;
}
if (ItemExists(filename.getData()))
{
DoError(::LoadResStr("IDS_ERR_NEWSCENARIOFILEEXISTS"));
ui.titleEdit->setFocus();
return;
}
// Try to create scenario
if (!CreatePath(filename.getData()))
{
DoError(::LoadResStr("IDS_ERR_CREATESCENARIO"));
ui.titleEdit->setFocus();
return;
}
C4Group grp;
if (!grp.Open(filename.getData(), false) || !SaveScenario(grp))
{
grp.Close();
EraseDirectory(filename.getData());
DoError(::LoadResStr("IDS_ERR_CREATESCENARIO"));
ui.titleEdit->setFocus();
return;
}
// Close dialogue with OK
accept();
}
// Filter for allowed characters in filename
// (Also replace space, because spaces in filenames suk)
static char ReplaceSpecialFilenameChars(char c)
{
const char *special_chars = "\\/:<>|$?\" ";
return strchr(special_chars, c) ? '_' : c;
}
void C4ConsoleQtNewScenarioDlg::TitleChanged(const QString &new_title)
{
if (!has_custom_filename)
{
// Default filename by title
std::string filename = new_title.toStdString();
std::transform(filename.begin(), filename.end(), filename.begin(), ReplaceSpecialFilenameChars);
filename += (C4CFN_ScenarioFiles+1);
ui.filenameEdit->setText(Config.AtUserDataPath(filename.c_str()));
}
}
void C4ConsoleQtNewScenarioDlg::DoError(const char *msg)
{
QMessageBox::critical(this, ::LoadResStr("IDS_ERR_TITLE"), QString(msg));
}
void C4ConsoleQtNewScenarioDlg::BrowsePressed()
{
// Browse for new filename to be used instead of the filename generated from the title
QString new_file;
for (;;)
{
new_file = QFileDialog::getSaveFileName(this, LoadResStr("IDS_CNS_NEWSCENARIO"), Config.General.UserDataPath, QString("%1 (%2)").arg(LoadResStr("IDS_CNS_SCENARIOFILE")).arg(C4CFN_ScenarioFiles), NULL, QFileDialog::DontConfirmOverwrite);
if (!new_file.size()) return;
// Extension must be .ocs
if (!new_file.endsWith(C4CFN_ScenarioFiles + 1)) new_file += (C4CFN_ScenarioFiles + 1);
if (!ItemExists(new_file.toUtf8())) break;
// Overwriting of existing scenarios not supported
QMessageBox::critical(this, ::LoadResStr("IDS_ERR_TITLE"), ::LoadResStr("IDS_ERR_NEWSCENARIOFILEEXISTS"));
}
filename.Copy(new_file.toUtf8());
ui.filenameEdit->setText(filename.getData()); // set from converted filename just in case weird stuff happened in toUtf8
// After setting a new filename, it no longer changes when changing the title
has_custom_filename = true;
}

View File

@ -0,0 +1,105 @@
/*
* OpenClonk, http://www.openclonk.org
*
* Copyright (c) 2001-2009, RedWolf Design GmbH, http://www.clonk.de/
* Copyright (c) 2013, The OpenClonk Team and contributors
*
* Distributed under the terms of the ISC license; see accompanying file
* "COPYING" for details.
*
* "Clonk" is a registered trademark of Matthes Bender, used with permission.
* See accompanying file "TRADEMARK" for details.
*
* To redistribute this file separately, substitute the full license texts
* for the above references.
*/
/* Proplist table view */
#ifndef INC_C4ConsoleQtNewScenario
#define INC_C4ConsoleQtNewScenario
#ifdef WITH_QT_EDITOR
#include <C4Include.h> // needed for automoc
#include <C4ConsoleGUI.h> // for glew.h
#include <C4ConsoleQt.h>
#include <ui_C4ConsoleQtNewScenario.h>
#include <C4Scenario.h>
// Definition file view for selection in New Scenario dialogue
class C4ConsoleQtDefinitionFileListModel : public QAbstractItemModel
{
Q_OBJECT
public:
C4ConsoleQtDefinitionFileListModel();
~C4ConsoleQtDefinitionFileListModel();
std::list<const char *> GetSelectedDefinitions() const;
private:
// Cached def file info: Children loaded on demand (if user expands into tree)
class DefFileInfo
{
DefFileInfo *parent;
C4Group grp;
std::vector< std::unique_ptr<DefFileInfo> > children;
StdCopyStrBuf filename, root_path, full_filename;
bool was_opened, is_root;
bool selected, disabled;
bool OpenGroup();
public:
DefFileInfo(DefFileInfo *parent, const char *filename, const char *root_path);
DefFileInfo(); // init as root
int32_t GetChildCount();
DefFileInfo *GetParent() const { return parent; }
DefFileInfo *GetChild(int32_t index);
int32_t GetChildIndex(const DefFileInfo *child);
const char *GetName() const { return filename.getData(); }
bool IsRoot() const { return is_root; }
void SetSelected(bool to_val);
bool IsSelected() const { return selected; }
void SetDisabled(bool to_val) { disabled = to_val; }
bool IsDisabled() const { return disabled; }
void AddSelectedDefinitions(std::list<const char *> *result) const;
};
mutable DefFileInfo root;
protected:
int rowCount(const QModelIndex & parent = QModelIndex()) const override;
int columnCount(const QModelIndex & parent = QModelIndex()) const override;
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const override;
QModelIndex index(int row, int column, const QModelIndex &parent) const override;
QModelIndex parent(const QModelIndex &index) const override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
bool setData(const QModelIndex& index, const QVariant& value, int role) override;
};
class C4ConsoleQtNewScenarioDlg : public QDialog
{
Q_OBJECT
Ui::NewScenarioDialog ui;
StdCopyStrBuf filename;
C4Scenario c4s;
bool has_custom_filename;
C4ConsoleQtDefinitionFileListModel def_file_model;
public:
C4ConsoleQtNewScenarioDlg(class QMainWindow *parent_window);
const char *GetFilename() const { return filename.getData(); }
private:
bool SaveScenario(class C4Group &grp);
void DoError(const char *msg);
protected slots:
void CreatePressed();
void BrowsePressed();
void TitleChanged(const QString &new_title);
};
#endif // WITH_QT_EDITOR
#endif // INC_C4ConsoleQtNewScenario

View File

@ -0,0 +1,450 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>NewScenarioDialog</class>
<widget class="QDialog" name="NewScenarioDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>713</width>
<height>277</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>323</width>
<height>114</height>
</size>
</property>
<property name="windowTitle">
<string comment="res">IDS_CNS_NEWSCENARIO</string>
</property>
<property name="windowIcon">
<iconset resource="resource.qrc">
<normaloff>:/editor/res/ocs.ico</normaloff>:/editor/res/ocs.ico</iconset>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>6</number>
</property>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string comment="res">IDS_CNS_SCENARIOSETTINGS</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="2" column="3">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="filenameEdit">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="browseButton">
<property name="text">
<string comment="res">IDS_CNS_BROWSE</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="3">
<widget class="QLineEdit" name="titleEdit"/>
</item>
<item row="3" column="1">
<widget class="QLabel" name="label_9">
<property name="text">
<string comment="res">IDS_CNS_MAPSIZE</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_7">
<property name="text">
<string comment="res">IDS_CNS_TITLE</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="3">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>(</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string comment="res">IDS_CNS_WIDTH</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="mapWidthSpinBox">
<property name="minimum">
<number>16</number>
</property>
<property name="maximum">
<number>255</number>
</property>
<property name="value">
<number>50</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>x</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string comment="res">IDS_CNS_HEIGHT</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="mapHeightSpinBox">
<property name="minimum">
<number>16</number>
</property>
<property name="maximum">
<number>255</number>
</property>
<property name="value">
<number>40</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>) x</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_6">
<property name="text">
<string comment="res">IDS_CNS_MAPZOOM</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="mapZoomSpinBox">
<property name="minimum">
<number>4</number>
</property>
<property name="maximum">
<number>24</number>
</property>
<property name="value">
<number>8</number>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="2" column="1">
<widget class="QLabel" name="label_8">
<property name="text">
<string comment="res">IDS_CNS_FILENAME</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLabel" name="label_10">
<property name="text">
<string comment="res">IDS_CNS_DEFINITIONS</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing</set>
</property>
</widget>
</item>
<item row="5" column="3">
<widget class="QTreeView" name="definitionTreeView">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="baseSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="headerHidden">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLabel" name="label_11">
<property name="text">
<string comment="res">IDS_CNS_GAMEMODE</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="4" column="3">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QComboBox" name="gameModeComboBox">
<property name="editable">
<bool>true</bool>
</property>
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
<item>
<property name="text">
<string>Unspecified</string>
</property>
</item>
<item>
<property name="text">
<string>Melee</string>
</property>
</item>
<item>
<property name="text">
<string>Parkour</string>
</property>
</item>
<item>
<property name="text">
<string>Settlement</string>
</property>
</item>
<item>
<property name="text">
<string>Defense</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QHBoxLayout">
<property name="spacing">
<number>6</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<spacer>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>131</width>
<height>31</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="okButton">
<property name="text">
<string comment="res">IDS_CNS_CREATE</string>
</property>
<property name="default">
<bool>true</bool>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="cancelButton">
<property name="text">
<string comment="res">IDS_DLG_CANCEL</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<tabstops>
<tabstop>titleEdit</tabstop>
<tabstop>filenameEdit</tabstop>
<tabstop>browseButton</tabstop>
<tabstop>mapWidthSpinBox</tabstop>
<tabstop>mapHeightSpinBox</tabstop>
<tabstop>mapZoomSpinBox</tabstop>
<tabstop>gameModeComboBox</tabstop>
<tabstop>definitionTreeView</tabstop>
<tabstop>okButton</tabstop>
<tabstop>cancelButton</tabstop>
</tabstops>
<resources>
<include location="resource.qrc"/>
</resources>
<connections>
<connection>
<sender>okButton</sender>
<signal>clicked()</signal>
<receiver>NewScenarioDialog</receiver>
<slot>CreatePressed()</slot>
<hints>
<hint type="sourcelabel">
<x>596</x>
<y>262</y>
</hint>
<hint type="destinationlabel">
<x>96</x>
<y>254</y>
</hint>
</hints>
</connection>
<connection>
<sender>cancelButton</sender>
<signal>clicked()</signal>
<receiver>NewScenarioDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>701</x>
<y>262</y>
</hint>
<hint type="destinationlabel">
<x>179</x>
<y>276</y>
</hint>
</hints>
</connection>
<connection>
<sender>titleEdit</sender>
<signal>textEdited(QString)</signal>
<receiver>NewScenarioDialog</receiver>
<slot>TitleChanged(QString)</slot>
<hints>
<hint type="sourcelabel">
<x>416</x>
<y>43</y>
</hint>
<hint type="destinationlabel">
<x>356</x>
<y>138</y>
</hint>
</hints>
</connection>
<connection>
<sender>browseButton</sender>
<signal>clicked()</signal>
<receiver>NewScenarioDialog</receiver>
<slot>BrowsePressed()</slot>
<hints>
<hint type="sourcelabel">
<x>638</x>
<y>73</y>
</hint>
<hint type="destinationlabel">
<x>356</x>
<y>138</y>
</hint>
</hints>
</connection>
</connections>
<slots>
<slot>CreatePressed()</slot>
<slot>TitleChanged(QString)</slot>
<slot>BrowsePressed()</slot>
</slots>
</ui>

View File

@ -21,6 +21,7 @@
#include <C4ConsoleQtPropListViewer.h>
#include <C4ConsoleQtObjectListViewer.h>
#include <C4ConsoleQtDefinitionListViewer.h>
#include <C4ConsoleQtNewScenario.h>
#include <C4ConsoleQtViewport.h>
#include <C4Console.h>
#include <StdRegistry.h>
@ -261,6 +262,7 @@ void C4ConsoleQtMainWindow::DrawSizeChanged(int newval)
}
// File menu
void C4ConsoleQtMainWindow::FileNew() { ::Console.FileNew(); }
void C4ConsoleQtMainWindow::FileOpen() { ::Console.FileOpen(); }
void C4ConsoleQtMainWindow::FileOpenWithPlayers() { Console.FileOpenWPlrs(); }
void C4ConsoleQtMainWindow::FileRecord() { ::Console.FileRecord(); }
@ -269,6 +271,7 @@ void C4ConsoleQtMainWindow::FileSaveAs() { ::Console.FileSaveAs(false); }
void C4ConsoleQtMainWindow::FileSaveGameAs() { ::Console.FileSaveAs(true); }
void C4ConsoleQtMainWindow::FileClose() { ::Console.FileClose(); }
void C4ConsoleQtMainWindow::FileQuit() { ::Console.FileQuit(); }
// Player menu
void C4ConsoleQtMainWindow::PlayerJoin() { ::Console.PlayerJoin(); }
// Window menu
@ -486,6 +489,7 @@ void C4ConsoleGUIState::UpdateActionStates()
bool has_draw_tools = enabled && landscape_mode != C4LSC_Dynamic;
bool has_exact_draw_tools = enabled && landscape_mode == C4LSC_Exact;
bool is_drawing = has_draw_tools && editcursor_mode == C4CNS_ModeDraw;
ui.actionFileNew->setEnabled(!enabled);
ui.actionPlay->setEnabled(enabled);
ui.actionPause->setEnabled(enabled);
ui.actionCursorGame->setEnabled(enabled);
@ -762,3 +766,13 @@ void C4ConsoleGUIState::OnCreatorCurrentChanged(const QModelIndex & current, con
//if (new_def) ::Console.EditCursor.SetMode(C4CNS_ModeCreateObject); - done by selection change
::Console.EditCursor.SetCreatorDef(new_def); // set or clear def in EditCursor
}
bool C4ConsoleGUIState::CreateNewScenario(StdStrBuf *out_filename)
{
// Show dialogue
std::unique_ptr<C4ConsoleQtNewScenarioDlg> dlg(new C4ConsoleQtNewScenarioDlg(window.get()));
if (!dlg->exec()) return false;
// Dlg said OK! Scenario created
out_filename->Copy(dlg->GetFilename());
return true;
}

View File

@ -95,7 +95,7 @@ public:
void closeEvent(class QCloseEvent *event) override;
public slots:
public slots:
// Toolbar items
void PlayPressed(bool down);
void PausePressed(bool down);
@ -112,6 +112,7 @@ public:
void ExactLandscapePressed(bool down);
void DrawSizeChanged(int newval);
// File menu
void FileNew();
void FileOpen();
void FileOpenWithPlayers();
void FileRecord();
@ -210,6 +211,8 @@ public:
void OnObjectListSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected);
void OnCreatorCurrentChanged(const QModelIndex & current, const QModelIndex & previous);
bool CreateNewScenario(StdStrBuf *out_filename); // show "new scenario" dialogue; return true if new scenario is created
#ifdef USE_WIN32_WINDOWS
bool HandleWin32KeyboardMessage(MSG *msg);
#endif

View File

@ -14,5 +14,6 @@
<file>../res/Play_Trans.png</file>
<file>../res/Rect_Trans.png</file>
<file>../res/Static_Trans.png</file>
<file>../res/ocs.ico</file>
</qresource>
</RCC>

View File

@ -38,6 +38,15 @@ void C4SVal::Set(int32_t std, int32_t rnd, int32_t min, int32_t max)
Std=std; Rnd=rnd; Min=min; Max=max;
}
void C4SVal::SetConstant(int32_t val)
{
// Set to constant value and ensure limits allow it
Std = val;
Rnd = 0;
Min = std::min<int32_t>(Min, val);
Max = std::max<int32_t>(Max, val);
}
int32_t C4SVal::Evaluate()
{
return Clamp(Std+Random(2*Rnd+1)-Rnd,Min,Max);

View File

@ -32,6 +32,7 @@ public:
public:
void Default();
void Set(int32_t std=0, int32_t rnd=0, int32_t min=0, int32_t max=100);
void SetConstant(int32_t val);
int32_t Evaluate();
void CompileFunc(StdCompiler *pComp);
public:

View File

@ -548,6 +548,7 @@ public:
StdStrBuf &operator += (const char *szString) { Append(szString); return *this; }
StdStrBuf operator + (const StdStrBuf &Buf2) const { StdStrBuf Buf = getRef(); Buf.Append(Buf2); return Buf; }
StdStrBuf operator + (const char *szString) const { StdStrBuf Buf = getRef(); Buf.Append(szString); return Buf; }
StdStrBuf operator + (char c) const { StdStrBuf Buf = getRef(); Buf.AppendChar(c); return Buf; }
bool operator == (const StdStrBuf &Buf2) const
{