Compare commits

...

42 Commits

Author SHA1 Message Date
Kazuki Sakamoto 5bf1f8e73d iTerm2 PSMTabBarControl
https://github.com/gnachman/iTerm2/tree/master/ThirdParty/PSMTabBarControl
2016-10-01 23:48:20 -07:00
Kazuki Sakamoto fa649b7684 Merge pull request #369 from macvim-dev/fix/warnings
Suppress warnings 2nd round for Xcode 8
2016-10-01 23:46:42 -07:00
Kazuki Sakamoto f701767b4f Suppress warnings for Xcode 8 2016-10-01 23:29:54 -07:00
Kazuki Sakamoto 8839232993 Merge pull request #368 from macvim-dev/fix/warnings
Suppress warnings for Xcode 8
2016-10-01 17:20:35 -07:00
Kazuki Sakamoto 60ea35dac6 Suppress warnings for Xcode 8 2016-10-01 17:05:48 -07:00
Kazuki Sakamoto 0b2421e4c5 Merge pull request #363 from brychcy/master
#88 replace NSCopyBits which is deprecated
2016-10-01 16:45:12 -07:00
Kazuki Sakamoto 51e4114a83 Merge remote-tracking branch 'vim/master' 2016-09-29 20:35:15 -07:00
Bram Moolenaar b3435b0a3a patch 8.0.0019
Problem:    Test_command_count is old style.
Solution:   Turn it into a new style test. (Naruhiko Nishino)
            Use more assert functions.
2016-09-29 20:54:59 +02:00
Bram Moolenaar b9c31e71f5 patch 8.0.0018
Problem:    When using ":sleep" channel input is not handled.
Solution:   When there is a channel check for input also when not in raw mode.
            Check every 100 msec.
2016-09-29 15:18:57 +02:00
Kazuki Sakamoto 3712d186e5 Merge remote-tracking branch 'vim/master' 2016-09-27 19:47:44 -07:00
Bram Moolenaar 1777785751 Missing part of patch 8.0.0014 2016-09-27 21:30:22 +02:00
Bram Moolenaar 890680ca63 patch 8.0.0017
Problem:    Cannot get the number of the current quickfix or location list.
Solution:   Use the current list if "nr" in "what" is zero. (Yegappan
            Lakshmanan)  Remove debug command from test.
2016-09-27 21:28:56 +02:00
Kazuki Sakamoto a683bab097 Merge remote-tracking branch 'vim/master' 2016-09-26 19:23:21 -07:00
Bram Moolenaar 0e77b7691e patch 8.0.0016
Problem:    Build fails.
Solution:   Include missing change.
2016-09-26 22:58:58 +02:00
Bram Moolenaar 7ef3810d28 patch 8.0.0015
Problem:    Can't tell which part of a channel has "buffered" status.
Solution:   Add an optional argument to ch_status().  Let ch_info() also
            return "buffered" for out_status and err_status.
