self.org_cfg_data_bin = None\r
self.in_left = state()\r
self.in_right = state()\r
+ self.search_text = ''\r
+ self.binseg_dict = {}\r
\r
# Check if current directory contains a file with a .yaml extension\r
# if not default self.last_dir to a Platform directory where it is\r
\r
root.geometry("1200x800")\r
\r
+ # Search string\r
+ fram = tkinter.Frame(root)\r
+ # adding label to search box\r
+ tkinter.Label(fram, text='Text to find:').pack(side=tkinter.LEFT)\r
+ # adding of single line text box\r
+ self.edit = tkinter.Entry(fram, width=30)\r
+ # positioning of text box\r
+ self.edit.pack(\r
+ side=tkinter.LEFT, fill=tkinter.BOTH, expand=1, padx=(4, 4))\r
+ # setting focus\r
+ self.edit.focus_set()\r
+ # adding of search button\r
+ butt = tkinter.Button(fram, text='Search', relief=tkinter.GROOVE,\r
+ command=self.search_bar)\r
+ butt.pack(side=tkinter.RIGHT, padx=(4, 4))\r
+ fram.pack(side=tkinter.TOP, anchor=tkinter.SE)\r
+\r
paned = ttk.Panedwindow(root, orient=tkinter.HORIZONTAL)\r
paned.pack(fill=tkinter.BOTH, expand=True, padx=(4, 4))\r
\r
"Unsupported file '%s' !" % path)\r
return\r
\r
+ def search_bar(self):\r
+ # get data from text box\r
+ self.search_text = self.edit.get()\r
+ # Clear the page and update it according to search value\r
+ self.refresh_config_data_page()\r
+\r
def set_object_name(self, widget, name):\r
self.conf_list[id(widget)] = name\r
\r
'units')\r
\r
def update_visibility_for_widget(self, widget, args):\r
-\r
visible = True\r
item = self.get_config_data_item_from_widget(widget, True)\r
if item is None:\r
return visible\r
elif not item:\r
return visible\r
-\r
+ if self.cfg_data_obj.binseg_dict:\r
+ str_split = item['path'].split('.')\r
+ if self.cfg_data_obj.binseg_dict[str_split[-2]] == -1:\r
+ visible = False\r
+ widget.grid_remove()\r
+ return visible\r
result = 1\r
if item['condition']:\r
result = self.evaluate_condition(item)\r
widget.grid()\r
widget.configure(state='normal')\r
\r
+ if visible and self.search_text != '':\r
+ name = item['name']\r
+ if name.lower().find(self.search_text.lower()) == -1:\r
+ visible = False\r
+ widget.grid_remove()\r
+\r
return visible\r
\r
def update_widgets_visibility_on_page(self):\r
self.fsp_version = '2.X'\r
else:\r
self.fsp_version = '1.X'\r
+\r
return gen_cfg_data\r
\r
def about(self):\r
return None\r
else:\r
path = name\r
+\r
item = self.cfg_data_obj.get_item_by_path(path)\r
return item\r
\r
self._mode = ''\r
self._debug = False\r
self._macro_dict = {}\r
+ self.bin_offset = []\r
+ self.binseg_dict = {}\r
self.initialize()\r
\r
def initialize(self):\r
if 'indx' not in cfgs:\r
return\r
act_cfg = self.get_item_by_index(cfgs['indx'])\r
- if force or act_cfg['value'] == '':\r
+ actual_offset = act_cfg['offset'] - struct_info['offset']\r
+ set_value = True\r
+ for each in self.bin_offset:\r
+ if actual_offset in range(each[0], (each[0] + each[2]) * 8):\r
+ if each[1] < 0:\r
+ set_value = False\r
+ if set_value and force or act_cfg['value'] == '':\r
value = get_bits_from_bytes(full_bytes,\r
- act_cfg['offset'] -\r
- struct_info['offset'],\r
+ actual_offset,\r
act_cfg['length'])\r
act_val = act_cfg['value']\r
if act_val == '':\r
"in binary, the 1st instance will be used !"\r
% seg[0])\r
bin_segs.append([seg[0], pos, seg[2]])\r
+ self.binseg_dict[seg[0]] = pos\r
else:\r
- raise Exception("Could not find '%s' in binary !"\r
- % seg[0])\r
+ bin_segs.append([seg[0], -1, seg[2]])\r
+ self.binseg_dict[seg[0]] = -1\r
+ continue\r
\r
return bin_segs\r
\r
# get cfg bin length\r
cfg_bins = bytearray()\r
bin_segs = self.get_bin_segment(bin_data)\r
+ Dummy_offset = 0\r
for each in bin_segs:\r
- cfg_bins.extend(bin_data[each[1]:each[1] + each[2]])\r
+ if each[1] != -1:\r
+ self.bin_offset.append([Dummy_offset, each[1], each[2]])\r
+ cfg_bins.extend(bin_data[each[1]:each[1] + each[2]])\r
+ else:\r
+ string = each[0] + ' is not availabe.'\r
+ messagebox.showinfo('', string)\r
+ self.bin_offset.append([Dummy_offset, each[1], each[2]])\r
+ cfg_bins.extend(bytearray(each[2]))\r
+ Dummy_offset += each[2]\r
return cfg_bins\r
\r
def save_current_to_bin(self):\r
cfg_off = 0\r
for each in bin_segs:\r
length = each[2]\r
- bin_data[each[1]:each[1] + length] = cfg_bins[cfg_off:\r
- cfg_off\r
- + length]\r
- cfg_off += length\r
- print('Patched the loaded binary successfully !')\r
+ if each[1] != -1:\r
+ bin_data[each[1]:each[1] + length] = cfg_bins[cfg_off:\r
+ cfg_off\r
+ + length]\r
+ cfg_off += length\r
+ else:\r
+ cfg_off += length\r
\r
+ print('Patched the loaded binary successfully !')\r
return bin_data\r
\r
def load_default_from_bin(self, bin_data):\r
if not top:\r
raise Exception("Invalid configuration path '%s' !"\r
% path)\r
+\r
return self.get_field_value(top)\r
\r
def generate_binary(self, bin_file_name, path=''):\r