Skip to content

Commit f01a9bd

Browse files
committed
Add options to set default values of auto hide and align tabs
1 parent c80d491 commit f01a9bd

File tree

7 files changed

+62
-12
lines changed

7 files changed

+62
-12
lines changed

WtProgram/ManagerViewService/Views/BehaviorView.fs

+26-8
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,37 @@ type HotKeyView() =
2828

2929
let settingsCheckbox key = checkBox(settingsProperty(key))
3030

31+
let dropDown (prop:IProperty<string>, items: string list) =
32+
let combo = new ComboBox()
33+
34+
// First add items
35+
combo.Items.AddRange(items |> List.toArray |> Array.map box)
36+
37+
// Then set initial value if exists, otherwise select first item
38+
let initialIndex =
39+
match items |> List.tryFindIndex ((=) prop.value) with
40+
| Some index -> index
41+
| None -> if combo.Items.Count > 0 then 0 else -1
42+
43+
if initialIndex >= 0 then
44+
combo.SelectedIndex <- initialIndex
45+
46+
combo.SelectedIndexChanged.Add(fun _ ->
47+
if combo.SelectedIndex >= 0 then
48+
prop.value <- combo.SelectedItem.ToString()
49+
)
50+
51+
combo :> Control
52+
53+
let settingsDropDown key value = dropDown(settingsProperty(key), value)
54+
3155
let basicForm =
3256
let fields = List2([
3357
("runAtStartup", settingsCheckbox "runAtStartup")
3458
("hideInactiveTabs", settingsCheckbox "hideInactiveTabs")
3559
("isTabbingEnabledForAllProcessesByDefault", checkBox(prop<IFilterService, bool>(Services.filter, "isTabbingEnabledForAllProcessesByDefault")))
60+
("autoHide", settingsCheckbox "autoHide")
61+
("alignment", settingsDropDown "alignment" ["Left"; "Center"; "Right"])
3662
])
3763
"Basics", UIHelper.form fields
3864

@@ -63,14 +89,6 @@ type HotKeyView() =
6389
editor.value <- Services.program.getHotKey(key)
6490
editor.changed.Add <| fun() ->
6591
Services.program.setHotKey key (unbox<int>(editor.value))
66-
67-
let checkBox (prop:IProperty<bool>) =
68-
let checkbox = BoolEditor() :> IPropEditor
69-
checkbox.value <- box(prop.value)
70-
checkbox.changed.Add <| fun() -> prop.value <- unbox<bool>(checkbox.value)
71-
checkbox.control
72-
73-
let settingsCheckbox key = checkBox(settingsProperty(key))
7492

7593
let fields = hotKeys.map <| fun(key,text) ->
7694
let editor = editors.find key

WtProgram/Properties/Resources.ja-JP.resx

+6
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,12 @@
168168
<data name="enableHoverActivate" xml:space="preserve">
169169
<value>マウスホバーでタブを有効にする</value>
170170
</data>
171+
<data name="autoHide" xml:space="preserve">
172+
<value>最大化時にタブを自動的に隠す</value>
173+
</data>
174+
<data name="alignment" xml:space="preserve">
175+
<value>タブの配置</value>
176+
</data>
171177
<data name="Height" xml:space="preserve">
172178
<value>高さ</value>
173179
</data>

WtProgram/Properties/Resources.resx

+6
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,12 @@
168168
<data name="enableHoverActivate" xml:space="preserve">
169169
<value>Enable mouse hover to activate tab</value>
170170
</data>
171+
<data name="autoHide" xml:space="preserve">
172+
<value>Auto hide tab when maximized</value>
173+
</data>
174+
<data name="alignment" xml:space="preserve">
175+
<value>Align tabs</value>
176+
</data>
171177
<data name="Height" xml:space="preserve">
172178
<value>Height</value>
173179
</data>

WtProgram/Settings.fs