2016-09-26 22:36:58 +02:00
Bram Moolenaar 1eceadaf48 patch 8.0.0014
Problem:    Crypt tests are old style.
Solution:   Convert to new style.
2016-09-26 20:14:56 +02:00
Kazuki Sakamoto 677d665ca0 Merge remote-tracking branch 'vim/master' 2016-09-25 20:27:49 -07:00
Bram Moolenaar c79d6aa01d patch 8.0.0013
Problem:    Missing comma in list.
Solution:   Add the comma.
2016-09-25 22:27:37 +02:00
Bram Moolenaar 3e496b0ea3 Updated runtime files. 2016-09-25 22:11:48 +02:00
Bram Moolenaar 9af4184276 patch 8.0.0012
Problem:    Typos in comments.
Solution:   Change "its" to "it's". (Matthew Brener, closes #1088)
2016-09-25 21:45:05 +02:00
Bram Moolenaar 20eeb6129d Fix patch applied twice. 2016-09-25 21:06:50 +02:00
Bram Moolenaar 947000d6e4 patch 8.0.0011
Problem:    On OSX Test_pipe_through_sort_all() sometimes fails.
Solution:   Add the test to the list of flaky tests.
2016-09-25 21:03:02 +02:00
Bram Moolenaar 680e015bfe patch 8.0.0010
Problem:    Crash when editing file that starts with crypt yeader. (igor2x)
Solution:   Check for length of text. (Christian Brabandt) Add a test.
2016-09-25 20:54:11 +02:00
Bram Moolenaar 3f1c15b24a patch 8.0.0009
Problem:    Unecessary workround for AppVeyor.
Solution:   Revert patch 7.4.990. (Christian Brabandt)
2016-09-25 20:22:02 +02:00
Till Brychcy 418b98e5f2 #88 replace NSCopyBits which is deprecated 2016-09-24 21:55:45 +02:00
Kazuki Sakamoto 0d6868f0e0 Merge remote-tracking branch 'vim/master' 2016-09-22 21:31:00 -07:00
Bram Moolenaar 50ba526fbf Updated runtime files. 2016-09-22 22:33:02 +02:00
Bram Moolenaar 9e02cfa226 patch 8.0.0008
Problem:    Popup complete test is disabled.
Solution:   Enable the test and change the assert. (Hirohito Higashi)
2016-09-22 21:27:11 +02:00
Kazuki Sakamoto 99ec74897a Merge remote-tracking branch 'vim/master' 2016-09-21 19:50:11 -07:00
Bram Moolenaar bbe917d9d4 patch 8.0.0007
Problem:    Vim 7.4 is still mentioned in a few places.
Solution:   Update to Vim 8.  (Uncle Bill, closes #1094)
2016-09-21 22:41:24 +02:00
Kazuki Sakamoto 31b273e7c0 Merge remote-tracking branch 'vim/master' 2016-09-20 20:56:09 -07:00
Kazuki Sakamoto 07026777ea Merge pull request #357 from macvim-dev/fix/tabwidth
Honor defaults settings of Tab width on Yosemite or later
2016-09-20 16:35:52 -07:00
Bram Moolenaar ebdd90ac28 patch 8.0.0006
Problem:    ":lb" is interpreted as ":lbottom" while the documentation says it
            means ":lbuffer".
Solution:   Adjust the order of the commands. (haya14busa, closes #1093)
2016-09-20 21:39:14 +02:00
Kazuki Sakamoto ff43fd2343 Honor defaults settings of Tab width on Yosemite or later 2016-09-19 21:49:26 -07:00
Kazuki Sakamoto 418cb178ab Merge remote-tracking branch 'vim/master' 2016-09-16 21:43:01 -07:00
Bram Moolenaar d07969093a Updated runtime files. 2016-09-16 20:02:31 +02:00
Kazuki Sakamoto e7f312f4ac Merge remote-tracking branch 'vim/master' 2016-09-15 04:12:15 -07:00
Bram Moolenaar 3c4ebeba17 patch 8.0.0005
Problem:    Netbeans test fails with Python 3. (Jonathonf)
Solution:   Encode the string before sending it. (closes #1070)
2016-09-15 11:44:27 +02:00
Kazuki Sakamoto fd2a19c144 Merge remote-tracking branch 'vim/master' 2016-09-14 21:35:51 -07:00
Bram Moolenaar 5582ef1438 patch 8.0.0004
Problem:    A string argument for function() that is not a function name
            results in an error message with NULL. (Christian Brabandt)
Solution:   Use the argument for the error message.
2016-09-14 22:16:13 +02:00
Kazuki Sakamoto 9c95c4f7ba Added Travis CI links 2016-09-13 22:05:16 -07:00
Kazuki Sakamoto 0975715099 Sync docs with Vim 8.0 2016-09-13 20:59:51 -07:00
208 changed files with 6641 additions and 8082 deletions
+2
View File
@@ -8,3 +8,5 @@ maintainer of the port.
- Vim README https://github.com/macvim-dev/macvim/blob/master/README_vim.md
- Travis CI <a href="https://travis-ci.org/macvim-dev/macvim"><img src="https://travis-ci.org/macvim-dev/macvim.svg?branch=master" alt="Build Status"></a><a href="https://travis-ci.org/macvim-dev/homebrew-macvim"><img src="https://travis-ci.org/macvim-dev/homebrew-macvim.svg?branch=master" alt="Build Status"></a>
+1 -1
View File
@@ -1,4 +1,4 @@
`README.md` for version 7.4 of Vim: Vi IMproved.
`README.md` for version 8.0 of Vim: Vi IMproved.
[![Build Status](https://travis-ci.org/vim/vim.svg?branch=master)](https://travis-ci.org/vim/vim)
[![Coverage Status](https://coveralls.io/repos/vim/vim/badge.svg?branch=master&service=github)](https://coveralls.io/github/vim/vim?branch=master)
[![Appveyor Build status](https://ci.appveyor.com/api/projects/status/o2qht2kjm02sgghk?svg=true)](https://ci.appveyor.com/project/chrisbra/vim)
+1 -1
View File
@@ -41,7 +41,7 @@ These are the normal steps to install Vim from the .zip archives:
located. Check the $VIM setting to see where it points to:
set VIM
For example, if you have
C:\vim\vim74
C:\vim\vim80
do
cd C:\
Binary and runtime Vim archives are normally unpacked in the same location,
-3
View File
@@ -16,9 +16,6 @@ matrix:
before_build:
- '"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 /release'
# Work around for Python 2.7.11's bug
- reg copy HKLM\SOFTWARE\Python\PythonCore\2.7 HKLM\SOFTWARE\Python\PythonCore\2.7-32 /s /reg:32
- reg copy HKLM\SOFTWARE\Python\PythonCore\2.7 HKLM\SOFTWARE\Python\PythonCore\2.7-32 /s /reg:64
build_script:
- src/appveyor.bat
+1 -1
View File
@@ -236,7 +236,7 @@ fun! getscript#GetLatestVimScripts()
" call Decho("..depscript<".depscript.">")
" found a "GetLatestVimScripts: # #" line in the script;
" check if its already in the datafile by searching backwards from llp1,
" check if it's already in the datafile by searching backwards from llp1,
" the (prior to reading in the plugin script) last line plus one of the GetLatestVimScripts.dat file,
" for the script-id with no wrapping allowed.
let curline = line(".")
+1 -1
View File
@@ -931,7 +931,7 @@ function! phpcomplete#EvaluateModifiers(modifiers, required_modifiers, prohibite
endfor
for modifier in a:modifiers
" if the modifier is prohibited its a no match
" if the modifier is prohibited it's a no match
if index(a:prohibited_modifiers, modifier) != -1
return 0
endif
+1 -1
View File
@@ -117,7 +117,7 @@ fun! tar#Browse(tarfile)
if !filereadable(a:tarfile)
" call Decho('a:tarfile<'.a:tarfile.'> not filereadable')
if a:tarfile !~# '^\a\+://'
" if its an url, don't complain, let url-handlers such as vim do its thing
" if it's an url, don't complain, let url-handlers such as vim do its thing
redraw!
echohl Error | echo "***error*** (tar#Browse) File not readable<".a:tarfile.">" | echohl None
endif
+1 -1
View File
@@ -347,7 +347,7 @@ fun! vimball#Vimball(really,...)
" call Decho("exe tabn ".curtabnr)
exe "tabn ".curtabnr
" set up help if its a doc/*.txt file
" set up help if it's a doc/*.txt file
" call Decho("didhelp<".didhelp."> fname<".fname.">")
if a:really && didhelp == "" && fname =~ 'doc/[^/]\+\.\(txt\|..x\)$'
let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.\(txt\|..x\)$','\1','')
+66 -10
View File
@@ -1,7 +1,7 @@
" zip.vim: Handles browsing zipfiles
" AUTOLOAD PORTION
" Date: Jul 02, 2013
" Version: 27
" Date: Sep 13, 2016
" Version: 28
" Maintainer: Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
" License: Vim License (see vim's :help license)
" Copyright: Copyright (C) 2005-2013 Charles E. Campbell {{{1
@@ -20,10 +20,10 @@
if &cp || exists("g:loaded_zip")
finish
endif
let g:loaded_zip= "v27"
let g:loaded_zip= "v28"
if v:version < 702
echohl WarningMsg
echo "***warning*** this version of zip needs vim 7.2"
echo "***warning*** this version of zip needs vim 7.2 or later"
echohl Normal
finish
endif
@@ -53,6 +53,9 @@ endif
if !exists("g:zip_unzipcmd")
let g:zip_unzipcmd= "unzip"
endif
if !exists("g:zip_extractcmd")
let g:zip_extractcmd= g:zip_unzipcmd
endif
" ----------------
" Functions: {{{1
@@ -62,14 +65,14 @@ endif
" zip#Browse: {{{2
fun! zip#Browse(zipfile)
" call Dfunc("zip#Browse(zipfile<".a:zipfile.">)")
" sanity check: insure that the zipfile has "PK" as its first two letters
" sanity check: ensure that the zipfile has "PK" as its first two letters
" (zipped files have a leading PK as a "magic cookie")
if !filereadable(a:zipfile) || readfile(a:zipfile, "", 1)[0] !~ '^PK'
exe "noautocmd e ".fnameescape(a:zipfile)
" call Dret("zip#Browse : not a zipfile<".a:zipfile.">")
return
" else " Decho
" call Decho("zip#Browse: a:zipfile<".a:zipfile."> passed PK test - its a zip file")
" call Decho("zip#Browse: a:zipfile<".a:zipfile."> passed PK test - it's a zip file")
endif
let repkeep= &report
@@ -92,7 +95,7 @@ fun! zip#Browse(zipfile)
endif
if !filereadable(a:zipfile)
if a:zipfile !~# '^\a\+://'
" if its an url, don't complain, let url-handlers such as vim do its thing
" if it's an url, don't complain, let url-handlers such as vim do its thing
redraw!
echohl Error | echo "***error*** (zip#Browse) File not readable<".a:zipfile.">" | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
@@ -136,8 +139,10 @@ fun! zip#Browse(zipfile)
return
endif
" Maps associated with zip plugin
setlocal noma nomod ro
noremap <silent> <buffer> <cr> :call <SID>ZipBrowseSelect()<cr>
noremap <silent> <buffer> <cr> :call <SID>ZipBrowseSelect()<cr>
noremap <silent> <buffer> x :call zip#Extract()<cr>
let &report= repkeep
" call Dret("zip#Browse")
@@ -204,6 +209,15 @@ fun! zip#Read(fname,mode)
endif
" call Decho("zipfile<".zipfile.">")
" call Decho("fname <".fname.">")
" sanity check
if !executable(substitute(g:zip_unzipcmd,'\s\+.*$','',''))
redraw!
echohl Error | echo "***error*** (zip#Read) sorry, your system doesn't appear to have the ".g:zip_unzipcmd." program" | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
let &report= repkeep
" call Dret("zip#Write")
return
endif
" the following code does much the same thing as
" exe "keepj sil! r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1)
@@ -236,9 +250,9 @@ fun! zip#Write(fname)
set report=10
" sanity checks
if !executable(g:zip_zipcmd)
if !executable(substitute(g:zip_zipcmd,'\s\+.*$','',''))
redraw!
echohl Error | echo "***error*** (zip#Write) sorry, your system doesn't appear to have the zip pgm" | echohl None
echohl Error | echo "***error*** (zip#Write) sorry, your system doesn't appear to have the ".g:zip_zipcmd." program" | echohl None
" call inputsave()|call input("Press <cr> to continue")|call inputrestore()
let &report= repkeep
" call Dret("zip#Write")
@@ -344,6 +358,48 @@ fun! zip#Write(fname)
" call Dret("zip#Write")
endfun
" ---------------------------------------------------------------------
" zip#Extract: extract a file from a zip archive {{{2
fun! zip#Extract()
" call Dfunc("zip#Extract()")
let repkeep= &report
set report=10
let fname= getline(".")
" call Decho("fname<".fname.">")
" sanity check
if fname =~ '^"'
let &report= repkeep
" call Dret("zip#Extract")
return
endif
if fname =~ '/$'
redraw!
echohl Error | echo "***error*** (zip#Extract) Please specify a file, not a directory" | echohl None
let &report= repkeep
" call Dret("zip#Extract")
return
endif
" extract the file mentioned under the cursor
" call Decho("system(".g:zip_extractcmd." ".shellescape(b:zipfile)." ".shellescape(shell).")")
call system(g:zip_extractcmd." ".shellescape(b:zipfile)." ".shellescape(shell))
" call Decho("zipfile<".b:zipfile.">")
if v:shell_error != 0
echohl Error | echo "***error*** ".g:zip_extractcmd." ".b:zipfile." ".fname.": failed!" | echohl NONE
elseif !filereadable(fname)
echohl Error | echo "***error*** attempted to extract ".fname." but it doesn't appear to be present!"
else
echo "***note*** successfully extracted ".fname
endif
" restore option
let &report= repkeep
" call Dret("zip#Extract")
endfun
" ---------------------------------------------------------------------
" s:Escape: {{{2
fun! s:Escape(fname,isfilt)
+2 -2
View File
@@ -1,4 +1,4 @@
*autocmd.txt* For Vim version 8.0. Last change: 2016 Sep 03
*autocmd.txt* For Vim version 8.0. Last change: 2016 Sep 21
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -983,7 +983,7 @@ WinLeave Before leaving a window. If the window to be
*WinNew*
WinNew When a new window was created. Not done for
the fist window, when Vim has just started.
the first window, when Vim has just started.
Before a WinEnter event.
==============================================================================
+2 -2
View File
@@ -1,4 +1,4 @@
*channel.txt* For Vim version 8.0. Last change: 2016 Sep 11
*channel.txt* For Vim version 8.0. Last change: 2016 Sep 20
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -33,7 +33,7 @@ The Netbeans interface also uses a channel. |netbeans|
1. Overview *job-channel-overview*
There are four main types of jobs:
1. A deamon, serving several Vim instances.
1. A daemon, serving several Vim instances.
Vim connects to it with a socket.
2. One job working with one Vim instance, asynchronously.
Uses a socket or pipes.
+40 -21
View File
@@ -1,4 +1,4 @@
*eval.txt* For Vim version 8.0. Last change: 2016 Sep 07
*eval.txt* For Vim version 8.0. Last change: 2016 Sep 25
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -125,7 +125,8 @@ cleared. A List, Dictionary or Float is not a Number or String, thus
evaluates to FALSE.
*E745* *E728* *E703* *E729* *E730* *E731* *E908* *E910* *E913*
List, Dictionary, Funcref and Job types are not automatically converted.
List, Dictionary, Funcref, Job and Channel types are not automatically
converted.
*E805* *E806* *E808*
When mixing Number and Float the Number is converted to Float. Otherwise
@@ -643,7 +644,7 @@ It's possible to form a variable name with curly braces, see
Expression syntax summary, from least to most significant:
|expr1| expr2
|expr1| expr2
expr2 ? expr1 : expr1 if-then-else
|expr2| expr3
@@ -691,7 +692,7 @@ Expression syntax summary, from least to most significant:
expr8.name entry in a |Dictionary|
expr8(expr1, ...) function call with |Funcref| variable
|expr9| number number constant
|expr9| number number constant
"string" string constant, backslash is special
'string' string constant, ' is doubled
[expr1, ...] |List|
@@ -957,7 +958,7 @@ expr8[expr1] item of String or |List| *expr-[]* *E111*
*E909* *subscript*
If expr8 is a Number or String this results in a String that contains the
expr1'th single byte from expr8. expr8 is used as a String, expr1 as a
Number. This doesn't recognize multi-byte encodings, see |byteidx()| for
Number. This doesn't recognize multi-byte encodings, see `byteidx()` for
an alternative, or use `split()` to turn the string into a list of characters.
Index zero gives the first byte. This is like it works in C. Careful:
@@ -1244,7 +1245,7 @@ The arguments are optional. Example: >
< error function
*closure*
Lambda expressions can access outer scope variables and arguments. This is
often called a closure. Example where "i" a and "a:arg" are used in a lambda
often called a closure. Example where "i" and "a:arg" are used in a lambda
while they exist in the function scope. They remain valid even after the
function returns: >
:function Foo(arg)
@@ -2030,7 +2031,8 @@ ch_sendraw({handle}, {string} [, {options}])
any send {string} over raw {handle}
ch_setoptions({handle}, {options})
none set options for {handle}
ch_status({handle}) String status of channel {handle}
ch_status({handle} [, {options}])
String status of channel {handle}
changenr() Number current change number
char2nr({expr}[, {utf8}]) Number ASCII/UTF8 value of first char in {expr}
cindent({lnum}) Number C indent for line {lnum}
@@ -2072,8 +2074,8 @@ expand({expr} [, {nosuf} [, {list}]])
feedkeys({string} [, {mode}]) Number add key sequence to typeahead buffer
filereadable({file}) Number |TRUE| if {file} is a readable file
filewritable({file}) Number |TRUE| if {file} is a writable file
filter({expr}, {string}) List/Dict remove items from {expr} where
{string} is 0
filter({expr1}, {expr2}) List/Dict remove items from {expr1} where
{expr2} is 0
finddir({name}[, {path}[, {count}]])
String find directory {name} in {path}
findfile({name}[, {path}[, {count}]])
@@ -2097,7 +2099,7 @@ garbagecollect([{atexit}]) none free memory, breaking cyclic references
get({list}, {idx} [, {def}]) any get item {idx} from {list} or {def}
get({dict}, {key} [, {def}]) any get item {key} from {dict} or {def}
get({func}, {what}) any get property of funcref/partial {func}
getbufinfo([{expr}]) List information about buffers
getbufinfo([{expr}]) List information about buffers
getbufline({expr}, {lnum} [, {end}])
List lines {lnum} to {end} of buffer {expr}
getbufvar({expr}, {varname} [, {def}])
@@ -2128,12 +2130,12 @@ getqflist([{what}]) List list of quickfix items
getreg([{regname} [, 1 [, {list}]]])
String or List contents of register
getregtype([{regname}]) String type of register
gettabinfo([{expr}]) List list of tab pages
gettabinfo([{expr}]) List list of tab pages
gettabvar({nr}, {varname} [, {def}])
any variable {varname} in tab {nr} or {def}
gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
any {name} in {winnr} in tab page {tabnr}
getwininfo([{winid}]) List list of windows
getwininfo([{winid}]) List list of windows
getwinposx() Number X coord in pixels of GUI Vim window
getwinposy() Number Y coord in pixels of GUI Vim window
getwinvar({nr}, {varname} [, {def}])
@@ -2197,7 +2199,7 @@ localtime() Number current time
log({expr}) Float natural logarithm (base e) of {expr}
log10({expr}) Float logarithm of Float {expr} to base 10
luaeval({expr}[, {expr}]) any evaluate |Lua| expression
map({expr}, {string}) List/Dict change each item in {expr} to {expr}
map({expr1}, {expr2}) List/Dict change each item in {expr1} to {expr}
maparg({name}[, {mode} [, {abbr} [, {dict}]]])
String or Dict
rhs of mapping {name} in mode {mode}
@@ -3041,7 +3043,8 @@ ch_info({handle}) *ch_info()*
Returns a Dictionary with information about {handle}. The
items are:
"id" number of the channel
"status" "open" (any part is open) or "closed"
"status" "open", "buffered" or "closed", like
ch_status()
When opened with ch_open():
"hostname" the hostname of the address
"port" the port of the address
@@ -3050,11 +3053,11 @@ ch_info({handle}) *ch_info()*
"sock_io" "socket"
"sock_timeout" timeout in msec
When opened with job_start():
"out_status" "open" or "closed"
"out_status" "open", "buffered" or "closed"
"out_mode" "NL", "RAW", "JSON" or "JS"
"out_io" "null", "pipe", "file" or "buffer"
"out_timeout" timeout in msec
"err_status" "open" or "closed"
"err_status" "open", "buffered" or "closed"
"err_mode" "NL", "RAW", "JSON" or "JS"
"err_io" "out", "null", "pipe", "file" or "buffer"
"err_timeout" timeout in msec
@@ -3139,7 +3142,7 @@ ch_setoptions({handle}, {options}) *ch_setoptions()*
These options cannot be changed:
"waittime" only applies to |ch_open()|
ch_status({handle}) *ch_status()*
ch_status({handle} [, {options}]) *ch_status()*
Return the status of {handle}:
"fail" failed to open the channel
"open" channel can be used
@@ -3149,6 +3152,11 @@ ch_status({handle}) *ch_status()*
"buffered" is used when the channel was closed but there is
still data that can be obtained with |ch_read()|.
If {options} is given it can contain a "part" entry to specify
the part of the channel to return the status for: "out" or
"err". For example, to get the error status: >
ch_status(job, {"part": "err"})
<
*copy()*
copy({expr}) Make a copy of {expr}. For Numbers and Strings this isn't
different from using {expr} directly.
@@ -3701,9 +3709,10 @@ filter({expr1}, {expr2}) *filter()*
is zero remove the item from the |List| or |Dictionary|.
{expr2} must be a |string| or |Funcref|.
if {expr2} is a |string|, inside {expr2} |v:val| has the value
If {expr2} is a |string|, inside {expr2} |v:val| has the value
of the current item. For a |Dictionary| |v:key| has the key
of the current item.
of the current item and for a |List| |v:key| has the index of
the current item.
Examples: >
call filter(mylist, 'v:val !~ "OLD"')
< Removes the items where "OLD" appears. >
@@ -3725,7 +3734,11 @@ filter({expr1}, {expr2}) *filter()*
return a:idx % 2 == 1
endfunc
call filter(mylist, function('Odd'))
<
< It is shorter when using a |lambda|: >
call filter(myList, {idx, val -> idx * val <= 42})
< If you do not use "val" you can leave it out: >
call filter(myList, {idx -> idx % 2 == 1})
The operation is done in-place. If you want a |List| or
|Dictionary| to remain unmodified make a copy first: >
:let l = filter(copy(mylist), 'v:val =~ "KEEP"')
@@ -4503,7 +4516,8 @@ getqflist([{what}]) *getqflist()*
If the optional {what} dictionary argument is supplied, then
returns only the items listed in {what} as a dictionary. The
following string items are supported in {what}:
nr get information for this quickfix list
nr get information for this quickfix list; zero
means the current quickfix list
title get the list title
winid get the |window-ID| (if opened)
all all of the above quickfix properties
@@ -4782,6 +4796,7 @@ histadd({history}, {item}) *histadd()*
"expr" or "=" typed expression history
"input" or "@" input line history
"debug" or ">" debug command history
empty the current or last used history
The {history} string does not need to be the whole name, one
character is sufficient.
If {item} does already exist in the history, it will be
@@ -5439,6 +5454,10 @@ map({expr1}, {expr2}) *map()*
return a:key . '-' . a:val
endfunc
call map(myDict, function('KeyValue'))
< It is shorter when using a |lambda|: >
call map(myDict, {key, val -> key . '-' . val})
< If you do not use "val" you can leave it out: >
call map(myDict, {key -> 'item: ' . key})
<
The operation is done in-place. If you want a |List| or
|Dictionary| to remain unmodified make a copy first: >
+1 -1
View File
@@ -1,4 +1,4 @@
*gui_mac.txt* For Vim version 7.4. Last change: 2012 Jan 13
*gui_mac.txt* For Vim version 8.0. Last change: 2012 Jan 13
VIM REFERENCE MANUAL by Bjorn Winckler
+2 -2
View File
@@ -1,4 +1,4 @@
*gui_x11.txt* For Vim version 8.0. Last change: 2016 Aug 21
*gui_x11.txt* For Vim version 8.0. Last change: 2016 Sep 12
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -484,7 +484,7 @@ your system has a working pkg-config together with the .pc file of the
required GTK+. For that, say, run the following on the command line to see if
your pkg-config works with your GTK+ 2: >
$ pkgconfig --modversion gtk+-2.0
$ pkg-config --modversion gtk+-2.0
Replace gtk+-2.0 with gtk+-3.0 for GTK+ 3. If you get the correct version
number of your GTK+, you can proceed; if not, you probably need to do some
+2 -1
View File
@@ -1,4 +1,4 @@
*help.txt* For Vim version 8.0. Last change: 2016 Mar 31
*help.txt* For Vim version 8.0. Last change: 2016 Sep 12
VIM - main help file
k
@@ -135,6 +135,7 @@ Advanced editing ~
|autocmd.txt| automatically executing commands on an event
|filetype.txt| settings done specifically for a type of file
|eval.txt| expression evaluation, conditional commands
|channel.txt| Jobs, Channels, inter-process communication
|fold.txt| hide (fold) ranges of lines
Special issues ~
+3 -3
View File
@@ -1,4 +1,4 @@
*if_pyth.txt* For Vim version 8.0. Last change: 2016 Sep 01
*if_pyth.txt* For Vim version 8.0. Last change: 2016 Sep 17
VIM REFERENCE MANUAL by Paul Moore
@@ -748,11 +748,11 @@ match the Python 2.x or Python 3 version Vim was compiled with.
The `:py3` and `:python3` commands work similar to `:python`. A simple check
if the `:py3` command is working: >
:py3 print("Hello")
< *:py3file*
To see what version of Python you have: >
:py3 import sys
:py3 print(sys.version)
< *:py3file*
The `:py3file` command works similar to `:pyfile`.
*:py3do*
The `:py3do` command works similar to `:pydo`.
+9 -5
View File
@@ -1,4 +1,4 @@
*intro.txt* For Vim version 8.0. Last change: 2015 Jan 20
*intro.txt* For Vim version 8.0. Last change: 2016 Sep 24
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -135,10 +135,14 @@ http://www.vim.org/maillist.php
Bug reports: *bugs* *bug-reports* *bugreport.vim*
Send bug reports to: Vim Developers <vim-dev@vim.org>
This is a maillist, you need to become a member first and many people will see
the message. If you don't want that, e.g. because it is a security issue,
send it to <bugs@vim.org>, this only goes to the Vim maintainer (that's Bram).
There are two ways to report bugs, both work:
1. Send bug reports to: Vim Developers <vim-dev@vim.org>
This is a maillist, you need to become a member first and many people will
see the message. If you don't want that, e.g. because it is a security
issue, send it to <bugs@vim.org>, this only goes to the Vim maintainer
(that's Bram).
2. Open issue on GitHub: https://github.com/vim/vim/issues
The text will be forwarded to the vim-dev maillist.
Please be brief; all the time that is spent on answering mail is subtracted
from the time that is spent on improving Vim! Always give a reproducible
+8 -6
View File
@@ -1,4 +1,4 @@
*options.txt* For Vim version 8.0. Last change: 2016 Sep 02
*options.txt* For Vim version 8.0. Last change: 2016 Sep 16
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -2646,7 +2646,7 @@ A jump table for the options with a short description can be found at |Q_op|.
uhex Show unprintable characters hexadecimal as <xx>
instead of using ^C and ~C.
When neither "lastline" or "truncate" is included, a last line that
When neither "lastline" nor "truncate" is included, a last line that
doesn't fit is replaced with "@" lines.
*'eadirection'* *'ead'*
@@ -6274,7 +6274,9 @@ A jump table for the options with a short description can be found at |Q_op|.
personal preferences to overrule or add to the distributed defaults
or system-wide settings (rarely needed).
More entries are added when using |packages|.
More entries are added when using |packages|. If it gets very long
then `:set rtp` will be truncated, use `:echo &rtp` to see the full
string.
Note that, unlike 'path', no wildcards like "**" are allowed. Normal
wildcards are allowed, but can significantly slow down searching for
@@ -6335,7 +6337,7 @@ A jump table for the options with a short description can be found at |Q_op|.
NOTE: This option is set to 1 when 'compatible' is set.
*'scrolloff'* *'so'*
'scrolloff' 'so' number (default 0)
'scrolloff' 'so' number (default 0, set to 5 in |defaults.vim|)
global
{not in Vi}
Minimal number of screen lines to keep above and below the cursor.
@@ -7840,7 +7842,7 @@ A jump table for the options with a short description can be found at |Q_op|.
'timeout' 'to' boolean (default on)
global
*'ttimeout'* *'nottimeout'*
'ttimeout' boolean (default off)
'ttimeout' boolean (default off, set in |defaults.vim|))
global
{not in Vi}
These two options together determine the behavior when part of a
@@ -7875,7 +7877,7 @@ A jump table for the options with a short description can be found at |Q_op|.
global
{not in all versions of Vi}
*'ttimeoutlen'* *'ttm'*
'ttimeoutlen' 'ttm' number (default -1)
'ttimeoutlen' 'ttm' number (default -1, set to 100 in |defaults.vim|))
global
{not in Vi}
The time in milliseconds that is waited for a key code or mapped key
+6 -6
View File
@@ -532,7 +532,7 @@ variable (ex. scp uses the variable g:netrw_scp_cmd, which is defaulted to
let g:netrw_sftp_cmd= '"c:\Program Files\PuTTY\psftp.exe"'
<
(note: it has been reported that windows 7 with putty v0.6's "-batch" option
doesn't work, so its best to leave it off for that system)
doesn't work, so it's best to leave it off for that system)
See |netrw-p8| for more about putty, pscp, psftp, etc.
@@ -1206,7 +1206,7 @@ The :NetrwMB command is available outside of netrw buffers (once netrw has been
invoked in the session).
The file ".netrwbook" holds bookmarks when netrw (and vim) is not active. By
default, its stored on the first directory on the user's |'runtimepath'|.
default, it's stored on the first directory on the user's |'runtimepath'|.
Related Topics:
|netrw-gb| how to return (go) to a bookmark
@@ -1431,7 +1431,7 @@ be used in that count.
*.netrwhist*
See |g:netrw_dirhistmax| for how to control the quantity of history stack
slots. The file ".netrwhist" holds history when netrw (and vim) is not
active. By default, its stored on the first directory on the user's
active. By default, it's stored on the first directory on the user's
|'runtimepath'|.
Related Topics:
@@ -3271,7 +3271,7 @@ The user function is passed one argument; it resembles >
fun! ExampleUserMapFunc(islocal)
<
where a:islocal is 1 if its a local-directory system call or 0 when
where a:islocal is 1 if it's a local-directory system call or 0 when
remote-directory system call.
Use netrw#Expose("varname") to access netrw-internal (script-local)
@@ -3595,7 +3595,7 @@ Example: Clear netrw's marked file list via a mapping on gu >
*netrw-p16*
P16. When editing remote files (ex. :e ftp://hostname/path/file),
under Windows I get an |E303| message complaining that its unable
under Windows I get an |E303| message complaining that it's unable
to open a swap file.
(romainl) It looks like you are starting Vim from a protected
@@ -3649,7 +3649,7 @@ Example: Clear netrw's marked file list via a mapping on gu >
P21. I've made a directory (or file) with an accented character, but
netrw isn't letting me enter that directory/read that file:
Its likely that the shell or o/s is using a different encoding
It's likely that the shell or o/s is using a different encoding
than you have vim (netrw) using. A patch to vim supporting
"systemencoding" may address this issue in the future; for
now, just have netrw use the proper encoding. For example: >
+28 -2
View File
@@ -1,4 +1,4 @@
*pi_zip.txt* For Vim version 8.0. Last change: 2013 Apr 17
*pi_zip.txt* For Vim version 8.0. Last change: 2016 Sep 13
+====================+
| Zip File Interface |
@@ -6,7 +6,7 @@
Author: Charles E. Campbell <NdrOchip@ScampbellPfamily.AbizM>
(remove NOSPAM from Campbell's email first)
Copyright: Copyright (C) 2005-2012 Charles E Campbell *zip-copyright*
Copyright: Copyright (C) 2005-2015 Charles E Campbell *zip-copyright*
The VIM LICENSE (see |copyright|) applies to the files in this
package, including zipPlugin.vim, zip.vim, and pi_zip.vim. except use
"zip.vim" instead of "VIM". Like anything else that's free, zip.vim
@@ -33,6 +33,9 @@ Copyright: Copyright (C) 2005-2012 Charles E Campbell *zip-copyright*
also write to the file. Currently, one may not make a new file in
zip archives via the plugin.
*zip-x*
x : may extract a listed file when the cursor is atop it
OPTIONS
*g:zip_nomax*
@@ -60,6 +63,11 @@ Copyright: Copyright (C) 2005-2012 Charles E Campbell *zip-copyright*
It's used during the writing (updating) of a file already in a zip
file; by default: >
let g:zip_zipcmd= "zip"
<
*g:zip_extractcmd*
This option specifies the program (and any options needed) used to
extract a file from a zip archive. By default, >
let g:zip_extractcmd= g:zip_unzipcmd
<
PREVENTING LOADING~
@@ -83,8 +91,26 @@ Copyright: Copyright (C) 2005-2012 Charles E Campbell *zip-copyright*
One can simply extend this line to accommodate additional extensions that
should be treated as zip files.
Alternatively, one may change *g:zipPlugin_ext* in one's .vimrc.
Currently (11/30/15) it holds: >
let g:zipPlugin_ext= '*.zip,*.jar,*.xpi,*.ja,*.war,*.ear,*.celzip,
\ *.oxt,*.kmz,*.wsz,*.xap,*.docx,*.docm,*.dotx,*.dotm,*.potx,*.potm,
\ *.ppsx,*.ppsm,*.pptx,*.pptm,*.ppam,*.sldx,*.thmx,*.xlam,*.xlsx,*.xlsm,
\ *.xlsb,*.xltx,*.xltm,*.xlam,*.crtx,*.vdw,*.glox,*.gcsx,*.gqsx,*.epub'
==============================================================================
4. History *zip-history* {{{1
v28 Oct 08, 2014 * changed the sanity checks for executables to reflect
the command actually to be attempted in zip#Read()
and zip#Write()
* added the extraction of a file capability
Nov 30, 2015 * added *.epub to the |g:zipPlugin_ext| list
Sep 13, 2016 * added *.apk to the |g:zipPlugin_ext| list and
sorted the suffices.
v27 Jul 02, 2013 * sanity check: zipfile must have "PK" as its first
two bytes.
* modified to allow zipfile: entries in quickfix lists
v26 Nov 15, 2012 * (Jason Spiro) provided a lot of new extensions that
are synonyms for .zip
v25 Jun 27, 2011 * using keepj with unzip -Z
+3 -3
View File
@@ -1,4 +1,4 @@
*syntax.txt* For Vim version 8.0. Last change: 2016 Sep 12
*syntax.txt* For Vim version 8.0. Last change: 2016 Sep 13
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -3521,8 +3521,8 @@ SYNTAX ISKEYWORD SETTING *:syn-iskeyword*
and also determines where |:syn-keyword| will be checked for a new
match.
It is recommended when writing syntax files, to use this command
to the correct value for the specific syntax language and not change
It is recommended when writing syntax files, to use this command to
set the correct value for the specific syntax language and not change
the 'iskeyword' option.
DEFINING KEYWORDS *:syn-keyword*
+3
View File
@@ -6428,6 +6428,8 @@ g:vimsyn_maxlines syntax.txt /*g:vimsyn_maxlines*
g:vimsyn_minlines syntax.txt /*g:vimsyn_minlines*
g:vimsyn_noerror syntax.txt /*g:vimsyn_noerror*
g:yaml_schema syntax.txt /*g:yaml_schema*
g:zipPlugin_ext pi_zip.txt /*g:zipPlugin_ext*
g:zip_extractcmd pi_zip.txt /*g:zip_extractcmd*
g:zip_nomax pi_zip.txt /*g:zip_nomax*
g:zip_shq pi_zip.txt /*g:zip_shq*
g:zip_unzipcmd pi_zip.txt /*g:zip_unzipcmd*
@@ -9483,6 +9485,7 @@ zip-extension pi_zip.txt /*zip-extension*
zip-history pi_zip.txt /*zip-history*
zip-manual pi_zip.txt /*zip-manual*
zip-usage pi_zip.txt /*zip-usage*
zip-x pi_zip.txt /*zip-x*
zj fold.txt /*zj*
zk fold.txt /*zk*
zl scroll.txt /*zl*
+2 -2
View File
@@ -1,4 +1,4 @@
*tagsrch.txt* For Vim version 8.0. Last change: 2016 Aug 20
*tagsrch.txt* For Vim version 8.0. Last change: 2016 Sep 20
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -91,7 +91,7 @@ The ignore-case matches are not found for a ":tag" command when:
- 'tagcase' is "followscs" and 'smartcase' option is on and the pattern
contains an upper case character.
The gnore-case matches are found when:
The ignore-case matches are found when:
- a pattern is used (starting with a "/")
- for ":tselect"
- when 'tagcase' is "followic" and 'ignorecase' is off
+48 -8
View File
@@ -1,4 +1,4 @@
*todo.txt* For Vim version 8.0. Last change: 2016 Sep 12
*todo.txt* For Vim version 8.0. Last change: 2016 Sep 25
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -34,13 +34,27 @@ not be repeated below, unless there is extra information.
*known-bugs*
-------------------- Known bugs and current work -----------------------
Move test71 tests to test_crypt.
Idea from Sven: record sequence of keys. Useful to show others what they are
doing (look over the shoulder), and also to see what happened.
Probably list of keystrokes, with some annotations for mode changes.
Could store in logfile to be able to analyise it with an external command.
E.g. to see when's the last time a plugin command was used.
Patch for typos. (Matthew Brener, 2016 Sep 16, #1088)
Lots of its to it's.
After 8.0 is released:
- Drop support for older MS-Windows systems, before XP.
Patch from Ken Takata, 2016 Mar 8.
Patch from Ken Takata, updated 2016 Sep 12.
+channel:
- channel_wait() may return an error while there is still something to read.
Perhaps try to read once more?
Possibly reproduced by Santiago Alejandro Agüero, 2016 Sep 12, 13.
Apparently select() returns an error while reading could work.
Another example from Daniel Hahler, Sep 24.
- Problem with stderr on Windows? (Vincent Rischmann, 2016 Aug 31, #1026)
- Add 'cwd' argument to start_job(): directory to change to in the child.
check for valid directory before forking.
@@ -104,6 +118,11 @@ Regexp problems:
matches the empty string. (Dominique Pelle, 2015 Oct 2, Nov 24)
had_endbrace[] is set but not initialized or used.
Strang syntax highlighting problem. (Brett Stahlman, 2016 Sep 17)
Patch to convert test_command_count into new style. (Naruhiko Nishino, 2016
Sep 17)
json_encode(): should convert to utf-8. (Nikolai Pavlov, 2016 Jan 23)
What if there is an invalid character?
@@ -129,6 +148,10 @@ Use ADDR_OTHER instead of ADDR_LINES for many more commands.
Add tests for using number larger than number of lines in buffer.
Invalid behavior with NULL list. (Nikolai Pavlov, #768)
E.g. deepcopy(test_null_list())
Patch to make it possible to extend a list with itself.
(Nikolai Pavlov, 2016 Sep 23)
min() and max() spawn lots of error messages if sorted list/dictionary
contains invalid data (Nikolay Pavlov, 2016 Sep 4, #1039)
@@ -142,9 +165,20 @@ sort() is not stable when using numeric/float sort (Nikolay Pavlov, 2016 Sep
cmap using execute() has side effects. (Killthemule, 2016 Aug 17, #983)
Patch to change order of compiler flags. (Yousong Zhou, 2016 Sep 19, #1100)
Patch for :pyx, run python commands depending on the supported version.
(Marc Weber, update from Ken Takata, 2016 Sep 19)
When using ":diffput" through a mapping, undo in the target buffer isn't
synced. (Ryan Carney, 2016 Sep 14)
Syntax highlighting for messages with RFC3339 timestamp (#946)
Did maintainer reply?
Patch to avoid problem with special characters in file name.
(Shougo, 2016 Sept 19, #1099) Not finished?
ml_get errors when reloading file. (Chris Desjardins, 2016 Apr 19)
Also with latest version.
@@ -174,6 +208,9 @@ This does not work: :set cscopequickfix=a-
Possibly wrong value for seq_cur. (Florent Fayolle, 2016 May 15, #806)
Patch to add separate highlighting for quickfix current line.
(anishsane, 2016 Sep 16, #1080)
Filetype plugin for awk. (Doug Kearns, 2016 Sep 5)
Patch to improve map documentation. Issue #799.
@@ -183,6 +220,11 @@ Patch for syntax folding optimization. (Shougo, 2016 Sep 6, #1045)
Patch for restoring wide characters in the console buffer.
(Ken Takata, 2016 Jun 7)
Patch for drag&drop reordering of GUI tab pages reordering.
(Ken Takata, 2013 Nov 22, second one, also by Masamichi Abe)
Now on Git: https://gist.github.com/nocd5/165286495c782b815b94
Update 2016 Aug 10.
We can use '. to go to the last change in the current buffer, but how about
the last change in any buffer? Can we use ', (, is next to .)?
@@ -225,7 +267,7 @@ Neovim patch for utfc_ptr2char_len() https://github.com/neovim/neovim/pull/4574
No test, needs some work to include.
Patch to make finding duplicate tags much faster, using a hashtab. (James
McCoy, 2016 Sept 6, #1046)
McCoy, 2016 Sept 14, #1046) Should work now.
>
Patch to improve indenting for C++ constructor with initializer list.
(Hirohito Higashi, 2016 Mar 31)
@@ -261,6 +303,9 @@ Can already do it with ":$put =execute('command')".
When repeating the 'confirm' dialog one needs to press Enter. (ds26gte, 2016
Apr 17) #762
exists(":tearoff") does not tell you if the command is implemented. (Tony
Mechelynck) Perhaps use exists("::tearoff") to check?
Use vim.vim syntax highlighting for help file examples, but without ":" in
'iskeyword' for syntax.
@@ -520,11 +565,6 @@ OK to not block marks?
Mixup of highlighting when there is a match and SpellBad. (ZyX, 2015 Jan 1)
Patch for drag&drop reordering of GUI tab pages reordering.
(Ken Takata, 2013 Nov 22, second one, also by Masamichi Abe)
Now on Git: https://gist.github.com/nocd5/165286495c782b815b94
Update 2016 Aug 10.
Patch on Issue 72: 'autochdir' causes problems for :vimgrep.
When 'balloonexpr' returns a list the result has a trailing newline.
+22 -21
View File
@@ -1,4 +1,4 @@
*version8.txt* For Vim version 8.0. Last change: 2016 Sep 12
*version8.txt* For Vim version 8.0. Last change: 2016 Sep 14
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -159,7 +159,7 @@ Many functions and commands have been added to support the new types.
On some systems the numbers used in Vim script are now 64 bit. This can be
checked with the |+num64| feature.
Many items were added so support |new-style-testing|.
Many items were added to support |new-style-testing|.
printf() now accepts any type of argument for %s. It is converted to a string
like with string().
@@ -1031,7 +1031,7 @@ Files: src/configure.in, src/auto/configure
Patch 7.4.095 (after 7.4.093)
Problem: Regexp for LuaJIT version doesn't work on BSD.
Solution: Use "*" instead of "\+" and "\?". (Ozaki)
Solution: Use "*" instead of "\+" and "\?". (Ozaki Kiichi)
Files: src/configure.in, src/auto/configure
Patch 7.4.096
@@ -1750,7 +1750,7 @@ Files: src/Makefile
Patch 7.4.218
Problem: It's not easy to remove duplicates from a list.
Solution: Add the uniq() function. (LCD)
Solution: Add the uniq() function. (Lcd)
Files: runtime/doc/change.txt, runtime/doc/eval.txt,
runtime/doc/usr_41.txt, runtime/doc/version7.txt, src/eval.c,
src/testdir/test55.in, src/testdir/test55.ok
@@ -4311,7 +4311,7 @@ Files: src/misc2.c
Patch 7.4.650
Problem: Configure check may fail because the dl library is not used.
Solution: Put "-ldl" in LIBS rather than LDFLAGS. (Oazki Kiichi)
Solution: Put "-ldl" in LIBS rather than LDFLAGS. (Ozaki Kiichi)
Files: src/configure.in, src/auto/configure
Patch 7.4.651 (after 7.4.582)
@@ -4903,7 +4903,7 @@ Solution: Make the buffer larger. (Kazunobu Kuriyama)
Files: src/eval.c
Patch 7.4.749 (after 7.4.741)
Problem: For some options two consecutive commas are OK. (Nikolay Pavlov)
Problem: For some options two consecutive commas are OK. (Nikolai Pavlov)
Solution: Add the P_ONECOMMA flag.
Files: src/option.c
@@ -6969,7 +6969,7 @@ Files: src/Make_mvc.mak, src/GvimExt/Makefile
Patch 7.4.1096
Problem: Need several lines to verify a command produces an error.
Solution: Add assert_fails(). (suggested by Nikolay Pavlov)
Solution: Add assert_fails(). (suggested by Nikolai Pavlov)
Make the quickfix alloc test actually work.
Files: src/testdir/test_quickfix.vim, src/eval.c, runtime/doc/eval.txt,
src/misc2.c, src/alloc.h
@@ -7432,7 +7432,7 @@ Files: src/mbyte.c, src/os_win32.c
Patch 7.4.1166
Problem: Can't encode a Funcref into JSON. jsonencode() doesn't handle the
same list or dict twice properly. (Nikolay Pavlov)
same list or dict twice properly. (Nikolai Pavlov)
Solution: Give an error. Reset copyID when the list or dict is finished.
Files: src/json.c, src/proto/json.pro, src/testdir/test_json.vim
@@ -7442,7 +7442,7 @@ Solution: Add tests.
Files: src/testdir/test_viml.vim
Patch 7.4.1168
Problem: This doesn't give the right result: eval(string(v:true)). (Nikolay
Problem: This doesn't give the right result: eval(string(v:true)). (Nikolai
Pavlov)
Solution: Make the string "v:true" instead of "true".
Files: src/eval.c, src/testdir/test_viml.vim
@@ -7993,7 +7993,7 @@ Files: src/testdir/test_channel.vim
Patch 7.4.1258
Problem: The channel test can fail if messages arrive later.
Solution: Add a short sleep. (Jun T.)
Solution: Add a short sleep. (Jun Takimoto)
Files: src/testdir/test_channel.vim
Patch 7.4.1259
@@ -8848,8 +8848,8 @@ Files: src/channel.c, src/gui_w32.c, src/os_win32.c, src/structs.h,
Patch 7.4.1405
Problem: Completion menu flickers.
Solution: Delay showing the popup menu. (Shougo, Justin M. Keyes, closes
#656)
Solution: Delay showing the popup menu. (Shougo Matsu, Justin M. Keyes,
closes #656)
Files: src/edit.c
Patch 7.4.1406
@@ -9372,7 +9372,7 @@ Solution: Handle blinking differently. (Kazunobu Kuriyama)
Files: src/gui_gtk_x11.c
Patch 7.4.1498
Problem: Error for locked item when using json_decode(). (Shougo)
Problem: Error for locked item when using json_decode(). (Shougo Matsu)
Solution: Initialize v_lock.
Files: src/json.c
@@ -9775,7 +9775,7 @@ Files: src/testdir/Make_all.mak, src/testdir/test106.in,
Patch 7.4.1570
Problem: There is no way to avoid the message when editing a file.
Solution: Add the "F" flag to 'shortmess'. (Shougo, closes #686)
Solution: Add the "F" flag to 'shortmess'. (Shougo Matsu, closes #686)
Files: runtime/doc/options.txt, src/buffer.c, src/ex_cmds.c,
src/option.h
@@ -10793,7 +10793,7 @@ Files: src/if_py_both.h
Patch 7.4.1744
Problem: Python: Converting a sequence may leak memory.
Solution: Decrement a reference. (Nikolay Pavlov)
Solution: Decrement a reference. (Nikolai Pavlov)
Files: src/if_py_both.h
Patch 7.4.1745
@@ -10866,7 +10866,8 @@ Files: src/option.c, src/testdir/test_alot.vim,
Patch 7.4.1757
Problem: When using complete() it may set 'modified' even though nothing
was inserted.
Solution: Use Down/Up instead of Next/Previous match. (Shougo, closes #745)
Solution: Use Down/Up instead of Next/Previous match. (Shougo Matsu, closes
#745)
Files: src/edit.c
Patch 7.4.1758
@@ -11392,7 +11393,7 @@ Solution: Check if ch_to_be_closed is set.
Files: src/channel.c
Patch 7.4.1850
Problem: GUI freezes when using a job. (Shougo)
Problem: GUI freezes when using a job. (Shougo Matsu)
Solution: Unregister the channel when there is an input error.
Files: src/channel.c
@@ -12354,12 +12355,12 @@ Files: src/testdir/test_cmdline.vim
Patch 7.4.2013
Problem: Using "noinsert" in 'completeopt' breaks redo.
Solution: Set compl_curr_match. (Shougo, closes #874)
Solution: Set compl_curr_match. (Shougo Matsu, closes #874)
Files: src/edit.c, src/testdir/test_popup.vim
Patch 7.4.2014
Problem: Using "noinsert" in 'completeopt' does not insert match.
Solution: Set compl_enter_selects. (Shougo, closes #875)
Solution: Set compl_enter_selects. (Shougo Matsu, closes #875)
Files: src/edit.c, src/testdir/test_popup.vim
Patch 7.4.2015
@@ -14279,7 +14280,7 @@ Solution: Make close_buffer() go back to the right window.
Files: src/buffer.c, src/testdir/test_autocmd.vim
Patch 7.4.2329
Problem: Error for min() and max() contains %s. (Nikolay Pavlov)
Problem: Error for min() and max() contains %s. (Nikolai Pavlov)
Solution: Pass the function name. (closes #1040)
Files: src/evalfunc.c, src/testdir/test_expr.vim
@@ -14405,7 +14406,7 @@ Solution: Don't access curwin when exiting.
Files: src/buffer.c
Patch 7.4.2349
Problem: Valgrind reports using uninitialzed memory. (Dominique Pelle)
Problem: Valgrind reports using uninitialized memory. (Dominique Pelle)
Solution: Check the length before checking for a NUL.
Files: src/message.c
+8 -1
View File
@@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2016 Aug 26
" Last Change: 2016 Sep 22
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
@@ -676,6 +676,9 @@ au BufNewFile,BufRead *.dts,*.dtsi setf dts
" EDIF (*.edf,*.edif,*.edn,*.edo)
au BufNewFile,BufRead *.ed\(f\|if\|n\|o\) setf edif
" EditorConfig (close enough to dosini)
au BufNewFile,BufRead .editorconfig setf dosini
" Embedix Component Description
au BufNewFile,BufRead *.ecd setf ecd
@@ -806,6 +809,10 @@ au BufNewFile,BufRead *.gp,.gprc setf gp
au BufNewFile,BufRead */.gnupg/options setf gpg
au BufNewFile,BufRead */.gnupg/gpg.conf setf gpg
au BufNewFile,BufRead */usr/*/gnupg/options.skel setf gpg
if !empty($GNUPGHOME)
au BufNewFile,BufRead $GNUPGHOME/options setf gpg
au BufNewFile,BufRead $GNUPGHOME/gpg.conf setf gpg
endif
" gnash(1) configuration files
au BufNewFile,BufRead gnashrc,.gnashrc,gnashpluginrc,.gnashpluginrc setf gnash
+1 -1
View File
@@ -16,7 +16,7 @@ if exists("*CdlGetIndent")
"finish
endif
" find out if an "...=..." expresion its an asignment (or a conditional)
" find out if an "...=..." expresion is an assignment (or a conditional)
" it scans 'line' first, and then the previos lines
fun! CdlAsignment(lnum, line)
let f = -1
+1 -1
View File
@@ -749,7 +749,7 @@ func! s:CssPrevNonComment(lnum, stopline)
while 1
let ccol = match(getline(lnum), '\*/')
if ccol < 0
" No comment end thus its something else.
" No comment end thus it's something else.
return lnum
endif
call cursor(lnum, ccol + 1)
+4 -4
View File
@@ -1,9 +1,9 @@
" zipPlugin.vim: Handles browsing zipfiles
" PLUGIN PORTION
" Date: Jun 07, 2013
" Date: Sep 13, 2016
" Maintainer: Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
" License: Vim License (see vim's :help license)
" Copyright: Copyright (C) 2005-2013 Charles E. Campbell {{{1
" Copyright: Copyright (C) 2005-2016 Charles E. Campbell {{{1
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
@@ -20,14 +20,14 @@
if &cp || exists("g:loaded_zipPlugin")
finish
endif
let g:loaded_zipPlugin = "v27"
let g:loaded_zipPlugin = "v28"
let s:keepcpo = &cpo
set cpo&vim
" ---------------------------------------------------------------------
" Options: {{{1
if !exists("g:zipPlugin_ext")
let g:zipPlugin_ext= '*.zip,*.jar,*.xpi,*.ja,*.war,*.ear,*.celzip,*.oxt,*.kmz,*.wsz,*.xap,*.docx,*.docm,*.dotx,*.dotm,*.potx,*.potm,*.ppsx,*.ppsm,*.pptx,*.pptm,*.ppam,*.sldx,*.thmx,*.xlam,*.xlsx,*.xlsm,*.xlsb,*.xltx,*.xltm,*.xlam,*.crtx,*.vdw,*.glox,*.gcsx,*.gqsx'
let g:zipPlugin_ext='*.apk,*.celzip,*.crtx,*.docm,*.docx,*.dotm,*.dotx,*.ear,*.epub,*.gcsx,*.glox,*.gqsx,*.ja,*.jar,*.kmz,*.oxt,*.potm,*.potx,*.ppam,*.ppsm,*.ppsx,*.pptm,*.pptx,*.sldx,*.thmx,*.vdw,*.war,*.wsz,*.xap,*.xlam,*.xlam,*.xlsb,*.xlsm,*.xlsx,*.xltm,*.xltx,*.xpi,*.zip'
endif
" ---------------------------------------------------------------------
+1 -1
View File
@@ -34,7 +34,7 @@ syn match aveNumber "[+-]\=\<[0-9]\+\>"
" Operator
syn keyword aveOperator or and max min xor mod by
" 'not' is a kind of a problem: Its an Operator as well as a method
" 'not' is a kind of a problem: It's an Operator as well as a method
" 'not' is only marked as an Operator if not applied as method
syn match aveOperator "[^\.]not[^a-zA-Z]"
Binary file not shown.
+7 -7
View File
@@ -1,17 +1,17 @@
" Vim syntax file
" Language: Fortran 2008 (and older: Fortran 2003, 95, 90, and 77)
" Version: 0.98
" Last Change: 2016 Aug. 29
" Version: 0.99
" Last Change: 2016 Sep. 23
" Maintainer: Ajit J. Thakkar <ajit@unb.ca>; <http://www2.unb.ca/~ajit/>
" Usage: For instructions, do :help fortran-syntax from Vim
" Credits:
" Version 0.1 (April 2000) was based on the fortran 77 syntax file by Mario Eusebio and
" Preben Guldberg. Since then, useful suggestions and contributions have been made,
" in chronological order, by:
" Version 0.1 (April 2000) for Fortran 95 was based on the Fortran 77 syntax file by
" Mario Eusebio and Preben Guldberg. Since then, useful suggestions and contributions
" have been made, in chronological order, by:
" Andrej Panjkov, Bram Moolenaar, Thomas Olsen, Michael Sternberg, Christian Reile,
" Walter Dieudonné, Alexander Wagner, Roman Bertle, Charles Rendleman,
" Andrew Griffiths, Joe Krahn, Hendrik Merx, Matt Thompson, Jan Hermann,
" Stefano Zaghi and Vishnu V. Krishnan.
" Stefano Zaghi, Vishnu V. Krishnan and Judicaël Grasset
if exists("b:current_syntax")
finish
@@ -368,7 +368,7 @@ else
endif
syn match fortranComment excludenl "!.*$" contains=@fortranCommentGroup,@spell
syn match fortranOpenMP excludenl "^\s*!\$\(OMP\)\=\s.*$"
syn match fortranOpenMP excludenl "^\s*!\$\(OMP\)\=&\=\s.*$"
"cpp is often used with Fortran
syn match cPreProc "^\s*#\s*\(define\|ifdef\)\>.*"
+16 -18
View File
@@ -1,7 +1,7 @@
" Vim syntax file
" Language: Python
" Maintainer: Zvezdan Petkovic <zpetkovic@acm.org>
" Last Change: 2016 Aug 14
" Last Change: 2016 Sep 14
" Credits: Neil Schemenauer <nas@python.ca>
" Dmitry Vasiliev
"
@@ -88,14 +88,14 @@ syn keyword pythonAsync async await
" followed by decorator name, optional parenthesized list of arguments,
" and the next line with either def, class, or another decorator.
syn match pythonDecorator
\ "\%(\%(^\s*\)\%(\%(>>>\|\.\.\.\)\s\+\)\=\)\zs@\%(\s*\h\%(\w\|\.\)*\%(([^)]*)\)\=\s*\n\s*\%(\.\.\.\s\+\)\=\%(@\s*\h\|\%(def\|class\)\s\+\)\)\@="
\ "\%(\%(^\s*\)\%(\%(>>>\|\.\.\.\)\s\+\)\=\)\zs@\%(\s*\h\%(\w\|\.\)*\s*\%((\_\s\{-}[^)]\_.\{-})\s*\)\=\%(#.*\)\=\n\s*\%(\.\.\.\s\+\)\=\%(@\s*\h\|\%(def\|class\)\s\+\)\)\@="
\ display nextgroup=pythonDecoratorName skipwhite
" A dot must be allowed because of @MyClass.myfunc decorators.
" It must be preceded by a decorator symbol and on a separate line from
" a function/class it decorates.
syn match pythonDecoratorName
\ "\%(@\s*\)\@<=\h\%(\w\|\.\)*\%(\%(([^)]*)\)\=\s*\n\)\@="
\ "\%(@\s*\)\@<=\h\%(\w\|\.\)*\%(\s*\%((\_\s\{-}[^)]\_.\{-})\s*\)\=\%(#.*\)\=\n\)\@="
\ contained display nextgroup=pythonFunction skipnl
" The zero-length non-grouping match of def or class before the function
@@ -289,43 +289,41 @@ endif
" Sync at the beginning of class, function, or method definition.
syn sync match pythonSync grouphere NONE "^\s*\%(def\|class\)\s\+\h\w*\s*("
" The default highlight links. Can be overridden later.
hi def link pythonStatement Statement
hi def link pythonConditional Conditional
hi def link pythonStatement Statement
hi def link pythonConditional Conditional
hi def link pythonRepeat Repeat
hi def link pythonOperator Operator
hi def link pythonException Exception
hi def link pythonException Exception
hi def link pythonInclude Include
hi def link pythonAsync Statement
hi def link pythonDecorator Define
hi def link pythonDecoratorName Function
hi def link pythonAsync Statement
hi def link pythonDecorator Define
hi def link pythonDecoratorName Function
hi def link pythonFunction Function
hi def link pythonComment Comment
hi def link pythonTodo Todo
hi def link pythonTodo Todo
hi def link pythonString String
hi def link pythonRawString String
hi def link pythonRawString String
hi def link pythonQuotes String
hi def link pythonTripleQuotes pythonQuotes
hi def link pythonTripleQuotes pythonQuotes
hi def link pythonEscape Special
if !exists("python_no_number_highlight")
hi def link pythonNumber Number
endif
if !exists("python_no_builtin_highlight")
hi def link pythonBuiltin Function
hi def link pythonBuiltin Function
endif
if !exists("python_no_exception_highlight")
hi def link pythonExceptions Structure
hi def link pythonExceptions Structure
endif
if exists("python_space_error_highlight")
hi def link pythonSpaceError Error
hi def link pythonSpaceError Error
endif
if !exists("python_no_doctest_highlight")
hi def link pythonDoctest Special
hi def link pythonDoctest Special
hi def link pythonDoctestValue Define
endif
let b:current_syntax = "python"
let &cpo = s:cpo_save
+1 -1
View File
@@ -381,7 +381,7 @@ ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc15 start="<<-\s*\\\z([^ \
" Here Strings: {{{1
" =============
" available for: bash; ksh (really should be ksh93 only) but not if its a posix
" available for: bash; ksh (really should be ksh93 only) but not if it's a posix
if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("g:is_posix"))
syn match shHereString "<<<" skipwhite nextgroup=shCmdParenRegion
endif
+1 -2
View File
@@ -15,8 +15,7 @@
@rem :h --remote-silent for more details
@rem
@rem --servername VS_NET
@rem This will create a new instance of vim called VS_NET. So if you
open
@rem This will create a new instance of vim called VS_NET. So if you open
@rem multiple files from VS, they will use the same instance of Vim.
@rem This allows you to have multiple copies of Vim running, but you can
@rem control which one has VS files in it.
+1 -1
View File
@@ -69,7 +69,7 @@
vimtutor <ENTER>
4. Если вы уверены в том, что запомнили эти шаги, выполните шаги от 1 до 3
чтобы выйти снова запустить редактор.
чтобы выйти и снова запустить редактор.
Замечание! :q! <ENTER> отбрасывает любые сделанные вами изменения. Через
несколько уроков вы узнаете как сохранять изменения в файл.
+14 -14
View File
@@ -722,40 +722,40 @@ The MS-DOS support was removed in patch 7.4.1399.
After you've built the Vim binaries as described above, you're ready to
install Vim on your system. However, if you've obtained the Vim sources
using Git, Mercurial or by downloading them as a unix tar file, you must
first create a "vim74" directory. If you instead downloaded the sources as
first create a "vim80" directory. If you instead downloaded the sources as
zip files, you can skip this setup as the zip archives already have the
correct directory structure.
A. Create a Vim "runtime" subdirectory named "vim74"
A. Create a Vim "runtime" subdirectory named "vim80"
-----------------------------------------------------
If you obtained your Vim sources as zip files, you can skip this step.
Otherwise, continue reading.
Go to the directory that contains the Vim "src" and "runtime"
directories and create a new subdirectory named "vim74".
directories and create a new subdirectory named "vim80".
Copy the "runtime" files into "vim74":
copy runtime\* vim74
Copy the "runtime" files into "vim80":
copy runtime\* vim80
B. Copy the new binaries into the "vim74" directory
B. Copy the new binaries into the "vim80" directory
----------------------------------------------------
Regardless of how you installed the Vim sources, you need to copy the
new binaries you created above into "vim74":
new binaries you created above into "vim80":
copy src\*.exe vim74
copy src\GvimExt\gvimext.dll vim74
copy src\xxd\xxd.exe vim74
copy src\*.exe vim80
copy src\GvimExt\gvimext.dll vim80
copy src\xxd\xxd.exe vim80
C. Move the "vim74" directory into the Vim installation subdirectory
C. Move the "vim80" directory into the Vim installation subdirectory
---------------------------------------------------------------------
Move the "vim74" subdirectory into the subdirectory where you want Vim
Move the "vim80" subdirectory into the subdirectory where you want Vim
to be installed. Typically, this subdirectory will be named "vim".
If you already have a "vim74" subdirectory in "vim", delete it first
If you already have a "vim80" subdirectory in "vim", delete it first
by running its uninstal.exe program.
D. Install Vim
---------------
"cd" to your Vim installation subdirectory "vim\vim74" and run the
"cd" to your Vim installation subdirectory "vim\vim80" and run the
"install.exe" program. It will ask you a number of questions about
how you would like to have your Vim setup. Among these are:
- You can tell it to write a "_vimrc" file with your preferences in the
+3 -3
View File
@@ -75,8 +75,8 @@ static DBPrefsWindowController *_sharedPrefsWindowController = nil;
// If the developer attached a window to this controller
// in Interface Builder, it gets replaced with this one.
NSPanel *window = [[[NSPanel alloc] initWithContentRect:NSMakeRect(0,0,1000,1000)
styleMask:(NSTitledWindowMask |
NSClosableWindowMask)
styleMask:(NSWindowStyleMaskTitled |
NSWindowStyleMaskClosable)
backing:NSBackingStoreBuffered
defer:YES] autorelease];
[window setHidesOnDeactivate:NO];
@@ -349,7 +349,7 @@ static DBPrefsWindowController *_sharedPrefsWindowController = nil;
{
[viewAnimation stopAnimation];
if ([self shiftSlowsAnimation] && [[[self window] currentEvent] modifierFlags] & NSShiftKeyMask)
if ([self shiftSlowsAnimation] && [[[self window] currentEvent] modifierFlags] & NSEventModifierFlagShift)
[viewAnimation setDuration:1.25];
else
[viewAnimation setDuration:0.25];
+25 -9
View File
@@ -181,12 +181,28 @@ fsEventCallback(ConstFSEventStreamRef streamRef,
CFPreferencesSetAppValue(CFSTR("NSRepeatCountBinding"),
CFSTR(""),
kCFPreferencesCurrentApplication);
int tabMinWidthKey;
int tabMaxWidthKey;
int tabOptimumWidthKey;
if (shouldUseYosemiteTabBarStyle()) {
tabMinWidthKey = 120;
tabMaxWidthKey = 0;
tabOptimumWidthKey = 0;
} else {
tabMinWidthKey = 64;
tabMaxWidthKey = 6*64;
tabOptimumWidthKey = 132;
}
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO], MMNoWindowKey,
[NSNumber numberWithInt:64], MMTabMinWidthKey,
[NSNumber numberWithInt:6*64], MMTabMaxWidthKey,
[NSNumber numberWithInt:132], MMTabOptimumWidthKey,
[NSNumber numberWithInt:tabMinWidthKey],
MMTabMinWidthKey,
[NSNumber numberWithInt:tabMaxWidthKey],
MMTabMaxWidthKey,
[NSNumber numberWithInt:tabOptimumWidthKey],
MMTabOptimumWidthKey,
[NSNumber numberWithBool:YES], MMShowAddTabButtonKey,
[NSNumber numberWithInt:2], MMTextInsetLeftKey,
[NSNumber numberWithInt:1], MMTextInsetRightKey,
@@ -502,7 +518,7 @@ fsEventCallback(ConstFSEventStreamRef streamRef,
if (modifiedBuffers) {
NSAlert *alert = [[NSAlert alloc] init];
[alert setAlertStyle:NSWarningAlertStyle];
[alert setAlertStyle:NSAlertStyleWarning];
[alert addButtonWithTitle:NSLocalizedString(@"Quit",
@"Dialog button")];
[alert addButtonWithTitle:NSLocalizedString(@"Cancel",
@@ -532,7 +548,7 @@ fsEventCallback(ConstFSEventStreamRef streamRef,
if (numWindows > 1 || numTabs > 1) {
NSAlert *alert = [[NSAlert alloc] init];
[alert setAlertStyle:NSWarningAlertStyle];
[alert setAlertStyle:NSAlertStyleWarning];
[alert addButtonWithTitle:NSLocalizedString(@"Quit",
@"Dialog button")];
[alert addButtonWithTitle:NSLocalizedString(@"Cancel",
@@ -1566,7 +1582,7 @@ fsEventCallback(ConstFSEventStreamRef streamRef,
}
[alert setInformativeText:text];
[alert setAlertStyle:NSWarningAlertStyle];
[alert setAlertStyle:NSAlertStyleWarning];
[alert runModal];
[alert release];
@@ -1735,7 +1751,7 @@ fsEventCallback(ConstFSEventStreamRef streamRef,
@"Unknown URL Scheme dialog, text"),
[url host]]];
[alert setAlertStyle:NSWarningAlertStyle];
[alert setAlertStyle:NSAlertStyleWarning];
[alert runModal];
[alert release];
}
@@ -1853,7 +1869,7 @@ fsEventCallback(ConstFSEventStreamRef streamRef,
// background, the runloop won't bother flushing the autorelease pool.
// Triggering an NSEvent works around this.
// http://www.mikeash.com/pyblog/more-fun-with-autorelease.html
NSEvent* event = [NSEvent otherEventWithType:NSApplicationDefined
NSEvent* event = [NSEvent otherEventWithType:NSEventTypeApplicationDefined
location:NSZeroPoint
modifierFlags:0
timestamp:0
+4 -3
View File
@@ -27,14 +27,15 @@
// help mode' (the keyDown: event itself never reaches the text view). By
// clearing the 'help key flag' this event will be treated like a normal
// key event.
if ((NSKeyDown == type || NSKeyUp == type) && (flags & NSHelpKeyMask)) {
flags &= ~NSHelpKeyMask;
if ((NSEventTypeKeyDown == type || NSEventTypeKeyUp == type) &&
(flags & NSEventModifierFlagHelp)) {
flags &= ~NSEventModifierFlagHelp;
event = [NSEvent keyEventWithType:[event type]
location:[event locationInWindow]
modifierFlags:flags
timestamp:[event timestamp]
windowNumber:[event windowNumber]
context:[event context]
context:nil // [event context] is always nil
characters:[event characters]
charactersIgnoringModifiers:[event charactersIgnoringModifiers]
isARepeat:[event isARepeat]
+7 -7
View File
@@ -3173,13 +3173,13 @@ static int eventModifierFlagsToVimModMask(int modifierFlags)
{
int modMask = 0;
if (modifierFlags & NSShiftKeyMask)
if (modifierFlags & NSEventModifierFlagShift)
modMask |= MOD_MASK_SHIFT;
if (modifierFlags & NSControlKeyMask)
if (modifierFlags & NSEventModifierFlagControl)
modMask |= MOD_MASK_CTRL;
if (modifierFlags & NSAlternateKeyMask)
if (modifierFlags & NSEventModifierFlagOption)
modMask |= MOD_MASK_ALT;
if (modifierFlags & NSCommandKeyMask)
if (modifierFlags & NSEventModifierFlagCommand)
modMask |= MOD_MASK_CMD;
return modMask;
@@ -3189,11 +3189,11 @@ static int eventModifierFlagsToVimMouseModMask(int modifierFlags)
{
int modMask = 0;
if (modifierFlags & NSShiftKeyMask)
if (modifierFlags & NSEventModifierFlagShift)
modMask |= MOUSE_SHIFT;
if (modifierFlags & NSControlKeyMask)
if (modifierFlags & NSEventModifierFlagControl)
modMask |= MOUSE_CTRL;
if (modifierFlags & NSAlternateKeyMask)
if (modifierFlags & NSEventModifierFlagOption)
modMask |= MOUSE_ALT;
return modMask;
+4 -4
View File
@@ -150,12 +150,12 @@ static const NSTrackingRectTag kTrackingRectTag = 0xBADFACE;
}
}
// Sends a fake NSMouseExited event to the view for its current tracking rect.
// Sends a fake NSEventTypeMouseExited event to the view for its current tracking rect.
- (void)_sendToolTipMouseExited
{
// Nothing matters except window, trackingNumber, and userData.
int windowNumber = [[self window] windowNumber];
NSEvent *fakeEvent = [NSEvent enterExitEventWithType:NSMouseExited
NSEvent *fakeEvent = [NSEvent enterExitEventWithType:NSEventTypeMouseExited
location:NSMakePoint(0, 0)
modifierFlags:0
timestamp:0
@@ -167,12 +167,12 @@ static const NSTrackingRectTag kTrackingRectTag = 0xBADFACE;
[trackingRectOwner_ mouseExited:fakeEvent];
}
// Sends a fake NSMouseEntered event to the view for its current tracking rect.
// Sends a fake NSEventTypeMouseEntered event to the view for its current tracking rect.
- (void)_sendToolTipMouseEntered
{
// Nothing matters except window, trackingNumber, and userData.
int windowNumber = [[self window] windowNumber];
NSEvent *fakeEvent = [NSEvent enterExitEventWithType:NSMouseEntered
NSEvent *fakeEvent = [NSEvent enterExitEventWithType:NSEventTypeMouseEntered
location:NSMakePoint(0, 0)
modifierFlags:0
timestamp:0
+3 -5
View File
@@ -910,7 +910,7 @@ defaultAdvanceForFont(NSFont *font)
numColumns:width];
[signImg drawInRect:r
fromRect:NSZeroRect
operation:NSCompositeSourceOver
operation:NSCompositingOperationSourceOver
fraction:1.0];
} else if (DrawStringDrawType == type) {
int bg = *((int*)bytes); bytes += sizeof(int);
@@ -1412,10 +1412,8 @@ recurseDraw(const unichar *chars, CGGlyph *glyphs, CGPoint *positions,
- (void)scrollRect:(NSRect)rect lineCount:(int)count
{
NSPoint destPoint = rect.origin;
destPoint.y -= count * cellSize.height;
NSCopyBits(0, rect, destPoint);
NSSize delta={0, -count * cellSize.height};
[self scrollRect:rect by:delta];
}
- (void)deleteLinesFromRow:(int)row lineCount:(int)count
+2 -2
View File
@@ -30,7 +30,7 @@
#import "MMWindowController.h"
#import "Miscellaneous.h"
#import <Carbon/Carbon.h>
#import <PSMTabBarControl/PSMTabBarControl.h>
#import "PSMTabBarControl/source/PSMTabBarControl.h"
// These have to be the same as in option.h
#define FUOPT_MAXVERT 0x001
@@ -67,7 +67,7 @@ enum {
// (another way would be to make the existing window large enough that the
// title bar is off screen. but that doesn't work with multiple screens).
self = [super initWithContentRect:[screen frame]
styleMask:NSBorderlessWindowMask
styleMask:NSWindowStyleMaskBorderless
backing:NSBackingStoreBuffered
defer:YES
// since we're passing [screen frame] above,
+15 -13
View File
@@ -158,12 +158,13 @@ KeyboardInputSourcesEqual(TISInputSourceRef a, TISInputSourceRef b)
// ASCII chars in the range after space (0x20) and before backspace (0x7f).
// Note that this implies that 'mmta' (if enabled) breaks input methods
// when the Alt key is held.
if ((flags & NSAlternateKeyMask) && [mmta boolValue] && [unmod length] == 1
if ((flags & NSEventModifierFlagOption)
&& [mmta boolValue] && [unmod length] == 1
&& [unmod characterAtIndex:0] > 0x20) {
ASLogDebug(@"MACMETA key, don't interpret it");
string = unmod;
} else if (imState && (flags & NSControlKeyMask)
&& !(flags & (NSAlternateKeyMask|NSCommandKeyMask))
} else if (imState && (flags & NSEventModifierFlagControl)
&& !(flags & (NSEventModifierFlagOption|NSEventModifierFlagCommand))
&& [unmod length] == 1
&& ([unmod characterAtIndex:0] == '6' ||
[unmod characterAtIndex:0] == '^')) {
@@ -180,14 +181,15 @@ KeyboardInputSourcesEqual(TISInputSourceRef a, TISInputSourceRef b)
[textView interpretKeyEvents:[NSArray arrayWithObject:event]];
if (interpretKeyEventsSwallowedKey)
string = nil;
else if (flags & NSCommandKeyMask) {
else if (flags & NSEventModifierFlagCommand) {
// HACK! When Command is held we have to more or less guess whether
// we should use characters or charactersIgnoringModifiers. The
// following heuristic seems to work but it may have to change.
// Note that the Shift and Alt flags may also need to be cleared
// (see doKeyDown:keyCode:modifiers: in MMBackend).
if ((flags & NSShiftKeyMask && !(flags & NSAlternateKeyMask))
|| flags & NSControlKeyMask)
if ((flags & NSEventModifierFlagShift
&& !(flags & NSEventModifierFlagOption))
|| flags & NSEventModifierFlagControl)
string = unmod;
}
}
@@ -339,12 +341,12 @@ KeyboardInputSourcesEqual(TISInputSourceRef a, TISInputSourceRef b)
// If desired, intepret Ctrl-Click as a right mouse click.
BOOL translateCtrlClick = [[NSUserDefaults standardUserDefaults]
boolForKey:MMTranslateCtrlClickKey];
flags = flags & NSDeviceIndependentModifierFlagsMask;
flags = flags & NSEventModifierFlagDeviceIndependentFlagsMask;
if (translateCtrlClick && button == 0 &&
(flags == NSControlKeyMask ||
flags == (NSControlKeyMask|NSAlphaShiftKeyMask))) {
(flags == NSEventModifierFlagControl || flags ==
(NSEventModifierFlagControl|NSEventModifierFlagCapsLock))) {
button = 1;
flags &= ~NSControlKeyMask;
flags &= ~NSEventModifierFlagControl;
}
[data appendBytes:&row length:sizeof(int)];
@@ -853,7 +855,7 @@ KeyboardInputSourcesEqual(TISInputSourceRef a, TISInputSourceRef b)
// The low 16 bits are not used for modifier flags by NSEvent. Use
// these bits for custom flags.
flags &= NSDeviceIndependentModifierFlagsMask;
flags &= NSEventModifierFlagDeviceIndependentFlagsMask;
if ([currentEvent isARepeat])
flags |= 1;
@@ -886,8 +888,8 @@ KeyboardInputSourcesEqual(TISInputSourceRef a, TISInputSourceRef b)
// HACK! Keys on the numeric key pad are treated as special keys by Vim
// so we need to pass on key code and modifier flags in this situation.
unsigned mods = [currentEvent modifierFlags];
if (mods & NSNumericPadKeyMask) {
flags = mods & NSDeviceIndependentModifierFlagsMask;
if (mods & NSEventModifierFlagNumericPad) {
flags = mods & NSEventModifierFlagDeviceIndependentFlagsMask;
keyCode = [currentEvent keyCode];
}
+1 -1
View File
@@ -1328,7 +1328,7 @@ static BOOL isUnsafeMessage(int msgid);
pt = [[windowController window] mouseLocationOutsideOfEventStream];
}
NSEvent *event = [NSEvent mouseEventWithType:NSRightMouseDown
NSEvent *event = [NSEvent mouseEventWithType:NSEventTypeRightMouseDown
location:pt
modifierFlags:0
timestamp:0
+20 -11
View File
@@ -24,7 +24,7 @@
#import "MMVimController.h"
#import "MMVimView.h"
#import "MMWindowController.h"
#import <PSMTabBarControl/PSMTabBarControl.h>
#import "PSMTabBarControl/source/PSMTabBarControl.h"
@@ -50,7 +50,7 @@ enum {
@end
@interface MMVimView (Private)
@interface MMVimView (Private) <PSMTabViewDelegate>
- (BOOL)bottomScrollbarVisible;
- (BOOL)leftScrollbarVisible;
- (BOOL)rightScrollbarVisible;
@@ -127,10 +127,17 @@ enum {
if (shouldUseYosemiteTabBarStyle()) {
CGFloat screenWidth = [[NSScreen mainScreen] frame].size.width;
int tabMaxWidth = [ud integerForKey:MMTabMaxWidthKey];
if (tabMaxWidth == 0)
tabMaxWidth = screenWidth;
int tabOptimumWidth = [ud integerForKey:MMTabOptimumWidthKey];
if (tabOptimumWidth == 0)
tabOptimumWidth = screenWidth;
[tabBarControl setStyleNamed:@"Yosemite"];
[tabBarControl setCellMinWidth:120];
[tabBarControl setCellMaxWidth:screenWidth];
[tabBarControl setCellOptimumWidth:screenWidth];
[tabBarControl setCellMinWidth:[ud integerForKey:MMTabMinWidthKey]];
[tabBarControl setCellMaxWidth:tabMaxWidth];
[tabBarControl setCellOptimumWidth:tabOptimumWidth];
} else {
[tabBarControl setCellMinWidth:[ud integerForKey:MMTabMinWidthKey]];
[tabBarControl setCellMaxWidth:[ud integerForKey:MMTabMaxWidthKey]];
@@ -190,11 +197,11 @@ enum {
// weird behind the window resize throbber, so emulate the look of an
// NSScrollView in the bottom right corner.
if (![[self window] showsResizeIndicator] // XXX: make this a flag
|| !([[self window] styleMask] & NSTexturedBackgroundWindowMask))
|| !([[self window] styleMask] & NSWindowStyleMaskTexturedBackground))
return;
#if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7)
int sw = [NSScroller scrollerWidthForControlSize:NSRegularControlSize scrollerStyle:NSScrollerStyleLegacy];
int sw = [NSScroller scrollerWidthForControlSize:NSControlSizeRegular scrollerStyle:NSScrollerStyleLegacy];
#else
int sw = [NSScroller scrollerWidth];
#endif
@@ -574,7 +581,9 @@ enum {
}
}
- (void)tabView:(NSTabView *)tabView updateStateForTabViewItem:(NSTabViewItem *)tabViewItem
{
}
// -- NSView customization ---------------------------------------------------
@@ -697,7 +706,7 @@ enum {
NSRect rect;
#if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7)
CGFloat scrollerWidth = [NSScroller scrollerWidthForControlSize:NSRegularControlSize scrollerStyle:NSScrollerStyleLegacy];
CGFloat scrollerWidth = [NSScroller scrollerWidthForControlSize:NSControlSizeRegular scrollerStyle:NSScrollerStyleLegacy];
#else
CGFloat scrollerWidth = [NSScroller scrollerWidth];
#endif
@@ -811,7 +820,7 @@ enum {
{
NSSize size = textViewSize;
#if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7)
CGFloat scrollerWidth = [NSScroller scrollerWidthForControlSize:NSRegularControlSize scrollerStyle:NSScrollerStyleLegacy];
CGFloat scrollerWidth = [NSScroller scrollerWidthForControlSize:NSControlSizeRegular scrollerStyle:NSScrollerStyleLegacy];
#else
CGFloat scrollerWidth = [NSScroller scrollerWidth];
#endif
@@ -833,7 +842,7 @@ enum {
{
NSRect rect = { {0, 0}, {contentSize.width, contentSize.height} };
#if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7)
CGFloat scrollerWidth = [NSScroller scrollerWidthForControlSize:NSRegularControlSize scrollerStyle:NSScrollerStyleLegacy];
CGFloat scrollerWidth = [NSScroller scrollerWidthForControlSize:NSControlSizeRegular scrollerStyle:NSScrollerStyleLegacy];
#else
CGFloat scrollerWidth = [NSScroller scrollerWidth];
#endif
+14 -14
View File
@@ -71,7 +71,7 @@
#import "MMWindow.h"
#import "MMWindowController.h"
#import "Miscellaneous.h"
#import <PSMTabBarControl/PSMTabBarControl.h>
#import "PSMTabBarControl/source/PSMTabBarControl.h"
// These have to be the same as in option.h
@@ -127,15 +127,15 @@
- (id)initWithVimController:(MMVimController *)controller
{
unsigned styleMask = NSTitledWindowMask | NSClosableWindowMask
| NSMiniaturizableWindowMask | NSResizableWindowMask
| NSUnifiedTitleAndToolbarWindowMask
| NSTexturedBackgroundWindowMask;
unsigned styleMask = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable
| NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskResizable
| NSWindowStyleMaskUnifiedTitleAndToolbar
| NSWindowStyleMaskTexturedBackground;
if ([[NSUserDefaults standardUserDefaults]
boolForKey:MMNoTitleBarWindowKey]) {
// No title bar setting
styleMask &= ~NSTitledWindowMask;
styleMask &= ~NSWindowStyleMaskTitled;
}
// NOTE: The content rect is only used the very first time MacVim is
@@ -175,7 +175,7 @@
[win setDelegate:self];
[win setInitialFirstResponder:[vimView textView]];
if ([win styleMask] & NSTexturedBackgroundWindowMask) {
if ([win styleMask] & NSWindowStyleMaskTexturedBackground) {
// On Leopard, we want to have a textured window to have nice
// looking tabs. But the textured window look implies rounded
// corners, which looks really weird -- disable them. This is a
@@ -1066,8 +1066,8 @@
// Decide whether too zoom horizontally or not (always zoom vertically).
NSEvent *event = [NSApp currentEvent];
BOOL cmdLeftClick = [event type] == NSLeftMouseUp &&
[event modifierFlags] & NSCommandKeyMask;
BOOL cmdLeftClick = [event type] == NSEventTypeLeftMouseUp &&
[event modifierFlags] & NSEventModifierFlagCommand;
BOOL zoomBoth = [[NSUserDefaults standardUserDefaults]
boolForKey:MMZoomBothKey];
zoomBoth = (zoomBoth && !cmdLeftClick) || (!zoomBoth && cmdLeftClick);
@@ -1179,7 +1179,7 @@
[context setDuration:0.5*duration];
[[window animator] setAlphaValue:0];
} completionHandler:^{
[window setStyleMask:([window styleMask] | NSFullScreenWindowMask)];
[window setStyleMask:([window styleMask] | NSWindowStyleMaskFullScreen)];
NSString *tabBarStyle = [[self class] tabBarStyleForUnified];
[[vimView tabBarControl] setStyleNamed:tabBarStyle];
[self updateTablineSeparator];
@@ -1244,7 +1244,7 @@
fullScreenEnabled = NO;
[window setAlphaValue:1];
[window setStyleMask:([window styleMask] & ~NSFullScreenWindowMask)];
[window setStyleMask:([window styleMask] & ~NSWindowStyleMaskFullScreen)];
NSString *tabBarStyle = [[self class] tabBarStyleForMetal];
[[vimView tabBarControl] setStyleNamed:tabBarStyle];
[self updateTablineSeparator];
@@ -1275,7 +1275,7 @@
[context setDuration:0.5*duration];
[[window animator] setAlphaValue:0];
} completionHandler:^{
[window setStyleMask:([window styleMask] & ~NSFullScreenWindowMask)];
[window setStyleMask:([window styleMask] & ~NSWindowStyleMaskFullScreen)];
NSString *tabBarStyle = [[self class] tabBarStyleForMetal];
[[vimView tabBarControl] setStyleNamed:tabBarStyle];
[self updateTablineSeparator];
@@ -1323,7 +1323,7 @@
fullScreenEnabled = YES;
[window setAlphaValue:1];
[window setStyleMask:([window styleMask] | NSFullScreenWindowMask)];
[window setStyleMask:([window styleMask] | NSWindowStyleMaskFullScreen)];
NSString *tabBarStyle = [[self class] tabBarStyleForUnified];
[[vimView tabBarControl] setStyleNamed:tabBarStyle];
[self updateTablineSeparator];
@@ -1513,7 +1513,7 @@
BOOL tabBarVisible = ![[vimView tabBarControl] isHidden];
BOOL toolbarHidden = [decoratedWindow toolbar] == nil;
BOOL windowTextured = ([decoratedWindow styleMask] &
NSTexturedBackgroundWindowMask) != 0;
NSWindowStyleMaskTexturedBackground) != 0;
BOOL hideSeparator = NO;
if (fullScreenEnabled || tabBarVisible)
+71 -10
View File
@@ -9,8 +9,6 @@
*/
#import <Cocoa/Cocoa.h>
#import <asl.h>
// Taken from /usr/include/AvailabilityMacros.h
#ifndef MAC_OS_X_VERSION_10_7
@@ -28,6 +26,9 @@
#ifndef MAC_OS_X_VERSION_10_11
# define MAC_OS_X_VERSION_10_11 101100
#endif
#ifndef MAC_OS_X_VERSION_10_12
# define MAC_OS_X_VERSION_10_12 101200
#endif
// Needed for pre-10.11 SDK
#ifndef NSAppKitVersionNumber10_10
@@ -37,6 +38,43 @@
# define NSAppKitVersionNumber10_10_Max 1349
#endif
#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_12
// Deprecated constants in 10.12 SDK
# define NSAlertStyleWarning NSWarningAlertStyle
# define NSCompositingOperationSourceOver NSCompositeSourceOver
# define NSControlSizeRegular NSRegularControlSize
# define NSEventModifierFlagCapsLock NSAlphaShiftKeyMask
# define NSEventModifierFlagCommand NSCommandKeyMask
# define NSEventModifierFlagControl NSControlKeyMask
# define NSEventModifierFlagDeviceIndependentFlagsMask NSDeviceIndependentModifierFlagsMask
# define NSEventModifierFlagHelp NSHelpKeyMask
# define NSEventModifierFlagNumericPad NSNumericPadKeyMask
# define NSEventModifierFlagOption NSAlternateKeyMask
# define NSEventModifierFlagShift NSShiftKeyMask
# define NSEventTypeApplicationDefined NSApplicationDefined
# define NSEventTypeKeyDown NSKeyDown
# define NSEventTypeKeyUp NSKeyUp
# define NSEventTypeLeftMouseUp NSLeftMouseUp
# define NSEventTypeMouseEntered NSMouseEntered
# define NSEventTypeMouseExited NSMouseExited
# define NSEventTypeRightMouseDown NSRightMouseDown
# define NSWindowStyleMaskBorderless NSBorderlessWindowMask
# define NSWindowStyleMaskClosable NSClosableWindowMask
# define NSWindowStyleMaskFullScreen NSFullScreenWindowMask
# define NSWindowStyleMaskMiniaturizable NSMiniaturizableWindowMask
# define NSWindowStyleMaskResizable NSResizableWindowMask
# define NSWindowStyleMaskTexturedBackground NSTexturedBackgroundWindowMask
# define NSWindowStyleMaskTitled NSTitledWindowMask
# define NSWindowStyleMaskUnifiedTitleAndToolbar NSUnifiedTitleAndToolbarWindowMask
#endif
#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_12
# import <asl.h>
# define MM_USE_ASL
#else
# import <os/log.h>
#endif
//
// This is the protocol MMBackend implements.
@@ -360,7 +398,10 @@ extern int ASLogLevel;
void ASLInit();
#define ASLog(level, fmt, ...) \
#if defined(MM_USE_ASL)
# define MM_ASL_LEVEL_DEFAULT ASL_LEVEL_NOTICE
# define ASLog(level, fmt, ...) \
if (level <= ASLogLevel) { \
asl_log(NULL, NULL, level, "%s@%d: %s", \
__PRETTY_FUNCTION__, __LINE__, \
@@ -369,10 +410,30 @@ void ASLInit();
// Note: These macros are used like ASLogErr(@"text num=%d", 42). Objective-C
// style specifiers (%@) are supported.
#define ASLogCrit(fmt, ...) ASLog(ASL_LEVEL_CRIT, fmt, ##__VA_ARGS__)
#define ASLogErr(fmt, ...) ASLog(ASL_LEVEL_ERR, fmt, ##__VA_ARGS__)
#define ASLogWarn(fmt, ...) ASLog(ASL_LEVEL_WARNING, fmt, ##__VA_ARGS__)
#define ASLogNotice(fmt, ...) ASLog(ASL_LEVEL_NOTICE, fmt, ##__VA_ARGS__)
#define ASLogInfo(fmt, ...) ASLog(ASL_LEVEL_INFO, fmt, ##__VA_ARGS__)
#define ASLogDebug(fmt, ...) ASLog(ASL_LEVEL_DEBUG, fmt, ##__VA_ARGS__)
#define ASLogTmp(fmt, ...) ASLog(ASL_LEVEL_NOTICE, fmt, ##__VA_ARGS__)
# define ASLogCrit(fmt, ...) ASLog(ASL_LEVEL_CRIT, fmt, ##__VA_ARGS__)
# define ASLogErr(fmt, ...) ASLog(ASL_LEVEL_ERR, fmt, ##__VA_ARGS__)
# define ASLogWarn(fmt, ...) ASLog(ASL_LEVEL_WARNING, fmt, ##__VA_ARGS__)
# define ASLogNotice(fmt, ...) ASLog(ASL_LEVEL_NOTICE, fmt, ##__VA_ARGS__)
# define ASLogInfo(fmt, ...) ASLog(ASL_LEVEL_INFO, fmt, ##__VA_ARGS__)
# define ASLogDebug(fmt, ...) ASLog(ASL_LEVEL_DEBUG, fmt, ##__VA_ARGS__)
# define ASLogTmp(fmt, ...) ASLog(ASL_LEVEL_NOTICE, fmt, ##__VA_ARGS__)
#else
# define MM_ASL_LEVEL_DEFAULT OS_LOG_TYPE_DEFAULT
# define ASLog(level, fmt, ...) \
if (level <= ASLogLevel) { \
os_log_with_type(OS_LOG_DEFAULT, level, "%s@%d: %s", \
__PRETTY_FUNCTION__, __LINE__, \
[[NSString stringWithFormat:fmt, ##__VA_ARGS__] UTF8String]); \
}
# define ASLogCrit(fmt, ...) ASLog(OS_LOG_TYPE_FAULT, fmt, ##__VA_ARGS__)
# define ASLogErr(fmt, ...) ASLog(OS_LOG_TYPE_ERROR, fmt, ##__VA_ARGS__)
# define ASLogWarn(fmt, ...) ASLog(OS_LOG_TYPE_DEFAULT, fmt, ##__VA_ARGS__)
# define ASLogNotice(fmt, ...) ASLog(OS_LOG_TYPE_DEFAULT, fmt, ##__VA_ARGS__)
# define ASLogInfo(fmt, ...) ASLog(OS_LOG_TYPE_INFO, fmt, ##__VA_ARGS__)
# define ASLogDebug(fmt, ...) ASLog(OS_LOG_TYPE_DEBUG, fmt, ##__VA_ARGS__)
# define ASLogTmp(fmt, ...) ASLog(OS_LOG_TYPE_DEFAULT, fmt, ##__VA_ARGS__)
#endif
+19 -3
View File
@@ -124,7 +124,7 @@ NSString *MMRendererKey = @"MMRenderer";
// Vim find pasteboard type (string contains Vim regex patterns)
NSString *VimFindPboardType = @"VimFindPboardType";
int ASLogLevel = ASL_LEVEL_NOTICE;
int ASLogLevel = MM_ASL_LEVEL_DEFAULT;
@@ -378,12 +378,27 @@ ASLInit()
if (logLevelObj) {
int logLevel = [logLevelObj intValue];
if (logLevel < 0) logLevel = 0;
#if defined(MM_USE_ASL)
if (logLevel > ASL_LEVEL_DEBUG) logLevel = ASL_LEVEL_DEBUG;
ASLogLevel = logLevel;
asl_set_filter(NULL, ASL_FILTER_MASK_UPTO(logLevel));
#else
switch (logLevel) {
case 0: case 1: case 2:
logLevel = OS_LOG_TYPE_FAULT; break;
case 3:
logLevel = OS_LOG_TYPE_ERROR; break;
case 4: case 5:
logLevel = OS_LOG_TYPE_DEFAULT; break;
case 6:
logLevel = OS_LOG_TYPE_INFO; break;
default:
logLevel = OS_LOG_TYPE_DEBUG; break;
}
#endif
ASLogLevel = logLevel;
}
#if defined(MM_USE_ASL)
// Allow for changing whether a copy of each log should be sent to stderr
// (this defaults to NO if this key is missing in the user defaults
// database). The above filter mask is applied to logs going to stderr,
@@ -391,4 +406,5 @@ ASLInit()
BOOL logToStdErr = [ud boolForKey:MMLogToStdErrKey];
if (logToStdErr)
asl_add_log_file(NULL, 2); // The file descriptor for stderr is 2
#endif
}
+190 -46
View File
@@ -22,7 +22,6 @@
1D384A0E100D671700D3C22F /* KeyBinding.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1D384A0D100D671700D3C22F /* KeyBinding.plist */; };
1D44972211FCA9B400B0630F /* MMCoreTextView+ToolTip.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D44972111FCA9B400B0630F /* MMCoreTextView+ToolTip.m */; };
1D493D580C5247BF00AB718C /* Vim in Copy Executables */ = {isa = PBXBuildFile; fileRef = 1D493D570C5247BF00AB718C /* Vim */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
1D493DBA0C52534300AB718C /* PSMTabBarControl.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 1D493DB90C52533B00AB718C /* PSMTabBarControl.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
1D60088B0E96A0B2003763F0 /* MMFindReplaceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D60088A0E96A0B2003763F0 /* MMFindReplaceController.m */; };
1D80591F0E1185EA001699D1 /* Miscellaneous.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D80591D0E1185EA001699D1 /* Miscellaneous.m */; };
1D80FBD40CBBD3B700102A1C /* MMFullScreenWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D80FBD00CBBD3B700102A1C /* MMFullScreenWindow.m */; };
@@ -63,11 +62,41 @@
1DE8CC620C5E2AAD003F56E3 /* Actions.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1DE8CC610C5E2AAD003F56E3 /* Actions.plist */; };
1DE9B9500D341AB8008FEDD4 /* MMWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DE9B94E0D341AB8008FEDD4 /* MMWindow.m */; };
1DED78600C6DE43D0079945F /* vimrc in Copy Vim Runtime Files */ = {isa = PBXBuildFile; fileRef = 1DED785F0C6DE43D0079945F /* vimrc */; };
1DFE25A50C527BC4003000F7 /* PSMTabBarControl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D493DB90C52533B00AB718C /* PSMTabBarControl.framework */; };
52818B031C1C08CE00F59085 /* QLStephen.qlgenerator in Copy QuickLookPlugin */ = {isa = PBXBuildFile; fileRef = 52818AFF1C1C075300F59085 /* QLStephen.qlgenerator */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
52A364731C4A5789005757EC /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52A364721C4A5789005757EC /* Sparkle.framework */; };
52A364761C4A57C1005757EC /* Sparkle.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 52A364721C4A5789005757EC /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
52B7ED9B1C4A4D6900AFFF15 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 52B7ED9A1C4A4D6900AFFF15 /* dsa_pub.pem */; };
52818B031C1C08CE00F59085 /* QLStephen.qlgenerator in Copy QuickLookPlugin */ = {isa = PBXBuildFile; fileRef = 52818AFF1C1C075300F59085 /* QLStephen.qlgenerator */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
52E08F881DA0C41A00CD9335 /* overflowImage.png in Resources */ = {isa = PBXBuildFile; fileRef = 52E08F5E1DA0C41A00CD9335 /* overflowImage.png */; };
52E08F891DA0C41A00CD9335 /* overflowImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 52E08F5F1DA0C41A00CD9335 /* overflowImage@2x.png */; };
52E08F8A1DA0C41A00CD9335 /* overflowImagePressed.png in Resources */ = {isa = PBXBuildFile; fileRef = 52E08F601DA0C41A00CD9335 /* overflowImagePressed.png */; };
52E08F8B1DA0C41A00CD9335 /* overflowImagePressed@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 52E08F611DA0C41A00CD9335 /* overflowImagePressed@2x.png */; };
52E08F8C1DA0C41A00CD9335 /* TabClose_Font_Pressed.psd in Resources */ = {isa = PBXBuildFile; fileRef = 52E08F621DA0C41A00CD9335 /* TabClose_Font_Pressed.psd */; };
52E08F8D1DA0C41A00CD9335 /* TabClose_Font_Pressed@2x.psd in Resources */ = {isa = PBXBuildFile; fileRef = 52E08F631DA0C41A00CD9335 /* TabClose_Font_Pressed@2x.psd */; };
52E08F8E1DA0C41A00CD9335 /* TabClose_Front.png in Resources */ = {isa = PBXBuildFile; fileRef = 52E08F641DA0C41A00CD9335 /* TabClose_Front.png */; };
52E08F8F1DA0C41A00CD9335 /* TabClose_Front@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 52E08F651DA0C41A00CD9335 /* TabClose_Front@2x.png */; };
52E08F901DA0C41A00CD9335 /* TabClose_Front_Pressed.png in Resources */ = {isa = PBXBuildFile; fileRef = 52E08F661DA0C41A00CD9335 /* TabClose_Front_Pressed.png */; };
52E08F911DA0C41A00CD9335 /* TabClose_Front_Pressed@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 52E08F671DA0C41A00CD9335 /* TabClose_Front_Pressed@2x.png */; };
52E08F921DA0C41A00CD9335 /* TabClose_Front_Rollover.png in Resources */ = {isa = PBXBuildFile; fileRef = 52E08F681DA0C41A00CD9335 /* TabClose_Front_Rollover.png */; };
52E08F931DA0C41A00CD9335 /* TabClose_Front_Rollover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 52E08F691DA0C41A00CD9335 /* TabClose_Front_Rollover@2x.png */; };
52E08F941DA0C41A00CD9335 /* TabNewMetal.png in Resources */ = {isa = PBXBuildFile; fileRef = 52E08F6A1DA0C41A00CD9335 /* TabNewMetal.png */; };
52E08F951DA0C41A00CD9335 /* TabNewMetalPressed.png in Resources */ = {isa = PBXBuildFile; fileRef = 52E08F6B1DA0C41A00CD9335 /* TabNewMetalPressed.png */; };
52E08F961DA0C41A00CD9335 /* TabNewMetalRollover.png in Resources */ = {isa = PBXBuildFile; fileRef = 52E08F6C1DA0C41A00CD9335 /* TabNewMetalRollover.png */; };
52E08F971DA0C41A00CD9335 /* Warning.png in Resources */ = {isa = PBXBuildFile; fileRef = 52E08F6D1DA0C41A00CD9335 /* Warning.png */; };
52E08F981DA0C41A00CD9335 /* NSWindow+PSM.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E08F701DA0C41A00CD9335 /* NSWindow+PSM.m */; };
52E08F991DA0C41A00CD9335 /* PSMDarkHighContrastTabStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E08F721DA0C41A00CD9335 /* PSMDarkHighContrastTabStyle.m */; };
52E08F9A1DA0C41A00CD9335 /* PSMDarkTabStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E08F741DA0C41A00CD9335 /* PSMDarkTabStyle.m */; };
52E08F9B1DA0C41A00CD9335 /* PSMLightHighContrastTabStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E08F761DA0C41A00CD9335 /* PSMLightHighContrastTabStyle.m */; };
52E08F9C1DA0C41A00CD9335 /* PSMOverflowPopUpButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E08F781DA0C41A00CD9335 /* PSMOverflowPopUpButton.m */; };
52E08F9D1DA0C41A00CD9335 /* PSMProgressIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E08F7A1DA0C41A00CD9335 /* PSMProgressIndicator.m */; };
52E08F9E1DA0C41A00CD9335 /* PSMRolloverButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E08F7C1DA0C41A00CD9335 /* PSMRolloverButton.m */; };
52E08F9F1DA0C41A00CD9335 /* PSMTabBarCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E08F7E1DA0C41A00CD9335 /* PSMTabBarCell.m */; };
52E08FA01DA0C41A00CD9335 /* PSMTabBarControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E08F801DA0C41A00CD9335 /* PSMTabBarControl.m */; };
52E08FA11DA0C41A00CD9335 /* PSMTabDragAssistant.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E08F821DA0C41A00CD9335 /* PSMTabDragAssistant.m */; };
52E08FA21DA0C41A00CD9335 /* PSMTabDragWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E08F841DA0C41A00CD9335 /* PSMTabDragWindow.m */; };
52E08FA31DA0C41A00CD9335 /* PSMYosemiteTabStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E08F871DA0C41A00CD9335 /* PSMYosemiteTabStyle.m */; };
52E08FA71DA0C4AE00CD9335 /* AMIndeterminateProgressIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E08FA61DA0C4AE00CD9335 /* AMIndeterminateProgressIndicator.m */; };
52E08FAA1DA0C77100CD9335 /* NSImage+iTerm.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E08FA81DA0C77100CD9335 /* NSImage+iTerm.m */; };
52E08FAC1DA0C85F00CD9335 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52E08FAB1DA0C85F00CD9335 /* QuartzCore.framework */; };
8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.nib */; };
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
@@ -75,20 +104,6 @@
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
1D493DB80C52533B00AB718C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 1D493DB30C52533B00AB718C /* PSMTabBarControl.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 53DF68FD067E5B5A0090B5B0;
remoteInfo = PSMTabBarControlFramework;
};
1D493DCC0C5254A400AB718C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 1D493DB30C52533B00AB718C /* PSMTabBarControl.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 53DF68FC067E5B5A0090B5B0;
remoteInfo = PSMTabBarControlFramework;
};
52818AFE1C1C075300F59085 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 52818AFA1C1C075300F59085 /* QuickLookStephen.xcodeproj */;
@@ -124,7 +139,6 @@
dstSubfolderSpec = 10;
files = (
52A364761C4A57C1005757EC /* Sparkle.framework in Copy Frameworks */,
1D493DBA0C52534300AB718C /* PSMTabBarControl.framework in Copy Frameworks */,
);
name = "Copy Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -182,7 +196,6 @@
1D384A0D100D671700D3C22F /* KeyBinding.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = KeyBinding.plist; sourceTree = "<group>"; };
1D44972111FCA9B400B0630F /* MMCoreTextView+ToolTip.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MMCoreTextView+ToolTip.m"; sourceTree = "<group>"; };
1D493D570C5247BF00AB718C /* Vim */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; name = Vim; path = ../Vim; sourceTree = SOURCE_ROOT; };
1D493DB30C52533B00AB718C /* PSMTabBarControl.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PSMTabBarControl.xcodeproj; path = PSMTabBarControl/PSMTabBarControl.xcodeproj; sourceTree = "<group>"; };
1D6008820E96886D003763F0 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/FindAndReplace.nib; sourceTree = "<group>"; };
1D6008890E96A0B2003763F0 /* MMFindReplaceController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMFindReplaceController.h; sourceTree = "<group>"; };
1D60088A0E96A0B2003763F0 /* MMFindReplaceController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMFindReplaceController.m; sourceTree = "<group>"; };
@@ -239,6 +252,52 @@
52818AFA1C1C075300F59085 /* QuickLookStephen.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = QuickLookStephen.xcodeproj; path = qlstephen/QuickLookStephen.xcodeproj; sourceTree = "<group>"; };
52A364721C4A5789005757EC /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = "<group>"; };
52B7ED9A1C4A4D6900AFFF15 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = "<group>"; };
52E08F5E1DA0C41A00CD9335 /* overflowImage.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = overflowImage.png; sourceTree = "<group>"; };
52E08F5F1DA0C41A00CD9335 /* overflowImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "overflowImage@2x.png"; sourceTree = "<group>"; };
52E08F601DA0C41A00CD9335 /* overflowImagePressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = overflowImagePressed.png; sourceTree = "<group>"; };
52E08F611DA0C41A00CD9335 /* overflowImagePressed@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "overflowImagePressed@2x.png"; sourceTree = "<group>"; };
52E08F621DA0C41A00CD9335 /* TabClose_Font_Pressed.psd */ = {isa = PBXFileReference; lastKnownFileType = file; path = TabClose_Font_Pressed.psd; sourceTree = "<group>"; };
52E08F631DA0C41A00CD9335 /* TabClose_Font_Pressed@2x.psd */ = {isa = PBXFileReference; lastKnownFileType = file; path = "TabClose_Font_Pressed@2x.psd"; sourceTree = "<group>"; };
52E08F641DA0C41A00CD9335 /* TabClose_Front.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabClose_Front.png; sourceTree = "<group>"; };
52E08F651DA0C41A00CD9335 /* TabClose_Front@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabClose_Front@2x.png"; sourceTree = "<group>"; };
52E08F661DA0C41A00CD9335 /* TabClose_Front_Pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabClose_Front_Pressed.png; sourceTree = "<group>"; };
52E08F671DA0C41A00CD9335 /* TabClose_Front_Pressed@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabClose_Front_Pressed@2x.png"; sourceTree = "<group>"; };
52E08F681DA0C41A00CD9335 /* TabClose_Front_Rollover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabClose_Front_Rollover.png; sourceTree = "<group>"; };
52E08F691DA0C41A00CD9335 /* TabClose_Front_Rollover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabClose_Front_Rollover@2x.png"; sourceTree = "<group>"; };
52E08F6A1DA0C41A00CD9335 /* TabNewMetal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabNewMetal.png; sourceTree = "<group>"; };
52E08F6B1DA0C41A00CD9335 /* TabNewMetalPressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabNewMetalPressed.png; sourceTree = "<group>"; };
52E08F6C1DA0C41A00CD9335 /* TabNewMetalRollover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabNewMetalRollover.png; sourceTree = "<group>"; };
52E08F6D1DA0C41A00CD9335 /* Warning.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Warning.png; sourceTree = "<group>"; };
52E08F6F1DA0C41A00CD9335 /* NSWindow+PSM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSWindow+PSM.h"; sourceTree = "<group>"; };
52E08F701DA0C41A00CD9335 /* NSWindow+PSM.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSWindow+PSM.m"; sourceTree = "<group>"; };
52E08F711DA0C41A00CD9335 /* PSMDarkHighContrastTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMDarkHighContrastTabStyle.h; sourceTree = "<group>"; };
52E08F721DA0C41A00CD9335 /* PSMDarkHighContrastTabStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMDarkHighContrastTabStyle.m; sourceTree = "<group>"; };
52E08F731DA0C41A00CD9335 /* PSMDarkTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMDarkTabStyle.h; sourceTree = "<group>"; };
52E08F741DA0C41A00CD9335 /* PSMDarkTabStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMDarkTabStyle.m; sourceTree = "<group>"; };
52E08F751DA0C41A00CD9335 /* PSMLightHighContrastTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMLightHighContrastTabStyle.h; sourceTree = "<group>"; };
52E08F761DA0C41A00CD9335 /* PSMLightHighContrastTabStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMLightHighContrastTabStyle.m; sourceTree = "<group>"; };
52E08F771DA0C41A00CD9335 /* PSMOverflowPopUpButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMOverflowPopUpButton.h; sourceTree = "<group>"; };
52E08F781DA0C41A00CD9335 /* PSMOverflowPopUpButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMOverflowPopUpButton.m; sourceTree = "<group>"; };
52E08F791DA0C41A00CD9335 /* PSMProgressIndicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMProgressIndicator.h; sourceTree = "<group>"; };
52E08F7A1DA0C41A00CD9335 /* PSMProgressIndicator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMProgressIndicator.m; sourceTree = "<group>"; };
52E08F7B1DA0C41A00CD9335 /* PSMRolloverButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMRolloverButton.h; sourceTree = "<group>"; };
52E08F7C1DA0C41A00CD9335 /* PSMRolloverButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMRolloverButton.m; sourceTree = "<group>"; };
52E08F7D1DA0C41A00CD9335 /* PSMTabBarCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMTabBarCell.h; sourceTree = "<group>"; };
52E08F7E1DA0C41A00CD9335 /* PSMTabBarCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMTabBarCell.m; sourceTree = "<group>"; };
52E08F7F1DA0C41A00CD9335 /* PSMTabBarControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMTabBarControl.h; sourceTree = "<group>"; };
52E08F801DA0C41A00CD9335 /* PSMTabBarControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMTabBarControl.m; sourceTree = "<group>"; };
52E08F811DA0C41A00CD9335 /* PSMTabDragAssistant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMTabDragAssistant.h; sourceTree = "<group>"; };
52E08F821DA0C41A00CD9335 /* PSMTabDragAssistant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMTabDragAssistant.m; sourceTree = "<group>"; };
52E08F831DA0C41A00CD9335 /* PSMTabDragWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMTabDragWindow.h; sourceTree = "<group>"; };
52E08F841DA0C41A00CD9335 /* PSMTabDragWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMTabDragWindow.m; sourceTree = "<group>"; };
52E08F851DA0C41A00CD9335 /* PSMTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMTabStyle.h; sourceTree = "<group>"; };
52E08F861DA0C41A00CD9335 /* PSMYosemiteTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMYosemiteTabStyle.h; sourceTree = "<group>"; };
52E08F871DA0C41A00CD9335 /* PSMYosemiteTabStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMYosemiteTabStyle.m; sourceTree = "<group>"; };
52E08FA51DA0C4AE00CD9335 /* AMIndeterminateProgressIndicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AMIndeterminateProgressIndicator.h; sourceTree = "<group>"; };
52E08FA61DA0C4AE00CD9335 /* AMIndeterminateProgressIndicator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AMIndeterminateProgressIndicator.m; sourceTree = "<group>"; };
52E08FA81DA0C77100CD9335 /* NSImage+iTerm.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSImage+iTerm.m"; sourceTree = "<group>"; };
52E08FA91DA0C77100CD9335 /* NSImage+iTerm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSImage+iTerm.h"; sourceTree = "<group>"; };
52E08FAB1DA0C85F00CD9335 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = ../../../../../../../System/Library/Frameworks/QuartzCore.framework; sourceTree = "<group>"; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D1107320486CEB800E47090 /* MacVim.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MacVim.app; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
@@ -248,7 +307,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
1DFE25A50C527BC4003000F7 /* PSMTabBarControl.framework in Frameworks */,
52E08FAC1DA0C85F00CD9335 /* QuartzCore.framework in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
1D8B5A53104AF9FF002E59D5 /* Carbon.framework in Frameworks */,
52A364731C4A5789005757EC /* Sparkle.framework in Frameworks */,
@@ -315,6 +374,7 @@
children = (
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
52E08FAB1DA0C85F00CD9335 /* QuartzCore.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
@@ -342,14 +402,6 @@
name = Executables;
sourceTree = "<group>";
};
1D493DB40C52533B00AB718C /* Products */ = {
isa = PBXGroup;
children = (
1D493DB90C52533B00AB718C /* PSMTabBarControl.framework */,
);
name = Products;
sourceTree = "<group>";
};
1DE602460C587F760055263D /* Vim Resources */ = {
isa = PBXGroup;
children = (
@@ -429,9 +481,9 @@
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
52E08F5C1DA0BEB900CD9335 /* PSMTabBarControl */,
52A364721C4A5789005757EC /* Sparkle.framework */,
1D8B5A52104AF9FF002E59D5 /* Carbon.framework */,
1D493DB30C52533B00AB718C /* PSMTabBarControl.xcodeproj */,
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
);
@@ -454,6 +506,85 @@
name = Products;
sourceTree = "<group>";
};
52E08F5C1DA0BEB900CD9335 /* PSMTabBarControl */ = {
isa = PBXGroup;
children = (
52E08F5D1DA0C41A00CD9335 /* images */,
52E08F6E1DA0C41A00CD9335 /* source */,
52E08FA41DA0C4AE00CD9335 /* AMIndeterminateProgressIndicator */,
);
name = PSMTabBarControl;
sourceTree = "<group>";
};
52E08F5D1DA0C41A00CD9335 /* images */ = {
isa = PBXGroup;
children = (
52E08F5E1DA0C41A00CD9335 /* overflowImage.png */,
52E08F5F1DA0C41A00CD9335 /* overflowImage@2x.png */,
52E08F601DA0C41A00CD9335 /* overflowImagePressed.png */,
52E08F611DA0C41A00CD9335 /* overflowImagePressed@2x.png */,
52E08F621DA0C41A00CD9335 /* TabClose_Font_Pressed.psd */,
52E08F631DA0C41A00CD9335 /* TabClose_Font_Pressed@2x.psd */,
52E08F641DA0C41A00CD9335 /* TabClose_Front.png */,
52E08F651DA0C41A00CD9335 /* TabClose_Front@2x.png */,
52E08F661DA0C41A00CD9335 /* TabClose_Front_Pressed.png */,
52E08F671DA0C41A00CD9335 /* TabClose_Front_Pressed@2x.png */,
52E08F681DA0C41A00CD9335 /* TabClose_Front_Rollover.png */,
52E08F691DA0C41A00CD9335 /* TabClose_Front_Rollover@2x.png */,
52E08F6A1DA0C41A00CD9335 /* TabNewMetal.png */,
52E08F6B1DA0C41A00CD9335 /* TabNewMetalPressed.png */,
52E08F6C1DA0C41A00CD9335 /* TabNewMetalRollover.png */,
52E08F6D1DA0C41A00CD9335 /* Warning.png */,
);
name = images;
path = PSMTabBarControl/images;
sourceTree = "<group>";
};
52E08F6E1DA0C41A00CD9335 /* source */ = {
isa = PBXGroup;
children = (
52E08F6F1DA0C41A00CD9335 /* NSWindow+PSM.h */,
52E08F701DA0C41A00CD9335 /* NSWindow+PSM.m */,
52E08F711DA0C41A00CD9335 /* PSMDarkHighContrastTabStyle.h */,
52E08F721DA0C41A00CD9335 /* PSMDarkHighContrastTabStyle.m */,
52E08F731DA0C41A00CD9335 /* PSMDarkTabStyle.h */,
52E08F741DA0C41A00CD9335 /* PSMDarkTabStyle.m */,
52E08F751DA0C41A00CD9335 /* PSMLightHighContrastTabStyle.h */,
52E08F761DA0C41A00CD9335 /* PSMLightHighContrastTabStyle.m */,
52E08F771DA0C41A00CD9335 /* PSMOverflowPopUpButton.h */,
52E08F781DA0C41A00CD9335 /* PSMOverflowPopUpButton.m */,
52E08F791DA0C41A00CD9335 /* PSMProgressIndicator.h */,
52E08F7A1DA0C41A00CD9335 /* PSMProgressIndicator.m */,
52E08F7B1DA0C41A00CD9335 /* PSMRolloverButton.h */,
52E08F7C1DA0C41A00CD9335 /* PSMRolloverButton.m */,
52E08F7D1DA0C41A00CD9335 /* PSMTabBarCell.h */,
52E08F7E1DA0C41A00CD9335 /* PSMTabBarCell.m */,
52E08F7F1DA0C41A00CD9335 /* PSMTabBarControl.h */,
52E08F801DA0C41A00CD9335 /* PSMTabBarControl.m */,
52E08F811DA0C41A00CD9335 /* PSMTabDragAssistant.h */,
52E08F821DA0C41A00CD9335 /* PSMTabDragAssistant.m */,
52E08F831DA0C41A00CD9335 /* PSMTabDragWindow.h */,
52E08F841DA0C41A00CD9335 /* PSMTabDragWindow.m */,
52E08F851DA0C41A00CD9335 /* PSMTabStyle.h */,
52E08F861DA0C41A00CD9335 /* PSMYosemiteTabStyle.h */,
52E08F871DA0C41A00CD9335 /* PSMYosemiteTabStyle.m */,
);
name = source;
path = PSMTabBarControl/source;
sourceTree = "<group>";
};
52E08FA41DA0C4AE00CD9335 /* AMIndeterminateProgressIndicator */ = {
isa = PBXGroup;
children = (
52E08FA81DA0C77100CD9335 /* NSImage+iTerm.m */,
52E08FA91DA0C77100CD9335 /* NSImage+iTerm.h */,
52E08FA51DA0C4AE00CD9335 /* AMIndeterminateProgressIndicator.h */,
52E08FA61DA0C4AE00CD9335 /* AMIndeterminateProgressIndicator.m */,
);
name = AMIndeterminateProgressIndicator;
path = PSMTabBarControl/AMIndeterminateProgressIndicator;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -473,7 +604,6 @@
buildRules = (
);
dependencies = (
1D493DCD0C5254A400AB718C /* PBXTargetDependency */,
52818B011C1C084100F59085 /* PBXTargetDependency */,
);
name = MacVim;
@@ -504,10 +634,6 @@
mainGroup = 29B97314FDCFA39411CA2CEA /* MacVim */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = 1D493DB40C52533B00AB718C /* Products */;
ProjectRef = 1D493DB30C52533B00AB718C /* PSMTabBarControl.xcodeproj */;
},
{
ProductGroup = 52818AFB1C1C075300F59085 /* Products */;
ProjectRef = 52818AFA1C1C075300F59085 /* QuickLookStephen.xcodeproj */;
@@ -521,13 +647,6 @@
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
1D493DB90C52533B00AB718C /* PSMTabBarControl.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = PSMTabBarControl.framework;
remoteRef = 1D493DB80C52533B00AB718C /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
52818AFF1C1C075300F59085 /* QLStephen.qlgenerator */ = {
isa = PBXReferenceProxy;
fileType = wrapper.cfbundle;
@@ -544,7 +663,12 @@
files = (
52B7ED9B1C4A4D6900AFFF15 /* dsa_pub.pem in Resources */,
8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */,
52E08F931DA0C41A00CD9335 /* TabClose_Front_Rollover@2x.png in Resources */,
52E08F951DA0C41A00CD9335 /* TabNewMetalPressed.png in Resources */,
52E08F8E1DA0C41A00CD9335 /* TabClose_Front.png in Resources */,
52E08F901DA0C41A00CD9335 /* TabClose_Front_Pressed.png in Resources */,
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
52E08F961DA0C41A00CD9335 /* TabNewMetalRollover.png in Resources */,
1D0E051C0BA5F83800B6049E /* Colors.plist in Resources */,
1DD04DEC0C529C5E006CDC2B /* Credits.rtf in Resources */,
1DE8CC620C5E2AAD003F56E3 /* Actions.plist in Resources */,
@@ -554,29 +678,40 @@
1DD3D51E0D82D4C9006E4320 /* ibeam.png in Resources */,
1D22374B0E45DF4800E6FFFF /* Advanced.png in Resources */,
1DCD00BF0E50B2B700460166 /* Attention.png in Resources */,
52E08F8D1DA0C41A00CD9335 /* TabClose_Font_Pressed@2x.psd in Resources */,
1DCD00C00E50B2B700460166 /* Copy.png in Resources */,
1DCD00C10E50B2B700460166 /* Cut.png in Resources */,
1DCD00C20E50B2B700460166 /* FindHelp.png in Resources */,
52E08F881DA0C41A00CD9335 /* overflowImage.png in Resources */,
1DCD00C30E50B2B700460166 /* FindNext.png in Resources */,
1DCD00C40E50B2B700460166 /* FindPrev.png in Resources */,
1DCD00C50E50B2B700460166 /* Help.png in Resources */,
1DCD00C60E50B2B700460166 /* LoadSesn.png in Resources */,
52E08F911DA0C41A00CD9335 /* TabClose_Front_Pressed@2x.png in Resources */,
52E08F8A1DA0C41A00CD9335 /* overflowImagePressed.png in Resources */,
1DCD00C70E50B2B700460166 /* Make.png in Resources */,
1DCD00C80E50B2B700460166 /* Open.png in Resources */,
1DCD00C90E50B2B700460166 /* Paste.png in Resources */,
1DCD00CA0E50B2B700460166 /* Print.png in Resources */,
1DCD00CB0E50B2B700460166 /* Redo.png in Resources */,
52E08F8B1DA0C41A00CD9335 /* overflowImagePressed@2x.png in Resources */,
1DCD00CC0E50B2B700460166 /* Replace.png in Resources */,
1DCD00CD0E50B2B700460166 /* RunCtags.png in Resources */,
1DCD00CE0E50B2B700460166 /* RunScript.png in Resources */,
1DCD00CF0E50B2B700460166 /* Save.png in Resources */,
1DCD00D00E50B2B700460166 /* SaveAll.png in Resources */,
1DCD00D10E50B2B700460166 /* SaveSesn.png in Resources */,
52E08F941DA0C41A00CD9335 /* TabNewMetal.png in Resources */,
52E08F891DA0C41A00CD9335 /* overflowImage@2x.png in Resources */,
1DCD00D20E50B2B700460166 /* TagJump.png in Resources */,
1DCD00D30E50B2B700460166 /* Undo.png in Resources */,
52E08F971DA0C41A00CD9335 /* Warning.png in Resources */,
52E08F8F1DA0C41A00CD9335 /* TabClose_Front@2x.png in Resources */,
1D8BEA74104992290069B072 /* FindAndReplace.nib in Resources */,
1D9C60520EF79C0C0034AD44 /* MacVim.icns in Resources */,
52E08F8C1DA0C41A00CD9335 /* TabClose_Font_Pressed.psd in Resources */,
1D384A0E100D671700D3C22F /* KeyBinding.plist in Resources */,
52E08F921DA0C41A00CD9335 /* TabClose_Front_Rollover.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -605,14 +740,24 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
52E08F9D1DA0C41A00CD9335 /* PSMProgressIndicator.m in Sources */,
52E08F9A1DA0C41A00CD9335 /* PSMDarkTabStyle.m in Sources */,
52E08FA11DA0C41A00CD9335 /* PSMTabDragAssistant.m in Sources */,
8D11072D0486CEB800E47090 /* main.m in Sources */,
1D1474980C56703C0038FA2B /* MacVim.m in Sources */,
52E08F9F1DA0C41A00CD9335 /* PSMTabBarCell.m in Sources */,
1D1474A00C5673AE0038FA2B /* MMAppController.m in Sources */,
52E08FA31DA0C41A00CD9335 /* PSMYosemiteTabStyle.m in Sources */,
52E08F991DA0C41A00CD9335 /* PSMDarkHighContrastTabStyle.m in Sources */,
1D1474AA0C5677450038FA2B /* MMTextStorage.m in Sources */,
1D1474B00C5678370038FA2B /* MMTextView.m in Sources */,
52E08FA21DA0C41A00CD9335 /* PSMTabDragWindow.m in Sources */,
52E08F981DA0C41A00CD9335 /* NSWindow+PSM.m in Sources */,
1D1474B60C56796D0038FA2B /* MMVimController.m in Sources */,
1D1474BC0C567A910038FA2B /* MMWindowController.m in Sources */,
52E08F9B1DA0C41A00CD9335 /* PSMLightHighContrastTabStyle.m in Sources */,
1D09AB420C6A4D520045497E /* MMTypesetter.m in Sources */,
52E08F9E1DA0C41A00CD9335 /* PSMRolloverButton.m in Sources */,
1DD66ECE0C803D3600EBDAB3 /* MMApplication.m in Sources */,
1D80FBD40CBBD3B700102A1C /* MMFullScreenWindow.m in Sources */,
1D80FBD60CBBD3B700102A1C /* MMVimView.m in Sources */,
@@ -620,21 +765,20 @@
1DE3F8EB0D50F84600052B9E /* MMPreferenceController.m in Sources */,
0395A8330D71ED7800881434 /* DBPrefsWindowController.m in Sources */,
1D80591F0E1185EA001699D1 /* Miscellaneous.m in Sources */,
52E08FA01DA0C41A00CD9335 /* PSMTabBarControl.m in Sources */,
1D145C7F0E5227CE00691AA0 /* MMTextViewHelper.m in Sources */,
52E08FAA1DA0C77100CD9335 /* NSImage+iTerm.m in Sources */,
1D60088B0E96A0B2003763F0 /* MMFindReplaceController.m in Sources */,
1DE63FFB0E71820F00959BDB /* MMCoreTextView.m in Sources */,
1D44972211FCA9B400B0630F /* MMCoreTextView+ToolTip.m in Sources */,
52E08FA71DA0C4AE00CD9335 /* AMIndeterminateProgressIndicator.m in Sources */,
52E08F9C1DA0C41A00CD9335 /* PSMOverflowPopUpButton.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
1D493DCD0C5254A400AB718C /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = PSMTabBarControlFramework;
targetProxy = 1D493DCC0C5254A400AB718C /* PBXContainerItemProxy */;
};
52818B011C1C084100F59085 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = QuickLookStephen;
+1 -1
View File
@@ -260,7 +260,7 @@ showHiddenFilesView()
[button setAction:@selector(hiddenFilesButtonToggled:)];
// Use the regular control size (checkbox is a bit smaller without this)
NSControlSize buttonSize = NSRegularControlSize;
NSControlSize buttonSize = NSControlSizeRegular;
float fontSize = [NSFont systemFontSizeForControlSize:buttonSize];
NSCell *theCell = [button cell];
NSFont *theFont = [NSFont fontWithName:[[theCell font] fontName]
@@ -0,0 +1,19 @@
//
// AMIndeterminateProgressIndicator.h
//
// Created by Andreas on 23.01.07.
// Copyright 2007 Andreas Mayer. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface AMIndeterminateProgressIndicator : NSView
@property(nonatomic, retain) NSColor *color;
- (void)startAnimation:(id)sender;
- (void)stopAnimation:(id)sender;
@end
@@ -0,0 +1,164 @@
//
// AMIndeterminateProgressIndicator.m
//
// Created by Andreas on 23.01.07.
// Copyright 2007 Andreas Mayer. All rights reserved.
//
// Updated to use a layer animation by George Nachman on 3/10/2016.
#import "AMIndeterminateProgressIndicator.h"
#import "NSImage+iTerm.h"
#import <QuartzCore/QuartzCore.h>
static CGFloat DegreesToRadians(double radians) {
return radians / 180.0 * M_PI;
}
@interface AMIndeterminateProgressIndicator()
@property(nonatomic, retain) CAKeyframeAnimation *animation;
@end
@implementation AMIndeterminateProgressIndicator {
NSSize _animationSize;
}
- (id)initWithFrame:(NSRect)frameRect {
self = [super initWithFrame:frameRect];
if (self) {
self.wantsLayer = YES;
[self setColor:[NSColor blackColor]];
}
return self;
}
- (void)dealloc {
[_animation release];
[_color release];
[super dealloc];
}
- (void)setColor:(NSColor *)value {
if (_color != value) {
[_color autorelease];
_color = [value retain];
assert([_color alphaComponent] > 0.999);
}
}
- (NSSize)physicalSize {
NSSize size = self.frame.size;
CGFloat scale = self.layer.contentsScale;
size.width *= scale;
size.height *= scale;
return size;
}
- (void)startAnimation:(id)sender {
if (!self.animation || !NSEqualSizes(_animationSize, self.physicalSize)) {
_animationSize = self.physicalSize;
self.animation = [CAKeyframeAnimation animationWithKeyPath:@"contents"];
self.animation.calculationMode = kCAAnimationDiscrete;
self.animation.duration = 0.5;
self.animation.values = self.images;
self.animation.repeatCount = INFINITY;
}
[self.layer removeAllAnimations];
[self.layer addAnimation:_animation forKey:@"contents"];
}
- (void)stopAnimation:(id)sender {
[self.layer removeAllAnimations];
}
// Returns an array of CGImageRefs for each frame of the animation.
- (NSArray *)images {
NSMutableArray *frames = [NSMutableArray array];
NSSize size = self.physicalSize;
for (NSInteger step = 0; step < self.numberOfSteps; step++) {
NSImage *image = [[[NSImage alloc] initWithSize:size] autorelease];
[image lockFocus];
[self drawStep:step];
[image unlockFocus];
NSBitmapImageRep *rep = image.bitmapImageRep;
NSData *data = [rep representationUsingType:NSPNGFileType
properties:@{ NSImageInterlaced: @NO,
NSImageCompressionFactor: @1 }];
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data);
CGImageRef cgImage = CGImageCreateWithPNGDataProvider(provider,
NULL,
true,
kCGRenderingIntentDefault);
CFRelease(provider);
[frames addObject:(id)cgImage];
CFRelease(cgImage);
}
return frames;
}
- (NSInteger)numberOfSteps {
return 12;
}
- (void)drawStrokeFromPoint:(NSPoint)firstPoint
toPoint:(NSPoint)secondPoint
strokeWidth:(CGFloat)strokeWidth {
NSLineCapStyle previousLineCapStyle = [NSBezierPath defaultLineCapStyle];
CGFloat previousLineWidth = [NSBezierPath defaultLineWidth];
[NSBezierPath setDefaultLineCapStyle:NSRoundLineCapStyle];
[NSBezierPath setDefaultLineWidth:strokeWidth];
[NSBezierPath strokeLineFromPoint:firstPoint toPoint:secondPoint];
// Restore previous defaults
[NSBezierPath setDefaultLineCapStyle:previousLineCapStyle];
[NSBezierPath setDefaultLineWidth:previousLineWidth];
}
- (void)drawStep:(NSInteger)step {
CGRect frame = self.frame;
// Scale frame by the layer's contentsScale so we fill it properly.
CGFloat scale = self.layer.contentsScale;
frame.size.width *= scale;
frame.size.height *= scale;
frame.origin.x *= scale;
frame.origin.y *= scale;
float size = MIN(frame.size.width, frame.size.height);
NSPoint center = NSMakePoint(NSMidX(frame), NSMidY(frame));
CGFloat outerRadius;
CGFloat innerRadius;
const CGFloat strokeWidth = size * 0.09;
if (size >= 32.0 * scale) {
outerRadius = size * 0.38;
innerRadius = size * 0.23;
} else {
outerRadius = size * 0.48;
innerRadius = size * 0.27;
}
NSPoint innerPoint;
NSPoint outerPoint;
CGFloat anglePerStep = 360 / self.numberOfSteps;
CGFloat initialAngle = DegreesToRadians(270 - (step * anglePerStep));
for (NSInteger i = 0; i < self.numberOfSteps; i++) {
CGFloat currentAngle = initialAngle - DegreesToRadians(anglePerStep) * i;
[[_color colorWithAlphaComponent:1.0 - sqrt(i) * 0.25] set];
outerPoint = NSMakePoint(center.x + cos(currentAngle) * outerRadius,
center.y + sin(currentAngle) * outerRadius);
innerPoint = NSMakePoint(center.x + cos(currentAngle) * innerRadius,
center.y + sin(currentAngle) * innerRadius);
[self drawStrokeFromPoint:innerPoint toPoint:outerPoint strokeWidth:strokeWidth];
}
}
@end
@@ -0,0 +1,15 @@
//
// NSImage+iTerm.h
// iTerm
//
// Created by George Nachman on 7/20/14.
//
//
#import <Cocoa/Cocoa.h>
@interface NSImage (iTerm)
- (NSBitmapImageRep *)bitmapImageRep;
@end
@@ -0,0 +1,45 @@
//
// NSImage+iTerm.m
// iTerm
//
// Created by George Nachman on 7/20/14.
//
//
#import "NSImage+iTerm.h"
@implementation NSImage (iTerm)
- (NSBitmapImageRep *)bitmapImageRep {
int width = [self size].width;
int height = [self size].height;
if (width < 1 || height < 1) {
return nil;
}
NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
pixelsWide:width
pixelsHigh:height
bitsPerSample:8
samplesPerPixel:4
hasAlpha:YES
isPlanar:NO
colorSpaceName:NSDeviceRGBColorSpace
bytesPerRow:width * 4
bitsPerPixel:32];
NSGraphicsContext *ctx = [NSGraphicsContext graphicsContextWithBitmapImageRep: rep];
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:ctx];
[self drawAtPoint:NSZeroPoint
fromRect:NSZeroRect
operation:NSCompositeCopy
fraction:1.0];
[ctx flushGraphics];
[NSGraphicsContext restoreGraphicsState];
return [rep autorelease];
}
@end
@@ -1,24 +0,0 @@
{
IBClasses = (
{
ACTIONS = {newWindow = id; };
CLASS = AppController;
LANGUAGE = ObjC;
SUPERCLASS = NSObject;
},
{CLASS = FakeModel; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{
ACTIONS = {addNewTab = id; closeTab = id; };
CLASS = FirstResponder;
LANGUAGE = ObjC;
SUPERCLASS = NSObject;
},
{
CLASS = PSMTabBarControl;
LANGUAGE = ObjC;
OUTLETS = {delegate = id; partnerView = id; style = id; tabView = NSTabView; };
SUPERCLASS = NSControl;
}
);
IBVersion = 1;
}
@@ -1,21 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
<string>135 107 356 240 0 0 1680 1028 </string>
<key>IBEditorPositions</key>
<dict>
<key>29</key>
<string>130 357 371 44 0 0 1680 1028 </string>
</dict>
<key>IBFramework Version</key>
<string>443.0</string>
<key>IBOpenObjects</key>
<array>
<integer>29</integer>
</array>
<key>IBSystem Version</key>
<string>8H14</string>
</dict>
</plist>
Binary file not shown.
@@ -1,22 +0,0 @@
{
IBClasses = (
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{
CLASS = PSMTabBarControlInspector;
LANGUAGE = ObjC;
OUTLETS = {
"_allowsDragBetweenWindows" = NSButton;
"_canCloseOnlyTab" = NSButton;
"_cellMaxWidth" = NSTextField;
"_cellMinWidth" = NSTextField;
"_cellOptimumWidth" = NSTextField;
"_hideForSingleTab" = NSButton;
"_showAddTab" = NSButton;
"_sizeToFit" = NSButton;
"_stylePopUp" = NSPopUpButton;
};
SUPERCLASS = IBInspector;
}
);
IBVersion = 1;
}
@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
<string>83 72 356 240 0 0 1680 1028 </string>
<key>IBFramework Version</key>
<string>446.1</string>
<key>IBOpenObjects</key>
<array>
<integer>3</integer>
</array>
<key>IBSystem Version</key>
<string>8I127</string>
</dict>
</plist>
@@ -1,28 +0,0 @@
{
IBClasses = (
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{CLASS = PSMAquaTabStyle; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{CLASS = PSMMetalTabStyle; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{CLASS = PSMOverflowPopUpButton; LANGUAGE = ObjC; SUPERCLASS = NSPopUpButton; },
{
CLASS = PSMProgressIndicator;
LANGUAGE = ObjC;
SUPERCLASS = NSProgressIndicator;
},
{CLASS = PSMRolloverButton; LANGUAGE = ObjC; SUPERCLASS = NSButton; },
{CLASS = PSMTabBarCell; LANGUAGE = ObjC; SUPERCLASS = NSActionCell; },
{
CLASS = PSMTabBarControl;
LANGUAGE = ObjC;
OUTLETS = {delegate = id; partnerView = id; style = id; tabView = NSTabView; };
SUPERCLASS = NSControl;
},
{
CLASS = PSMTabBarControlPalette;
LANGUAGE = ObjC;
OUTLETS = {repImage = NSImageView; };
SUPERCLASS = IBPalette;
}
);
IBVersion = 1;
}
@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
<string>83 142 356 240 0 0 1680 1028 </string>
<key>IBFramework Version</key>
<string>443.0</string>
<key>IBOpenObjects</key>
<array>
<integer>2</integer>
</array>
<key>IBSystem Version</key>
<string>8H14</string>
</dict>
</plist>
@@ -1,38 +0,0 @@
{
IBClasses = (
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{
ACTIONS = {
addNewTab = id;
closeTab = id;
configAddTabButton = id;
configCanCloseOnlyTab = id;
configHideForSingleTab = id;
configStyle = id;
configTabMaxWidth = id;
configTabMinWidth = id;
configTabOptimumWidth = id;
configTabSizeToFit = id;
isProcessingAction = id;
setIconNamed = id;
setObjectCount = id;
setTabLabel = id;
stopProcessing = id;
toggleToolbar = id;
};
CLASS = WindowController;
LANGUAGE = ObjC;
OUTLETS = {
drawer = NSDrawer;
iconButton = NSPopUpButton;
isProcessingButton = NSButton;
objectCounterField = NSTextField;
tabBar = PSMTabBarControl;
tabField = NSTextField;
tabView = NSTabView;
};
SUPERCLASS = NSWindowController;
}
);
IBVersion = 1;
}
@@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
<string>35 49 356 240 0 0 1024 746 </string>
<key>IBEditorPositions</key>
<dict>
<key>18</key>
<string>271 466 481 64 0 0 1024 746 </string>
<key>20</key>
<string>400 254 224 482 0 0 1024 746 </string>
</dict>
<key>IBFramework Version</key>
<string>446.1</string>
<key>IBOpenObjects</key>
<array>
<integer>18</integer>
<integer>20</integer>
<integer>5</integer>
</array>
<key>IBSystem Version</key>
<string>8J135</string>
</dict>
</plist>
-24
View File
@@ -1,24 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>PSMTabBarControl</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>com.positivespinmedia.PSMTabBarControl</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleSignature</key>
<string>PSM1</string>
<key>CFBundleVersion</key>
<string>1.1</string>
</dict>
</plist>
@@ -1,7 +0,0 @@
{
PSMTabBarControl = {
SuperClass = NSControl;
Attributes = {
};
};
}
@@ -1,719 +0,0 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXAggregateTarget section */
53DF6901067E5B8E0090B5B0 /* All */ = {
isa = PBXAggregateTarget;
buildConfigurationList = C056398708A954F8003078D8 /* Build configuration list for PBXAggregateTarget "All" */;
buildPhases = (
);
dependencies = (
53DF6905067E5B930090B5B0 /* PBXTargetDependency */,
);
name = All;
productName = All;
};
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
13F8B89007B43554008AE28D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD92D38A0106425D02CA0E72 /* Cocoa.framework */; };
523897F415BDA9AC00498A53 /* TabClose_Front_Pressed@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 523897EE15BDA9AC00498A53 /* TabClose_Front_Pressed@2x.png */; };
523897F515BDA9AC00498A53 /* TabClose_Front_Rollover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 523897EF15BDA9AC00498A53 /* TabClose_Front_Rollover@2x.png */; };
523897F615BDA9AC00498A53 /* TabClose_Front@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 523897F015BDA9AC00498A53 /* TabClose_Front@2x.png */; };
523897F715BDA9AC00498A53 /* TabNewMetal@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 523897F115BDA9AC00498A53 /* TabNewMetal@2x.png */; };
523897F815BDA9AC00498A53 /* TabNewMetalPressed@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 523897F215BDA9AC00498A53 /* TabNewMetalPressed@2x.png */; };
523897F915BDA9AC00498A53 /* TabNewMetalRollover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 523897F315BDA9AC00498A53 /* TabNewMetalRollover@2x.png */; };
52A57C0F15BBA230003EC59C /* TabClose_Front.png in Resources */ = {isa = PBXBuildFile; fileRef = 52A57C0C15BBA230003EC59C /* TabClose_Front.png */; };
52A57C1015BBA230003EC59C /* TabClose_Front_Pressed.png in Resources */ = {isa = PBXBuildFile; fileRef = 52A57C0D15BBA230003EC59C /* TabClose_Front_Pressed.png */; };
52A57C1115BBA230003EC59C /* TabClose_Front_Rollover.png in Resources */ = {isa = PBXBuildFile; fileRef = 52A57C0E15BBA230003EC59C /* TabClose_Front_Rollover.png */; };
52C0B9B415BDB7A9000C268F /* overflowImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 52C0B9B215BDB7A9000C268F /* overflowImage@2x.png */; };
52C0B9B515BDB7A9000C268F /* overflowImagePressed@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 52C0B9B315BDB7A9000C268F /* overflowImagePressed@2x.png */; };
52C268D015BDB72B0012FECA /* overflowImage.png in Resources */ = {isa = PBXBuildFile; fileRef = 52C268CE15BDB72B0012FECA /* overflowImage.png */; };
52C268D115BDB72B0012FECA /* overflowImagePressed.png in Resources */ = {isa = PBXBuildFile; fileRef = 52C268CF15BDB72B0012FECA /* overflowImagePressed.png */; };
52FAFCCF1C30F4B500C6E613 /* TabNewYosemite.png in Resources */ = {isa = PBXBuildFile; fileRef = 52FAFCCD1C30F4B500C6E613 /* TabNewYosemite.png */; };
52FAFCD01C30F4B500C6E613 /* TabNewYosemite@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 52FAFCCE1C30F4B500C6E613 /* TabNewYosemite@2x.png */; };
52FAFCD31C30F4DF00C6E613 /* PSMYosemiteTabStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 52FAFCD11C30F4DF00C6E613 /* PSMYosemiteTabStyle.h */; };
52FAFCD41C30F4DF00C6E613 /* PSMYosemiteTabStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 52FAFCD21C30F4DF00C6E613 /* PSMYosemiteTabStyle.m */; };
546DEAF1067F63070098DCC4 /* PSMTabBarControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 0259C576FE90428111CA0C5A /* PSMTabBarControl.m */; };
546DEAF2067F630E0098DCC4 /* PSMTabBarControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 0259C57AFE90428111CA0C5A /* PSMTabBarControl.h */; settings = {ATTRIBUTES = (Public, ); }; };
A2082A9009EAEB34009AC8BE /* PSMTabDragAssistant.h in Headers */ = {isa = PBXBuildFile; fileRef = A2082A8D09EAEB33009AC8BE /* PSMTabDragAssistant.h */; };
A2082A9109EAEB34009AC8BE /* PSMTabDragAssistant.m in Sources */ = {isa = PBXBuildFile; fileRef = A2082A8E09EAEB33009AC8BE /* PSMTabDragAssistant.m */; };
A2129BB209AEB58F00724E6C /* PSMProgressIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = A2129BAF09AEB58F00724E6C /* PSMProgressIndicator.h */; };
A2129BB309AEB58F00724E6C /* PSMProgressIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = A2129BB009AEB58F00724E6C /* PSMProgressIndicator.m */; };
A251BE850959A1B90058BC7F /* PSMOverflowPopUpButton.h in Headers */ = {isa = PBXBuildFile; fileRef = A251BE810959A1B90058BC7F /* PSMOverflowPopUpButton.h */; };
A251BE860959A1B90058BC7F /* PSMOverflowPopUpButton.m in Sources */ = {isa = PBXBuildFile; fileRef = A251BE820959A1B90058BC7F /* PSMOverflowPopUpButton.m */; };
A251BE870959A1B90058BC7F /* PSMTabBarCell.h in Headers */ = {isa = PBXBuildFile; fileRef = A251BE830959A1B90058BC7F /* PSMTabBarCell.h */; };
A251BE880959A1B90058BC7F /* PSMTabBarCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A251BE840959A1B90058BC7F /* PSMTabBarCell.m */; };
A268E80409A9822A00E082AA /* AquaTabNew.png in Resources */ = {isa = PBXBuildFile; fileRef = A268E7F809A9822900E082AA /* AquaTabNew.png */; };
A268E80509A9822A00E082AA /* AquaTabNewPressed.png in Resources */ = {isa = PBXBuildFile; fileRef = A268E7F909A9822900E082AA /* AquaTabNewPressed.png */; };
A268E80609A9822A00E082AA /* AquaTabNewRollover.png in Resources */ = {isa = PBXBuildFile; fileRef = A268E7FA09A9822900E082AA /* AquaTabNewRollover.png */; };
A268E80709A9822A00E082AA /* TabNewMetal.png in Resources */ = {isa = PBXBuildFile; fileRef = A268E7FB09A9822900E082AA /* TabNewMetal.png */; };
A268E80809A9822A00E082AA /* TabNewMetalPressed.png in Resources */ = {isa = PBXBuildFile; fileRef = A268E7FC09A9822900E082AA /* TabNewMetalPressed.png */; };
A268E80909A9822A00E082AA /* TabNewMetalRollover.png in Resources */ = {isa = PBXBuildFile; fileRef = A268E7FD09A9822900E082AA /* TabNewMetalRollover.png */; };
A268EA6209A9831800E082AA /* PSMRolloverButton.h in Headers */ = {isa = PBXBuildFile; fileRef = A268EA5F09A9831800E082AA /* PSMRolloverButton.h */; };
A268EA6309A9831800E082AA /* PSMRolloverButton.m in Sources */ = {isa = PBXBuildFile; fileRef = A268EA6009A9831800E082AA /* PSMRolloverButton.m */; };
A27E47850A28EE76007BA395 /* TabIcon.tif in Resources */ = {isa = PBXBuildFile; fileRef = A20822F00959F6AA00C5F5A4 /* TabIcon.tif */; };
A27E47880A28EE7C007BA395 /* TabControlRep.tif in Resources */ = {isa = PBXBuildFile; fileRef = A20822EF0959F6AA00C5F5A4 /* TabControlRep.tif */; };
A2C0D99509AF870000ED379C /* pi.png in Resources */ = {isa = PBXBuildFile; fileRef = A2C0D99309AF870000ED379C /* pi.png */; };
A2D32EDC09A634C900EC8662 /* PSMTabStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = A2D32EDA09A634C900EC8662 /* PSMTabStyle.h */; };
A2D32EF709A63BF700EC8662 /* AquaTabClose_Front_Pressed.tif in Resources */ = {isa = PBXBuildFile; fileRef = A2D32EF009A63BF700EC8662 /* AquaTabClose_Front_Pressed.tif */; };
A2D32EF809A63BF700EC8662 /* AquaTabClose_Front_Rollover.tif in Resources */ = {isa = PBXBuildFile; fileRef = A2D32EF109A63BF700EC8662 /* AquaTabClose_Front_Rollover.tif */; };
A2D32EF909A63BF700EC8662 /* AquaTabClose_Front.tif in Resources */ = {isa = PBXBuildFile; fileRef = A2D32EF209A63BF700EC8662 /* AquaTabClose_Front.tif */; };
A2D32EFA09A63BF700EC8662 /* AquaTabsBackground.png in Resources */ = {isa = PBXBuildFile; fileRef = A2D32EF309A63BF700EC8662 /* AquaTabsBackground.png */; };
A2D32EFB09A63BF700EC8662 /* AquaTabsDown.png in Resources */ = {isa = PBXBuildFile; fileRef = A2D32EF409A63BF700EC8662 /* AquaTabsDown.png */; };
A2D32EFC09A63BF700EC8662 /* AquaTabsSeparator.png in Resources */ = {isa = PBXBuildFile; fileRef = A2D32EF509A63BF700EC8662 /* AquaTabsSeparator.png */; };
A2D32EFD09A63BF700EC8662 /* AquaTabsSeparatorDown.png in Resources */ = {isa = PBXBuildFile; fileRef = A2D32EF609A63BF700EC8662 /* AquaTabsSeparatorDown.png */; };
A2D32F0009A63D7A00EC8662 /* PSMMetalTabStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = A2D32EFE09A63D7A00EC8662 /* PSMMetalTabStyle.h */; };
A2D32F0109A63D7A00EC8662 /* PSMMetalTabStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = A2D32EFF09A63D7A00EC8662 /* PSMMetalTabStyle.m */; };
A2D3317C09A68B7500EC8662 /* AquaTabsDownGraphite.png in Resources */ = {isa = PBXBuildFile; fileRef = A2D3317A09A68B7500EC8662 /* AquaTabsDownGraphite.png */; };
A2D3317D09A68B7500EC8662 /* AquaTabsDownNonKey.png in Resources */ = {isa = PBXBuildFile; fileRef = A2D3317B09A68B7500EC8662 /* AquaTabsDownNonKey.png */; };
A2D98B0A0A2B432C0064C6F8 /* PSMUnifiedTabStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = A2D98B070A2B432C0064C6F8 /* PSMUnifiedTabStyle.h */; };
A2D98B0B0A2B432C0064C6F8 /* PSMUnifiedTabStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = A2D98B080A2B432C0064C6F8 /* PSMUnifiedTabStyle.m */; };
A2D98B120A2B43FA0064C6F8 /* NSBezierPath_AMShading.h in Headers */ = {isa = PBXBuildFile; fileRef = A2D98B0F0A2B43FA0064C6F8 /* NSBezierPath_AMShading.h */; };
A2D98B130A2B43FA0064C6F8 /* NSBezierPath_AMShading.m in Sources */ = {isa = PBXBuildFile; fileRef = A2D98B100A2B43FA0064C6F8 /* NSBezierPath_AMShading.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
53DF6904067E5B930090B5B0 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0259C573FE90428111CA0C5A /* Project object */;
proxyType = 1;
remoteGlobalIDString = 53DF68FC067E5B5A0090B5B0;
remoteInfo = PSMTabBarControlFramework;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
0259C576FE90428111CA0C5A /* PSMTabBarControl.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = PSMTabBarControl.m; path = source/PSMTabBarControl.m; sourceTree = "<group>"; };
0259C577FE90428111CA0C5A /* PSMTabBarControlInspector.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = PSMTabBarControlInspector.m; path = source/PSMTabBarControlInspector.m; sourceTree = "<group>"; };
0259C578FE90428111CA0C5A /* PSMTabBarControlPalette.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = PSMTabBarControlPalette.m; path = source/PSMTabBarControlPalette.m; sourceTree = "<group>"; };
0259C57AFE90428111CA0C5A /* PSMTabBarControl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PSMTabBarControl.h; path = source/PSMTabBarControl.h; sourceTree = "<group>"; };
0259C57BFE90428111CA0C5A /* PSMTabBarControlInspector.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PSMTabBarControlInspector.h; path = source/PSMTabBarControlInspector.h; sourceTree = "<group>"; };
0259C57CFE90428111CA0C5A /* PSMTabBarControlPalette.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PSMTabBarControlPalette.h; path = source/PSMTabBarControlPalette.h; sourceTree = "<group>"; };
0259C57FFE90428111CA0C5A /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/PSMTabBarControlInspector.nib; sourceTree = "<group>"; };
0259C581FE90428111CA0C5A /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/PSMTabBarControlPalette.nib; sourceTree = "<group>"; };
0259C583FE90428111CA0C5A /* palette.table */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = palette.table; sourceTree = "<group>"; };
13EB9DBD07DE0F1E00EB933A /* InterfaceBuilder.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = InterfaceBuilder.framework; path = /System/Library/Frameworks/InterfaceBuilder.framework; sourceTree = "<absolute>"; };
13F8B88807B434F6008AE28D /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
13F8B88A07B434F6008AE28D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
32DBCF980370C29C00C91783 /* PSMTabBarControl_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMTabBarControl_Prefix.pch; path = source/PSMTabBarControl_Prefix.pch; sourceTree = "<group>"; };
523897EE15BDA9AC00498A53 /* TabClose_Front_Pressed@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "TabClose_Front_Pressed@2x.png"; path = "images/TabClose_Front_Pressed@2x.png"; sourceTree = "<group>"; };
523897EF15BDA9AC00498A53 /* TabClose_Front_Rollover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "TabClose_Front_Rollover@2x.png"; path = "images/TabClose_Front_Rollover@2x.png"; sourceTree = "<group>"; };
523897F015BDA9AC00498A53 /* TabClose_Front@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "TabClose_Front@2x.png"; path = "images/TabClose_Front@2x.png"; sourceTree = "<group>"; };
523897F115BDA9AC00498A53 /* TabNewMetal@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "TabNewMetal@2x.png"; path = "images/TabNewMetal@2x.png"; sourceTree = "<group>"; };
523897F215BDA9AC00498A53 /* TabNewMetalPressed@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "TabNewMetalPressed@2x.png"; path = "images/TabNewMetalPressed@2x.png"; sourceTree = "<group>"; };
523897F315BDA9AC00498A53 /* TabNewMetalRollover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "TabNewMetalRollover@2x.png"; path = "images/TabNewMetalRollover@2x.png"; sourceTree = "<group>"; };
52A57C0C15BBA230003EC59C /* TabClose_Front.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TabClose_Front.png; path = images/TabClose_Front.png; sourceTree = "<group>"; };
52A57C0D15BBA230003EC59C /* TabClose_Front_Pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TabClose_Front_Pressed.png; path = images/TabClose_Front_Pressed.png; sourceTree = "<group>"; };
52A57C0E15BBA230003EC59C /* TabClose_Front_Rollover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TabClose_Front_Rollover.png; path = images/TabClose_Front_Rollover.png; sourceTree = "<group>"; };
52C0B9B215BDB7A9000C268F /* overflowImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "overflowImage@2x.png"; path = "images/overflowImage@2x.png"; sourceTree = "<group>"; };
52C0B9B315BDB7A9000C268F /* overflowImagePressed@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "overflowImagePressed@2x.png"; path = "images/overflowImagePressed@2x.png"; sourceTree = "<group>"; };
52C268CE15BDB72B0012FECA /* overflowImage.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = overflowImage.png; path = images/overflowImage.png; sourceTree = "<group>"; };
52C268CF15BDB72B0012FECA /* overflowImagePressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = overflowImagePressed.png; path = images/overflowImagePressed.png; sourceTree = "<group>"; };
52FAFCCD1C30F4B500C6E613 /* TabNewYosemite.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TabNewYosemite.png; path = images/TabNewYosemite.png; sourceTree = "<group>"; };
52FAFCCE1C30F4B500C6E613 /* TabNewYosemite@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "TabNewYosemite@2x.png"; path = "images/TabNewYosemite@2x.png"; sourceTree = "<group>"; };
52FAFCD11C30F4DF00C6E613 /* PSMYosemiteTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMYosemiteTabStyle.h; path = source/PSMYosemiteTabStyle.h; sourceTree = "<group>"; };
52FAFCD21C30F4DF00C6E613 /* PSMYosemiteTabStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMYosemiteTabStyle.m; path = source/PSMYosemiteTabStyle.m; sourceTree = "<group>"; };
53DF68FD067E5B5A0090B5B0 /* PSMTabBarControl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PSMTabBarControl.framework; sourceTree = BUILT_PRODUCTS_DIR; };
53DF68FE067E5B5A0090B5B0 /* PSMTabBarControlFramework-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "PSMTabBarControlFramework-Info.plist"; sourceTree = "<group>"; };
54D33B2806778E3300C9C163 /* PSMTabBarControl.ibclassdescription */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PSMTabBarControl.ibclassdescription; sourceTree = "<group>"; };
8D1AC9730486D14A00FE50C9 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D1AC97B0486D23100FE50C9 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
A2072A2409ABD88600304BCB /* Folder.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = Folder.tif; path = images/Folder.tif; sourceTree = "<group>"; };
A2072A2509ABD88600304BCB /* Globe.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = Globe.tiff; path = images/Globe.tiff; sourceTree = "<group>"; };
A2072B5C09AC1FA500304BCB /* Warning.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Warning.png; path = images/Warning.png; sourceTree = "<group>"; };
A20822EF0959F6AA00C5F5A4 /* TabControlRep.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = TabControlRep.tif; path = images/TabControlRep.tif; sourceTree = "<group>"; };
A20822F00959F6AA00C5F5A4 /* TabIcon.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = TabIcon.tif; path = images/TabIcon.tif; sourceTree = "<group>"; };
A2082A8D09EAEB33009AC8BE /* PSMTabDragAssistant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMTabDragAssistant.h; path = source/PSMTabDragAssistant.h; sourceTree = "<group>"; };
A2082A8E09EAEB33009AC8BE /* PSMTabDragAssistant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMTabDragAssistant.m; path = source/PSMTabDragAssistant.m; sourceTree = "<group>"; wrapsLines = 0; };
A2129BAF09AEB58F00724E6C /* PSMProgressIndicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMProgressIndicator.h; path = source/PSMProgressIndicator.h; sourceTree = "<group>"; };
A2129BB009AEB58F00724E6C /* PSMProgressIndicator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMProgressIndicator.m; path = source/PSMProgressIndicator.m; sourceTree = "<group>"; };
A246FB040A2BD6F9005BDF7B /* PSMTabBarControlDoc.html */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.html.documentation; name = PSMTabBarControlDoc.html; path = documentation/PSMTabBarControlDoc.html; sourceTree = "<group>"; };
A251BE810959A1B90058BC7F /* PSMOverflowPopUpButton.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = PSMOverflowPopUpButton.h; path = source/PSMOverflowPopUpButton.h; sourceTree = "<group>"; };
A251BE820959A1B90058BC7F /* PSMOverflowPopUpButton.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = PSMOverflowPopUpButton.m; path = source/PSMOverflowPopUpButton.m; sourceTree = "<group>"; };
A251BE830959A1B90058BC7F /* PSMTabBarCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PSMTabBarCell.h; path = source/PSMTabBarCell.h; sourceTree = "<group>"; };
A251BE840959A1B90058BC7F /* PSMTabBarCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = PSMTabBarCell.m; path = source/PSMTabBarCell.m; sourceTree = "<group>"; };
A251BE890959A1EA0058BC7F /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AppController.h; path = source/AppController.h; sourceTree = "<group>"; };
A251BE8A0959A1EA0058BC7F /* AppController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = AppController.m; path = source/AppController.m; sourceTree = "<group>"; };
A251BE8B0959A1EA0058BC7F /* FakeModel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FakeModel.h; path = source/FakeModel.h; sourceTree = "<group>"; };
A251BE8C0959A1EA0058BC7F /* FakeModel.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = FakeModel.m; path = source/FakeModel.m; sourceTree = "<group>"; };
A251BE8D0959A1EA0058BC7F /* main.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = main.m; path = source/main.m; sourceTree = "<group>"; };
A251BE8F0959A23A0058BC7F /* 32x32cancel.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = 32x32cancel.png; path = images/32x32cancel.png; sourceTree = "<group>"; };
A251BE9B0959A2530058BC7F /* ReadMe.rtfd */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; path = ReadMe.rtfd; sourceTree = "<group>"; };
A251BEA20959BB5B0058BC7F /* TabBarControlDemo-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TabBarControlDemo-Info.plist"; sourceTree = "<group>"; };
A251BEC30959BC0E0058BC7F /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = "<group>"; };
A268E7F809A9822900E082AA /* AquaTabNew.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabNew.png; path = images/AquaTabNew.png; sourceTree = "<group>"; };
A268E7F909A9822900E082AA /* AquaTabNewPressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabNewPressed.png; path = images/AquaTabNewPressed.png; sourceTree = "<group>"; };
A268E7FA09A9822900E082AA /* AquaTabNewRollover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabNewRollover.png; path = images/AquaTabNewRollover.png; sourceTree = "<group>"; };
A268E7FB09A9822900E082AA /* TabNewMetal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TabNewMetal.png; path = images/TabNewMetal.png; sourceTree = "<group>"; };
A268E7FC09A9822900E082AA /* TabNewMetalPressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TabNewMetalPressed.png; path = images/TabNewMetalPressed.png; sourceTree = "<group>"; };
A268E7FD09A9822900E082AA /* TabNewMetalRollover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TabNewMetalRollover.png; path = images/TabNewMetalRollover.png; sourceTree = "<group>"; };
A268EA5F09A9831800E082AA /* PSMRolloverButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PSMRolloverButton.h; path = source/PSMRolloverButton.h; sourceTree = "<group>"; };
A268EA6009A9831800E082AA /* PSMRolloverButton.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = PSMRolloverButton.m; path = source/PSMRolloverButton.m; sourceTree = "<group>"; };
A269361009A778770006911E /* 32x32_log.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = 32x32_log.tiff; path = images/32x32_log.tiff; sourceTree = "<group>"; };
A2A711BA09E5AE1E00D0089B /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/Window.nib; sourceTree = "<group>"; };
A2A711BD09E5BF0500D0089B /* WindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WindowController.h; path = source/WindowController.h; sourceTree = "<group>"; };
A2A711BE09E5BF0500D0089B /* WindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WindowController.m; path = source/WindowController.m; sourceTree = "<group>"; };
A2C0D99309AF870000ED379C /* pi.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = pi.png; path = images/pi.png; sourceTree = "<group>"; };
A2D32EDA09A634C900EC8662 /* PSMTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMTabStyle.h; path = source/PSMTabStyle.h; sourceTree = "<group>"; };
A2D32EF009A63BF700EC8662 /* AquaTabClose_Front_Pressed.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = AquaTabClose_Front_Pressed.tif; path = images/AquaTabClose_Front_Pressed.tif; sourceTree = "<group>"; };
A2D32EF109A63BF700EC8662 /* AquaTabClose_Front_Rollover.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = AquaTabClose_Front_Rollover.tif; path = images/AquaTabClose_Front_Rollover.tif; sourceTree = "<group>"; };
A2D32EF209A63BF700EC8662 /* AquaTabClose_Front.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = AquaTabClose_Front.tif; path = images/AquaTabClose_Front.tif; sourceTree = "<group>"; };
A2D32EF309A63BF700EC8662 /* AquaTabsBackground.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabsBackground.png; path = images/AquaTabsBackground.png; sourceTree = "<group>"; };
A2D32EF409A63BF700EC8662 /* AquaTabsDown.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabsDown.png; path = images/AquaTabsDown.png; sourceTree = "<group>"; };
A2D32EF509A63BF700EC8662 /* AquaTabsSeparator.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabsSeparator.png; path = images/AquaTabsSeparator.png; sourceTree = "<group>"; };
A2D32EF609A63BF700EC8662 /* AquaTabsSeparatorDown.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabsSeparatorDown.png; path = images/AquaTabsSeparatorDown.png; sourceTree = "<group>"; };
A2D32EFE09A63D7A00EC8662 /* PSMMetalTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMMetalTabStyle.h; path = source/PSMMetalTabStyle.h; sourceTree = "<group>"; };
A2D32EFF09A63D7A00EC8662 /* PSMMetalTabStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMMetalTabStyle.m; path = source/PSMMetalTabStyle.m; sourceTree = "<group>"; };
A2D3317A09A68B7500EC8662 /* AquaTabsDownGraphite.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabsDownGraphite.png; path = images/AquaTabsDownGraphite.png; sourceTree = "<group>"; };
A2D3317B09A68B7500EC8662 /* AquaTabsDownNonKey.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabsDownNonKey.png; path = images/AquaTabsDownNonKey.png; sourceTree = "<group>"; };
A2D98B070A2B432C0064C6F8 /* PSMUnifiedTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PSMUnifiedTabStyle.h; path = source/PSMUnifiedTabStyle.h; sourceTree = "<group>"; };
A2D98B080A2B432C0064C6F8 /* PSMUnifiedTabStyle.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = PSMUnifiedTabStyle.m; path = source/PSMUnifiedTabStyle.m; sourceTree = "<group>"; };
A2D98B0F0A2B43FA0064C6F8 /* NSBezierPath_AMShading.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = NSBezierPath_AMShading.h; path = source/NSBezierPath_AMShading.h; sourceTree = "<group>"; };
A2D98B100A2B43FA0064C6F8 /* NSBezierPath_AMShading.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = NSBezierPath_AMShading.m; path = source/NSBezierPath_AMShading.m; sourceTree = "<group>"; };
DD92D38A0106425D02CA0E72 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
53DF68FB067E5B5A0090B5B0 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
13F8B89007B43554008AE28D /* Cocoa.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
0259C574FE90428111CA0C5A /* PSMTabBarControl */ = {
isa = PBXGroup;
children = (
A251BE9B0959A2530058BC7F /* ReadMe.rtfd */,
A246FADE0A2BD446005BDF7B /* Documentation */,
32DBCF9E0370C38000C91783 /* Palette */,
54D33B2C06778E4400C9C163 /* Framework */,
A251BE590959A0550058BC7F /* Demo App */,
0259C582FE90428111CA0C5A /* Resources */,
1ED78706FE9D4A0611CA0C5A /* Products */,
2E58F364FFB232C311CA0CBA /* Frameworks */,
);
name = PSMTabBarControl;
sourceTree = "<group>";
};
0259C582FE90428111CA0C5A /* Resources */ = {
isa = PBXGroup;
children = (
A251BEC20959BC0E0058BC7F /* MainMenu.nib */,
A251BE8E0959A21A0058BC7F /* Images */,
8D1AC9730486D14A00FE50C9 /* Info.plist */,
53DF68FE067E5B5A0090B5B0 /* PSMTabBarControlFramework-Info.plist */,
A251BEA20959BB5B0058BC7F /* TabBarControlDemo-Info.plist */,
8D1AC97F0486D23B00FE50C9 /* InfoPlist.strings */,
A2A711B909E5AE1E00D0089B /* Window.nib */,
);
name = Resources;
sourceTree = "<group>";
};
131E8FE8067F80F40006E0CE /* Resources */ = {
isa = PBXGroup;
children = (
A20822EF0959F6AA00C5F5A4 /* TabControlRep.tif */,
A20822F00959F6AA00C5F5A4 /* TabIcon.tif */,
0259C57EFE90428111CA0C5A /* PSMTabBarControlInspector.nib */,
0259C580FE90428111CA0C5A /* PSMTabBarControlPalette.nib */,
);
name = Resources;
sourceTree = "<group>";
};
13F8B6FD07B43410008AE28D /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
13EB9DBD07DE0F1E00EB933A /* InterfaceBuilder.framework */,
DD92D38A0106425D02CA0E72 /* Cocoa.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
13F8B70407B43425008AE28D /* Other Frameworks */ = {
isa = PBXGroup;
children = (
13F8B88807B434F6008AE28D /* AppKit.framework */,
13F8B88A07B434F6008AE28D /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
1ED78706FE9D4A0611CA0C5A /* Products */ = {
isa = PBXGroup;
children = (
53DF68FD067E5B5A0090B5B0 /* PSMTabBarControl.framework */,
);
name = Products;
sourceTree = "<group>";
};
2E58F364FFB232C311CA0CBA /* Frameworks */ = {
isa = PBXGroup;
children = (
13F8B6FD07B43410008AE28D /* Linked Frameworks */,
13F8B70407B43425008AE28D /* Other Frameworks */,
);
name = Frameworks;
sourceTree = "<group>";
};
32DBCF9E0370C38000C91783 /* Palette */ = {
isa = PBXGroup;
children = (
54D33B2406778DD400C9C163 /* Undo Support */,
54D33B2506778DF000C9C163 /* Classes */,
32DBCF9F0370C38200C91783 /* Other Sources */,
131E8FE8067F80F40006E0CE /* Resources */,
0259C583FE90428111CA0C5A /* palette.table */,
);
name = Palette;
sourceTree = "<group>";
};
32DBCF9F0370C38200C91783 /* Other Sources */ = {
isa = PBXGroup;
children = (
32DBCF980370C29C00C91783 /* PSMTabBarControl_Prefix.pch */,
);
name = "Other Sources";
sourceTree = "<group>";
};
54D33B2406778DD400C9C163 /* Undo Support */ = {
isa = PBXGroup;
children = (
54D33B2806778E3300C9C163 /* PSMTabBarControl.ibclassdescription */,
);
name = "Undo Support";
sourceTree = "<group>";
};
54D33B2506778DF000C9C163 /* Classes */ = {
isa = PBXGroup;
children = (
0259C57BFE90428111CA0C5A /* PSMTabBarControlInspector.h */,
0259C577FE90428111CA0C5A /* PSMTabBarControlInspector.m */,
0259C57CFE90428111CA0C5A /* PSMTabBarControlPalette.h */,
0259C578FE90428111CA0C5A /* PSMTabBarControlPalette.m */,
);
name = Classes;
sourceTree = "<group>";
};
54D33B2C06778E4400C9C163 /* Framework */ = {
isa = PBXGroup;
children = (
0259C57AFE90428111CA0C5A /* PSMTabBarControl.h */,
0259C576FE90428111CA0C5A /* PSMTabBarControl.m */,
A251BE830959A1B90058BC7F /* PSMTabBarCell.h */,
A251BE840959A1B90058BC7F /* PSMTabBarCell.m */,
A2D32EDA09A634C900EC8662 /* PSMTabStyle.h */,
A2D32EFE09A63D7A00EC8662 /* PSMMetalTabStyle.h */,
A2D32EFF09A63D7A00EC8662 /* PSMMetalTabStyle.m */,
A2D98B070A2B432C0064C6F8 /* PSMUnifiedTabStyle.h */,
A2D98B080A2B432C0064C6F8 /* PSMUnifiedTabStyle.m */,
52FAFCD11C30F4DF00C6E613 /* PSMYosemiteTabStyle.h */,
52FAFCD21C30F4DF00C6E613 /* PSMYosemiteTabStyle.m */,
A268EA5F09A9831800E082AA /* PSMRolloverButton.h */,
A268EA6009A9831800E082AA /* PSMRolloverButton.m */,
A251BE810959A1B90058BC7F /* PSMOverflowPopUpButton.h */,
A251BE820959A1B90058BC7F /* PSMOverflowPopUpButton.m */,
A2129BAF09AEB58F00724E6C /* PSMProgressIndicator.h */,
A2129BB009AEB58F00724E6C /* PSMProgressIndicator.m */,
A2082A8D09EAEB33009AC8BE /* PSMTabDragAssistant.h */,
A2082A8E09EAEB33009AC8BE /* PSMTabDragAssistant.m */,
A2D98B0F0A2B43FA0064C6F8 /* NSBezierPath_AMShading.h */,
A2D98B100A2B43FA0064C6F8 /* NSBezierPath_AMShading.m */,
);
name = Framework;
sourceTree = "<group>";
};
A246FADE0A2BD446005BDF7B /* Documentation */ = {
isa = PBXGroup;
children = (
A246FB040A2BD6F9005BDF7B /* PSMTabBarControlDoc.html */,
);
name = Documentation;
sourceTree = "<group>";
};
A251BE590959A0550058BC7F /* Demo App */ = {
isa = PBXGroup;
children = (
A251BE890959A1EA0058BC7F /* AppController.h */,
A251BE8A0959A1EA0058BC7F /* AppController.m */,
A2A711BD09E5BF0500D0089B /* WindowController.h */,
A2A711BE09E5BF0500D0089B /* WindowController.m */,
A251BE8B0959A1EA0058BC7F /* FakeModel.h */,
A251BE8C0959A1EA0058BC7F /* FakeModel.m */,
A251BE8D0959A1EA0058BC7F /* main.m */,
);
name = "Demo App";
sourceTree = "<group>";
};
A251BE8E0959A21A0058BC7F /* Images */ = {
isa = PBXGroup;
children = (
A2C0D99309AF870000ED379C /* pi.png */,
A2072B5C09AC1FA500304BCB /* Warning.png */,
A2072A2409ABD88600304BCB /* Folder.tif */,
A2072A2509ABD88600304BCB /* Globe.tiff */,
A268E7F809A9822900E082AA /* AquaTabNew.png */,
A268E7F909A9822900E082AA /* AquaTabNewPressed.png */,
A268E7FA09A9822900E082AA /* AquaTabNewRollover.png */,
A268E7FB09A9822900E082AA /* TabNewMetal.png */,
523897F115BDA9AC00498A53 /* TabNewMetal@2x.png */,
A268E7FC09A9822900E082AA /* TabNewMetalPressed.png */,
523897F215BDA9AC00498A53 /* TabNewMetalPressed@2x.png */,
A268E7FD09A9822900E082AA /* TabNewMetalRollover.png */,
523897F315BDA9AC00498A53 /* TabNewMetalRollover@2x.png */,
A269361009A778770006911E /* 32x32_log.tiff */,
A2D3317A09A68B7500EC8662 /* AquaTabsDownGraphite.png */,
A2D3317B09A68B7500EC8662 /* AquaTabsDownNonKey.png */,
A2D32EF009A63BF700EC8662 /* AquaTabClose_Front_Pressed.tif */,
A2D32EF109A63BF700EC8662 /* AquaTabClose_Front_Rollover.tif */,
A2D32EF209A63BF700EC8662 /* AquaTabClose_Front.tif */,
A2D32EF309A63BF700EC8662 /* AquaTabsBackground.png */,
A2D32EF409A63BF700EC8662 /* AquaTabsDown.png */,
A2D32EF509A63BF700EC8662 /* AquaTabsSeparator.png */,
A2D32EF609A63BF700EC8662 /* AquaTabsSeparatorDown.png */,
A251BE8F0959A23A0058BC7F /* 32x32cancel.png */,
52C268CE15BDB72B0012FECA /* overflowImage.png */,
52C0B9B215BDB7A9000C268F /* overflowImage@2x.png */,
52C268CF15BDB72B0012FECA /* overflowImagePressed.png */,
52C0B9B315BDB7A9000C268F /* overflowImagePressed@2x.png */,
52A57C0C15BBA230003EC59C /* TabClose_Front.png */,
523897F015BDA9AC00498A53 /* TabClose_Front@2x.png */,
52A57C0D15BBA230003EC59C /* TabClose_Front_Pressed.png */,
523897EE15BDA9AC00498A53 /* TabClose_Front_Pressed@2x.png */,
52A57C0E15BBA230003EC59C /* TabClose_Front_Rollover.png */,
523897EF15BDA9AC00498A53 /* TabClose_Front_Rollover@2x.png */,
52FAFCCD1C30F4B500C6E613 /* TabNewYosemite.png */,
52FAFCCE1C30F4B500C6E613 /* TabNewYosemite@2x.png */,
);
name = Images;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
53DF68F8067E5B5A0090B5B0 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
546DEAF2067F630E0098DCC4 /* PSMTabBarControl.h in Headers */,
A251BE850959A1B90058BC7F /* PSMOverflowPopUpButton.h in Headers */,
A251BE870959A1B90058BC7F /* PSMTabBarCell.h in Headers */,
52FAFCD31C30F4DF00C6E613 /* PSMYosemiteTabStyle.h in Headers */,
A2D32EDC09A634C900EC8662 /* PSMTabStyle.h in Headers */,
A2D32F0009A63D7A00EC8662 /* PSMMetalTabStyle.h in Headers */,
A268EA6209A9831800E082AA /* PSMRolloverButton.h in Headers */,
A2129BB209AEB58F00724E6C /* PSMProgressIndicator.h in Headers */,
A2082A9009EAEB34009AC8BE /* PSMTabDragAssistant.h in Headers */,
A2D98B0A0A2B432C0064C6F8 /* PSMUnifiedTabStyle.h in Headers */,
A2D98B120A2B43FA0064C6F8 /* NSBezierPath_AMShading.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
53DF68FC067E5B5A0090B5B0 /* PSMTabBarControlFramework */ = {
isa = PBXNativeTarget;
buildConfigurationList = C056397F08A954F8003078D8 /* Build configuration list for PBXNativeTarget "PSMTabBarControlFramework" */;
buildPhases = (
53DF68F8067E5B5A0090B5B0 /* Headers */,
53DF68F9067E5B5A0090B5B0 /* Resources */,
53DF68FA067E5B5A0090B5B0 /* Sources */,
53DF68FB067E5B5A0090B5B0 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = PSMTabBarControlFramework;
productName = PSMTabBarControlFramework;
productReference = 53DF68FD067E5B5A0090B5B0 /* PSMTabBarControl.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
0259C573FE90428111CA0C5A /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0710;
};
buildConfigurationList = C056398B08A954F8003078D8 /* Build configuration list for PBXProject "PSMTabBarControl" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
en,
);
mainGroup = 0259C574FE90428111CA0C5A /* PSMTabBarControl */;
projectDirPath = "";
projectRoot = "";
targets = (
53DF68FC067E5B5A0090B5B0 /* PSMTabBarControlFramework */,
53DF6901067E5B8E0090B5B0 /* All */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
53DF68F9067E5B5A0090B5B0 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A2D32EF709A63BF700EC8662 /* AquaTabClose_Front_Pressed.tif in Resources */,
A2D32EF809A63BF700EC8662 /* AquaTabClose_Front_Rollover.tif in Resources */,
A2D32EF909A63BF700EC8662 /* AquaTabClose_Front.tif in Resources */,
A2D32EFA09A63BF700EC8662 /* AquaTabsBackground.png in Resources */,
A2D32EFB09A63BF700EC8662 /* AquaTabsDown.png in Resources */,
A2D32EFC09A63BF700EC8662 /* AquaTabsSeparator.png in Resources */,
A2D32EFD09A63BF700EC8662 /* AquaTabsSeparatorDown.png in Resources */,
A2D3317C09A68B7500EC8662 /* AquaTabsDownGraphite.png in Resources */,
A2D3317D09A68B7500EC8662 /* AquaTabsDownNonKey.png in Resources */,
A268E80409A9822A00E082AA /* AquaTabNew.png in Resources */,
A268E80509A9822A00E082AA /* AquaTabNewPressed.png in Resources */,
A268E80609A9822A00E082AA /* AquaTabNewRollover.png in Resources */,
A268E80709A9822A00E082AA /* TabNewMetal.png in Resources */,
A268E80809A9822A00E082AA /* TabNewMetalPressed.png in Resources */,
A268E80909A9822A00E082AA /* TabNewMetalRollover.png in Resources */,
A2C0D99509AF870000ED379C /* pi.png in Resources */,
A27E47850A28EE76007BA395 /* TabIcon.tif in Resources */,
A27E47880A28EE7C007BA395 /* TabControlRep.tif in Resources */,
52A57C0F15BBA230003EC59C /* TabClose_Front.png in Resources */,
52A57C1015BBA230003EC59C /* TabClose_Front_Pressed.png in Resources */,
52A57C1115BBA230003EC59C /* TabClose_Front_Rollover.png in Resources */,
52FAFCCF1C30F4B500C6E613 /* TabNewYosemite.png in Resources */,
523897F415BDA9AC00498A53 /* TabClose_Front_Pressed@2x.png in Resources */,
523897F515BDA9AC00498A53 /* TabClose_Front_Rollover@2x.png in Resources */,
52FAFCD01C30F4B500C6E613 /* TabNewYosemite@2x.png in Resources */,
523897F615BDA9AC00498A53 /* TabClose_Front@2x.png in Resources */,
523897F715BDA9AC00498A53 /* TabNewMetal@2x.png in Resources */,
523897F815BDA9AC00498A53 /* TabNewMetalPressed@2x.png in Resources */,
523897F915BDA9AC00498A53 /* TabNewMetalRollover@2x.png in Resources */,
52C268D015BDB72B0012FECA /* overflowImage.png in Resources */,
52C268D115BDB72B0012FECA /* overflowImagePressed.png in Resources */,
52C0B9B415BDB7A9000C268F /* overflowImage@2x.png in Resources */,
52C0B9B515BDB7A9000C268F /* overflowImagePressed@2x.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
53DF68FA067E5B5A0090B5B0 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
546DEAF1067F63070098DCC4 /* PSMTabBarControl.m in Sources */,
A251BE860959A1B90058BC7F /* PSMOverflowPopUpButton.m in Sources */,
A251BE880959A1B90058BC7F /* PSMTabBarCell.m in Sources */,
A2D32F0109A63D7A00EC8662 /* PSMMetalTabStyle.m in Sources */,
A268EA6309A9831800E082AA /* PSMRolloverButton.m in Sources */,
A2129BB309AEB58F00724E6C /* PSMProgressIndicator.m in Sources */,
A2082A9109EAEB34009AC8BE /* PSMTabDragAssistant.m in Sources */,
52FAFCD41C30F4DF00C6E613 /* PSMYosemiteTabStyle.m in Sources */,
A2D98B0B0A2B432C0064C6F8 /* PSMUnifiedTabStyle.m in Sources */,
A2D98B130A2B43FA0064C6F8 /* NSBezierPath_AMShading.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
53DF6905067E5B930090B5B0 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 53DF68FC067E5B5A0090B5B0 /* PSMTabBarControlFramework */;
targetProxy = 53DF6904067E5B930090B5B0 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
0259C57EFE90428111CA0C5A /* PSMTabBarControlInspector.nib */ = {
isa = PBXVariantGroup;
children = (
0259C57FFE90428111CA0C5A /* English */,
);
name = PSMTabBarControlInspector.nib;
sourceTree = "<group>";
};
0259C580FE90428111CA0C5A /* PSMTabBarControlPalette.nib */ = {
isa = PBXVariantGroup;
children = (
0259C581FE90428111CA0C5A /* English */,
);
name = PSMTabBarControlPalette.nib;
sourceTree = "<group>";
};
8D1AC97F0486D23B00FE50C9 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
8D1AC97B0486D23100FE50C9 /* English */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
A251BEC20959BC0E0058BC7F /* MainMenu.nib */ = {
isa = PBXVariantGroup;
children = (
A251BEC30959BC0E0058BC7F /* English */,
);
name = MainMenu.nib;
sourceTree = "<group>";
};
A2A711B909E5AE1E00D0089B /* Window.nib */ = {
isa = PBXVariantGroup;
children = (
A2A711BA09E5AE1E00D0089B /* English */,
);
name = Window.nib;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
C056398008A954F8003078D8 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
FRAMEWORK_VERSION = A;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
GCC_VERSION = "";
INFOPLIST_FILE = "PSMTabBarControlFramework-Info.plist";
INSTALL_PATH = "@executable_path/../Frameworks";
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = com.positivespinmedia.PSMTabBarControlFramework;
PRODUCT_NAME = PSMTabBarControl;
SYMROOT = ../build;
ZERO_LINK = NO;
};
name = Debug;
};
C056398108A954F8003078D8 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
COMBINE_HIDPI_IMAGES = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
FRAMEWORK_VERSION = A;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
GCC_VERSION = "";
INFOPLIST_FILE = "PSMTabBarControlFramework-Info.plist";
INSTALL_PATH = "@executable_path/../Frameworks";
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = com.positivespinmedia.PSMTabBarControlFramework;
PRODUCT_NAME = PSMTabBarControl;
SYMROOT = ../build;
};
name = Release;
};
C056398808A954F8003078D8 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
PRODUCT_NAME = All;
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
ZERO_LINK = YES;
};
name = Debug;
};
C056398908A954F8003078D8 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G5;
PRODUCT_NAME = All;
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
};
name = Release;
};
C056398C08A954F8003078D8 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ENABLE_TESTABILITY = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
ONLY_ACTIVE_ARCH = YES;
PREBINDING = NO;
SYMROOT = ../build;
};
name = Debug;
};
C056398D08A954F8003078D8 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
ONLY_ACTIVE_ARCH = YES;
PREBINDING = NO;
SYMROOT = ../build;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
C056397F08A954F8003078D8 /* Build configuration list for PBXNativeTarget "PSMTabBarControlFramework" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C056398008A954F8003078D8 /* Debug */,
C056398108A954F8003078D8 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C056398708A954F8003078D8 /* Build configuration list for PBXAggregateTarget "All" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C056398808A954F8003078D8 /* Debug */,
C056398908A954F8003078D8 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C056398B08A954F8003078D8 /* Build configuration list for PBXProject "PSMTabBarControl" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C056398C08A954F8003078D8 /* Debug */,
C056398D08A954F8003078D8 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 0259C573FE90428111CA0C5A /* Project object */;
}
@@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>PSMTabBarControl</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleSignature</key>
<string>PSM1</string>
<key>CFBundleVersion</key>
<string>1.1</string>
<key>NSPrincipalClass</key>
<string>PSMTabBarControl</string>
</dict>
</plist>
@@ -1,8 +0,0 @@
//
// Prefix header for all source files of the 'PSMTabBarControl' target in the 'PSMTabBarControl' project
//
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#import <InterfaceBuilder/InterfaceBuilder.h>
#endif
@@ -1,186 +0,0 @@
{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf380
{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;\f2\fswiss\fcharset77 Helvetica-Oblique;
\f3\fnil\fcharset77 Monaco;}
{\colortbl;\red255\green255\blue255;\red118\green15\blue80;\red0\green0\blue255;\red35\green110\blue37;
}
{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1}}
{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}}
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc\pardirnatural
\f0\b\fs24 \cf0 \
PSMTabBarControl (and related classes)\
\f1\b0 developed by John Pannell, Positive Spin Media\
\
as seen in the super-cool app...\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc\pardirnatural
\cf0 {{\NeXTGraphic startpage.gif \width7200 \height2820
}¬}\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc\pardirnatural
\cf0 \
\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
\cf0 This source code and all related materials are released under the BSD license, which is explained at the end of this document, along with some other legalese. I've made my best effort to make everything bug free, but please let me know of any bugs found or suggestions you have: johnp@positivespinmedia.com.\
\
\f0\b Purpose
\f1\b0 \
\
PSMTabBarControl seeks to provide developers with a high-quality, easy to use GUI to manage an NSTabView (or subclasses) in a manner similar to Safari's tabbed browsing implementation. It attempts to add a few features as well. Here's what you get:\
\
\f0\b The look:
\f1\b0 a control/cell architecture that draws the expected tab appearance below a toolbar or similar view. Included styles work consistently in Aqua, Metal, or customized metal variations by basing fills on the window's background color. Includes drawing of a close button, and rollover states for the close button and tab cell. Also provides pop-up button and menu when tabs overflow available space, and support for individual tab progress indicators, icons, and object counters. Tabs can be drawn sized to fit the string content of the label, or uniformly sized.\
\
\f0\b The functionality:
\f1\b0 Close button removes tabs, click on a tab cell selects. Indicators start, stop, and hide if things are hooked up correctly.\
\
\f0\b Extras:
\f1\b0 Supports multi-window drag-and-drop reordering of the tabs with aqua-licious animation.\
\
\f0\b Files
\f1\b0 \
\
Your project will need the files in the "Framework" folder of the project. The actual framework packages these (and some images) up nicely for you, if desired. Please look over the "TabBarControlDemo" target of the source code project to see exactly what is needed to get everything to build. Building and playing with the demo is also a good way to get a feel for the features provided by these classes.\
\
\f0\b Usage
\f1\b0 \
\
Simply drag a custom view object from the views palette in IB, read the PSMTabBarControl class into IB, and set the view's custom class to PSMTabBarControl. Then connect the control's tabview outlet to the tab view being controlled, and make the control the delegate of the tab view. You can also connect the control's "partner view" outlet to another view that will resize in response to the hide/show behavior of the control.\
\
Alternately, you can build the Palette subproject and add the built IB palette to Interface Builder. In this case, creating and configuring an instance is as easy and drag, drop, and a few clicks. A demo movie and the built palette are available in a separate download from my website: http://www.positivespinmedia.com/dev/PSMTabBarControl.html\
\
\f2\i Please read the PSMTabBarControlDoc.html file in the documentation folder of this project. It provides an Apple-ish page describing the interface and usage of this object.
\f1\i0 \
\
\f0\b Patterns of Use
\f1\b0 \
\
There are a few random notes I can think of for usage guidelines...\
\
- You may see a line between the toolbar and the control in your app; it is part of the toolbar. In Tiger, you can eliminate the appearance of this line:\
\
\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\tx10560\tx11520\tx12480\tx13440\tx14400\tx15360\tx16320\tx17280\tx18240\tx19200\tx20160\tx21120\tx22080\tx23040\tx24000\tx24960\tx25920\tx26880\tx27840\tx28800\tx29760\tx30720\tx31680\tx32640\tx33600\tx34560\tx35520\tx36480\tx37440\tx38400\tx39360\tx40320\tx41280\tx42240\tx43200\tx44160\tx45120\tx46080\tx47040\tx48000\tx48960\tx49920\tx50880\tx51840\tx52800\tx53760\tx54720\tx55680\tx56640\tx57600\tx58560\tx59520\tx60480\tx61440\tx62400\tx63360\tx64320\tx65280\tx66240\tx67200\tx68160\tx69120\tx70080\tx71040\tx72000\tx72960\tx73920\tx74880\tx75840\tx76800\tx77760\tx78720\tx79680\tx80640\tx81600\tx82560\tx83520\tx84480\tx85440\tx86400\tx87360\tx88320\tx89280\tx90240\tx91200\tx92160\tx93120\tx94080\tx95040\tx96000\ql\qnatural\pardirnatural
\f3\fs20 \cf0 \CocoaLigature0 SInt32 MacVersion;\
\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\tx10560\tx11520\tx12480\tx13440\tx14400\tx15360\tx16320\tx17280\tx18240\tx19200\tx20160\tx21120\tx22080\tx23040\tx24000\tx24960\tx25920\tx26880\tx27840\tx28800\tx29760\tx30720\tx31680\tx32640\tx33600\tx34560\tx35520\tx36480\tx37440\tx38400\tx39360\tx40320\tx41280\tx42240\tx43200\tx44160\tx45120\tx46080\tx47040\tx48000\tx48960\tx49920\tx50880\tx51840\tx52800\tx53760\tx54720\tx55680\tx56640\tx57600\tx58560\tx59520\tx60480\tx61440\tx62400\tx63360\tx64320\tx65280\tx66240\tx67200\tx68160\tx69120\tx70080\tx71040\tx72000\tx72960\tx73920\tx74880\tx75840\tx76800\tx77760\tx78720\tx79680\tx80640\tx81600\tx82560\tx83520\tx84480\tx85440\tx86400\tx87360\tx88320\tx89280\tx90240\tx91200\tx92160\tx93120\tx94080\tx95040\tx96000\ql\qnatural\pardirnatural
\cf2 if\cf0 (Gestalt(gestaltSystemVersion, &MacVersion) == noErr)\{\
\cf2 if\cf0 (MacVersion >= \cf3 0x1040\cf0 )\{\
\cf4 // this call is Tiger only\cf0 \
[toolbar setShowsBaselineSeparator:\cf2 NO\cf0 ];\
\}\
\}\
\
\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\tx10560\tx11520\tx12480\tx13440\tx14400\tx15360\tx16320\tx17280\tx18240\tx19200\tx20160\tx21120\tx22080\tx23040\tx24000\tx24960\tx25920\tx26880\tx27840\tx28800\tx29760\tx30720\tx31680\tx32640\tx33600\tx34560\tx35520\tx36480\tx37440\tx38400\tx39360\tx40320\tx41280\tx42240\tx43200\tx44160\tx45120\tx46080\tx47040\tx48000\tx48960\tx49920\tx50880\tx51840\tx52800\tx53760\tx54720\tx55680\tx56640\tx57600\tx58560\tx59520\tx60480\tx61440\tx62400\tx63360\tx64320\tx65280\tx66240\tx67200\tx68160\tx69120\tx70080\tx71040\tx72000\tx72960\tx73920\tx74880\tx75840\tx76800\tx77760\tx78720\tx79680\tx80640\tx81600\tx82560\tx83520\tx84480\tx85440\tx86400\tx87360\tx88320\tx89280\tx90240\tx91200\tx92160\tx93120\tx94080\tx95040\tx96000\ql\qnatural\pardirnatural
\f1\fs24 \cf0 - In general, there is no reason for your app objects to communicate (outside of configuration) with the PSMTabBarControl at all. Changes made to the NSTabView instance programmatically should be directed at the NSTabView instance itself, and the control will update to reflect the changes made.\
\
- Your app might want to receive tab view delegate notifications in order to perform some actions. No problem, simply make the desired object the delegate of the PSMTabBarControl instance... it passes along all tab view notifications. Note that it uses these notifications to make changes itself - read the source code to make sure you aren't tripping over something.\
\
- The control creates bindings between each cell's progress indicator and the represented NSTabViewItem's identifier object, if it can. In my app design, I set an instance of NSObjectController as the NSTabViewItem's identifier, and then bind to the "isProcessing" key of the controller's content object. All of this can be seen in the source of the demo app...\
\
- The control can be set to hide itself when there is only a single tab, and can also be told to hide/show on demand. It can animate to appear and disappear, and will resize something to compensate for the missing window real estate. By default, it will resize the window, but you can also connect the "partnerView" outlet in IB to specify another view to resize to take up the missing space. Note that this takes some attention to sizing springs and wires to get right, and complex views may need a container view to achieve the desired effect.\
\
- The control can be configured to draw an attractive "Add Tab" button at the end of the tab cells. Unfortunately, the button is all looks and no brains - it has no idea what your app wants to do when adding a tab. If you configure your app to show the add tab button, you need to hook up the add tab button to the proper target with the proper selector. Something like this will do nicely in your app controller's awakeFromNib:\
\
\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\tx10560\tx11520\tx12480\tx13440\tx14400\tx15360\tx16320\tx17280\tx18240\tx19200\tx20160\tx21120\tx22080\tx23040\tx24000\tx24960\tx25920\tx26880\tx27840\tx28800\tx29760\tx30720\tx31680\tx32640\tx33600\tx34560\tx35520\tx36480\tx37440\tx38400\tx39360\tx40320\tx41280\tx42240\tx43200\tx44160\tx45120\tx46080\tx47040\tx48000\tx48960\tx49920\tx50880\tx51840\tx52800\tx53760\tx54720\tx55680\tx56640\tx57600\tx58560\tx59520\tx60480\tx61440\tx62400\tx63360\tx64320\tx65280\tx66240\tx67200\tx68160\tx69120\tx70080\tx71040\tx72000\tx72960\tx73920\tx74880\tx75840\tx76800\tx77760\tx78720\tx79680\tx80640\tx81600\tx82560\tx83520\tx84480\tx85440\tx86400\tx87360\tx88320\tx89280\tx90240\tx91200\tx92160\tx93120\tx94080\tx95040\tx96000\ql\qnatural\pardirnatural
\f3\fs20 \cf4 // hook up add tab button\cf0 \
[[tabBar addTabButton] setTarget:\cf2 self\cf0 ];\
[[tabBar addTabButton] setAction:\cf2 @selector\cf0 (addNewTab:)];
\f1\fs24 \
\
- The tabs have some sizing options: You can specify the minimum width, maximum width, and optimum width, as well as spcifying if the tabs should size to fit their label or not. The sizing bahavior of the tabs is as follows: If "size to fit" is specified, then tabs will be generated to fit the label, but will never exceed the specified max or min widths. Once the end of the control is reached, the overflow menu will appear as tabs are added; the last tab will squeeze in if it can, or the remaining tabs will stretch to occupy the full control. If "size to fit" is not specified, then all successive tabs will appear at the optimum width. Once the end of the control is reached, adding new tabs will cause all tabs to shrink to accomodate, until the minumum width is reached, and then the overflow menu will be used; max width is ignored in this case. Hopefully that all makes sense :-)\
\
- PSMTabBarControl will load the existing tabs from the tabView outlet at startup. However, many of the advanced features (icon display, progress indicator, object count) rely on binding to a controller that is likely not set up in IB. Solution? Nuke the existing tabs in the NSTabView and add new ones, configured the way you like. The demo app does this in the awakeFromNib: method of the app controller.\
\
- As a design choice, I elected to keep a cell object around until its tab was closed, instead of "churning" cell objects in each update cycle. Each cell keeps its NSTabViewItem as its representedObject and maintains reference that way, rather than by any index. As a result of this, drag-and-drop reordering of tabs does not change the underlying NSTabView instance at all. All that to say: don't rely on numerical indices if communicating with both the control and the tab view - the indices may not correlate if the user moved some tabs around (and remember - you shouldn't need to communicate with the control anyway :-). The Shiira Project, from which I gained much insight and inspiration from for this UI element, elected to scrap and rebuild the array of cells each time through the update cycle, and rely on indices to correlate between cells and NSTabViewItems. I felt the representedObject route was cleaner, and preferred not to churn objects.\
\
\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\tx10560\tx11520\tx12480\tx13440\tx14400\tx15360\tx16320\tx17280\tx18240\tx19200\tx20160\tx21120\tx22080\tx23040\tx24000\tx24960\tx25920\tx26880\tx27840\tx28800\tx29760\tx30720\tx31680\tx32640\tx33600\tx34560\tx35520\tx36480\tx37440\tx38400\tx39360\tx40320\tx41280\tx42240\tx43200\tx44160\tx45120\tx46080\tx47040\tx48000\tx48960\tx49920\tx50880\tx51840\tx52800\tx53760\tx54720\tx55680\tx56640\tx57600\tx58560\tx59520\tx60480\tx61440\tx62400\tx63360\tx64320\tx65280\tx66240\tx67200\tx68160\tx69120\tx70080\tx71040\tx72000\tx72960\tx73920\tx74880\tx75840\tx76800\tx77760\tx78720\tx79680\tx80640\tx81600\tx82560\tx83520\tx84480\tx85440\tx86400\tx87360\tx88320\tx89280\tx90240\tx91200\tx92160\tx93120\tx94080\tx95040\tx96000\ql\qnatural\pardirnatural
\f0\b \cf0 Improvements?
\f1\b0 \
\
Pipe up if you think of something you'd like to see; here's my current list:\
\
- "Pop-up" tabs - like pop-up folders in the finder, in case you want to drag to a destination in another tab.\
- Support for the
\f3\fs22 \CocoaLigature1 NSUnifiedTitleAndToolbarWindowMask
\f1\fs24 \CocoaLigature0 "unified" window appearance. (Help! I really searched around to try to make this work... the color pattern of the title and toolbar seem to be top secret! The new "unified" style is an excellent replication of a unified look, but isn't "built from" the unified appearance like the metal is.)\
- During multi-window drag, having a "drag window/image" that shows the represented view getting moved to the other window.\
- During multi-window drag, support for dragging out solo tabs to consolidate in another window, removing the source window in the process.\
- Support vertical as well as horizontal alignment.\
\
\f0\b Version History
\f1\b0 \
\
Version 1.3 (May 29, 2006)\
- new feature: Unified tab style, compliments of Keith Blount\
- new feature: allow multi-window drag config option (again from Keith).\
- fixed bug: Palette installation/usage instructions were wrong.\
- enhancement: exposed the
\f3\fs20 representedTabViewItems
\f1\fs24 method, which can be used to retrieve the order of the tabs as displayed in the control, since the underlying NSTabView does not get reordered during drag and drop rearrangement.\
\
Version 1.2 (April 20, 2006)\
- new feature: multi-window drag and drop support.\
- bug fixed: zombie issue with tabView:didCloseTabViewItem\
- bugs fixed: some drawing issues around the progress indicators in tabs, and the add tab button.\
- enhancement: the hide/show animation has been improved with less "flickering" of progress indicators during the hide and show.\
\
Version 1.1.2 (April 5, 2006)\
- fixed bug: tabs of non-integer width resulted in occasional anti-aliased drawing issues of dividers between tabs in the Metal style (Thanks, Kent).\
- added feature: delegate can now respond to -tabView:shouldCloseTabViewItem: and -tabView:willCloseTabViewItem:, and -tabView:didCloseTabViewItem: messages, so your app can take care of any needed setup/cleanup for these actions.\
- fixed bug: tab close buttons now show down state when pressed down.\
\
Version 1.1.1 (March 16, 2006)\
- fixed bug: Palette inspector would not reflect state of previously instantiated control. This has been fixed (Thanks, Guillaume).\
- enhancement: Overflow button now highlights when mouse down (Thanks, Kent).\
- fixed bug: when set to not close a solo tab, the close button would be hidden for the tab, but could still be closed if you clicked the tab in the right location. This has been fixed (Thanks, malcom).\
\
Version 1.1 (March 10, 2006)\
- Bound the "title" of the cell to the "label" of the source tabview item. Just in case you wanted to change the label on the tab during the running of your application.\
- PSMTabBarCell factored to support new tab "styles", or appearances in drawing. Now supported are the existing "Metal" style and a new "Aqua" style. Many thanks to David Smith, Seth Willits, and Chris Forsythe for their contributions!\
- Control can be configured to "Hide for single tab", so it doesn't appear unless there are more than a single tab view present. Features animated show/hide behavior (that can be called anytime, and is called automatically in the case that a single tab exists). The show/hide behavior can also be set up to resize either the window (default) or a selected "partner view" to compensate for the lost height of the tab bar.\
- Control can be configured for "Can close only tab" behavior. If set to NO, no close button will appear on a lone tab.\
- Cells can be set to "size to fit", or given uniform min/max/optimum sizes.\
- Added support for display of an icon and an object count, if the proper app design pattern is followed.\
- Sweet animated drag-and-drop drawing!\
- A few drawing bugs surrounding the progress indicators in cells were squished.\
- New documentation, in case you found this read me a little pithy.\
\
Version 1.0 (December 2005)\
Initial release of safari-like tab implementation.\
\
\f0\b The standard disavowal of this beautiful mess
\f1\b0 \
\
I should note that portions of this source code were inspired by the Shiira project's implementation of Safari-style tabs. While I made some different design decisions, the drawing and some other aspects are only slight modifications of their excellent work. As such, I note their copyright under their BSD licence:\
\
\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\tx10560\tx11520\tx12480\tx13440\tx14400\tx15360\tx16320\tx17280\tx18240\tx19200\tx20160\tx21120\tx22080\tx23040\tx24000\tx24960\tx25920\tx26880\tx27840\tx28800\tx29760\tx30720\tx31680\tx32640\tx33600\tx34560\tx35520\tx36480\tx37440\tx38400\tx39360\tx40320\tx41280\tx42240\tx43200\tx44160\tx45120\tx46080\tx47040\tx48000\tx48960\tx49920\tx50880\tx51840\tx52800\tx53760\tx54720\tx55680\tx56640\tx57600\tx58560\tx59520\tx60480\tx61440\tx62400\tx63360\tx64320\tx65280\tx66240\tx67200\tx68160\tx69120\tx70080\tx71040\tx72000\tx72960\tx73920\tx74880\tx75840\tx76800\tx77760\tx78720\tx79680\tx80640\tx81600\tx82560\tx83520\tx84480\tx85440\tx86400\tx87360\tx88320\tx89280\tx90240\tx91200\tx92160\tx93120\tx94080\tx95040\tx96000\ql\qnatural\pardirnatural
\f3\fs20 \cf4 Portions of this software Copyright 2004 The Shiira Project. All rights reserved.\
\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\tx10560\tx11520\tx12480\tx13440\tx14400\tx15360\tx16320\tx17280\tx18240\tx19200\tx20160\tx21120\tx22080\tx23040\tx24000\tx24960\tx25920\tx26880\tx27840\tx28800\tx29760\tx30720\tx31680\tx32640\tx33600\tx34560\tx35520\tx36480\tx37440\tx38400\tx39360\tx40320\tx41280\tx42240\tx43200\tx44160\tx45120\tx46080\tx47040\tx48000\tx48960\tx49920\tx50880\tx51840\tx52800\tx53760\tx54720\tx55680\tx56640\tx57600\tx58560\tx59520\tx60480\tx61440\tx62400\tx63360\tx64320\tx65280\tx66240\tx67200\tx68160\tx69120\tx70080\tx71040\tx72000\tx72960\tx73920\tx74880\tx75840\tx76800\tx77760\tx78720\tx79680\tx80640\tx81600\tx82560\tx83520\tx84480\tx85440\tx86400\tx87360\tx88320\tx89280\tx90240\tx91200\tx92160\tx93120\tx94080\tx95040\tx96000\ql\qnatural\pardirnatural
\f1\fs24 \cf0 Check them out at: http://hmdt-web.net/shiira/\
\
This source code is provided under BSD license, the conditions of which are listed below. I hope you'll make note somewhere in your about window or ReadMe stating the sweet coding goodness of Positive Spin Media and link to the fascinating and informative website at www.positivespinmedia.com\
\
\pard\pardeftab720\sa320\ql\qnatural
\cf0 \CocoaLigature1 Copyright (c) 2005, Positive Spin Media\uc0\u8232 All rights reserved.\
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\
\pard\tx220\tx720\pardeftab720\li720\fi-720\ql\qnatural
\ls1\ilvl0\cf0 {\listtext \'a5 }Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\
{\listtext \'a5 }Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\
{\listtext \'a5 }Neither the name of Positive Spin Media nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\
\
\pard\pardeftab720\sa320\ql\qnatural
\cf0 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\CocoaLigature0 \
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

@@ -1,24 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>com.positivespinmedia.TabBarControlDemo</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.1</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
@@ -1,301 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<TITLE>PSMTabBarControl - Safari-style Tabs (Objective-C)</TITLE>
<LINK REL="stylesheet" TYPE="text/css" HREF="frameset_styles.css">
</head>
<BODY bgcolor="#ffffff">
<h1>PSMTabBarControl</h1><div class="spec_sheet_info_box"><table cellspacing="0" class="specbox">
<tr><td scope="row"><b><span style="white-space: nowrap;">Inherits from</span></b></td><td><div style="margin-bottom:1px"><a href="file:///Developer/ADC%20Reference%20Library/documentation/Cocoa/Reference/ApplicationKit/ObjC_classic/Classes/NSControl.html#//apple_ref/occ/cl/NSControl" target="_top">NSControl</a> : <a href="file:///Developer/ADC%20Reference%20Library/documentation/Cocoa/Reference/ApplicationKit/ObjC_classic/Classes/NSView.html#//apple_ref/occ/cl/NSView" target="_top">NSView</a> : <a href="file:///Developer/ADC%20Reference%20Library/documentation/Cocoa/Reference/ApplicationKit/ObjC_classic/Classes/NSResponder.html#//apple_ref/occ/cl/NSResponder" target="_top">NSResponder</a> : <a href="file:///Developer/ADC%20Reference%20Library/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSObject.html#//apple_ref/occ/cl/NSObject" target="_top">NSObject</a></div></td></tr>
<tr><td scope="row"><b><span style="white-space: nowrap;">Conforms to</span></b></td><td><div style="margin-bottom:1px">
<span class="content_text"><a href="file:///Developer/ADC%20Reference%20Library/documentation/Cocoa/Reference/Foundation/ObjC_classic/Protocols/NSCoding.html#//apple_ref/occ/intf/NSCoding" target="_top">NSCoding (NSResponder)</a></span><br>
<span class="content_text"><a href="file:///Developer/ADC%20Reference%20Library/documentation/Cocoa/Reference/Foundation/ObjC_classic/Protocols/NSObjectProtocol.html#//apple_ref/occ/intf/NSObject" target="_top">NSObject (NSObject)</a></span><br>
</div></td></tr>
<tr><td scope="row"><b><span style="white-space: nowrap;">Declared in</span></b></td><td><div style="margin-bottom:1px"><span class="content_text">PSMTabBarControl.h</span><br>
</div></td></tr>
</table></div><br><a name="//apple_ref/doc/uid/20000092-50187" title="Class Description"></a><a name="50187" title="Class Description"></a><h2>Class Description</h2>
<p class="spaceabove">PSMTabBarControl provides a user interface for the management of tabbed views that has an appearance similar to Apple's Safari web browser.<p>
<p>Internally, PSMTabBarControl uses a custom cell class and supporting style objects to implement its user interface.</p>
<p>Currently, this object supports "Aqua" and "Metal" tab styles to present an appearance consistent with the rest of your application. Numerous configuration options exist to customize behavior, as outlined below. PSMTabBarControl instances require a few specific connections with other application objects to perform properly at runtime:</p>
<ul>
<li><b>The control's "tabView" outlet must be connected to the desired NSTabView instance in Interface Builder, or set programmatically with the setTabView: method.</b></li>
<li><b>The "delegate" outlet of the NSTabView being controlled must be connected to the instance of PSMTabBarControl, either programmatically or in IB.</b></li>
<li>Optionally, you may connect the control's "partnerView" outlet to a view that will be resized to compensate when PSMTabBarControl changes size due to hide/show behavior. If no connection is made, PSMTabBarControl will resize the window in response to hide/show messages.</li>
</ul>
<p>A PSMTabBarControl instance should occupy the width of the window, and should be precisely 22 pixels in height. It should be resizable in width, but not height. It can be placed at the top or botton of the window (or anywhere in between, if desired).</p>
<p>Outside of configuring it, your application should have little interaction with this class. The presented tabs will change in conjunction with changes your application makes in the NSTabView being controlled.</p>
<h2>A Usage Pattern</h2>
<p class="spaceabove">PSMTabBarControl becomes even more powerful if your application design matches an expected pattern: the control attempts to bind a number of tab attributes to the NSTabViewItem's identifier object if possible. These visible attributes include a progress indicator, an icon, and an object counter. Additionally, the control binds each tab's title to the label of the represented NSTabViewItem.<p>
<p>Taking advantage of these features requires no glue code on your part, but it does require providing a particular object graph. Here's the basics...</p>
<ul><li>For each tab that is created, your application should have a model object that keeps the state of model attributes: isProcessing (a BOOL), objectCount (an int), and icon (an NSImage). You can pick and choose any number of these to support, or none, at your option.
<li>Your application should create an NSObjectController to control your model (the model object is the "content" of the NSObjectController instance).
<li>When you create new tabs (via the NSTabView interface), you should set the object controller instance to be the identifier object of the newly created NSTabViewItem object.</ul>
<p>The demo application included with this project illustrates a very quick way to accomplish these goals. If this pattern is followed, PSMTabBarControl will take care of the rest.</p>
<h2>Methods by Task</h2>
<h3 class="tight">Setting needed connections</h3>
<dl class="termdef"> <dt><code><a href="#addTabButton">&#8211;&#xA0;setTabView:</a></code></dt><dd><p>Specifies the instance of NSTabView to be controlled.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#tabView">&#8211;&#xA0;tabView</a></code></dt><dd><p>Returns the instance of NSTabView being controlled.</p></dd></dl>
<h3 class="tight">Setting optional connections</h3>
<dl class="termdef"> <dt><code><a href="#setPartnerView">&#8211;&#xA0;setPartnerView:</a></code></dt><dd><p>Specifies a view that will resize to compensate for control size changes in response to hide and show messages.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#partnerView">&#8211;&#xA0;partnerView</a></code></dt><dd><p>Returns the instance of a view that will resize to compensate for control size changes in response to hide and show messages.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#setDelegate">&#8211;&#xA0;setDelegate:</a></code></dt><dd><p>Specifies an object that will receive delegate messages as passed through from the NSTabView instance.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#delegate">&#8211;&#xA0;delegate:</a></code></dt><dd><p>Returns the specified delegate object.</p></dd></dl>
<h3 class="tight">Control configuration</h3>
<dl class="termdef"> <dt><code><a href="#canCloseOnlyTab">&#8211;&#xA0;canCloseOnlyTab</a></code></dt><dd><p>Returns YES if the user is allowed to close a tab when it is the only tab left, NO otherwise.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#setCanCloseOnlyTab">&#8211;&#xA0;setCanCloseOnlyTab:</a></code></dt><dd><p>Controls whether the receiver will present a close button for a single tab in a tab bar. </p></dd></dl>
<dl class="termdef"> <dt><code><a href="#styleName">&#8211;&#xA0;styleName</a></code></dt><dd><p>Returns the name of the current drawing style. "Aqua", "Metal", and "Unified" are the currently supported options.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#setStyleNamed">&#8211;&#xA0;setStyleNamed:</a></code></dt><dd><p>Specifies the style in which the tabs and control are drawn. "Aqua", "Metal", and "Unified" are the currently supported options. </p></dd></dl>
<dl class="termdef"> <dt><code><a href="#hideForSingleTab">&#8211;&#xA0;hideForSingleTab</a></code></dt><dd><p>Returns YES if the control will hide if there is only one tab left, NO otherwise.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#setHideForSingleTab">&#8211;&#xA0;setHideForSingleTab:</a></code></dt><dd><p>Controls whether the receiver will hide when the user closes all but a single tab in a tab bar. </p></dd></dl>
<dl class="termdef"> <dt><code><a href="#showAddTabButton">&#8211;&#xA0;showAddTabButton</a></code></dt><dd><p>Returns YES if the control will display a small "add tab" button at the rightmost end of the tabs, NO otherwise.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#setShowAddTabButton">&#8211;&#xA0;setShowAddTabButton:</a></code></dt><dd><p>Controls whether the receiver will will display a small "add tab" button at the rightmost end of the tabs. </p></dd></dl>
<dl class="termdef"> <dt><code><a href="#cellMinWidth">&#8211;&#xA0;cellMinWidth</a></code></dt><dd><p>Returns the minimum width (in pixels) that a tab will be allowed to occupy.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#setCellMinWidth">&#8211;&#xA0;setCellMinWidth:</a></code></dt><dd><p>Specifies the maximum width (in pixels) that a tab will be allowed to occupy.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#cellMaxWidth">&#8211;&#xA0;cellMaxWidth</a></code></dt><dd><p>Returns the maximum width (in pixels) that a tab will be allowed to occupy.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#setCellMaxWidth">&#8211;&#xA0;setCellMaxWidth:</a></code></dt><dd><p>Specifies the maximum width (in pixels) that a tab will be allowed to occupy.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#cellOptimumWidth">&#8211;&#xA0;cellOptimumWidth</a></code></dt><dd><p>Returns the default width (in pixels) that a tab will be allowed to occupy when tabs are drawn with uniform size.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#setCellMaxWidth">&#8211;&#xA0;setCellMaxWidth:</a></code></dt><dd><p>Specifies the default width (in pixels) that a tab will be allowed to occupy when tabs are drawn with uniform size.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#sizeCellsToFit">&#8211;&#xA0;sizeCellsToFit</a></code></dt><dd><p>Returns YES if the control will make the tabs sized to fit the content of the tab, NO otherwise.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#setSizeCellsToFit">&#8211;&#xA0;setSizeCellsToFit:</a></code></dt><dd><p>Controls whether the receiver will make the tabs sized to fit the content of the tab.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#allowsDragBetweenWindows">&#8211;&#xA0;allowsDragBetweenWindows</a></code></dt><dd><p>Returns YES if the control allows a user to drag a tab to another instance of this control, NO otherwise.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#setAllowsDragBetweenWindows">&#8211;&#xA0;setAllowsDragBetweenWindows:</a></code></dt><dd><p>Controls whether the receiver will allow a user to drag a tab to another instance of this control.</p></dd></dl>
<h3 class="tight">Internal UI components</h3>
<dl class="termdef"> <dt><code><a href="#addTabButton">&#8211;&#xA0;addTabButton</a></code></dt><dd><p>Returns an instance of an NSButton subclass that is used to present the "add tab" button. If "showAddTabButton" is YES, developers must use this method to access the button and specify a target and action for the button.</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#overflowPopUpButton">&#8211;&#xA0;overflowPopUpButton</a></code></dt><dd><p>Returns an instance of an NSPopUpButton subclass that is used to present the overflow menu (which shows when there are more tabs than can fit across the control).</p></dd></dl>
<dl class="termdef"> <dt><code><a href="#representedTabViewItems">&#8211;&#xA0;representedTabViewItems</a></code></dt><dd><p>Returns an array of the NSTabViewItems represented by the tabs in the control. Useful if you want to archive the order of the tabs between runs of your program.</p></dd></dl>
<h3 class="tight">Visibility</h3>
<dl class="termdef"> <dt><code><a href="#hideTabBar">&#8211;&#xA0;hideTabBar:animate:</a></code></dt><dd><p>If desired, obejcts can tell the tab bar to hide (reduce in size to a single pixel line spanning the window) or show, and optionally whether to animate this effect or not.</p></dd></dl>
<h2>Instance Methods</h2>
<a name="addTabButton"></a><h3 class="tight">addTabButton</h3>
<p class="spaceabove">Returns an instance of an NSButton subclass that is used to present the "add tab" button. If "showAddTabButton" is YES, developers must use this method to access the button and specify a target and action for the button.</p><p class="spaceabovemethod">- (PSMRolloverButton *)addTabButton;</p>
<h5 class="tight">Discussion</h5><p> If you have configured the control to show the add tab button, you must use this method to access the button and set the target and action for it. Example:</p> <code>[[tabBar addTabButton] setTarget:self];<br>
[[tabBar addTabButton] setAction:@selector(addNewTab:)];</code> </p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#setShowAddTabButton">&#8211;&#xA0;setShowAddTabButton:</a></code><li><li class="availability"> <code><a href="#showAddTabButton">&#8211;&#xA0;showAddTabButton</a></code><li></ul>
<a name="allowsDragBetweenWindows"></a><h3 class="tight">allowsDragBetweenWindows</h3>
<p class="spaceabove">Returns <code>YES</code> if the control allows a user to drag a tab to another instance of this control, NO otherwise.</p><p class="spaceabovemethod">- (BOOL)allowsDragBetweenWindows</p>
<h5 class="tight">Discussion</h5><p>The default is <code>YES</code>.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#setAllowsDragBetweenWindows">&#8211;&#xA0;setAllowsDragBetweenWindows:</a></code><li></ul>
<a name="canCloseOnlyTab"></a><h3 class="tight">canCloseOnlyTab</h3>
<p class="spaceabove">Returns <code>YES</code> if the receiver has been configured to allow users to close a single remaining tab.</p><p class="spaceabovemethod">- (BOOL)canCloseOnlyTab</p>
<h5 class="tight">Discussion</h5><p>The default is <code>NO</code>.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#setCanCloseOnlyTab">&#8211;&#xA0;setCanCloseOnlyTab:</a></code><li></ul>
<a name="cellMaxWidth"></a><h3 class="tight">cellMaxWidth</h3>
<p class="spaceabove">Returns the maximum width (in pixels) that a tab will be allowed to occupy.</p><p class="spaceabovemethod">- (int)cellMaxWidth</p>
<h5 class="tight">Discussion</h5><p>The cellMaxWidth value applies to both uniformly sized tabs, and tabs that are sized to fit. No tab will be drawn wider than the specified value.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#setCellMaxWidth">&#8211;&#xA0;setCellMaxWidth:</a></code><li><li class="availability"> <code><a href="#cellMinWidth">&#8211;&#xA0;cellMinWidth</a></code><li class="availability"> <code><a href="#cellOptimumWidth">&#8211;&#xA0;cellOptimumWidth</a></code><li></ul>
<a name="cellMinWidth"></a><h3 class="tight">cellMinWidth</h3>
<p class="spaceabove">Returns the minimum width (in pixels) that a tab will be allowed to occupy.</p><p class="spaceabovemethod">- (int)cellMinWidth</p>
<h5 class="tight">Discussion</h5><p>The cellMinWidth value applies only to uniformly sized tabs. No tab will be drawn smaller than the specified value. Size-to-fit tabs ignore this value, and are made just small enough to fit their content.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#setCellMinWidth">&#8211;&#xA0;setCellMinWidth:</a></code><li><li class="availability"> <code><a href="#cellMaxWidth">&#8211;&#xA0;cellMaxWidth</a></code><li class="availability"> <code><a href="#cellOptimumWidth">&#8211;&#xA0;cellOptimumWidth</a></code><li></ul>
<a name="cellOptimumWidth"></a><h3 class="tight">cellOptimumWidth</h3>
<p class="spaceabove">Returns the width (in pixels) that a tab will be made to occupy if the tabs are uniformly sized.</p><p class="spaceabovemethod">- (int)cellOptimumWidth</p>
<h5 class="tight">Discussion</h5><p>The cellOptimumWidth value applies only to uniformly sized tabs. All tabs will be drawn at the specified value. Size-to-fit tabs ignore this value, and are made just small enough to fit their content.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#setCellOptimumWidth">&#8211;&#xA0;setCellOptimumWidth:</a></code><li><li class="availability"> <code><a href="#cellMaxWidth">&#8211;&#xA0;cellMaxWidth</a></code><li class="availability"> <code><a href="#cellMinWidth">&#8211;&#xA0;cellMinWidth</a></code><li></ul>
<a name="delegate"></a><h3 class="tight">delegate</h3>
<p class="spaceabove">Returns the object that will be sent passed-through NSTabView delegate messages.</p><p class="spaceabovemethod">- (id)delegate</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#setDelegate">&#8211;&#xA0;setDelegate:</a></code><li></ul>
<a name="hideForSingleTab"></a><h3 class="tight">hideForSingleTab</h3>
<p class="spaceabove">Returns <code>YES</code> if the receiver has been configured to hide if there is a single remaining tab.</p><p class="spaceabovemethod">- (BOOL)hideForSingleTab</p>
<h5 class="tight">Discussion</h5><p>The default is <code>NO</code>.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#setHideForSingleTab">&#8211;&#xA0;setHideForSingleTab:</a></code><li></ul>
<a name="hideTabBar"></a><h3 class="tight">hideTabBar:animate:</h3>
<p class="spaceabove"><p>If desired, obejcts can tell the tab bar to hide (reduce in size to a single pixel line spanning the window) or show, and optionally whether to animate this effect or not.</p></p><p class="spaceabovemethod">- (void)hideTabBar:(BOOL)hide animate:(BOOL)animate</p>
<h5 class="tight">Discussion</h5><p> If <i>hide</i> is <code>YES</code> the control will shrink to a single pixel line spanning the window; otherwise the control will expand to its normal appearance. If <i>animate</i> is <code>YES</code>, the shrinking and expanding will happen in a visible animation; otherwise the transition will be instant. There is no effect if the control is already in the specified state.</p>
<a name="overflowPopUpButton"></a><h3 class="tight">overflowPopUpButton</h3>
<p class="spaceabove">Returns an instance of an NSPopUpButton subclass that is used to present the overflow menu. </p><p class="spaceabovemethod">- (PSMOverflowPopUpButton *)overflowPopUpButton;</p>
<h5 class="tight">Discussion</h5><p> This method could be used to modify the button or menu if desired.</p>
<a name="partnerView"></a><h3 class="tight">partnerView</h3>
<p class="spaceabove">Returns the object that will be resized to compensate for the changing size of the control during hide/show behavior.</p><p class="spaceabovemethod">- (id)partnerView</p>
<h5 class="tight">Discussion</h5><p> If a partnerView has not been specified, the window will be resized during hide/show.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#setPartnerView">&#8211;&#xA0;setPartnerView:</a></code><li></ul>
<a name="representedTabViewItems"></a><h3 class="tight">representedTabViewItems</h3>
<p class="spaceabove">Returns an array of NSTabViewItems, ordered according to the display order of the tabs in the control. </p><p class="spaceabovemethod">- (NSMutableArray *)representedTabViewItems;</p>
<h5 class="tight">Discussion</h5><p> This method could be used archive the order of the tabs between application runs. When the user reorders tabs via drag and drop, the represented NSTabView does <i>not</i> change order.</p>
<a name="setAllowsDragBetweenWindows"></a><h3 class="tight">setAllowsDragBetweenWindows</h3>
<p class="spaceabove">If set to <code>YES</code>, the receiver is configured to allow users to drag a tab to an instance of PSMTabBarControl in another window.</p><p class="spaceabovemethod">- (void)setAllowsDragBetweenWindows:(BOOL)value</p>
<h5 class="tight">Discussion</h5><p>The default is <code>YES</code>.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#allowsDragBetweenWindows">&#8211;&#xA0;allowsDragBetweenWindows:</a></code><li></ul>
<a name="setCanCloseOnlyTab"></a><h3 class="tight">setCanCloseOnlyTab:</h3>
<p class="spaceabove">If set to <code>YES</code>, the receiver is configured to allow users to close a single remaining tab.</p><p class="spaceabovemethod">- (void)setCanCloseOnlyTab:(BOOL)value</p>
<h5 class="tight">Discussion</h5><p>The default is <code>NO</code>.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#canCloseOnlyTab">&#8211;&#xA0;canCloseOnlyTab:</a></code><li></ul>
<a name="setCellMaxWidth"></a><h3 class="tight">setCellMaxWidth:</h3>
<p class="spaceabove">Specifies the maximum width (in pixels) that a tab will be allowed to occupy.</p><p class="spaceabovemethod">- (void)setCellMaxWidth:(int)value</p>
<h5 class="tight">Discussion</h5><p> No tab will be drawn any wider than the specified value.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#cellMaxWidth">&#8211;&#xA0;cellMaxWidth</a></code><li></ul>
<a name="setCellMinWidth"></a><h3 class="tight">setCellMinWidth:</h3>
<p class="spaceabove">Specifies the minimum width (in pixels) that a tab will be allowed to occupy.</p><p class="spaceabovemethod">- (void)setCellMinWidth:(int)value</p>
<h5 class="tight">Discussion</h5><p> No tab will be drawn any smaller than the specified value. This value is ignored when drawing in size-to-fit; tabs are made just small enough to fit their content.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#cellMinWidth">&#8211;&#xA0;cellMinWidth</a></code><li></ul>
<a name="setCellOptimumWidth"></a><h3 class="tight">setCellOptimumWidth:</h3>
<p class="spaceabove">Specifies the width (in pixels) that a tab will occupy when tabs are uniformly sized.</p><p class="spaceabovemethod">- (void)setCellOptimumWidth:(int)value</p>
<h5 class="tight">Discussion</h5><p> This value is ignored when drawing in size-to-fit; tabs are made just small enough to fit their content.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#cellOptimumWidth">&#8211;&#xA0;cellOptimumWidth</a></code><li></ul>
<a name="setDelegate"></a><h3 class="tight">setDelegate:</h3>
<p class="spaceabove">Specifies an object that will receive delegate messages as passed through from the NSTabView instance.</p><p class="spaceabovemethod">- (void)setDelegate:(id)object</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#delegate">&#8211;&#xA0;delegate:</a></code><li></ul>
<a name="setHideForSingleTab"></a><h3 class="tight">setHideForSingleTab:</h3>
<p class="spaceabove">If set to <code>YES</code>, the receiver is configured to hide when there is a single remaining tab.</p><p class="spaceabovemethod">- (void)setHideForSingleTab:(BOOL)value</p>
<h5 class="tight">Discussion</h5><p>The default is <code>NO</code>.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#hideForSingleTab">&#8211;&#xA0;hideForSingleTab</a></code><li></ul>
<a name="setPartnerView"></a><h3 class="tight">setPartnerView:</h3>
<p class="spaceabove">Specifies a view that will resize to compensate for control size changes in response to hide and show messages.</p><p class="spaceabovemethod">- (void)setPartnerView:(id)view</p>
<h5 class="tight">Discussion</h5><p>if <i>nil</i>, the control will resize the window in response to hide/show messages.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#partnerView">&#8211;&#xA0;partnerView</a></code><li></ul>
<a name="setStyleNamed"></a><h3 class="tight">setStyleNamed:</h3>
<p class="spaceabove">Specifies the style in which the tabs and control are drawn. </p><p class="spaceabovemethod">- (void)setStyleNamed:(NSString *)name</p>
<h5 class="tight">Discussion</h5><p>"Aqua" and "Metal" are the currently supported options.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#styleName">&#8211;&#xA0;styleName</a></code><li></ul>
<a name="setShowAddTabButton"></a><h3 class="tight">setShowAddTabButton:</h3>
<p class="spaceabove">Controls whether the receiver will will display a small "add tab" button at the rightmost end of the tabs. </p><p class="spaceabovemethod">- (void)setShowAddTabButton:(BOOL)value</p>
<h5 class="tight">Discussion</h5><p>Default is <code>NO</code>.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#showAddTabButton">&#8211;&#xA0;showAddTabButton</a></code><li></ul>
<a name="setSizeCellsToFit"></a><h3 class="tight">setSizeCellsToFit:</h3>
<p class="spaceabove">Controls whether the receiver will make the tabs sized to fit the content of the tab. </p><p class="spaceabovemethod">- (void)setSizeCellsToFit:(BOOL)value</p>
<h5 class="tight">Discussion</h5><p>Default is <code>NO</code>.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#sizeCellsToFit">&#8211;&#xA0;sizeCellsToFit</a></code><li></ul>
<a name="setTabView"></a><h3 class="tight">setTabView:</h3>
<p class="spaceabove">Specifies the instance of NSTabView to be controlled. </p><p class="spaceabovemethod">- (void)setTabView:(NSTabView *)view</p>
<h5 class="tight">Discussion</h5><p>This class will not function properly without this outlet being set.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#tabView">&#8211;&#xA0;tabView</a></code><li></ul>
<a name="sizeCellsToFit"></a><h3 class="tight">sizeCellsToFit</h3>
<p class="spaceabove">Returns YES if the control will make the tabs sized to fit the content of the tab, NO otherwise.</p><p class="spaceabovemethod"- (BOOL)sizeCellsToFit</p>
<h5 class="tight">Discussion</h5><p>The default is <code>NO</code>.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#setSizeCellsToFit">&#8211;&#xA0;setSizeCellsToFit:</a></code><li></ul>
<a name="styleName"></a><h3 class="tight">styleName:</h3>
<p class="spaceabove">Returns the name of the current drawing style. </p><p class="spaceabovemethod">- (NSString *)styleName</p>
<h5 class="tight">Discussion</h5><p>"Aqua" and "Metal" are the currently supported options.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#setStyleNamed">&#8211;&#xA0;setStyleNamed:</a></code><li></ul>
<a name="tabView"></a><h3 class="tight">tabView:</h3>
<p class="spaceabove">Returns the instance of NSTabView being controlled. </p><p class="spaceabovemethod">- (NSTabView *)tabView</p>
<h5 class="tight">Discussion</h5><p>This class will not function properly if this object is <i>nil</i>.</p>
<h5 class="tight">See Also</h5><ul class="availability">
<li class="availability"> <code><a href="#setTabView">&#8211;&#xA0;setTabView</a></code><li></ul>
<h2>Delegate Methods</h2>
<p class="spaceabove">You application controller can keep track of activity from the tab view and the user via the following delegate methods.<p>
<a name="shouldCloseTabViewItem"></a><h3 class="tight">tabView:shouldCloseTabViewItem:</h3>
<p class="spaceabove">Sent when a user clicks the close button on a tab. </p><p class="spaceabovemethod">- (BOOL)tabView:(NSTabView *)tabView shouldCloseTabViewItem:(NSTabViewItem *)tabViewItem</p>
<h5 class="tight">Discussion</h5><p>If you return <code>NO</code>, the tab will not be closed. Please make sure to alert the user as to why with a sheet or dialog.</p>
<a name="willCloseTabViewItem"></a><h3 class="tight">tabView:willCloseTabViewItem:</h3>
<p class="spaceabove">Sent when tab is about to be closed. </p><p class="spaceabovemethod">- (void)tabView:(NSTabView *)tabView willCloseTabViewItem:(NSTabViewItem *)tabViewItem</p>
<h5 class="tight">Discussion</h5><p>This presents you with an opportunity to clean up the application objects/events/sessions represented by the tab.</p>
<a name="didCloseTabViewItem"></a><h3 class="tight">tabView:didCloseTabViewItem:</h3>
<p class="spaceabove">Sent after a tab has been closed. </p><p class="spaceabovemethod">- (void)tabView:(NSTabView *)tabView didCloseTabViewItem:(NSTabViewItem *)tabViewItem</p>
<h5 class="tight">Discussion</h5><p>This presents you with an opportunity to clean up the application objects/events/sessions represented by the tab. Don't go trying to modify the tabViewItem - it is about to be released, and has already been removed from the tabView!</p>
<h3 class="tight">tabView:didSelectTabViewItem:</h3>
<p class="spaceabove">Informs the delegate that <i>tabView</i> has selected <i>tabViewItem</i>.</p><p class="spaceabovemethod">- (void)tabView:(NSTabView *)<i>tabView</i> didSelectTabViewItem:(NSTabViewItem *)<i>tabViewItem</i></p>
<h3 class="tight">tabView:shouldSelectTabViewItem:</h3>
<p class="spaceabove">Invoked just before <i>tabViewItem</i> in <i>tabView</i> is selected.</p><p class="spaceabovemethod">- (BOOL)tabView:(NSTabView *)<i>tabView</i> shouldSelectTabViewItem:(NSTabViewItem *)<i>tabViewItem</i></p>
<h5 class="tight">Discussion</h5><p> The delegate can return <code>NO</code> to prevent selection of specific tabs.</p>
<h3 class="tight">tabView:willSelectTabViewItem:</h3>
<p class="spaceabove">Informs the delegate that <i>tabView</i> is about to select <i>tabViewItem</i>.</p><p class="spaceabovemethod">- (void)tabView:(NSTabView *)<i>tabView</i> willSelectTabViewItem:(NSTabViewItem *)<i>tabViewItem</i></p>
<h3 class="tight">tabViewDidChangeNumberOfTabViewItems:</h3>
<p class="spaceabove">Informs the delegate that the number of tab view items in <i>tabView</i> has changed.</p><p class="spaceabovemethod">- (void)tabViewDidChangeNumberOfTabViewItems:(NSTabView *)<i>tabView</i></p>
</BODY>
</html>
@@ -1,943 +0,0 @@
/* link classes */
A:link { COLOR: #0000FF; TEXT-DECORATION: none; }
A:link:hover { COLOR: #FF6600; TEXT-DECORATION: underline; }
A:active { COLOR: #FF6600; TEXT-DECORATION: underline; }
/* apple.com site does not explicitly define visited link properties, but we do here */
A:visited { COLOR: #0000AA; TEXT-DECORATION: none; }
A:visited:hover { COLOR: #FF6600; TEXT-DECORATION: underline; }
/* used to convert otherCodeCharacters to code, thus saving character space in HTML for smaller file sizes */
tt {
FONT-SIZE: 11px; FONT-FAMILY: monaco, courier, monospace; }
/* redefine preformated text and code blocks */
PRE {
FONT-SIZE: 11px; FONT-FAMILY: monaco, courier, monospace; margin-top: 5px; margin-bottom: 10px;}
CODE {
FONT-SIZE: 11px; FONT-FAMILY: monaco, courier, monospace; }
/* JavaScript toc frame */
.jtoc_closed { background-color: #e9e9e9; }
.jtoc_open { background-color: #FFFFFF; padding-bottom: 10px; }
.jtoc_open_top_line {border-top: 1px solid #CCC; background-color: #fff; padding-bottom: 10px;}
.jtoc_open_bottom_line {border-bottom: 1px solid #CCC; background-color: #fff; padding-bottom: 10px;}
.jtoc_open_both_lines {border-bottom: 1px solid #CCC; border-top: 1px solid #CCC; background-color: #fff; padding-bottom: 10px;}
/* frameset: toc frame */
.toc_contents_text {
font-family: lucida grande, geneva, helvetica, arial, sans-serif; font-size: 12px; font-weight: bold; padding-top: 4px 0;
color: #0000FF;
}
.toc_contents_text_open {
font-family: lucida grande, geneva, helvetica, arial, sans-serif; font-size: 12px;
background: #FFFFFF; color: #0000FF;
}
.low_level_text {
font-family: lucida grande, geneva, helvetica, arial, sans-serif; font-size: 11px; padding: 4px 5px 4px 5px
color: #0000FF;
}
#toc_contents_title {
font-family: lucida grande, geneva, helvetica, arial, sans-serif; font-size: 16px; color: #FFFFFF; font-weight: bold;
}
.toc_contents_heading {
font-family: lucida grande, geneva, helvetica, arial, sans-serif; font-size: 12px; font-weight: bold;
}
/* Special TOC heading for Help books only */
.toc_contents_help_heading {
font-family: lucida grande, geneva, helvetica, arial, sans-serif; font-size: 14px; color: #330099; font-weight: bold;
}
/* frameset: toc frame styles WEB AS. used for any document that uses the disclosure model for TOC like conceptural and procedural C documents*/
#toc {
padding: 0 0 0 0;
}
#toc p.download {
padding: 5px 10px;
margin: 0;
font-weight: normal; font-size: 11px;
}
#toc_PDFbottomborder {
padding-top: 5px;
border-bottom: 1px solid #CCC;
}
#toc h2 {
margin: 0;
padding: 10px;
font-size: 15px; font-weight: bold;
border-bottom: 0px solid;
}
#toc h3 {
margin: 6px 5px 0 10px;
font-size: 13px; font-weight: bold; color: black;
}
#toc h4 {
font-size: 11px; font-weight: bold; color: black;
margin: -5px 0px 0 14px;
}
#toc_staticbox {
padding: 0 0 0 0;
border: 1px solid #919699;
background: #e9e9e9;
}
#toc ul {
list-style: none outside;
margin-left: 20px; margin-bottom: -2px;
padding: 0px;
}
#toc ul ul{
list-style: none outside;
margin-left: 10px; margin-bottom: -2px;
padding: 0px;
}
#toc li a {
margin-left: 5px;
display: block;
padding: 0px 5px 0px 5px;
}
#toc li a.location {
font-weight: bold; color: #000;
text-decoration: none;
}
#toc li{
font-weight: normal; font-size: 11px;
padding: 0px 5px 0px 0px;
list-style-type: none; background: url(../Images/bullet.gif) no-repeat 0px .5em;
}
#toc li li a {
margin-left: 0px;
}
#toc ul ul li {
background: url(../Images/dash.gif) no-repeat 0px .6em;
}
#toc ul ul ul li {
background: url(../Images/sm_bullet.gif) no-repeat 0px .5em;
}
#toc li.open {
border-top: 1px solid #CCC; border-bottom: 1px solid #CCC; background-color: #fff;
}
#toc .open ul {
background-color: #fff;
}
li img {
margin-left: 0px;
}
/*#toc li.open { background: #FFF;}*/
/* frameset: toc frame styles WEB AS. used for any document that uses the static model for TOC topics documents*/
#topicstoc {
padding: 0px 0px 0px;
}
#topicstoc p.download {
border-bottom: 1px solid #CCC;
padding: 5px 10px;
margin: 0px;
font-weight: normal; font-size: 11px;
}
#topicstoc h2 {
margin: 0;
padding: 10px;
font-size: 15px; font-weight: bold;
border-bottom: 0px solid;
}
#topicstoc h3 {
margin: 6px 5px 0 10px;
font-size: 13px; font-weight: bold; color: black;
}
#topicstoc h4 {
font-size: 11px; font-weight: bold; color: black;
margin: 2px 0px 0px 14px;
}
#topicstoc ul {
list-style: none outside;
margin-left: 13px; margin-bottom: -2px;
padding: 0px;
}
#topicstoc ul ul{
list-style: none outside;
margin-left: 10px; margin-bottom: -2px;
padding: 0px;
}
#topicstoc li{
font-weight: normal; font-size: 12px;
padding: 0px 5px 2px 10px;
list-style-type: none; background: url(../Images/bullet.gif) no-repeat 0px .5em;
}
#topicstoc li.intro {
font-weight: normal;
padding: 0px 0px;
list-style-type: none; background: none;
}
#topicstoc li a {
display: block;
padding: 0px 5px 0px 0px;
}
#topicstoc li a.location {
font-weight: bold; color: #000;
text-decoration: none;
}
#topicstoc li.intro a {
margin-left: -5px;
display: block;
}
img.toplevel { float: left; }
/* frameset: content frame */
BODY {
margin-top: 0;
color: #000;
font: 12px lucida grande, geneva, helvetica, arial, sans-serif;
}
/* frameset: H1,H2,H3,H4,H5,Head for code voice */
h1 {
margin-top: 1em;
margin-bottom: 25px;
font: bold 30px lucida grande, geneva, helvetica, arial, sans-serif;
color: #000;
}
h2 {
margin-top: 2.5em;
font-size: 24px;
color: #000;
padding-bottom: 2px; border-bottom: 1px solid black;
}
h3 {
margin-top: 2em;
margin-bottom: .5em;
font-size: 19px;
color: #000;
}
h3.tight {
margin-top: 3em;
margin-bottom: -.25em;
font-size: 19px;
color: #000;
}
h4 {
margin-top: 2em;
margin-bottom: .5em;
font-size: 15px;
color: #000;
}
h5 {
margin: 20 0 0 0;
padding: 0;
font-size: 13px;
color: #000;
}
.mach4{
margin-top: 40;
margin-bottom: 0;
padding-top: 0;
font: bold 16px lucida grande, geneva, helvetica, arial, sans-serif;
color: #000;
}
.mach5{
margin: 30 0 -9 0;
font: bold 13px lucida grande, geneva, helvetica, arial, sans-serif;
color: #000;
}
h5.tight{
margin: 1.5em 0 2px 0;
font: bold 13px lucida grande, geneva, helvetica, arial, sans-serif;
color: #000;
}
.code_head{
FONT-SIZE: 18px; FONT-FAMILY: monaco, courier, monospace; font-weight: bold;
}
p {
margin-top: 0px; margin-bottom: 10px; font: 12px lucida grande, geneva, helvetica, arial, sans-serif;
}
p.spaceabove {
margin-top: 13px; margin-bottom: 10px; font: 12px lucida grande, geneva, helvetica, arial, sans-serif;
}
p.spaceabovemethod {
font: 11px monaco, courier, monospace; margin-top: 13px; margin-bottom: 10px;
}
h3.tight + p {
margin-top: 13px; margin-bottom: 10px; font: 12px lucida grande, geneva, helvetica, arial, sans-serif;
}
h3.tight + p.spaceabovemethod {
font: 11px monaco, courier, monospace; margin-top: 13px; margin-bottom: 10px;
}
.content_text{
margin-top: 0px; margin-bottom: 10px; font: 12px lucida grande, geneva, helvetica, arial, sans-serif;
}
p.blockquote{
padding-left: 50pt;
padding-right: 50pt;
}
ul.availability {
list-style-type: none;
margin: 0 0 -10px 0;
}
.availability li {
margin: 2px 0 0 -6px;
}
/* frameset: content frame bold style for text*/
b{
font-family: lucida grande, geneva, helvetica, arial, sans-serif; font-size: 12px; font-weight: bold;
}
/* Used for text that is sligtly larger than bold text like lables and captions*/
.content_text_label{
font-family: lucida grande, geneva, helvetica, arial, sans-serif; font-size: 12px;
}
/* frameset: content frame italic style for text*/
i{
font-family: lucida grande, geneva, helvetica, arial, sans-serif; font-size: 12px; font-style: italic;
}
/* Used for reference heads in ProcedualC and AppleScript Language*/
.content_ref_head{
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
font-size: 16px; font-weight: bold; margin-top: 50px; padding-bottom: 4px; border-bottom: 1px solid black
}
.content_ref_head_code{
font-family: monaco, courier, monospace;
font-size: 16px; font-weight: bold; margin-top: 50px; padding-bottom: 4px; border-bottom: 1px solid black
}
/* frameset: page title */
.page_title{
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
font-size: 34px;
font-weight: bold;
color: #000000;
padding-top: 10px;
}
/* frameset: Unordered List */
ul.spaceabove {
list-style: square outside;
margin: 0 0 0 30px;
padding: 7 0 12px 6px;
}
ul {
list-style: square outside;
margin: 0 0 0 30px;
padding: 0 0 12px 6px;
}
li {
margin-top: 7px;
}
li p {
margin-top: 8px;
}
ul ul {
list-style: circle outside;
margin: 6 0 0 30px;
padding: 0 0 12px 6px;
}
ul.3head {
list-style: square outside;
margin: 0 0 0 20px;
padding: 0 0 0px 0px;
}
/* alternate mappings for 2nd level bulleted list that are still in testing phase*/
.nested li {
list-style-image: url(../Images/openbullet.gif);
list-style-position: outside;
}
ul.nested {
list-style: none;
margin: 6 0 0 30px;
}
ol {
list-style-type: decimal;
list-style-position: outside;
margin: 0 0 0 30px;
padding: 0 0 12px 6px;
}
ol ol {
list-style-type: lower-alpha;
list-style-position: outside;
margin: 7 0 0 30px;
padding: 0 0 12px 10px;
}
ul.simple-spaceabove {
list-style-type: none;
margin: 5 0 0 20px;
}
.simple-spaceabove li {
margin-top: 1px;
}
ul.simple {
list-style-type: none;
margin: 0 0 0 30px;
}
.simple li {
margin-top: -1px;
}
dl.table-display {
clear: both;
width: auto;
margin: 0;
padding: 0px;
}
.table-display dt {
width: 8em;
float: left;
margin: 0 0 0 0;
padding: .1em;
}
/* commented backslash hack for mac-ie5 \*/
dt { clear: both; }
.table-display dd {
float: left;
width: 80%;
margin: 0 0 0 0;
padding: .1em;
display: block;
}
.clear {
clear: both;
}
dl.termdef {
margin-top: 0px;
margin-bottom: 10px; }
.termdef dt {
margin-top: 0px; }
.termdef dd {
margin-left: 15px;
margin-top: 1px;
margin-bottom: 6px; }
.termdef p{
margin-left: 15px;
margin-top: -1px;
margin-bottom: 6px; }
h3.tight + dl.termdef {
margin-top: 13px;
margin-bottom: 10px; }
/* frameset: list items */
/* Everything in a list item is wrapped in an element now. */
/* First para in a list item should be inline, others should be block. */
li>p { display: inline }
li>p+p { display: block }
/* frameset: Index styles for docs */
/* frameset: Index styles for alpah listing */
.index_alpa{
font-size: 18px; padding-bottom: 5px; margin: 25px 0 15px; border-bottom: 1px solid #91969C; }
/* frameset: Index styles for singal and page range entries */
.libindex{
font-size: 12px; padding: 0 3px; background-color: #FFFFFF; margin: 0 3px; }
/* frameset: mini navigation style (Hide/Show TOC & next/prev) */
.mini_nav_text {
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
font-size: 9px;
font-weight: normal;
}
.breadcrumb {
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
font-size: 10px;
font-weight: normal;
margin-left: 10px;
margin-top: 8px;
}
/* ADC header/footer mappings for Getting Started */
/* header */
#adcnavheader td {
font: 10px lucida grande, geneva, helvetica, arial, sans-serif;
}
#adcnavheader input {
margin: 0 3px 0 0;
padding: 0;
}
#adcnavheader .textpadding {
padding-top: 2px;
vertical-align: middle;
}
#adcnavheader .searchbutton {
border: 0;
}
#adcnavheader h6 {
margin: 0;
padding: 0;
font: normal 12px lucida grande, geneva, helvetica, arial, sans-serif;
color: #000;
}
#adcnavheader form {
margin: 0;
}
/* footer */
#footer td, #footer p {
font-size: 10px;
}
/* Getting Started styles */
/* font definitions */
/* keep ".gettingstarted pre, code" above ".gettingstarted h1" below otherwise,
the main h1 tag above will be used instead of".gettingstarted h1" */
.gettingstarted pre, code {
font: 11px Monaco, Courier, monospace;
}
/* Added this style since the ADC template was trying to do this with a graphic (Note: their h2
attached to the image tag is only used by search engines; their h2 does not function if the
graphic is missing).--DA */
.gettingstarted h2 {
margin: 0;
margin-bottom: 15px;
padding: 0px;
font: bold 32px 'Lucida Grande', Geneva, Verdana, Arial, Helvetica, sans-serif;
color: #000;
}
.gettingstarted h3 {
margin: 0 0 5px 0;
padding: 0px;
font: bold 16px 'Lucida Grande', Geneva, Verdana, Arial, Helvetica, sans-serif;
color: #000;
}
.gettingstarted p + .gettingstarted h3 {
margin-top: 20px;
}
.gettingstarted ol + .gettingstarted h3 {
margin-top: 20px;
}
.gettingstarted ul + .gettingstarted h3 {
margin-top: 20px;
}
.gettingstarted h4 {
margin: 0px;
padding: 0px;
font: bold 12px 'Lucida Grande', Geneva, Verdana, Arial, Helvetica, sans-serif;
color: #000;
}
.gettingstarted h4 + .gettingstarted table {
margin-top: 10px;
}
.gettingstarted p {
margin-top: 0;
margin-bottom: 10px;
padding: 0;
font: 12px 'Lucida Grande', Geneva, Verdana, Arial, Helvetica, sans-serif;
color: #000;
}
.gettingstarted th {
font-weight: bold;
text-align: left;
}
/* list definitions */
.gettingstarted ul {
font: 12px 'Lucida Grande', Geneva, Verdana, Arial, Helvetica, sans-serif;
padding-left: 10px;
margin-top: 0;
margin-left: 10px;
margin-bottom: 10px;
list-style-type: none;
}
.gettingstarted li {
margin-top: 3px;
}
.gettingstarted ul li {
list-style: square outside;
margin: 0 0 0 30px;
padding: 0 0 4px 0;
}
.gettingstarted ul ul {
margin-left: 20px;
}
.gettingstarted ol {
font: 12px 'Lucida Grande', Geneva, Verdana, Arial, Helvetica, sans-serif;
margin-top: 0;
margin-left: 1.5em;
margin-bottom: 10px;
padding-left: 1.5em;
}
.gettingstarted ul.inline, .gettingstarted ol.inline, .gettingstarted p.inline {
margin-top: -7px;
}
/* table styles */
caption.tablecaption {
margin-bottom: 5px;
text-align: left;
}
.sourcecodebox {
border: 1px solid #c7cfd5;
background: #f1f5f9;
margin: 20px 0;
}
div.tableholder {
margin-top: 20px;
margin-bottom: 20px;
}
p.tableholder {
margin-bottom: 7px;
font: 12px lucida grande, geneva, helvetica, arial, sans-serif;
}
.graybox {
border-top: 1px solid #919699;
border-left: 1px solid #919699;
}
.graybox th {
padding: 4px 8px 4px 8px;
background: #E2E2E2;
font-size: 12px;
border-bottom: 1px solid #919699;
border-right: 1px solid #919699;
}
.graybox th p {
font-weight: bold;
margin-bottom: 0px;
}
.graybox td {
padding: 8px;
font-size: 12px;
text-align: left;
vertical-align: top;
border-bottom: 1px solid #919699;
border-right: 1px solid #919699;
}
.graybox td p {
margin-bottom: 0px;
}
.graybox td p + p {
margin-top: 5px;
}
.graybox td p + p + p {
margin-top: 5px;
}
/* footnote definitions */
.footnote h4, .footnote p {
color: #76797C;
font-size: 11px;
}
.gettingstarted .footnote {
font-size: 11px;
color: #76797C;
}
.notebox {
border: 1px solid #a1a5a9;
background-color: #f7f7f7;
margin: 20px 0;
padding: 0px 8px 1px 9px;
text-align: left;
}
.notebox p {
font: 12px lucida grande, geneva, helvetica, arial, sans-serif;
margin-top: 7px;
margin-bottom: 0px;
}
.importantbox {
border: 1px solid #111;
background-color: #e8e8e8;
margin: 20px 0;
padding: 0px 8px 1px 9px;
text-align: left;
}
.importantbox p {
font: 12px lucida grande, geneva, helvetica, arial, sans-serif;
margin-top: 7px;
margin-bottom: 0px;
}
.warningbox {
border: 1px solid #000;
background-color: #fff;
margin: 20px 0;
padding: 8px;
text-align: left;
}
.warningicon {
background-color: transparent;
padding-right: 10px;
float: left;
}
.warningbox p {
border-style: none;
font: 12px lucida grande, geneva, helvetica, arial, sans-serif;
margin: -8px 0 -8px 30px;
}
div.codesample {
margin: 20px 0;
}
.codesample pre {
font-size: 11px;
font-family: monaco, courier, monospace;
margin: -1px 4px -3px 6px;
white-space: pre;
}
.codesample span {
margin-right: 8px;
float: right;
}
p.codesample {
margin-top: 20px; margin-bottom: -15px; font: 12px lucida grande, geneva, helvetica, arial, sans-serif;
}
/* Controller Layer Bindings styles */
.class_binding_block {
}
.binding_category_block {
margin-left: 1em
}
.binding_category_name {
font-size: 24px; font-family: lucida grande, geneva, helvetica, arial, sans-serif; font-weight: bold; line-height: 35px; padding-bottom: 1px; border-top: 2px solid black
}
.binding_block {
margin-left: 2em
}
.binding_name {
font-size: 18px; font-family: monaco, courier, monospace; font-weight: 400; margin-top: 10px; margin-bottom: 12px; border-bottom: 1px solid #69f
}
.bindings_tablehead { font-size: 14px; font-family: lucida grande, geneva, helvetica, arial, sans-serif; font-weight: bold; position: relative; top: -5px; margin-left: -20px
}
.placeholder_options_block {
margin-left: 2em
}
.availabilityList {
border: none;
margin-top: 5px;
margin-bottom: 0px;
font-size: 12px;
text-align: left;
}
.availabilityItem {
margin-top: -15px;
margin-bottom: 15px;
padding-left: 78px;
}
.metadata_attributes_name {
font-size: 24px; font-family: lucida grande, geneva, helvetica, arial, sans-serif; font-weight: bold; padding-top: 5px; margin-bottom: -10px; border-top: 2px solid black
}
.metadata_attribute_name {
font-size: 18px; font-family: monaco, courier, monospace; font-weight: 400; margin-top: 10px; padding-bottom: 2px;
}
/* Spec Sheet Info Box */
/* Used in AppKit Obj-C, Appkit Java, Foundation Obj-C, and Foundation Java References */
.spec_sheet_info_box { margin-left: 1em }
/* This builds a table */
.specbox {
border-top: 1px solid #919699;
border-left: 1px solid #919699;
border-right: 1px solid #919699;
margin-bottom: 10px;
}
.specbox td {
padding: 8px;
font-size: 12px;
text-align: left;
vertical-align: top;
border-bottom: 1px solid #919699;
}
/* This alternates colors in up to six table rows (light blue for odd, white for even)*/
.specbox tr {
background: #F0F5F9;
}
.specbox tr + tr {
background: #FFFFFF;
}
.specbox tr + tr + tr {
background: #F0F5F9;
}
.specbox tr + tr + tr + tr {
background: #FFFFFF;
}
.specbox tr + tr + tr +tr + tr {
background: #F0F5F9;
}
.specbox tr + tr + tr + tr + tr + tr {
background: #FFFFFF;
}
/* informal protocol subtitling */
.protocol_subtitle {
margin-top: -25px;
margin-bottom: 25px;
font-size: 13px;
}
/* HeaderDoc headings */
.hd_tocAccess {
margin-left: 16px;
margin-top: 3px;
display: block;
font-weight: bold;
}
.hd_tocAccessSpace {
display: block;
font-size: 8px;
}
.hd_tocGroup {
margin-left: 8px;
margin-top: 5px;
display: block;
font-style: italic;
}
.hd_tocGroupSpace {
display: block;
font-size: 8px;
}
/* "Collection page" mappings */
.forums { margin-bottom: 5px;}
.forums b,
.forums a:link,
.forums a:visited { color: #017; font-family: lucida grande, geneva, helvetica, arial, sans-serif; font-size: 11px; font-weight: bold; line-height: 13px;}
.forums a:hover { color: #00F; text-decoration: underline; font-weight: bold;}
.collection { margin-bottom: 5px;}
.collection h3,
.collection a:link,
.collection a:visited { font-size: 13px; color: #76797C; padding-bottom: 2px; border-bottom: 1px dotted #a1a5a9; margin-bottom: 0px; margin-right: 3px;}
.collection a:hover { color: #00F; text-decoration: underline; font-weight: bold;}
.collection_title { width: 100%;
background-color: #7E91A4;
padding: 15px;
padding-right: 15px;
padding-bottom: 2px;
padding-left: 15px;
}
.collection_title a:link,
.collection_title a:visited { color: #E8F3FD; }
h1.collections {
margin-top: 0px;
margin-bottom: 25px;
font: bold 30px lucida grande, geneva, helvetica, arial, sans-serif;
color: #ffffff;
text-align: center; }
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 843 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 787 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 264 B

Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More