# Source preferences dialog class definition for GDBtk.
# Copyright (C) 1998, 1999 Cygnus Solutions
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License (GPL) as published by
# the Free Software Foundation; either version 2 of the License, or (at
# your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.


itcl::class SrcPref {
  inherit ManagedWin ModalDialog

  private {
    variable _saved	;# These are the saved values...
    variable _new	;# These are the changed values
    variable _saved_disassembly_flavor
    variable _new_disassembly_flavor ""

    method _apply {}
    method _build_win {}
    method _cancel {}
    method _init_var {}
    method _pick {color win tag}
    method _save {}
    method _set_flavor {w new_mode}
    method cancel {}
  }

  public {
    method constructor {args}
  }
}

