~ubuntu-branches/ubuntu/utopic/mysql-workbench/utopic

« back to all changes in this revision

Viewing changes to library/forms/gtk/src/lf_menubar.cpp

  • Committer: Package Import Robot
  • Author(s): Dmitry Smirnov
  • Date: 2014-05-31 12:03:58 UTC
  • mfrom: (1.2.4)
  • Revision ID: package-import@ubuntu.com-20140531120358-cjik5ofkmj0fxsn8
Tags: 6.1.6+dfsg-1
* New upstream release [May 2014].
* Dropped "prtcl.patch".
* "debian/clean": better clean-up.

Show diffs side-by-side

added added

removed removed

Lines of Context:
152
152
  return ret;
153
153
}
154
154
 
 
155
static void add_shortcuts(Gtk::MenuItem* menu_item, 
 
156
                          const std::vector<std::string> &modifiers, 
 
157
                          const std::vector<std::string> &shortcuts)
 
158
{
 
159
  std::string modifier;
 
160
  
 
161
  for (std::vector<std::string>::const_iterator iter = modifiers.begin(); iter != modifiers.end(); ++iter)
 
162
  {
 
163
    std::string current_modifier = *iter;
 
164
    std::transform(current_modifier.begin(), current_modifier.end(), current_modifier.begin(), (int(*)(int))std::tolower);
 
165
 
 
166
    if (current_modifier == "modifier")
 
167
      current_modifier = "control";
 
168
 
 
169
    modifier += "<" + current_modifier + ">";
 
170
  }
 
171
  
 
172
  
 
173
  for (std::vector<std::string>::const_iterator iter = shortcuts.begin(); iter != shortcuts.end(); ++iter)
 
174
  {
 
175
    std::string shortcut = modifier + *iter;
 
176
    Gdk::ModifierType accel_mods = (Gdk::ModifierType)0;
 
177
    guint accel_key = 0;
 
178
    
 
179
    Gtk::AccelGroup::parse(shortcut, accel_key, accel_mods);
 
180
    
 
181
    if (accel_key != 0)
 
182
      menu_item->add_accelerator("activate", accel_group, accel_key, accel_mods, Gtk::ACCEL_VISIBLE);
 
183
    else
 
184
      log_error("Accelerator key not found for %s.\n", shortcut.c_str());
 
185
  }
 
186
  
 
187
}
 
188
 
