⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 themegallery.c

📁 图像处理的压缩算法
💻 C
📖 第 1 页 / 共 2 页
字号:
/*------------------------------------------------------------------------------*
 * 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 + -