This source file includes following definitions.
- FrameResized
- CalcWidths
- Load
- BF_GUI_AttrDialog_Run
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <stdio.h>
14 #include <stdlib.h>
15 #include <string.h>
16 #include <File.h>
17 #include <fs_attr.h>
18
19 #include "BF_Dict.h"
20 #include "BF_Roster.h"
21 #include "BF_Msg.h"
22 #include "BF_GUI_Func.h"
23 #include "BF_GUI_DlgViews.h"
24 #include "BF_GUI_AttrDialog.h"
25 #include "BF_GUI_WinMain.h"
26
27
28
29
30 class BF_GUI_AttrDialog_Menu : public BF_GUI_DlgView_VCMenu {
31 public:
32 BF_GUI_AttrDialog_Menu(BRect & o_Rect,BF_Path & o_Path,BF_Node & o_Node);
33 virtual void FrameResized(float width, float height);
34 void CalcWidths(BRect & o_Rect);
35 private:
36 BF_Node *poNode;
37 BF_Path *poPath;
38
39 void Load();
40 };
41
42 #define COLTYPE_WIDTH 130
43
44
45 BF_GUI_AttrDialog_Menu::BF_GUI_AttrDialog_Menu(BRect & o_Rect,BF_Path & o_Path,BF_Node & o_Node)
46 :BF_GUI_DlgView_VCMenu(o_Rect,"attr_list",B_FOLLOW_ALL,new BL_List(),BF_GUI_DLGVIEW_VMENU_DEFAULT|BF_GUI_DLGVIEW_VMENU_SET_VSCROLLBAR,new BL_List())
47 {
48 poNode = &o_Node;
49 poPath = &o_Path;
50
51 SetSetupFont(&poSysSetup->oFontMono);
52
53
54 {
55 delete ploCol;
56 ploCol = new BL_List();
57 ploCol->AddItem( new BF_GUI_DlgView_VCMenu_Column(BF_DictAt(BF_DICT_NAME),0) );
58 ploCol->AddItem( new BF_GUI_DlgView_VCMenu_Column(BF_DictAt(BF_DICT_TYPE),0) );
59 ploCol->AddItem( new BF_GUI_DlgView_VCMenu_Column(BF_DictAt(BF_DICT_VALUE),0) );
60 CalcWidths(o_Rect);
61 }
62 Load();
63 }
64
65
66
67 void
68 BF_GUI_AttrDialog_Menu::FrameResized(float width, float height)
69 {
70 BRect oRect(Bounds());
71 CalcWidths(oRect);
72 Draw(oRect);
73 }
74
75
76
77 void
78 BF_GUI_AttrDialog_Menu::CalcWidths(BRect & o_Rect)
79 {
80 float fWidth = o_Rect.Width(),f1,f2;
81 f1 = fWidth - COLTYPE_WIDTH;
82 f2 = f1/2;
83 f1-=f2;
84
85 BF_GUI_DlgView_VCMenu_Column *po;
86 po = (BF_GUI_DlgView_VCMenu_Column*)ploCol->ItemAt(0);
87 po->fWidth = f1;
88 po = (BF_GUI_DlgView_VCMenu_Column*)ploCol->ItemAt(1);
89 po->fWidth = COLTYPE_WIDTH;
90 po = (BF_GUI_DlgView_VCMenu_Column*)ploCol->ItemAt(2);
91 po->fWidth = f1;
92 }
93
94
95
96 void
97 BF_GUI_AttrDialog_Menu::Load()
98 {
99 BL_String s;
100 status_t uRes;
101 s=poPath->Path();
102 s<<"/";
103 s<<poNode->sName;
104 BFile oSrcFile(s.String(),B_READ_ONLY);
105
106 uRes = oSrcFile.InitCheck();
107 if(B_OK!=uRes){
108 BL_System_TranslError(uRes,s);
109 BF_Dialog_Alert(BF_DictAt(BF_DICT_ERROR),BF_DictAt(BF_DICT_ATTRDLG_OPENERROR),NULL,s.String());
110 return;
111 }
112
113 BL_List *ploList = new BL_List();
114
115 char pcName[B_ATTR_NAME_LENGTH];
116 attr_info uAttrInfo;
117 uint32 iBufMaxSize=255;
118 char *pcBuf = (char*)malloc(iBufMaxSize);
119 BF_GUI_ViewMenu_Item *poItem,*po1;
120
121 oSrcFile.RewindAttrs();
122
123 while(B_OK==oSrcFile.GetNextAttrName(pcName)){
124 if(B_OK!=oSrcFile.GetAttrInfo(pcName,&uAttrInfo)) continue;
125
126 if(uAttrInfo.size>iBufMaxSize){
127 delete pcBuf;
128 iBufMaxSize = uAttrInfo.size;
129 pcBuf = (char*)malloc(iBufMaxSize);
130 }
131
132 oSrcFile.ReadAttr(pcName,uAttrInfo.type,0,
133 (void*)pcBuf,uAttrInfo.size);
134
135 poItem = new BF_GUI_ViewMenu_Item(pcName,"");
136 ploList->AddItem(poItem);
137
138 BL_System_TypeToString(uAttrInfo.type,s);
139 po1 = new BF_GUI_ViewMenu_Item(s.String(),"");
140 poItem->loColItem.AddItem(po1);
141
142 if(strcmp(pcName,"BEOS:TYPE")==0){
143 s=pcBuf;
144 }else{
145 switch(uAttrInfo.type){
146 case B_INT32_TYPE:
147
148 s=*(int32*)pcBuf;
149 break;
150 case B_UINT32_TYPE:
151 s=*(uint32*)pcBuf;
152 break;
153 case B_INT8_TYPE:{
154 int8 i=*(int8*)pcBuf;
155 s=i;
156 break;}
157 case B_UINT8_TYPE:{
158 uint8 i=*(uint8*)pcBuf;
159 s=i;
160 break;}
161 case B_BOOL_TYPE:{
162 bool b = *(bool*)pcBuf;
163 s=b?"true":"false";
164 break;}
165 case B_STRING_TYPE:
166 s=pcBuf;
167 break;
168 default:
169 s="?";
170 }
171 }
172 po1 = new BF_GUI_ViewMenu_Item(s.String(),"");
173 poItem->loColItem.AddItem(po1);
174
175 }
176 SortList(ploList);
177 SetList(ploList);
178 }
179
180
181
182
183
184 void BF_GUI_AttrDialog_Run(BF_Path & o_Path,BF_Node & o_Node,BView *po_Owner)
185 {
186
187 BF_GUI_Func_PanelsEnable(false);
188
189 BRect oRect(poWinView->Bounds()),oRect1;
190 oRect.left+=40;
191 oRect.right-=40;
192 oRect.top+=40;
193 oRect.bottom-=40;
194
195
196
197 BMessage oMessage(BF_MSG_PANEL_FOCUS_AND_ENABLE);
198 oMessage.AddPointer("bf_focus",po_Owner);
199
200 BF_GUI_Dialog *poDialog = new BF_GUI_Dialog(oRect,
201 BF_DictAt(BF_DICT_ATTRDLG_TITLE),"dialog",oMessage,BG_GUI_DIALOG_WINRESIZE_RESIZE_ALL);
202
203 poDialog->MoveToCenter( poWinView );
204
205
206 poDialog->LocalBounds(oRect);
207 oRect.bottom = oRect.top + poSysSetup->oFontToolView.fHeight;
208 BF_GUI_ViewText *poFileNameView = new BF_GUI_ViewText(oRect,"file_name",o_Node.sName.String(),
209 B_FOLLOW_TOP|B_FOLLOW_LEFT_RIGHT,0);
210 poDialog->AddChild(poFileNameView);
211
212 oRect.top = oRect.bottom+10;
213 poDialog->LocalBounds(oRect1);
214 oRect.bottom = oRect1.bottom-30;
215 BF_GUI_AttrDialog_Menu *poAttrMenu = new BF_GUI_AttrDialog_Menu(oRect,o_Path,o_Node);
216 poDialog->AddChild(poAttrMenu);
217
218 oRect.top = oRect.bottom+10;
219 oRect.bottom = oRect.top+poSysSetup->oFontToolView.fHeight+2;
220 BL_List *ploItem = new BL_List();
221 ploItem->AddItem(new BF_GUI_ViewMenu_Item(BF_DictAt(BF_DICT_CLOSE),""));
222 BF_GUI_DlgView_HMenu *poMenu = new BF_GUI_DlgView_HMenu(oRect,"menu",B_FOLLOW_BOTTOM|B_FOLLOW_LEFT_RIGHT,ploItem);
223 poDialog->AddChild(poMenu);
224
225
226 poWinView->AddChild(poDialog );
227 }