ソースを参照

Add ctkMenuComboBox::toolButtonStyle

Property to control the style of the menu combobox search button.
Julien Finet 13 年 前
コミット
19ad26e001
共有3 個のファイルを変更した79 個の追加64 個の削除を含む
  1. 57 50
      Libs/Widgets/Testing/Cpp/ctkMenuComboBoxTest1.cpp
  2. 14 12
      Libs/Widgets/ctkMenuComboBox.cpp
  3. 8 2
      Libs/Widgets/ctkMenuComboBox.h

+ 57 - 50
Libs/Widgets/Testing/Cpp/ctkMenuComboBoxTest1.cpp

@@ -41,65 +41,73 @@ int ctkMenuComboBoxTest1(int argc, char * argv [] )
   QApplication app(argc, argv);
   QIcon plus(":Icons/plus.png");
 
-  QMenu* file = new QMenu("File");
-  file->addAction("first");
-  QMenu* wizards = new QMenu("Wizards");
-  file->addMenu(wizards);
-
-  QMenu*informatics = new QMenu("Informatics");
-  file->addMenu(informatics);
+  QMenu* menu = new QMenu("Menu");
+  menu->addAction("First item");
+  QMenu* subMenu = new QMenu("SubMenu");
+  menu->addMenu(subMenu);
+
+  QMenu* subMenu2 = new QMenu("SubMenu2");
+  menu->addMenu(subMenu2);
+
+  ctkMenuComboBox* menuComboBox = new ctkMenuComboBox(0);
+  menuComboBox->setMenu(menu);
+  menuComboBox->setDefaultText("Search");
+  menuComboBox->setAutoFillBackground(true);
+  menuComboBox->setMinimumContentsLength(25);
+  if (menuComboBox->isSearchIconVisible() != true)
+    {
+    std::cerr << "Wrong default isSearchIconVisible: "
+              << menuComboBox->isSearchIconVisible()
+              << std::endl;
+    return EXIT_FAILURE;
+    }
+  menuComboBox->setSearchIconVisible(true);
+  if (menuComboBox->isSearchIconVisible() != true)
+    {
+    std::cerr << "Failed to set searchIconVisible: "
+              << menuComboBox->isSearchIconVisible()
+              << std::endl;
+    return EXIT_FAILURE;
+    }
+  menuComboBox->setSearchIconVisible(false);
+  if (menuComboBox->toolButtonStyle() != Qt::ToolButtonIconOnly)
+    {
+    std::cerr << "Wrong default toolButtonStyle: "
+              << menuComboBox->toolButtonStyle()
+              << std::endl;
+    return EXIT_FAILURE;
+    }
+  menuComboBox->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+  if (menuComboBox->toolButtonStyle() != Qt::ToolButtonTextUnderIcon)
+    {
+    std::cerr << "Failed to set toolButtonStyle: "
+              << menuComboBox->toolButtonStyle()
+              << std::endl;
+    return EXIT_FAILURE;
+    }
+  menuComboBox->setSearchIconVisible(true);
+  menuComboBox->setEditableBehavior(ctkMenuComboBox::EditableOnPopup);
 
   QWidget topLevelWidget(0);
-
-  /*ctkMenuComboBox* Menu = new ctkMenuComboBox();
-  Menu->setMenu(file);
-  Menu->setMinimumWidth(200);
-  //Menu->setMinimumWidthComboBox(150);
-  //Menu->setMinimumWidth(150);
-  Menu->setEditableBehavior(ctkMenuComboBox::EditableOnFocus);
-  Menu->show();*/
-
-  ctkMenuComboBox* Menu2 = new ctkMenuComboBox(0);
-  Menu2->setMenu(file);
-  Menu2->setDefaultText("Search");
-  Menu2->setAutoFillBackground(true);
-  Menu2->setMinimumContentsLength(25);
-  Menu2->setSearchIconVisible(false);
-  Menu2->setSearchIconVisible(true);
-  //Menu2->setEditableBehavior(ctkMenuComboBox::EditableOnFocus);
-  Menu2->setEditableBehavior(ctkMenuComboBox::EditableOnPopup);
-  //Menu2->show();
-
-/*
-  ctkMenuComboBox* Menu3 = new ctkMenuComboBox();
-  Menu3->setMenu(file);
-  //Menu3->setMinimumWidth(150);
-  //Menu3->setMinimumWidthComboBox(150);
-  Menu3->setEditableBehavior(ctkMenuComboBox::NotEditable);
-*/
   QVBoxLayout* layout = new QVBoxLayout;
-  QToolBar bar;
-  //QWidget bar;
-  //QHBoxLayout* barLayout = new QHBoxLayout(&bar);
+  topLevelWidget.setLayout(layout);
 
+  QToolBar bar;
+  bar.addWidget(menuComboBox);
   layout->addWidget(&bar);
-  bar.addWidget(Menu2);
-  //bar.addWidget(Menu);
-  //layout->addWidget(Menu3);
 
