Patch level : 2.0 nopatch
Files correlati : ba0.exe Ricompilazione Demo : [ ] Commento : Aggiunto menu preferiti. Corretta gestione "Aggiungi a preferiti" nel caso di Expolrer mode git-svn-id: svn://10.65.10.50/trunk@11495 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									73159b6e3b
								
							
						
					
					
						commit
						8c42e5fa15
					
				| @ -87,6 +87,7 @@ protected: | |||||||
|    |    | ||||||
|   void load_preferences(); |   void load_preferences(); | ||||||
|   void save_preferences(); |   void save_preferences(); | ||||||
|  |   void update_preferred_tree(); | ||||||
|   void update_preferred(); |   void update_preferred(); | ||||||
|   void add_to_preferred(); |   void add_to_preferred(); | ||||||
|   void manage_preferred(); |   void manage_preferred(); | ||||||
| @ -345,7 +346,7 @@ bool TColor_mask::on_field_event(TOperable_field& f, TField_event e, long jolly) | |||||||
| TColor_mask::TColor_mask()  | TColor_mask::TColor_mask()  | ||||||
|            : TAutomask("ba0200a")  |            : TAutomask("ba0200a")  | ||||||
| {                | {                | ||||||
|   TConfig color(CONFIG_USER, "Colors"); |   TConfig color(CONFIG_GUI, "Colors"); | ||||||
|   _color = color.list_variables(); |   _color = color.list_variables(); | ||||||
|   set(213, CAMPI_SCAVATI ? "X" : ""); |   set(213, CAMPI_SCAVATI ? "X" : ""); | ||||||
|   set(215, ADVANCED_GRAPHICS ? "X" : ""); |   set(215, ADVANCED_GRAPHICS ? "X" : ""); | ||||||
| @ -433,7 +434,7 @@ void TColor_mask::update() | |||||||
| 
 | 
 | ||||||
| void TColor_mask::save_colors() | void TColor_mask::save_colors() | ||||||
| { | { | ||||||
|   TConfig colors(CONFIG_USER, "Colors"); |   TConfig colors(CONFIG_GUI, "Colors"); | ||||||
|   FOR_EACH_ASSOC_STRING(_color, obj, key, str) |   FOR_EACH_ASSOC_STRING(_color, obj, key, str) | ||||||
|     colors.set(key, str); |     colors.set(key, str); | ||||||
|   colors.set("Campi3D", get_bool(213) ? "X" : ""); |   colors.set("Campi3D", get_bool(213) ? "X" : ""); | ||||||
| @ -927,13 +928,14 @@ bool TMenu_application::create() | |||||||
|   if (!test_programs()) |   if (!test_programs()) | ||||||
|     return FALSE; |     return FALSE; | ||||||
| 
 | 
 | ||||||
|    |  | ||||||
|   if (!_menu.ok()) |   if (!_menu.ok()) | ||||||
|   { |   { | ||||||
|     TWait_cursor hourglass; |     TWait_cursor hourglass; | ||||||
|     TFilename menu = _name; |     TFilename menu = _name; | ||||||
|     menu.ext("men"); |     menu.ext("men"); | ||||||
|     _menu.read(menu); |     _menu.read(menu); | ||||||
|  |     update_preferred_tree(); | ||||||
|  | 
 | ||||||
|     TSkeleton_application::create(); |     TSkeleton_application::create(); | ||||||
|   } |   } | ||||||
|    |    | ||||||
| @ -1068,7 +1070,7 @@ bool TMenu_application::choose_editors() | |||||||
| {  | {  | ||||||
|   disable_menu_item(OPTIONS_MENU); |   disable_menu_item(OPTIONS_MENU); | ||||||
|    |    | ||||||
|   TConfig link(CONFIG_USER, "Link"); |   TConfig link(CONFIG_GUI, "Link"); | ||||||
|    |    | ||||||
|   TMask* msk = new TMask("ba0300a"); |   TMask* msk = new TMask("ba0300a"); | ||||||
|   TMask& m = *msk; |   TMask& m = *msk; | ||||||
| @ -1322,31 +1324,62 @@ void TMenu_application::update_preferred() | |||||||
| 
 | 
 | ||||||
|   xvt_menu_set_tree(TASK_WIN, mm);     |   xvt_menu_set_tree(TASK_WIN, mm);     | ||||||
|   xvt_menu_update(TASK_WIN); |   xvt_menu_update(TASK_WIN); | ||||||
|    |  | ||||||
|   xvt_res_free_menu_tree(mm); |   xvt_res_free_menu_tree(mm); | ||||||
|  | 
 | ||||||
|  |   update_preferred_tree(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void TMenu_application::update_preferred_tree() | ||||||
|  | { | ||||||
|  |   TSubmenu* pref = _menu.find("MENU_PREFERITI"); | ||||||
|  |   if (pref != NULL && _preferred.items() > 0) | ||||||
|  |   { | ||||||
|  |     TToken_string node(16, '.'); | ||||||
|  |     pref->destroy_items(); | ||||||
|  |     FOR_EACH_ARRAY_ROW(_preferred, i, row) | ||||||
|  |     { | ||||||
|  |       int slash = row->rfind('/'); | ||||||
|  |       if (slash < 0) | ||||||
|  |         slash = row->rfind(row->separator()); | ||||||
|  |       node = row->mid(slash+1); | ||||||
|  |       if (node.items() == 2) | ||||||
|  |       { | ||||||
|  |         const char* sub = node.get(0); | ||||||
|  |         TSubmenu* sm = _menu.find(sub); | ||||||
|  |         if (sm != NULL) | ||||||
|  |         { | ||||||
|  |           const int num = node.get_int(1); | ||||||
|  |           pref->add(new TMenuitem(sm->item(num))); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }   | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void TMenu_application::load_preferences() | void TMenu_application::load_preferences() | ||||||
| { | { | ||||||
|   TConfig cfg(CONFIG_USER, "ba0"); |   TConfig cfg(CONFIG_GUI, "ba0"); | ||||||
|   _tree_view = cfg.get_int("TreeView"); |   _tree_view = cfg.get_int("TreeView"); | ||||||
| 
 | 
 | ||||||
|   _preferred.destroy(); |   _preferred.destroy(); | ||||||
|   TToken_string row; |   TToken_string row; | ||||||
|   for (int i = 0; ; i++) | 
 | ||||||
|  |   int i; | ||||||
|  |   for (i = 0; ; i++) | ||||||
|   { |   { | ||||||
|     row = cfg.get("Preferred", NULL, i); |     row = cfg.get("Preferred", NULL, i); | ||||||
|     if (row.empty_items()) |     if (row.empty_items()) | ||||||
|       break; |       break; | ||||||
|     _preferred.add(row); |     _preferred.add(row); | ||||||
|   }   |   }   | ||||||
|  |    | ||||||
|   if (i > 0) |   if (i > 0) | ||||||
|     update_preferred(); |     update_preferred(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void TMenu_application::save_preferences() | void TMenu_application::save_preferences() | ||||||
| { | { | ||||||
|   TConfig cfg(CONFIG_USER, "ba0"); |   TConfig cfg(CONFIG_GUI, "ba0"); | ||||||
|   for (int i = 0; i < _preferred.items(); i++) |   for (int i = 0; i < _preferred.items(); i++) | ||||||
|     cfg.set("Preferred", _preferred.row(i), NULL, TRUE, i); |     cfg.set("Preferred", _preferred.row(i), NULL, TRUE, i); | ||||||
|   cfg.set("Preferred", "", NULL, TRUE, i); |   cfg.set("Preferred", "", NULL, TRUE, i); | ||||||
| @ -1363,7 +1396,10 @@ void TMenu_application::add_to_preferred() | |||||||
|   if (_preferred.items() < maxpref) |   if (_preferred.items() < maxpref) | ||||||
|   { |   { | ||||||
|     TToken_string tok; |     TToken_string tok; | ||||||
|     if (_tree_view != 0) | 
 | ||||||
|  |     switch (_tree_view) | ||||||
|  |     { | ||||||
|  |     case 1: | ||||||
|       {                   |       {                   | ||||||
|         TTree_field& tf = _mask->tfield(DLG_TREE);             |         TTree_field& tf = _mask->tfield(DLG_TREE);             | ||||||
|         tf.goto_selected(); |         tf.goto_selected(); | ||||||
| @ -1371,7 +1407,14 @@ void TMenu_application::add_to_preferred() | |||||||
|         TString id; tf.tree()->curr_id(id); |         TString id; tf.tree()->curr_id(id); | ||||||
|         tok.add(id); |         tok.add(id); | ||||||
|       }   |       }   | ||||||
|     else |       break; | ||||||
|  |     case 2: | ||||||
|  |       { | ||||||
|  |      		TMenulist_field& mf = (TMenulist_field&)_mask->field(DLG_LIST); | ||||||
|  |         mf.curr_item(tok); | ||||||
|  |       } | ||||||
|  |       break; | ||||||
|  |     default: | ||||||
|       {                        |       {                        | ||||||
|         const TMask_field& butt = _mask->focus_field(); |         const TMask_field& butt = _mask->focus_field(); | ||||||
|         const int index = butt.dlg() - 101; |         const int index = butt.dlg() - 101; | ||||||
| @ -1383,11 +1426,13 @@ void TMenu_application::add_to_preferred() | |||||||
|           tok << '.' << index; |           tok << '.' << index; | ||||||
|         }   |         }   | ||||||
|       } |       } | ||||||
|     if (!tok.empty()) |       break; | ||||||
|  |     } | ||||||
|  |     if (tok.not_empty() && _preferred.find(tok) < 0) | ||||||
|     { |     { | ||||||
|       _preferred.add(tok); |       _preferred.add(tok); | ||||||
|       update_preferred(); |  | ||||||
|       save_preferences(); |       save_preferences(); | ||||||
|  |       update_preferred(); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   else |   else | ||||||
| @ -1480,8 +1525,8 @@ void TMenu_application::manage_preferred() | |||||||
|     const int old_tv = _tree_view; |     const int old_tv = _tree_view; | ||||||
|     _tree_view = m->get_int(F_PREF_TREE); |     _tree_view = m->get_int(F_PREF_TREE); | ||||||
| 
 | 
 | ||||||
|     update_preferred(); |  | ||||||
|     save_preferences(); |     save_preferences(); | ||||||
|  |     update_preferred(); | ||||||
| 
 | 
 | ||||||
|     if (_tree_view != old_tv && _mask != NULL) |     if (_tree_view != old_tv && _mask != NULL) | ||||||
| 		{ | 		{ | ||||||
|  | |||||||
| @ -102,11 +102,19 @@ public: | |||||||
| ///////////////////////////////////////////////////////////
 | ///////////////////////////////////////////////////////////
 | ||||||
| 
 | 
 | ||||||
| TMenuitem::TMenuitem(TSubmenu* sm)  | TMenuitem::TMenuitem(TSubmenu* sm)  | ||||||
|          : _submenu(sm),  |          : _submenu(sm), _exist(-1), _firm(FALSE),  | ||||||
|            _exist(-1), _firm(FALSE), _password(FALSE), _reloadmenu(FALSE), |            _password(FALSE), _reloadmenu(FALSE), | ||||||
|            _color(NORMAL_COLOR), _icon(0) |            _color(NORMAL_COLOR), _icon(0) | ||||||
| { } | { } | ||||||
| 
 | 
 | ||||||
|  | TMenuitem::TMenuitem(const TMenuitem& mi)  | ||||||
|  |          : _submenu(mi._submenu), _exist(mi._exist), _firm(mi._firm),  | ||||||
|  |            _password(mi._password), _reloadmenu(mi._reloadmenu), | ||||||
|  |            _color(mi._color), _icon(mi._icon), _enabled(mi._enabled), | ||||||
|  |            _caption(mi._caption), _action(mi._action), _type(mi._type) | ||||||
|  | { } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| TMenu& TMenuitem::menu() const | TMenu& TMenuitem::menu() const | ||||||
| { return _submenu->menu(); } | { return _submenu->menu(); } | ||||||
| 
 | 
 | ||||||
| @ -363,7 +371,7 @@ void TSubmenu::read(TScanner& scanner) | |||||||
|     if (line.compare("Item", 4, TRUE) == 0) |     if (line.compare("Item", 4, TRUE) == 0) | ||||||
|     { |     { | ||||||
|       TMenuitem* item = new TMenuitem(this); |       TMenuitem* item = new TMenuitem(this); | ||||||
|       _items.add(item); |       add(item); | ||||||
|       item->create(line); |       item->create(line); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @ -392,6 +400,18 @@ int TSubmenu::find_string(const TString& str) const | |||||||
|   return found ? 0 : -1; |   return found ? 0 : -1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | int TSubmenu::find(const TMenuitem& it) const | ||||||
|  | { | ||||||
|  |   int i; | ||||||
|  |   for (i = items()-1; i >= 0; i--)  | ||||||
|  |   {  | ||||||
|  |     const TMenuitem& mi = item(i); | ||||||
|  |     if (mi.action() == it.action()) | ||||||
|  |       break; | ||||||
|  |   } | ||||||
|  |   return i; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| TImage& TSubmenu::image() const  | TImage& TSubmenu::image() const  | ||||||
| {  | {  | ||||||
| 	return menu().image(picture());  | 	return menu().image(picture());  | ||||||
|  | |||||||
| @ -63,6 +63,7 @@ public: | |||||||
|   void create(const char* t); |   void create(const char* t); | ||||||
|    |    | ||||||
|   TMenuitem(TSubmenu* sm); |   TMenuitem(TSubmenu* sm); | ||||||
|  |   TMenuitem(const TMenuitem& mi); | ||||||
|   virtual ~TMenuitem() { } |   virtual ~TMenuitem() { } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -85,6 +86,10 @@ public: | |||||||
|   TMenuitem& item(int i) { return (TMenuitem&)_items[i]; } |   TMenuitem& item(int i) { return (TMenuitem&)_items[i]; } | ||||||
|   const TMenuitem& item(int i) const { return (const TMenuitem&)_items[i]; }                                                           |   const TMenuitem& item(int i) const { return (const TMenuitem&)_items[i]; }                                                           | ||||||
|   const TMenuitem& operator[](int i) const { return item(i); } |   const TMenuitem& operator[](int i) const { return item(i); } | ||||||
|  |   int find(const TMenuitem& mi) const; | ||||||
|  | 
 | ||||||
|  |   void destroy_items() { _items.destroy(); } | ||||||
|  |   void add(TMenuitem* mi) { _items.add(mi); } | ||||||
|    |    | ||||||
|   const TString& name() const { return _name; } |   const TString& name() const { return _name; } | ||||||
|   const TString& caption() const { return _caption; } |   const TString& caption() const { return _caption; } | ||||||
|  | |||||||
| @ -362,18 +362,18 @@ TObject* TMenulist_images::key2obj(const char* key) | |||||||
| 
 | 
 | ||||||
| 		const int w = image.width(); | 		const int w = image.width(); | ||||||
| 		const int h = image.height(); | 		const int h = image.height(); | ||||||
| 		const int radius = 3*min(w, h)/4; |     const int radius = min(w, h) / 4; | ||||||
| 		 |  | ||||||
| 		const clock_t start_timer = clock(); | 		const clock_t start_timer = clock(); | ||||||
| 		for (int y = h-1; y >= 0; y--) | 		for (int y = h-1; y >= 0; y--) | ||||||
| 		{ | 		{ | ||||||
| 			for (int x = w-1; x >= 0; x--) | 			for (int x = w-1; x >= 0; x--) | ||||||
| 			{ | 			{ | ||||||
| 				const int r = fast_hypot(x-w/2, y-h/2); | 				const int r = fast_hypot(x-w/2, y-h/2); | ||||||
| 				if (r < radius) | 				if (r > radius) | ||||||
|  |         { | ||||||
|  |           const double perc = 1.0 - (double(r - radius) / (radius*1.5)); | ||||||
|  |           if (perc >= 0.0) | ||||||
|           { |           { | ||||||
|   		    // const double perc = 0.7 - (0.7 * r / radius);
 |  | ||||||
|           const double perc = 0.5 - (0.5 * r / radius); |  | ||||||
| 				    COLOR col = image.get_pixel(x, y); | 				    COLOR col = image.get_pixel(x, y); | ||||||
| 				    COLOR bri = blend_colors(col, NORMAL_BACK_COLOR, perc); | 				    COLOR bri = blend_colors(col, NORMAL_BACK_COLOR, perc); | ||||||
| 				    image.set_pixel(x, y, bri); | 				    image.set_pixel(x, y, bri); | ||||||
| @ -382,6 +382,7 @@ TObject* TMenulist_images::key2obj(const char* key) | |||||||
|             image.set_pixel(x, y, NORMAL_BACK_COLOR); |             image.set_pixel(x, y, NORMAL_BACK_COLOR); | ||||||
|         } |         } | ||||||
| 			} | 			} | ||||||
|  | 		} | ||||||
|     const clock_t stop_timer = clock()-start_timer; |     const clock_t stop_timer = clock()-start_timer; | ||||||
| 
 | 
 | ||||||
| 		RCT rct; xvt_vobj_get_client_rect(_win, &rct); | 		RCT rct; xvt_vobj_get_client_rect(_win, &rct); | ||||||
| @ -429,6 +430,7 @@ protected: | |||||||
|   void select(int s, int direction); |   void select(int s, int direction); | ||||||
| 
 | 
 | ||||||
| public: | public: | ||||||
|  |   void curr_item(TToken_string& id) const; | ||||||
| 	void set_menu(TMenu_tree& mt); | 	void set_menu(TMenu_tree& mt); | ||||||
| 
 | 
 | ||||||
|   TMenulist_window(int x, int y, int dx, int dy, WINDOW parent, TMenulist_field* owner); |   TMenulist_window(int x, int y, int dx, int dy, WINDOW parent, TMenulist_field* owner); | ||||||
| @ -528,6 +530,12 @@ void TMenulist_window::click_on(int index) | |||||||
|     const TMenuitem& mi = (const TMenuitem&)_sorted[index]; |     const TMenuitem& mi = (const TMenuitem&)_sorted[index]; | ||||||
| 		if (mi.enabled()) | 		if (mi.enabled()) | ||||||
| 		{ | 		{ | ||||||
|  |       if (xvt_vobj_get_attr(NULL_WIN, ATTR_SPEECH_MODE) & (1<<7)) | ||||||
|  |       { | ||||||
|  |         const TString& str = mi.caption(); | ||||||
|  |         if (str.find("..") < 0) | ||||||
|  |           xvt_dm_post_speech(str, 7, TRUE); | ||||||
|  |       } | ||||||
| 			if (mi.is_submenu()) | 			if (mi.is_submenu()) | ||||||
| 			{ | 			{ | ||||||
| 				if (index == 0 && _can_go_back)  // Sù di un livello
 | 				if (index == 0 && _can_go_back)  // Sù di un livello
 | ||||||
| @ -563,6 +571,8 @@ void TMenulist_window::click_on(int index) | |||||||
| 			} | 			} | ||||||
| 			set_focus(); | 			set_focus(); | ||||||
| 		} | 		} | ||||||
|  |     else | ||||||
|  |       xvt_sys_beep(1); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -683,6 +693,19 @@ void TMenulist_window::synchronize_buddy_tree() const | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void TMenulist_window::curr_item(TToken_string& id) const  | ||||||
|  | {  | ||||||
|  |   if (_selected >= 0 && _selected < _sorted.items()) | ||||||
|  |   { | ||||||
|  |     const TMenuitem& item = (const TMenuitem&)_sorted[_selected]; | ||||||
|  |     const TSubmenu& sm = item.submenu(); | ||||||
|  |     const int index = sm.find(item); | ||||||
|  |     id = item.caption(); | ||||||
|  |     id.add(sm.name()); | ||||||
|  |     id << '.' << index; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void TMenulist_window::set_menu(TMenu_tree& tree) | void TMenulist_window::set_menu(TMenu_tree& tree) | ||||||
| { | { | ||||||
| 	_tree = &tree; | 	_tree = &tree; | ||||||
| @ -761,3 +784,9 @@ void TMenulist_field::set_menu(TMenu_tree& mt) | |||||||
|   TMenulist_window& w = (TMenulist_window&)win(); |   TMenulist_window& w = (TMenulist_window&)win(); | ||||||
| 	w.set_menu(mt); | 	w.set_menu(mt); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | void TMenulist_field::curr_item(TToken_string& id) const | ||||||
|  | { | ||||||
|  |   TMenulist_window& w = (TMenulist_window&)win(); | ||||||
|  |   w.curr_item(id); | ||||||
|  | } | ||||||
|  | |||||||
| @ -63,6 +63,7 @@ protected: // TWindowed_field | |||||||
| public: | public: | ||||||
|   void set_menu(TMenu_tree& mt); |   void set_menu(TMenu_tree& mt); | ||||||
| 	void create(short dlg, int x, int y, int dx, int dy); | 	void create(short dlg, int x, int y, int dx, int dy); | ||||||
|  |   void curr_item(TToken_string& id) const; | ||||||
|     |     | ||||||
|   TMenulist_field(TMask* m) : TWindowed_field(m) { } |   TMenulist_field(TMask* m) : TWindowed_field(m) { } | ||||||
|   virtual ~TMenulist_field() { } |   virtual ~TMenulist_field() { } | ||||||
|  | |||||||
| @ -37,8 +37,7 @@ HIDDEN void encode_string(char* dninst_key, char* data) | |||||||
| 
 | 
 | ||||||
| HIDDEN bool build_dninst(const TFilename& name) | HIDDEN bool build_dninst(const TFilename& name) | ||||||
| { | { | ||||||
|   TFilename src = name; src.ext("txt"); |   ifstream inf("dninst.txt", ios::in | ios::nocreate); | ||||||
|   ifstream inf(src, ios::in | ios::nocreate); |  | ||||||
|   if (inf.good()) |   if (inf.good()) | ||||||
|   {                    |   {                    | ||||||
|     char dninst_key[8] = ""; |     char dninst_key[8] = ""; | ||||||
|  | |||||||
| @ -8,6 +8,7 @@ Item_02 = "Amministrazione", <cgarea.men>, "", 10212 | |||||||
| Item_03 = "Acquisti e vendite", <vearea.men>, "", 10211 | Item_03 = "Acquisti e vendite", <vearea.men>, "", 10211 | ||||||
| Item_04 = "Magazzino e Produzione", <mgarea.men>, "", 10215 | Item_04 = "Magazzino e Produzione", <mgarea.men>, "", 10215 | ||||||
| Item_05 = "Manutenzione", [MENU_015], "", 10210 | Item_05 = "Manutenzione", [MENU_015], "", 10210 | ||||||
|  | Item_06 = "Preferiti", [MENU_PREFERITI], "", 10216 | ||||||
| 
 | 
 | ||||||
| [MENU_001] | [MENU_001] | ||||||
| Caption = "Gestione Anagrafiche" | Caption = "Gestione Anagrafiche" | ||||||
| @ -95,3 +96,10 @@ Item_04 = "Attivazione moduli", "ba1 -4", "" | |||||||
| Item_05 = "Installazione moduli", "ba1 -6", "" | Item_05 = "Installazione moduli", "ba1 -6", "" | ||||||
| Item_06 = "Creazione dischi di installazione", "ba1 -5", "" | Item_06 = "Creazione dischi di installazione", "ba1 -5", "" | ||||||
| Item_07 = "Backup", "ba2 -1", "", 10213 | Item_07 = "Backup", "ba2 -1", "", 10213 | ||||||
|  | 
 | ||||||
|  | [MENU_PREFERITI] | ||||||
|  | Caption = "Preferiti" | ||||||
|  | Picture = <ba00> | ||||||
|  | Module  = 0 | ||||||
|  | Flags   = "" | ||||||
|  | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user