FreeburnHelper.cpp
上传用户:cnxinhai
上传日期:2013-08-06
资源大小:265k
文件大小:6k
源码类别:

DVD

开发平台:

Visual C++

  1. /* This is a set of helper methods used in FreeBurn that provide some 
  2.  * useful functionality but only support the program, they do not provide
  3.  * any actual "real" functionality
  4.  *
  5.  * Copyright (C) 2001, 2002  Adam Schlag
  6.  */
  7. /*
  8.  * FreeBurn Software License
  9.  * (based on the Apache Software License)
  10.  * 
  11.  * Version 1.1
  12.  * 
  13.  * Copyright (c) 2001, 2002 The FreeBurn Project. All rights reserved.
  14.  * 
  15.  * Redistribution and use in source and binary forms, with or without 
  16.  * modification, are permitted provided that the following conditions are met:
  17.  * 
  18.  * 1. Redistributions of source code must retain the above copyright 
  19.  * notice, this list of conditions and the following disclaimer.
  20.  * 
  21.  * 2. Redistributions in binary form must reproduce the above copyright 
  22.  * notice, this list of conditions and the following disclaimer in the 
  23.  * documentation and/or other materials provided with the distribution.
  24.  * 
  25.  * 3. The end-user documentation included with the redistribution, if any, must 
  26.  * include the following acknowledgment:
  27.  * 
  28.  *  "This product includes software developed by the FreeBurn 
  29.  *     Project (http://freeburn.sourceforge.net/)."
  30.  * 
  31.  * Alternately, this acknowledgment may appear in the software itself, 
  32.  * if and wherever such third-party acknowledgments normally appear.
  33.  * 
  34.  * 4. The names "FreeBurn" and "FreeBurn Project" must not be 
  35.  * used to endorse or promote products derived from this software 
  36.  * without prior written permission. For written permission, please 
  37.  * contact aschlag@users.sourceforge.net.
  38.  * 
  39.  * 5. Products derived from this software may not be called "FreeBurn", 
  40.  * nor may "FreeBurn" appear in their name, without prior written 
  41.  * permission of the FreeBurn Project.
  42.  * 
  43.  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED 
  44.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
  45.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
  46.  * DISCLAIMED. IN NO EVENT SHALL THE FREEBURN PROJECT OR ITS 
  47.  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
  48.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
  49.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
  50.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
  51.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
  52.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
  53.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  54.  * SUCH DAMAGE.
  55.  * 
  56.  * This software consists of voluntary contributions made by many 
  57.  * individuals on behalf of the FreeBurn Project. For more 
  58.  * information on the FreeBurn Project and FreeBurn, please see 
  59.  * <http://freeburn.sourceforge.net/>.
  60.  * 
  61.  * This software is distributed with software that is released under the GNU 
  62.  * General Public License (GPL).  You can find the terms of this license in the
  63.  * file GPL.txt distributed in this package.  You can find information on the
  64.  * software distributed with this package in the file PROGRAMS.txt.
  65.  */
  66. #include <fx.h>
  67. #include "FreeburnHelper.h"
  68. #include "FreeburnDefs.h"
  69. int FreeburnHelper::winPathToUnixPath(const FXString& winPath, FXString& unixPath)
  70. {
  71.     // first, get the absolute path of the winPath (this is being
  72.     // used because FXFile::simplify for some reason was adding too
  73.     // many backslashes, and getting the absolute path just makes
  74.     // the command look better)
  75.     unixPath = FXFile::absolute(winPath);
  76.     
  77.     // second, replace each backslash with a forward slash
  78.     unixPath.substitute('\', '/');    
  79.     
  80.     // third, change the Windows drive letter notation to they Cygwin directory notation
  81.     // i.e. change C: to /cygdrive/C
  82.     if (unixPath.count(':') != 0) // The beginning of the string is a drive name, like "C:"
  83.     {
  84.         FXint pos = unixPath.findf(':');    // find the location of ':'
  85.         unixPath.remove(pos);               // remove the ':'
  86.         unixPath.prepend("/cygdrive/");     // insert "/cygdrive/" for the Cygwin directory notation
  87.     }
  88.     
  89.     // finally, insert a backslash ('') in front of any space 
  90.     // in a path, so it is understood by a UNIX shell.  
  91.     // First, we get the index of the first space (' ')
  92.     FXint index = unixPath.findf(' ', 0);
  93.     // now loop until index is > -1, or there are no other
  94.     // spaces to fix
  95.     while (index > -1)
  96.     {
  97.         unixPath.insert(index, '\');           // insert a backslash in front of a space
  98.         index = unixPath.findf(' ', (index+2)); // find the next space starting 2 characters
  99.                                                 // past where the backslash is inserted
  100.     }
  101.     
  102.     return 1;
  103. }
  104. FXbool FreeburnHelper::saveNewTextFile(FXWindow* owner, FXString& fileContents)
  105. {
  106.     FXString fileName;
  107.     
  108.     // a file dialog to specify the name and location to save the file
  109.     FXFileDialog saveDialog(owner,"Save File");     // the new save dialog
  110.     saveDialog.setSelectMode(SELECTFILE_ANY);       // the file select mode
  111.     saveDialog.setPatternList("All Files (*.*)");   // the pattern list for files
  112.     if(!saveDialog.execute()) return FALSE;         // execute the dialog and get a file name
  113.             
  114.     fileName = saveDialog.getFilename();            // get the name of the file
  115.             
  116.     if(FXFile::exists(fileName))                    // if the file exists, ask if we want to overwrite
  117.     {
  118.         if(MBOX_CLICKED_NO==FXMessageBox::question(owner,MBOX_YES_NO,"Overwrite File",
  119.             "Overwrite existing file: %s?",fileName.text())) return FALSE;
  120.     }
  121.     
  122.     FXFileStream outputFile;                        // a new file stream
  123.     
  124.     if(outputFile.open(fileName, FXStreamSave))     // if we can open the stream...
  125.     {
  126.         outputFile << fileContents.text();          // ...write the text...
  127.         outputFile.close();                         // ...and close the stream
  128.     }
  129.     else return FALSE;                              // return false if we didn't open the stream
  130.     
  131.     return TRUE;                                    // everything's okay, so return
  132. }