# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# ====================================
# The Default Settings for Chainsaw
# ====================================

# These next settings define the location and dimensions of the main
# window when it is first realized on startup
main.window.x=0
main.window.y=0
# default width and height to -1 will display the app at full screen resolution
main.window.width=-1
main.window.height=-1

# Note: order also implies visibility.  If the column does not exist in this array, it will not be shown
table.columns.order=ID,TIMESTAMP,MARKER,LEVEL,LOGGER,MESSAGE,THROWABLE,THREAD,NDC,CLASS,METHOD,FILE,LINE,MILLISDELTA
table.columns.widths=50,80,95,50,100,500,100,100,100,100,100,100,100,100

SavedConfigs.Size=0
DateFormat.1=HH:mm:ss
DateFormat.2=HH:mm

tabPlacement=1
statusBar=true
toolbar=true
showReceivers=false
confirmExit=true

# These are the default LogPanel settings
dateFormatPattern=HH:mm:ss
levelIcons=false
loggerPrecision=
toolTips=false
scrollToBottom=true
logTreePanelVisible=true
detailPaneVisible=true
highlightSearchMatchText=true
wrapMessage=true
searchResultsVisible=true
