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

DVD

开发平台:

Visual C++

  1. /* This is the class definition for the Preferences Dialog.
  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. #include <fx.h>
  65. #include <FXPNGIcon.h>
  66. #include "FreeBurn.h"
  67. #include "FreeburnPreferences.h"
  68. #include "FreeburnDefs.h"
  69. #include "FreeburnPreferencesText.h"
  70. #ifndef FREEBURN_ICONS_H
  71. #include "FreeburnIcons.h"
  72. #define FREEBURN_ICONS_H
  73. #endif
  74. // Message Map for this class
  75. FXDEFMAP(CFreeburnPreferences) CFreeburnPreferencesMap[]={
  76.     //________Message_Type_______________________ID______________________________Message_Handler___________
  77.     // these handle messages to open a file dialog to find the paths to external programs
  78.     FXMAPFUNC(SEL_COMMAND,   CFreeburnPreferences::ID_FINDSHELL,    CFreeburnPreferences::onFindShellPath),
  79.     FXMAPFUNC(SEL_COMMAND,   CFreeburnPreferences::ID_FINDCDRECORD, CFreeburnPreferences::onFindCdrecordPath),
  80.     FXMAPFUNC(SEL_COMMAND,   CFreeburnPreferences::ID_FINDMKISOFS,  CFreeburnPreferences::onFindMkisofsPath),
  81.     FXMAPFUNC(SEL_COMMAND,   CFreeburnPreferences::ID_FINDCDRDAO,   CFreeburnPreferences::onFindCdrdaoPath)    
  82. };
  83. FXIMPLEMENT(CFreeburnPreferences,FXDialogBox,CFreeburnPreferencesMap,ARRAYNUMBER(CFreeburnPreferencesMap))
  84. // Construct help dialog box
  85. CFreeburnPreferences::CFreeburnPreferences(FXWindow *owner, FXint currentTheme):
  86.   FXDialogBox(owner,fbPreferencesTitleText,DECOR_TITLE|DECOR_BORDER, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4)
  87. {
  88.     // load the theme into the dialog
  89.     m_CurrentTheme = currentTheme;
  90.     // set up the main container for the dialog
  91.     FXVerticalFrame* prefrencesFrame = new FXVerticalFrame(this, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y);
  92.     
  93.     // set up the content frame
  94.     FXHorizontalFrame* contentFrame = new FXHorizontalFrame(prefrencesFrame, LAYOUT_FILL_X|LAYOUT_FILL_Y);
  95.     
  96.     // set up the switcher buttons frame
  97.     FXVerticalFrame* prefButtonsFrame = new FXVerticalFrame(contentFrame, 
  98.         LAYOUT_LEFT|LAYOUT_FILL_Y|FRAME_SUNKEN|PACK_UNIFORM_WIDTH|PACK_UNIFORM_HEIGHT,
  99.         0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  100.         
  101.     // set up the preferences switcher
  102.     FXSwitcher* prefSwitcher = new FXSwitcher(contentFrame, LAYOUT_FILL_X|LAYOUT_FILL_Y);
  103.     
  104.     // load the dialog icons
  105.     m_ProgramsIcon     = new FXPNGIcon(getApp(), preferences_programs_png);
  106.     m_ThemesIcon       = new FXPNGIcon(getApp(), preferences_theme_png);
  107.     m_DefaultThemeIcon = new FXPNGIcon(getApp(), w_systemset_large_png);
  108.     m_GNOMEThemeIcon   = new FXPNGIcon(getApp(), g_systemset_large_png);
  109.     m_KDEThemeIcon     = new FXPNGIcon(getApp(), k_systemset_large_png);
  110.     m_XPThemeIcon      = new FXPNGIcon(getApp(), xp_systemset_large_png);
  111.     
  112.     // program preferences frame
  113.     FXVerticalFrame* programPrefsFrame = new FXVerticalFrame(prefSwitcher, LAYOUT_FILL_X|LAYOUT_FILL_Y);
  114.     new FXLabel(programPrefsFrame, fbPreferencesProgramTitleText, NULL, LAYOUT_LEFT);
  115.     new FXHorizontalSeparator(programPrefsFrame, SEPARATOR_RIDGE|LAYOUT_FILL_X);
  116.     FXMatrix* programPrefsMatrix = new FXMatrix(programPrefsFrame, 3, 
  117.         MATRIX_BY_COLUMNS|PACK_UNIFORM_HEIGHT|LAYOUT_FILL_X|LAYOUT_CENTER_Y);
  118.         
  119.         // fill first matrix row
  120.         new FXLabel(programPrefsMatrix, fbPreferencesProgramShellText, NULL, LAYOUT_LEFT);
  121.         m_shellField = new FXTextField(programPrefsMatrix, 40, this, ID_LAST, 
  122.             FRAME_SUNKEN|FRAME_THICK|LAYOUT_CENTER_Y|LAYOUT_LEFT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW);
  123.         m_FindShellButton = new FXButton(programPrefsMatrix, fbPreferencesFindShellText, NULL, this, 
  124.             ID_FINDSHELL, BUTTON_NORMAL);
  125.         
  126.         // fill second matrix row
  127.         new FXLabel(programPrefsMatrix, fbPreferencesProgramCdrecordText, NULL, LAYOUT_LEFT);
  128.         m_cdrecordField = new FXTextField(programPrefsMatrix, 40, this, ID_LAST, 
  129.             FRAME_SUNKEN|FRAME_THICK|LAYOUT_CENTER_Y|LAYOUT_LEFT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW);
  130.         m_FindCdrecordButton = new FXButton(programPrefsMatrix, fbPreferencesFindCdrecordText, NULL, this, 
  131.             ID_FINDCDRECORD, BUTTON_NORMAL);
  132.             
  133.         // fill third matrix row
  134.         new FXLabel(programPrefsMatrix, fbPreferencesProgramMkisofsText, NULL, LAYOUT_LEFT);
  135.         m_mkisofsField = new FXTextField(programPrefsMatrix, 40, this, ID_LAST, 
  136.             FRAME_SUNKEN|FRAME_THICK|LAYOUT_CENTER_Y|LAYOUT_LEFT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW);
  137.         m_FindMkisofsButton = new FXButton(programPrefsMatrix, fbPreferencesFindMkisofsText, NULL, this, 
  138.             ID_FINDMKISOFS, BUTTON_NORMAL);
  139.             
  140.         // fill fourth matrix row
  141.         new FXLabel(programPrefsMatrix, fbPreferencesProgramCdrdaoText, NULL, LAYOUT_LEFT);
  142.         m_cdrdaoField = new FXTextField(programPrefsMatrix, 40, this, ID_LAST, 
  143.             FRAME_SUNKEN|FRAME_THICK|LAYOUT_CENTER_Y|LAYOUT_LEFT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW);
  144.         m_FindCdrdaoButton = new FXButton(programPrefsMatrix, fbPreferencesFindCdrdaoText, NULL, this, 
  145.             ID_FINDCDRDAO, BUTTON_NORMAL);
  146.     
  147.     // set the button to call the program preferences frame to the top
  148.     new FXButton(prefButtonsFrame, fbPreferencesProgramButtonText, m_ProgramsIcon, prefSwitcher,
  149.         FXSwitcher::ID_OPEN_FIRST, FRAME_RAISED|ICON_ABOVE_TEXT|LAYOUT_FILL_Y);
  150.     
  151.     // theme preferences frame
  152.     
  153.     // theme preferences container
  154.     FXVerticalFrame* themePrefsFrame = new FXVerticalFrame(prefSwitcher, LAYOUT_FILL_X|LAYOUT_FILL_Y);
  155.     // the panel title
  156.     new FXLabel(themePrefsFrame, fbPreferencesThemeTitleText, NULL, LAYOUT_LEFT);
  157.     // a horizontal ridge
  158.     new FXHorizontalSeparator(themePrefsFrame, SEPARATOR_RIDGE|LAYOUT_FILL_X);
  159.     // horizontal frame to contain the icon theme stuff
  160.     FXHorizontalFrame* iconThemeFrame = new FXHorizontalFrame(themePrefsFrame, LAYOUT_FILL_X);
  161.     // vertical frame to contain the icon theme selection stuff
  162.     FXVerticalFrame* iconSelectionFrame = new FXVerticalFrame(iconThemeFrame);
  163.     // label identifying the icon selection list box
  164.     new FXLabel(iconSelectionFrame, fbPreferencesThemeIconText, NULL, LAYOUT_LEFT);
  165.     // the icon selection list box
  166.     FXListBox* themeBox = new FXListBox(iconSelectionFrame, 4, owner, CFreeBurn::ID_ICONTHEME, 
  167.         FRAME_SUNKEN|FRAME_THICK|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, 0, 0, 175, 40);
  168.     // adding the items to the list box for the four icon themes    
  169.     themeBox->appendItem(fbPreferencesThemeDefaultText, m_DefaultThemeIcon, NULL);
  170.     themeBox->appendItem(fbPreferencesThemeGNOMEText,   m_GNOMEThemeIcon,   NULL);
  171.     themeBox->appendItem(fbPreferencesThemeKDEText,     m_KDEThemeIcon,     NULL);
  172.     themeBox->appendItem(fbPreferencesThemeXPText,      m_XPThemeIcon,      NULL);
  173.     // a new vertical frame to contain the icon preview
  174.     FXVerticalFrame* iconPreviewFrame = new FXVerticalFrame(iconThemeFrame, 0, 0, 0, 0, 0, 20);
  175.     // label identifying the icon preview
  176.     new FXLabel(iconPreviewFrame, fbPreferencesThemePreviewText, NULL, LAYOUT_LEFT);
  177.     // label that will contain the icon for the current theme
  178.     m_PreviewLabel = new FXLabel(iconPreviewFrame, NULL, NULL, LAYOUT_LEFT);
  179.     // horizontal line serarating the icon and color theme sections
  180.     new FXHorizontalSeparator(themePrefsFrame, SEPARATOR_LINE|LAYOUT_FILL_X);
  181.     // label identifying the color theme section
  182.     new FXLabel(themePrefsFrame, fbPreferencesThemeColorsText, NULL, LAYOUT_LEFT);
  183.     // matrix to contain the color wells, thier labels, and default buttons
  184.     FXMatrix* colorPrefsMatrix = new FXMatrix(themePrefsFrame, 6, 
  185.         MATRIX_BY_COLUMNS|PACK_UNIFORM_HEIGHT|LAYOUT_FILL_X);
  186.     // label identifying the base color
  187.     new FXLabel(colorPrefsMatrix, fbPreferencesThemeBaseColorText, NULL);
  188.     // color well for setting the base color
  189.     new FXColorWell(colorPrefsMatrix, FXRGB(0,0,0), owner, CFreeBurn::ID_BASECOLOR,
  190.         COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN,
  191.         0,0,40,24);
  192.     // button for setting the base color back to default
  193.     new FXButton(colorPrefsMatrix, fbPreferencesThemeDefaultColorText, NULL, owner, 
  194.         CFreeBurn::ID_BASECOLOR_DEFAULT);
  195.     // label identifying the back color
  196.     new FXLabel(colorPrefsMatrix, fbPreferencesThemeBackColorText, NULL, LABEL_NORMAL, 0, 0, 0, 0, 20);
  197.     // color well for setting the back color
  198.     new FXColorWell(colorPrefsMatrix, FXRGB(0,0,0), owner, CFreeBurn::ID_BACKCOLOR,
  199.         COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN,
  200.         0,0,40,24);
  201.     // button for setting the background color back to default
  202.     new FXButton(colorPrefsMatrix, fbPreferencesThemeDefaultColorText, NULL, owner, 
  203.         CFreeBurn::ID_BACKCOLOR_DEFAULT);
  204.     // label identifying the border color
  205.     new FXLabel(colorPrefsMatrix, fbPreferencesThemeBordColorText, NULL);
  206.     // color well for setting the border color
  207.     new FXColorWell(colorPrefsMatrix, FXRGB(0,0,0), owner, CFreeBurn::ID_BORDCOLOR,
  208.         COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN,
  209.         0,0,40,24);
  210.     // button for setting the border color back to default
  211.     new FXButton(colorPrefsMatrix, fbPreferencesThemeDefaultColorText, NULL, owner, 
  212.         CFreeBurn::ID_BORDCOLOR_DEFAULT);
  213.     // label identifying the foreground color
  214.     new FXLabel(colorPrefsMatrix, fbPreferencesThemeForeColorText, NULL, LABEL_NORMAL, 0, 0, 0, 0, 20);
  215.     // color well for setting the foreground color
  216.     new FXColorWell(colorPrefsMatrix, FXRGB(0,0,0), owner, CFreeBurn::ID_FORECOLOR,
  217.         COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN,
  218.         0,0,40,24);
  219.     // button for setting the foreground color back to default
  220.     new FXButton(colorPrefsMatrix, fbPreferencesThemeDefaultColorText, NULL, owner, 
  221.         CFreeBurn::ID_FORECOLOR_DEFAULT);
  222.     
  223.     // set the button to call the theme preferences frame to the top
  224.     new FXButton(prefButtonsFrame, fbPreferencesThemeButtonText, m_ThemesIcon, prefSwitcher,
  225.         FXSwitcher::ID_OPEN_SECOND, FRAME_RAISED|ICON_ABOVE_TEXT|LAYOUT_FILL_Y);
  226.     // set up the buttons for canceling or accepting changes
  227.     new FXHorizontalSeparator(prefrencesFrame, SEPARATOR_GROOVE|LAYOUT_FILL_X);
  228.     FXHorizontalFrame* buttonFrame = new FXHorizontalFrame(prefrencesFrame, LAYOUT_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH);
  229.     new FXButton(buttonFrame, fbPreferencesAcceptButtonText, NULL, this, FXDialogBox::ID_ACCEPT,
  230.         BUTTON_DEFAULT|LAYOUT_RIGHT|FRAME_RAISED|FRAME_THICK, 0, 0, 0, 0, 20, 20);
  231.     new FXButton(buttonFrame, fbPreferencesCancelButtonText, NULL, this, FXDialogBox::ID_CANCEL,
  232.         LAYOUT_RIGHT|FRAME_RAISED|FRAME_THICK,                0, 0, 0, 0, 20, 20);  
  233. }
  234. // Clean up 
  235. CFreeburnPreferences::~CFreeburnPreferences()
  236. {
  237.     // delete the dialog icons
  238.     delete m_ThemesIcon;
  239.     delete m_ProgramsIcon;
  240.     delete m_DefaultThemeIcon;
  241.     delete m_GNOMEThemeIcon;
  242.     delete m_KDEThemeIcon;
  243.     delete m_XPThemeIcon;
  244. }
  245. // set the find icon
  246. void CFreeburnPreferences::setFindIcon(FXIcon* findIcon)
  247. {
  248.     m_FindShellButton->setIcon(findIcon);
  249.     m_FindCdrecordButton->setIcon(findIcon);
  250.     m_FindMkisofsButton->setIcon(findIcon);
  251.     m_FindCdrdaoButton->setIcon(findIcon);
  252. }
  253. FXint CFreeburnPreferences::getThemePrefs()
  254. {
  255.     return m_CurrentTheme;
  256. }
  257. void CFreeburnPreferences::setThemePrefs(FXint theme)
  258. {
  259.     m_CurrentTheme = theme;
  260. }
  261. FXLabel* CFreeburnPreferences::getPreviewLabel()
  262. {
  263.     return m_PreviewLabel;
  264. }
  265. // method for opening a file dialog for setting the path to a UNIX shell program
  266. long CFreeburnPreferences::onFindShellPath(FXObject*, FXSelector, void*)
  267. {
  268.     // Setup a file dialog for opening a file
  269.     FXFileDialog openDialog(this, fbFindShellPathTitle);
  270.     openDialog.setSelectMode(SELECTFILE_EXISTING);
  271.     openDialog.setPatternList(fbFindShellPathPatterns);
  272.     
  273.     // If the dialog is not canceled, set the path to the file
  274.     if(openDialog.execute())
  275.     {
  276.         m_shellField->setText(openDialog.getFilename());
  277.     }
  278.     return 1;
  279. }
  280. // method for opening a file dialog for setting the path to cdrecord.exe
  281. long CFreeburnPreferences::onFindCdrecordPath(FXObject*, FXSelector, void*)
  282. {
  283.     // Setup a file dialog for opening a file
  284.     FXFileDialog openDialog(this, fbFindCdrecordPathTitle);
  285.     openDialog.setSelectMode(SELECTFILE_EXISTING);
  286.     openDialog.setPatternList(fbFindCdrecordPathPatterns);
  287.     
  288.     // If the dialog is not canceled, set the path to the file
  289.     if(openDialog.execute())
  290.     {
  291.         m_cdrecordField->setText(openDialog.getFilename());
  292.     }
  293.     return 1;
  294. }
  295. // method for opening a file dialog for setting the path to mkisofs.exe
  296. long CFreeburnPreferences::onFindMkisofsPath(FXObject*, FXSelector, void*)
  297. {
  298.     // Setup a file dialog for opening a file
  299.     FXFileDialog openDialog(this, fbFindMkisofsPathTitle);
  300.     openDialog.setSelectMode(SELECTFILE_EXISTING);
  301.     openDialog.setPatternList(fbFindMkisofsPathPatterns);
  302.     
  303.     // If the dialog is not canceled, set the path to the file
  304.     if(openDialog.execute())
  305.     {
  306.         m_mkisofsField->setText(openDialog.getFilename());
  307.     }
  308.     return 1;
  309. }
  310. // set the shell string
  311. void CFreeburnPreferences::setShellString(FXString string)
  312. {
  313.     m_shellField->setText(string);
  314. }
  315. // get the shell string
  316. FXString CFreeburnPreferences::getShellString()
  317. {
  318.     return m_shellField->getText();
  319. }
  320. // set the cdrecord line string
  321. void CFreeburnPreferences::setCdrecordString(FXString string)
  322. {
  323.     m_cdrecordField->setText(string);
  324. }
  325. // get the cdrecord line string
  326. FXString CFreeburnPreferences::getCdrecordString()
  327. {
  328.     return m_cdrecordField->getText();
  329. }
  330. // set the mkisofs line string
  331. void CFreeburnPreferences::setMkisofsString(FXString string)
  332. {
  333.     m_mkisofsField->setText(string);
  334. }
  335. // get the mkisofs line string
  336. FXString CFreeburnPreferences::getMkisofsString()
  337. {
  338.     return m_mkisofsField->getText();
  339. }
  340. // set the cdrdao line string
  341. void CFreeburnPreferences::setCdrdaoString(FXString string)
  342. {
  343.     m_cdrdaoField->setText(string);
  344. }
  345. // get the cdrdao line string
  346. FXString CFreeburnPreferences::getCdrdaoString()
  347. {
  348.     return m_cdrdaoField->getText();
  349. }
  350. // method for opening a file dialog for setting the path to cdrdao.exe
  351. long CFreeburnPreferences::onFindCdrdaoPath(FXObject*, FXSelector, void*)
  352. {
  353.     // Setup a file dialog for opening a file
  354.     FXFileDialog openDialog(this, fbFindCdrdaoPathTitle);
  355.     openDialog.setSelectMode(SELECTFILE_EXISTING);
  356.     openDialog.setPatternList(fbFindCdrdaoPathPatterns);
  357.     
  358.     // If the dialog is not canceled, set the path to the file
  359.     if(openDialog.execute())
  360.     {
  361.         m_cdrdaoField->setText(openDialog.getFilename());
  362.     }
  363.     return 1;
  364. }