Changeset 2926 for libpipi


Ignore:
Timestamp:
Oct 11, 2008, 11:56:21 PM (12 years ago)
Author:
Sam Hocevar
Message:

ThePimp?: make image loading more robust.

Location:
libpipi/trunk
Files:
1 added
11 edited
1 copied

Legend:

Unmodified
Added
Removed
  • libpipi/trunk/ThePimp/ErrorWindow.cs

    r2925 r2926  
    1414
    1515using System;
    16 using Gtk;
    1716
    1817namespace ThePimp
    1918{
    20     class ThePimp
     19    public partial class ErrorWindow : Gtk.Dialog
    2120    {
    22         public static void Main (string[] args)
     21        public ErrorWindow(string message)
    2322        {
    24             Application.Init ();
    25             MainWindow win = new MainWindow ();
    26             win.Show ();
    27             Application.Run ();
     23            this.Build();
     24            this.message.Text = message;
     25            this.Run();
     26        }
     27
     28        protected virtual void OnButtonOkClicked (object sender, System.EventArgs e)
     29        {
     30            this.Destroy();
    2831        }
    2932    }
  • libpipi/trunk/ThePimp/Main.cs

    r2872 r2926  
    1515using System;
    1616using Gtk;
     17using Pipi;
    1718
    1819namespace ThePimp
     
    2223        public static void Main (string[] args)
    2324        {
     25            Libpipi.getVersion();
     26
    2427            Application.Init ();
    2528            MainWindow win = new MainWindow ();
  • libpipi/trunk/ThePimp/MainWindow.cs

    r2890 r2926  
    2525        {
    2626            Build ();
    27             Title += " v" + Libpipi.getVersion();
    2827            vpaned1.Add1(new ToolBox());
    2928        }
     
    3736        protected virtual void OnOpenActionActivated (object sender, System.EventArgs e)
    3837        {
    39             OpenFile open = new OpenFile();
    40             Pipi.Picture p = open.Load();
    41             open.Destroy();
    42             if(p != null)
     38            OpenFile dialog = new OpenFile();
     39
     40            string s = dialog.GetChoice();
     41            dialog.Destroy();
     42            if(s == null)
     43                return;
     44
     45            Pipi.Picture p = Pipi.Picture.Load(s);
     46            if(p == null)
    4347            {
    44                 while(notebook1.NPages > 0)
     48                new ErrorWindow("Could not open \"" + s + "\". Check the file format.");
     49                return;
     50            }
     51
     52            while(notebook1.NPages > 0)
    4553                    notebook1.RemovePage(0);
    46                 int n = notebook1.AppendPage(new PictureView(p),
    47                                              new Label(p.FileName));
    48                 notebook1.Page = n;
    49             }
     54            int n = notebook1.AppendPage(new PictureView(p),
     55                                         new Label(p.FileName));
     56            notebook1.Page = n;
    5057        }
    5158
     
    5360        {
    5461            NewFile dialog = new NewFile();
    55             Pipi.Picture p = dialog.New();
     62
     63            string s = dialog.GetChoice();
    5664            dialog.Destroy();
    57             if(p != null)
     65            if(s == null)
     66                return;
     67
     68            Pipi.Picture p = Pipi.Picture.Load(s);
     69            if(p == null)
    5870            {
    59                 while(notebook1.NPages > 0)
    60                     notebook1.RemovePage(0);
    61                 int n = notebook1.AppendPage(new PictureView(p),
    62                                              new Label(p.FileName));
    63                 notebook1.Page = n;
     71                new ErrorWindow("Could not create image.");
     72                return;
    6473            }
     74
     75            while(notebook1.NPages > 0)
     76                notebook1.RemovePage(0);
     77            int n = notebook1.AppendPage(new PictureView(p),
     78                                         new Label(p.FileName));
     79            notebook1.Page = n;
    6580        }
    6681
  • libpipi/trunk/ThePimp/Makefile.am

    r2915 r2926  
    55        Main.cs \
    66        AboutWindow.cs \
     7        ErrorWindow.cs \
    78        MainWindow.cs \
    89        OpenFile.cs \
     
    1314        gtk-gui/generated.cs \
    1415        gtk-gui/ThePimp.AboutWindow.cs \
     16        gtk-gui/ThePimp.ErrorWindow.cs \
    1517        gtk-gui/ThePimp.MainWindow.cs \
    1618        gtk-gui/ThePimp.OpenFile.cs \
  • libpipi/trunk/ThePimp/NewFile.cs

    r2892 r2926  
    2525        }
    2626
    27         public Pipi.Picture New()
     27        public string GetChoice()
    2828        {
    2929            ResponseType rsp = (ResponseType)Run();
     
    4343            }
    4444
    45             Pipi.Picture p = new Pipi.Picture(type + ":" + entry1.Text + "x" + entry2.Text);
    46             return p;
     45            return type + ":" + entry1.Text + "x" + entry2.Text;
    4746        }
    4847    }
  • libpipi/trunk/ThePimp/OpenFile.cs

    r2872 r2926  
    2424            this.Build();
    2525        }
    26        
    27         public Pipi.Picture Load()
     26
     27        public string GetChoice()
    2828        {
    2929            ResponseType rsp = (ResponseType)Run();
     
    3131            if(rsp != ResponseType.Ok)
    3232                return null;
    33             Pipi.Picture p = new Pipi.Picture(filechooserwidget1.Filename);
    34             return p;
     33
     34            return filechooserwidget1.Filename;
    3535        }
    3636    }
  • libpipi/trunk/ThePimp/ThePimp.csproj

    r2919 r2926  
    1515    <DebugType>full</DebugType>
    1616    <Optimize>false</Optimize>
    17     <OutputPath>.\bin</OutputPath>
     17    <OutputPath>bin\</OutputPath>
    1818    <DefineConstants>DEBUG;TRACE</DefineConstants>
    1919    <ErrorReport>prompt</ErrorReport>
     
    2828    <DebugType>pdbonly</DebugType>
    2929    <Optimize>true</Optimize>
    30     <OutputPath>.\bin</OutputPath>
     30    <OutputPath>bin\</OutputPath>
    3131    <DefineConstants>TRACE</DefineConstants>
    3232    <ErrorReport>prompt</ErrorReport>
     
    9393    <Compile Include="gtk-gui\ThePimp.SaveFile.cs" />
    9494    <Compile Include="gtk-gui\ThePimp.ToolBox.cs" />
     95    <Compile Include="ErrorWindow.cs" />
     96    <Compile Include="gtk-gui\ThePimp.ErrorWindow.cs" />
    9597  </ItemGroup>
    9698  <ItemGroup>
     
    101103  </ItemGroup>
    102104  <ItemGroup>
     105    <EmbeddedResource Include="gtk-gui\gui.stetic" />
    103106    <EmbeddedResource Include="images\about.png" />
    104107    <EmbeddedResource Include="gtk-gui\objects.xml" />
    105     <EmbeddedResource Include="gtk-gui\gui.stetic" />
    106108  </ItemGroup>
    107109  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
     
    117119  <Target Name="AfterBuild">
    118120  </Target>
     121  <GtkDesignInfo gtkVersion="2.12.1">
     122    <ExportedWidgets>
     123      <Widget>ThePimp.PictureView</Widget>
     124      <Widget>ThePimp.ToolBox</Widget>
     125    </ExportedWidgets>
     126  </GtkDesignInfo>
    119127</Project>
  • libpipi/trunk/ThePimp/ThePimp.mdp

    r2890 r2926  
    4444    <File name="NewFile.cs" subtype="Code" buildaction="Compile" />
    4545    <File name="gtk-gui/ThePimp.NewFile.cs" subtype="Code" buildaction="Compile" />
     46    <File name="gtk-gui/ThePimp.ErrorWindow.cs" subtype="Code" buildaction="Compile" />
    4647  </Contents>
    4748  <References>
  • libpipi/trunk/ThePimp/gtk-gui/gui.stetic

    r2891 r2926  
    798798                    <property name="IsEditable">True</property>
    799799                    <property name="WidthChars">6</property>
     800                    <property name="InvisibleChar">●</property>
    800801                    <property name="Xalign">1</property>
    801802                  </widget>
     
    821822                    <property name="IsEditable">True</property>
    822823                    <property name="WidthChars">6</property>
     824                    <property name="InvisibleChar">●</property>
    823825                    <property name="Xalign">1</property>
    824826                  </widget>
     
    978980    </child>
    979981  </widget>
     982  <widget class="Gtk.Dialog" id="ThePimp.ErrorWindow" design-size="229 133">
     983    <property name="MemberName" />
     984    <property name="Title" translatable="yes">Error</property>
     985    <property name="Icon">stock:gtk-dialog-error Menu</property>
     986    <property name="WindowPosition">CenterOnParent</property>
     987    <property name="Buttons">1</property>
     988    <property name="HelpButton">False</property>
     989    <property name="HasSeparator">False</property>
     990    <child internal-child="VBox">
     991      <widget class="Gtk.VBox" id="dialog1_VBox">
     992        <property name="MemberName" />
     993        <property name="BorderWidth">2</property>
     994        <child>
     995          <widget class="Gtk.HBox" id="hbox1">
     996            <property name="MemberName" />
     997            <property name="Spacing">20</property>
     998            <property name="BorderWidth">10</property>
     999            <child>
     1000              <widget class="Gtk.Image" id="image1">
     1001                <property name="MemberName" />
     1002                <property name="Pixbuf">stock:gtk-dialog-error Dialog</property>
     1003              </widget>
     1004              <packing>
     1005                <property name="Position">0</property>
     1006                <property name="AutoSize">True</property>
     1007                <property name="Expand">False</property>
     1008                <property name="Fill">False</property>
     1009              </packing>
     1010            </child>
     1011            <child>
     1012              <widget class="Gtk.Label" id="message">
     1013                <property name="MemberName" />
     1014                <property name="LabelProp" translatable="yes">Error!</property>
     1015                <property name="Wrap">True</property>
     1016              </widget>
     1017              <packing>
     1018                <property name="Position">1</property>
     1019                <property name="AutoSize">False</property>
     1020                <property name="Expand">False</property>
     1021              </packing>
     1022            </child>
     1023          </widget>
     1024          <packing>
     1025            <property name="Position">0</property>
     1026            <property name="AutoSize">False</property>
     1027            <property name="Fill">False</property>
     1028          </packing>
     1029        </child>
     1030      </widget>
     1031    </child>
     1032    <child internal-child="ActionArea">
     1033      <widget class="Gtk.HButtonBox" id="dialog1_ActionArea">
     1034        <property name="MemberName" />
     1035        <property name="Spacing">6</property>
     1036        <property name="BorderWidth">5</property>
     1037        <property name="Size">1</property>
     1038        <property name="LayoutStyle">End</property>
     1039        <child>
     1040          <widget class="Gtk.Button" id="buttonOk">
     1041            <property name="MemberName" />
     1042            <property name="CanDefault">True</property>
     1043            <property name="CanFocus">True</property>
     1044            <property name="UseStock">True</property>
     1045            <property name="Type">StockItem</property>
     1046            <property name="StockId">gtk-ok</property>
     1047            <property name="ResponseId">-5</property>
     1048            <property name="label">gtk-ok</property>
     1049            <signal name="Clicked" handler="OnButtonCloseClicked" />
     1050          </widget>
     1051          <packing>
     1052            <property name="Expand">False</property>
     1053            <property name="Fill">False</property>
     1054          </packing>
     1055        </child>
     1056      </widget>
     1057    </child>
     1058  </widget>
    9801059</stetic-interface>
  • libpipi/trunk/libpipi.sln

    r2918 r2926  
    1414Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThePimp", "ThePimp\ThePimp.csproj", "{D681A55E-B8E2-4741-87E6-49500109D6E0}"
    1515EndProject
    16 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpipi", "pipi\libpipi.vcproj", "{48A34C3A-1E36-49B7-92C4-E982FDCB90C0}"
    17 EndProject
    1816Global
    1917        GlobalSection(SolutionConfigurationPlatforms) = preSolution
    2018                Debug|Any CPU = Debug|Any CPU
     19                Release|Any CPU = Release|Any CPU
    2120                Debug|Mixed Platforms = Debug|Mixed Platforms
    2221                Debug|Win32 = Debug|Win32
    23                 Release|Any CPU = Release|Any CPU
    2422                Release|Mixed Platforms = Release|Mixed Platforms
    2523                Release|Win32 = Release|Win32
     
    3634                {2A062F77-ED16-4B74-B7B7-5ED93FAF300A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
    3735                {2A062F77-ED16-4B74-B7B7-5ED93FAF300A}.Release|Win32.ActiveCfg = Release|Any CPU
     36                {D681A55E-B8E2-4741-87E6-49500109D6E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     37                {D681A55E-B8E2-4741-87E6-49500109D6E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
     38                {D681A55E-B8E2-4741-87E6-49500109D6E0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
     39                {D681A55E-B8E2-4741-87E6-49500109D6E0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
     40                {D681A55E-B8E2-4741-87E6-49500109D6E0}.Debug|Win32.ActiveCfg = Debug|Any CPU
     41                {D681A55E-B8E2-4741-87E6-49500109D6E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
     42                {D681A55E-B8E2-4741-87E6-49500109D6E0}.Release|Any CPU.Build.0 = Release|Any CPU
     43                {D681A55E-B8E2-4741-87E6-49500109D6E0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
     44                {D681A55E-B8E2-4741-87E6-49500109D6E0}.Release|Mixed Platforms.Build.0 = Release|Any CPU
     45                {D681A55E-B8E2-4741-87E6-49500109D6E0}.Release|Win32.ActiveCfg = Release|Any CPU
    3846                {FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    3947                {FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
     
    4654                {FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Release|Mixed Platforms.Build.0 = Release|Any CPU
    4755                {FD11AF71-DCBE-4861-9DC6-EE4C6FD951C0}.Release|Win32.ActiveCfg = Release|Any CPU
    48                 {D681A55E-B8E2-4741-87E6-49500109D6E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    49                 {D681A55E-B8E2-4741-87E6-49500109D6E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
    50                 {D681A55E-B8E2-4741-87E6-49500109D6E0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
    51                 {D681A55E-B8E2-4741-87E6-49500109D6E0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
    52                 {D681A55E-B8E2-4741-87E6-49500109D6E0}.Debug|Win32.ActiveCfg = Debug|Any CPU
    53                 {D681A55E-B8E2-4741-87E6-49500109D6E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
    54                 {D681A55E-B8E2-4741-87E6-49500109D6E0}.Release|Any CPU.Build.0 = Release|Any CPU
    55                 {D681A55E-B8E2-4741-87E6-49500109D6E0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
    56                 {D681A55E-B8E2-4741-87E6-49500109D6E0}.Release|Mixed Platforms.Build.0 = Release|Any CPU
    57                 {D681A55E-B8E2-4741-87E6-49500109D6E0}.Release|Win32.ActiveCfg = Release|Any CPU
    5856                {48A34C3A-1E36-49B7-92C4-E982FDCB90C0}.Debug|Any CPU.ActiveCfg = Debug|Win32
    5957                {48A34C3A-1E36-49B7-92C4-E982FDCB90C0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
     
    6765                {48A34C3A-1E36-49B7-92C4-E982FDCB90C0}.Release|Win32.Build.0 = Release|Win32
    6866        EndGlobalSection
     67        GlobalSection(NestedProjects) = preSolution
     68        EndGlobalSection
    6969        GlobalSection(SolutionProperties) = preSolution
    7070                HideSolutionNode = FALSE
  • libpipi/trunk/pipi-sharp/Picture.cs

    r2874 r2926  
    2222    {
    2323        private IntPtr _picture;
     24        private string _filename;
    2425
    25         public readonly string FileName;
     26        public string FileName
     27        {
     28            get { return _filename; }
     29        }
    2630
    27         [DllImport("libpipi.dll", CallingConvention=CallingConvention.Cdecl),
    28          SuppressUnmanagedCodeSecurity]
    29         private static extern IntPtr pipi_load(string s);
    30         public Picture(string s)
     31        private Picture(IntPtr p)
    3132        {
    32             _picture = pipi_load(s);
    33             FileName = s;
     33            _picture = p;
    3434        }
    3535
     
    4040        {
    4141            pipi_free(_picture);
     42        }
     43
     44        [DllImport("libpipi.dll", CallingConvention=CallingConvention.Cdecl),
     45         SuppressUnmanagedCodeSecurity]
     46        private static extern IntPtr pipi_load(string s);
     47        public static Picture Load(string s)
     48        {
     49            IntPtr p = pipi_load(s);
     50            if(p == IntPtr.Zero)
     51                return null;
     52
     53            Picture ret = new Picture(p);
     54            ret._filename = s;
     55            return ret;
    4256        }
    4357
  • libpipi/trunk/pipi-sharp/test.cs

    r2869 r2926  
    2525        Console.WriteLine("(c) 2008 Sam Hocevar <sam@zoy.org>");
    2626
    27         Pipi.Picture p = new Pipi.Picture("random:640x480");
     27        Pipi.Picture p = Pipi.Picture.Load("random:640x480");
    2828        Console.WriteLine("Test picture size: {0}x{1}", p.Width, p.Height);
    2929    }
Note: See TracChangeset for help on using the changeset viewer.