source: dev/trunk/ab5.0/abdev/ProjectEditor/DesignTheme.cpp @ 475

Last change on this file since 475 was 475, checked in by dai_9181, 16 years ago

構成管理を変更中・・・(いったんコミット)

File size: 4.3 KB
Line 
1#include "stdafx.h"
2
3#include "common.h"
4
5
6CDBTheme *pobj_DBTheme;
7
8
9CTheme::CTheme(char *path,char *name){
10    bActive=0;
11    lstrcpy(m_name,name);
12    if(path==0) return;
13
14    buffer=ReadBuffer(path);
15
16
17    //通常の文字色
18    GetRGBValue("rgbDefault",&TextColorInfo.rgbDefault);
19
20    //コメント文字色
21    GetRGBValue("rgbComment",&TextColorInfo.rgbComment);
22
23    //特殊ステートメント
24    GetRGBValue("rgbStatement",&TextColorInfo.rgbStatement);
25
26    //文字列色
27    GetRGBValue("rgbString",&TextColorInfo.rgbString);
28
29    //背景色(カーソル行)
30    GetRGBValue("rgbCursorBack",&TextColorInfo.rgbCursorBack);
31
32    //背景色(一般)
33    GetRGBValue("rgbBackground",&TextColorInfo.rgbBackground);
34
35    //背景画像
36    if(!GetStringValue("BackgroundImagePath",szBackgroundImagePath)) szBackgroundImagePath[0]=0;
37
38    HeapDefaultFree(buffer);
39}
40CTheme::CTheme(){
41    CTheme(0,THEMENAME_USER);
42}
43CTheme::~CTheme(){
44}
45
46void CTheme::save(){
47    buffer=(char *)HeapAlloc(hHeap,0,65536);
48    buffer[0]=0;
49
50
51    //通常の文字色
52    SetRGBValue("rgbDefault",TextColorInfo.rgbDefault);
53
54    //コメント文字色
55    SetRGBValue("rgbComment",TextColorInfo.rgbComment);
56
57    //特殊ステートメント
58    SetRGBValue("rgbStatement",TextColorInfo.rgbStatement);
59
60    //文字列色
61    SetRGBValue("rgbString",TextColorInfo.rgbString);
62
63    //背景色(カーソル行)
64    SetRGBValue("rgbCursorBack",TextColorInfo.rgbCursorBack);
65
66    //背景色(一般)
67    SetRGBValue("rgbBackground",TextColorInfo.rgbBackground);
68
69    //背景画像
70    SetStringValue("BackgroundImagePath",szBackgroundImagePath);
71
72    char path[MAX_PATH];
73    sprintf(path,"%sTheme\\%s",pj_editor_Dir,m_name);
74    if(!IsExistFile(path)){
75        CreateDirectory(path,NULL);
76    }
77
78    sprintf(path,"%sTheme\\%s\\design.ini",pj_editor_Dir,m_name);
79    WriteBuffer(path,buffer,lstrlen(buffer));
80
81    HeapDefaultFree(buffer);
82}
83
84
85CDBTheme::CDBTheme(){
86    hBackBmp=0;
87
88    iNum=0;
89    ppobj_Theme=(CTheme **)HeapAlloc(hHeap,0,1);
90
91    char temporary[MAX_PATH];
92    sprintf(temporary,"%sTheme\\*",pj_editor_Dir);
93
94    HANDLE hFind;
95    WIN32_FIND_DATA wfd;
96    hFind=FindFirstFile(temporary,&wfd);
97    if(hFind!=INVALID_HANDLE_VALUE){
98        do{
99            if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
100                if(!(lstrcmp(wfd.cFileName,".")==0||lstrcmp(wfd.cFileName,"..")==0)){
101                    //ディレクトリのとき
102                    sprintf(temporary,"%sTheme\\%s\\design.ini",pj_editor_Dir,wfd.cFileName);
103                    if(IsExistFile(temporary)){
104                        add(temporary,wfd.cFileName);
105                    }
106                }
107            }
108            else{
109                //ファイルのとき
110                //無視
111            }
112        }while(FindNextFile(hFind,&wfd));
113    }
114}
115CDBTheme::~CDBTheme(){
116    int i;
117    for(i=0;i<iNum;i++){
118        delete ppobj_Theme[i];
119    }
120    HeapDefaultFree(ppobj_Theme);
121
122    unlock();
123}
124
125CTheme *CDBTheme::dupli_check(char *name){
126    //重複チェック
127    int i;
128    for(i=0;i<iNum;i++){
129        if(lstrcmpi(ppobj_Theme[i]->m_name,name)==0){
130            return ppobj_Theme[i];
131        }
132    }
133    return 0;
134}
135
136CTheme *CDBTheme::add(char *path,char *name){
137    ppobj_Theme=(CTheme **)HeapReAlloc(hHeap,0,ppobj_Theme,(iNum+1)*sizeof(CTheme *));
138    ppobj_Theme[iNum]=new CTheme(path,name);
139    iNum++;
140
141    return ppobj_Theme[iNum-1];
142}
143void CDBTheme::ResetTheme_ToComboBox(HWND hCombo){
144    int i;
145    for(i=0;i<iNum;i++){
146        SendMessage(hCombo,CB_ADDSTRING,0,(LPARAM)ppobj_Theme[i]->m_name);
147    }
148
149    //選択する
150    for(i=0;i<iNum;i++){
151        if(lstrcmp(ppobj_Theme[i]->m_name,pobj_nv->szActiveTheme)==0){
152            i=SendMessage(hCombo,CB_FINDSTRINGEXACT,0,(LPARAM)ppobj_Theme[i]->m_name);
153            SendMessage(hCombo,CB_SETCURSEL,i,0);
154            break;
155        }
156    }
157}
158CTheme *CDBTheme::GetActiveTheme(){
159    int i;
160    for(i=0;i<iNum;i++){
161        if(lstrcmp(ppobj_Theme[i]->m_name,pobj_nv->szActiveTheme)==0){
162            return ppobj_Theme[i];
163        }
164    }
165    return 0;
166}
167
168void CDBTheme::lock(void){
169    CTheme *pobj_Theme;
170    pobj_Theme=GetActiveTheme();
171
172    if(pobj_Theme->szBackgroundImagePath[0]=='\0'){
173        hBackBmp=0;
174        return;
175    }
176
177    char szThemeDir[MAX_PATH];
178    sprintf(szThemeDir,"%sTheme\\%s\\",pj_editor_Dir,pobj_Theme->m_name);
179
180    char temporary[MAX_PATH];
181    lstrcpy(temporary,pobj_Theme->szBackgroundImagePath);
182    GetFullPath(temporary,szThemeDir);
183
184    hBackBmp=(HBITMAP)LoadImage(0,temporary,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
185
186    BITMAP Bitmap;
187    GetObject(hBackBmp,sizeof(BITMAP),&Bitmap);
188    sizeBackBmp.cx=Bitmap.bmWidth;
189    sizeBackBmp.cy=Bitmap.bmHeight;
190}
191void CDBTheme::unlock(void){
192    if(hBackBmp) DeleteObject(hBackBmp);
193}
Note: See TracBrowser for help on using the repository browser.