~ubuntu-branches/ubuntu/quantal/unity/quantal

« back to all changes in this revision

Viewing changes to UnityCore/HomeLens.cpp

  • Committer: Michal Hruby
  • Date: 2012-08-16 14:41:23 UTC
  • mto: (55.1863.235 unity)
  • mto: This revision was merged to the branch mainline in revision 768.
  • Revision ID: michal.mhr@gmail.com-20120816144123-owb8in5jjcsoj1qm
Merge categories in home lens to one per lens

Show diffs side-by-side

added added

removed removed

Lines of Context:
215
215
{
216
216
public:
217
217
  CategoryMerger(glib::Object<DeeModel> target,
218
 
                 HomeLens::CategoryRegistry* cat_registry);
 
218
                 HomeLens::CategoryRegistry* cat_registry,
 
219
                 MergeMode merge_mode);
219
220
 
220
221
  void OnSourceRowAdded(DeeModel *model, DeeModelIter *iter);
221
222
  void OnSourceRowRemoved(DeeModel *model, DeeModelIter *iter);
224
225
 
225
226
private:
226
227
  HomeLens::CategoryRegistry* cat_registry_;
 
228
  MergeMode merge_mode_;
227
229
  std::multimap<unsigned, unsigned, std::greater<unsigned> > category_ordering_;
228
230
};
229
231
 
247
249
class HomeLens::Impl : public sigc::trackable
248
250
{
249
251
public:
250
 
  Impl(HomeLens* owner);
 
252
  Impl(HomeLens* owner, MergeMode merge_mode);
251
253
  ~Impl();
252
254
 
253
255
  void OnLensAdded(Lens::Ptr& lens);
283
285
{}
284
286
 
285
287
HomeLens::CategoryMerger::CategoryMerger(glib::Object<DeeModel> target,
286
 
                                         CategoryRegistry *cat_registry)
 
288
                                         CategoryRegistry *cat_registry,
 
289
                                         MergeMode merge_mode)
287
290
  : HomeLens::ModelMerger::ModelMerger(target)
288
291
  , cat_registry_(cat_registry)
 
292
  , merge_mode_(merge_mode)
289
293
{}
290
294
 
291
295
HomeLens::FiltersMerger::FiltersMerger(glib::Object<DeeModel> target)
390
394
  DeeModelTag*  target_tag;
391
395
  const gchar* display_name;
392
396
  const unsigned int DISPLAY_NAME_COLUMN = 0;
 
397
  std::string lens_name("Unknown");
393
398
 
394
399
  EnsureRowBuf(model);
395
400
 
405
410
  target_tag = FindSourceToTargetTag(model);
406
411
  unsigned source_cat_offset = dee_model_get_position(model, iter);
407
412
 
 
413
  if (merge_mode_ == MergeMode::OWNER_LENS)
 
414
  {
 
415
    for (auto it = sources_by_owner_.begin(); it != sources_by_owner_.end(); ++it)
 
416
    {
 
417
      if (it->second == model)
 
418
      {
 
419
        lens_name = it->first->name();
 
420
      }
 
421
    }
 
422
    display_name = lens_name.c_str();
 
423
  }
 
424
  else
 
425
  {
 
426
    display_name = dee_model_get_string(model, iter, DISPLAY_NAME_COLUMN);
 
427
  }
 
428
 
408
429
  /* If we already have a category registered with the same display name
409
430
   * then we just use that. Otherwise register a new category for it */
410
 
  display_name = dee_model_get_string(model, iter, DISPLAY_NAME_COLUMN);
411
431
  if (cat_registry_->FindCategoryOffset(display_name) >= 0)
412
432
  {
413
433
    /* Make sure the <results_model, source_cat_offset> pair is registered */
422
442
 
423
443
  /* Add the row to the merged categories model and store required metadata */
424
444
  dee_model_get_row(model, iter, row_buf_);
 
445
 
 
446
  /* Rename the category */
 
447
  g_variant_unref(row_buf_[DISPLAY_NAME_COLUMN]);
 
448
  row_buf_[DISPLAY_NAME_COLUMN] = g_variant_new_string(display_name);
 
449
  // need to ref sink the floating variant
 
450
  g_variant_ref_sink(row_buf_[DISPLAY_NAME_COLUMN]);
 
451
 
425
452
  target_iter = dee_model_append_row(target_, row_buf_);
426
453
  dee_model_set_tag(model, iter, target_tag, target_iter);
427
454
  unsigned target_cat_index = 
592
619
  return result;
593
620
}
594
621
 
595
 
HomeLens::Impl::Impl(HomeLens *owner)
 
622
HomeLens::Impl::Impl(HomeLens *owner, MergeMode merge_mode)
596
623
  : owner_(owner)
597
624
  , cat_registry_(owner)
598
625
  , results_merger_(owner->results()->model(), &cat_registry_)
599
 
  , categories_merger_(owner->categories()->model(), &cat_registry_)
 
626
  , categories_merger_(owner->categories()->model(), &cat_registry_, merge_mode)
600
627
  , filters_merger_(owner->filters()->model())
601
628
  , running_searches_(0)
602
629
  , settings_(g_settings_new("com.canonical.Unity.Dash"))
813
840
  return categories_merger_.GetOrder();
814
841
}
815
842
 
816
 
HomeLens::HomeLens(std::string const& name, std::string const& description, std::string const& search_hint)
 
843
HomeLens::HomeLens(std::string const& name,
 
844
                   std::string const& description,
 
845
                   std::string const& search_hint,
 
846
                   MergeMode merge_mode)
817
847
  : Lens("home.lens", "", "", name, PKGDATADIR"/lens-nav-home.svg",
818
848
         description, search_hint, true, "",
819
849
         ModelType::LOCAL)
820
 
  , pimpl(new Impl(this))
 
850
  , pimpl(new Impl(this, merge_mode))
821
851
{
822
852
  count.SetGetterFunction(sigc::mem_fun(&pimpl->lenses_, &Lenses::LensList::size));
823
853
  search_in_global = false;