]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/levinson/keymaps/treadwell/keymap.c
Keyboard: Refactor Levinson to use split common code (#3639)
[qmk_firmware.git] / keyboards / levinson / keymaps / treadwell / keymap.c
1 #include QMK_KEYBOARD_H
2
3 extern keymap_config_t keymap_config;
4
5 #define _QWERTY 0
6 #define _COLEMAK 1
7 #define _DVORAK 2
8 #define _NUMB 3
9 #define _CODE 4
10 #define _SYS 5
11 #define _FN4 6
12 #define _ADJUST 16
13
14 enum custom_keycodes {
15   QWERTY = SAFE_RANGE,
16   COLEMAK,
17   DVORAK,
18   NUMB,
19   CODE,
20   SYS,
21   FN4,
22   ADJUST,
23 };
24
25 #define KC_ KC_TRNS
26 #define _______ KC_TRNS
27
28 #define KC_CAPW LGUI(LSFT(KC_3))        // Capture whole screen
29 #define KC_CPYW LGUI(LSFT(LCTL(KC_3)))  // Copy whole screen
30 #define KC_CAPP LGUI(LSFT(KC_4))        // Capture portion of screen
31 #define KC_CPYP LGUI(LSFT(LCTL(KC_4)))  // Copy portion of screen
32 #define KC_X1 CODE
33 #define KC_X2 NUMB
34 #define KC_X3 SYS
35 #define KC_X4 MT(MOD_LSFT, KC_ENT)
36
37 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
38
39   [_QWERTY] = LAYOUT_kc(
40   //,----+----+----+----+----+----.    ,----+----+----+----+----+----.
41      TAB , Q  , W  , E  , R  , T  ,      Y  , U  , I  , O  , P  ,MINS,
42   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
43      BSPC, A  , S  , D  , F  , G  ,      H  , J  , K  , L  ,SCLN,QUOT,
44   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
45      LSFT, Z  , X  , C  , V  , B  ,      N  , M  ,COMM,DOT ,SLSH, X4 ,
46   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
47       X3 ,LCTL,LALT,LGUI, X1 ,LALT,     SPC , X2 ,LEFT,DOWN, UP ,RGHT
48   //`----+----+----+----+----+----'    `----+----+----+----+----+----'
49   ),
50
51   [_COLEMAK] = LAYOUT_kc(
52   //,----+----+----+----+----+----.    ,----+----+----+----+----+----.
53      TAB , Q  , W  , F  , P  , G  ,      J  , L  , U  , Y  ,SCLN,MINS,
54   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
55      BSPC, A  , R  , S  , T  , D  ,      H  , N  , E  , I  , O  ,QUOT,
56   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
57      LSFT, Z  , X  , C  , V  , B  ,      K  , M  ,COMM,DOT ,SLSH, X4 ,
58   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
59       X3 ,LCTL,LALT,LGUI, X1 ,LALT,     SPC , X2 ,LEFT,DOWN, UP ,RGHT
60   //`----+----+----+----+----+----'    `----+----+----+----+----+----'
61   ),
62
63   [_DVORAK] = LAYOUT_kc(
64   //,----+----+----+----+----+----.    ,----+----+----+----+----+----.
65      TAB ,QUOT,COMM,DOT , P  , Y  ,      F  , G  , C  , R  , L  ,MINS,
66   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
67      BSPC, A  , O  , E  , U  , I  ,      D  , H  , T  , N  , S  ,SLSH,
68   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
69      LSFT,SCLN, Q  , J  , K  , X  ,      B  , M  , W  , V  , Z  , X4 ,
70   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
71       X3 ,LCTL,LALT,LGUI, X1 ,LALT,     SPC , X2 ,LEFT,DOWN, UP ,RGHT
72   //`----+----+----+----+----+----'    `----+----+----+----+----+----'
73   ),
74
75   [_NUMB] = LAYOUT_kc(
76   //,----+----+----+----+----+----.    ,----+----+----+----+----+----.
77      TILD,EXLM, AT ,HASH,DLR ,PERC,     CIRC,AMPR,ASTR,LPRN,RPRN,PMNS,
78   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
79      GRV , 1  , 2  , 3  , 4  , 5  ,      6  , 7  , 8  , 9  , 0  ,UNDS,
80   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
81          ,    ,MPRV,MPLY,MNXT,    ,         ,VOLD,VOLU,MUTE,    ,    ,
82   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
83          ,    ,    ,    ,    ,LALT,         ,    ,    ,    ,    ,
84   //`----+----+----+----+----+----'    `----+----+----+----+----+----'
85   ),
86
87   [_CODE] = LAYOUT_kc(
88   //,----+------+----+----+----+----.    ,----+----+----+----+----+----.
89      ESC ,      ,    , UP ,    ,    ,     PGUP,HOME,LPRN,RPRN,BSLS,PIPE,
90   //|----+------+----+----+----+----|    |----+----+----+----+----+----|
91      CAPS,SELECT,LEFT,DOWN,RGHT,DEL ,     PGDN, END,LBRC,RBRC,MINS,UNDS,
92   //|----+------+----+----+----+----|    |----+----+----+----+----+----|
93          , UNDO ,CUT ,COPY,PASTE,   ,     LEFT,RGHT,LCBR,RCBR,PLUS,PEQL,
94   //|----+------+----+----+----+----|    |----+----+----+----+----+----|
95          ,      ,    ,    ,    ,LALT,         ,    ,    ,    ,    ,
96   //`----+------+----+----+----+----'    `----+----+----+----+----+----'
97   ),
98
99   [_SYS] = LAYOUT_kc(
100   //,----+----+----+----+----+----.    ,----+----+----+----+----+----.
101      F12 , F1 , F2 , F3 , F4 , F5 ,      F6 , F7 , F8 , F9 ,F10 ,F11 ,
102   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
103          ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,    ,
104   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
105          ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,    ,
106   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
107          ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,
108   //`----+----+----+----+----+----'    `----+----+----+----+----+----'
109   ),
110
111 /* Adjust (Lower + Raise)
112  * ,-----------------------------------------------------------------------------------.
113  * |      | Reset|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn|      |      |
114  * |------+------+------+------+------+-------------+------+------+------+------+------|
115  * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      |
116  * |------+------+------+------+------+------|------+------+------+------+------+------|
117  * |      |      |      |      |      |      |      |      |      |      |      |      |
118  * |------+------+------+------+------+------+------+------+------+------+------+------|
119  * |      |      |      |      |      |             |      |      |      |      |      |
120  * `-----------------------------------------------------------------------------------'
121  */
122   [_ADJUST] = LAYOUT_ortho_4x12( \
123     _______, RESET  , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, \
124     _______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  _______, _______, \
125     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
126     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
127   )
128
129
130 };
131
132 #ifdef AUDIO_ENABLE
133 float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
134 float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
135 float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
136 #endif
137
138 void persistent_default_layer_set(uint16_t default_layer) {
139   eeconfig_update_default_layer(default_layer);
140   default_layer_set(default_layer);
141 }
142
143 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
144   switch (keycode) {
145     case QWERTY:
146       if (record->event.pressed) {
147         #ifdef AUDIO_ENABLE
148           PLAY_SONG(tone_qwerty);
149         #endif
150         persistent_default_layer_set(1UL<<_QWERTY);
151       }
152       return false;
153       break;
154     case COLEMAK:
155       if (record->event.pressed) {
156         #ifdef AUDIO_ENABLE
157           PLAY_SONG(tone_colemak);
158         #endif
159         persistent_default_layer_set(1UL<<_COLEMAK);
160       }
161       return false;
162       break;
163     case DVORAK:
164       if (record->event.pressed) {
165         #ifdef AUDIO_ENABLE
166           PLAY_SONG(tone_dvorak);
167         #endif
168         persistent_default_layer_set(1UL<<_DVORAK);
169       }
170       return false;
171       break;
172     case NUMB:
173       if (record->event.pressed) {
174         layer_on(_NUMB);
175         update_tri_layer(_NUMB, _CODE, _ADJUST);
176       } else {
177         layer_off(_NUMB);
178         update_tri_layer(_NUMB, _CODE, _ADJUST);
179       }
180       return false;
181       break;
182     case CODE:
183       if (record->event.pressed) {
184         layer_on(_CODE);
185         update_tri_layer(_NUMB, _CODE, _ADJUST);
186       } else {
187         layer_off(_CODE);
188         update_tri_layer(_NUMB, _CODE, _ADJUST);
189       }
190       return false;
191       break;
192     case ADJUST:
193       if (record->event.pressed) {
194         layer_on(_ADJUST);
195       } else {
196         layer_off(_ADJUST);
197       }
198       return false;
199       break;
200   }
201   return true;
202 }