2015年12月6日 星期日

[JUCE] Image Viewer Development Log 3 - Add LookAndFeel Functionaliy to Menu Bar

這次在 Menu Bar 上再多新增一個功能 - 可以改變 LookAndFeel 以及是否要用 Native Style

增加 Menu Bar 上的功能並不困難

之前已經都把框架都寫好了,這次只要在對的地方填對的東西就可以了

1. 首先到 MainWindow.h

   把想要加的 command ID 都寫好


2. 到 MainComponent.h 增加之後要用到的 member variables 以及 member function


3. 因為沒有用到很多 component,所以改變 LookAndFeel 會看不太出來效果

   所以為了讓感覺強烈一點,這邊讓背景顏色也會隨著 LookAndFeel 而改變

   因此到 MainComponent.cpp 改動一下 paint(),將背景顏色用個member variable

   記錄起來,mBkgColor 在 constructor 預設成黑色


4. 依然在 MainComponent.cpp

   isLookAndFeelSelected() 是要用來判斷目前使用的 LookAndFeel 是哪一個

   因為 JUCE 提供的 LookAndFeel 有三種 LookAndFeel_V1、LookAndFeel_V2、

   LookAndFeel_V3

   所以這邊用 template 的寫法來解決多型態的問題
    

5. 接下來一連串就是在新增功能到 Menu Bar

   首先,新增要顯示在 Menu Bar 上的名字


   替 LookAndFeel 這個 Menu 增加功能選項


   將 command ID 也新增上去


   設定好新增的功能

   這邊用 useLookAndFeelV1 為例

   首先要去 setInfo()

   如果想要有快捷鍵,就用 addDefaultKeypress() 去設定

   和之前不一樣的地方是,因為在 UI 上,必須讓使用者知道目前使用的LookAndFeel 是哪個

   setTicked() 會在使用中的 LookAndFeel 前面顯示個勾勾,借此讓使用者知道使用中的

   LookAndFeel

   setTicked() 會接收一個 bool 值為參數,在步驟4 所新增的 isLookAndFeelSelected()

   就是在這個時候派上用場

   同時也在這邊,設定好 mBkgColor 該要有的顏色


   接下來看 native style 這個功能

   整體的概念都一樣,只差在要知道現在是否用 native style,必須透過 MainWindow

   才能得知

   因此用之前寫好的 static class member function : getMainWindow() 來拿到指向

   MainWindow 的指標

   透過這個指標來詢問目前是否用 native style,並將結果給 setTicked() 即可


  最後就是指定各 command ID 相對應要執行的動作

  [1] : 和前面一樣,native style 必須透過 MainWindow 才能設定,所以要拿到對應的指標

  [2] : LookAndFeel 就直接透過 LookAndFeel::setDefaultLookAndFeel() 去設定就好


6. 成果如下




沒有留言:

張貼留言