-  file->addAction(plus, "Add ...");
-  file->addAction("Saveeeeeeeeeeeeeeeeeeeeeee ...");
-  wizards->addAction("tutu toto tata tonton");
-  wizards->addMenu(informatics);
-  informatics->addAction("ddd");
-
-  QAction* actionEnd = wizards->addAction("Quit");
+  menu->addAction(plus, "Item with icon");
+  menu->addAction("Long item to test the width of the combobox...");
+  subMenu->addAction("Submenu item");
+  /// subMenu2 is added twice in the menu, once at the toplevel and once
+  /// in the subMenu level.
+  subMenu->addMenu(subMenu2);
+  subMenu2->addAction("Subsubmenu item");
 
+  QAction* actionEnd = subMenu->addAction("Quit");
   actionEnd->setShortcut(QKeySequence("Ctrl+Q"));
-
   QObject::connect(actionEnd, SIGNAL(triggered()), qApp, SLOT(quit()));
 
-  topLevelWidget.setLayout(layout);
   topLevelWidget.show();
 
   if (argc < 2 || QString(argv[1]) != "-I" )
@@ -109,4 +117,3 @@ int ctkMenuComboBoxTest1(int argc, char * argv [] )
 
   return app.exec();
 }
-

+ 14 - 12
Libs/Widgets/ctkMenuComboBox.cpp

@@ -89,10 +89,10 @@ void ctkMenuComboBoxPrivate::init()
 
   // SearchButton
   this->SearchButton = new QToolButton();
+  this->SearchButton->setText(q->tr("Search"));
   this->SearchButton->setIcon(QIcon(":/Icons/search.png"));
   this->SearchButton->setCheckable(true);
   this->SearchButton->setAutoRaise(true);
-  this->SearchButton->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Ignored);
   layout->addWidget(this->SearchButton);
   q->connect(this->SearchButton, SIGNAL(toggled(bool)),
              this, SLOT(setComboBoxEditable(bool)));
@@ -429,6 +429,19 @@ bool ctkMenuComboBox::isSearchIconVisible() const
 }
 
 // -------------------------------------------------------------------------
+void ctkMenuComboBox::setToolButtonStyle(Qt::ToolButtonStyle style)
+{
+  Q_D(ctkMenuComboBox);
+  d->SearchButton->setToolButtonStyle(style);
+}
+
+// -------------------------------------------------------------------------
+Qt::ToolButtonStyle ctkMenuComboBox::toolButtonStyle() const
+{
+  Q_D(const ctkMenuComboBox);
+  return d->SearchButton->toolButtonStyle();
+}
+// -------------------------------------------------------------------------
 void ctkMenuComboBox::setMinimumContentsLength(int characters)
 {
   Q_D(ctkMenuComboBox);
@@ -526,14 +539,3 @@ bool ctkMenuComboBox::eventFilter(QObject* target, QEvent* event)
     }
   return this->Superclass::eventFilter(target, event);
 }
-
-// -------------------------------------------------------------------------
-void ctkMenuComboBox::resizeEvent(QResizeEvent *event)
-{
-  Q_D(ctkMenuComboBox);
-  this->Superclass::resizeEvent(event);
-  if (this->isSearchIconVisible())
-    {
-    d->SearchButton->setFixedWidth(d->MenuComboBox->size().height());
-    }
-}

+ 8 - 2
Libs/Widgets/ctkMenuComboBox.h

@@ -56,7 +56,11 @@ class CTK_WIDGETS_EXPORT ctkMenuComboBox : public QWidget
   Q_PROPERTY(QIcon defaultIcon READ defaultIcon WRITE setDefaultIcon)
   Q_PROPERTY(EditableBehavior editBehavior READ editableBehavior WRITE setEditableBehavior)
   Q_PROPERTY(bool searchIconVisible READ isSearchIconVisible WRITE setSearchIconVisible)
-
+  /// This property holds whether the search tool button displays an icon only,
+  /// text only, or text beside/below the icon.
+  /// The default is Qt::ToolButtonIconOnly.
+  /// \sa QToolButton::toolButtonStyle
+  Q_PROPERTY(Qt::ToolButtonStyle toolButtonStyle READ toolButtonStyle WRITE setToolButtonStyle)
 public:
   enum EditableBehavior{
     NotEditable = 0,
@@ -94,15 +98,17 @@ public:
   void setSearchIconVisible(bool state);
   bool isSearchIconVisible() const;
 
+  Qt::ToolButtonStyle toolButtonStyle() const;
+
   /// See QComboBox::setMinimumContentsLength()
   void setMinimumContentsLength(int characters);
 
 protected:
   virtual bool eventFilter(QObject* target, QEvent* event);
-  virtual void resizeEvent(QResizeEvent *event);
 
 public Q_SLOTS:
   void clearActiveAction();
+  void setToolButtonStyle(Qt::ToolButtonStyle style);
 
 Q_SIGNALS:
   void actionChanged(QAction* action);