📄 themegallery.c
字号:
/*------------------------------------------------------------------------------*
* File Name: ThemeApply.c *
* Creation: CPY 1/27/03 *
* Purpose: Origin C support for a Theme Gallery and Apply dialog *
* Copyright (c) OriginLab Corp.2003 *
* All Rights Reserved *
* *
* Modification Log: *
* CPY 3/27/03 EDIT_THEME_CHANGE_TO_BUTTON *
* CPY 4/25/03 ADD_FILE_DATE and ADD_TOOLTIPS *
* CPY 4/30/03 ADD_UNDO_APPLY *
* RVD 6/13/2003 QA70-4650 v7.0601 OBJECT_PROPERTY_ACCESS *
* CPY 8/18/03 BOLD_SYSTEM_THEME_WHOLE_ROW *
* CPY 8/19/03 INCREMENT_LIST_NO_SYSTEM_THEME_SUPPORT *
* CPY 9/20/03 THEME_DUPLICATE_LEAD_TO_SIZE_OF_NEGATIVE_1 *
*------------------------------------------------------------------------------*/
////////////////////////////////////////////////////////////////////////////////////
#include <Origin.h>
//#include <Project.h>
//#include <sys_utils.h> // basic routines implemeted through Origin C, see sys_utils.c
#include <Dialog.h>
//#include <utilities.h>
#include "ResizeDialog.h"
#include <vsFlexGrid.h>
#include "theme_utils.h"
#include "Odlg.h"
#include "HelpID.h"
#include "GridControl.h"
#define _CAT "Theme"
#define _DBINT(_STR, _INT) //out_int(_STR, _INT);
#define _DBSTR(_STR) //out_str(_STR);
#define _DBPRINTF(_FMT, _ARG) //printf(_FMT, _ARG);
//putting ';' in front of labtalk to make the execution delayed, so it will be executed after
//event has been handled, which is safer
#define STR_THEME_REMINDER_MSG_RENAME ";type -M ThemeHowToRename"
#define STR_THEME_REMINDER_MSG_DEL ";type -M ThemeFolderOfDel"
// the following is the col arrangement, so the str and the enum must be consistent
//--- CPY 3/27/03 EDIT_THEME_CHANGE_TO_BUTTON
//#define STR_THEME_GRID_COLS "System|Location|Contents|Name"
#define STR_THEME_GRID_COLS "System|Name|Size|Date|Path" //CPY 4/25/03 ADD_FILE_DATE added date column
//---
enum {
GRID_COL_IS_SYSTEM,
GRID_COL_NAME,
//--- CPY 3/27/03 EDIT_THEME_CHANGE_TO_BUTTON
//GRID_COL_EDIT,
GRID_COL_SIZE,
//---
GRID_COL_DATE, //CPY 4/25/03 ADD_FILE_DATE
GRID_COL_LOCATION,
GRID_COL_TOTAL
};
#define NUM_DATA_PTS 20
//////////////////////////////////////////////////////////
/////////// Tooltips ////////////////////////////////////
//////////////////////////////////////////////////////////
static string strTootips get_col_heading_tooltips(int nCol)
{
string strTemp;
switch(nCol)
{
case GRID_COL_IS_SYSTEM:
//strTemp = "Click to check one of the theme to become a System Theme";
break;
case GRID_COL_SIZE:
strTemp = _L("Size = total number of properties, click to sort");
break;
case GRID_COL_NAME:
strTemp = _L("double-click a Theme's name to rename");
break;
case GRID_COL_DATE:
strTemp = _L("Last time a Theme file was modified, click to sort");
break;
case GRID_COL_LOCATION:
strTemp = _L("Theme files are stored in Origin's system folder or in user's Origin folder");
break;
}
return strTemp;
}
//////////////////////////////////////////////////////////
/////////// Theme Collection//////////////////////////////
//////////////////////////////////////////////////////////
static bool theme_is_increment_theme(LPCSTR lpcszThemeFilename)
{
Tree trTemp(lpcszThemeFilename);
string strName = GetFileName(lpcszThemeFilename);
_DBPRINTF("%s:", strName)
//out_tree(trTemp);
/// TD 8-10-03
if(!trTemp)
{
_DBPRINTF("Fail to load XML %s:", strName)
return false;
}
/// end -------TD 8-10-03
int nObjBits = 0;
int nStyleBits = 0;
if(trTemp.GetAttribute(THEME_PROPERTY_BITS_NAME, nStyleBits))
{
trTemp.GetAttribute(THEME_OBJECT_BITS_NAME, nObjBits);
uint dwBits = nStyleBits;
uint dwOtherStyleBits = ~FPB_STYLE_LIST_MASK & dwBits;
_DBPRINTF("property bits = %X\n", dwBits)
if((dwBits & FPB_STYLE_LIST_MASK) && dwOtherStyleBits == 0 && nObjBits == FOB_GLOBAL)
return true;
}
else
{
_DBSTR("No objects info");
}
return false;
}
//////////////////////////////////////////////////////////
/////////// end //////////////////////////////////////
//////////////////////////////////////////////////////////
enum {THEME_ADD, THEME_SEPARATOR,
THEME_EDIT, THEME_DELETE,
THEME_SEPARATOR1,
THEME_DUPLICATE, THEME_COMBINE,
THEME_SEPARATOR2,
THEME_SET_SYSTEM, THEME_CLEAR_SYSTEM,
THEME_SEPARATOR3,
THEME_SHOW_TOOLTIPS};
//--WAIT_FIX, cannot put into constructors
//bool bIsSystemTheme;
//bool bMultiSel = false;
//---
class ThemeListControlMenu : public Menu
{
public:
ThemeListControlMenu(bool bIsSystemTheme, bool bHasSystemTheme, bool bIsInThemeList, bool bMultiSel, bool bIsCanbeSystemTheme, bool bShowTips) : Menu()
{
m_nChoice = -1;
Add(_L("Add &New"), OnMenuItem);
Add(NULL, OnMenuItem);
Add(_L("&Edit..."), OnMenuItem, (bIsInThemeList && !bMultiSel) ? MF_ENABLED : MF_GRAYED);
Add(_L("&Delete"), OnMenuItem, bIsInThemeList? MF_ENABLED : MF_GRAYED);
Add(NULL, OnMenuItem);
Add(_L("D&uplicate"), OnMenuItem, (bIsInThemeList && !bMultiSel) ? MF_ENABLED : MF_GRAYED);
Add(_L("Com&bine"), OnMenuItem, (bIsInThemeList && bMultiSel) ? MF_ENABLED : MF_GRAYED);
Add(NULL, OnMenuItem);
Add(_L("&Set as System Theme"), OnMenuItem, (bIsCanbeSystemTheme && bIsInThemeList && !bIsSystemTheme && !bMultiSel) ? MF_ENABLED : MF_GRAYED );
Add(_L("&Clear System Theme"), OnMenuItem, bHasSystemTheme? MF_ENABLED : MF_GRAYED );
Add(NULL, OnMenuItem);
Add(_L("Show &Tooltips"), OnMenuItem, bShowTips?MF_CHECKED : MF_UNCHECKED);
}
void OnMenuItem(UINT nPos)
{
m_nChoice = nPos;
}
bool GetCommand(int& nChoice)
{
if(m_nChoice >= THEME_ADD && m_nChoice <= THEME_SHOW_TOOLTIPS)
{
nChoice = m_nChoice;
return true;
}
return false;
}
private:
int m_nChoice;
};
typedef bool (* P_THEME_EDITOR)(LPCSTR lpcszThemeFilename, HWND hWndParent);
class ThemeListControl : public GridListControl
{
public:
void Init(int nID, Dialog& dlg)
{
GridListControl::Init(nID, dlg);
Reset();
m_flx.ExtendLastCol = true;
m_flx.SelectionMode = flexSelectionListBox;
m_flx.AllowSelection = true;
m_flx.Editable = flexEDKbdMouse;
// allow sorting
m_flx.ExplorerBar = flexExSortShow;
//---- CPY 4/25/03 ADD_FILE_DATE
m_flx.ColFormat(GRID_COL_DATE) ="General Date"; //"Medium Date";
m_flx.ColDataType(GRID_COL_DATE) = flexDTDate;
//----
SetAlternateRowColors();
HideCol(GRID_COL_IS_SYSTEM);
}
void Reset()
{
//m_flx.FormatString = STR_THEME_GRID_COLS;
SetFormatStrLocal(STR_THEME_GRID_COLS, _CAT);
m_flx.Rows = 1;
m_flx.FixedRows = 1;
m_flx.FixedCols = 0;//hide the Row heading
m_flx.Cols = GRID_COL_TOTAL;
}
int AddTheme(const string& str, int nType, bool bIsIncrementList)
{
int nRow = m_flx.Rows;
m_flx.AddItem(str);
SetCellData(nRow, GRID_COL_LOCATION, nType);
SetItalic(nRow, GRID_COL_NAME, bIsIncrementList);
return nRow;
}
};
const static int s_arrThemeApply[] = {THEMEAPPLY_ACTIVE, THEMEAPPLY_FOLDER, THEMEAPPLY_PROJECT};
class ThemeGalleryDlg : public ResizeDialog
{
private:
ThemeListControl m_themeList;
ComboBox m_cmbApplyTo;
string m_strWksName;
string m_strThemeFilename;
bool m_bExcludeIncremenTypes;
int m_nUndoStackCount;
string m_strOldStr;
bool m_bPreviewGraphReady;
Control m_cntrlSystemTheme;
bool m_bActiveWinIsGraph;
public:
ThemeGalleryDlg() : ResizeDialog(IDD_THEME_GALLERY, "ODlg")
{
m_bExcludeIncremenTypes = true;
m_nUndoStackCount = 0;
m_strOptionsSecName = "ThemeGallery";
m_strOptionsValName = "Options";
}
int DoModalEx(HWND hWndParent = NULL)
{
InitMsgMap();// will be called from internal later
int nRet = DoModal(hWndParent);
return nRet;
}
protected:
EVENTS_BEGIN
ON_INIT(OnInitDialog)
ON_DESTROY(OnDestroy)
ON_SIZE(OnDlgResize)
ON_CONTEXTMENU(OnShowMenu)
ON_CBN_SELCHANGE(IDC_THEME_APPLY_TO, OnApplyToComboChange)
//ON_SIZE(OnResize)
ON_GRID_BEFORE_EDIT(IDC_THEME_GRID, OnBeforeEdit)
ON_GRID_AFTER_EDIT(IDC_THEME_GRID, OnAfterEdit)
//ON_GRID_AFTER_SEL_CHANGE(IDC_THEME_GRID, OnAfterSelChange)
ON_GRID_SEL_CHANGE(IDC_THEME_GRID, OnSelChange)
ON_GRID_MOUSE_MOVE(IDC_THEME_GRID, OnMouseMove) //CPY 4/25/03 ADD_FILE_DATE and ADD_TOOLTIPS
ON_GRID_BEFORE_MOUSE_DOWN(IDC_THEME_GRID, OnBeforeMouseDown)
ON_GRID_DBLCLICK(IDC_THEME_GRID, OnDblClick)
//--- CPY 3/27/03 EDIT_THEME_CHANGE_TO_BUTTON
//ON_GRID_BUTTON_CLICK(IDC_THEME_GRID, OnEditTheme)
//---
ON_BN_CLICKED(IDC_THEME_SHOW_GRAPH_ONLY, OnShowThemeTypes)
ON_BN_CLICKED(IDC_THEME_APPLY, OnApplyButton)
ON_BN_CLICKED(IDC_THEME_UNDO, OnUndoApplyButton) //CPY 4/30/03 ADD_UNDO_APPLY
EVENTS_END
/////////////////////////////////////////////////
// Event handling ///////////////////////////////
/////////////////////////////////////////////////
BOOL OnInitDialog()
{
waitCursor junk;
ResizeDialog::OnInitDialog(IDC_THEME_GRID);
load_options();
m_cntrlSystemTheme = GetItem(IDC_THEME_CURRENT_SYSTEM);
m_cmbApplyTo = GetItem(IDC_THEME_APPLY_TO);
m_cmbApplyTo.SetCurSel(0);
m_themeList.Init(IDC_THEME_GRID, *this);
Button btnShowGraphTypes = GetItem(IDC_THEME_SHOW_GRAPH_ONLY);
btnShowGraphTypes.Check = m_bExcludeIncremenTypes;
load_themes_to_grid(false, false);
Button btnApply = GetItem(IDC_THEME_APPLY);
btnApply.Enable = false;
//--- CPY 4/30/03 ADD_UNDO_APPLY
undo_enabled(true, 0);
//---
GraphLayer gly = Project.ActiveLayer();
if(gly)
m_bActiveWinIsGraph = true;
else
m_bActiveWinIsGraph = false;
//CPY 8/20/03
OnDlgResize(0, GetDlgExtent(false), GetDlgExtent(true));
return TRUE;
}
BOOL OnDestroy()
{
save_options();
Worksheet wks(m_strWksName);
if(wks)
wks.Destroy();
m_strWksName.Empty();
if(m_strThemeFilename.IsFile())
DeleteFile(m_strThemeFilename);
m_strThemeFilename.Empty();
//m_trThemes.Reset();
return TRUE;
}
BOOL OnDlgResize(int nType, int cx, int cy)
{
uint nCntrlsRight[] = {
IDC_THEME_APPLY_GROUP,
IDC_THEME_APPLY_TO,
IDC_THEME_APPLY,
IDC_THEME_UNDO,
IDCANCEL,
0};
uint nCntrlsBottom[] = {
IDC_THEME_SHOW_GRAPH_ONLY,
0};
ResizeMoveControlsRightBottom(IDC_THEME_GRID, nCntrlsRight, nCntrlsBottom, cx, cy);
return TRUE;
}
BOOL OnShowThemeTypes(Control cntrl)
{
Button btnShowGraphTypes = GetItem(IDC_THEME_SHOW_GRAPH_ONLY);
m_bExcludeIncremenTypes = btnShowGraphTypes.Check;
load_themes_to_grid();
return TRUE;
}
//////////////////////////
// Add New Theme
//////////////////////////
BOOL OnAdd(Control cntrl)
{
string strFilename;
if(!theme_get_next_file_name(strFilename))
return false;
/// RVD 6/13/2003 QA70-4650 v7.0601 OBJECT_PROPERTY_ACCESS
//GraphPage gp;
//gp.Create(NULL, CREATE_HIDDEN);
//Tree trTheme;
//trTheme = gp.GetFormat();
//gp.Destroy();
Tree trTheme;
trTheme = Project.CreateNewTheme();
/// end OBJECT_PROPERTY_ACCESS
trTheme.Save(strFilename);
if(strFilename.IsFile())
{
//load_themes_to_grid();
add_theme_to_grid(strFilename);
LT_execute(STR_THEME_REMINDER_MSG_RENAME);
}
return TRUE;
}
BOOL OnDuplicate(Control cntrl)
{
string strSelThemeFile;
if(!getSelThemeFile(strSelThemeFile))
return TRUE; // nothing to do
string strFilename;
if(!getCopyOfThemeFileName(strFilename, strSelThemeFile))
return false;
if(FileCopy(strSelThemeFile, strFilename, FILE_ATTRIBUTE_NORMAL, true))
{
//load_themes_to_grid();
add_theme_to_grid(strFilename);
LT_execute(STR_THEME_REMINDER_MSG_RENAME);
}
return TRUE;
}
BOOL OnCombine(Control cntrl)
{
StringArray vstrThemeFilenames;
if( !getSelThemeFiles(vstrThemeFilenames) )
return TRUE; // nothing to do
string strFilename;
if(!getCombineThemeFileName(strFilename, vstrThemeFilenames[0]))
return false;
if( FileCopy(vstrThemeFilenames[0], strFilename, FILE_ATTRIBUTE_NORMAL, true) )
{
for(int ii=1; ii<vstrThemeFilenames.GetSize(); ii++)
{
if( !CombineThemes(strFilename, vstrThemeFilenames[ii]) )
return FALSE;
}
add_theme_to_grid(strFilename);
LT_execute(STR_THEME_REMINDER_MSG_RENAME);
}
return TRUE;
}
BOOL OnApplyToComboChange(Control cntrl)
{
enable_buttons();
return TRUE;
}
BOOL OnApplyButton(Control cntrl)
{
string strApplyFile;
if( !getSelThemeFile(strApplyFile) )
return TRUE; // nothing to do
BOOL bResult = theme_apply(getThemeApply(), strApplyFile);
undo_enabled(true, 1);
return bResult;
}
//---- CPY 4/30/03 ADD_UNDO_APPLY
BOOL OnUndoApplyButton(Control cntrl)
{
if(undo_enabled())
{
Project.Undo();
undo_enabled(true, -1);
}
return true;
}
//---- end
//////////////////////////
// Delete Theme
// move file into folder called "Deleted"
//////////////////////////
BOOL OnDelTheme(Control cntrl)
{
waitCursor junk;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -