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
					
				
							
								
								
									
										103
									
								
								ba/ba0100.cpp
									
									
									
									
									
								
							
							
						
						
									
										103
									
								
								ba/ba0100.cpp
									
									
									
									
									
								
							| @ -87,6 +87,7 @@ protected: | ||||
|    | ||||
|   void load_preferences(); | ||||
|   void save_preferences(); | ||||
|   void update_preferred_tree(); | ||||
|   void update_preferred(); | ||||
|   void add_to_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()  | ||||
|            : TAutomask("ba0200a")  | ||||
| {                | ||||
|   TConfig color(CONFIG_USER, "Colors"); | ||||
|   TConfig color(CONFIG_GUI, "Colors"); | ||||
|   _color = color.list_variables(); | ||||
|   set(213, CAMPI_SCAVATI ? "X" : ""); | ||||
|   set(215, ADVANCED_GRAPHICS ? "X" : ""); | ||||
| @ -433,7 +434,7 @@ void TColor_mask::update() | ||||
| 
 | ||||
| void TColor_mask::save_colors() | ||||
| { | ||||
|   TConfig colors(CONFIG_USER, "Colors"); | ||||
|   TConfig colors(CONFIG_GUI, "Colors"); | ||||
|   FOR_EACH_ASSOC_STRING(_color, obj, key, str) | ||||
|     colors.set(key, str); | ||||
|   colors.set("Campi3D", get_bool(213) ? "X" : ""); | ||||
| @ -927,13 +928,14 @@ bool TMenu_application::create() | ||||
|   if (!test_programs()) | ||||
|     return FALSE; | ||||
| 
 | ||||
|    | ||||
|   if (!_menu.ok()) | ||||
|   { | ||||
|     TWait_cursor hourglass; | ||||
|     TFilename menu = _name; | ||||
|     menu.ext("men"); | ||||
|     _menu.read(menu); | ||||
|     update_preferred_tree(); | ||||
| 
 | ||||
|     TSkeleton_application::create(); | ||||
|   } | ||||
|    | ||||
| @ -1068,7 +1070,7 @@ bool TMenu_application::choose_editors() | ||||
| {  | ||||
|   disable_menu_item(OPTIONS_MENU); | ||||
|    | ||||
|   TConfig link(CONFIG_USER, "Link"); | ||||
|   TConfig link(CONFIG_GUI, "Link"); | ||||
|    | ||||
|   TMask* msk = new TMask("ba0300a"); | ||||
|   TMask& m = *msk; | ||||
| @ -1322,31 +1324,62 @@ void TMenu_application::update_preferred() | ||||
| 
 | ||||
|   xvt_menu_set_tree(TASK_WIN, mm);     | ||||
|   xvt_menu_update(TASK_WIN); | ||||
|    | ||||
|   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() | ||||
| { | ||||
|   TConfig cfg(CONFIG_USER, "ba0"); | ||||
|   TConfig cfg(CONFIG_GUI, "ba0"); | ||||
|   _tree_view = cfg.get_int("TreeView"); | ||||
| 
 | ||||
|   _preferred.destroy(); | ||||
|   TToken_string row; | ||||
|   for (int i = 0; ; i++) | ||||
| 
 | ||||
|   int i; | ||||
|   for (i = 0; ; i++) | ||||
|   { | ||||
|     row = cfg.get("Preferred", NULL, i); | ||||
|     if (row.empty_items()) | ||||
|       break; | ||||
|     _preferred.add(row); | ||||
|   }   | ||||
|    | ||||
|   if (i > 0) | ||||
|     update_preferred(); | ||||
| } | ||||
| 
 | ||||
| void TMenu_application::save_preferences() | ||||
| { | ||||
|   TConfig cfg(CONFIG_USER, "ba0"); | ||||
|   TConfig cfg(CONFIG_GUI, "ba0"); | ||||
|   for (int i = 0; i < _preferred.items(); i++) | ||||
|     cfg.set("Preferred", _preferred.row(i), NULL, TRUE, i); | ||||
|   cfg.set("Preferred", "", NULL, TRUE, i); | ||||
| @ -1363,31 +1396,43 @@ void TMenu_application::add_to_preferred() | ||||
|   if (_preferred.items() < maxpref) | ||||
|   { | ||||
|     TToken_string tok; | ||||
|     if (_tree_view != 0) | ||||
|     {                   | ||||
|       TTree_field& tf = _mask->tfield(DLG_TREE);             | ||||
|       tf.goto_selected(); | ||||
|       tf.tree()->get_description(tok); | ||||
|       TString id; tf.tree()->curr_id(id); | ||||
|       tok.add(id); | ||||
|     }   | ||||
|     else | ||||
|     {                        | ||||
|       const TMask_field& butt = _mask->focus_field(); | ||||
|       const int index = butt.dlg() - 101; | ||||
|       if (index >= 0 && index < 16) | ||||
|       { | ||||
|         _menu.select(index); | ||||
|         tok = _menu.curr_item().caption(); | ||||
|         tok.add(_menu.current().name()); | ||||
|         tok << '.' << index; | ||||
| 
 | ||||
|     switch (_tree_view) | ||||
|     { | ||||
|     case 1: | ||||
|       {                   | ||||
|         TTree_field& tf = _mask->tfield(DLG_TREE);             | ||||
|         tf.goto_selected(); | ||||
|         tf.tree()->get_description(tok); | ||||
|         TString id; tf.tree()->curr_id(id); | ||||
|         tok.add(id); | ||||
|       }   | ||||
|       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 int index = butt.dlg() - 101; | ||||
|         if (index >= 0 && index < 16) | ||||
|         { | ||||
|           _menu.select(index); | ||||
|           tok = _menu.curr_item().caption(); | ||||
|           tok.add(_menu.current().name()); | ||||
|           tok << '.' << index; | ||||
|         }   | ||||
|       } | ||||
|       break; | ||||
|     } | ||||
|     if (!tok.empty()) | ||||
|     if (tok.not_empty() && _preferred.find(tok) < 0) | ||||
|     { | ||||
|       _preferred.add(tok); | ||||
|       update_preferred(); | ||||
|       save_preferences(); | ||||
|       update_preferred(); | ||||
|     } | ||||
|   } | ||||
|   else | ||||
| @ -1480,8 +1525,8 @@ void TMenu_application::manage_preferred() | ||||
|     const int old_tv = _tree_view; | ||||
|     _tree_view = m->get_int(F_PREF_TREE); | ||||
| 
 | ||||
|     update_preferred(); | ||||
|     save_preferences(); | ||||
|     update_preferred(); | ||||
| 
 | ||||
|     if (_tree_view != old_tv && _mask != NULL) | ||||
| 		{ | ||||
|  | ||||
| @ -102,11 +102,19 @@ public: | ||||
| ///////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
| TMenuitem::TMenuitem(TSubmenu* sm)  | ||||
|          : _submenu(sm),  | ||||
|            _exist(-1), _firm(FALSE), _password(FALSE), _reloadmenu(FALSE), | ||||
|          : _submenu(sm), _exist(-1), _firm(FALSE),  | ||||
|            _password(FALSE), _reloadmenu(FALSE), | ||||
|            _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 | ||||
| { return _submenu->menu(); } | ||||
| 
 | ||||
| @ -363,7 +371,7 @@ void TSubmenu::read(TScanner& scanner) | ||||
|     if (line.compare("Item", 4, TRUE) == 0) | ||||
|     { | ||||
|       TMenuitem* item = new TMenuitem(this); | ||||
|       _items.add(item); | ||||
|       add(item); | ||||
|       item->create(line); | ||||
|     } | ||||
|   } | ||||
| @ -392,6 +400,18 @@ int TSubmenu::find_string(const TString& str) const | ||||
|   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  | ||||
| {  | ||||
| 	return menu().image(picture());  | ||||
|  | ||||
| @ -63,6 +63,7 @@ public: | ||||
|   void create(const char* t); | ||||
|    | ||||
|   TMenuitem(TSubmenu* sm); | ||||
|   TMenuitem(const TMenuitem& mi); | ||||
|   virtual ~TMenuitem() { } | ||||
| }; | ||||
| 
 | ||||
| @ -85,6 +86,10 @@ public: | ||||
|   TMenuitem& item(int i) { return (TMenuitem&)_items[i]; } | ||||
|   const TMenuitem& item(int i) const { return (const TMenuitem&)_items[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& caption() const { return _caption; } | ||||
|  | ||||
| @ -362,27 +362,28 @@ TObject* TMenulist_images::key2obj(const char* key) | ||||
| 
 | ||||
| 		const int w = image.width(); | ||||
| 		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(); | ||||
| 		for (int y = h-1; y >= 0; y--) | ||||
| 		{ | ||||
| 			for (int x = w-1; x >= 0; x--) | ||||
| 			{ | ||||
| 				const int r = fast_hypot(x-w/2, y-h/2); | ||||
| 				if (r < radius) | ||||
| 				if (r > radius) | ||||
|         { | ||||
|   		    // 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 bri = blend_colors(col, NORMAL_BACK_COLOR, perc); | ||||
| 				  image.set_pixel(x, y, bri); | ||||
|           const double perc = 1.0 - (double(r - radius) / (radius*1.5)); | ||||
|           if (perc >= 0.0) | ||||
|           { | ||||
| 				    COLOR col = image.get_pixel(x, y); | ||||
| 				    COLOR bri = blend_colors(col, NORMAL_BACK_COLOR, perc); | ||||
| 				    image.set_pixel(x, y, bri); | ||||
|           } | ||||
|           else | ||||
|             image.set_pixel(x, y, NORMAL_BACK_COLOR); | ||||
|         } | ||||
|         else | ||||
|           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); | ||||
| 		const double ratiox = double(rct.right) / image.width(); | ||||
| @ -429,6 +430,7 @@ protected: | ||||
|   void select(int s, int direction); | ||||
| 
 | ||||
| public: | ||||
|   void curr_item(TToken_string& id) const; | ||||
| 	void set_menu(TMenu_tree& mt); | ||||
| 
 | ||||
|   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]; | ||||
| 		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 (index == 0 && _can_go_back)  // Sù di un livello
 | ||||
| @ -563,6 +571,8 @@ void TMenulist_window::click_on(int index) | ||||
| 			} | ||||
| 			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) | ||||
| { | ||||
| 	_tree = &tree; | ||||
| @ -761,3 +784,9 @@ void TMenulist_field::set_menu(TMenu_tree& mt) | ||||
|   TMenulist_window& w = (TMenulist_window&)win(); | ||||
| 	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: | ||||
|   void set_menu(TMenu_tree& mt); | ||||
| 	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) { } | ||||
|   virtual ~TMenulist_field() { } | ||||
|  | ||||
| @ -37,8 +37,7 @@ HIDDEN void encode_string(char* dninst_key, char* data) | ||||
| 
 | ||||
| HIDDEN bool build_dninst(const TFilename& name) | ||||
| { | ||||
|   TFilename src = name; src.ext("txt"); | ||||
|   ifstream inf(src, ios::in | ios::nocreate); | ||||
|   ifstream inf("dninst.txt", ios::in | ios::nocreate); | ||||
|   if (inf.good()) | ||||
|   {                    | ||||
|     char dninst_key[8] = ""; | ||||
|  | ||||
| @ -8,6 +8,7 @@ Item_02 = "Amministrazione", <cgarea.men>, "", 10212 | ||||
| Item_03 = "Acquisti e vendite", <vearea.men>, "", 10211 | ||||
| Item_04 = "Magazzino e Produzione", <mgarea.men>, "", 10215 | ||||
| Item_05 = "Manutenzione", [MENU_015], "", 10210 | ||||
| Item_06 = "Preferiti", [MENU_PREFERITI], "", 10216 | ||||
| 
 | ||||
| [MENU_001] | ||||
| Caption = "Gestione Anagrafiche" | ||||
| @ -95,3 +96,10 @@ Item_04 = "Attivazione moduli", "ba1 -4", "" | ||||
| Item_05 = "Installazione moduli", "ba1 -6", "" | ||||
| Item_06 = "Creazione dischi di installazione", "ba1 -5", "" | ||||
| Item_07 = "Backup", "ba2 -1", "", 10213 | ||||
| 
 | ||||
| [MENU_PREFERITI] | ||||
| Caption = "Preferiti" | ||||
| Picture = <ba00> | ||||
| Module  = 0 | ||||
| Flags   = "" | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user