00001 #include <gtk/gtk.h> 00002 #include <glade/glade.h> 00003 #include "vapiMacroList.h" 00004 #include "vapiMacro.h" 00005 #include "vapiGtkMacrosTables.h" 00006 #include "vapiGtkMacroItemMove.h" 00007 #include "vapiGtkMacro.h" 00008 #include "vapiMacroBypass.h" 00009 00010 static struct _vGtkMacroItemMove 00011 { 00012 00013 vMacroList *MacroList; 00014 } GtkMacroItemMove; 00015 00016 void 00017 vapiGtkMacroItemMoveInit (GladeXML * xml, vMacroList * MacroList) 00018 { 00019 GtkWidget *MoveToTop; 00020 GtkWidget *MoveUp; 00021 GtkWidget *MoveDown; 00022 GtkWidget *MoveToBottom; 00023 00024 GtkMacroItemMove.MacroList = MacroList; 00025 MoveUp = glade_xml_get_widget (xml, "btMacroItemUp"); 00026 MoveDown = glade_xml_get_widget (xml, "btMacroItemDown"); 00027 MoveToTop = glade_xml_get_widget (xml, "btMacroItemToTop"); 00028 MoveToBottom = glade_xml_get_widget (xml, "btMacroItemToBottom"); 00029 00030 g_signal_connect (G_OBJECT (MoveUp), "clicked", 00031 G_CALLBACK (vapiGtkMacroItemMoveUp), NULL); 00032 g_signal_connect (G_OBJECT (MoveDown), "clicked", 00033 G_CALLBACK (vapiGtkMacroItemMoveDown), NULL); 00034 g_signal_connect (G_OBJECT (MoveToTop), "clicked", 00035 G_CALLBACK (vapiGtkMacroItemMoveToTop), NULL); 00036 g_signal_connect (G_OBJECT (MoveToBottom), "clicked", 00037 G_CALLBACK (vapiGtkMacroItemMoveToBottom), NULL); 00038 00039 } 00040 00041 void 00042 vapiGtkMacroItemMoveUp (GtkWidget * widget, gpointer data) 00043 { 00044 int selectedItem; 00045 vMacroHeader *MacroHeader; 00046 vMacroItem *Item; 00047 if (SelectedMacro < 0) 00048 { 00049 return; 00050 } 00051 00052 selectedItem = vapiGtkMacroTableGetSelected (); 00053 00054 if (selectedItem <= 0) 00055 { 00056 return; 00057 } 00058 00059 00060 MacroHeader = 00061 vapiMacroListSelectItem (GtkMacroItemMove.MacroList, 00062 SelectedMacro); 00063 00064 Item = v_list_get (MacroHeader->Macro, selectedItem); 00065 00066 v_list_delete_item (MacroHeader->Macro, NULL, selectedItem); 00067 00068 selectedItem--; 00069 00070 v_list_insert (MacroHeader->Macro, Item, selectedItem); 00071 00072 v_bypass_set_updatable(vTRUE); 00073 vapiGtkMacroTable (); 00074 00075 vapiGtkMacroTableSelectRow(selectedItem); 00076 } 00077 00078 void 00079 vapiGtkMacroItemMoveDown (GtkWidget * widget, gpointer data) 00080 { 00081 int selectedItem, MacroSize; 00082 vMacroHeader *MacroHeader; 00083 vMacroItem *Item; 00084 if (SelectedMacro < 0) 00085 { 00086 return; 00087 } 00088 00089 selectedItem = vapiGtkMacroTableGetSelected (); 00090 MacroHeader = 00091 vapiMacroListSelectItem (GtkMacroItemMove.MacroList, 00092 SelectedMacro); 00093 00094 MacroSize = vapiMacroCountElements (MacroHeader->Macro); 00095 if (selectedItem < 0 || selectedItem == (MacroSize - 1)) 00096 { 00097 return; 00098 } 00099 00100 Item = v_list_get (MacroHeader->Macro, selectedItem); 00101 00102 v_list_delete_item (MacroHeader->Macro, NULL, selectedItem); 00103 00104 selectedItem++; 00105 00106 if (selectedItem < (MacroSize - 1)) 00107 { 00108 v_list_insert (MacroHeader->Macro, Item, selectedItem); 00109 } 00110 else 00111 { 00112 v_list_append (MacroHeader->Macro, Item); 00113 } 00114 v_bypass_set_updatable(vTRUE); 00115 vapiGtkMacroTable (); 00116 vapiGtkMacroTableSelectRow(selectedItem); 00117 } 00118 00119 void 00120 vapiGtkMacroItemMoveToTop (GtkWidget * widget, gpointer data) 00121 { 00122 int selectedItem; 00123 vMacroHeader *MacroHeader; 00124 vMacroItem *Item; 00125 if (SelectedMacro < 0) 00126 { 00127 return; 00128 } 00129 00130 selectedItem = vapiGtkMacroTableGetSelected (); 00131 00132 if (selectedItem <= 0) 00133 { 00134 return; 00135 } 00136 00137 00138 MacroHeader = 00139 vapiMacroListSelectItem (GtkMacroItemMove.MacroList, 00140 SelectedMacro); 00141 00142 Item = v_list_get (MacroHeader->Macro, selectedItem); 00143 00144 v_list_delete_item (MacroHeader->Macro, NULL, selectedItem); 00145 00146 00147 00148 v_list_insert (MacroHeader->Macro, Item, 0); 00149 v_bypass_set_updatable(vTRUE); 00150 vapiGtkMacroTable (); 00151 vapiGtkMacroTableSelectRow(0); 00152 } 00153 00154 void 00155 vapiGtkMacroItemMoveToBottom (GtkWidget * widget, gpointer data) 00156 { 00157 int selectedItem, MacroSize; 00158 vMacroHeader *MacroHeader; 00159 vMacroItem *Item; 00160 if (SelectedMacro < 0) 00161 { 00162 return; 00163 } 00164 00165 selectedItem = vapiGtkMacroTableGetSelected (); 00166 MacroHeader = 00167 vapiMacroListSelectItem (GtkMacroItemMove.MacroList, 00168 SelectedMacro); 00169 00170 MacroSize = vapiMacroCountElements (MacroHeader->Macro); 00171 if (selectedItem < 0 || selectedItem == (MacroSize - 1)) 00172 { 00173 return; 00174 } 00175 00176 Item = v_list_get (MacroHeader->Macro, selectedItem); 00177 00178 v_list_delete_item (MacroHeader->Macro, NULL, selectedItem); 00179 00180 v_list_append (MacroHeader->Macro, Item); 00181 00182 v_bypass_set_updatable(vTRUE); 00183 vapiGtkMacroTable (); 00184 00185 vapiGtkMacroTableSelectRow(MacroSize-1); 00186 }