]> git.saurik.com Git - wxWidgets.git/blobdiff - user/wxFile/FMJobs.cpp
warning msgs
[wxWidgets.git] / user / wxFile / FMJobs.cpp
diff --git a/user/wxFile/FMJobs.cpp b/user/wxFile/FMJobs.cpp
new file mode 100644 (file)
index 0000000..b6a5ce6
--- /dev/null
@@ -0,0 +1,326 @@
+/*
+ * Program: FMJobs.cpp
+ * 
+ * Author: Robert Roebling
+ *
+ * Copyright: (C) 1997, GNU (Robert Roebling)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifdef __GNUG__
+#pragma implementation "FMJobs.h"
+#endif
+
+#include "FMJobs.h"
+#include "wx/utils.h"
+#include "wx/filefn.h"
+#include "wx/msgdlg.h"
+
+//-----------------------------------------------------------------------------
+// wxCopyStatusDia
+//-----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxCopyStatusDia,wxDialog);
+
+const  ID_CANCEL_COPY = 1000;
+
+BEGIN_EVENT_TABLE(wxCopyStatusDia,wxDialog)
+  EVT_BUTTON  (ID_CANCEL_COPY,   wxCopyStatusDia::OnCommand)
+END_EVENT_TABLE()
+
+wxCopyStatusDia::wxCopyStatusDia( wxFrame *parent, const wxString &dest, wxArrayString *files ) :
+  wxDialog( parent, -1, "FileMaker copy job control", wxPoint(180,180), wxSize(500,200) )
+{
+  int w = 0;
+  int h = 0;
+  GetSize( &w, &h );
+
+  m_dest = dest;
+  m_files = files;
+  m_stop = FALSE;
+
+  (void)new wxStaticText( this, -1, "Copying files", wxPoint(10,10) );
+  (void)new wxStaticText( this, -1, "from:", wxPoint(30,40) );
+  m_sourceMsg = new wxStaticText( this, -1, "", wxPoint(80,40), wxSize(200,-1) );
+  (void)new wxStaticText( this, -1, "    to:", wxPoint(30,70) );
+  m_destMsg = new wxStaticText( this, -1, "", wxPoint(80,70), wxSize(200,-1) );
+  (void)new wxStaticText( this, -1, "    Kb copied:", wxPoint(30,100) );
+  m_statusMsg = new wxStaticText( this, -1, "0", wxPoint(120,100), wxSize(100,-1) );
+
+  m_cancelButton = new wxButton( this, ID_CANCEL_COPY, "Return", wxPoint(w-130,h-50), wxSize(85,30) );
+  
+  Centre( wxVERTICAL | wxHORIZONTAL );
+
+  m_timer = new wxCopyTimer( this );
+  m_timer->Start( 300, TRUE );
+  
+  Show( TRUE );
+};
+
+wxCopyStatusDia::~wxCopyStatusDia()
+{
+  delete m_timer;
+};
+
+void wxCopyStatusDia::OnCommand( wxCommandEvent &WXUNUSED(event) )
+{
+  if (m_stop) EndModal(wxID_CANCEL);
+  m_stop = TRUE;
+};
+
+void wxCopyStatusDia::DoCopy(void)
+{
+  wxYield();
+  
+  if (!wxDirExists(m_dest))
+  {
+    wxMessageBox( "Target is not a directory or it doesn`t exist. Can`t copy.", "FileMaker" );
+    return;
+  };
+  
+  for (uint i = 0; i < m_files->Count(); i++)
+  {
+    wxString src = (*m_files)[i];
+    if (wxDirExists( src ))
+      CopyDir( src, m_dest );
+    else
+      CopyFile( src, m_dest );
+    if (m_stop) return;
+  };
+  m_stop = TRUE;
+};
+
+void wxCopyStatusDia::CopyDir( wxString &srcDir, wxString &destDir )
+{
+  wxString src = srcDir;
+  wxString dest = destDir;
+  dest += "/";
+  dest += wxFileNameFromPath( src );
+  if (!wxMkdir( dest ))
+  {
+    wxMessageBox( "Could not create target directory.", "FileMaker" );
+    return;
+  };
+  
+  wxArrayString list;
+  src += "/*";
+  char *f = wxFindFirstFile( src, wxDIR );
+  while (f)
+  {
+    list.Add( f );
+    f = wxFindNextFile();
+  };
+  
+  for (uint i = 0; i < list.Count(); i++)
+  {
+    wxString filename = list[i];
+    if (wxDirExists( filename ))
+      CopyDir( filename, dest );
+    else
+      CopyFile( filename, dest );
+    if (m_stop) return;
+  };
+};
+
+void wxCopyStatusDia::CopyFile( wxString &src, wxString &destDir )
+{
+  m_sourceMsg->SetLabel( src );
+  wxString dest = destDir;
+  dest += "/";
+  dest += wxFileNameFromPath( src );
+  m_destMsg->SetLabel( dest );
+  
+  wxYield();
+  
+  if (wxFileExists(dest))
+  {
+    wxString s = "Target file ";
+    s += dest;
+    s += " exists already. Overwrite?";
+    int ret = wxMessageBox( s, "FileMaker", wxYES_NO );
+    if (ret == wxNO) return;
+  };
+  
+  FILE *fs = NULL, *fd = NULL;
+  if (!(fs = fopen(src, "rb"))) 
+  {
+    wxString s = "Cannot open source file ";
+    s += src;
+    s += ".";
+    wxMessageBox( s, "FileMaker" );
+    return;
+  } 
+  else 
+  if (!(fd = fopen(dest, "wb"))) 
+  {
+    fclose(fs);
+    wxString s = "Cannot open target file ";
+    s += dest;
+    s += ".";
+    wxMessageBox( s, "FileMaker" );
+    return;
+  };
+  int ch;
+  long kcounter = 0;
+  while (!m_stop)
+  {
+    int counter = 0;
+    while ((ch = getc( fs )) != EOF)
+    {
+      putc( ch, fd );
+      counter++;
+      if (counter == 1000) break;
+    };
+    kcounter++;
+    m_statusMsg->SetLabel( IntToString( kcounter) );
+    wxYield();
+    if (ch == EOF) break;
+  };
+  fclose( fs ); 
+  fclose( fd );
+};
+
+
+//-----------------------------------------------------------------------------
+// wxDeleteStatusDia
+//-----------------------------------------------------------------------------
+
+/*
+
+IMPLEMENT_DYNAMIC_CLASS(wxDeleteStatusDia,wxDialogBox);
+
+wxDeleteStatusDia::wxDeleteStatusDia( wxFrame *parent, wxStringList *files ) :
+  wxDialogBox( parent, "FileMaker delete job control", TRUE, 
+    180, 180, 500, 200, wxCAPTION | wxTRANSIENT )
+{
+  int w = 0;
+  int h = 0;
+  GetSize( &w, &h );
+
+  m_files = files;
+  m_stop = FALSE;
+  m_countFiles = 0;
+  m_countDirs = 0;
+
+  wxFont *myFont = wxTheFontList->FindOrCreateFont( 12, wxROMAN, wxNORMAL, wxNORMAL );
+  SetLabelFont( myFont );
+  SetButtonFont( myFont );
+  
+  wxStaticText *msg = new wxStaticText( this, "Deleting file or directory:", 10, 10 );
+  m_targetMsg = new wxStaticText( this, "", 80, 40, 300 );
+  msg = new wxStaticText( this, " Directories deleted:", 10, 80 );
+  m_dirsMsg = new wxStaticText( this, "0", 120, 80, 80 );
+  msg = new wxStaticText( this, "      Files deleted:", 10, 110 );
+  m_filesMsg = new wxStaticText( this, "0", 120, 110, 100 );
+
+  m_cancelButton = new wxButton( this, NULL, "Return", w-130, h-50, 85, 30 );
+  
+  Centre( wxVERTICAL | wxHORIZONTAL );
+
+  m_timer = new wxDeleteTimer( this );
+  m_timer->Start( 300, TRUE );
+  
+  Show( TRUE );
+};
+
+wxDeleteStatusDia::~wxDeleteStatusDia()
+{
+  delete m_timer;
+};
+
+void wxDeleteStatusDia::OnCommand( wxWindow &win, wxCommandEvent &WXUNUSED(event) )
+{
+  if (&win == m_cancelButton)
+  {
+    if (m_stop) Show( FALSE );
+    m_stop = TRUE;
+    return;
+  };
+};
+
+void wxDeleteStatusDia::DoDelete(void)
+{
+  while (wxTheApp->Pending()) wxTheApp->Dispatch();
+  wxNode *node = m_files->First();
+  while (node)
+  {
+    char *target = (char*)node->Data();
+    if (wxDirExists( target ))
+      DeleteDir( target );
+    else
+      DeleteFile( target );
+    if (m_stop) return;
+    node = node->Next();
+  };
+  m_stop = TRUE;
+};
+
+void wxDeleteStatusDia::DeleteDir( char *target )
+{
+  wxString s = target;
+  s += "// *";
+  wxStringList list;
+  char *f = wxFindFirstFile( s );
+  while (f)
+  {
+    list.Add( f );
+    f = wxFindNextFile();
+  };
+  wxNode *node = list.First();
+  while (node)
+  {
+    f = (char*)node->Data();
+    if (wxDirExists( f ))
+      DeleteDir( f );
+    else
+      DeleteFile( f );
+    if (m_stop) return;
+    node = node->Next();
+  };
+  if (!wxRmdir( target ))
+  {
+    s = "Could not remove directory ";
+    s += target;
+    s += ".";
+    wxMessageBox( s, "FileMaker" );
+    return;
+  }
+  else
+  {
+    m_countDirs++;
+    m_dirsMsg->SetLabel( wxIntToString( m_countDirs) );
+  };
+};
+
+void wxDeleteStatusDia::DeleteFile( char *target )
+{
+  m_targetMsg->SetLabel( target );
+  while (wxTheApp->Pending()) wxTheApp->Dispatch();
+  if (!wxRemoveFile( target ))
+  {
+    wxString s = "Could not delete file ";
+    s += target;
+    s += ".";
+    wxMessageBox( s, "FileMaker" );
+  }
+  else
+  {
+    m_countFiles++;
+    m_filesMsg->SetLabel( wxIntToString( m_countFiles) );
+  };
+};
+
+*/