root/BF_GUI_AttrDialog.cpp

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. FrameResized
  2. CalcWidths
  3. Load
  4. BF_GUI_AttrDialog_Run

   1 /*
   2 ===============================================
   3 Project:        BeFar
   4 File:           BF_GUI_AttrDialog.cpp
   5 Desc:           
   6 Author:         Baza and Nexus
   7 Created:        ??
   8 Changes:        
   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"  // global window pointer
  26 
  27 
  28 ////////////////////////////////////////
  29 //      Inner class definition
  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         /* set cols_info */
  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)    /* [previous][next][first][last][top][bottom][index][help] */
  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)    /* [previous][next][first][last][top][bottom][index][help] */
  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()    /* [previous][next][first][last][top][bottom][index][help] */
  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         /* open file */ 
 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         /* clear list */
 113         BL_List *ploList = new BL_List();       
 114         /* load attributes */
 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                 /* check buffer size  */
 126                 if(uAttrInfo.size>iBufMaxSize){
 127                         delete pcBuf;
 128                         iBufMaxSize = uAttrInfo.size;
 129                         pcBuf = (char*)malloc(iBufMaxSize);                                                                     
 130                 }
 131                 /* read attr */
 132                 oSrcFile.ReadAttr(pcName,uAttrInfo.type,0,
 133                         (void*)pcBuf,uAttrInfo.size);
 134                 /* make item */
 135                 poItem = new BF_GUI_ViewMenu_Item(pcName,"");
 136                 ploList->AddItem(poItem);               
 137                 /* add type_item */
 138                 BL_System_TypeToString(uAttrInfo.type,s);
 139                 po1 = new BF_GUI_ViewMenu_Item(s.String(),"");
 140                 poItem->loColItem.AddItem(po1);         
 141                 /* add value_item */
 142                 if(strcmp(pcName,"BEOS:TYPE")==0){
 143                         s=pcBuf;
 144                 }else{
 145                         switch(uAttrInfo.type){
 146                         case B_INT32_TYPE:
 147                                 //BL_Int_Swap(pcBuf);                   
 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)    /* [previous][next][first][last][top][bottom][index][help] */
 185 {
 186         /* disable panels */
 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         /* make message */
 196         //
 197         BMessage oMessage(BF_MSG_PANEL_FOCUS_AND_ENABLE);
 198         oMessage.AddPointer("bf_focus",po_Owner);       
 199         /* make dialog */
 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         /* make and insert file_name */
 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         /* make and insert list */
 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         /* close  menu */       
 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         /* finish */    
 225 
 226         poWinView->AddChild(poDialog ); 
 227 }

/* [previous][next][first][last][top][bottom][index][help] */