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

DVD

开发平台:

Visual C++

  1. /* This is the main class description for the FreeBurn application.
  2.  *
  3.  * Copyright (C) 2001, 2002  Adam Schlag
  4.  */
  5. /*
  6.  * FreeBurn Software License
  7.  * (based on the Apache Software License)
  8.  * 
  9.  * Version 1.1
  10.  * 
  11.  * Copyright (c) 2001, 2002 The FreeBurn Project. All rights reserved.
  12.  * 
  13.  * Redistribution and use in source and binary forms, with or without 
  14.  * modification, are permitted provided that the following conditions are met:
  15.  * 
  16.  * 1. Redistributions of source code must retain the above copyright 
  17.  * notice, this list of conditions and the following disclaimer.
  18.  * 
  19.  * 2. Redistributions in binary form must reproduce the above copyright 
  20.  * notice, this list of conditions and the following disclaimer in the 
  21.  * documentation and/or other materials provided with the distribution.
  22.  * 
  23.  * 3. The end-user documentation included with the redistribution, if any, must 
  24.  * include the following acknowledgment:
  25.  * 
  26.  *  "This product includes software developed by the FreeBurn 
  27.  *     Project (http://freeburn.sourceforge.net/)."
  28.  * 
  29.  * Alternately, this acknowledgment may appear in the software itself, 
  30.  * if and wherever such third-party acknowledgments normally appear.
  31.  * 
  32.  * 4. The names "FreeBurn" and "FreeBurn Project" must not be 
  33.  * used to endorse or promote products derived from this software 
  34.  * without prior written permission. For written permission, please 
  35.  * contact aschlag@users.sourceforge.net.
  36.  * 
  37.  * 5. Products derived from this software may not be called "FreeBurn", 
  38.  * nor may "FreeBurn" appear in their name, without prior written 
  39.  * permission of the FreeBurn Project.
  40.  * 
  41.  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED 
  42.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
  43.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
  44.  * DISCLAIMED. IN NO EVENT SHALL THE FREEBURN PROJECT OR ITS 
  45.  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
  46.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
  47.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
  48.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
  49.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
  50.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
  51.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  52.  * SUCH DAMAGE.
  53.  * 
  54.  * This software consists of voluntary contributions made by many 
  55.  * individuals on behalf of the FreeBurn Project. For more 
  56.  * information on the FreeBurn Project and FreeBurn, please see 
  57.  * <http://freeburn.sourceforge.net/>.
  58.  * 
  59.  * This software is distributed with software that is released under the GNU 
  60.  * General Public License (GPL).  You can find the terms of this license in the
  61.  * file GPL.txt distributed in this package.  You can find information on the
  62.  * software distributed with this package in the file PROGRAMS.txt.
  63.  */
  64.  
  65. /* This is the main class for FreeBurn
  66.  * (C represents Class, Freeburn is obvious)
  67.  */
  68. #ifndef FREEBURN_H
  69. #define FREEBURN_H
  70. class HelpWindow;
  71. class CFreeburnSystem;
  72. class CFreeburnCommandDialog;
  73. class CFreeburnDisc;
  74. class FBSpinner;
  75. class CFreeBurn : public FXMainWindow 
  76. {
  77.     FXDECLARE(CFreeBurn)
  78. // public members
  79. public:
  80.     // Methods for handling messages from the
  81.     // various controls in the program.  They
  82.     // are named to be self-explanitory.
  83.     
  84.     // these handle the thread events
  85.     long getThreadBuffer    (FXObject*, FXSelector, void*);
  86.     long threadComplete     (FXObject*, FXSelector, void*);    
  87.     
  88.     // these handle color updating
  89.     long onCmdColor         (FXObject*, FXSelector, void*);
  90.     long onUpdColor         (FXObject*, FXSelector, void*);
  91.     long onCmdColorDefault  (FXObject*, FXSelector, void*);
  92.     
  93.     // these handle updating the main program controls
  94.     long updMainControls    (FXObject*, FXSelector, void*);
  95.     long updCatalogNum      (FXObject*, FXSelector, void*);
  96.     long cmdUseCdText       (FXObject*, FXSelector, void*);
  97.     long cmdEditCdText      (FXObject*, FXSelector, void*);
  98.     long cmdTrackType       (FXObject*, FXSelector, void*);
  99.     long cmdAddTrack        (FXObject*, FXSelector, void*);
  100.     long cmdModTrackCommand (FXObject*, FXSelector, void*);
  101.     long cmdModifyTrack     (FXObject*, FXSelector, void*);
  102.     
  103.     // these handle executing the various program dialogs
  104.     long newDiscLayout      (FXObject*, FXSelector, void*);
  105.     long openDiscToc        (FXObject*, FXSelector, void*);
  106.     long saveDiscToc        (FXObject*, FXSelector, void*);
  107.     long updSave            (FXObject*, FXSelector, void*);
  108.     long closeDiscLayout    (FXObject*, FXSelector, void*);
  109.     long updClose           (FXObject*, FXSelector, void*);
  110.     long burnDisc           (FXObject*, FXSelector, void*);
  111.     long updBurnDisc        (FXObject*, FXSelector, void*);
  112.     long imageDisc          (FXObject*, FXSelector, void*);
  113.     long editPreferences    (FXObject*, FXSelector, void*);
  114.     long showHelp           (FXObject*, FXSelector, void*);
  115.     long showHelpCdrecord   (FXObject*, FXSelector, void*);
  116.     long showHelpMkisofs    (FXObject*, FXSelector, void*);
  117.     long showHelpCdrdao     (FXObject*, FXSelector, void*);
  118.     long aboutFreeburn      (FXObject*, FXSelector, void*);
  119.     
  120.     // this handles exiting the application
  121.     long exitApp            (FXObject*, FXSelector, void*);
  122.     
  123.     // these handles getting and setting of application settings
  124.     long onCmdIconTheme     (FXObject*, FXSelector, void*);
  125.     long onUpdIconTheme     (FXObject*, FXSelector, void*);
  126.     
  127.     // methods to get the handles used for recieving thread messages
  128.     FXInputHandle getReadOutputHandle()     { return m_ReadOutputHandle; }
  129.     FXInputHandle getThreadCompleteHandle() { return m_ThreadCompleteHandle; }
  130.     
  131.     // The new message ID's used in the application
  132.     enum{
  133.         ID_TITLE=FXMainWindow::ID_LAST,
  134.         ID_NEW,
  135.         ID_OPEN,
  136.         ID_SAVE,
  137.         ID_CLOSE,
  138.         ID_BURN_CD,
  139.         ID_CD_IMAGE,
  140.         ID_GET_THREAD_BUFFER,
  141.         ID_THREAD_COMPLETE,
  142.         ID_DISC_SIZE,
  143.         ID_DISC_TYPE,
  144.         ID_CAT_NUM,
  145.         ID_USE_CD_TEXT,
  146.         ID_EDIT_CD_TEXT,
  147.         ID_TRACK_TYPE,
  148.         ID_ADD_TRACK,
  149.         ID_MODIFY_TRACK_OPT,
  150.         ID_TRACK_NUM,
  151.         ID_MODIFY_TRACK,
  152.         ID_USED_SPACE,
  153.         ID_FREE_SPACE,
  154.         ID_PERCENT_FULL,
  155.         ID_AUDIO_TRACK,
  156.         ID_DATA_TRACK,
  157.         ID_RAW_TRACK,
  158.         ID_XA_DATA_TRACK,
  159.         ID_XA_AUDIO_TRACK,
  160.         ID_XA_RAW_TRACK,
  161.         ID_EDIT_TRACK,
  162.         ID_DELETE_TRACK,
  163.         ID_PREFERENCES,
  164.         ID_HELP,
  165.         ID_HELP_CDRECORD,
  166.         ID_HELP_MKISOFS,
  167.         ID_HELP_CDRDAO,
  168.         ID_ABOUT,
  169.         ID_EXIT,
  170.         ID_ICONTHEME,
  171.         ID_BASECOLOR,
  172.         ID_BACKCOLOR,
  173.         ID_FORECOLOR,
  174.         ID_BORDCOLOR,
  175.         ID_BASECOLOR_DEFAULT,
  176.         ID_BACKCOLOR_DEFAULT,
  177.         ID_FORECOLOR_DEFAULT,
  178.         ID_BORDCOLOR_DEFAULT,
  179.         ID_LAST
  180.     };
  181.     
  182.     // enum for the disc burning types
  183.     enum{
  184.         TRACK_AT_ONCE = 0,
  185.         DISC_AT_ONCE
  186.     };
  187.     
  188.     // enum for the program to run
  189.     enum{
  190.         RUN_CDRECORD = 0,
  191.         RUN_CDRDAO,
  192.         RUN_MKISOFS        
  193.     };
  194.     // enum for the track modification command to run
  195.     enum{
  196.         EDIT_TRACK = 0,
  197.         DELETE_TRACK
  198.     };
  199.     // CFreeBurn's constructor
  200.     CFreeBurn(FXApp* app);
  201.     // CFreeBurn's destructor
  202.     ~CFreeBurn();
  203.     // Initialize
  204.     virtual void create();
  205. protected:
  206.     // Empty Constructor for later use in FOX
  207.     CFreeBurn(){}
  208.     
  209.     // Methods for reading/writing from the registry
  210.     void readThemeSettings();
  211.     void readProgramSettings();
  212.     void writeProgramSettings();
  213.     
  214.     // Method to execute an external program
  215.     void runProgram();
  216.     
  217.     // Methods for setting the program theme settings
  218.     void loadThemeIcons();
  219.     void setThemeIcons();
  220.     void changeToolBarIcons();
  221.     void changeMenuIcons();
  222.     
  223.     // Methods for setting up the main program GUI controls
  224.     void setupProgramMenus();
  225.     void setupToolBar();
  226.     void setupContentFrame();
  227.         
  228.     // Methods for getting and setting colors in the program
  229.     void    setBaseColor(FXColor color);
  230.     FXColor getBaseColor() const;
  231.     void    setBackgroundColor(FXColor color);
  232.     FXColor getBackgroundColor() const;
  233.     void    setForegroundColor(FXColor color);
  234.     FXColor getForegroundColor() const;
  235.     void    setBorderColor(FXColor color);
  236.     FXColor getBorderColor() const;
  237.     void    setMainControlsBaseColor      (FXColor color, FXColor hilite, FXColor shadow);
  238.     void    setMainControlsBackgroundColor(FXColor color);
  239.     void    setMainControlsForegroundColor(FXColor color);
  240.     void    setMainControlsBorderColor    (FXColor color);
  241.     
  242.     // Methods for setting the program colors back to defaults
  243.     void setDefaultBaseColor();
  244.     void setDefaultBackgroundColor();
  245.     void setDefaultForegroundColor();
  246.     void setDefaultBorderColor();
  247.     
  248.     // methods for loading/saving the disc layout to a .toc
  249.     // Save changes, prompt for new m_fileName
  250.     FXbool saveChanges();
  251.     FXbool closeDisc();
  252.             
  253. private:
  254.     // Layout Frame for the main application contents
  255.     FXVerticalFrame* m_contents;
  256.     // The application menu bar
  257.     FXMenubar*  m_menuBar;
  258.     // The menu bar's grip
  259.     FXToolbarGrip* m_menuBarGrip;
  260.     // The File menu
  261.     FXMenuPane* m_fileMenu;
  262.     // The Options menu
  263.     FXMenuPane* m_optionsMenu;
  264.     // The Help menu
  265.     FXMenuPane* m_helpMenu;
  266.     // The application toolbar
  267.     FXToolbar*  m_toolBar;
  268.     // The toolbar's grip
  269.     FXToolbarGrip* m_toolBarGrip;
  270.     // The application status bar
  271.     FXStatusbar* m_statusBar;
  272.     
  273.     // Toolbar Buttons (we need to have pointers
  274.     // to these so we can change thier icons & colors)
  275.     FXButton* m_NewDiscButton;
  276.     FXButton* m_OpenDiscButton;
  277.     FXButton* m_SaveDiscButton;
  278.     FXButton* m_BurnCdButton;
  279.     FXButton* m_CdImageButton;
  280.     FXButton* m_PrefsButton;
  281.     FXButton* m_HelpButton;
  282.     FXButton* m_ExitButton;
  283.     
  284.     // separators used in the toolbar
  285.     FXVerticalSeparator* m_ToolSeparator1;
  286.     FXVerticalSeparator* m_ToolSeparator2;
  287.     FXVerticalSeparator* m_ToolSeparator3;
  288.     
  289.     // Menu command objects (we need to track these
  290.     // as well for changing their icons/colors...)
  291.     
  292.     // File menu title
  293.     FXMenuTitle* m_FileMenuTitle;
  294.     // Options menu title
  295.     FXMenuTitle* m_OptionsMenuTitle;
  296.     // Help menu title
  297.     FXMenuTitle* m_HelpMenuTitle;
  298.     // Menu Separators
  299.     FXMenuSeparator* m_FileMenuSeparator;
  300.     FXMenuSeparator* m_HelpMenuSeparator;
  301.     // Commands in the File menu
  302.     FXMenuCommand* m_NewMenuCommand;
  303.     FXMenuCommand* m_OpenMenuCommand;
  304.     FXMenuCommand* m_SaveMenuCommand;
  305.     FXMenuCommand* m_CloseMenuCommand;
  306.     FXMenuCommand* m_ExitMenuCommand;
  307.     // Commands in the Options menu
  308.     FXMenuCommand* m_PrefsMenuCommand;
  309.     // Commands in the Help menu
  310.     FXMenuCommand* m_HelpMenuCommand;
  311.     FXMenuCommand* m_CdrecordHelpMenuCommand;
  312.     FXMenuCommand* m_MkisofsHelpMenuCommand;
  313.     FXMenuCommand* m_CdrdaoHelpMenuCommand;
  314.     FXMenuCommand* m_AboutMenuCommand;
  315.     
  316.     // Stuff for the main window controls
  317.     FXVerticalFrame*   m_mainFrame;
  318.     FXGroupBox*        m_Group1;
  319.     FXGroupBox*        m_Group2;
  320.     FXMatrix*          m_contentMatrix;
  321.     FXMatrix*          m_secondMatrix;
  322.     
  323.     FXLabel*           m_DiscSizeLabel;
  324.     FXTextField*       m_sizeField;
  325.     FXLabel*           m_DiscTypeLabel;
  326.     FXTextField*       m_typeField;
  327.     
  328.     FXLabel*           m_catalogLabel;
  329.     FXTextField*       m_catalogField;
  330.     FXCheckButton*     m_cdTextButton;
  331.     FXButton*          m_editTextBut;
  332.     
  333.     FXLabel*           m_addTrackLabel;
  334.     FXOptionMenu*      m_trackOptions;
  335.     FXPopup*           m_cddaPopup;
  336.     FXPopup*           m_cdromPopup;
  337.     FXPopup*           m_cdxaPopup;
  338.     FXOption*          m_cddaAudio;
  339.     FXOption*          m_cdromData;
  340.     FXOption*          m_cdromAudio;
  341.     FXOption*          m_cdromRaw;
  342.     FXOption*          m_cdxaAudio;
  343.     FXOption*          m_cdxaData;
  344.     FXOption*          m_cdxaAudio2;
  345.     FXOption*          m_cdxaRaw;
  346.     FXLabel*           m_trackLabel1;
  347.     FXButton*          m_addTrackBut;
  348.     
  349.     FXOptionMenu*      m_modTrackOpts;
  350.     FXPopup*           m_modTrackPopup;
  351.     FXOption*          m_editTrack;
  352.     FXOption*          m_deleteTrack;
  353.     FXLabel*           m_modTrackLabel;
  354.     FBSpinner*         m_modTrackNum;
  355.     FXButton*          m_modTrackBut;
  356.     
  357.     FXHorizontalFrame* m_spaceFrame;
  358.     FXLabel*           m_usedSpaceLabel;
  359.     FXTextField*       m_usedSpaceField;
  360.     FXLabel*           m_freeSpaceLabel;
  361.     FXTextField*       m_freeSpaceField;
  362.     FXProgressBar*     m_percentFull;
  363.     
  364.     // Default Theme Icons for use in the app buttons
  365.     FXIcon* m_DefaultNewIcon;
  366.     FXIcon* m_DefaultOpenIcon;
  367.     FXIcon* m_DefaultSaveIcon;
  368.     FXIcon* m_DefaultCloseIcon;
  369.     FXIcon* m_DefaultBurnCdIcon;
  370.     FXIcon* m_DefaultCdImageIcon;
  371.     FXIcon* m_DefaultPreferencesIcon;
  372.     FXIcon* m_DefaultHelpIcon;
  373.     FXIcon* m_DefaultExitIcon;
  374.     FXIcon* m_DefaultThemePreviewIcon;
  375.     FXIcon* m_DefaultFindIcon;
  376.     
  377.     // GNOME Theme Icons for use in the app buttons
  378.     FXIcon* m_GnomeNewIcon;
  379.     FXIcon* m_GnomeOpenIcon;
  380.     FXIcon* m_GnomeSaveIcon;
  381.     FXIcon* m_GnomeCloseIcon;
  382.     FXIcon* m_GnomeBurnCdIcon;
  383.     FXIcon* m_GnomeCdImageIcon;
  384.     FXIcon* m_GnomePreferencesIcon;
  385.     FXIcon* m_GnomeHelpIcon;
  386.     FXIcon* m_GnomeExitIcon;
  387.     FXIcon* m_GnomeThemePreviewIcon;
  388.     FXIcon* m_GnomeFindIcon;
  389.     
  390.     // KDE Theme Icons for use in the app buttons
  391.     FXIcon* m_KdeNewIcon;
  392.     FXIcon* m_KdeOpenIcon;
  393.     FXIcon* m_KdeSaveIcon;
  394.     FXIcon* m_KdeCloseIcon;
  395.     FXIcon* m_KdeBurnCdIcon;
  396.     FXIcon* m_KdeCdImageIcon;
  397.     FXIcon* m_KdePreferencesIcon;
  398.     FXIcon* m_KdeHelpIcon;
  399.     FXIcon* m_KdeExitIcon;
  400.     FXIcon* m_KdeThemePreviewIcon;
  401.     FXIcon* m_KdeFindIcon;
  402.     
  403.     // XP Theme Icons for use in the app buttons
  404.     FXIcon* m_XpNewIcon;
  405.     FXIcon* m_XpOpenIcon;
  406.     FXIcon* m_XpSaveIcon;
  407.     FXIcon* m_XpCloseIcon;
  408.     FXIcon* m_XpBurnCdIcon;
  409.     FXIcon* m_XpCdImageIcon;
  410.     FXIcon* m_XpPreferencesIcon;
  411.     FXIcon* m_XpHelpIcon;
  412.     FXIcon* m_XpExitIcon;
  413.     FXIcon* m_XpThemePreviewIcon;
  414.     FXIcon* m_XpFindIcon;
  415.     
  416.     // default icons for building the application...
  417.     FXIcon* m_NewIcon;
  418.     FXIcon* m_OpenIcon;
  419.     FXIcon* m_SaveIcon;
  420.     FXIcon* m_CloseIcon;
  421.     FXIcon* m_burnCdIcon;
  422.     FXIcon* m_cdImageIcon;
  423.     FXIcon* m_preferencesIcon;
  424.     FXIcon* m_helpIcon;
  425.     FXIcon* m_exitIcon;
  426.     FXIcon* m_ThemePreviewIcon;
  427.     FXIcon* m_FindIcon;
  428.     
  429.     // Icons for the application itself
  430.     FXIcon* m_bigIcon;
  431.     FXIcon* m_smallIcon;
  432.     
  433.     // Label that will contain the preview icon
  434.     FXLabel* m_PreviewLabel;
  435.     
  436.     // Program Settings (loaded/saved in registry)
  437.     FXint    m_xpos;
  438.     FXint    m_ypos;
  439.     FXint    m_width;
  440.     FXint    m_height;
  441.     FXint    m_theme;
  442.     FXString m_shellPath;
  443.     FXString m_cdrecordPath;
  444.     FXString m_mkisofsPath;
  445.     FXString m_cdrdaoPath;
  446.     
  447.     // Help window items
  448.     HelpWindow* m_HelpWindow;
  449.     HelpWindow* m_CdrecordHelpWindow;
  450.     HelpWindow* m_MkisofsHelpWindow;
  451.     HelpWindow* m_CdrdaoHelpWindow;
  452.     
  453.     // Command execution settings
  454.     FXint        m_programToExecute;
  455.     FXDataTarget m_programToExecuteDataTarget;
  456.     FXbool       m_useUnixShell;
  457.     FXString     m_commandLineOptions;
  458.     
  459.     // Handles to use for notifying our application when the
  460.     // external program has output for us, or to notify us
  461.     // of when our program is complete.
  462.     FXInputHandle m_ReadOutputHandle;
  463.     FXInputHandle m_ThreadCompleteHandle;
  464.     
  465.     // The system class to handle process execution and
  466.     // threaded output buffering
  467.     CFreeburnSystem* m_SystemClass;
  468.     
  469.     // A pointer to the command dialog so we can use it later
  470.     CFreeburnCommandDialog* m_CommandDialog;
  471.     
  472.     // A CFreeburnDisc Pointer - pointer to the class representing 
  473.     // the disc layout and settings.  A complete interface to the disc
  474.     CFreeburnDisc* m_mainDisc;
  475.     
  476.     // Boolean if the disc has been created yet or not
  477.     FXbool m_discExists;
  478.     
  479.     // Boolean if the disc layout has been saved or not
  480.     FXbool m_discSaved;
  481.     
  482.     // Int to hold the track type to add
  483.     FXint m_trackAddType;
  484.     
  485.     // int to hold the track modification command to run
  486.     FXint m_modTrackCommand;
  487. };
  488. #endif