1 /*$
2  Copyright (C) 2013-2020 Azel.
3 
4  This file is part of AzPainter.
5 
6  AzPainter is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  AzPainter is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 $*/
19 
20 /*****************************************
21  * ConfigData 関数
22  *
23  * (環境設定関連の処理)
24  *****************************************/
25 
26 #include <string.h>
27 
28 #include "mDef.h"
29 #include "mAppDef.h"
30 #include "mStr.h"
31 #include "mPath.h"
32 #include "mUtilFile.h"
33 #include "mDirEntry.h"
34 
35 #include "defConfig.h"
36 
37 
38 
39 /** 解放 */
40 
ConfigData_free()41 void ConfigData_free()
42 {
43 	ConfigData *p = APP_CONF;
44 
45 	if(p)
46 	{
47 		mStrFree(&p->strFontStyle_gui);
48 		mStrFree(&p->strFontStyle_dock);
49 		mStrFree(&p->strTempDir);
50 		mStrFree(&p->strTempDirProc);
51 		mStrFree(&p->strImageViewerDir);
52 		mStrFree(&p->strLayerFileDir);
53 		mStrFree(&p->strSelectFileDir);
54 		mStrFree(&p->strStampFileDir);
55 		mStrFree(&p->strUserTextureDir);
56 		mStrFree(&p->strUserBrushDir);
57 		mStrFree(&p->strLayerNameList);
58 		mStrFree(&p->strThemeFile);
59 
60 		mStrArrayFree(p->strRecentFile, CONFIG_RECENTFILE_NUM);
61 		mStrArrayFree(p->strRecentOpenDir, CONFIG_RECENTDIR_NUM);
62 		mStrArrayFree(p->strRecentSaveDir, CONFIG_RECENTDIR_NUM);
63 
64 		mFree(p->toolbar_btts);
65 		mFree(p->cursor_buf);
66 
67 		mFree(p);
68 	}
69 }
70 
71 /** ConfigData 作成 */
72 
ConfigData_new()73 mBool ConfigData_new()
74 {
75 	ConfigData *p;
76 
77 	p = (ConfigData *)mMalloc(sizeof(ConfigData), TRUE);
78 	if(!p)
79 		return FALSE;
80 	else
81 	{
82 		APP_CONF = p;
83 		return TRUE;
84 	}
85 }
86 
87 /** 作業用ディレクトリのデフォルトパスをセット (ini 読み込み後) */
88 
ConfigData_setTempDir_default()89 void ConfigData_setTempDir_default()
90 {
91 	char *path;
92 
93 	if(mStrIsEmpty(&APP_CONF->strTempDir))
94 	{
95 		path = mGetTempPath();
96 
97 		mStrSetText(&APP_CONF->strTempDir, path);
98 
99 		mFree(path);
100 	}
101 }
102 
103 /** 作業用ディレクトリ削除 */
104 
ConfigData_deleteTempDir()105 void ConfigData_deleteTempDir()
106 {
107 	mDirEntry *dir;
108 	mStr str = MSTR_INIT;
109 
110 	//パスが空ならなし
111 
112 	if(mStrIsEmpty(&APP_CONF->strTempDirProc)) return;
113 
114 	//残っているファイルを削除
115 
116 	dir = mDirEntryOpen(APP_CONF->strTempDirProc.buf);
117 	if(!dir) return;
118 
119 	while(mDirEntryRead(dir))
120 	{
121 		if(!mDirEntryIsDirectory(dir))
122 		{
123 			mDirEntryGetFileName_str(dir, &str, TRUE);
124 			mDeleteFile(str.buf);
125 		}
126 	}
127 
128 	mDirEntryClose(dir);
129 
130 	mStrFree(&str);
131 
132 	//ディレクトリを削除
133 
134 	mDeleteDir(APP_CONF->strTempDirProc.buf);
135 }
136 
137 /** 作業用ディレクトリ作成
138  *
139  * strTmpDirProc に実際のディレクトリパスセット。 */
140 
ConfigData_createTempDir()141 void ConfigData_createTempDir()
142 {
143 	char *name;
144 	mStr *pstr;
145 
146 	//パスセット先
147 
148 	pstr = &APP_CONF->strTempDirProc;
149 
150 	//'<tmp>/azpainter<process>'
151 
152 	mStrCopy(pstr,  &APP_CONF->strTempDir);
153 	mStrPathAdd(pstr, "azpainter");
154 
155 	name = mGetProcessTempName();
156 	mStrAppendText(pstr, name);
157 	mFree(name);
158 
159 	//存在していたら削除
160 
161 	if(mIsFileExist(pstr->buf, TRUE))
162 		ConfigData_deleteTempDir();
163 
164 	//作成 (失敗したらパスを空に)
165 
166 	if(!mCreateDir(pstr->buf))
167 		mStrFree(pstr);
168 }
169 
170 /** 作業用ディレクトリのパス取得
171  *
172  * @return FALSE でパスなし(作業用ディレクトリなし) */
173 
ConfigData_getTempPath(mStr * str,const char * add)174 mBool ConfigData_getTempPath(mStr *str,const char *add)
175 {
176 	if(mStrIsEmpty(&APP_CONF->strTempDirProc))
177 		return FALSE;
178 	else
179 	{
180 		mStrCopy(str, &APP_CONF->strTempDirProc);
181 		mStrPathAdd(str, add);
182 
183 		return TRUE;
184 	}
185 }
186 
187 /** 水彩プリセットをデフォルトにセット */
188 
ConfigData_waterPreset_default()189 void ConfigData_waterPreset_default()
190 {
191 	uint32_t dat[] = {
192 		800|(1000<<10)|(500<<20), 500|(900<<10)|(400<<20), 300|(600<<10)|(200<<20),
193 		100|(1000<<10)|(50<<20), 100|(100<<10)|(200<<20)
194 	};
195 
196 	memcpy(APP_CONF->water_preset, dat, CONFIG_WATER_PRESET_NUM * 4);
197 }
198