A bit of work for current SVN support for tilemanager (can read "tiles" block now...
[supertux.git] / tools / tilemanager / Application.cs
index dfc1bed..4a402fe 100644 (file)
@@ -3,7 +3,6 @@ using System.IO;
 using System.Collections;
 using Gtk;
 using Gdk;
-using Gnome;
 using Glade;
 
 public class Application {
@@ -32,16 +31,17 @@ public class Application {
     [Glade.Widget]
     private Gtk.Entry IDEntry;
     [Glade.Widget]
-    private Gnome.AppBar AppBar;
-    [Glade.Widget]
-    private Gtk.VBox MainLayout;
-    [Glade.Widget]
     private Gtk.TreeView TileList;
     [Glade.Widget]
     private Gtk.Combo TileGroupComboBox;
     [Glade.Widget]
     private Gtk.MenuItem AddTileGroupMenu;
 
+    [Glade.Widget]
+    private Gtk.Dialog RemapDialog;
+    [Glade.Widget]
+    private Gtk.SpinButton RD_spinButton;
+
     private string tilesetdir;
     private string tilesetfile;
     private TileSet tileset;
@@ -59,7 +59,7 @@ public class Application {
     private Gdk.Pixbuf pixbuf;
 
     public static int Main(string[] args) {
-        Program kit = new Program("tiler", "0.0.1", Modules.UI, args);
+        Gtk.Application.Init();
 
         Application app = new Application();
 
@@ -67,7 +67,7 @@ public class Application {
         if(args.Length == 1)
             app.LoadTileSet(args[0]);
 
-        kit.Run();
+        Gtk.Application.Run();
         return 0;
     }
 
@@ -75,20 +75,13 @@ public class Application {
         Glade.XML gxml = new Glade.XML(null, "tiler.glade", null, null);
         gxml.Autoconnect(this);
 
-        if(MainWindow == null || DrawingArea == null || AppBar == null)
+        if(MainWindow == null || DrawingArea == null || RemapDialog == null)
             throw new Exception("some widgets not found");
 
         DrawingArea.AddEvents((int) Gdk.EventMask.ButtonPressMask);
         DrawingArea.AddEvents((int) Gdk.EventMask.ButtonReleaseMask);
         DrawingArea.AddEvents((int) Gdk.EventMask.ButtonMotionMask);
 
-        // libglade missed interactivity property :-/
-        MainLayout.Remove(AppBar);
-        AppBar = new AppBar(true, true, PreferencesType.Always);
-        AppBar.UserResponse += new EventHandler(OnAppBarUserResponse);
-        MainLayout.PackStart(AppBar, false, false, 0);
-        AppBar.Show();
-
         MainWindow.Show();
     }
 
@@ -98,9 +91,19 @@ public class Application {
        fileChooser.AddButton(Gtk.Stock.Cancel, Gtk.ResponseType.Cancel);
        fileChooser.AddButton(Gtk.Stock.Ok, Gtk.ResponseType.Ok);
        fileChooser.DefaultResponse = Gtk.ResponseType.Ok;
-       Gtk.FileFilter filter = new Gtk.FileFilter();
+       Gtk.FileFilter filter;
+       filter = new Gtk.FileFilter();
        filter.Name = "Supertux tilesets";
        filter.AddPattern("*.strf");
+       filter.AddPattern("*.stgt");
+       fileChooser.AddFilter( filter );
+       filter = new Gtk.FileFilter();
+       filter.Name = "Supertux 0.1.x tilesets";
+       filter.AddPattern("*.stgt");
+       fileChooser.AddFilter( filter );
+       filter = new Gtk.FileFilter();
+       filter.Name = "Supertux 0.3.x tilesets";
+       filter.AddPattern("*.strf");
        fileChooser.AddFilter( filter );
        Gtk.FileFilter all = new Gtk.FileFilter();
        all.Name = "All Files";
@@ -249,55 +252,95 @@ public class Application {
     }
 
     protected void OnAbout(object o, EventArgs e) {
-       Console.WriteLine(
-               "There is no about dialog yet...");
+//             string[] authors = new string[]{
+//                     "<autors?>",
+//             };
+
+               Gtk.AboutDialog dialog = new Gtk.AboutDialog();
+//             dialog.Icon = <icon>;
+               dialog.ProgramName = "SuperTux Tiler";
+               dialog.Version = "0.0.3";
+               dialog.Comments = "A tileset editor for SuperTux 0.1.x";
+//             dialog.Authors = authors;
+               dialog.Copyright = "Copyright (c) 2006 SuperTux Devel Team";
+               dialog.License =
+                       "This program is free software; you can redistribute it and/or modify" + Environment.NewLine +
+                       "it under the terms of the GNU General Public License as published by" + Environment.NewLine +
+                       "the Free Software Foundation; either version 2 of the License, or" + Environment.NewLine +
+                       "(at your option) any later version." + Environment.NewLine +
+                       Environment.NewLine +
+                       "This program is distributed in the hope that it will be useful," + Environment.NewLine +
+                       "but WITHOUT ANY WARRANTY; without even the implied warranty of" + Environment.NewLine +
+                       "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the" + Environment.NewLine +
+                       "GNU General Public License for more details." + Environment.NewLine +
+                       Environment.NewLine +
+                       "You should have received a copy of the GNU General Public License" + Environment.NewLine +
+                       "along with this program; if not, write to the Free Software Foundation, Inc.," + Environment.NewLine +
+                       "59 Temple Place, Suite 330, Boston, MA 02111-1307 USA" + Environment.NewLine;
+               dialog.Website = "http://supertux.lethargik.org/";
+               dialog.WebsiteLabel = "SuperTux on the Web";
+               dialog.Run();
+               dialog.Destroy();
     }
 
     protected void OnRemapTiles(object o, EventArgs e) {
-        AppBar.SetPrompt("Start-ID:", true);
-    }
-
-    protected void OnCreateTileGroup(object o, EventArgs e) {
+       if(Tiles == null)
+               return;
+       RemapDialog.Show();
     }
 
-    protected void OnRenameTileGroup(object o, EventArgs e) {
+    protected void OnRemapDialogCancel(object o, EventArgs e) {
+       RemapDialog.Hide();
     }
 
-    protected void OnAppBarUserResponse(object o, EventArgs e) {
+    protected void OnRemapDialogApply(object o, EventArgs e) {
+       RemapDialog.Hide();
         try {
-            if(AppBar.Response == null || AppBar.Response == ""
-                    || Tiles == null)
-                return;
 
             // remap tiles
             int id;
             try {
-                id = Int32.Parse(AppBar.Response);
+                id = RD_spinButton.ValueAsInt;
             } catch(Exception exception) {
                 ShowException(exception);
                 return;
             }
-            foreach(Tile tile in Selection) {
-                if(tile.ID == -1)
-                    continue;
-
-                int oldid = tile.ID;
-                tile.ID = id++;
-                // remap in all tilegroups...
-                foreach(TileGroup tilegroup in tileset.TileGroups) {
-                    int idx = tilegroup.Tiles.IndexOf(oldid);
-                    if(idx >= 0) {
-                        tilegroup.Tiles[idx] = tile.ID;
-                    }
-                }
-            }
-            FillTileList();
-            SelectionChanged();
+            RemapTiles(id);
         } finally {
-            AppBar.ClearPrompt();
+            RD_spinButton.Value = 1;
         }
     }
 
+    protected void OnCreateTileGroup(object o, EventArgs e) {
+    }
+
+    protected void OnRenameTileGroup(object o, EventArgs e) {
+    }
+
+    protected void RemapTiles(int startID) {
+       if(Tiles == null)
+               return;
+
+       // remap tiles
+       int id = startID;
+       foreach(Tile tile in Selection) {
+               if(tile.ID == -1)
+                       continue;
+
+               int oldid = tile.ID;
+               tile.ID = id++;
+               // remap in all tilegroups...
+               foreach(TileGroup tilegroup in tileset.TileGroups) {
+                       int idx = tilegroup.Tiles.IndexOf(oldid);
+                       if(idx >= 0) {
+                               tilegroup.Tiles[idx] = tile.ID;
+                       }
+               }
+       }
+       FillTileList();
+       SelectionChanged();
+    }
+
     protected void OnDrawingAreaExpose(object o, ExposeEventArgs e) {
         if(pixbuf == null)
             return;
@@ -353,15 +396,15 @@ public class Application {
             return;
         foreach(Tile tile in Selection) {
             if(sender == SolidCheckButton)
-                tile.Solid = SolidCheckButton.Active;
+                tile.SetAttribute(Attribute.SOLID, SolidCheckButton.Active);
             if(sender == UniSolidCheckButton)
-                tile.UniSolid = UniSolidCheckButton.Active;
+                tile.SetAttribute(Attribute.UNISOLID, UniSolidCheckButton.Active);
             if(sender == IceCheckButton)
-                tile.Ice = IceCheckButton.Active;
+                tile.SetAttribute(Attribute.ICE, IceCheckButton.Active);
             if(sender == WaterCheckButton)
-                tile.Water = WaterCheckButton.Active;
+                tile.SetAttribute(Attribute.WATER, WaterCheckButton.Active);
             if(sender == SlopeCheckButton)
-                tile.Slope = SlopeCheckButton.Active;
+                tile.SetAttribute(Attribute.SLOPE, SlopeCheckButton.Active);
             if(sender == HiddenCheckButton)
                 tile.Hidden = HiddenCheckButton.Active;
             if(sender == DontUseCheckButton)
@@ -409,11 +452,11 @@ public class Application {
         string nextimage = "";
         foreach(Tile tile in Selection) {
             if(first) {
-                SolidCheckButton.Active = tile.Solid;
-                UniSolidCheckButton.Active = tile.UniSolid;
-                IceCheckButton.Active = tile.Ice;
-                WaterCheckButton.Active = tile.Water;
-                SlopeCheckButton.Active = tile.Slope;
+                SolidCheckButton.Active = tile.HasAttribute(Attribute.SOLID);
+                UniSolidCheckButton.Active = tile.HasAttribute(Attribute.UNISOLID);
+                IceCheckButton.Active = tile.HasAttribute(Attribute.ICE);
+                WaterCheckButton.Active = tile.HasAttribute(Attribute.WATER);
+                SlopeCheckButton.Active = tile.HasAttribute(Attribute.SLOPE);
                 HiddenCheckButton.Active = tile.Hidden;
                 DontUseCheckButton.Active = tile.ID == -1;
                 DataEntry.Text = tile.Data.ToString();