| .. | .. | 
|---|
| 298 | 298 |   | 
|---|
| 299 | 299 |          if (copy.versions == null) | 
|---|
| 300 | 300 |          { | 
|---|
| 301 |  | -            copy.versions = new byte[100][];  | 
|---|
 | 301 | +            copy.versions = new Object3D[100];  | 
|---|
| 302 | 302 |              copy.versionindex = -1; | 
|---|
| 303 | 303 |          } | 
|---|
| 304 | 304 |           | 
|---|
| .. | .. | 
|---|
| 317 | 317 |   | 
|---|
| 318 | 318 |          if (copy.versions == null) | 
|---|
| 319 | 319 |          { | 
|---|
| 320 |  | -            copy.versions = new byte[100][];  | 
|---|
 | 320 | +            copy.versions = new Object3D[100];  | 
|---|
| 321 | 321 |              copy.versionindex = -1; | 
|---|
| 322 | 322 |          } | 
|---|
| 323 | 323 |           | 
|---|
| .. | .. | 
|---|
| 850 | 850 |              frame.validate(); | 
|---|
| 851 | 851 |          } | 
|---|
| 852 | 852 |   | 
|---|
| 853 |  | -    private byte[] CompressCopy()  | 
|---|
 | 853 | +    private Object3D CompressCopy()  | 
|---|
| 854 | 854 |      { | 
|---|
| 855 | 855 |          boolean temp = CameraPane.SWITCH; | 
|---|
| 856 | 856 |          CameraPane.SWITCH = false; | 
|---|
| .. | .. | 
|---|
| 858 | 858 |          copy.ExtractBigData(versiontable); | 
|---|
| 859 | 859 |          // if (copy == client) | 
|---|
| 860 | 860 |           | 
|---|
| 861 |  | -        byte[] versions[] = copy.versions;  | 
|---|
 | 861 | +        Object3D versions[] = copy.versions;  | 
|---|
| 862 | 862 |          copy.versions = null; | 
|---|
| 863 | 863 |           | 
|---|
| 864 |  | -        byte[] compress = Compress(copy);  | 
|---|
 | 864 | +        //byte[] compress = Compress(copy);  | 
|---|
 | 865 | +        Object3D compress = (Object3D)Grafreed.clone(copy);  | 
|---|
| 865 | 866 |           | 
|---|
| 866 | 867 |          copy.versions = versions; | 
|---|
| 867 | 868 |           | 
|---|
| .. | .. | 
|---|
| 3565 | 3566 |       | 
|---|
| 3566 | 3567 |      static public byte[] Compress(Object3D o) | 
|---|
| 3567 | 3568 |      { | 
|---|
 | 3569 | +        // Slower to actually compress.  | 
|---|
| 3568 | 3570 |          try | 
|---|
| 3569 | 3571 |          { | 
|---|
| 3570 | 3572 |              ByteArrayOutputStream baos = new ByteArrayOutputStream(); | 
|---|
| .. | .. | 
|---|
| 3692 | 3694 |           | 
|---|
| 3693 | 3695 |          cRadio tab = GetCurrentTab(); | 
|---|
| 3694 | 3696 |           | 
|---|
| 3695 |  | -        byte[] compress = CompressCopy(); // Saved version. No need for "Replace".  | 
|---|
 | 3697 | +        Object3D compress = CompressCopy(); // Saved version. No need for "Replace".  | 
|---|
| 3696 | 3698 |           | 
|---|
| 3697 | 3699 |          boolean thesame = false; | 
|---|
| 3698 | 3700 |           | 
|---|
| 3699 |  | -        // Quick heuristic using length. Works only when stream is compressed.  | 
|---|
| 3700 |  | -        if (copy.versionindex > 0 && copy.versions[copy.versionindex-1] != null && Equal(compress, copy.versions[copy.versionindex-1]))  | 
|---|
| 3701 |  | -        {  | 
|---|
| 3702 |  | -            thesame = true;  | 
|---|
| 3703 |  | -        }  | 
|---|
 | 3701 | +//        if (copy.versionindex > 0 && copy.versions[copy.versionindex-1] != null && Equal(compress, copy.versions[copy.versionindex-1]))  | 
|---|
 | 3702 | +//        {  | 
|---|
 | 3703 | +//            thesame = true;  | 
|---|
 | 3704 | +//        }  | 
|---|
| 3704 | 3705 |           | 
|---|
| 3705 | 3706 |          //EditorFrame.m_MainFrame.requestFocusInWindow(); | 
|---|
| 3706 | 3707 |          if (!thesame) | 
|---|
| .. | .. | 
|---|
| 3860 | 3861 |   | 
|---|
| 3861 | 3862 |          copy.versionindex -= 1; | 
|---|
| 3862 | 3863 |   | 
|---|
| 3863 |  | -        CopyChanged((Object3D)Uncompress(copy.versions[copy.versionindex]));  | 
|---|
 | 3864 | +        CopyChanged((Object3D)copy.versions[copy.versionindex]);  | 
|---|
| 3864 | 3865 |           | 
|---|
| 3865 | 3866 |          return true; | 
|---|
| 3866 | 3867 |      } | 
|---|
| .. | .. | 
|---|
| 3877 | 3878 |              return false; | 
|---|
| 3878 | 3879 |          } | 
|---|
| 3879 | 3880 |   | 
|---|
| 3880 |  | -        CopyChanged((Object3D)Uncompress(copy.versions[copy.versionindex]));  | 
|---|
 | 3881 | +        //CopyChanged((Object3D)Uncompress(copy.versions[copy.versionindex]));  | 
|---|
 | 3882 | +        CopyChanged(copy.versions[copy.versionindex]);  | 
|---|
| 3881 | 3883 |           | 
|---|
| 3882 | 3884 |          return true; | 
|---|
| 3883 | 3885 |      } | 
|---|
| .. | .. | 
|---|
| 3914 | 3916 |   | 
|---|
| 3915 | 3917 |          copy.versionindex += 1; | 
|---|
| 3916 | 3918 |   | 
|---|
| 3917 |  | -        CopyChanged((Object3D)Uncompress(copy.versions[copy.versionindex]));  | 
|---|
 | 3919 | +        CopyChanged(copy.versions[copy.versionindex]);  | 
|---|
| 3918 | 3920 |           | 
|---|
| 3919 | 3921 |          //if (!tab.user[tab.versionindex]) | 
|---|
| 3920 | 3922 |          //    tab.graphs[tab.versionindex] = null; | 
|---|
| .. | .. | 
|---|
| 4227 | 4229 |               | 
|---|
| 4228 | 4230 |              if (copy.versions[version] != null) | 
|---|
| 4229 | 4231 |              { | 
|---|
| 4230 |  | -                CopyChanged((Object3D)Uncompress(copy.versions[copy.versionindex = version]));  | 
|---|
 | 4232 | +                CopyChanged(copy.versions[copy.versionindex = version]);  | 
|---|
| 4231 | 4233 |              } | 
|---|
| 4232 | 4234 |               | 
|---|
| 4233 | 4235 |              return; | 
|---|
| .. | .. | 
|---|
| 4962 | 4964 |               | 
|---|
| 4963 | 4965 |          if (copy.versions == null) | 
|---|
| 4964 | 4966 |          { | 
|---|
| 4965 |  | -            copy.versions = new byte[100][];  | 
|---|
 | 4967 | +            copy.versions = new Object3D[100];  | 
|---|
| 4966 | 4968 |              copy.versionindex = -1; | 
|---|
| 4967 | 4969 |          } | 
|---|
| 4968 | 4970 |           | 
|---|