+4
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,9 @@ type Settings(isStandAlone) as this =
8787
groupWindowsInSwitcher = settingsJson.getBool("groupWindowsInSwitcher").def(false)
8888
enableCtrlNumberHotKey = settingsJson.getBool("enableCtrlNumberHotKey").def(true)
8989
enableHoverActivate = settingsJson.getBool("enableHoverActivate").def(false)
90+
autoHide = settingsJson.getBool("autoHide").def(true)
9091
version = settingsJson.getString("version").def(String.Empty)
92+
alignment = settingsJson.getString("alignment").def("Center")
9193
tabAppearance =
9294
let appearanceObject = settingsJson.getObject("tabAppearance").def(JObject())
9395
appearanceObject.items.fold this.defaultTabAppearance <| fun appearance (key,value) ->
@@ -106,6 +108,7 @@ type Settings(isStandAlone) as this =
106108
let settingsJson = this.settingsJson
107109
settingsJson.setString("version", settings.version)
108110
settingsJson.setString("licenseKey", settings.licenseKey)
111+
settingsJson.setString("alignment", settings.alignment)
109112
settings.ticket.iter <| fun ticket -> settingsJson.setString("ticket", ticket)
110113
settingsJson.setBool("runAtStartup", settings.runAtStartup)
111114
settingsJson.setBool("hideInactiveTabs", settings.hideInactiveTabs)
@@ -115,6 +118,7 @@ type Settings(isStandAlone) as this =
115118
settingsJson.setBool("groupWindowsInSwitcher", settings.groupWindowsInSwitcher)
116119
settingsJson.setBool("enableCtrlNumberHotKey", settings.enableCtrlNumberHotKey)
117120
settingsJson.setBool("enableHoverActivate", settings.enableHoverActivate)
121+
settingsJson.setBool("autoHide", settings.autoHide)
118122
settingsJson.setStringArray("includedPaths", settings.includedPaths.items)
119123
settingsJson.setStringArray("excludedPaths", settings.excludedPaths.items)
120124
settingsJson.setStringArray("autoGroupingPaths", settings.autoGroupingPaths.items)

WtProgram/Shared/ProgramTypes.fs

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ type SettingsRec = {
3232
enableCtrlNumberHotKey: bool
3333
combineIconsInTaskbar: bool
3434
enableHoverActivate: bool
35+
autoHide: bool
36+
alignment: string
3537
}
3638

3739
type ILicenseManager =

WtProgram/TabStrip.fs

+13-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,18 @@ type TabStrip(monitor:ITabStripMonitor) as this =
3535
let showInsideCell = Cell.create(false)
3636
let isInAltTabCell = Cell.create(false)
3737
let iconOnlyCell = Cell.create(false)
38-
let alignment = Cell.create(Map2(List2([(TabUp,TabLeft);(TabDown,TabCenter)])))
38+
let alignmentMap =
39+
Map.ofList [
40+
"Left", TabLeft
41+
"Center", TabCenter
42+
"Right", TabRight
43+
]
44+
let alignmentDefault =
45+
let alignmentDefault = Services.settings.getValue("alignment").cast<string>()
46+
match alignmentMap.TryFind alignmentDefault with
47+
| Some align -> align
48+
| None -> TabCenter
49+
let alignment = Cell.create(Map2(List2([(TabUp,alignmentDefault);(TabDown,alignmentDefault)])))
3950
let capturedCell = Cell.create(None : Option<Tab*TabPart>)
4051
let hoverCell = Cell.create(None : Option<Tab*TabPart>)
4152
let slideCell = Cell.create(None)
@@ -68,7 +79,7 @@ type TabStrip(monitor:ITabStripMonitor) as this =
6879

6980
Cell.listen <| fun() ->
7081
this.update()
71-
82+
7283
member private this.inAltSwitch = isInAltTabCell.value
7384

7485
member private this.layeredWindow = layeredWindowCell.value.Value

WtProgram/TabStripDecorator.fs

+5-2
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,8 @@ type TabStripDecorator(group:WindowGroup) as this =
167167
})
168168

169169
let autoHideItem =
170-
let isEnabled = group.bb.read("autoHide", true)
170+
let isAutoHideEnabledDef = Services.settings.getValue("autoHide").cast<bool>()
171+
let isEnabled = group.bb.read("autoHide", isAutoHideEnabledDef)
171172
CmiRegular({
172173
text = "Auto hide maximized"
173174
flags = checked(isEnabled)
@@ -295,7 +296,9 @@ type TabStripDecorator(group:WindowGroup) as this =
295296
let update() = cell.value <- group.bb.read(key, def)
296297
group.bb.subscribe key update
297298
cell
298-
let autoHideCell = propCell("autoHide", true)
299+
300+
let isAutoHideEnabledDef = Services.settings.getValue("autoHide").cast<bool>()
301+
let autoHideCell = propCell("autoHide", isAutoHideEnabledDef)
299302
let contextMenuVisibleCell = propCell("contextMenuVisible", false)
300303
let renamingTabCell = propCell("renamingTab", false)
301304
let isRecentlyChangedZorderCell =

0 commit comments

Comments
 (0)