155
189
//------------------------------------------------------------------------------
156
190
void mforms::gtk::MenuItemImpl::set_shortcut(mforms::MenuItem *item, const std::string& item_shortcut)
157
191
{
158
 
  if (!item_shortcut.empty())
159
 
  {
160
 
    Gdk::ModifierType   accel_mods = (Gdk::ModifierType)0;
161
 
    guint                accel_key = 0;
162
 
 
163
 
    // convert the accelerator format from Control+X to <control>x which is recognized by gtk
164
 
    std::vector<std::string> parts(base::split(item_shortcut, "+"));
165
 
 
166
 
    if (parts.size() > 0)
167
 
    {
168
 
      std::string shortcut = parts.back();
169
 
      parts.pop_back();
170
 
 
171
 
      if (shortcut == "Space")
172
 
        shortcut = "space";
173
 
      else if (shortcut == "PageUp")
174
 
        shortcut = "Page_Up";
175
 
      else if (shortcut == "PageDown")
176
 
        shortcut = "Page_Down";
177
 
      else if (shortcut == "Slash")
178
 
        shortcut = "slash";
179
 
      else if (shortcut == "Minus")
180
 
        shortcut = "minus";
181
 
      else if (shortcut == "Plus")
182
 
        shortcut = "plus";
183
 
 
184
 
      while (parts.size() > 0)
185
 
      {
186
 
        std::string mod = parts.back();
187
 
        parts.pop_back();
188
 
        std::transform(mod.begin(), mod.end(), mod.begin(), (int(*)(int))std::tolower);
189
 
        if ("modifier" == mod)
190
 
          mod = "control";
191
 
        shortcut = "<"+mod+">"+shortcut;
192
 
      }
193
 
 
194
 
      if (!shortcut.empty())
195
 
        Gtk::AccelGroup::parse(shortcut, accel_key, accel_mods);
196
 
    }
197
 
 
198
 
    Gtk::MenuItem* mi = cast<Gtk::MenuItem*>(item->get_data_ptr());
199
 
    if (accel_key != 0 && mi)
200
 
    {
201
 
      if (accel_group)
202
 
        mi->add_accelerator("activate", accel_group, accel_key, accel_mods, Gtk::ACCEL_VISIBLE);
203
 
      else
204
 
        log_error("AccelGroup was not set for menubar\n");
205
 
    }
206
 
  }
 
192
  if (item_shortcut.empty())
 
193
  {
 
194
    log_warning("Shortcut is empty\n");
 
195
    return;
 
196
  }
 
197
 
 
198
  Gtk::MenuItem* menu_item = cast<Gtk::MenuItem*>(item->get_data_ptr());
 
199
  
 
200
  if (menu_item == NULL)
 
201
  {
 
202
    log_error("Menu item was not defined (%s)\n", item_shortcut.c_str());
 
203
    return;
 
204
  }
 
205
  
 
206
  if (accel_group == 0)
 
207
  {
 
208
    log_error("AccelGroup was not set for menubar (%s)\n", item_shortcut.c_str());
 
209
    return;
 
210
  }
 
211
 
 
212
  // convert the accelerator format from Control+X to <control>x which is recognized by gtk
 
213
  std::vector<std::string> parts(base::split(item_shortcut, "+"));
 
214
 
 
215
  std::vector<std::string> keys;
 
216
  std::string key = parts.back();
 
217
  parts.pop_back();
 
218
 
 
219
  if (key == "Space")
 
220
    keys.push_back("space");
 
221
  else if (key == "PageUp")
 
222
  {
 
223
    keys.push_back("Page_Up");
 
224
    keys.push_back("KP_Page_Up");
 
225
  }
 
226
  else if (key == "PageDown")
 
227
  {
 
228
    keys.push_back("Page_Down");
 
229
    keys.push_back("KP_Page_Down");
 
230
  }
 
231
  else if (key == "Slash")
 
232
  {
 
233
    keys.push_back("slash");
 
234
    keys.push_back("KP_Divide");
 
235
  }
 
236
  else if (key == "Minus")
 
237
  {
 
238
    keys.push_back("minus");
 
239
    keys.push_back("KP_Subtract");
 
240
  }
 
241
  else if (key == "Plus")
 
242
  {
 
243
    keys.push_back("plus");
 
244
    keys.push_back("KP_Add");
 
245
  }
 
246
  else if (key == "Asterisk")
 
247
  {
 
248
    keys.push_back("multiply");
 
249
    keys.push_back("KP_Multiply");
 
250
  }
 
251
  else if (key == "Period")
 
252
  {
 
253
    keys.push_back("period");
 
254
    keys.push_back("KP_Decimal");
 
255
  }
 
256
  else if (key == "Return")
 
257
  {
 
258
    keys.push_back("Return");
 
259
    keys.push_back("KP_Enter");
 
260
  }
 
261
  else if (key == "Home")
 
262
  {
 
263
    keys.push_back("Home");
 
264
    keys.push_back("KP_Home");
 
265
  }
 
266
  else if (key == "End")
 
267
  {
 
268
    keys.push_back("End");
 
269
    keys.push_back("KP_End");
 
270
  }
 
271
  else if (key == "Insert")
 
272
  {
 
273
    keys.push_back("Insert");
 
274
    keys.push_back("KP_Insert");
 
275
  }
 
276
  else if (key == "Delete")
 
277
  {
 
278
    keys.push_back("Delete");
 
279
    keys.push_back("KP_Delete");
 
280
  }
 
281
  else if (key == "Up")
 
282
  {
 
283
    keys.push_back("Up");
 
284
    keys.push_back("KP_Up");
 
285
  }
 
286
  else if (key == "Down")
 
287
  {
 
288
    keys.push_back("Down");
 
289
    keys.push_back("KP_Down");
 
290
  }
 
291
  else if (key == "Left")
 
292
  {
 
293
    keys.push_back("Left");
 
294
    keys.push_back("KP_Left");
 
295
  }
 
296
  else if (key == "Right")
 
297
  {
 
298
    keys.push_back("Right");
 
299
    keys.push_back("KP_Right");
 
300
  }
 
301
  else if (key == "0")
 
302
  {
 
303
    keys.push_back("0");
 
304
    keys.push_back("KP_0");
 
305
  }
 
306
  else if (key == "1")
 
307
  {
 
308
    keys.push_back("1");
 
309
    keys.push_back("KP_1");
 
310
  }
 
311
  else if (key == "2")
 
312
  {
 
313
    keys.push_back("2");
 
314
    keys.push_back("KP_2");
 
315
  }
 
316
  else if (key == "3")
 
317
  {
 
318
    keys.push_back("3");
 
319
    keys.push_back("KP_3");
 
320
  }
 
321
  else if (key == "4")
 
322
  {
 
323
    keys.push_back("4");
 
324
    keys.push_back("KP_4");
 
325
  }
 
326
  else if (key == "5")
 
327
  {
 
328
    keys.push_back("5");
 
329
    keys.push_back("KP_5");
 
330
  }
 
331
  else if (key == "6")
 
332
  {
 
333
    keys.push_back("6");
 
334
    keys.push_back("KP_6");
 
335
  }
 
336
  else if (key == "7")
 
337
  {
 
338
    keys.push_back("7");
 
339
    keys.push_back("KP_7");
 
340
  }
 
341
  else if (key == "8")
 
342
  {
 
343
    keys.push_back("8");
 
344
    keys.push_back("KP_8");
 
345
  }
 
346
  else if (key == "9")
 
347
  {
 
348
    keys.push_back("9");
 
349
    keys.push_back("KP_9");
 
350
  }
 
351
  else
 
352
    keys.push_back(key);
 
353
 
 
354
  add_shortcuts(menu_item, parts, keys);
207
355
}
208
356
 
209
357
//------------------------------------------------------------------------------