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